[KMTEST] Initial usermode support for testing FS mini-filters (#81)
[reactos.git] / modules / rostests / kmtests / kmtest / kmtest.h
1 /*
2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Loader Application
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8 #ifndef _KMTESTS_H_
9 #define _KMTESTS_H_
10
11 extern PCSTR ErrorFileAndLine;
12
13 #ifndef KMT_STRINGIZE
14 #define KMT_STRINGIZE(x) #x
15 #endif /* !defined KMT_STRINGIZE */
16
17 #define location(file, line) do { ErrorFileAndLine = file ":" KMT_STRINGIZE(line); } while (0)
18 #define error_value(Error, value) do { location(__FILE__, __LINE__); Error = value; } while (0)
19 #define error(Error) error_value(Error, GetLastError())
20 #define error_goto(Error, label) do { error(Error); goto label; } while (0)
21 #define error_value_goto(Error, value, label) do { error_value(Error, value); goto label; } while (0)
22
23 /* service management functions */
24 DWORD
25 KmtServiceInit(VOID);
26
27 DWORD
28 KmtServiceCleanup(
29 BOOLEAN IgnoreErrors);
30
31 DWORD
32 KmtCreateService(
33 IN PCWSTR ServiceName,
34 IN PCWSTR ServicePath,
35 IN PCWSTR DisplayName OPTIONAL,
36 OUT SC_HANDLE *ServiceHandle);
37
38 DWORD
39 KmtStartService(
40 IN PCWSTR ServiceName OPTIONAL,
41 IN OUT SC_HANDLE *ServiceHandle);
42
43 DWORD
44 KmtCreateAndStartService(
45 IN PCWSTR ServiceName,
46 IN PCWSTR ServicePath,
47 IN PCWSTR DisplayName OPTIONAL,
48 OUT SC_HANDLE *ServiceHandle,
49 IN BOOLEAN RestartIfRunning);
50
51 DWORD
52 KmtStopService(
53 IN PCWSTR ServiceName OPTIONAL,
54 IN OUT SC_HANDLE *ServiceHandle);
55
56 DWORD
57 KmtDeleteService(
58 IN PCWSTR ServiceName OPTIONAL,
59 IN OUT SC_HANDLE *ServiceHandle);
60
61 DWORD KmtCloseService(
62 IN OUT SC_HANDLE *ServiceHandle);
63
64
65 /* FS Filter management functions */
66
67 DWORD
68 KmtFltCreateService(
69 _In_z_ PCWSTR ServiceName,
70 _In_z_ PCWSTR ServicePath,
71 _In_z_ PCWSTR DisplayName OPTIONAL,
72 _Out_ SC_HANDLE *ServiceHandle);
73
74 DWORD
75 KmtFltLoad(
76 _In_z_ PCWSTR ServiceName);
77
78 DWORD
79 KmtFltCreateAndStartService(
80 _In_z_ PCWSTR ServiceName,
81 _In_z_ PCWSTR ServicePath,
82 _In_z_ PCWSTR DisplayName OPTIONAL,
83 _Out_ SC_HANDLE *ServiceHandle,
84 _In_ BOOLEAN RestartIfRunning);
85
86 DWORD
87 KmtFltConnect(
88 _In_z_ PCWSTR ServiceName,
89 _Out_ HANDLE *hPort);
90
91 DWORD
92 KmtFltDisconnect(
93 _Out_ HANDLE *hPort);
94
95 DWORD
96 KmtFltSendMessage(
97 _In_ HANDLE hPort,
98 _In_reads_bytes_(dwInBufferSize) LPVOID lpInBuffer,
99 _In_ DWORD dwInBufferSize,
100 _Out_writes_bytes_to_opt_(dwOutBufferSize, *lpBytesReturned) LPVOID lpOutBuffer,
101 _In_ DWORD dwOutBufferSize,
102 _Out_opt_ LPDWORD lpBytesReturned);
103
104 DWORD
105 KmtFltGetMessage(
106 _In_ HANDLE hPort,
107 _Out_writes_bytes_(dwMessageBufferSize) PFILTER_MESSAGE_HEADER lpMessageBuffer,
108 _In_ DWORD dwMessageBufferSize,
109 _In_opt_ LPOVERLAPPED Overlapped);
110
111 DWORD
112 KmtFltReplyMessage(
113 _In_ HANDLE hPort,
114 _In_reads_bytes_(dwReplyBufferSize) PFILTER_REPLY_HEADER lpReplyBuffer,
115 _In_ DWORD dwReplyBufferSize);
116
117 DWORD
118 KmtFltGetMessageResult(
119 _In_ HANDLE hPort,
120 _In_ LPOVERLAPPED Overlapped,
121 _Out_ LPDWORD BytesTransferred);
122
123 DWORD
124 KmtFltUnload(
125 _In_z_ PCWSTR ServiceName);
126
127 DWORD
128 KmtFltDeleteService(
129 _In_z_ PCWSTR ServiceName OPTIONAL,
130 _Inout_ SC_HANDLE *ServiceHandle);
131
132 DWORD KmtFltCloseService(
133 _Inout_ SC_HANDLE *ServiceHandle);
134
135 #endif /* !defined _KMTESTS_H_ */