1 /*
2  * PROJECT:         ReactOS kernel-mode tests
3  * LICENSE:         LGPLv2.1+ - See COPYING.LIB in the top level directory
4  * PURPOSE:         Read/Write operations test declarations
5  * PROGRAMMER:      Thomas Faber <thomas.faber@reactos.org>
6  */
7 
8 #ifndef _KMTEST_IOREADFILE_H_
9 #define _KMTEST_IOREADFILE_H_
10 
11 #define TEST_FILE_SIZE 17
12 
13 #define KEY_SUCCEED                 0x00
14 #define KEY_SUCCESS_WAIT1           0x01
15 
16 #define KEY_INFO_EXISTS             0x41
17 
18 #define KEY_FAIL_MISALIGNED         0x81
19 #define KEY_FAIL_OVERFLOW           0x82
20 #define KEY_FAIL_PARTIAL            0x83
21 #define KEY_FAIL_BUSY               0x84
22 #define KEY_FAIL_VERIFY_REQUIRED    0x85
23 
24 #define KEY_FAIL_UNSUCCESSFUL       0xc1
25 #define KEY_FAIL_NOT_IMPLEMENTED    0xc2
26 #define KEY_FAIL_ACCESS_VIOLATION   0xc3
27 #define KEY_FAIL_IN_PAGE_ERROR      0xc4
28 #define KEY_FAIL_EOF                0xc5
29 #define KEY_FAIL_ACCESS_DENIED      0xc6
30 #define KEY_FAIL_MISALIGNED_ERROR   0xc7
31 #define KEY_RESULT_MASK             0xff
32 
33 #define KEY_NEXT(key) ( (key) == KEY_FAIL_MISALIGNED_ERROR ? 0xff :                 \
34                         (key) == KEY_FAIL_VERIFY_REQUIRED ? KEY_FAIL_UNSUCCESSFUL : \
35                         (key) == KEY_INFO_EXISTS ? KEY_FAIL_MISALIGNED :            \
36                         (key) == KEY_SUCCESS_WAIT1 ? KEY_INFO_EXISTS :              \
37                         (key) + 1 )
38 #define KEY_ERROR(key) (((key) & 0xc0) == 0xc0)
39 static
40 NTSTATUS
TestGetReturnStatus(_In_ ULONG LockKey)41 TestGetReturnStatus(
42     _In_ ULONG LockKey)
43 {
44     switch (LockKey & KEY_RESULT_MASK)
45     {
46         case KEY_SUCCEED:
47             return STATUS_SUCCESS;
48         case KEY_SUCCESS_WAIT1:
49             return STATUS_WAIT_1;
50 
51         case KEY_INFO_EXISTS:
52             return STATUS_OBJECT_NAME_EXISTS;
53 
54         case KEY_FAIL_MISALIGNED:
55             return STATUS_DATATYPE_MISALIGNMENT;
56         case KEY_FAIL_OVERFLOW:
57             return STATUS_BUFFER_OVERFLOW;
58         case KEY_FAIL_PARTIAL:
59             return STATUS_PARTIAL_COPY;
60         case KEY_FAIL_BUSY:
61             return STATUS_DEVICE_BUSY;
62         case KEY_FAIL_VERIFY_REQUIRED:
63             return STATUS_VERIFY_REQUIRED;
64 
65         case KEY_FAIL_UNSUCCESSFUL:
66             return STATUS_UNSUCCESSFUL;
67         case KEY_FAIL_NOT_IMPLEMENTED:
68             return STATUS_NOT_IMPLEMENTED;
69         case KEY_FAIL_ACCESS_VIOLATION:
70             return STATUS_ACCESS_VIOLATION;
71         case KEY_FAIL_IN_PAGE_ERROR:
72             return STATUS_IN_PAGE_ERROR;
73         case KEY_FAIL_EOF:
74             return STATUS_END_OF_FILE;
75         case KEY_FAIL_ACCESS_DENIED:
76             return STATUS_ACCESS_DENIED;
77         case KEY_FAIL_MISALIGNED_ERROR:
78             return STATUS_DATATYPE_MISALIGNMENT_ERROR;
79         default:
80             ok(0, "Key = %lx\n", LockKey);
81             return STATUS_INVALID_PARAMETER;
82     }
83 }
84 
85 #define KEY_USE_FASTIO              0x100
86 #define KEY_RETURN_PENDING          0x200
87 
88 #define KEY_DATA(c) (((c) & 0xff) << 24)
89 #define KEY_GET_DATA(key) ((key) >> 24)
90 
91 #endif /* !defined _KMTEST_IOREADFILE_H_ */
92