ReactOS  0.4.12-dev-409-g9f418243
DriverTester.h File Reference
#include <windows.h>
#include <stdio.h>
#include <winternl.h>
Include dependency graph for DriverTester.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _SYSTEM_GDI_DRIVER_INFORMATION
 
struct  _OBJECT_NAME_INFORMATION
 

Macros

#define _WIN32_WINNT   0x0500
 
#define DRIVER_NAME   L"TestDriver"
 
#define STATUS_SUCCESS   ((NTSTATUS)0x00000000L)
 
#define STATUS_PRIVILEGE_NOT_HELD   ((NTSTATUS)0xC0000061L)
 
#define SystemLoadGdiDriverInformation   26
 
#define SystemExtendServiceTableInformation   38
 

Typedefs

typedef LONG NTSTATUS
 
typedef struct _SYSTEM_GDI_DRIVER_INFORMATION SYSTEM_GDI_DRIVER_INFORMATION
 
typedef struct _SYSTEM_GDI_DRIVER_INFORMATIONPSYSTEM_GDI_DRIVER_INFORMATION
 
typedef enum _OBJECT_INFORMATION_CLASS OBJECT_INFO_CLASS
 
typedef struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
 
typedef struct _OBJECT_NAME_INFORMATIONPOBJECT_NAME_INFORMATION
 

Enumerations

enum  _OBJECT_INFORMATION_CLASS {
  ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllTypesInformation,
  ObjectHandleInformation, ObjectBasicInformation = 0, ObjectTypeInformation = 2, ObjectBasicInformation,
  ObjectNameInformation, ObjectTypeInformation, ObjectTypesInformation, ObjectDataInformation
}
 

Functions

BOOL RegisterDriver (LPCWSTR lpDriverName, LPCWSTR lpPathName)
 
BOOL StartDriver (LPCWSTR lpDriverName)
 
BOOL StopDriver (LPCWSTR lpDriverName)
 
BOOL UnregisterDriver (LPCWSTR lpDriverName)
 
BOOL ConvertPath (LPCWSTR lpPath, LPWSTR lpDevice)
 
BOOL LoadVia_SystemLoadGdiDriverInformation (LPWSTR lpDriverPath)
 
BOOL LoadVia_SystemExtendServiceTableInformation (LPWSTR lpDriverPath)
 
BOOL NtStartDriver (LPCWSTR lpService)
 
BOOL NtStopDriver (LPCWSTR lpService)
 
NTSYSAPI NTSTATUS NTAPI NtSetSystemInformation (IN INT SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength)
 
NTSTATUS NtUnloadDriver (IN PUNICODE_STRING DriverServiceName)
 
