| Код | #include <windows.h> #include <cstring> #include <cstdio> //------------------------------------------------------------------------- /* mingw32-g++ -Wall -o ./driver_install ./main.cpp */ //------------------------------------------------------------------------- void PrintError(DWORD errorCode) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | \ FORMAT_MESSAGE_FROM_SYSTEM, \ NULL,errorCode, \ MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), \ (LPTSTR)&lpMsgBuf,0,NULL \ ); printf("Error number %li: %s",errorCode,(char*)lpMsgBuf); LocalFree(lpMsgBuf); return; } //------------------------------------------------------------------------- int main(int argc,char** argv) { if(argc != 2) { printf("Argument is: \'install\' or \'uninstall\'"); return 1; } char pathToDriver[0xFF]; if(!::GetWindowsDirectory(&pathToDriver[0],0xFF)) { PrintError(::GetLastError()); return 1; } strcat(&pathToDriver[0],"\\system32\\drivers\\dlportio.sys"); SC_HANDLE database; if(!(database=::OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))) { PrintError(::GetLastError()); return 1; } SC_HANDLE driver; if(!strcmp(argv[1],"install")) { if((driver=::OpenService(database,"DLPORTIO",DELETE))) { printf("Driver already installed\n"); ::CloseServiceHandle(driver); ::CloseServiceHandle(database); return 2; } if(!(driver=::CreateService(database,"DLPORTIO", \ "DriverLINX Port I/O Driver", \ SC_MANAGER_CREATE_SERVICE, \ SERVICE_KERNEL_DRIVER, \ SERVICE_SYSTEM_START, \ SERVICE_ERROR_IGNORE, \ &pathToDriver[0], \ NULL,NULL,NULL,NULL,NULL)) \ ) { PrintError(::GetLastError()); ::CloseServiceHandle(database); return 1; } } else if(!strcmp(argv[1],"uninstall")) { if(!(driver=::OpenService(database,"DLPORTIO",DELETE))) { PrintError(::GetLastError()); ::CloseServiceHandle(database); return 1; } if(!::DeleteService(driver)) { PrintError(::GetLastError()); ::CloseServiceHandle(driver); ::CloseServiceHandle(database); return 1; } } else { printf("Argument is: \'install\' or \'uninstall\'"); return 1; } ::CloseServiceHandle(driver); ::CloseServiceHandle(database); return 0; }
|
ВотЪ, как-то так. У меня всё работает. |