ReactOS  0.4.14-dev-614-gbfd8a84
support.c File Reference
#include <kmt_test.h>
#include "kmtest.h"
#include <kmt_public.h>
#include <assert.h>
#include <debug.h>
Include dependency graph for support.c:

Go to the source code of this file.

Functions

KmtUserCallbackThread

Thread routine which awaits callback requests from kernel-mode

Returns
Win32 error code
DWORD WINAPI KmtUserCallbackThread (PVOID Parameter)
 
KmtLoadDriver

Load the specified special-purpose driver (create/start the service)

Parameters
ServiceNameName of the driver service (Kmtest- prefix will be added automatically)
RestartIfRunningTRUE to stop and restart the service if it is already running
VOID KmtLoadDriver (IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning)
 
KmtUnloadDriver

Unload special-purpose driver (stop the service)

VOID KmtUnloadDriver (VOID)
 
KmtOpenDriver

Open special-purpose driver (acquire a device handle)

VOID KmtOpenDriver (VOID)
 
KmtCloseDriver

Close special-purpose driver (close device handle)

VOID KmtCloseDriver (VOID)
 
KmtSendToDriver

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

Parameters
ControlCode
Returns
Win32 error code as returned by DeviceIoControl
DWORD KmtSendToDriver (IN DWORD ControlCode)
 
KmtSendStringToDriver

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

Parameters
ControlCode
String
Returns
Win32 error code as returned by DeviceIoControl
DWORD KmtSendStringToDriver (IN DWORD ControlCode, IN PCSTR String)
 
KmtSendWStringToDriver

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

Parameters
ControlCode
String
Returns
Win32 error code as returned by DeviceIoControl
DWORD KmtSendWStringToDriver (IN DWORD ControlCode, IN PCWSTR String)
 
KmtSendUlongToDriver

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

Parameters
ControlCode
Value
Returns
Win32 error code as returned by DeviceIoControl
DWORD KmtSendUlongToDriver (IN DWORD ControlCode, IN DWORD Value)
 
KmtSendBufferToDriver

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

Parameters
ControlCode
Buffer
InLength
OutLength
Returns
Win32 error code as returned by DeviceIoControl
DWORD KmtSendBufferToDriver (IN DWORD ControlCode, IN OUT PVOID Buffer OPTIONAL, IN DWORD InLength, IN OUT PDWORD OutLength)
 

Variables

HANDLE KmtestHandle
 

KmtRunKernelTest

Run the specified kernel-mode test part

Parameters
TestNameName of the test to run
Returns
Win32 error code as returned by DeviceIoControl
static WCHAR TestServiceName [MAX_PATH]
 
static SC_HANDLE TestServiceHandle
 
static HANDLE TestDeviceHandle
 
DWORD KmtRunKernelTest (IN PCSTR TestName)
 

Function Documentation

◆ KmtCloseDriver()

VOID KmtCloseDriver ( VOID  )

Definition at line 200 of file support.c.

201 {
203 
205  error(Error);
206 
207  if (Error)
208  {
209  // TODO
210  __debugbreak();
211  }
212 }
#define CloseHandle
Definition: compat.h:406
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
static HANDLE TestDeviceHandle
Definition: support.c:114
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66

Referenced by START_TEST(), and UnloadTcpIpTestDriver().

◆ KmtLoadDriver()

VOID KmtLoadDriver ( IN PCWSTR  ServiceName,
IN BOOLEAN  RestartIfRunning 
)

Definition at line 127 of file support.c.