NTSTATUS NtQueryObject (IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
 

Macro Definition Documentation

◆ _WIN32_WINNT

#define _WIN32_WINNT   0x0500

Definition at line 1 of file DriverTester.h.

◆ DRIVER_NAME

#define DRIVER_NAME   L"TestDriver"

Definition at line 6 of file DriverTester.h.

◆ STATUS_PRIVILEGE_NOT_HELD

#define STATUS_PRIVILEGE_NOT_HELD   ((NTSTATUS)0xC0000061L)

Definition at line 9 of file DriverTester.h.

◆ STATUS_SUCCESS

#define STATUS_SUCCESS   ((NTSTATUS)0x00000000L)

Definition at line 8 of file DriverTester.h.

◆ SystemExtendServiceTableInformation

#define SystemExtendServiceTableInformation   38

Definition at line 35 of file DriverTester.h.

◆ SystemLoadGdiDriverInformation

#define SystemLoadGdiDriverInformation   26

Definition at line 34 of file DriverTester.h.

Typedef Documentation

◆ NTSTATUS

typedef LONG NTSTATUS

Definition at line 11 of file DriverTester.h.

◆ OBJECT_INFO_CLASS

◆ OBJECT_NAME_INFORMATION

◆ POBJECT_NAME_INFORMATION

◆ PSYSTEM_GDI_DRIVER_INFORMATION

◆ SYSTEM_GDI_DRIVER_INFORMATION

Enumeration Type Documentation

◆ _OBJECT_INFORMATION_CLASS

Enumerator
ObjectBasicInformation 
ObjectNameInformation 
ObjectTypeInformation 
ObjectAllTypesInformation 
ObjectHandleInformation 
ObjectBasicInformation 
ObjectTypeInformation 
ObjectBasicInformation 
ObjectNameInformation 
ObjectTypeInformation 
ObjectTypesInformation 
ObjectDataInformation 

Definition at line 53 of file DriverTester.h.

Function Documentation

◆ ConvertPath()

BOOL ConvertPath ( LPCWSTR  lpPath,
LPWSTR  lpDevice 
)

Definition at line 56 of file undoc.c.

58 {
59  LPWSTR lpFullPath = NULL;
60  DWORD size;
61 
62  if (lpPath)
63  {
64  size = GetLongPathNameW(lpPath,
65  0,
66  0);
67  if (!size)
68  return FALSE;
69 
70  size = (size + 1) * sizeof(WCHAR);
71 
72  lpFullPath = HeapAlloc(GetProcessHeap(),
73  0,
74  size);
75  if (!lpFullPath)
76  return FALSE;
77 
78  if (GetLongPathNameW(lpPath,
79  lpFullPath,
80  size))
81  {
82  HANDLE hDevice;
85  DWORD len;
86 
87  hDevice = CreateFileW(lpFullPath,
89  0,
90  NULL,
93  NULL);
94 
95  HeapFree(GetProcessHeap(), 0, lpFullPath);
96 
97  if(hDevice == INVALID_HANDLE_VALUE)
98  {
99  wprintf(L"[%x] Failed to open %s\n", GetLastError(), DRIVER_NAME);
100  return FALSE;
101  }
102 
103  size = MAX_PATH * sizeof(WCHAR);
105  if (!pObjName)
106  return FALSE;
107 
108  Status = NtQueryObject(hDevice,
110  pObjName,
111  size,
112  &size);
113  if (Status == STATUS_SUCCESS)
114  {
115  len = pObjName->Name.Length / sizeof(WCHAR);
116  wcsncpy(lpDevice, pObjName->Name.Buffer, len);
117  lpDevice[len] = UNICODE_NULL;
118 
120 
121  return TRUE;
122  }
123 
125  }
126  }
127 
128  return FALSE;
129 }
#define TRUE
Definition: types.h:120
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG NTSTATUS
Definition: precomp.h:26
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define wprintf(...)
Definition: whoami.c:18
#define WCHAR
Definition: msvc.h:43
#define UNICODE_NULL
#define GENERIC_WRITE
Definition: nt_native.h:90
smooth NULL
Definition: ftsmooth.c:416
static POBJECTS_AND_NAME_A pObjName
Definition: security.c:77
#define OPEN_EXISTING
Definition: compat.h:426
DWORD WINAPI GetLongPathNameW(IN LPCWSTR lpszShortPath, OUT LPWSTR lpszLongPath, IN DWORD cchBuffer)
Definition: path.c:1455
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
NTSTATUS NtQueryObject(IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
static const WCHAR L[]
Definition: oid.c:1087
#define DRIVER_NAME
Definition: ext2fs.h:136
GLenum GLsizei len
Definition: glext.h:6722
#define GENERIC_READ
Definition: compat.h:124
Status
Definition: gdiplustypes.h:24
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
#define CreateFileW
Definition: compat.h:400
WCHAR * LPWSTR
Definition: xmlstorage.h:184
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by SneakyUndocumentedMethods().

◆ LoadVia_SystemExtendServiceTableInformation()

BOOL LoadVia_SystemExtendServiceTableInformation ( LPWSTR  lpDriverPath)

Definition at line 240 of file undoc.c.

241 {
244  DWORD bufSize;
245 
246  RtlInitUnicodeString(&Buffer, lpDriverPath);
247  bufSize = sizeof(UNICODE_STRING);
248 
249  if (SetPrivilege(TRUE))
250  {
252  &Buffer,
253  bufSize);
255  {
256  wprintf(L"SystemExtendServiceTableInformation can only be used in kmode.\n");
257  }
258  else if (Status == STATUS_SUCCESS)
259  {
260  wprintf(L"SystemExtendServiceTableInformation incorrectly loaded the driver\n");
262 
263  return TRUE;
264  }
265  else
266  {
268  wprintf(L"LoadVia_SystemExtendServiceTableInformation failed [%lu] - 0x%x\n", err, Status);
269  }
270 
272  }
273 
274  return FALSE;
275 }
#define STATUS_PRIVILEGE_NOT_HELD
Definition: DriverTester.h:9
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
#define wprintf(...)
Definition: whoami.c:18
GLuint GLsizei bufSize
Definition: glext.h:6040
Definition: bufpool.h:45
NTSYSAPI NTSTATUS NTAPI NtSetSystemInformation(IN INT SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength)
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1087
#define SystemExtendServiceTableInformation
Definition: DriverTester.h:35
#define err(...)
static BOOL SetPrivilege(BOOL bSet)
Definition: undoc.c:4
Status
Definition: gdiplustypes.h:24
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
Definition: driver.c:2142
struct _UNICODE_STRING UNICODE_STRING
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
return STATUS_SUCCESS
Definition: btrfs.c:2725

Referenced by SneakyUndocumentedMethods().

◆ LoadVia_SystemLoadGdiDriverInformation()

BOOL LoadVia_SystemLoadGdiDriverInformation ( LPWSTR  lpDriverPath)

Definition at line 199 of file undoc.c.

200 {
203  DWORD bufSize;
204 
206 
208  RtlInitUnicodeString(&Buffer.DriverName, lpDriverPath);
209 
210  if (SetPrivilege(TRUE))
211  {
213  &Buffer,
214  bufSize);
216  {
217  wprintf(L"SystemLoadGdiDriverInformation can only be used in kmode.\n");
218  }
219  else if (Status == STATUS_SUCCESS)
220  {
221  wprintf(L"SystemLoadGdiDriverInformation incorrectly loaded the driver\n");
222  NtUnloadDriver(&Buffer.DriverName);
223 
224  return TRUE;
225  }
226  else
227  {
229  wprintf(L"LoadVia_SystemLoadGdiDriverInformation failed [%lu]\n", err);
230  }
231 
233  }
234 
235  return FALSE;
236 }
#define STATUS_PRIVILEGE_NOT_HELD
Definition: DriverTester.h:9
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
#define ZeroMemory
Definition: winbase.h:1635
#define wprintf(...)
Definition: whoami.c:18
GLuint GLsizei bufSize
Definition: glext.h:6040
Definition: bufpool.h:45
NTSYSAPI NTSTATUS NTAPI NtSetSystemInformation(IN INT SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength)
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1087
#define err(...)
static BOOL SetPrivilege(BOOL bSet)
Definition: undoc.c:4
Status
Definition: gdiplustypes.h:24
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define SystemLoadGdiDriverInformation
Definition: DriverTester.h:34
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
Definition: driver.c:2142
struct _SYSTEM_GDI_DRIVER_INFORMATION SYSTEM_GDI_DRIVER_INFORMATION
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
return STATUS_SUCCESS
Definition: btrfs.c:2725

