2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite NtCreateSection test user-mode part
5 * PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
10 START_TEST(NtCreateSection
)
15 LARGE_INTEGER MaxFileSize
;
16 HANDLE Handle
, SectionHandle
;
17 IO_STATUS_BLOCK IoStatusBlock
;
18 OBJECT_ATTRIBUTES ObjectAttributes
;
19 UNICODE_STRING InitOnCreate
= RTL_CONSTANT_STRING(L
"\\Device\\Kmtest-NtCreateSection\\InitOnCreate");
20 UNICODE_STRING InitOnRW
= RTL_CONSTANT_STRING(L
"\\Device\\Kmtest-NtCreateSection\\InitOnRW");
21 UNICODE_STRING InvalidInit
= RTL_CONSTANT_STRING(L
"\\Device\\Kmtest-NtCreateSection\\InvalidInit");
23 KmtLoadDriver(L
"NtCreateSection", FALSE
);
27 InitializeObjectAttributes(&ObjectAttributes
, &InvalidInit
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
28 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
29 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_CREATE
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
30 ok_eq_hex(Status
, STATUS_SUCCESS
);
32 MaxFileSize
.QuadPart
= 512;
33 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
34 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
35 ok_eq_hex(Status
, STATUS_INVALID_FILE_FOR_SECTION
);
39 InitializeObjectAttributes(&ObjectAttributes
, &InitOnCreate
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
40 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
41 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_CREATE
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
42 ok_eq_hex(Status
, STATUS_SUCCESS
);
44 MaxFileSize
.QuadPart
= 512;
45 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
46 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
47 ok_eq_hex(Status
, STATUS_SUCCESS
);
51 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
52 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
53 ok_eq_hex(Status
, STATUS_SUCCESS
);
56 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
57 memset(Buffer
, 0xBA, 512);
58 KmtEndSeh(STATUS_SUCCESS
);
60 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
61 NtClose(SectionHandle
);
65 InitializeObjectAttributes(&ObjectAttributes
, &InitOnCreate
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
66 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
67 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_CREATE
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
68 ok_eq_hex(Status
, STATUS_SUCCESS
);
70 MaxFileSize
.QuadPart
= 4096;
71 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
72 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
73 ok_eq_hex(Status
, STATUS_SUCCESS
);
77 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
78 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
79 ok_eq_hex(Status
, STATUS_SUCCESS
);
82 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
83 memset(Buffer
, 0xBA, 4096);
84 KmtEndSeh(STATUS_SUCCESS
);
86 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
87 NtClose(SectionHandle
);
91 InitializeObjectAttributes(&ObjectAttributes
, &InitOnRW
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
92 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
93 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_CREATE
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
94 ok_eq_hex(Status
, STATUS_SUCCESS
);
96 MaxFileSize
.QuadPart
= 512;
97 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
98 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
99 ok_eq_hex(Status
, STATUS_SUCCESS
);
103 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
104 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
105 ok_eq_hex(Status
, STATUS_SUCCESS
);
108 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
109 memset(Buffer
, 0xBA, 512);
110 KmtEndSeh(STATUS_SUCCESS
);
112 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
113 NtClose(SectionHandle
);
117 InitializeObjectAttributes(&ObjectAttributes
, &InitOnRW
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
118 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
119 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_CREATE
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
120 ok_eq_hex(Status
, STATUS_SUCCESS
);
122 MaxFileSize
.QuadPart
= 4096;
123 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
124 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
125 ok_eq_hex(Status
, STATUS_SUCCESS
);
129 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
130 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
131 ok_eq_hex(Status
, STATUS_SUCCESS
);
134 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
135 memset(Buffer
, 0xBA, 4096);
136 KmtEndSeh(STATUS_SUCCESS
);
138 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
139 NtClose(SectionHandle
);
143 InitializeObjectAttributes(&ObjectAttributes
, &InvalidInit
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
144 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
145 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_OPEN
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
146 ok_eq_hex(Status
, STATUS_SUCCESS
);
148 MaxFileSize
.QuadPart
= 512;
149 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
150 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
151 ok_eq_hex(Status
, STATUS_INVALID_FILE_FOR_SECTION
);
155 InitializeObjectAttributes(&ObjectAttributes
, &InitOnCreate
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
156 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
157 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_OPEN
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
158 ok_eq_hex(Status
, STATUS_SUCCESS
);
160 MaxFileSize
.QuadPart
= 512;
161 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
162 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
163 ok_eq_hex(Status
, STATUS_SUCCESS
);
167 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
168 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
169 ok_eq_hex(Status
, STATUS_SUCCESS
);
172 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
173 memset(Buffer
, 0xBA, 512);
174 KmtEndSeh(STATUS_SUCCESS
);
176 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
177 NtClose(SectionHandle
);
181 InitializeObjectAttributes(&ObjectAttributes
, &InitOnCreate
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
182 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
183 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_OPEN
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
184 ok_eq_hex(Status
, STATUS_SUCCESS
);
186 MaxFileSize
.QuadPart
= 4096;
187 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
188 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
189 ok_eq_hex(Status
, STATUS_SUCCESS
);
193 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
194 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
195 ok_eq_hex(Status
, STATUS_SUCCESS
);
198 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
199 memset(Buffer
, 0xBA, 4096);
200 KmtEndSeh(STATUS_SUCCESS
);
202 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
203 NtClose(SectionHandle
);
207 InitializeObjectAttributes(&ObjectAttributes
, &InitOnRW
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
208 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
209 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_OPEN
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
210 ok_eq_hex(Status
, STATUS_SUCCESS
);
212 MaxFileSize
.QuadPart
= 512;
213 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
214 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
215 ok_eq_hex(Status
, STATUS_SUCCESS
);
219 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
220 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
221 ok_eq_hex(Status
, STATUS_SUCCESS
);
224 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
225 memset(Buffer
, 0xBA, 512);
226 KmtEndSeh(STATUS_SUCCESS
);
228 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
229 NtClose(SectionHandle
);
233 InitializeObjectAttributes(&ObjectAttributes
, &InitOnRW
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
234 Status
= NtCreateFile(&Handle
, GENERIC_READ
| GENERIC_WRITE
| SYNCHRONIZE
, &ObjectAttributes
, &IoStatusBlock
,
235 NULL
, FILE_ATTRIBUTE_NORMAL
, 0, FILE_OPEN
, FILE_SYNCHRONOUS_IO_NONALERT
, NULL
, 0);
236 ok_eq_hex(Status
, STATUS_SUCCESS
);
238 MaxFileSize
.QuadPart
= 4096;
239 Status
= NtCreateSection(&SectionHandle
, SECTION_ALL_ACCESS
, 0, &MaxFileSize
,
240 PAGE_READWRITE
, SEC_COMMIT
, Handle
);
241 ok_eq_hex(Status
, STATUS_SUCCESS
);
245 Status
= NtMapViewOfSection(SectionHandle
, NtCurrentProcess(), &Buffer
, 0, 0, 0,
246 &FileSize
, ViewUnmap
, 0, PAGE_READWRITE
);
247 ok_eq_hex(Status
, STATUS_SUCCESS
);
250 ok(((PCHAR
)Buffer
)[0] == 0, "First byte is not null! %x", ((PCHAR
)Buffer
)[0]);
251 memset(Buffer
, 0xBA, 4096);
252 KmtEndSeh(STATUS_SUCCESS
);
254 NtUnmapViewOfSection(NtCurrentProcess(), Buffer
);
255 NtClose(SectionHandle
);