#include <arch/mmtypes.h>
#include <extypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
//
// Page-Rounding Macros
//
#define MAP_PROCESS 1
#define MAP_SYSTEM 2
-#ifndef NTOS_MODE_USER
+//
+// Flags for ProcessExecutionOptions
+//
+#define MEM_EXECUTE_OPTION_DISABLE 0x1
+#define MEM_EXECUTE_OPTION_ENABLE 0x2
+#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x4
+#define MEM_EXECUTE_OPTION_PERMANENT 0x8
+#define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE 0x10
+#define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE 0x20
+#define MEM_EXECUTE_OPTION_VALID_FLAGS 0x3F
+#ifndef NTOS_MODE_USER
//
// Virtual Memory Flags
//
MemoryBasicInformation,
MemoryWorkingSetList,
MemorySectionName,
- MemoryBasicVlmInformation
+ MemoryBasicVlmInformation,
+ MemoryWorkingSetExList
} MEMORY_INFORMATION_CLASS;
//
{
PVOID TransferAddress;
ULONG ZeroBits;
- ULONG MaximumStackSize;
- ULONG CommittedStackSize;
+ SIZE_T MaximumStackSize;
+ SIZE_T CommittedStackSize;
ULONG SubSystemType;
- USHORT SubSystemMinorVersion;
- USHORT SubSystemMajorVersion;
+ union
+ {
+ struct
+ {
+ USHORT SubSystemMinorVersion;
+ USHORT SubSystemMajorVersion;
+ };
+ ULONG SubSystemVersion;
+ };
ULONG GpValue;
USHORT ImageCharacteristics;
USHORT DllCharacteristics;
USHORT Machine;
- UCHAR ImageContainsCode;
- UCHAR Spare1;
+ BOOLEAN ImageContainsCode;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ union
+ {
+ struct
+ {
+ UCHAR ComPlusNativeReady:1;
+ UCHAR ComPlusILOnly:1;
+ UCHAR ImageDynamicallyRelocated:1;
+ UCHAR ImageMappedFlat:1;
+ UCHAR Reserved:4;
+ };
+ UCHAR ImageFlags;
+ };
+#else
+ BOOLEAN Spare1;
+#endif
ULONG LoaderFlags;
ULONG ImageFileSize;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ ULONG CheckSum;
+#else
ULONG Reserved[1];
+#endif
} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
#ifndef NTOS_MODE_USER
{
union
{
- ULONG Long;
+ ULONG_PTR Long;
HARDWARE_PTE Flush;
MMPTE_HARDWARE Hard;
MMPTE_PROTOTYPE Proto;
MMPTE ThePtes[1];
} SEGMENT, *PSEGMENT;
+typedef struct _MAPPED_FILE_SEGMENT
+{
+ struct _CONTROL_AREA *ControlArea;
+ ULONG TotalNumberOfPtes;
+ ULONG NonExtendedPtes;
+ ULONG Spare0;
+ UINT64 SizeOfSegment;
+ MMPTE SegmentPteTemplate;
+ SIZE_T NumberOfCommittedPages;
+ PMMEXTEND_INFO ExtendInfo;
+ SEGMENT_FLAGS SegmentFlags;
+ PVOID BasedAddress;
+ struct _MSUBSECTION *LastSubsectionHint;
+} MAPPED_FILE_SEGMENT, *PMAPPED_FILE_SEGMENT;
+
//
// Event Counter Structure
//
//
typedef struct _MMADDRESS_LIST
{
- ULONG StartVpn;
- ULONG EndVpn;
+ ULONG_PTR StartVpn;
+ ULONG_PTR EndVpn;
} MMADDRESS_LIST, *PMMADDRESS_LIST;
//
//
typedef struct _MMVAD_FLAGS
{
- ULONG CommitCharge:19;
- ULONG NoChange:1;
- ULONG VadType:3;
- ULONG MemCommit:1;
- ULONG Protection:5;
- ULONG Spare:2;
- ULONG PrivateMemory:1;
+#ifdef _WIN64
+ ULONG_PTR CommitCharge:51;
+#else
+ ULONG_PTR CommitCharge:19;
+#endif
+ ULONG_PTR NoChange:1;
+ ULONG_PTR VadType:3;
+ ULONG_PTR MemCommit:1;
+ ULONG_PTR Protection:5;
+ ULONG_PTR Spare:2;
+ ULONG_PTR PrivateMemory:1;
} MMVAD_FLAGS, *PMMVAD_FLAGS;
//
} u1;
struct _MMVAD *LeftChild;
struct _MMVAD *RightChild;
- ULONG StartingVpn;
- ULONG EndingVpn;
+ ULONG_PTR StartingVpn;
+ ULONG_PTR EndingVpn;
union
{
- ULONG LongFlags;
+ ULONG_PTR LongFlags;
MMVAD_FLAGS VadFlags;
} u;
PCONTROL_AREA ControlArea;
//
// Long VAD used in section and private allocations
//
-typedef struct _MMVAD_LONG
+typedef struct _MMVAD_LONG
{
union
{
} u1;
PMMVAD LeftChild;
PMMVAD RightChild;
- ULONG StartingVpn;
- ULONG EndingVpn;
+ ULONG_PTR StartingVpn;
+ ULONG_PTR EndingVpn;
union
{
- ULONG LongFlags;
+ ULONG_PTR LongFlags;
MMVAD_FLAGS VadFlags;
} u;
PCONTROL_AREA ControlArea;
} u1;
PMMVAD LeftChild;
PMMVAD RightChild;
- ULONG StartingVpn;
- ULONG EndingVpn;
+ ULONG_PTR StartingVpn;
+ ULONG_PTR EndingVpn;
union
{
- ULONG LongFlags;
+ ULONG_PTR LongFlags;
MMVAD_FLAGS VadFlags;
} u;
} MMVAD_SHORT, *PMMVAD_SHORT;
//
typedef struct _MMWSLENTRY
{
- ULONG Valid:1;
- ULONG LockedInWs:1;
- ULONG LockedInMemory:1;
- ULONG Protection:5;
- ULONG Hashed:1;
- ULONG Direct:1;
- ULONG Age:2;
- ULONG VirtualPageNumber:20;
+ ULONG_PTR Valid:1;
+ ULONG_PTR LockedInWs:1;
+ ULONG_PTR LockedInMemory:1;
+ ULONG_PTR Protection:5;
+ ULONG_PTR Hashed:1;
+ ULONG_PTR Direct:1;
+ ULONG_PTR Age:2;
+ ULONG_PTR VirtualPageNumber: MM_PAGE_FRAME_NUMBER_SIZE;
} MMWSLENTRY, *PMMWSLENTRY;
typedef struct _MMWSLE
union
{
PVOID VirtualAddress;
- ULONG Long;
+ ULONG_PTR Long;
MMWSLENTRY e1;
} u1;
} MMWSLE, *PMMWSLE;
ULONG NumberOfThunks;
} DRIVER_SPECIFIED_VERIFIER_THUNKS, *PDRIVER_SPECIFIED_VERIFIER_THUNKS;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
//
// Default heap size values. For user mode, these values are copied to a new
// process's PEB by the kernel in MmCreatePeb. In kernel mode, RtlCreateHeap
//
// Section Object Type
//
-extern POBJECT_TYPE MmSectionObjectType;
+extern POBJECT_TYPE NTSYSAPI MmSectionObjectType;
+
+#ifdef __cplusplus
+}; // extern "C"
+#endif
#endif // !NTOS_MODE_USER
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
#endif // _MMTYPES_H