ReactOS 0.4.16-dev-747-gbc52d5f
fltsupport.c File Reference
#include <kmt_test.h>
#include "kmtest.h"
#include <kmt_public.h>
#include <ndk/setypes.h>
#include <assert.h>
#include <debug.h>
Include dependency graph for fltsupport.c:

Go to the source code of this file.

Classes

struct  _KMTFLT_MESSAGE_HEADER
 

Macros

#define KMT_FLT_USER_MODE
 

Typedefs

typedef struct _KMTFLT_MESSAGE_HEADER KMTFLT_MESSAGE_HEADER
 
typedef struct _KMTFLT_MESSAGE_HEADERPKMTFLT_MESSAGE_HEADER
 

Functions

KmtCloseService

Close the specified driver service handle

Parameters
ServiceHandlePointer to a variable containing the service handle. Will be set to NULL on success
Returns
Win32 error code
DWORD KmtpCreateService (IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, IN DWORD ServiceType, OUT SC_HANDLE *ServiceHandle)
 
KmtFltCreateService

Create the specified driver service and return a handle to it

Parameters
ServiceNameName of the service to create
ServicePathFile name of the driver, relative to the current directory
DisplayNameService display name
ServiceHandlePointer to a variable to receive the handle to the service
Returns
Win32 error code
DWORD KmtFltCreateService (_In_z_ PCWSTR ServiceName, _In_z_ PCWSTR DisplayName, _Out_ SC_HANDLE *ServiceHandle)
 
KmtFltDeleteService

Delete the specified filter driver

Parameters
ServiceNameIf *ServiceHandle is NULL, name of the service to delete
ServiceHandlePointer to a variable containing the service handle. Will be set to NULL on success
Returns
Win32 error code
DWORD KmtFltDeleteService (_In_opt_z_ PCWSTR ServiceName, _Inout_ SC_HANDLE *ServiceHandle)
 
KmtFltLoadDriver

Delete the specified filter driver

Returns
Win32 error code
DWORD KmtFltLoadDriver (_In_ BOOLEAN EnableDriverLoadPrivilege, _In_ BOOLEAN RestartIfRunning, _In_ BOOLEAN ConnectComms, _Out_ HANDLE *hPort)
 
KmtFltUnloadDriver

Unload the specified filter driver

Parameters
hPortHandle to the filter's comms port
DisonnectCommsTRUE to disconnect the comms connection before unloading
Returns
Win32 error code
DWORD KmtFltUnloadDriver (_In_ HANDLE *hPort, _In_ BOOLEAN DisonnectComms)
 
KmtFltConnectComms

Create a comms connection to the specified filter

Parameters
hPortHandle to the filter's comms port
Returns
Win32 error code
DWORD KmtFltConnectComms (_Out_ HANDLE *hPort)
 
KmtFltDisconnectComms

Disconenct from the comms port

Parameters
hPortHandle to the filter's comms port
Returns
Win32 error code
DWORD KmtFltDisconnectComms (_In_ HANDLE hPort)
 
KmtFltCloseService

Close the specified driver service handle

Parameters
ServiceHandlePointer to a variable containing the service handle. Will be set to NULL on success
Returns
Win32 error code
DWORD KmtFltCloseService (_Inout_ SC_HANDLE *ServiceHandle)
 
KmtFltRunKernelTest

Run the specified filter test part

Parameters
hPortHandle to the filter's comms port
TestNameName of the test to run
Returns
Win32 error code
DWORD KmtFltRunKernelTest (_In_ HANDLE hPort, _In_z_ PCSTR TestName)
 
KmtFltSendToDriver

Send an I/O control message with no arguments to the driver opened with KmtOpenDriver

Parameters
hPortHandle to the filter's comms port
MessageThe message to send to the filter
Returns
Win32 error code
DWORD KmtFltSendToDriver (_In_ HANDLE hPort, _In_ DWORD Message)
 
KmtFltSendStringToDriver

Send an I/O control message with a string argument to the driver opened with KmtOpenDriver

Parameters
hPortHandle to the filter's comms port
MessageThe message associated with the string
StringAn ANSI string to send to the filter
Returns
Win32 error code
DWORD KmtFltSendStringToDriver (_In_ HANDLE hPort, _In_ DWORD Message, _In_ PCSTR String)
 
KmtFltSendWStringToDriver

Send an I/O control message with a wide string argument to the driver opened with KmtOpenDriver

