merge trunk head (37902)
[reactos.git] / reactos / include / ddk / wdm.h
index c010038..41ca709 100644 (file)
-/*
-       WDM (far from finished!)
-*/
-
-#ifndef WDM_H
-#define WDM_H
-
-typedef int CM_RESOURCE_TYPE;
-
-#define CmResourceTypeNull             0
-#define CmResourceTypePort             1
-#define CmResourceTypeInterrupt                2
-#define CmResourceTypeMemory           3
-#define CmResourceTypeDma              4
-#define CmResourceTypeDeviceSpecific   5
-#define CmResourceTypeBusNumber                6
-#define CmResourceTypeNonArbitrated    128
-#define CmResourceTypeConfigData       128
-#define CmResourceTypeDevicePrivate    129
-#define CmResourceTypePcCardConfig     130
-#define CmResourceTypeMfCardConfig     131
-
-#endif
-
+#ifndef _WDMDDK_\r
+#define _WDMDDK_\r
+\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
+\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