ReactOS  0.4.14-dev-317-g96040ec
kmtest.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define KMT_STRINGIZE(x)   #x
 
#define location(file, line)   do { ErrorFileAndLine = file ":" KMT_STRINGIZE(line); } while (0)
 
#define error_value(Error, value)   do { location(__FILE__, __LINE__); Error = value; } while (0)
 
#define error(Error)   error_value(Error, GetLastError())
 
#define error_goto(Error, label)   do { error(Error); goto label; } while (0)
 
#define error_value_goto(Error, value, label)   do { error_value(Error, value); goto label; } while (0)
 

Functions

DWORD KmtServiceInit (VOID)
 
DWORD KmtServiceCleanup (BOOLEAN IgnoreErrors)
 
DWORD KmtCreateService (IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, OUT SC_HANDLE *ServiceHandle)
 
DWORD KmtStartService (IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
 
DWORD KmtCreateAndStartService (IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, OUT SC_HANDLE *ServiceHandle, IN BOOLEAN RestartIfRunning)
 
DWORD KmtStopService (IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
 
DWORD KmtDeleteService (IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
 
DWORD KmtCloseService (IN OUT SC_HANDLE *ServiceHandle)
 

Variables

PCSTR ErrorFileAndLine
 

Macro Definition Documentation

◆ error

#define error (   Error)    error_value(Error, GetLastError())

Definition at line 20 of file kmtest.h.

◆ error_goto

#define error_goto (   Error,
  label 
)    do { error(Error); goto label; } while (0)

Definition at line 21 of file kmtest.h.

◆ error_value

#define error_value (   Error,
  value 
)    do { location(__FILE__, __LINE__); Error = value; } while (0)

Definition at line 19 of file kmtest.h.

◆ error_value_goto

#define error_value_goto (   Error,
  value,
  label 
)    do { error_value(Error, value); goto label; } while (0)

Definition at line 22 of file kmtest.h.

◆ KMT_STRINGIZE

#define KMT_STRINGIZE (   x)    #x

Definition at line 15 of file kmtest.h.

◆ location

#define location (   file,
  line 
)    do { ErrorFileAndLine = file ":" KMT_STRINGIZE(line); } while (0)

Definition at line 18 of file kmtest.h.

Function Documentation

◆ KmtCloseService()

DWORD KmtCloseService ( IN OUT SC_HANDLE *  ServiceHandle)

Definition at line 392 of file service.c.