Parameters
hPortHandle to the filter's comms port
MessageThe message associated with the string
StringAn wide string to send to the filter
Returns
Win32 error code
DWORD KmtFltSendWStringToDriver (_In_ HANDLE hPort, _In_ DWORD Message, _In_ PCWSTR String)
 
KmtFltSendUlongToDriver

Send an I/O control message with an integer argument to the driver opened with KmtOpenDriver

Parameters
hPortHandle to the filter's comms port
MessageThe message associated with the value
ValueAn 32bit valueng to send to the filter
Returns
Win32 error code
DWORD KmtFltSendUlongToDriver (_In_ HANDLE hPort, _In_ DWORD Message, _In_ DWORD Value)
 
KmtSendBufferToDriver

Send an I/O control message with the specified arguments to the driver opened with KmtOpenDriver

Parameters
hPortHandle to the filter's comms port
MessageThe message associated with the value
InBufferPointer to a buffer to send to the filter
BufferSizeSize of the buffer pointed to by InBuffer
OutBufferPointer to a buffer to receive a response from the filter
OutBufferSizeSize of the buffer pointed to by OutBuffer
BytesReturnedNumber of bytes written in the reply buffer
Returns
Win32 error code
DWORD KmtFltSendBufferToDriver (_In_ HANDLE hPort, _In_ DWORD Message, _In_reads_bytes_(BufferSize) LPVOID InBuffer, _In_ DWORD BufferSize, _Out_writes_bytes_to_opt_(OutBufferSize, *BytesReturned) LPVOID OutBuffer, _In_ DWORD OutBufferSize, _Out_opt_ LPDWORD BytesReturned)
 
KmtFltAddAltitude

Sets up the mini-filter altitude data in the registry

Parameters
hPortThe altitude string to set
Returns
Win32 error code
DWORD KmtFltAddAltitude (_In_z_ LPWSTR Altitude)
 

Variables

HANDLE KmtestHandle
 
static WCHAR TestServiceName [MAX_PATH]
 

Macro Definition Documentation

◆ KMT_FLT_USER_MODE

#define KMT_FLT_USER_MODE

Definition at line 10 of file fltsupport.c.

Typedef Documentation

◆ KMTFLT_MESSAGE_HEADER

◆ PKMTFLT_MESSAGE_HEADER

Function Documentation

◆ KmtFltAddAltitude()

DWORD KmtFltAddAltitude ( _In_z_ LPWSTR  Altitude)

Definition at line 444 of file fltsupport.c.

446{
447 WCHAR DefaultInstance[128];
448 WCHAR KeyPath[256];
449 HKEY hKey = NULL;
450 HKEY hSubKey = NULL;
451 DWORD Zero = 0;
452 LONG Error;
453
454 StringCbCopyW(KeyPath, sizeof(KeyPath), L"SYSTEM\\CurrentControlSet\\Services\\");
455 StringCbCatW(KeyPath, sizeof(KeyPath), TestServiceName);
456 StringCbCatW(KeyPath, sizeof(KeyPath), L"\\Instances\\");
457
459 KeyPath,
460 0,
461 NULL,
464 NULL,
465 &hKey,
466 NULL);
467 if (Error != ERROR_SUCCESS)
468 {
469 return Error;
470 }
471
472 StringCbCopyW(DefaultInstance, sizeof(DefaultInstance), TestServiceName);
473 StringCbCatW(DefaultInstance, sizeof(DefaultInstance), L" Instance");
474
476 L"DefaultInstance",
477 0,
478 REG_SZ,
479 (LPBYTE)DefaultInstance,
480 (lstrlenW(DefaultInstance) + 1) * sizeof(WCHAR));
481 if (Error != ERROR_SUCCESS)
482 {
483 goto Quit;
484 }
485
486 Error = RegCreateKeyW(hKey, DefaultInstance, &hSubKey);
487 if (Error != ERROR_SUCCESS)
488 {
489 goto Quit;
490 }
491
492 Error = RegSetValueExW(hSubKey,
493 L"Altitude",
494 0,
495 REG_SZ,
497 (lstrlenW(Altitude) + 1) * sizeof(WCHAR));
498 if (Error != ERROR_SUCCESS)
499 {
500 goto Quit;
501 }
502
503 Error = RegSetValueExW(hSubKey,
504 L"Flags",
505 0,
506 REG_DWORD,
507 (LPBYTE)&Zero,
508 sizeof(DWORD));
509
510Quit:
511 if (hSubKey)
512 {
513 RegCloseKey(hSubKey);
514 }
515 if (hKey)
516 {
518 }
519
520 return Error;
521
522}
BOOL Error
Definition: chkdsk.c:66
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1201
#define lstrlenW
Definition: compat.h:750
IN PVCB IN VBO IN ULONG OUT PBCB OUT PVOID IN BOOLEAN IN BOOLEAN Zero
Definition: fatprocs.h:419
unsigned long DWORD
Definition: ntddk_ex.h:95
_Must_inspect_result_ _Inout_ PFLT_VOLUME _In_ PCUNICODE_STRING Altitude
Definition: fltkernel.h:1173
static WCHAR TestServiceName[MAX_PATH]
Definition: fltsupport.c:39
FxAutoRegKey hKey
#define REG_SZ
Definition: layer.c:22
#define KEY_CREATE_SUB_KEY
Definition: nt_native.h:1018
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_SET_VALUE
Definition: nt_native.h:1017
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define REG_DWORD
Definition: sdbapi.c:596
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define RegCreateKeyEx
Definition: winreg.h:501
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by START_TEST().

