예제 #1
0
/* 
 * SDIO_RegisterFunction - register a function driver
*/
SDIO_STATUS SDIO_RegisterFunction(PSDFUNCTION pFunction) {
    int error;
    SDIO_STATUS status;

    DBG_PRINT(SDDBG_TRACE, ("SDIO BusDriver - SDIO_RegisterFunction\n"));
    
        /* since we do PnP registration first, we need to check the version */
    if (!CHECK_FUNCTION_DRIVER_VERSION(pFunction)) {
        DBG_PRINT(SDDBG_ERROR, 
           ("SDIO Bus Driver: Function Major Version Mismatch (hcd = %d, bus driver = %d)\n",
           GET_SDIO_STACK_VERSION_MAJOR(pFunction), CT_SDIO_STACK_VERSION_MAJOR(g_Version)));
        return SDIO_STATUS_INVALID_PARAMETER;       
    }
    
    /* we are the exported verison, call the internal verison after registering with the bus
       we handle probes internally to the bus driver */
    if ((error = RegisterDriver(pFunction)) < 0) {
        DBG_PRINT(SDDBG_ERROR, 
            ("SDIO BusDriver - SDIO_RegisterFunction, failed to register with system bus driver: %d\n",
            error)); 
        status = OSErrorToSDIOError(error);       
    } else {
        status = _SDIO_RegisterFunction(pFunction);
        if (!SDIO_SUCCESS(status)) {
            UnregisterDriver(pFunction);   
        }
    }
    
    return status;
}
예제 #2
0
int main(int argc, char *argv[]) {
	if (argc != 2 || stricmp(INSTALL_COMMAND, argv[1]) != 0 && stricmp(UNINSTALL_COMMAND, argv[1]) != 0) {
		MessageBoxA(NULL, "Usage:\n  drvsetup install - install driver\n  drvsetup uninstall - uninstall driver\n", "Information", MB_OK | MB_ICONINFORMATION);
		return 1;
	}
	if (stricmp(UNINSTALL_COMMAND, argv[1]) == 0) {
		UnregisterDriver();
		char sysRoot[MAX_PATH];
		char pathName[MAX_PATH];
		GetEnvironmentVariableA("SYSTEMROOT", sysRoot, MAX_PATH);
		strncpy(pathName, sysRoot, MAX_PATH);
		strncat(pathName, "/SYSTEM32/mt32emu.dll", MAX_PATH);
		if (!DeleteFileA(pathName)) {
			// Driver can't be deleted, register pending deletion
			MoveFileExA(pathName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
		}
		return 0;
	}
	char sysRoot[MAX_PATH];
	char pathName[MAX_PATH];
	char oldName[MAX_PATH];
	GetEnvironmentVariableA("SYSTEMROOT", sysRoot, MAX_PATH);
	strncpy(pathName, sysRoot, MAX_PATH);
	strncat(pathName, "/SYSTEM32/mt32emu.dll", MAX_PATH);
	strncpy(oldName, sysRoot, MAX_PATH);
	strncat(oldName, "/SYSTEM32/mt32emu.old", MAX_PATH);
	DeleteFileA(oldName);
	MoveFileA(pathName, oldName);
	int setupPathLen = strrchr(argv[0], '\\') - argv[0];
	strncpy(oldName, argv[0], setupPathLen);
	oldName[setupPathLen] = 0;
	strncat(oldName, "/mt32emu.dll", MAX_PATH);
	CopyFileA(oldName, pathName, FALSE);
	RegisterDriver();
	return 0;
}