394 {
396 
397  assert(ServiceHandle);
398 
399  if (*ServiceHandle && !CloseServiceHandle(*ServiceHandle))
401 
402  *ServiceHandle = NULL;
403 
404 cleanup:
405  return Error;
406 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error_goto(Error, label)
Definition: kmtest.h:21
#define assert(x)
Definition: debug.h:53
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
char * cleanup(char *str)
Definition: wpickclick.c:99

Referenced by KmtFltCloseService(), and main().

◆ KmtCreateAndStartService()

DWORD KmtCreateAndStartService ( IN PCWSTR  ServiceName,
IN PCWSTR  ServicePath,
IN PCWSTR DisplayName  OPTIONAL,
OUT SC_HANDLE *  ServiceHandle,
IN BOOLEAN  RestartIfRunning 
)

Definition at line 262 of file service.c.

268 {
270 
271  assert(ServiceHandle);
272 
273  Error = KmtCreateService(ServiceName, ServicePath, DisplayName, ServiceHandle);
274 
275  if (Error && Error != ERROR_SERVICE_EXISTS)
276  goto cleanup;
277 
278  Error = KmtStartService(ServiceName, ServiceHandle);
279 
281  goto cleanup;
282 
284 
285  if (!RestartIfRunning)
286  goto cleanup;
287 
288  Error = KmtStopService(ServiceName, ServiceHandle);
289  if (Error)
290  goto cleanup;
291 
292  Error = KmtStartService(ServiceName, ServiceHandle);
293  if (Error)
294  goto cleanup;
295 
296 cleanup:
297  assert(Error || *ServiceHandle);
298  return Error;
299 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define assert(x)
Definition: debug.h:53
DWORD KmtStartService(IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
Definition: service.c:217
LPTSTR ServiceName
Definition: ServiceMain.c:15
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
#define ERROR_SERVICE_EXISTS
Definition: winerror.h:624
DWORD KmtStopService(IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
Definition: service.c:315
DWORD KmtCreateService(IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, OUT SC_HANDLE *ServiceHandle)
Definition: service.c:92
char * cleanup(char *str)
Definition: wpickclick.c:99
#define ERROR_SERVICE_ALREADY_RUNNING
Definition: winerror.h:607

Referenced by KmtLoadDriver(), and main().

◆ KmtCreateService()

DWORD KmtCreateService ( IN PCWSTR  ServiceName,
IN PCWSTR  ServicePath,
IN PCWSTR DisplayName  OPTIONAL,
OUT SC_HANDLE *  ServiceHandle 
)

Definition at line 92 of file service.c.

97 {
99  ServicePath,
100  DisplayName,
102  ServiceHandle);
103 }
DWORD KmtpCreateService(IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, IN DWORD ServiceType, OUT SC_HANDLE *ServiceHandle)
Definition: service.c:414
LPTSTR ServiceName
Definition: ServiceMain.c:15
#define SERVICE_KERNEL_DRIVER
Definition: cmtypes.h:951

Referenced by KmtCreateAndStartService(), and main().

◆ KmtDeleteService()

DWORD KmtDeleteService ( IN PCWSTR ServiceName  OPTIONAL,
IN OUT SC_HANDLE *  ServiceHandle 
)

Definition at line 356 of file service.c.

359 {
361 
362  assert(ServiceHandle);
363  assert(ServiceName || *ServiceHandle);
364 
365  if (!*ServiceHandle)
366  *ServiceHandle = OpenService(ScmHandle, ServiceName, SERVICE_ACCESS);
367 
368  if (!*ServiceHandle)
370 
371  if (!DeleteService(*ServiceHandle))
373 
374  if (*ServiceHandle)
375  CloseServiceHandle(*ServiceHandle);
376 
377 cleanup:
378  return Error;
379 }
#define SERVICE_ACCESS
Definition: service.c:15
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error_goto(Error, label)
Definition: kmtest.h:21
#define assert(x)
Definition: debug.h:53
BOOL WINAPI DeleteService(SC_HANDLE hService)
Definition: scm.c:916
#define OpenService
Definition: winsvc.h:576
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
LPTSTR ServiceName
Definition: ServiceMain.c:15
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
char * cleanup(char *str)
Definition: wpickclick.c:99
static SC_HANDLE ScmHandle
Definition: service.c:30

Referenced by KmtFltDeleteService(), and main().

◆ KmtServiceCleanup()

DWORD KmtServiceCleanup ( BOOLEAN  IgnoreErrors)

Definition at line 64 of file service.c.

66 {
68 
69  if (ScmHandle && !CloseServiceHandle(ScmHandle) && !IgnoreErrors)
70  error(Error);
71 
72  return Error;
73 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:577
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static SC_HANDLE ScmHandle
Definition: service.c:30

Referenced by main().

◆ KmtServiceInit()

DWORD KmtServiceInit ( VOID  )

Definition at line 40 of file service.c.

41 {
43 
44  assert(!ScmHandle);
45 
47  if (!ScmHandle)
48  error(Error);
49 
50  return Error;
51 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
#define assert(x)
Definition: debug.h:53
smooth NULL
Definition: ftsmooth.c:416
#define SC_MANAGER_CREATE_SERVICE
Definition: winsvc.h:15
#define OpenSCManager
Definition: winsvc.h:575
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static SC_HANDLE ScmHandle
Definition: service.c:30

Referenced by main().

◆ KmtStartService()

DWORD KmtStartService ( IN PCWSTR ServiceName  OPTIONAL,
IN OUT SC_HANDLE *  ServiceHandle 
)

Definition at line 217 of file service.c.

220 {
222 
223  assert(ServiceHandle);
224  assert(ServiceName || *ServiceHandle);
225 
226  if (!*ServiceHandle)
227  *ServiceHandle = OpenService(ScmHandle, ServiceName, SERVICE_ACCESS);
228 
229  if (!*ServiceHandle)
231 
232  if (!StartService(*ServiceHandle, 0, NULL))
234 
236  if (Error)
237  goto cleanup;
238 
239 cleanup:
240  return Error;
241 }
#define StartService
Definition: winsvc.h:585
#define SERVICE_ACCESS
Definition: service.c:15
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error_goto(Error, label)
Definition: kmtest.h:21
#define assert(x)
Definition: debug.h:53
#define OpenService
Definition: winsvc.h:576
#define SERVICE_RUNNING
Definition: winsvc.h:24
smooth NULL
Definition: ftsmooth.c:416
LPTSTR ServiceName
Definition: ServiceMain.c:15
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static DWORD KmtEnsureServiceState(IN PCWSTR ServiceName OPTIONAL, IN SC_HANDLE ServiceHandle, IN DWORD ExpectedServiceState)
Definition: service.c:155
char * cleanup(char *str)
Definition: wpickclick.c:99
static SC_HANDLE ScmHandle
Definition: service.c:30

Referenced by KmtCreateAndStartService().

◆ KmtStopService()

DWORD KmtStopService ( IN PCWSTR ServiceName  OPTIONAL,
IN OUT SC_HANDLE *  ServiceHandle 
)

Definition at line 315 of file service.c.

318 {
321 
322  assert(ServiceHandle);
323  assert(ServiceName || *ServiceHandle);
324 
325  if (!*ServiceHandle)
326  *ServiceHandle = OpenService(ScmHandle, ServiceName, SERVICE_ACCESS);
327 
328  if (!*ServiceHandle)
330 
331  if (!ControlService(*ServiceHandle, SERVICE_CONTROL_STOP, &ServiceStatus))
333 
335  if (Error)
336  goto cleanup;
337 
338 cleanup:
339  return Error;
340 }
#define SERVICE_ACCESS
Definition: service.c:15
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error_goto(Error, label)
Definition: kmtest.h:21
static SERVICE_STATUS ServiceStatus
Definition: dcomlaunch.c:27
#define assert(x)
Definition: debug.h:53
#define OpenService
Definition: winsvc.h:576
#define SERVICE_STOPPED
Definition: winsvc.h:21
LPTSTR ServiceName
Definition: ServiceMain.c:15
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static DWORD KmtEnsureServiceState(IN PCWSTR ServiceName OPTIONAL, IN SC_HANDLE ServiceHandle, IN DWORD ExpectedServiceState)
Definition: service.c:155
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
Definition: scm.c:619
char * cleanup(char *str)
Definition: wpickclick.c:99
#define SERVICE_CONTROL_STOP
Definition: winsvc.h:36
static SC_HANDLE ScmHandle
Definition: service.c:30

Referenced by KmtCreateAndStartService(), KmtUnloadDriver(), and main().

Variable Documentation

◆ ErrorFileAndLine

PCSTR ErrorFileAndLine

Definition at line 34 of file kmtest.c.

Referenced by OutputError().