16 typedef struct _CONTEXT
*PCONTEXT
;
19 // Resource list definitions
21 typedef int CM_RESOURCE_TYPE
;
23 #define CmResourceTypeNull 0
24 #define CmResourceTypePort 1
25 #define CmResourceTypeInterrupt 2
26 #define CmResourceTypeMemory 3
27 #define CmResourceTypeDma 4
28 #define CmResourceTypeDeviceSpecific 5
29 #define CmResourceTypeBusNumber 6
30 #define CmResourceTypeNonArbitrated 128
31 #define CmResourceTypeConfigData 128
32 #define CmResourceTypeDevicePrivate 129
33 #define CmResourceTypePcCardConfig 130
34 #define CmResourceTypeMfCardConfig 131
41 extern ULONG NtGlobalFlag
;
46 // Section map options
48 typedef enum _SECTION_INHERIT
{
54 // Section access rights
56 #define SECTION_QUERY 0x0001
57 #define SECTION_MAP_WRITE 0x0002
58 #define SECTION_MAP_READ 0x0004
59 #define SECTION_MAP_EXECUTE 0x0008
60 #define SECTION_EXTEND_SIZE 0x0010
61 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
63 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
66 SECTION_MAP_EXECUTE | \
69 #define SESSION_QUERY_ACCESS 0x0001
70 #define SESSION_MODIFY_ACCESS 0x0002
72 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
73 SESSION_QUERY_ACCESS | \
74 SESSION_MODIFY_ACCESS)
78 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
80 #define PAGE_NOACCESS 0x01
81 #define PAGE_READONLY 0x02
82 #define PAGE_READWRITE 0x04
83 #define PAGE_WRITECOPY 0x08
84 #define PAGE_EXECUTE 0x10
85 #define PAGE_EXECUTE_READ 0x20
86 #define PAGE_EXECUTE_READWRITE 0x40
87 #define PAGE_EXECUTE_WRITECOPY 0x80
88 #define PAGE_GUARD 0x100
89 #define PAGE_NOCACHE 0x200
90 #define PAGE_WRITECOMBINE 0x400
92 #define MEM_COMMIT 0x1000
93 #define MEM_RESERVE 0x2000
94 #define MEM_DECOMMIT 0x4000
95 #define MEM_RELEASE 0x8000
96 #define MEM_FREE 0x10000
97 #define MEM_PRIVATE 0x20000
98 #define MEM_MAPPED 0x40000
99 #define MEM_RESET 0x80000
100 #define MEM_TOP_DOWN 0x100000
101 #define MEM_LARGE_PAGES 0x20000000
102 #define MEM_4MB_PAGES 0x80000000
104 #define SEC_RESERVE 0x4000000
105 #define SEC_LARGE_PAGES 0x80000000
107 #define PROCESS_DUP_HANDLE (0x0040)
109 #if (NTDDI_VERSION >= NTDDI_VISTA)
110 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
113 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
120 // Processor features
122 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
123 #define PF_FLOATING_POINT_EMULATED 1
124 #define PF_COMPARE_EXCHANGE_DOUBLE 2
125 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
126 #define PF_PPC_MOVEMEM_64BIT_OK 4
127 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
128 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
129 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
130 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
131 #define PF_PAE_ENABLED 9
132 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
133 #define PF_SSE_DAZ_MODE_AVAILABLE 11
134 #define PF_NX_ENABLED 12
135 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
136 #define PF_COMPARE_EXCHANGE128 14
137 #define PF_COMPARE64_EXCHANGE128 15
138 #define PF_CHANNELS_ENABLED 16
143 // Intrinsics (note: taken from our winnt.h)
146 #if defined(__GNUC__)
148 static __inline__ BOOLEAN
149 InterlockedBitTestAndSet(IN LONG
volatile *Base
,
154 __asm__
__volatile__("lock "
157 :"=r" (OldBit
),"+m" (*Base
)
162 return (_InterlockedOr(Base
, 1 << Bit
) >> Bit
) & 1;
166 static __inline__ BOOLEAN
167 InterlockedBitTestAndReset(IN LONG
volatile *Base
,
172 __asm__
__volatile__("lock "
175 :"=r" (OldBit
),"+m" (*Base
)
180 return (_InterlockedAnd(Base
, ~(1 << Bit
)) >> Bit
) & 1;
184 #define BitScanForward _BitScanForward
185 #define BitScanReverse _BitScanReverse
191 #define YieldProcessor() __asm__ __volatile__("pause");
192 #elif defined (_M_AMD64)
193 #define YieldProcessor() __asm__ __volatile__("pause");
194 #elif defined(_M_PPC)
195 #define YieldProcessor() __asm__ __volatile__("nop");
196 #elif defined(_M_MIPS)
197 #define YieldProcessor() __asm__ __volatile__("nop");
198 #elif defined(_M_ARM)
199 #define YieldProcessor()
201 #error Unknown architecture
209 #ifndef _SLIST_HEADER_
210 #define _SLIST_HEADER_
212 #define SLIST_ENTRY SINGLE_LIST_ENTRY
213 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
214 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
216 typedef union _SLIST_HEADER
{
223 } SLIST_HEADER
, *PSLIST_HEADER
;
225 #endif /* _SLIST_HEADER_ */
230 // Power States/Levels
232 typedef enum _SYSTEM_POWER_STATE
{
233 PowerSystemUnspecified
,
235 PowerSystemSleeping1
,
236 PowerSystemSleeping2
,
237 PowerSystemSleeping3
,
238 PowerSystemHibernate
,
241 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
243 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
245 typedef enum _POWER_INFORMATION_LEVEL
{
248 VerifySystemPolicyAc
,
249 VerifySystemPolicyDc
,
250 SystemPowerCapabilities
,
252 SystemPowerStateHandler
,
253 ProcessorStateHandler
,
254 SystemPowerPolicyCurrent
,
255 AdministratorPowerPolicy
,
256 SystemReserveHiberFile
,
257 ProcessorInformation
,
258 SystemPowerInformation
,
259 ProcessorStateHandler2
,
262 SystemExecutionState
,
263 SystemPowerStateNotifyHandler
,
264 ProcessorPowerPolicyAc
,
265 ProcessorPowerPolicyDc
,
266 VerifyProcessorPowerPolicyAc
,
267 VerifyProcessorPowerPolicyDc
,
268 ProcessorPowerPolicyCurrent
269 } POWER_INFORMATION_LEVEL
;
275 PowerActionHibernate
,
277 PowerActionShutdownReset
,
278 PowerActionShutdownOff
,
280 } POWER_ACTION
, *PPOWER_ACTION
;
282 typedef enum _DEVICE_POWER_STATE
{
283 PowerDeviceUnspecified
,
289 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
291 #define ES_SYSTEM_REQUIRED 0x00000001
292 #define ES_DISPLAY_REQUIRED 0x00000002
293 #define ES_USER_PRESENT 0x00000004
294 #define ES_CONTINUOUS 0x80000000
296 typedef ULONG EXECUTION_STATE
;
306 // Access/Security Stuff
308 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
309 typedef PVOID PACCESS_TOKEN
;
311 #define DELETE 0x00010000L
312 #define READ_CONTROL 0x00020000L
313 #define WRITE_DAC 0x00040000L
314 #define WRITE_OWNER 0x00080000L
315 #define SYNCHRONIZE 0x00100000L
316 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
317 #define STANDARD_RIGHTS_READ READ_CONTROL
318 #define STANDARD_RIGHTS_WRITE READ_CONTROL
319 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
320 #define STANDARD_RIGHTS_ALL 0x001F0000L
321 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
322 #define ACCESS_SYSTEM_SECURITY 0x01000000L
323 #define MAXIMUM_ALLOWED 0x02000000L
324 #define GENERIC_READ 0x80000000L
325 #define GENERIC_WRITE 0x40000000L
326 #define GENERIC_EXECUTE 0x20000000L
327 #define GENERIC_ALL 0x10000000L
329 typedef struct _GENERIC_MAPPING
{
330 ACCESS_MASK GenericRead
;
331 ACCESS_MASK GenericWrite
;
332 ACCESS_MASK GenericExecute
;
333 ACCESS_MASK GenericAll
;
334 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
336 #define ACL_REVISION 2
337 #define ACL_REVISION_DS 4
339 #define ACL_REVISION1 1
340 #define ACL_REVISION2 2
341 #define ACL_REVISION3 3
342 #define ACL_REVISION4 4
343 #define MIN_ACL_REVISION ACL_REVISION2
344 #define MAX_ACL_REVISION ACL_REVISION4
346 typedef struct _ACL
{
357 // Current security descriptor revision value
359 #define SECURITY_DESCRIPTOR_REVISION (1)
360 #define SECURITY_DESCRIPTOR_REVISION1 (1)
363 // Privilege attributes
365 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
366 #define SE_PRIVILEGE_ENABLED (0x00000002L)
367 #define SE_PRIVILEGE_REMOVED (0X00000004L)
368 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
370 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
371 SE_PRIVILEGE_ENABLED | \
372 SE_PRIVILEGE_REMOVED | \
373 SE_PRIVILEGE_USED_FOR_ACCESS)
375 #include <pshpack4.h>
376 typedef struct _LUID_AND_ATTRIBUTES
{
379 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
381 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
382 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
389 #define PRIVILEGE_SET_ALL_NECESSARY (1)
391 typedef struct _PRIVILEGE_SET
{
392 ULONG PrivilegeCount
;
394 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
395 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
397 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
399 SecurityIdentification
,
400 SecurityImpersonation
,
402 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
404 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
405 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
406 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
407 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
409 #define SECURITY_DYNAMIC_TRACKING (TRUE)
410 #define SECURITY_STATIC_TRACKING (FALSE)
412 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
414 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
416 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
417 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
418 BOOLEAN EffectiveOnly
;
419 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
421 typedef struct _SE_IMPERSONATION_STATE
{
424 BOOLEAN EffectiveOnly
;
425 SECURITY_IMPERSONATION_LEVEL Level
;
426 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
428 #define OWNER_SECURITY_INFORMATION (0x00000001L)
429 #define GROUP_SECURITY_INFORMATION (0x00000002L)
430 #define DACL_SECURITY_INFORMATION (0x00000004L)
431 #define SACL_SECURITY_INFORMATION (0x00000008L)
432 #define LABEL_SECURITY_INFORMATION (0x00000010L)
434 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
435 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
436 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
437 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
442 // Registry Access Rights
444 #define KEY_QUERY_VALUE (0x0001)
445 #define KEY_SET_VALUE (0x0002)
446 #define KEY_CREATE_SUB_KEY (0x0004)
447 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
448 #define KEY_NOTIFY (0x0010)
449 #define KEY_CREATE_LINK (0x0020)
450 #define KEY_WOW64_32KEY (0x0200)
451 #define KEY_WOW64_64KEY (0x0100)
452 #define KEY_WOW64_RES (0x0300)
454 #define KEY_READ ((STANDARD_RIGHTS_READ |\
456 KEY_ENUMERATE_SUB_KEYS |\
461 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
463 KEY_CREATE_SUB_KEY) \
467 #define KEY_EXECUTE ((KEY_READ) \
471 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
474 KEY_CREATE_SUB_KEY |\
475 KEY_ENUMERATE_SUB_KEYS |\
482 // Registry Open/Create Options
484 #define REG_OPTION_RESERVED (0x00000000L)
485 #define REG_OPTION_NON_VOLATILE (0x00000000L)
486 #define REG_OPTION_VOLATILE (0x00000001L)
487 #define REG_OPTION_CREATE_LINK (0x00000002L)
488 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
489 #define REG_OPTION_OPEN_LINK (0x00000008L)
491 #define REG_LEGAL_OPTION \
492 (REG_OPTION_RESERVED |\
493 REG_OPTION_NON_VOLATILE |\
494 REG_OPTION_VOLATILE |\
495 REG_OPTION_CREATE_LINK |\
496 REG_OPTION_BACKUP_RESTORE |\
497 REG_OPTION_OPEN_LINK)
500 // Key creation/open disposition
502 #define REG_CREATED_NEW_KEY (0x00000001L)
503 #define REG_OPENED_EXISTING_KEY (0x00000002L)
506 // Key restore & hive load flags
508 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
509 #define REG_REFRESH_HIVE (0x00000002L)
510 #define REG_NO_LAZY_FLUSH (0x00000004L)
511 #define REG_FORCE_RESTORE (0x00000008L)
512 #define REG_APP_HIVE (0x00000010L)
513 #define REG_PROCESS_PRIVATE (0x00000020L)
514 #define REG_START_JOURNAL (0x00000040L)
515 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
516 #define REG_HIVE_NO_RM (0x00000100L)
517 #define REG_HIVE_SINGLE_LOG (0x00000200L)
522 #define REG_FORCE_UNLOAD 1
525 // Notify Filter Values
527 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
528 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
529 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
530 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
532 #define REG_LEGAL_CHANGE_FILTER \
533 (REG_NOTIFY_CHANGE_NAME |\
534 REG_NOTIFY_CHANGE_ATTRIBUTES |\
535 REG_NOTIFY_CHANGE_LAST_SET |\
536 REG_NOTIFY_CHANGE_SECURITY)
541 // Thread Access Rights
543 #define THREAD_TERMINATE (0x0001)
544 #define THREAD_SUSPEND_RESUME (0x0002)
545 #define THREAD_ALERT (0x0004)
546 #define THREAD_GET_CONTEXT (0x0008)
547 #define THREAD_SET_CONTEXT (0x0010)
548 #define THREAD_SET_INFORMATION (0x0020)
549 #define THREAD_SET_LIMITED_INFORMATION (0x0400)
550 #define THREAD_QUERY_LIMITED_INFORMATION (0x0800)
551 #if (NTDDI_VERSION >= NTDDI_VISTA)
552 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
555 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
560 // Service Start Types
562 #define SERVICE_BOOT_START 0x00000000
563 #define SERVICE_SYSTEM_START 0x00000001
564 #define SERVICE_AUTO_START 0x00000002
565 #define SERVICE_DEMAND_START 0x00000003
566 #define SERVICE_DISABLED 0x00000004
571 #define EXCEPTION_NONCONTINUABLE 1
572 #define EXCEPTION_MAXIMUM_PARAMETERS 15
574 typedef struct _EXCEPTION_RECORD
{
575 NTSTATUS ExceptionCode
;
576 ULONG ExceptionFlags
;
577 struct _EXCEPTION_RECORD
*ExceptionRecord
;
578 PVOID ExceptionAddress
;
579 ULONG NumberParameters
;
580 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
581 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
583 typedef struct _EXCEPTION_RECORD32
{
584 NTSTATUS ExceptionCode
;
585 ULONG ExceptionFlags
;
586 ULONG ExceptionRecord
;
587 ULONG ExceptionAddress
;
588 ULONG NumberParameters
;
589 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
590 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
592 typedef struct _EXCEPTION_RECORD64
{
593 NTSTATUS ExceptionCode
;
594 ULONG ExceptionFlags
;
595 ULONG64 ExceptionRecord
;
596 ULONG64 ExceptionAddress
;
597 ULONG NumberParameters
;
598 ULONG __unusedAlignment
;
599 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
600 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
602 typedef struct _EXCEPTION_POINTERS
{
603 PEXCEPTION_RECORD ExceptionRecord
;
604 PCONTEXT ContextRecord
;
605 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
612 typedef struct _QUOTA_LIMITS
{
613 SIZE_T PagedPoolLimit
;
614 SIZE_T NonPagedPoolLimit
;
615 SIZE_T MinimumWorkingSetSize
;
616 SIZE_T MaximumWorkingSetSize
;
617 SIZE_T PagefileLimit
;
618 LARGE_INTEGER TimeLimit
;
619 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
621 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
622 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
623 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
624 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
625 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010