/* * 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; }
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; }