130 {
132  WCHAR ServicePath[MAX_PATH];
133 
134  StringCbCopyW(ServicePath, sizeof(ServicePath), ServiceName);
135  StringCbCatW(ServicePath, sizeof(ServicePath), L"_drv.sys");
136 
137  StringCbCopyW(TestServiceName, sizeof(TestServiceName), L"Kmtest-");
139 
140  Error = KmtCreateAndStartService(TestServiceName, ServicePath, NULL, &TestServiceHandle, RestartIfRunning);
141 
142  if (Error)
143  {
144  // TODO
145  __debugbreak();
146  }
147 }
#define ERROR_SUCCESS
Definition: deptool.c:10
static WCHAR TestServiceName[MAX_PATH]
Definition: support.c:112
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
static SC_HANDLE TestServiceHandle
Definition: support.c:113
smooth NULL
Definition: ftsmooth.c:416
LPTSTR ServiceName
Definition: ServiceMain.c:15
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static const WCHAR L[]
Definition: oid.c:1250
DWORD KmtCreateAndStartService(IN PCWSTR ServiceName, IN PCWSTR ServicePath, IN PCWSTR DisplayName OPTIONAL, OUT SC_HANDLE *ServiceHandle, IN BOOLEAN RestartIfRunning)
Definition: service.c:262
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166

Referenced by LoadTcpIpTestDriver(), and START_TEST().

◆ KmtOpenDriver()

VOID KmtOpenDriver ( VOID  )

Definition at line 174 of file support.c.

