1 /* 2 * PROJECT: ReactOS kernel-mode tests 3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory 4 * PURPOSE: Kernel-Mode Test Suite NPFS Create test 5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org> 6 */ 7 8 #include <kmt_test.h> 9 #include "npfs.h" 10 11 static 12 VOID 13 TestCreateNamedPipe(VOID) 14 { 15 NTSTATUS Status; 16 HANDLE ServerHandle; 17 ULONG MaxInstances; 18 ULONG InQuota, OutQuota; 19 ULONG Quotas[] = { 0, 1, 2, 1024, PAGE_SIZE - 1, PAGE_SIZE, PAGE_SIZE + 1, 2 * PAGE_SIZE, 8 * PAGE_SIZE, 64 * PAGE_SIZE, 64 * PAGE_SIZE + 1, 128 * PAGE_SIZE }; 20 ULONG i; 21 LARGE_INTEGER Timeout; 22 23 /* Invalid pipe name */ 24 MaxInstances = 1; 25 InQuota = 4096; 26 OutQuota = 4096; 27 ServerHandle = INVALID_HANDLE_VALUE; 28 Status = NpCreatePipe(&ServerHandle, 29 DEVICE_NAMED_PIPE L"", 30 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, 31 MaxInstances, 32 InQuota, 33 OutQuota); 34 ok_eq_hex(Status, STATUS_OBJECT_NAME_INVALID); 35 ok_eq_pointer(ServerHandle, INVALID_HANDLE_VALUE); 36 if (ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE) 37 ObCloseHandle(ServerHandle, KernelMode); 38 39 ServerHandle = INVALID_HANDLE_VALUE; 40 Status = NpCreatePipe(&ServerHandle, 41 DEVICE_NAMED_PIPE L"\\", 42 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, 43 MaxInstances, 44 InQuota, 45 OutQuota); 46 ok_eq_hex(Status, STATUS_OBJECT_NAME_INVALID); 47 ok_eq_pointer(ServerHandle, INVALID_HANDLE_VALUE); 48 if (ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE) 49 ObCloseHandle(ServerHandle, KernelMode); 50 51 ServerHandle = INVALID_HANDLE_VALUE; 52 Status = NpCreatePipe(&ServerHandle, 53 DEVICE_NAMED_PIPE L"\\\\", 54 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, 55 MaxInstances, 56 InQuota, 57 OutQuota); 58 ok_eq_hex(Status, STATUS_OBJECT_NAME_INVALID); 59 ok_eq_pointer(ServerHandle, INVALID_HANDLE_VALUE); 60 if (ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE) 61 ObCloseHandle(ServerHandle, KernelMode); 62 63 /* Test in-quota */ 64 MaxInstances = 1; 65 OutQuota = 4096; 66 for (i = 0; i < RTL_NUMBER_OF(Quotas); i++) 67 { 68 InQuota = Quotas[i]; 69 ServerHandle = INVALID_HANDLE_VALUE; 70 Status = NpCreatePipe(&ServerHandle, 71 DEVICE_NAMED_PIPE L"\\KmtestNpfsCreateTestPipe", 72 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, 73 MaxInstances, 74 InQuota, 75 OutQuota); 76 ok_eq_hex(Status, STATUS_SUCCESS); 77 ok(ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE, "ServerHandle = %p\n", ServerHandle); 78 if (!skip(NT_SUCCESS(Status) && ServerHandle != NULL && ServerHandle != INVALID_HANDLE_VALUE, "No pipe\n")) 79 { 80 NpCheckServerPipe(ServerHandle, 81 BYTE_STREAM, QUEUE, BYTE_STREAM, DUPLEX, 82 MaxInstances, 1, 83 InQuota, 0, 84 OutQuota, OutQuota, 85 FILE_PIPE_LISTENING_STATE); 86 ObCloseHandle(ServerHandle, KernelMode); 87 Timeout.QuadPart = -100 * 1000 * 10; 88 Status = KeDelayExecutionThread(KernelMode, FALSE, &Timeout); 89 ok_eq_hex(Status, STATUS_SUCCESS); 90 } 91 } 92 } 93 94 static 95 VOID 96 TestCreate(VOID) 97 { 98 } 99 100 static KSTART_ROUTINE RunTest; 101 static 102 VOID 103 NTAPI 104 RunTest( 105 IN PVOID Context) 106 { 107 UNREFERENCED_PARAMETER(Context); 108 TestCreateNamedPipe(); 109 TestCreate(); 110 } 111 112 START_TEST(NpfsCreate) 113 { 114 PKTHREAD Thread; 115 116 Thread = KmtStartThread(RunTest, NULL); 117 KmtFinishThread(Thread, NULL); 118 } 119