◆ KmtFltCloseService()

DWORD KmtFltCloseService ( _Inout_ SC_HANDLE *  ServiceHandle)

Definition at line 238 of file fltsupport.c.

240{
241 return KmtCloseService(ServiceHandle);
242}
DWORD KmtCloseService(IN OUT SC_HANDLE *ServiceHandle)
Definition: service.c:392

◆ KmtFltConnectComms()

DWORD KmtFltConnectComms ( _Out_ HANDLE hPort)

Definition at line 203 of file fltsupport.c.

205{
206 return KmtFltConnect(TestServiceName, hPort);
207}
DWORD KmtFltConnect(_In_z_ PCWSTR ServiceName, _Out_ HANDLE *hPort)
Definition: filter.c:119

Referenced by KmtFltLoadDriver(), and START_TEST().

◆ KmtFltCreateService()

DWORD KmtFltCreateService ( _In_z_ PCWSTR  ServiceName,
_In_z_ PCWSTR  DisplayName,
_Out_ SC_HANDLE *  ServiceHandle 
)

Definition at line 60 of file fltsupport.c.

64{
65 WCHAR ServicePath[MAX_PATH];
66
67 StringCbCopyW(ServicePath, sizeof(ServicePath), ServiceName);
68 StringCbCatW(ServicePath, sizeof(ServicePath), L"_drv.sys");
69
72
74 ServicePath,
75 DisplayName,
77 ServiceHandle);
78}
static WCHAR ServiceName[]
Definition: browser.c:19
#define MAX_PATH
Definition: compat.h:34
DWORD KmtpCreateService(IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, IN DWORD ServiceType, OUT SC_HANDLE *ServiceHandle)
Definition: service.c:414
#define SERVICE_FILE_SYSTEM_DRIVER
Definition: cmtypes.h:954

Referenced by START_TEST().

◆ KmtFltDeleteService()

DWORD KmtFltDeleteService ( _In_opt_z_ PCWSTR  ServiceName,
_Inout_ SC_HANDLE *  ServiceHandle 
)

Definition at line 94 of file fltsupport.c.

