18#define MAX_INSTANCES 5
22#define MakeServer(ServerHandle, PipePath, ServerSynchronous) \
23 NpCreatePipeEx(ServerHandle, \
28 FILE_SHARE_READ | FILE_SHARE_WRITE, \
32 SYNCHRONIZE | GENERIC_READ | GENERIC_WRITE, \
34 (ServerSynchronous) ? FILE_SYNCHRONOUS_IO_NONALERT \
38#define CheckServer(ServerHandle, State) \
39 NpCheckServerPipe(ServerHandle, \
40 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, \
43 OUT_QUOTA, OUT_QUOTA, \
46#define CheckClient(ClientHandle, State) \
47 NpCheckClientPipe(ClientHandle, \
48 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, \
51 OUT_QUOTA, OUT_QUOTA, \
54#define CheckServerQuota(ServerHandle, InQ, OutQ) \
55 NpCheckServerPipe(ServerHandle, \
56 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, \
59 OUT_QUOTA, OUT_QUOTA - (OutQ), \
60 FILE_PIPE_CONNECTED_STATE)
62#define CheckClientQuota(ClientHandle, InQ, OutQ) \
63 NpCheckClientPipe(ClientHandle, \
64 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, \
67 OUT_QUOTA, OUT_QUOTA - (OutQ), \
68 FILE_PIPE_CONNECTED_STATE)
70#define CheckPipeContext(Context, ExpectedStatus, ExpectedBytes) do \
72 ok_bool_true(Okay, "CheckPipeContext"); \
73 ok_eq_hex((Context)->ReadWrite.Status, ExpectedStatus); \
74 ok_eq_ulongptr((Context)->ReadWrite.BytesTransferred, ExpectedBytes); \
92 Context->Connect.ClientHandle = ClientHandle;
134 Context->Connect.PipePath = PipePath;
135 Context->Connect.ClientSynchronous = ClientSynchronous;
147 Context->Listen.ServerHandle = ServerHandle;
215 DefaultTimeout.
QuadPart = -50 * 1000 * 10;
236 ClientHandle = ConnectContext.
Connect.ClientHandle;
381 ClientHandle = ConnectContext.
Connect.ClientHandle;
412 ClientHandle = ConnectContext.
Connect.ClientHandle;
443 ClientHandle = ConnectContext.
Connect.ClientHandle;
474 ClientHandle = ConnectContext.
Connect.ClientHandle;
506 ClientHandle = ConnectContext.
Connect.ClientHandle;
539 ClientHandle = ConnectContext.
Connect.ClientHandle;
#define CheckServerQuota(ServerHandle, InQ, OutQ)
static BOOLEAN CheckListenPipe(IN PTHREAD_CONTEXT Context, IN HANDLE ServerHandle, IN ULONG MilliSeconds)
struct _READ_WRITE_TEST_CONTEXT * PREAD_WRITE_TEST_CONTEXT
static BOOLEAN CheckReadPipe(IN PTHREAD_CONTEXT Context, IN HANDLE PipeHandle, OUT PVOID Buffer, IN ULONG BufferSize, IN ULONG MilliSeconds)
#define CheckClientQuota(ClientHandle, InQ, OutQ)
#define CheckClient(ClientHandle, State)
static BOOLEAN CheckConnectPipe(IN PTHREAD_CONTEXT Context, IN PCWSTR PipePath, IN BOOLEAN ClientSynchronous, IN ULONG MilliSeconds)
#define CheckPipeContext(Context, ExpectedStatus, ExpectedBytes)
static VOID ListenPipe(IN OUT PTHREAD_CONTEXT Context)
#define CheckServer(ServerHandle, State)
#define MakeServer(ServerHandle, PipePath, ServerSynchronous)
static VOID ReadPipe(IN OUT PTHREAD_CONTEXT Context)
static KSTART_ROUTINE TestReadWrite
static BOOLEAN CheckWritePipe(IN PTHREAD_CONTEXT Context, IN HANDLE PipeHandle, IN const VOID *Buffer, IN ULONG BufferSize, IN ULONG MilliSeconds)
static VOID ConnectPipe(IN OUT PTHREAD_CONTEXT Context)
static VOID WritePipe(IN OUT PTHREAD_CONTEXT Context)
struct _READ_WRITE_TEST_CONTEXT READ_WRITE_TEST_CONTEXT
#define ok_eq_hex(value, expected)
#define ok_bool_false(value, desc)
#define ok_eq_uint(value, expected)
#define ok_bool_true(value, desc)
#define ok_eq_ulongptr(value, expected)
#define WriteBuffer(BaseIoAddress, Buffer, Count)
#define ReadBuffer(BaseIoAddress, Buffer, Count)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define FILE_SYNCHRONOUS_IO_NONALERT
#define FILE_PIPE_DISCONNECTED_STATE
#define FILE_PIPE_LISTENING_STATE
#define FILE_PIPE_CONNECTED_STATE
#define FILE_PIPE_CLOSING_STATE
PKTHREAD KmtStartThread(IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext OPTIONAL)
VOID KmtFinishThread(IN PKTHREAD Thread OPTIONAL, IN PKEVENT Event OPTIONAL)
NTSTATUS NpOpenPipeEx(OUT PHANDLE ClientHandle, IN PCWSTR PipePath, IN ACCESS_MASK DesiredAccess, IN ULONG ShareAccess, IN ULONG Disposition, IN ULONG CreateOptions)
#define NpDisconnectPipe(ServerHandle)
BOOLEAN WaitForWork(IN PTHREAD_CONTEXT Context, IN ULONG MilliSeconds)
NTSTATUS NpWritePipe(IN HANDLE PipeHandle, IN const VOID *Buffer, IN ULONG BufferSize, OUT PULONG_PTR BytesWritten)
VOID FinishWorkerThread(IN PTHREAD_CONTEXT Context)
NTSTATUS NpReadPipe(IN HANDLE PipeHandle, OUT PVOID Buffer, IN ULONG BufferSize, OUT PULONG_PTR BytesRead)
BOOLEAN TriggerWork(IN PTHREAD_CONTEXT Context, IN ULONG MilliSeconds)
#define DEVICE_NAMED_PIPE
VOID StartWorkerThread(OUT PTHREAD_CONTEXT Context)
#define NpCheckServerPipe(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps)
#define NpListenPipe(ServerHandle)
#define NpQueryPipe(h, es)
#define NpCheckClientPipe(h, rm, cm, npt, npc, mi, ci, iq, rsa, oq, wqa, nps)
#define STATUS_PIPE_DISCONNECTED
#define STATUS_PIPE_LISTENING
#define STATUS_PIPE_BROKEN
#define STATUS_PIPE_CLOSING
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
BOOLEAN ClientSynchronous
BOOLEAN ServerSynchronous
struct _THREAD_CONTEXT::@1633::@1635 Connect
struct _THREAD_CONTEXT::@1633::@1637 ReadWrite
struct _THREAD_CONTEXT::@1633::@1636 Listen
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize