-/*\r
- WDM (far from finished!)\r
-*/\r
+#ifndef _WDMDDK_\r
+#define _WDMDDK_\r
\r
-#ifndef WDM_H\r
-#define WDM_H\r
+//\r
+// Dependencies\r
+//\r
+#define NT_INCLUDED\r
+#include <excpt.h>\r
+#include <ntdef.h>\r
+#include <ntstatus.h>\r
\r
+#ifdef __GNUC__\r
+#include "intrin.h"\r
+#endif\r
+\r
+typedef struct _CONTEXT *PCONTEXT;\r
+\r
+//\r
+// Resource list definitions\r
+//\r
typedef int CM_RESOURCE_TYPE;\r
\r
-#define CmResourceTypeNull 0\r
-#define CmResourceTypePort 1\r
-#define CmResourceTypeInterrupt 2\r
-#define CmResourceTypeMemory 3\r
-#define CmResourceTypeDma 4\r
-#define CmResourceTypeDeviceSpecific 5\r
-#define CmResourceTypeBusNumber 6\r
-#define CmResourceTypeNonArbitrated 128\r
-#define CmResourceTypeConfigData 128\r
-#define CmResourceTypeDevicePrivate 129\r
-#define CmResourceTypePcCardConfig 130\r
-#define CmResourceTypeMfCardConfig 131\r
+#define CmResourceTypeNull 0\r
+#define CmResourceTypePort 1\r
+#define CmResourceTypeInterrupt 2\r
+#define CmResourceTypeMemory 3\r
+#define CmResourceTypeDma 4\r
+#define CmResourceTypeDeviceSpecific 5\r
+#define CmResourceTypeBusNumber 6\r
+#define CmResourceTypeNonArbitrated 128\r
+#define CmResourceTypeConfigData 128\r
+#define CmResourceTypeDevicePrivate 129\r
+#define CmResourceTypePcCardConfig 130\r
+#define CmResourceTypeMfCardConfig 131\r
+\r
+\r
+\r
+//\r
+// Global debug flag\r
+//\r
+extern ULONG NtGlobalFlag;\r
+\r
+\r
+\r
+//\r
+// Section map options\r
+//\r
+typedef enum _SECTION_INHERIT {\r
+ ViewShare = 1,\r
+ ViewUnmap = 2\r
+} SECTION_INHERIT;\r
+\r
+//\r
+// Section access rights\r
+//\r
+#define SECTION_QUERY 0x0001\r
+#define SECTION_MAP_WRITE 0x0002\r
+#define SECTION_MAP_READ 0x0004\r
+#define SECTION_MAP_EXECUTE 0x0008\r
+#define SECTION_EXTEND_SIZE 0x0010\r
+#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020\r
+\r
+#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\\r
+ SECTION_MAP_WRITE | \\r
+ SECTION_MAP_READ | \\r
+ SECTION_MAP_EXECUTE | \\r
+ SECTION_EXTEND_SIZE)\r
+\r
+#define SESSION_QUERY_ACCESS 0x0001\r
+#define SESSION_MODIFY_ACCESS 0x0002\r
+\r
+#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \\r
+ SESSION_QUERY_ACCESS | \\r
+ SESSION_MODIFY_ACCESS)\r
+\r
+\r
+\r
+#define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS\r
+\r
+#define PAGE_NOACCESS 0x01\r
+#define PAGE_READONLY 0x02\r
+#define PAGE_READWRITE 0x04\r
+#define PAGE_WRITECOPY 0x08\r
+#define PAGE_EXECUTE 0x10\r
+#define PAGE_EXECUTE_READ 0x20\r
+#define PAGE_EXECUTE_READWRITE 0x40\r
+#define PAGE_EXECUTE_WRITECOPY 0x80\r
+#define PAGE_GUARD 0x100\r
+#define PAGE_NOCACHE 0x200\r
+#define PAGE_WRITECOMBINE 0x400\r
+\r
+#define MEM_COMMIT 0x1000\r
+#define MEM_RESERVE 0x2000\r
+#define MEM_DECOMMIT 0x4000\r
+#define MEM_RELEASE 0x8000\r
+#define MEM_FREE 0x10000\r
+#define MEM_PRIVATE 0x20000\r
+#define MEM_MAPPED 0x40000\r
+#define MEM_RESET 0x80000\r
+#define MEM_TOP_DOWN 0x100000\r
+#define MEM_LARGE_PAGES 0x20000000\r
+#define MEM_4MB_PAGES 0x80000000\r
+\r
+#define SEC_RESERVE 0x4000000 \r
+#define SEC_LARGE_PAGES 0x80000000\r
+\r
+#define PROCESS_DUP_HANDLE (0x0040)\r
+\r
+#if (NTDDI_VERSION >= NTDDI_VISTA)\r
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \\r
+ 0xFFFF)\r
+#else\r
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \\r
+ 0xFFF)\r
+#endif\r
+\r
+\r
+\r
+//\r
+// Processor features\r
+//\r
+#define PF_FLOATING_POINT_PRECISION_ERRATA 0 \r
+#define PF_FLOATING_POINT_EMULATED 1 \r
+#define PF_COMPARE_EXCHANGE_DOUBLE 2 \r
+#define PF_MMX_INSTRUCTIONS_AVAILABLE 3 \r
+#define PF_PPC_MOVEMEM_64BIT_OK 4 \r
+#define PF_ALPHA_BYTE_INSTRUCTIONS 5 \r
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 \r
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 \r
+#define PF_RDTSC_INSTRUCTION_AVAILABLE 8 \r
+#define PF_PAE_ENABLED 9 \r
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 \r
+#define PF_SSE_DAZ_MODE_AVAILABLE 11 \r
+#define PF_NX_ENABLED 12 \r
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 \r
+#define PF_COMPARE_EXCHANGE128 14 \r
+#define PF_COMPARE64_EXCHANGE128 15 \r
+#define PF_CHANNELS_ENABLED 16 \r
+\r
+\r
+\r
+//\r
+// Intrinsics (note: taken from our winnt.h)\r
+// FIXME: 64-bit\r
+//\r
+#if defined(__GNUC__)\r
+\r
+static __inline__ BOOLEAN\r
+InterlockedBitTestAndSet(IN LONG volatile *Base,\r
+ IN LONG Bit)\r
+{\r
+#if defined(_M_IX86)\r
+ LONG OldBit;\r
+ __asm__ __volatile__("lock "\r
+ "btsl %2,%1\n\t"\r
+ "sbbl %0,%0\n\t"\r
+ :"=r" (OldBit),"+m" (*Base)\r
+ :"Ir" (Bit)\r
+ : "memory");\r
+ return OldBit;\r
+#else\r
+ return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;\r
+#endif\r
+}\r
+\r
+static __inline__ BOOLEAN\r
+InterlockedBitTestAndReset(IN LONG volatile *Base,\r
+ IN LONG Bit)\r
+{\r
+#if defined(_M_IX86)\r
+ LONG OldBit;\r
+ __asm__ __volatile__("lock "\r
+ "btrl %2,%1\n\t"\r
+ "sbbl %0,%0\n\t"\r
+ :"=r" (OldBit),"+m" (*Base)\r
+ :"Ir" (Bit)\r
+ : "memory");\r
+ return OldBit;\r
+#else\r
+ return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;\r
+#endif\r
+}\r
+\r
+#define BitScanForward _BitScanForward\r
+#define BitScanReverse _BitScanReverse\r
+\r
+#endif\r
+\r
+\r
+#if defined(_M_IX86)\r
+#define YieldProcessor() __asm__ __volatile__("pause");\r
+#elif defined (_M_AMD64)\r
+#define YieldProcessor() __asm__ __volatile__("pause");\r
+#elif defined(_M_PPC)\r
+#define YieldProcessor() __asm__ __volatile__("nop");\r
+#elif defined(_M_MIPS)\r
+#define YieldProcessor() __asm__ __volatile__("nop");\r
+#elif defined(_M_ARM)\r
+#define YieldProcessor()\r
+#else\r
+#error Unknown architecture\r
+#endif\r
+\r
+\r
+\r
+//\r
+// Slist Header\r
+//\r
+#ifndef _SLIST_HEADER_\r
+#define _SLIST_HEADER_\r
+\r
+#define SLIST_ENTRY SINGLE_LIST_ENTRY\r
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY\r
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY\r
+\r
+typedef union _SLIST_HEADER {\r
+ ULONGLONG Alignment;\r
+ struct {\r
+ SLIST_ENTRY Next;\r
+ USHORT Depth;\r
+ USHORT Sequence;\r
+ } DUMMYSTRUCTNAME;\r
+} SLIST_HEADER, *PSLIST_HEADER;\r
+\r
+#endif /* _SLIST_HEADER_ */\r
+\r
+\r
+\r
+//\r
+// Power States/Levels\r
+//\r
+typedef enum _SYSTEM_POWER_STATE {\r
+ PowerSystemUnspecified,\r
+ PowerSystemWorking,\r
+ PowerSystemSleeping1,\r
+ PowerSystemSleeping2,\r
+ PowerSystemSleeping3,\r
+ PowerSystemHibernate,\r
+ PowerSystemShutdown,\r
+ PowerSystemMaximum\r
+} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;\r
+\r
+#define POWER_SYSTEM_MAXIMUM PowerSystemMaximum\r
+\r
+typedef enum _POWER_INFORMATION_LEVEL {\r
+ SystemPowerPolicyAc,\r
+ SystemPowerPolicyDc,\r
+ VerifySystemPolicyAc,\r
+ VerifySystemPolicyDc,\r
+ SystemPowerCapabilities,\r
+ SystemBatteryState,\r
+ SystemPowerStateHandler,\r
+ ProcessorStateHandler,\r
+ SystemPowerPolicyCurrent,\r
+ AdministratorPowerPolicy,\r
+ SystemReserveHiberFile,\r
+ ProcessorInformation,\r
+ SystemPowerInformation,\r
+ ProcessorStateHandler2,\r
+ LastWakeTime,\r
+ LastSleepTime,\r
+ SystemExecutionState,\r
+ SystemPowerStateNotifyHandler,\r
+ ProcessorPowerPolicyAc,\r
+ ProcessorPowerPolicyDc,\r
+ VerifyProcessorPowerPolicyAc,\r
+ VerifyProcessorPowerPolicyDc,\r
+ ProcessorPowerPolicyCurrent\r
+} POWER_INFORMATION_LEVEL;\r
+\r
+typedef enum {\r
+ PowerActionNone,\r
+ PowerActionReserved,\r
+ PowerActionSleep,\r
+ PowerActionHibernate,\r
+ PowerActionShutdown,\r
+ PowerActionShutdownReset,\r
+ PowerActionShutdownOff,\r
+ PowerActionWarmEject\r
+} POWER_ACTION, *PPOWER_ACTION;\r
+\r
+typedef enum _DEVICE_POWER_STATE {\r
+ PowerDeviceUnspecified,\r
+ PowerDeviceD0,\r
+ PowerDeviceD1,\r
+ PowerDeviceD2,\r
+ PowerDeviceD3,\r
+ PowerDeviceMaximum\r
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;\r
+\r
+#define ES_SYSTEM_REQUIRED 0x00000001\r
+#define ES_DISPLAY_REQUIRED 0x00000002\r
+#define ES_USER_PRESENT 0x00000004\r
+#define ES_CONTINUOUS 0x80000000\r
+\r
+typedef ULONG EXECUTION_STATE;\r
+\r
+typedef enum {\r
+ LT_DONT_CARE,\r
+ LT_LOWEST_LATENCY\r
+} LATENCY_TIME;\r
\r
+\r
+\r
+//\r
+// Access/Security Stuff\r
+//\r
+typedef ULONG ACCESS_MASK, *PACCESS_MASK;\r
+typedef PVOID PACCESS_TOKEN;\r
+\r
+#define DELETE 0x00010000L\r
+#define READ_CONTROL 0x00020000L\r
+#define WRITE_DAC 0x00040000L\r
+#define WRITE_OWNER 0x00080000L\r
+#define SYNCHRONIZE 0x00100000L\r
+#define STANDARD_RIGHTS_REQUIRED 0x000F0000L\r
+#define STANDARD_RIGHTS_READ READ_CONTROL\r
+#define STANDARD_RIGHTS_WRITE READ_CONTROL\r
+#define STANDARD_RIGHTS_EXECUTE READ_CONTROL\r
+#define STANDARD_RIGHTS_ALL 0x001F0000L\r
+#define SPECIFIC_RIGHTS_ALL 0x0000FFFFL\r
+#define ACCESS_SYSTEM_SECURITY 0x01000000L\r
+#define MAXIMUM_ALLOWED 0x02000000L\r
+#define GENERIC_READ 0x80000000L\r
+#define GENERIC_WRITE 0x40000000L\r
+#define GENERIC_EXECUTE 0x20000000L\r
+#define GENERIC_ALL 0x10000000L\r
+\r
+typedef struct _GENERIC_MAPPING {\r
+ ACCESS_MASK GenericRead;\r
+ ACCESS_MASK GenericWrite;\r
+ ACCESS_MASK GenericExecute;\r
+ ACCESS_MASK GenericAll;\r
+} GENERIC_MAPPING, *PGENERIC_MAPPING;\r
+\r
+#define ACL_REVISION 2\r
+#define ACL_REVISION_DS 4\r
+\r
+#define ACL_REVISION1 1\r
+#define ACL_REVISION2 2\r
+#define ACL_REVISION3 3\r
+#define ACL_REVISION4 4\r
+#define MIN_ACL_REVISION ACL_REVISION2\r
+#define MAX_ACL_REVISION ACL_REVISION4\r
+\r
+typedef struct _ACL {\r
+ UCHAR AclRevision;\r
+ UCHAR Sbz1;\r
+ USHORT AclSize;\r
+ USHORT AceCount;\r
+ USHORT Sbz2;\r
+} ACL, *PACL;\r
+\r
+\r
+\r
+//\r
+// Current security descriptor revision value\r
+//\r
+#define SECURITY_DESCRIPTOR_REVISION (1)\r
+#define SECURITY_DESCRIPTOR_REVISION1 (1)\r
+\r
+//\r
+// Privilege attributes\r
+//\r
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)\r
+#define SE_PRIVILEGE_ENABLED (0x00000002L)\r
+#define SE_PRIVILEGE_REMOVED (0X00000004L)\r
+#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)\r
+\r
+#define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \\r
+ SE_PRIVILEGE_ENABLED | \\r
+ SE_PRIVILEGE_REMOVED | \\r
+ SE_PRIVILEGE_USED_FOR_ACCESS)\r
+\r
+#include <pshpack4.h>\r
+typedef struct _LUID_AND_ATTRIBUTES {\r
+ LUID Luid;\r
+ ULONG Attributes;\r
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;\r
+#include <poppack.h>\r
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];\r
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;\r
+\r
+\r
+\r
+//\r
+// Privilege sets\r
+//\r
+#define PRIVILEGE_SET_ALL_NECESSARY (1)\r
+\r
+typedef struct _PRIVILEGE_SET {\r
+ ULONG PrivilegeCount;\r
+ ULONG Control;\r
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];\r
+} PRIVILEGE_SET,*PPRIVILEGE_SET;\r
+\r
+typedef enum _SECURITY_IMPERSONATION_LEVEL {\r
+ SecurityAnonymous,\r
+ SecurityIdentification,\r
+ SecurityImpersonation,\r
+ SecurityDelegation\r
+} SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;\r
+\r
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation\r
+#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous\r
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation\r
+#define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))\r
+\r
+#define SECURITY_DYNAMIC_TRACKING (TRUE)\r
+#define SECURITY_STATIC_TRACKING (FALSE)\r
+\r
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;\r
+\r
+typedef struct _SECURITY_QUALITY_OF_SERVICE {\r
+ ULONG Length;\r
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;\r
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;\r
+ BOOLEAN EffectiveOnly;\r
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;\r
+\r
+typedef struct _SE_IMPERSONATION_STATE {\r
+ PACCESS_TOKEN Token;\r
+ BOOLEAN CopyOnOpen;\r
+ BOOLEAN EffectiveOnly;\r
+ SECURITY_IMPERSONATION_LEVEL Level;\r
+} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;\r
+\r
+#define OWNER_SECURITY_INFORMATION (0x00000001L)\r
+#define GROUP_SECURITY_INFORMATION (0x00000002L)\r
+#define DACL_SECURITY_INFORMATION (0x00000004L)\r
+#define SACL_SECURITY_INFORMATION (0x00000008L)\r
+#define LABEL_SECURITY_INFORMATION (0x00000010L)\r
+\r
+#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)\r
+#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)\r
+#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)\r
+#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)\r
+\r
+\r
+\r
+//\r
+// Registry Access Rights\r
+//\r
+#define KEY_QUERY_VALUE (0x0001)\r
+#define KEY_SET_VALUE (0x0002)\r
+#define KEY_CREATE_SUB_KEY (0x0004)\r
+#define KEY_ENUMERATE_SUB_KEYS (0x0008)\r
+#define KEY_NOTIFY (0x0010)\r
+#define KEY_CREATE_LINK (0x0020)\r
+#define KEY_WOW64_32KEY (0x0200)\r
+#define KEY_WOW64_64KEY (0x0100)\r
+#define KEY_WOW64_RES (0x0300)\r
+\r
+#define KEY_READ ((STANDARD_RIGHTS_READ |\\r
+ KEY_QUERY_VALUE |\\r
+ KEY_ENUMERATE_SUB_KEYS |\\r
+ KEY_NOTIFY) \\r
+ & \\r
+ (~SYNCHRONIZE))\r
+\r
+#define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\\r
+ KEY_SET_VALUE |\\r
+ KEY_CREATE_SUB_KEY) \\r
+ & \\r
+ (~SYNCHRONIZE))\r
+\r
+#define KEY_EXECUTE ((KEY_READ) \\r
+ & \\r
+ (~SYNCHRONIZE))\r
+\r
+#define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\\r
+ KEY_QUERY_VALUE |\\r
+ KEY_SET_VALUE |\\r
+ KEY_CREATE_SUB_KEY |\\r
+ KEY_ENUMERATE_SUB_KEYS |\\r
+ KEY_NOTIFY |\\r
+ KEY_CREATE_LINK) \\r
+ & \\r
+ (~SYNCHRONIZE))\r
+\r
+//\r
+// Registry Open/Create Options\r
+//\r
+#define REG_OPTION_RESERVED (0x00000000L)\r
+#define REG_OPTION_NON_VOLATILE (0x00000000L)\r
+#define REG_OPTION_VOLATILE (0x00000001L)\r
+#define REG_OPTION_CREATE_LINK (0x00000002L)\r
+#define REG_OPTION_BACKUP_RESTORE (0x00000004L)\r
+#define REG_OPTION_OPEN_LINK (0x00000008L)\r
+\r
+#define REG_LEGAL_OPTION \\r
+ (REG_OPTION_RESERVED |\\r
+ REG_OPTION_NON_VOLATILE |\\r
+ REG_OPTION_VOLATILE |\\r
+ REG_OPTION_CREATE_LINK |\\r
+ REG_OPTION_BACKUP_RESTORE |\\r
+ REG_OPTION_OPEN_LINK)\r
+\r
+//\r
+// Key creation/open disposition\r
+//\r
+#define REG_CREATED_NEW_KEY (0x00000001L)\r
+#define REG_OPENED_EXISTING_KEY (0x00000002L)\r
+\r
+//\r
+// Key restore & hive load flags\r
+//\r
+#define REG_WHOLE_HIVE_VOLATILE (0x00000001L)\r
+#define REG_REFRESH_HIVE (0x00000002L)\r
+#define REG_NO_LAZY_FLUSH (0x00000004L)\r
+#define REG_FORCE_RESTORE (0x00000008L)\r
+#define REG_APP_HIVE (0x00000010L)\r
+#define REG_PROCESS_PRIVATE (0x00000020L)\r
+#define REG_START_JOURNAL (0x00000040L)\r
+#define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)\r
+#define REG_HIVE_NO_RM (0x00000100L)\r
+#define REG_HIVE_SINGLE_LOG (0x00000200L)\r
+\r
+//\r
+// Unload Flags\r
+//\r
+#define REG_FORCE_UNLOAD 1\r
+\r
+//\r
+// Notify Filter Values\r
+//\r
+#define REG_NOTIFY_CHANGE_NAME (0x00000001L)\r
+#define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)\r
+#define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)\r
+#define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)\r
+\r
+#define REG_LEGAL_CHANGE_FILTER \\r
+ (REG_NOTIFY_CHANGE_NAME |\\r
+ REG_NOTIFY_CHANGE_ATTRIBUTES |\\r
+ REG_NOTIFY_CHANGE_LAST_SET |\\r
+ REG_NOTIFY_CHANGE_SECURITY)\r
+\r
+\r
+\r
+//\r
+// Thread Access Rights\r
+//\r
+#define THREAD_TERMINATE (0x0001) \r
+#define THREAD_SUSPEND_RESUME (0x0002) \r
+#define THREAD_ALERT (0x0004)\r
+#define THREAD_GET_CONTEXT (0x0008) \r
+#define THREAD_SET_CONTEXT (0x0010) \r
+#define THREAD_SET_INFORMATION (0x0020) \r
+#define THREAD_SET_LIMITED_INFORMATION (0x0400) \r
+#define THREAD_QUERY_LIMITED_INFORMATION (0x0800) \r
+#if (NTDDI_VERSION >= NTDDI_VISTA)\r
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \\r
+ 0xFFFF)\r
+#else\r
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \\r
+ 0x3FF)\r
#endif\r
\r
+//\r
+// Service Start Types\r
+//\r
+#define SERVICE_BOOT_START 0x00000000\r
+#define SERVICE_SYSTEM_START 0x00000001\r
+#define SERVICE_AUTO_START 0x00000002\r
+#define SERVICE_DEMAND_START 0x00000003\r
+#define SERVICE_DISABLED 0x00000004\r
+\r
+//\r
+// Exception Records\r
+//\r
+#define EXCEPTION_NONCONTINUABLE 1\r
+#define EXCEPTION_MAXIMUM_PARAMETERS 15\r
+\r
+typedef struct _EXCEPTION_RECORD {\r
+ NTSTATUS ExceptionCode;\r
+ ULONG ExceptionFlags;\r
+ struct _EXCEPTION_RECORD *ExceptionRecord;\r
+ PVOID ExceptionAddress;\r
+ ULONG NumberParameters;\r
+ ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];\r
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;\r
+\r
+typedef struct _EXCEPTION_RECORD32 {\r
+ NTSTATUS ExceptionCode;\r
+ ULONG ExceptionFlags;\r
+ ULONG ExceptionRecord;\r
+ ULONG ExceptionAddress;\r
+ ULONG NumberParameters;\r
+ ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];\r
+} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;\r
+\r
+typedef struct _EXCEPTION_RECORD64 {\r
+ NTSTATUS ExceptionCode;\r
+ ULONG ExceptionFlags;\r
+ ULONG64 ExceptionRecord;\r
+ ULONG64 ExceptionAddress;\r
+ ULONG NumberParameters;\r
+ ULONG __unusedAlignment;\r
+ ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];\r
+} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;\r
+\r
+typedef struct _EXCEPTION_POINTERS {\r
+ PEXCEPTION_RECORD ExceptionRecord;\r
+ PCONTEXT ContextRecord;\r
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;\r
+\r
+\r
+\r
+//\r
+// Process Qoutas\r
+//\r
+typedef struct _QUOTA_LIMITS {\r
+ SIZE_T PagedPoolLimit;\r
+ SIZE_T NonPagedPoolLimit;\r
+ SIZE_T MinimumWorkingSetSize;\r
+ SIZE_T MaximumWorkingSetSize;\r
+ SIZE_T PagefileLimit;\r
+ LARGE_INTEGER TimeLimit;\r
+} QUOTA_LIMITS, *PQUOTA_LIMITS;\r
+\r
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001\r
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002\r
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004\r
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008\r
+#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010\r
+\r
+\r
+\r
+#endif // _WDMDDK_\r