97{
98 return KmtDeleteService(ServiceName, ServiceHandle);
99}
DWORD KmtDeleteService(IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
Definition: service.c:356

Referenced by START_TEST().

◆ KmtFltDisconnectComms()

DWORD KmtFltDisconnectComms ( _In_ HANDLE  hPort)

Definition at line 220 of file fltsupport.c.

222{
223 return KmtFltDisconnect(hPort);
224}
DWORD KmtFltDisconnect(_In_ HANDLE hPort)
Definition: filter.c:151

Referenced by START_TEST().

◆ KmtFltLoadDriver()

DWORD KmtFltLoadDriver ( _In_ BOOLEAN  EnableDriverLoadPrivilege,
_In_ BOOLEAN  RestartIfRunning,
_In_ BOOLEAN  ConnectComms,
_Out_ HANDLE hPort 
)

Definition at line 109 of file fltsupport.c.

115{
116 DWORD Error;
117
118 if (EnableDriverLoadPrivilege)
119 {
120 BOOLEAN WasEnabled;
123 TRUE,
124 FALSE, // Enable in current process.
125 &WasEnabled));
126 if (Error)
127 return Error;
128 }
129
131 if ((Error == ERROR_SERVICE_ALREADY_RUNNING) && RestartIfRunning)
132 {
134 if (Error)
135 {
136 // TODO
137 __debugbreak();
138 }
139
141 }
142
143 if (Error)
144 return Error;
145
146 if (ConnectComms)
147 Error = KmtFltConnectComms(hPort);
148
149 return Error;
150}
unsigned char BOOLEAN
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
DWORD KmtFltConnectComms(_Out_ HANDLE *hPort)
Definition: fltsupport.c:203
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
DWORD KmtFltLoad(_In_z_ PCWSTR ServiceName)
Definition: filter.c:30
DWORD KmtFltUnload(_In_z_ PCWSTR ServiceName)
Definition: filter.c:336
#define SE_LOAD_DRIVER_PRIVILEGE
Definition: security.c:664
NTSYSAPI NTSTATUS NTAPI RtlAdjustPrivilege(_In_ ULONG Privilege, _In_ BOOLEAN NewValue, _In_ BOOLEAN ForThread, _Out_ PBOOLEAN OldValue)
#define ERROR_SERVICE_ALREADY_RUNNING
Definition: winerror.h:607

Referenced by START_TEST().

◆ KmtFltRunKernelTest()

DWORD KmtFltRunKernelTest ( _In_ HANDLE  hPort,
_In_z_ PCSTR  TestName 
)

Definition at line 257 of file fltsupport.c.

260{
261 return KmtFltSendStringToDriver(hPort, KMTFLT_RUN_TEST, TestName);
262}
DWORD KmtFltSendStringToDriver(_In_ HANDLE hPort, _In_ DWORD Message, _In_ PCSTR String)
Definition: fltsupport.c:301
#define KMTFLT_RUN_TEST
Definition: kmt_public.h:30

◆ KmtFltSendBufferToDriver()

DWORD KmtFltSendBufferToDriver ( _In_ HANDLE  hPort,
_In_ DWORD  Message,
_In_reads_bytes_(BufferSize) LPVOID  InBuffer,
_In_ DWORD  BufferSize,
_Out_writes_bytes_to_opt_(OutBufferSize, *BytesReturned) LPVOID  OutBuffer,
_In_ DWORD  OutBufferSize,
_Out_opt_ LPDWORD  BytesReturned 
)

Definition at line 380 of file fltsupport.c.

388{
393 DWORD Error;
394
395 assert(hPort);
396
397 if (BufferSize)
398 {
399 assert(InBuffer);
400
403 if (!Ptr)
404 {
406 }
408 }
409 else
410 {
412 Ptr = &Header;
413 }
414
415 Ptr->Message = Message;
416 if (BufferSize)
417 {
418 Ptr->Buffer = (Ptr + 1);
419 StringCbCopy(Ptr->Buffer, BufferSize, InBuffer);
420 Ptr->BufferSize = BufferSize;
421 }
422
424
425 if (FreeMemory)
426 {
428 }
429
430 return Error;
431}
static VOID FreeMemory(PCREATE_DATA Data)
Definition: create.c:134
Definition: Header.h:9
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define BufferSize
Definition: mmc.h:75
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static const WCHAR Message[]
Definition: register.c:74
#define assert(x)
Definition: debug.h:53
struct _KMTFLT_MESSAGE_HEADER KMTFLT_MESSAGE_HEADER
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
DWORD KmtFltSendMessage(_In_ HANDLE hPort, _In_reads_bytes_(dwInBufferSize) LPVOID InBuffer, _In_ DWORD InBufferSize, _Out_writes_bytes_to_opt_(dutBufferSize, *BytesReturned) LPVOID OutBuffer, _In_ DWORD OutBufferSize, _Out_opt_ LPDWORD BytesReturned)
Definition: filter.c:187
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
Definition: scsi.h:4071
#define StringCbCopy
Definition: strsafe.h:155
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
Definition: wdfiotarget.h:1052
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_In_ ULONG OutBufferSize
Definition: wdfwmi.h:87
_In_ ULONG InBufferSize
Definition: wdfwmi.h:106

Referenced by KmtFltSendStringToDriver(), KmtFltSendToDriver(), KmtFltSendUlongToDriver(), and KmtFltSendWStringToDriver().

◆ KmtFltSendStringToDriver()