Referenced by SneakyUndocumentedMethods().

◆ NtQueryObject()

NTSTATUS NtQueryObject ( IN HANDLE  Handle,
IN OBJECT_INFO_CLASS  ObjectInformationClass,
OUT PVOID  ObjectInformation,
IN ULONG  ObjectInformationLength,
OUT PULONG  ReturnLength 
)

◆ NtSetSystemInformation()

◆ NtStartDriver()

BOOL NtStartDriver ( LPCWSTR  lpService)

Definition at line 133 of file undoc.c.

134 {
135  WCHAR szDriverPath[MAX_PATH];
136  UNICODE_STRING DriverPath;
137  NTSTATUS Status = -1;
138 
139  wcscpy(szDriverPath,
140  L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
141  wcscat(szDriverPath,
142  lpService);
143 
144  RtlInitUnicodeString(&DriverPath,
145  szDriverPath);
146 
147  if (SetPrivilege(TRUE))
148  {
149  Status = NtLoadDriver(&DriverPath);
150  if (Status != STATUS_SUCCESS)
151  {
153  wprintf(L"NtUnloadDriver failed [%lu]\n", err);
154  }
155 
157  }
158 
159  return (Status == STATUS_SUCCESS);
160 }
#define TRUE
Definition: types.h:120
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG NTSTATUS
Definition: precomp.h:26
#define wprintf(...)
Definition: whoami.c:18
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1087
#define err(...)
static BOOL SetPrivilege(BOOL bSet)
Definition: undoc.c:4
Status
Definition: gdiplustypes.h:24
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
return STATUS_SUCCESS
Definition: btrfs.c:2725
NTSTATUS NTAPI NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
Definition: driver.c:2081

Referenced by UndocumentedMethod().

◆ NtStopDriver()

BOOL NtStopDriver ( LPCWSTR  lpService)

Definition at line 164 of file undoc.c.

165 {
166  WCHAR szDriverPath[MAX_PATH];
167  UNICODE_STRING DriverPath;
168  NTSTATUS Status = -1;
169 
170  wcscpy(szDriverPath,
171  L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
172  wcscat(szDriverPath,
173  lpService);
174 
175  RtlInitUnicodeString(&DriverPath,
176  szDriverPath);
177 
178  if (SetPrivilege(TRUE))
179  {
180  Status = NtUnloadDriver(&DriverPath);
181  if (Status != STATUS_SUCCESS)
182  {
184  wprintf(L"NtUnloadDriver failed [%lu]\n", err);
185  }
186 
188  }
189 
190  return (Status == STATUS_SUCCESS);
191 }
#define TRUE
Definition: types.h:120
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG NTSTATUS
Definition: precomp.h:26
#define wprintf(...)
Definition: whoami.c:18
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1087
#define err(...)
static BOOL SetPrivilege(BOOL bSet)
Definition: undoc.c:4
Status
Definition: gdiplustypes.h:24
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
Definition: driver.c:2142
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
return STATUS_SUCCESS
Definition: btrfs.c:2725

Referenced by SneakyUndocumentedMethods(), and UndocumentedMethod().

◆ NtUnloadDriver()

NTSTATUS NtUnloadDriver ( IN PUNICODE_STRING  DriverServiceName)

Definition at line 2142 of file driver.c.

2143 {
2144  return IopUnloadDriver(DriverServiceName, FALSE);
2145 }
NTSTATUS NTAPI IopUnloadDriver(PUNICODE_STRING DriverServiceName, BOOLEAN UnloadPnpDrivers)
Definition: driver.c:1178

Referenced by LoadVia_SystemExtendServiceTableInformation(), LoadVia_SystemLoadGdiDriverInformation(), NtStopDriver(), ScmUnloadDriver(), and wmain().

◆ RegisterDriver()

BOOL RegisterDriver ( LPCWSTR  lpDriverName,
LPCWSTR  lpPathName 
)

Definition at line 5 of file umode.c.

7 {
8  SC_HANDLE hSCManager;
9  SC_HANDLE hService;
10 
12  NULL,
14  if (!hSCManager)
15  return FALSE;
16 
17 retry:
18  hService = CreateServiceW(hSCManager,
19  lpDriverName,
20  lpDriverName,
25  lpPathName,
26  NULL,
27  NULL,
28  NULL,
29  NULL,
30  NULL);
31 
32  if (hService)
33  {
34  CloseServiceHandle(hService);
36  return TRUE;
37  }
38  else
39  {
41 
43  {
45  goto retry;
46  }
47 
49 
50  // return TRUE if the driver is already registered
51  return (err == ERROR_SERVICE_EXISTS);
52  }
53 }
BOOL StopDriver(LPCWSTR lpDriverName)
Definition: umode.c:94
#define SERVICE_ERROR_NORMAL
Definition: cmtypes.h:980
#define TRUE
Definition: types.h:120
SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword)
Definition: scm.c:808
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define SERVICE_ALL_ACCESS
Definition: winsvc.h:62
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
smooth NULL
Definition: ftsmooth.c:416
#define ERROR_SERVICE_MARKED_FOR_DELETE
Definition: winerror.h:623
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ERROR_SERVICE_EXISTS
Definition: winerror.h:624
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2011
#define DRIVER_NAME
Definition: ext2fs.h:136
#define err(...)
SC_HANDLE hSCManager
Definition: sc.c:12
#define SC_MANAGER_ALL_ACCESS
Definition: winsvc.h:13
#define SERVICE_DEMAND_START
Definition: cmtypes.h:976
#define SERVICE_KERNEL_DRIVER
Definition: cmtypes.h:951

Referenced by Initialize().

◆ StartDriver()

BOOL StartDriver ( LPCWSTR  lpDriverName)

Definition at line 56 of file umode.c.

57 {
58  SC_HANDLE hSCManager;
59  SC_HANDLE hService;
60  BOOL bRet;
61 
63  NULL,
65  if (!hSCManager)
66  return FALSE;
67 
68  hService = OpenServiceW(hSCManager,
69  lpDriverName,
71  if (!hService)
72  {
74  return FALSE;
75  }
76 
77  bRet = StartServiceW(hService, 0, NULL);
78  if (!bRet)
79  {
81  {
82  wprintf(L"%s.sys already running\n", DRIVER_NAME);
83  bRet = TRUE;
84  }
85  }
86 
87  CloseServiceHandle(hService);
89 
90  return bRet;
91 }
#define TRUE
Definition: types.h:120
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define SERVICE_ALL_ACCESS
Definition: winsvc.h:62
#define wprintf(...)
Definition: whoami.c:18
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
Definition: scm.c:2103
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCWSTR *lpServiceArgVectors)
Definition: scm.c:2923
unsigned int BOOL
Definition: ntddk_ex.h:94
static const WCHAR L[]
Definition: oid.c:1087
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2011
#define DRIVER_NAME
Definition: ext2fs.h:136
SC_HANDLE hSCManager
Definition: sc.c:12
#define SC_MANAGER_ALL_ACCESS
Definition: winsvc.h:13
#define ERROR_SERVICE_ALREADY_RUNNING
Definition: winerror.h:607

◆ StopDriver()

BOOL StopDriver ( LPCWSTR  lpDriverName)

Definition at line 94 of file umode.c.

95 {
96  SC_HANDLE hSCManager;
97  SC_HANDLE hService;
99  BOOL bRet;
100 
102  NULL,
104  if (!hSCManager)
105  return FALSE;
106 
107  hService = OpenServiceW(hSCManager,
108  lpDriverName,
110  if (!hService)
111  {
113  return FALSE;
114  }
115 
116  bRet = ControlService(hService,
118  &serviceStatus);
119  if (!bRet)
120  {
122  {
123  wprintf(L"%s.sys wasn't running\n", DRIVER_NAME);
124  bRet = TRUE;
125  }
126  }
127 
128  CloseServiceHandle(hService);
130 
131  return bRet;
132 }
#define TRUE
Definition: types.h:120
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define SERVICE_ALL_ACCESS
Definition: winsvc.h:62
#define wprintf(...)
Definition: whoami.c:18
#define ERROR_SERVICE_NOT_ACTIVE
Definition: winerror.h:613
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
Definition: scm.c:2103
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
smooth NULL
Definition: ftsmooth.c:416
unsigned int BOOL
Definition: ntddk_ex.h:94
SERVICE_STATUS serviceStatus
Definition: tftpd.cpp:63
static const WCHAR L[]
Definition: oid.c:1087
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2011
#define DRIVER_NAME
Definition: ext2fs.h:136
SC_HANDLE hSCManager
Definition: sc.c:12
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
Definition: scm.c:619
#define SC_MANAGER_ALL_ACCESS
Definition: winsvc.h:13
#define SERVICE_CONTROL_STOP
Definition: winsvc.h:36

Referenced by RegisterDriver().

◆ UnregisterDriver()

BOOL UnregisterDriver ( LPCWSTR  lpDriverName)

Definition at line 135 of file umode.c.

136 {
137  SC_HANDLE hService;
138  SC_HANDLE hSCManager;
139  BOOL bRet;
140 
142  NULL,
144  if (!hSCManager)
145  return FALSE;
146 
147  hService = OpenServiceW(hSCManager,
148  lpDriverName,
150  if (!hService)
151  {
153  return FALSE;
154  }
155 
156  bRet = DeleteService(hService);
157 
158  CloseServiceHandle(hService);
160 
161  return bRet;
162 }
#define SERVICE_ALL_ACCESS
Definition: winsvc.h:62
BOOL WINAPI DeleteService(SC_HANDLE hService)
Definition: scm.c:916
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
Definition: scm.c:2103
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
smooth NULL
Definition: ftsmooth.c:416
unsigned int BOOL
Definition: ntddk_ex.h:94
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2011
SC_HANDLE hSCManager
Definition: sc.c:12
#define SC_MANAGER_ALL_ACCESS
Definition: winsvc.h:13

Referenced by UndocumentedMethod(), Uninitialize(), and UsermodeMethod().