2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite NPFS helper declarations
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
8 #ifndef _KMTEST_NPFS_H_
9 #define _KMTEST_NPFS_H_
11 #define DEVICE_NAMED_PIPE L"\\Device\\NamedPipe"
13 #define BYTE_STREAM FILE_PIPE_BYTE_STREAM_MODE
14 C_ASSERT(FILE_PIPE_BYTE_STREAM_MODE
== FILE_PIPE_BYTE_STREAM_TYPE
);
15 #define MESSAGE FILE_PIPE_MESSAGE_MODE
16 C_ASSERT(FILE_PIPE_MESSAGE_MODE
== FILE_PIPE_MESSAGE_TYPE
);
17 #define QUEUE FILE_PIPE_QUEUE_OPERATION
18 #define COMPLETE FILE_PIPE_COMPLETE_OPERATION
19 #define INBOUND FILE_PIPE_INBOUND
20 #define OUTBOUND FILE_PIPE_OUTBOUND
21 #define DUPLEX FILE_PIPE_FULL_DUPLEX
25 OUT PHANDLE ServerHandle
,
28 IN ULONG CompletionMode
,
29 IN ULONG NamedPipeType
,
31 IN ULONG MaximumInstances
,
32 IN ULONG InboundQuota
,
33 IN ULONG OutboundQuota
,
34 IN ACCESS_MASK DesiredAccess
,
36 IN ULONG CreateOptions
,
37 IN PLARGE_INTEGER DefaultTimeout OPTIONAL
);
41 OUT PHANDLE ServerHandle
,
44 IN ULONG CompletionMode
,
45 IN ULONG NamedPipeType
,
46 IN ULONG NamedPipeConfiguration
,
47 IN ULONG MaximumInstances
,
48 IN ULONG InboundQuota
,
49 IN ULONG OutboundQuota
);
53 OUT PHANDLE ClientHandle
,
55 IN ACCESS_MASK DesiredAccess
,
58 IN ULONG CreateOptions
);
62 OUT PHANDLE ClientHandle
,
64 IN ULONG NamedPipeConfiguration
);
69 IN ULONG FsControlCode
,
71 IN ULONG InputBufferLength
);
73 #define NpListenPipe(ServerHandle) NpControlPipe(ServerHandle, FSCTL_PIPE_LISTEN, NULL, 0)
74 #define NpDisconnectPipe(ServerHandle) NpControlPipe(ServerHandle, FSCTL_PIPE_DISCONNECT, NULL, 0)
79 IN PLARGE_INTEGER Timeout
);
86 OUT PULONG_PTR BytesRead
);
91 IN
const VOID
*Buffer
,
93 OUT PULONG_PTR BytesWritten
);
95 #define NpCheckServerPipe(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps) \
96 NpCheckServerPipe__(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, __FILE__, __LINE__)
98 #define NpCheckServerPipe__(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, file, line) \
99 NpCheckServerPipe_(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, file ":" KMT_STRINGIZE(line))
103 IN HANDLE ServerHandle
,
104 /* PipeInformation */
106 IN ULONG CompletionMode
,
107 /* PipeLocalInformation */
108 IN ULONG NamedPipeType
,
109 IN ULONG NamedPipeConfiguration
,
110 IN ULONG MaximumInstances
,
111 IN ULONG CurrentInstances
,
112 IN ULONG InboundQuota
,
113 IN ULONG ReadDataAvailable
,
114 IN ULONG OutboundQuota
,
115 IN ULONG WriteQuotaAvailable
,
116 IN ULONG NamedPipeState
,
117 /* PipeRemoteInformation */
119 IN PCSTR FileAndLine
);
121 #define NpCheckClientPipe(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps) \
122 NpCheckClientPipe__(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, __FILE__, __LINE__)
124 #define NpCheckClientPipe__(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, file, line) \
125 NpCheckClientPipe_(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps, file ":" KMT_STRINGIZE(line))
129 IN HANDLE ClientHandle
,
130 /* PipeInformation */
132 IN ULONG CompletionMode
,
133 /* PipeLocalInformation */
134 IN ULONG NamedPipeType
,
135 IN ULONG NamedPipeConfiguration
,
136 IN ULONG MaximumInstances
,
137 IN ULONG CurrentInstances
,
138 IN ULONG InboundQuota
,
139 IN ULONG ReadDataAvailable
,
140 IN ULONG OutboundQuota
,
141 IN ULONG WriteQuotaAvailable
,
142 IN ULONG NamedPipeState
,
143 /* PipeRemoteInformation */
145 IN PCSTR FileAndLine
);
147 #define NpQueryPipe(h, es) \
148 NpQueryPipe__(h, es, __FILE__, __LINE__)
150 #define NpQueryPipe__(h, es, file, line) \
151 NpQueryPipe_(h, es, file ":" KMT_STRINGIZE(line))
156 IN NTSTATUS ExpectedStatus
,
157 IN PCSTR FileAndLine
);
160 struct _THREAD_CONTEXT
;
161 typedef VOID (WORK_FUNCTION
)(IN OUT
struct _THREAD_CONTEXT
*);
162 typedef WORK_FUNCTION
*PWORK_FUNCTION
;
164 typedef struct _THREAD_CONTEXT
166 volatile PWORK_FUNCTION Work
;
172 BOOLEAN ClientSynchronous
;
186 ULONG_PTR BytesTransferred
;
190 KEVENT ThreadDoneEvent
;
191 KEVENT StartWorkEvent
;
192 KEVENT WorkCompleteEvent
;
194 } THREAD_CONTEXT
, *PTHREAD_CONTEXT
;
198 OUT PTHREAD_CONTEXT Context
);
202 IN PTHREAD_CONTEXT Context
);
206 IN PTHREAD_CONTEXT Context
,
207 IN ULONG MilliSeconds
);
211 IN PTHREAD_CONTEXT Context
,
212 IN ULONG MilliSeconds
);
214 #endif /* !defined _KMTEST_NPFS_H_ */