DWORD KmtFltSendStringToDriver ( _In_ HANDLE  hPort,
_In_ DWORD  Message,
_In_ PCSTR  String 
)

Definition at line 301 of file fltsupport.c.

305{
306 assert(hPort);
307 assert(String);
309}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
DWORD KmtFltSendBufferToDriver(_In_ HANDLE hPort, _In_ DWORD Message, _In_reads_bytes_(BufferSize) LPVOID InBuffer, _In_ DWORD BufferSize, _Out_writes_bytes_to_opt_(OutBufferSize, *BytesReturned) LPVOID OutBuffer, _In_ DWORD OutBufferSize, _Out_opt_ LPDWORD BytesReturned)
Definition: fltsupport.c:380
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433

Referenced by KmtFltRunKernelTest().

◆ KmtFltSendToDriver()

DWORD KmtFltSendToDriver ( _In_ HANDLE  hPort,
_In_ DWORD  Message 
)

Definition at line 277 of file fltsupport.c.

280{
281 assert(hPort);
282 return KmtFltSendBufferToDriver(hPort, Message, NULL, 0, NULL, 0, NULL);
283}

◆ KmtFltSendUlongToDriver()

DWORD KmtFltSendUlongToDriver ( _In_ HANDLE  hPort,
_In_ DWORD  Message,
_In_ DWORD  Value 
)

Definition at line 349 of file fltsupport.c.

353{
354 return KmtFltSendBufferToDriver(hPort, Message, &Value, sizeof(Value), NULL, 0, NULL);
355}
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

◆ KmtFltSendWStringToDriver()

DWORD KmtFltSendWStringToDriver ( _In_ HANDLE  hPort,
_In_ DWORD  Message,
_In_ PCWSTR  String 
)

Definition at line 326 of file fltsupport.c.

330{
331 return KmtFltSendBufferToDriver(hPort, Message, (PVOID)String, (DWORD)wcslen(String) * sizeof(WCHAR), NULL, 0, NULL);
332}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

◆ KmtFltUnloadDriver()

DWORD KmtFltUnloadDriver ( _In_ HANDLE hPort,
_In_ BOOLEAN  DisonnectComms 
)

Definition at line 165 of file fltsupport.c.

168{
170
171 if (DisonnectComms)
172 {
173 Error = KmtFltDisconnect(hPort);
174
175 if (Error)
176 {
177 return Error;
178 }
179 }
180
182
183 if (Error)
184 {
185 // TODO
186 __debugbreak();
187 }
188
189 return Error;
190}

Referenced by START_TEST().

◆ KmtpCreateService()

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

Definition at line 414 of file service.c.

420{
422 WCHAR DriverPath[MAX_PATH];
424
425 assert(ServiceHandle);
426 assert(ServiceName && ServicePath);
427
428 if (!GetModuleFileName(NULL, DriverPath, sizeof DriverPath / sizeof DriverPath[0]))
430
431 assert(wcsrchr(DriverPath, L'\\') != NULL);
432 wcsrchr(DriverPath, L'\\')[1] = L'\0';
433
434 result = StringCbCatW(DriverPath, sizeof(DriverPath), ServicePath);
435 if (FAILED(result))
437
440
441 *ServiceHandle = CreateService(ScmHandle, ServiceName, DisplayName,
443 SERVICE_ERROR_NORMAL, DriverPath, NULL, NULL, NULL, NULL, NULL);
444
445 if (!*ServiceHandle)
447
448cleanup:
449 return Error;
450}
#define wcsrchr
Definition: compat.h:16
static void cleanup(void)
Definition: main.c:1335
GLuint64EXT * result
Definition: glext.h:11304
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define error_value_goto(Error, value, label)
Definition: kmtest.h:22
#define error_goto(Error, label)
Definition: kmtest.h:21
static SC_HANDLE ScmHandle
Definition: service.c:30
#define SERVICE_ACCESS
Definition: service.c:15
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define GetFileAttributes
Definition: winbase.h:3840
#define GetModuleFileName
Definition: winbase.h:3856
#define CreateService
Definition: winsvc.h:569
#define SERVICE_DEMAND_START
Definition: cmtypes.h:978
#define SERVICE_ERROR_NORMAL
Definition: cmtypes.h:982

Referenced by KmtCreateService(), and KmtFltCreateService().

Variable Documentation

◆ KmtestHandle

HANDLE KmtestHandle
extern

Definition at line 32 of file kmtest.c.

◆ TestServiceName