+++ /dev/null
-#include "DriverTester.h"
-
-
-BOOL
-RegisterDriver(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);
- }
-}
-
-BOOL
-StartDriver(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;
-}
-
-BOOL
-StopDriver(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;
-}
-
-BOOL
-UnregisterDriver(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;
-}