175 {
177  WCHAR DevicePath[MAX_PATH];
178 
179  StringCbCopyW(DevicePath, sizeof(DevicePath), L"\\\\.\\Global\\GLOBALROOT\\Device\\");
180  StringCbCatW(DevicePath, sizeof(DevicePath), TestServiceName);
181 
184  error(Error);
185 
186  if (Error)
187  {
188  // TODO
189  __debugbreak();
190  }
191 
192 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
static WCHAR TestServiceName[MAX_PATH]
Definition: support.c:112
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
#define GENERIC_WRITE
Definition: nt_native.h:90
smooth NULL
Definition: ftsmooth.c:416
#define OPEN_EXISTING
Definition: compat.h:434
__wchar_t WCHAR
Definition: xmlstorage.h:180
static HANDLE TestDeviceHandle
Definition: support.c:114
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
static const WCHAR L[]
Definition: oid.c:1250
#define GENERIC_READ
Definition: compat.h:124
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166

Referenced by LoadTcpIpTestDriver(), and START_TEST().

◆ KmtRunKernelTest()

DWORD KmtRunKernelTest ( IN PCSTR  TestName)

Definition at line 94 of file support.c.

96 {
97  HANDLE CallbackThread;
100 
101  CallbackThread = CreateThread(NULL, 0, KmtUserCallbackThread, NULL, 0, NULL);
102 
104  error(Error);
105 
106  if (CallbackThread != NULL)
107  CloseHandle(CallbackThread);
108 
109  return Error;
110 }
#define CloseHandle
Definition: compat.h:406
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
HANDLE KmtestHandle
Definition: kmtest.c:32
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:136
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
DWORD WINAPI KmtUserCallbackThread(PVOID Parameter)
Definition: support.c:28
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
#define IOCTL_KMTEST_RUN_TEST
Definition: kmt_public.h:16
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
Definition: fltkernel.h:1255

Referenced by RunTest(), and START_TEST().

◆ KmtSendBufferToDriver()

DWORD KmtSendBufferToDriver ( IN DWORD  ControlCode,
IN OUT PVOID Buffer  OPTIONAL,
IN DWORD  InLength,
IN OUT PDWORD  OutLength 
)

Definition at line 325 of file support.c.

330 {
331  assert(OutLength);
332  assert(Buffer || (!InLength && !*OutLength));
333  assert(ControlCode < 0x400);
334 
335  if (!DeviceIoControl(TestDeviceHandle, KMT_MAKE_CODE(ControlCode), Buffer, InLength, Buffer, *OutLength, OutLength, NULL))
336  return GetLastError();
337 
338  return ERROR_SUCCESS;
339 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
smooth NULL
Definition: ftsmooth.c:416
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
Definition: wmitypes.h:55
Definition: bufpool.h:45
#define KMT_MAKE_CODE(ControlCode)
Definition: kmt_test.h:265
static HANDLE TestDeviceHandle
Definition: support.c:114
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136

Referenced by START_TEST().

◆ KmtSendStringToDriver()

DWORD KmtSendStringToDriver ( IN DWORD  ControlCode,
IN PCSTR  String 
)

Definition at line 248 of file support.c.

251 {
253 
254  assert(ControlCode < 0x400);
255 
257  return GetLastError();
258 
259  return ERROR_SUCCESS;
260 }
#define ERROR_SUCCESS
Definition: deptool.c:10
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static WCHAR String[]
Definition: stringtable.c:55
smooth NULL
Definition: ftsmooth.c:416
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
Definition: wmitypes.h:55
#define KMT_MAKE_CODE(ControlCode)
Definition: kmt_test.h:265
static HANDLE TestDeviceHandle
Definition: support.c:114
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
Definition: fltkernel.h:1255

Referenced by START_TEST().

◆ KmtSendToDriver()

DWORD KmtSendToDriver ( IN DWORD  ControlCode)

Definition at line 224 of file support.c.

226 {
228 
229  assert(ControlCode < 0x400);
230 
232  return GetLastError();
233 
234  return ERROR_SUCCESS;
235 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
smooth NULL
Definition: ftsmooth.c:416
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
Definition: wmitypes.h:55
#define KMT_MAKE_CODE(ControlCode)
Definition: kmt_test.h:265
static HANDLE TestDeviceHandle
Definition: support.c:114
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
Definition: fltkernel.h:1255

Referenced by START_TEST().

◆ KmtSendUlongToDriver()

DWORD KmtSendUlongToDriver ( IN DWORD  ControlCode,
IN DWORD  Value 
)

Definition at line 298 of file support.c.

301 {
303 
304  assert(ControlCode < 0x400);
305 
307  return GetLastError();
308 
309  return ERROR_SUCCESS;
310 }
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2343
#define ERROR_SUCCESS
Definition: deptool.c:10
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
smooth NULL
Definition: ftsmooth.c:416
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
Definition: wmitypes.h:55
#define KMT_MAKE_CODE(ControlCode)
Definition: kmt_test.h:265
static HANDLE TestDeviceHandle
Definition: support.c:114
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
Definition: fltkernel.h:1255

Referenced by START_TEST().

◆ KmtSendWStringToDriver()

DWORD KmtSendWStringToDriver ( IN DWORD  ControlCode,
IN PCWSTR  String 
)

Definition at line 273 of file support.c.

276 {
278 
279  assert(ControlCode < 0x400);
280 
282  return GetLastError();
283 
284  return ERROR_SUCCESS;
285 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static WCHAR String[]
Definition: stringtable.c:55
smooth NULL
Definition: ftsmooth.c:416
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
Definition: wmitypes.h:55
#define KMT_MAKE_CODE(ControlCode)
Definition: kmt_test.h:265
__wchar_t WCHAR
Definition: xmlstorage.h:180
static HANDLE TestDeviceHandle
Definition: support.c:114
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
Definition: fltkernel.h:1255

Referenced by START_TEST().

◆ KmtUnloadDriver()

VOID KmtUnloadDriver ( VOID  )

Definition at line 155 of file support.c.

156 {
158 
160 
161  if (Error)
162  {
163  // TODO
164  __debugbreak();
165  }
166 }
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD KmtStopService(IN PCWSTR ServiceName OPTIONAL, IN OUT SC_HANDLE *ServiceHandle)
Definition: service.c:315
static WCHAR TestServiceName[MAX_PATH]
Definition: support.c:112
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
static SC_HANDLE TestServiceHandle
Definition: support.c:113
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66

Referenced by START_TEST(), and UnloadTcpIpTestDriver().

◆ KmtUserCallbackThread()

DWORD WINAPI KmtUserCallbackThread ( PVOID  Parameter)

Definition at line 28 of file support.c.

30 {
32  /* TODO: RequestPacket? */
33  KMT_CALLBACK_REQUEST_PACKET RequestPacket;
36  HANDLE LocalKmtHandle;
37 
39 
40  /* concurrent IoCtls on the same (non-overlapped) handle aren't possible,
41  * so open a separate one.
42  * For more info http://www.osronline.com/showthread.cfm?link=230782 */
44  if (LocalKmtHandle == INVALID_HANDLE_VALUE)
46 
47  while (1)
48  {
49  if (!DeviceIoControl(LocalKmtHandle, IOCTL_KMTEST_USERMODE_AWAIT_REQ, NULL, 0, &RequestPacket, sizeof(RequestPacket), &BytesReturned, NULL))
51  ASSERT(BytesReturned == sizeof(RequestPacket));
52 
53  switch (RequestPacket.OperationClass)
54  {
55  case QueryVirtualMemory:
56  {
57  SIZE_T InfoBufferSize = VirtualQuery(RequestPacket.Parameters, &Response.MemInfo, sizeof(Response.MemInfo));
58  /* FIXME: an error is a valid result. That should go as a response to kernel mode instead of terminating the thread */
59  if (InfoBufferSize == 0)
61 
62  if (!DeviceIoControl(LocalKmtHandle, IOCTL_KMTEST_USERMODE_SEND_RESPONSE, &RequestPacket.RequestId, sizeof(RequestPacket.RequestId), &Response, sizeof(Response), &BytesReturned, NULL))
64  ASSERT(BytesReturned == 0);
65 
66  break;
67  }
68  default:
69  DPRINT1("Unrecognized user-mode callback request\n");
70  break;
71  }
72  }
73 
74 cleanup:
75  if (LocalKmtHandle != INVALID_HANDLE_VALUE)
76  CloseHandle(LocalKmtHandle);
77 
78  DPRINT("Callback handler dying! Error code %lu", Error);
79  return Error;
80 }
#define CloseHandle
Definition: compat.h:406
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error_goto(Error, label)
Definition: kmtest.h:21
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
KMT_CALLBACK_INFORMATION_CLASS OperationClass
Definition: kmt_test.h:64
#define KMTEST_DEVICE_PATH
Definition: kmt_public.h:35
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
_In_ PVOID Parameter
Definition: ldrtypes.h:241
#define GENERIC_WRITE
Definition: nt_native.h:90
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
#define OPEN_EXISTING
Definition: compat.h:434
#define IOCTL_KMTEST_USERMODE_SEND_RESPONSE
Definition: kmt_public.h:22
unsigned long DWORD
Definition: ntddk_ex.h:95
SIZE_T NTAPI VirtualQuery(IN LPCVOID lpAddress, OUT PMEMORY_BASIC_INFORMATION lpBuffer, IN SIZE_T dwLength)
Definition: virtmem.c:220
BOOL Error
Definition: chkdsk.c:66
Definition: ncftp.h:89
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define GENERIC_READ
Definition: compat.h:124
ULONG_PTR SIZE_T
Definition: typedefs.h:78
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
_In_ FILTER_INFORMATION_CLASS _In_ ULONG _Out_ PULONG BytesReturned
Definition: fltkernel.h:1716
#define DPRINT1
Definition: precomp.h:8
struct Response Response
char * cleanup(char *str)
Definition: wpickclick.c:99
#define IOCTL_KMTEST_USERMODE_AWAIT_REQ
Definition: kmt_public.h:25

Referenced by KmtRunKernelTest().

Variable Documentation

◆ KmtestHandle

HANDLE KmtestHandle

Definition at line 32 of file kmtest.c.

Referenced by KmtRunKernelTest(), ListTests(), main(), and RunTest().

◆ TestDeviceHandle

◆ TestServiceHandle

SC_HANDLE TestServiceHandle
static

Definition at line 113 of file support.c.

Referenced by KmtLoadDriver(), and KmtUnloadDriver().

◆ TestServiceName

WCHAR TestServiceName[MAX_PATH]
static

Definition at line 112 of file support.c.

Referenced by KmtLoadDriver(), KmtOpenDriver(), and KmtUnloadDriver().