招C++不,我跟他写的差不多,给钱就干:lol - bool Driver::load( std::string path, std::string deviceName, std::string symbolName, unsigned long startOptions ) { SC_HANDLE hSCManager = OpenSCManagerA(NULL, NULL, startOptions); if (!hSCManager) { m_error = GetLastError(); return false; } SC_HANDLE hService = CreateServiceA(hSCManager, m_serviceName.c_str(), m_serviceName.c_str(), SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, startOptions, SERVICE_ERROR_IGNORE, m_path.c_str(), 0, 0, 0, 0, 0); if (hService == NULL) { if (ERROR_SERVICE_EXISTS == GetLastError()) { hService = OpenServiceA(hSCManager, m_serviceName.c_str(), SERVICE_ALL_ACCESS); if (hService == NULL) { CloseServiceHandle(hSCManager); m_error = GetLastError(); return false; } } else { if (ERROR_SERVICE_MARKED_FOR_DELETE == GetLastError() || ERROR_DUPLICATE_SERVICE_NAME == GetLastError()) { hService = OpenServiceA(hSCManager, m_serviceName.c_str(), SERVICE_ALL_ACCESS); if (hService == NULL) { CloseServiceHandle(hSCManager); m_error = GetLastError(); return false; } SERVICE_STATUS status; ControlService(hService, SERVICE_CONTROL_STOP,&status); DeleteService(hService); CloseServiceHandle(hService); CloseServiceHandle(hSCManager); hSCManager = OpenSCManagerA(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hSCManager == NULL) { m_error = GetLastError(); return false; } hService = CreateServiceA(hSCManager, m_serviceName.c_str(), m_serviceName.c_str(), SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, startOptions, SERVICE_ERROR_IGNORE, m_path.c_str(), 0, 0, 0, 0, 0); if (hService == NULL) { CloseServiceHandle(hSCManager); m_error = GetLastError(); return false; } } else { m_path = ""; m_deviceHandle = NULL; CloseServiceHandle(hSCManager); m_error = GetLastError(); return false; } } } if (StartServiceA(hService, NULL, NULL) == 0) { if (ERROR_SERVICE_ALREADY_RUNNING != GetLastError()) { CloseServiceHandle(hService); CloseServiceHandle(hSCManager); m_path = ""; m_error = GetLastError(); return false; } } m_deviceHandle = CreateFileA(("\\\\." + m_symbolName).c_str(),GENERIC_READ|GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); if (m_deviceHandle == NULL) { SERVICE_STATUS status; ControlService(hService, SERVICE_CONTROL_STOP, &status); DeleteService(hService); CloseServiceHandle(hService); CloseServiceHandle(hSCManager); m_path = ""; m_error = GetLastError(); return false; } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return true; }
复制代码 |