2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Section Object test
5 * PROGRAMMER: Thomas Faber <thfabba@gmx.de>
10 #define StartSeh() ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY {
11 #define EndSeh(ExpectedStatus) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok_eq_hex(ExceptionStatus, ExpectedStatus)
15 NTSTATUS Status
= STATUS_SUCCESS
;
16 NTSTATUS ExceptionStatus
;
17 const PVOID InvalidPointer
= (PVOID
)0x5555555555555555LLU
;
19 LARGE_INTEGER MaximumSize
;
22 Status
= MmCreateSection(NULL
, 0, NULL
, NULL
, 0, SEC_RESERVE
, NULL
, NULL
);
23 EndSeh(STATUS_SUCCESS
);
24 ok_eq_hex(Status
, STATUS_INVALID_PAGE_PROTECTION
);
26 if (!KmtIsCheckedBuild
)
28 /* PAGE_NOACCESS and missing SEC_RESERVE/SEC_COMMIT/SEC_IMAGE assert */
30 Status
= MmCreateSection(NULL
, 0, NULL
, NULL
, PAGE_NOACCESS
, SEC_RESERVE
, NULL
, NULL
);
31 EndSeh(STATUS_ACCESS_VIOLATION
);
34 Status
= MmCreateSection(NULL
, 0, NULL
, NULL
, PAGE_NOACCESS
, 0, NULL
, NULL
);
35 EndSeh(STATUS_ACCESS_VIOLATION
);
38 SectionObject
= InvalidPointer
;
40 Status
= MmCreateSection(&SectionObject
, 0, NULL
, NULL
, 0, SEC_RESERVE
, NULL
, NULL
);
41 EndSeh(STATUS_SUCCESS
);
42 ok_eq_hex(Status
, STATUS_INVALID_PAGE_PROTECTION
);
43 ok_eq_pointer(SectionObject
, InvalidPointer
);
46 Status
= MmCreateSection(NULL
, 0, NULL
, NULL
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
47 EndSeh(STATUS_ACCESS_VIOLATION
);
49 SectionObject
= InvalidPointer
;
51 Status
= MmCreateSection(&SectionObject
, 0, NULL
, NULL
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
52 EndSeh(STATUS_ACCESS_VIOLATION
);
53 ok_eq_pointer(SectionObject
, InvalidPointer
);
55 MaximumSize
.QuadPart
= 0;
57 Status
= MmCreateSection(NULL
, 0, NULL
, &MaximumSize
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
58 EndSeh(STATUS_SUCCESS
);
59 ok_eq_hex(Status
, STATUS_INVALID_PARAMETER_4
);
60 ok_eq_longlong(MaximumSize
.QuadPart
, 0LL);
62 MaximumSize
.QuadPart
= 1;
64 Status
= MmCreateSection(NULL
, 0, NULL
, &MaximumSize
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
65 EndSeh(STATUS_ACCESS_VIOLATION
);
66 ok_eq_longlong(MaximumSize
.QuadPart
, 1LL);
68 SectionObject
= InvalidPointer
;
69 MaximumSize
.QuadPart
= 0;
71 Status
= MmCreateSection(&SectionObject
, 0, NULL
, &MaximumSize
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
72 EndSeh(STATUS_SUCCESS
);
73 ok_eq_hex(Status
, STATUS_INVALID_PARAMETER_4
);
74 ok_eq_longlong(MaximumSize
.QuadPart
, 0LL);
75 ok_eq_pointer(SectionObject
, InvalidPointer
);
77 SectionObject
= InvalidPointer
;
78 MaximumSize
.QuadPart
= 1;
80 Status
= MmCreateSection(&SectionObject
, 0, NULL
, &MaximumSize
, PAGE_READONLY
, SEC_RESERVE
, NULL
, NULL
);
81 EndSeh(STATUS_SUCCESS
);
82 ok_eq_hex(Status
, STATUS_SUCCESS
);
83 ok_eq_longlong(MaximumSize
.QuadPart
, 1LL);
84 ok(SectionObject
!= InvalidPointer
, "Section object pointer untouched\n");
85 ok(SectionObject
!= NULL
, "Section object pointer NULL\n");
87 if (SectionObject
&& SectionObject
!= InvalidPointer
)
88 ObDereferenceObject(SectionObject
);
90 SectionObject
= InvalidPointer
;
91 MaximumSize
.QuadPart
= 1;
93 Status
= MmCreateSection(&SectionObject
, 0, NULL
, &MaximumSize
, PAGE_READONLY
, SEC_IMAGE
, NULL
, NULL
);
94 EndSeh(STATUS_SUCCESS
);
95 ok_eq_hex(Status
, STATUS_INVALID_FILE_FOR_SECTION
);
96 ok_eq_longlong(MaximumSize
.QuadPart
, 1LL);
97 ok_eq_pointer(SectionObject
, InvalidPointer
);