4 #define TestProcessHandle (HANDLE) 1
5 #define TestProcessObject (PVOID) 0x2
6 #define TestBaseAddress (PVOID) 0x1000
7 #define TestNumberOfBytesToLock 0x2000
8 #define TestMdl (PMDL) 0xD0000000
10 static BOOLEAN MockExFreePoolCalled
= FALSE
;
13 MockExFreePool(PVOID Block
)
15 _AssertFalse(MockExFreePoolCalled
);
16 _AssertEqualValue(TestMdl
, Block
);
17 MockExFreePoolCalled
= TRUE
;
20 static BOOLEAN MockMmCreateMdlCalled
= FALSE
;
23 MockMmCreateMdl(PMDL Mdl
,
27 _AssertFalse(MockMmCreateMdlCalled
);
28 _AssertEqualValue(TestBaseAddress
, Base
);
29 _AssertEqualValue(TestNumberOfBytesToLock
, Length
);
30 MockMmCreateMdlCalled
= TRUE
;
34 static BOOLEAN MockMmProbeAndLockPagesCalled
= FALSE
;
37 MockMmProbeAndLockPages(PMDL Mdl
,
38 KPROCESSOR_MODE AccessMode
,
39 LOCK_OPERATION Operation
)
41 _AssertFalse(MockMmProbeAndLockPagesCalled
);
42 _AssertEqualValue(TestMdl
, Mdl
);
43 _AssertEqualValue(UserMode
, AccessMode
);
44 _AssertEqualValue(IoWriteAccess
, Operation
);
45 MockMmProbeAndLockPagesCalled
= TRUE
;
48 static BOOLEAN MockObDereferenceObjectCalled
= FALSE
;
51 MockObDereferenceObject(PVOID Object
)
53 _AssertFalse(MockObDereferenceObjectCalled
);
54 _AssertEqualValue(TestProcessObject
, Object
);
55 MockObDereferenceObjectCalled
= TRUE
;
58 static BOOLEAN MockObReferenceObjectByHandleCalled
= FALSE
;
60 static NTSTATUS STDCALL
61 MockObReferenceObjectByHandle(HANDLE Handle
,
62 ACCESS_MASK DesiredAccess
,
63 POBJECT_TYPE ObjectType
,
64 KPROCESSOR_MODE AccessMode
,
66 POBJECT_HANDLE_INFORMATION HandleInformation
)
68 _AssertFalse(MockObReferenceObjectByHandleCalled
);
69 _AssertEqualValue(TestProcessHandle
, Handle
);
70 _AssertEqualValue(PROCESS_VM_WRITE
, DesiredAccess
);
71 _AssertEqualValue(NULL
, ObjectType
);
72 _AssertEqualValue(UserMode
, AccessMode
);
73 _AssertNotEqualValue(NULL
, Object
);
74 _AssertEqualValue(NULL
, HandleInformation
);
75 *Object
= TestProcessObject
;
76 MockObReferenceObjectByHandleCalled
= TRUE
;
77 return STATUS_SUCCESS
;
82 ULONG NumberOfBytesLocked
;
85 status
= NtLockVirtualMemoryInternal(TestProcessHandle
,
87 TestNumberOfBytesToLock
,
89 MockObReferenceObjectByHandle
,
91 MockObDereferenceObject
,
92 MockMmProbeAndLockPages
,
94 _AssertEqualValue(STATUS_SUCCESS
, status
);
95 _AssertTrue(MockObReferenceObjectByHandleCalled
);
96 _AssertTrue(MockMmCreateMdlCalled
);
97 _AssertTrue(MockMmProbeAndLockPagesCalled
);
98 _AssertTrue(MockExFreePoolCalled
);
99 _AssertTrue(MockObDereferenceObjectCalled
);
100 _AssertEqualValue(TestNumberOfBytesToLock
, NumberOfBytesLocked
);
103 _Dispatcher(VirtualmemoryTest
, "Virtual memory")