11#define NEW_CONTENT "NewContent"
12#define NEW_CONTENT_LEN sizeof(NEW_CONTENT)
13#define IsInvalidParamStatus(Status) \
14 (Status == STATUS_INVALID_PARAMETER || Status == STATUS_INVALID_PARAMETER_MIX || \
15 (Status >= STATUS_INVALID_PARAMETER_1 && Status <= STATUS_INVALID_PARAMETER_12))
16#define ok_invalid_parameter(Status) ok(IsInvalidParamStatus(Status), "Invalid status code (0x%X)\n", Status)
28#define TestMapView(SectionHandle, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect, MapStatus, UnmapStatus) do \
30 Status = ZwMapViewOfSection(SectionHandle, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect); \
31 if (GetNTVersion() >= _WIN32_WINNT_WIN10 && IsInvalidParamStatus(MapStatus)) \
32 ok_invalid_parameter(MapStatus); \
34 ok_eq_hex(Status, MapStatus); \
35 if (NT_SUCCESS(Status)) \
37 Status = ZwUnmapViewOfSection(ProcessHandle, BaseAddress); \
38 if (UnmapStatus != IGNORE) ok_eq_hex(Status, UnmapStatus); \
39 *BaseAddress2 = NULL; \
44#define MmTestMapView(Object, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect, MapStatus, UnmapStatus) do \
46 Status = MmMapViewOfSection(Object, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect); \
47 ok_eq_hex(Status, MapStatus); \
48 if (NT_SUCCESS(Status)) \
50 Status = MmUnmapViewOfSection(ProcessHandle, BaseAddress); \
51 if (UnmapStatus != IGNORE) ok_eq_hex(Status, UnmapStatus); \
52 *BaseAddress2 = NULL; \
57#define CheckObject(Handle, Pointers, Handles) do \
59 PUBLIC_OBJECT_BASIC_INFORMATION ObjectInfo; \
60 Status = ZwQueryObject(Handle, ObjectBasicInformation, \
61 &ObjectInfo, sizeof ObjectInfo, NULL); \
62 ok_eq_hex(Status, STATUS_SUCCESS); \
63 ok_eq_ulong(ObjectInfo.PointerCount, Pointers); \
64 ok_eq_ulong(ObjectInfo.HandleCount, Handles); \
76 Status = ZwCreateFile(ReadOnlyFile,
GENERIC_READ, &
NtdllObject, &
IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE,
NULL, 0);
78 ok(*ReadOnlyFile !=
NULL,
"Couldn't acquire READONLY handle\n");
81 Status = ZwCreateFile(ExecutableFile,
GENERIC_EXECUTE, &
NtdllObject, &
IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE,
NULL, 0);
83 ok(*ExecutableFile !=
NULL,
"Couldn't acquire EXECUTE handle\n");
87 Status = ZwCreateFile(WriteOnlyFile, (
GENERIC_WRITE |
SYNCHRONIZE), &
KmtestFileObject, &
IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE,
FILE_SUPERSEDE, (
FILE_NON_DIRECTORY_FILE |
FILE_DELETE_ON_CLOSE),
NULL, 0);
90 ok(*WriteOnlyFile !=
NULL,
"WriteOnlyFile is NULL\n");
91 if (!
skip(*WriteOnlyFile !=
NULL,
"No WriteOnlyFile\n"))
107 HANDLE WriteSectionHandle;
109 HANDLE PageFileSectionHandle;
133 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
134 TestMapView((
HANDLE)(
ULONG_PTR)0xDEADBEEFDEADBEEFull,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
135 TestMapView(
INVALID_HANDLE_VALUE,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_OBJECT_TYPE_MISMATCH,
IGNORE);
136 TestMapView(
NULL,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
139 TestMapView(WriteSectionHandle, (
HANDLE)(
ULONG_PTR)0xDEADBEEFDEADBEEFull, &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
140 TestMapView(WriteSectionHandle, (
HANDLE)
NULL, &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
144 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_MAPPED_ALIGNMENT,
IGNORE);
147 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
150 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_3,
IGNORE);
154 TestMapView((
HANDLE)(
ULONG_PTR)0xDEADBEEFDEADBEEFull,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
158 TestMapView(WriteSectionHandle, (
HANDLE)(
ULONG_PTR)0xDEADBEEFDEADBEEFull, &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_HANDLE,
IGNORE);
165 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_CONFLICTING_ADDRESSES,
IGNORE);
172 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 1, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
173 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 5, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
174 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, -1, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_4,
IGNORE);
176 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 1, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
GetNTVersion() >=
_WIN32_WINNT_WIN8 ?
STATUS_INVALID_PARAMETER_4 :
STATUS_SUCCESS,
STATUS_SUCCESS);
177 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 5, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
GetNTVersion() >=
_WIN32_WINNT_WIN8 ?
STATUS_INVALID_PARAMETER_4 :
STATUS_SUCCESS,
STATUS_SUCCESS);
178 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, -1, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
IGNORE);
180 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 20, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_NO_MEMORY,
IGNORE);
181 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 21, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_NO_MEMORY,
IGNORE);
182 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 22, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_4,
IGNORE);
185 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 500,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
186 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
187 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, -1,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_5,
IGNORE);
188 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0x10000000,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_5,
IGNORE);
189 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 500,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_5,
IGNORE);
190 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 500,
NULL, &
ViewSize,
ViewUnmap,
MEM_RESERVE,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
194 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0, &
SectionOffset, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
198 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 500, &
SectionOffset, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_MAPPED_ALIGNMENT,
IGNORE);
201 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0, &
SectionOffset, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_MAPPED_ALIGNMENT,
IGNORE);
204 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
207 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_3,
IGNORE);
210 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_VIEW_SIZE,
IGNORE);
211 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap,
MEM_RESERVE,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
214 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
217 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
220 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap,
MEM_RESERVE,
PAGE_READWRITE,
STATUS_SUCCESS,
STATUS_SUCCESS);
221 TestMapView(PageFileSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap,
MEM_RESERVE,
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_9,
STATUS_SUCCESS);
222 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, (
MEM_RESERVE |
MEM_COMMIT),
PAGE_READWRITE,
STATUS_INVALID_PARAMETER_9,
IGNORE);
223 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, (
MEM_LARGE_PAGES |
MEM_RESERVE),
PAGE_READWRITE, (
NTSTATUS)(
GetNTVersion() >=
_WIN32_WINNT_WIN10 ?
STATUS_INVALID_PARAMETER :
STATUS_SUCCESS),
STATUS_SUCCESS);
226 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READONLY,
STATUS_SUCCESS,
STATUS_SUCCESS);
227 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_NOACCESS,
STATUS_SUCCESS,
STATUS_SUCCESS);
228 TestMapView(WriteSectionHandle,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_EXECUTE_WRITECOPY,
STATUS_SECTION_PROTECTION,
IGNORE);
229 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_SECTION_PROTECTION,
IGNORE);
230 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_WRITECOPY,
STATUS_SUCCESS,
STATUS_SUCCESS);
231 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_EXECUTE_READ,
STATUS_SECTION_PROTECTION,
IGNORE);
232 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_EXECUTE,
STATUS_SECTION_PROTECTION,
IGNORE);
233 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_READONLY,
STATUS_SUCCESS,
STATUS_SUCCESS);
234 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0,
PAGE_NOACCESS,
STATUS_SUCCESS,
STATUS_SUCCESS);
235 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap, 0, (
PAGE_READWRITE |
PAGE_READONLY),
STATUS_INVALID_PAGE_PROTECTION,
IGNORE);
236 TestMapView(ReadOnlySection,
NtCurrentProcess(), &
BaseAddress, 0, 0,
NULL, &
ViewSize,
ViewUnmap,
MEM_RESERVE,
PAGE_READONLY,
STATUS_SECTION_PROTECTION,
IGNORE);
239 ZwClose(PageFileSectionHandle);
301 MmTestMapView(
SectionObject,
PsGetCurrentProcess(), &
BaseAddress, 0,
TestStringSize, &
SectionOffset, &
ViewSize,
ViewUnmap, 0,
PAGE_READWRITE,
STATUS_INVALID_VIEW_SIZE,
IGNORE);
321 if (!
skip((FileContent !=
NULL),
"Error allocating memory for FileContent\n"))
405 HANDLE WriteSectionHandle;
460 if (!
skip(
NT_SUCCESS(
Status),
"Error getting reference to System thread when testing file-backed section\n"))
563 HANDLE PageFileSectionHandle;
612 if (!
skip(
NT_SUCCESS(
Status),
"Error getting reference to System thread when testing pagefile-backed section\n"))
627 ZwClose(PageFileSectionHandle);
642 KmtInitTestFiles(&FileHandleReadOnly, &FileHandleWriteOnly, &ExecutableFileHandle);
644 SimpleErrorChecks(FileHandleReadOnly, FileHandleWriteOnly, ExecutableFileHandle);
649 if (FileHandleReadOnly)
652 if (FileHandleWriteOnly)
655 if (ExecutableFileHandle)
#define MmTestMapView(Object, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect, MapStatus, UnmapStatus)
static OBJECT_ATTRIBUTES NtoskrnlFileObject
static VOID KmtInitTestFiles(PHANDLE ReadOnlyFile, PHANDLE WriteOnlyFile, PHANDLE ExecutableFile)
static VOID NTAPI SystemProcessWorker(PVOID StartContext)
static UNICODE_STRING FileReadOnlyPath
static VOID AdvancedErrorChecks(HANDLE FileHandleReadOnly, HANDLE FileHandleWriteOnly)
static SIZE_T CompareFileContents(HANDLE FileHandle, ULONG BufferLength, PVOID Buffer)
static UNICODE_STRING SharedSectionName
#define TestMapView(SectionHandle, ProcessHandle, BaseAddress2, ZeroBits, CommitSize, SectionOffset, ViewSize2, InheritDisposition, AllocationType, Win32Protect, MapStatus, UnmapStatus)
static VOID SimpleErrorChecks(HANDLE FileHandleReadOnly, HANDLE FileHandleWriteOnly, HANDLE ExecutableImg)
#define CheckObject(Handle, Pointers, Handles)
static UNICODE_STRING WritableFilePath
static VOID BehaviorChecks(HANDLE FileHandleReadOnly, HANDLE FileHandleWriteOnly)
const ULONG TestStringSize
static VOID PageFileBehaviorChecks()
static OBJECT_ATTRIBUTES KmtestFileObject
static OBJECT_ATTRIBUTES NtdllObject
static UNICODE_STRING NtosImgPath
#define ok_eq_hex(value, expected)
#define ok_eq_size(value, expected)
#define ok_eq_ulongptr(value, expected)
#define ok_eq_ulonglong(value, expected)
#define FILE_NON_DIRECTORY_FILE
#define FILE_DELETE_ON_CLOSE
_In_ PFCB _In_ LONGLONG FileOffset
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_INVALID_HANDLE
#define STATUS_OBJECT_TYPE_MISMATCH
#define NT_SUCCESS(StatCode)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define RtlCompareMemory(s1, s2, l)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define Test_NtQueryVirtualMemory(BaseAddress, Size, AllocationType, ProtectionType)
#define KmtEndSeh(ExpectedStatus)
#define ExFreePoolWithTag(_P, _T)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
#define MM_ALLOCATION_GRANULARITY
NTSYSAPI NTSTATUS NTAPI ZwOpenSection(_Out_ PHANDLE SectionHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define THREAD_ALL_ACCESS
#define PAGE_EXECUTE_READ
#define SECTION_ALL_ACCESS
#define NtCurrentProcess()
#define STANDARD_RIGHTS_ALL
#define PAGE_EXECUTE_WRITECOPY
#define UNREFERENCED_PARAMETER(P)
#define MmSystemRangeStart
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
POBJECT_TYPE PsThreadType
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
#define STATUS_INVALID_VIEW_SIZE
#define STATUS_MAPPED_ALIGNMENT
#define STATUS_SECTION_PROTECTION
#define STATUS_INVALID_PARAMETER_9
#define STATUS_INVALID_PARAMETER_4
#define STATUS_ACCESS_VIOLATION
#define STATUS_CONFLICTING_ADDRESSES
#define STATUS_INVALID_PAGE_PROTECTION
#define STATUS_GUARD_PAGE_VIOLATION
#define STATUS_INVALID_PARAMETER_3
#define STATUS_INVALID_PARAMETER_5
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define _WIN32_WINNT_WIN10
#define _WIN32_WINNT_WINBLUE
#define _WIN32_WINNT_WIN8
EH_STD::basic_string< char, EH_STD::char_traits< char >, eh_allocator(char) > TestString
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INVALID_PARAMETER
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
#define ObDereferenceObject
#define PsGetCurrentProcess