#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;
//
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
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 _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
//
extern POBJECT_TYPE NTSYSAPI MmSectionObjectType;
+#ifdef __cplusplus
+}; // extern "C"
+#endif
+
#endif // !NTOS_MODE_USER
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
#endif // _MMTYPES_H