Something went wrong. Try again.
Reactos
Something went wrong. Try again.
3.8 kB · 162 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163#include "DriverTester.h"
BOOLRegisterDriver(LPCWSTR lpDriverName, LPCWSTR lpPathName){ SC_HANDLE hSCManager; SC_HANDLE hService;
hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) return FALSE;
retry: hService = CreateServiceW(hSCManager, lpDriverName, lpDriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, lpPathName, NULL, NULL, NULL, NULL, NULL);
if (hService) { CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return TRUE; } else { DWORD err = GetLastError();
if (err == ERROR_SERVICE_MARKED_FOR_DELETE) { StopDriver(DRIVER_NAME); goto retry; }
CloseServiceHandle(hSCManager);
// return TRUE if the driver is already registered return (err == ERROR_SERVICE_EXISTS); }}
BOOLStartDriver(LPCWSTR lpDriverName){ SC_HANDLE hSCManager; SC_HANDLE hService; BOOL bRet;
hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) return FALSE;
hService = OpenServiceW(hSCManager, lpDriverName, SERVICE_ALL_ACCESS); if (!hService) { CloseServiceHandle(hSCManager); return FALSE; }
bRet = StartServiceW(hService, 0, NULL); if (!bRet) { if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) { wprintf(L"%s.sys already running\n", DRIVER_NAME); bRet = TRUE; } }
CloseServiceHandle(hService); CloseServiceHandle(hSCManager);
return bRet;}
BOOLStopDriver(LPCWSTR lpDriverName){ SC_HANDLE hSCManager; SC_HANDLE hService; SERVICE_STATUS serviceStatus; BOOL bRet;
hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) return FALSE;
hService = OpenServiceW(hSCManager, lpDriverName, SERVICE_ALL_ACCESS); if (!hService) { CloseServiceHandle(hSCManager); return FALSE; }
bRet = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus); if (!bRet) { if (GetLastError() == ERROR_SERVICE_NOT_ACTIVE) { wprintf(L"%s.sys wasn't running\n", DRIVER_NAME); bRet = TRUE; } }
CloseServiceHandle(hService); CloseServiceHandle(hSCManager);
return bRet;}
BOOLUnregisterDriver(LPCWSTR lpDriverName){ SC_HANDLE hService; SC_HANDLE hSCManager; BOOL bRet;
hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) return FALSE;
hService = OpenServiceW(hSCManager, lpDriverName, SERVICE_ALL_ACCESS); if (!hService) { CloseServiceHandle(hSCManager); return FALSE; }
bRet = DeleteService(hService);
CloseServiceHandle(hService); CloseServiceHandle(hSCManager);
return bRet;}