10 #define ROUND_DOWN(n,align) (((ULONG_PTR)n) & ~((align) - 1l)) 11 #define DEFAULT_ALLOC_SIZE 200 13 #define PAGE_NOPROT 0x0 //MEM_RESERVE has this type of "protection" 16 const char TestString[] =
"TheLongBrownFoxJumpedTheWhiteRabbitTheLongBrownFoxJumpedTheWhiteRabbitTheLongBrownFoxJumpedTheWhiteRabbitTheLongBrownFoxJumpedTheWhiteRabbitTheLongBrownFoxJumpedTheWhiteRabbitTheLongBrownFoxJumpedThe";
32 #define ALLOC_MEMORY_WITH_FREE(ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect, RetStatus, FreeStatus) \ 34 PVOID __BaseSave = BaseAddress; \ 35 Status = ZwAllocateVirtualMemory(ProcessHandle, &BaseAddress, ZeroBits, &RegionSize, AllocationType, Protect); \ 36 ok_eq_hex(Status, RetStatus); \ 37 if (__BaseSave != NULL) \ 38 ok_eq_pointer(BaseAddress, __BaseSave); \ 39 else if (!NT_SUCCESS(Status)) \ 40 ok_eq_pointer(BaseAddress, NULL); \ 42 Status = ZwFreeVirtualMemory(ProcessHandle, &BaseAddress, &RegionSize, MEM_RELEASE); \ 43 if (FreeStatus != IGNORE) ok_eq_hex(Status, FreeStatus); \ 45 RegionSize = DEFAULT_ALLOC_SIZE; \ 298 static PVOID bases[1024];
310 if ((
Index % 10) == 0)
325 trace(
"Finished reserving. Error code %x. Chunks allocated: %d\n",
Status,
Index );
367 if ((
Index % 10) == 0)
428 if (StartContext1 ==
NULL || StartContext2 ==
NULL)
430 trace(
"Error allocating space for context structs\n");
441 trace(
"Error creating thread1\n");
448 trace(
"error referencing thread1\n");
455 trace(
"Error creating thread2\n");
462 trace(
"error referencing thread2\n");
468 if (ThreadObjects[0])
471 if (StartContext1 !=
NULL)
474 if (ThreadObjects[1])
477 if (StartContext2 !=
NULL)
480 if (ThreadObjects[0] !=
NULL)
483 if (ThreadObjects[1] !=
NULL)
static NTSTATUS StressTesting(ULONG AllocationType)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define ok_eq_ulong(value, expected)
static VOID SimpleErrorChecks(VOID)
#define THREAD_ALL_ACCESS
struct _TEST_CONTEXT TEST_CONTEXT
VOID Test_ZwAllocateVirtualMemory(VOID)
_In_ ULONG _In_ ULONG _In_ ULONG Length
EH_STD::basic_string< char, EH_STD::char_traits< char >, eh_allocator(char) > TestString
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG _In_ ULONG Protect
IN BOOLEAN OUT PSTR Buffer
#define ok_eq_size(value, expected)
#define ok_eq_int(value, expected)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
static VOID CheckBufferReadWrite(PVOID Destination, CONST VOID *Source, SIZE_T Length, NTSTATUS ExpectedStatus)
static VOID KmtInitTestContext(PTEST_CONTEXT Ctx, SHORT ThreadId, ULONG RegionSize, ULONG AllocationType, ULONG Protect)
#define KmtEndSeh(ExpectedStatus)
#define STATUS_GUARD_PAGE_VIOLATION
#define INVALID_HANDLE_VALUE
IN PVOID IN PVOID IN USHORT IN USHORT Size
#define ALLOC_MEMORY_WITH_FREE(ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect, RetStatus, FreeStatus)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
#define OBJ_KERNEL_HANDLE
START_TEST(ZwAllocateVirtualMemory)
static DWORD WINAPI Thread1(_Inout_opt_ PVOID Parameter)
#define STATUS_INVALID_HANDLE
BOOLEAN KmtIsCheckedBuild
#define ok_bool_true(value, desc)
#define PAGE_EXECUTE_WRITECOPY
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 STATUS_INVALID_PARAMETER_3
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define Test_NtQueryVirtualMemory(BaseAddress, Size, AllocationType, ProtectionType)
#define STATUS_INVALID_PARAMETER_2
static VOID SystemProcessTest(VOID)
#define NtCurrentProcess()
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define STATUS_INVALID_PARAMETER_5
static NTSTATUS SimpleAllocation(VOID)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
#define ObDereferenceObject
static VOID NTAPI SystemProcessTestWorker(PVOID StartContext)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
struct _TEST_CONTEXT * PTEST_CONTEXT
#define ExAllocatePoolWithTag(hernya, size, tag)
static SIZE_T CheckBufferRead(CONST VOID *Source, CONST VOID *Destination, SIZE_T Length, NTSTATUS ExpectedStatus)
#define BYTES_TO_PAGES(Size)
#define DEFAULT_ALLOC_SIZE
POBJECT_TYPE PsThreadType
#define STATUS_INVALID_PAGE_PROTECTION
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG AllocationType
const ULONG TestStringSize
#define PAGE_WRITECOMBINE
#define STATUS_MEMORY_NOT_ALLOCATED
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define STATUS_ACCESS_VIOLATION
static VOID CustomBaseAllocation(VOID)
__kernel_entry _Inout_ _Inout_ PSIZE_T RegionSize
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
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)
static DWORD WINAPI Thread2(_Inout_opt_ PVOID Parameter)
static BOOLEAN CheckBuffer(PVOID Buffer, SIZE_T Size, UCHAR Value)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
char * cleanup(char *str)
#define RtlCopyMemory(Destination, Source, Length)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
#define STATUS_INVALID_PARAMETER_4
#define STATUS_CONFLICTING_ADDRESSES
#define ExFreePoolWithTag(_P, _T)
#define ok_eq_hex(value, expected)
#define MmSystemRangeStart
#define ROUND_DOWN(n, align)
#define STATUS_UNABLE_TO_DELETE_SECTION
#define MM_ALLOCATION_GRANULARITY
#define RtlCompareMemory(s1, s2, l)