2004-03-09 Casper S. Hornstrup <chorns@users.sourceforge.net>
[reactos.git] / reactos / regtests / kmrtint / kmrtint.c
1 /*
2 * PROJECT: ReactOS kernel
3 * FILE: regtests/kmrtint/kmrtint.c
4 * PURPOSE: Kernel-mode regression testing driver user-mode interface
5 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
6 * UPDATE HISTORY:
7 * 06-07-2003 CSH Created
8 */
9 #define NTOS_MODE_USER
10 #include <ntos.h>
11 #include "regtests.h"
12 #include "kmregtests.h"
13
14 #define NDEBUG
15 #include <debug.h>
16
17 HANDLE
18 OpenDevice()
19 {
20 OBJECT_ATTRIBUTES ObjectAttributes;
21 UNICODE_STRING DeviceName;
22 IO_STATUS_BLOCK Iosb;
23 HANDLE DeviceHandle;
24 NTSTATUS Status;
25
26 RtlInitUnicodeString(&DeviceName,
27 L"\\Device\\KMRegTests");
28 InitializeObjectAttributes(
29 &ObjectAttributes,
30 &DeviceName,
31 0,
32 NULL,
33 NULL);
34
35 Status = NtCreateFile(
36 &DeviceHandle,
37 FILE_GENERIC_READ | FILE_GENERIC_WRITE,
38 &ObjectAttributes,
39 &Iosb,
40 NULL,
41 0,
42 0,
43 FILE_OPEN,
44 FILE_SYNCHRONOUS_IO_NONALERT,
45 NULL,
46 0);
47
48 if (!NT_SUCCESS(Status))
49 {
50 return INVALID_HANDLE_VALUE;
51 }
52 return DeviceHandle;
53 }
54
55 VOID STDCALL
56 RegTestMain(TestOutputRoutine OutputRoutine, LPSTR TestName)
57 {
58 IO_STATUS_BLOCK Iosb;
59 HANDLE DeviceHandle;
60 NTSTATUS Status;
61
62 DeviceHandle = OpenDevice();
63 if (DeviceHandle != INVALID_HANDLE_VALUE)
64 {
65 Status = NtDeviceIoControlFile(
66 DeviceHandle,
67 NULL,
68 NULL,
69 NULL,
70 &Iosb,
71 IOCTL_KMREGTESTS_RUN,
72 NULL,
73 0,
74 NULL,
75 0);
76 if (Status == STATUS_PENDING) {
77 Status = NtWaitForSingleObject(DeviceHandle, FALSE, NULL);
78 }
79
80 NtClose(DeviceHandle);
81 }
82 else
83 {
84 DPRINT("Cannot open KMRegTests device.\n");
85 }
86 }