4 * Windows NT WDM Driver Developer Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 /* Included via ntddk.h? */
31 #define _WDM_INCLUDED_
33 #define NO_INTERLOCKED_INTRINSICS
48 typedef GUID UOW
, *PUOW
;
53 #if (NTDDI_VERSION >= NTDDI_WINXP)
63 #if !defined(_NTHALDLL_) && !defined(_BLDR_)
64 #define NTHALAPI DECLSPEC_IMPORT
70 #if !defined(_NTOSKRNL_) && !defined(_BLDR_)
71 #define NTKERNELAPI DECLSPEC_IMPORT
76 #if defined(_X86_) && !defined(_NTHAL_)
77 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
79 #define _DECL_HAL_KE_IMPORT
81 #define _DECL_HAL_KE_IMPORT NTKERNELAPI
85 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
87 #define POINTER_ALIGNMENT
90 /* Helper macro to enable gcc's extension. */
91 #ifndef __GNU_EXTENSION
93 #define __GNU_EXTENSION __extension__
95 #define __GNU_EXTENSION
101 /* Indicate if #pragma alloc_text() is supported */
102 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
103 #define ALLOC_PRAGMA 1
106 /* Indicate if #pragma data_seg() is supported */
107 #if defined(_M_IX86) || defined(_M_AMD64)
108 #define ALLOC_DATA_PRAGMA 1
113 /* Forward declarations */
120 struct _DEVICE_OBJECT
;
121 struct _DRIVER_OBJECT
;
122 struct _IO_STATUS_BLOCK
;
123 struct _DEVICE_DESCRIPTION
;
124 struct _SCATTER_GATHER_LIST
;
125 struct _DRIVE_LAYOUT_INFORMATION
;
126 struct _COMPRESSED_DATA_INFO
;
127 struct _IO_RESOURCE_DESCRIPTOR
;
129 /* Structures not exposed to drivers */
130 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
131 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
132 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
133 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
134 typedef struct _EPROCESS
*PEPROCESS
;
135 typedef struct _ETHREAD
*PETHREAD
;
136 typedef struct _IO_TIMER
*PIO_TIMER
;
137 typedef struct _KINTERRUPT
*PKINTERRUPT
;
138 typedef struct _KPROCESS
*PKPROCESS
;
139 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
140 typedef struct _CONTEXT
*PCONTEXT
;
142 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_))
143 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
144 #elif defined(_WDM_INCLUDED_)
145 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
147 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
151 /******************************************************************************
152 * INTERLOCKED Functions *
153 ******************************************************************************/
155 // Intrinsics (note: taken from our winnt.h)
158 #if defined(__GNUC__)
160 static __inline__ BOOLEAN
161 InterlockedBitTestAndSet(
162 IN LONG
volatile *Base
,
167 __asm__
__volatile__("lock "
170 :"=r" (OldBit
),"+m" (*Base
)
175 return (_InterlockedOr(Base
, 1 << Bit
) >> Bit
) & 1;
179 static __inline__ BOOLEAN
180 InterlockedBitTestAndReset(
181 IN LONG
volatile *Base
,
186 __asm__
__volatile__("lock "
189 :"=r" (OldBit
),"+m" (*Base
)
194 return (_InterlockedAnd(Base
, ~(1 << Bit
)) >> Bit
) & 1;
198 #endif /* defined(__GNUC__) */
200 #define BitScanForward _BitScanForward
201 #define BitScanReverse _BitScanReverse
202 #define BitTest _bittest
203 #define BitTestAndComplement _bittestandcomplement
204 #define BitTestAndSet _bittestandset
205 #define BitTestAndReset _bittestandreset
206 #define InterlockedBitTestAndSet _interlockedbittestandset
207 #define InterlockedBitTestAndReset _interlockedbittestandreset
210 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
211 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
214 #if !defined(__INTERLOCKED_DECLARED)
215 #define __INTERLOCKED_DECLARED
218 #if defined(NO_INTERLOCKED_INTRINSICS)
222 InterlockedIncrement(
223 IN OUT LONG
volatile *Addend
);
228 InterlockedDecrement(
229 IN OUT LONG
volatile *Addend
);
234 InterlockedCompareExchange(
235 IN OUT LONG
volatile *Destination
,
243 IN OUT LONG
volatile *Destination
,
249 InterlockedExchangeAdd(
250 IN OUT LONG
volatile *Addend
,
253 #else /* !defined(NO_INTERLOCKED_INTRINSICS) */
255 #define InterlockedExchange _InterlockedExchange
256 #define InterlockedIncrement _InterlockedIncrement
257 #define InterlockedDecrement _InterlockedDecrement
258 #define InterlockedExchangeAdd _InterlockedExchangeAdd
259 #define InterlockedCompareExchange _InterlockedCompareExchange
260 #define InterlockedOr _InterlockedOr
261 #define InterlockedAnd _InterlockedAnd
262 #define InterlockedXor _InterlockedXor
264 #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
266 #endif /* defined (_X86_) */
268 #if !defined (_WIN64)
271 * InterlockedExchangePointer(
272 * IN OUT PVOID volatile *Target,
275 #define InterlockedExchangePointer(Target, Value) \
276 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
280 * InterlockedCompareExchangePointer(
281 * IN OUT PVOID *Destination,
283 * IN PVOID Comparand)
285 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
286 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
288 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
289 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
290 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
292 #endif // !defined (_WIN64)
294 #if defined (_M_AMD64)
296 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
297 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
298 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
299 #define InterlockedAnd _InterlockedAnd
300 #define InterlockedOr _InterlockedOr
301 #define InterlockedXor _InterlockedXor
302 #define InterlockedIncrement _InterlockedIncrement
303 #define InterlockedDecrement _InterlockedDecrement
304 #define InterlockedAdd _InterlockedAdd
305 #define InterlockedExchange _InterlockedExchange
306 #define InterlockedExchangeAdd _InterlockedExchangeAdd
307 #define InterlockedCompareExchange _InterlockedCompareExchange
308 #define InterlockedAnd64 _InterlockedAnd64
309 #define InterlockedOr64 _InterlockedOr64
310 #define InterlockedXor64 _InterlockedXor64
311 #define InterlockedIncrement64 _InterlockedIncrement64
312 #define InterlockedDecrement64 _InterlockedDecrement64
313 #define InterlockedAdd64 _InterlockedAdd64
314 #define InterlockedExchange64 _InterlockedExchange64
315 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
316 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
317 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
318 #define InterlockedExchangePointer _InterlockedExchangePointer
319 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
320 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
324 #if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
325 //#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for?
329 IN OUT LONG64
volatile *Addend
,
332 return InterlockedExchangeAdd64(Addend
, Value
) + Value
;
337 #endif /* !__INTERLOCKED_DECLARED */
340 /******************************************************************************
341 * Runtime Library Types *
342 ******************************************************************************/
344 #define RTL_REGISTRY_ABSOLUTE 0
345 #define RTL_REGISTRY_SERVICES 1
346 #define RTL_REGISTRY_CONTROL 2
347 #define RTL_REGISTRY_WINDOWS_NT 3
348 #define RTL_REGISTRY_DEVICEMAP 4
349 #define RTL_REGISTRY_USER 5
350 #define RTL_REGISTRY_MAXIMUM 6
351 #define RTL_REGISTRY_HANDLE 0x40000000
352 #define RTL_REGISTRY_OPTIONAL 0x80000000
354 /* RTL_QUERY_REGISTRY_TABLE.Flags */
355 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
356 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
357 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
358 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
359 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
360 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
361 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
363 #define HASH_STRING_ALGORITHM_DEFAULT 0
364 #define HASH_STRING_ALGORITHM_X65599 1
365 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
367 typedef struct _RTL_BITMAP
{
370 } RTL_BITMAP
, *PRTL_BITMAP
;
372 typedef struct _RTL_BITMAP_RUN
{
375 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
378 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
382 IN ULONG ValueLength
,
384 IN PVOID EntryContext
);
386 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
387 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
394 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
396 typedef struct _TIME_FIELDS
{
405 } TIME_FIELDS
, *PTIME_FIELDS
;
408 #ifndef _SLIST_HEADER_
409 #define _SLIST_HEADER_
413 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
415 } SLIST_ENTRY
, *PSLIST_ENTRY
;
417 typedef struct _SLIST_ENTRY32
{
419 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
421 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
428 ULONGLONG Sequence
:9;
429 ULONGLONG NextEntry
:39;
430 ULONGLONG HeaderType
:1;
432 ULONGLONG Reserved
:59;
437 ULONGLONG Sequence
:48;
438 ULONGLONG HeaderType
:1;
440 ULONGLONG Reserved
:2;
441 ULONGLONG NextEntry
:60;
445 ULONGLONG Sequence
:48;
446 ULONGLONG HeaderType
:1;
447 ULONGLONG Reserved
:3;
448 ULONGLONG NextEntry
:60;
450 } SLIST_HEADER
, *PSLIST_HEADER
;
452 typedef union _SLIST_HEADER32
{
459 } SLIST_HEADER32
, *PSLIST_HEADER32
;
463 #define SLIST_ENTRY SINGLE_LIST_ENTRY
464 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
465 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
467 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
469 typedef union _SLIST_HEADER
{
476 } SLIST_HEADER
, *PSLIST_HEADER
;
478 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
480 #endif /* defined(_WIN64) */
482 #endif /* _SLIST_HEADER_ */
484 /* MS definition is broken! */
485 extern BOOLEAN NTSYSAPI NlsMbCodePageTag
;
486 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag
;
487 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
488 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
490 #define SHORT_LEAST_SIGNIFICANT_BIT 0
491 #define SHORT_MOST_SIGNIFICANT_BIT 1
493 #define LONG_LEAST_SIGNIFICANT_BIT 0
494 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
495 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
496 #define LONG_MOST_SIGNIFICANT_BIT 3
498 #define RTLVERLIB_DDI(x) Wdmlib##x
501 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
505 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
509 /******************************************************************************
511 ******************************************************************************/
514 typedef UCHAR KIRQL
, *PKIRQL
;
515 typedef CCHAR KPROCESSOR_MODE
;
516 typedef LONG KPRIORITY
;
524 #define CACHE_FULLY_ASSOCIATIVE 0xFF
526 #define EVENT_QUERY_STATE (0x0001)
527 #define EVENT_MODIFY_STATE (0x0002)
528 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
530 #define LTP_PC_SMT 0x1
532 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
533 #define SINGLE_GROUP_LEGACY_API 1
536 #define SEMAPHORE_QUERY_STATE (0x0001)
537 #define SEMAPHORE_MODIFY_STATE (0x0002)
538 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
540 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
541 RelationProcessorCore
,
544 RelationProcessorPackage
,
547 } LOGICAL_PROCESSOR_RELATIONSHIP
;
549 typedef enum _PROCESSOR_CACHE_TYPE
{
554 } PROCESSOR_CACHE_TYPE
;
556 typedef struct _CACHE_DESCRIPTOR
{
561 PROCESSOR_CACHE_TYPE Type
;
562 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
564 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
565 ULONG_PTR ProcessorMask
;
566 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
574 CACHE_DESCRIPTOR Cache
;
575 ULONGLONG Reserved
[2];
577 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
579 typedef struct _PROCESSOR_RELATIONSHIP
{
583 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
584 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
586 typedef struct _NUMA_NODE_RELATIONSHIP
{
589 GROUP_AFFINITY GroupMask
;
590 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
592 typedef struct _CACHE_RELATIONSHIP
{
597 PROCESSOR_CACHE_TYPE Type
;
599 GROUP_AFFINITY GroupMask
;
600 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
602 typedef struct _PROCESSOR_GROUP_INFO
{
603 UCHAR MaximumProcessorCount
;
604 UCHAR ActiveProcessorCount
;
606 KAFFINITY ActiveProcessorMask
;
607 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
609 typedef struct _GROUP_RELATIONSHIP
{
610 USHORT MaximumGroupCount
;
611 USHORT ActiveGroupCount
;
613 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
614 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
616 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
617 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
620 PROCESSOR_RELATIONSHIP Processor
;
621 NUMA_NODE_RELATIONSHIP NumaNode
;
622 CACHE_RELATIONSHIP Cache
;
623 GROUP_RELATIONSHIP Group
;
625 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;;
627 /* Processor features */
628 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
629 #define PF_FLOATING_POINT_EMULATED 1
630 #define PF_COMPARE_EXCHANGE_DOUBLE 2
631 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
632 #define PF_PPC_MOVEMEM_64BIT_OK 4
633 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
634 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
635 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
636 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
637 #define PF_PAE_ENABLED 9
638 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
639 #define PF_SSE_DAZ_MODE_AVAILABLE 11
640 #define PF_NX_ENABLED 12
641 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
642 #define PF_COMPARE_EXCHANGE128 14
643 #define PF_COMPARE64_EXCHANGE128 15
644 #define PF_CHANNELS_ENABLED 16
645 #define PF_XSAVE_ENABLED 17
647 #define MAXIMUM_WAIT_OBJECTS 64
649 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
651 #define ASSERT_DPC(Object) \
652 ASSERT(((Object)->Type == 0) || \
653 ((Object)->Type == DpcObject) || \
654 ((Object)->Type == ThreadedDpcObject))
656 #define ASSERT_GATE(object) \
657 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
658 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
660 #define ASSERT_DEVICE_QUEUE(Object) \
661 NT_ASSERT((Object)->Type == DeviceQueueObject)
663 #define ASSERT_TIMER(E) \
664 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
665 ((E)->Header.Type == TimerSynchronizationObject))
667 #define ASSERT_MUTANT(E) \
668 NT_ASSERT((E)->Header.Type == MutantObject)
670 #define ASSERT_SEMAPHORE(E) \
671 NT_ASSERT((E)->Header.Type == SemaphoreObject)
673 #define ASSERT_EVENT(E) \
674 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
675 ((E)->Header.Type == SynchronizationEvent))
678 #define DPC_THREADED 1
680 #define GM_LOCK_BIT 0x1
681 #define GM_LOCK_BIT_V 0x0
682 #define GM_LOCK_WAITER_WOKEN 0x2
683 #define GM_LOCK_WAITER_INC 0x4
685 #define LOCK_QUEUE_WAIT_BIT 0
686 #define LOCK_QUEUE_OWNER_BIT 1
688 #define LOCK_QUEUE_WAIT 1
689 #define LOCK_QUEUE_OWNER 2
690 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
691 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
693 #define PROCESSOR_FEATURE_MAX 64
695 #define DBG_STATUS_CONTROL_C 1
696 #define DBG_STATUS_SYSRQ 2
697 #define DBG_STATUS_BUGCHECK_FIRST 3
698 #define DBG_STATUS_BUGCHECK_SECOND 4
699 #define DBG_STATUS_FATAL 5
700 #define DBG_STATUS_DEBUG_CONTROL 6
701 #define DBG_STATUS_WORKER 7
704 #define MAXIMUM_PROC_PER_GROUP 64
706 #define MAXIMUM_PROC_PER_GROUP 32
708 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
710 /* Exception Records */
711 #define EXCEPTION_NONCONTINUABLE 1
712 #define EXCEPTION_MAXIMUM_PARAMETERS 15
714 #define EXCEPTION_DIVIDED_BY_ZERO 0
715 #define EXCEPTION_DEBUG 1
716 #define EXCEPTION_NMI 2
717 #define EXCEPTION_INT3 3
718 #define EXCEPTION_BOUND_CHECK 5
719 #define EXCEPTION_INVALID_OPCODE 6
720 #define EXCEPTION_NPX_NOT_AVAILABLE 7
721 #define EXCEPTION_DOUBLE_FAULT 8
722 #define EXCEPTION_NPX_OVERRUN 9
723 #define EXCEPTION_INVALID_TSS 0x0A
724 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
725 #define EXCEPTION_STACK_FAULT 0x0C
726 #define EXCEPTION_GP_FAULT 0x0D
727 #define EXCEPTION_RESERVED_TRAP 0x0F
728 #define EXCEPTION_NPX_ERROR 0x010
729 #define EXCEPTION_ALIGNMENT_CHECK 0x011
731 typedef struct _EXCEPTION_RECORD
{
732 NTSTATUS ExceptionCode
;
733 ULONG ExceptionFlags
;
734 struct _EXCEPTION_RECORD
*ExceptionRecord
;
735 PVOID ExceptionAddress
;
736 ULONG NumberParameters
;
737 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
738 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
740 typedef struct _EXCEPTION_RECORD32
{
741 NTSTATUS ExceptionCode
;
742 ULONG ExceptionFlags
;
743 ULONG ExceptionRecord
;
744 ULONG ExceptionAddress
;
745 ULONG NumberParameters
;
746 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
747 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
749 typedef struct _EXCEPTION_RECORD64
{
750 NTSTATUS ExceptionCode
;
751 ULONG ExceptionFlags
;
752 ULONG64 ExceptionRecord
;
753 ULONG64 ExceptionAddress
;
754 ULONG NumberParameters
;
755 ULONG __unusedAlignment
;
756 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
757 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
759 typedef struct _EXCEPTION_POINTERS
{
760 PEXCEPTION_RECORD ExceptionRecord
;
761 PCONTEXT ContextRecord
;
762 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
764 typedef enum _KBUGCHECK_CALLBACK_REASON
{
767 KbCallbackSecondaryDumpData
,
770 } KBUGCHECK_CALLBACK_REASON
;
772 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
775 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
776 IN KBUGCHECK_CALLBACK_REASON Reason
,
777 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
778 IN OUT PVOID ReasonSpecificData
,
779 IN ULONG ReasonSpecificDataLength
);
780 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
782 typedef struct _KBUGCHECK_ADD_PAGES
{
783 IN OUT PVOID Context
;
785 IN ULONG BugCheckCode
;
786 OUT ULONG_PTR Address
;
788 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
790 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
792 IN ULONG InBufferLength
;
793 IN ULONG MaximumAllowed
;
796 OUT ULONG OutBufferLength
;
797 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
799 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
803 KbDumpIoSecondaryData
,
805 } KBUGCHECK_DUMP_IO_TYPE
;
807 typedef struct _KBUGCHECK_DUMP_IO
{
810 IN ULONG BufferLength
;
811 IN KBUGCHECK_DUMP_IO_TYPE Type
;
812 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
814 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
815 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
816 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
818 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
820 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
823 KBUGCHECK_CALLBACK_REASON Reason
;
825 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
827 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
833 } KBUGCHECK_BUFFER_DUMP_STATE
;
836 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
839 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
841 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
843 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
849 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
852 (NTAPI NMI_CALLBACK
)(
855 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
857 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
858 KeProcessorAddStartNotify
= 0,
859 KeProcessorAddCompleteNotify
,
860 KeProcessorAddFailureNotify
861 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
863 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
864 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
867 #if (NTDDI_VERSION >= NTDDI_WIN7)
868 PROCESSOR_NUMBER ProcNumber
;
870 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
873 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
874 IN PVOID CallbackContext
,
875 IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
876 IN OUT PNTSTATUS OperationStatus
);
877 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
879 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
881 #define INVALID_PROCESSOR_INDEX 0xffffffff
883 typedef enum _KINTERRUPT_POLARITY
{
884 InterruptPolarityUnknown
,
887 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
889 typedef enum _KPROFILE_SOURCE
{
891 ProfileAlignmentFixup
,
894 ProfileLoadInstructions
,
895 ProfilePipelineFrozen
,
896 ProfileBranchInstructions
,
897 ProfileTotalNonissues
,
901 ProfileBranchMispredictions
,
902 ProfileStoreInstructions
,
903 ProfileFpInstructions
,
904 ProfileIntegerInstructions
,
908 ProfileSpecialInstructions
,
911 ProfileDcacheAccesses
,
912 ProfileMemoryBarrierCycles
,
913 ProfileLoadLinkedIssues
,
917 typedef enum _KWAIT_REASON
{
958 typedef struct _KWAIT_BLOCK
{
959 LIST_ENTRY WaitListEntry
;
960 struct _KTHREAD
*Thread
;
962 struct _KWAIT_BLOCK
*NextWaitBlock
;
965 volatile UCHAR BlockState
;
969 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
971 typedef enum _KINTERRUPT_MODE
{
976 #define THREAD_WAIT_OBJECTS 3
979 (NTAPI KSTART_ROUTINE
)(
980 IN PVOID StartContext
);
981 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
984 (NTAPI
*PKINTERRUPT_ROUTINE
)(
988 (NTAPI KSERVICE_ROUTINE
)(
989 IN
struct _KINTERRUPT
*Interrupt
,
990 IN PVOID ServiceContext
);
991 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
994 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
995 IN
struct _KINTERRUPT
*Interrupt
,
996 IN PVOID ServiceContext
,
998 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
1000 typedef enum _KD_OPTION
{
1001 KD_OPTION_SET_BLOCK_ENABLE
,
1005 (NTAPI
*PKNORMAL_ROUTINE
)(
1006 IN PVOID NormalContext OPTIONAL
,
1007 IN PVOID SystemArgument1 OPTIONAL
,
1008 IN PVOID SystemArgument2 OPTIONAL
);
1011 (NTAPI
*PKRUNDOWN_ROUTINE
)(
1012 IN
struct _KAPC
*Apc
);
1015 (NTAPI
*PKKERNEL_ROUTINE
)(
1016 IN
struct _KAPC
*Apc
,
1017 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
1018 IN OUT PVOID
*NormalContext OPTIONAL
,
1019 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
1020 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
1022 typedef struct _KAPC
{
1028 struct _KTHREAD
*Thread
;
1029 LIST_ENTRY ApcListEntry
;
1030 PKKERNEL_ROUTINE KernelRoutine
;
1031 PKRUNDOWN_ROUTINE RundownRoutine
;
1032 PKNORMAL_ROUTINE NormalRoutine
;
1033 PVOID NormalContext
;
1034 PVOID SystemArgument1
;
1035 PVOID SystemArgument2
;
1036 CCHAR ApcStateIndex
;
1037 KPROCESSOR_MODE ApcMode
;
1039 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1041 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
1042 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
1043 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
1044 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
1045 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
1046 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
1047 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
1049 typedef struct _KDEVICE_QUEUE_ENTRY
{
1050 LIST_ENTRY DeviceListEntry
;
1053 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1054 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1056 typedef PVOID PKIPI_CONTEXT
;
1059 (NTAPI
*PKIPI_WORKER
)(
1060 IN OUT PKIPI_CONTEXT PacketContext
,
1061 IN PVOID Parameter1 OPTIONAL
,
1062 IN PVOID Parameter2 OPTIONAL
,
1063 IN PVOID Parameter3 OPTIONAL
);
1065 typedef struct _KIPI_COUNTS
{
1070 ULONG FlushSingleTb
;
1071 ULONG FlushMultipleTb
;
1072 ULONG FlushEntireTb
;
1077 ULONG SweepIcacheRange
;
1078 ULONG FlushIoBuffers
;
1079 ULONG GratuitousDPC
;
1080 } KIPI_COUNTS
, *PKIPI_COUNTS
;
1083 (NTAPI KIPI_BROADCAST_WORKER
)(
1084 IN ULONG_PTR Argument
);
1085 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
1087 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
1089 typedef struct _KSPIN_LOCK_QUEUE
{
1090 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1091 PKSPIN_LOCK
volatile Lock
;
1092 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1094 typedef struct _KLOCK_QUEUE_HANDLE
{
1095 KSPIN_LOCK_QUEUE LockQueue
;
1097 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1099 #if defined(_AMD64_)
1101 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
1103 #define LockQueueDispatcherLock 0
1104 #define LockQueueExpansionLock 1
1105 #define LockQueuePfnLock 2
1106 #define LockQueueSystemSpaceLock 3
1107 #define LockQueueVacbLock 4
1108 #define LockQueueMasterLock 5
1109 #define LockQueueNonPagedPoolLock 6
1110 #define LockQueueIoCancelLock 7
1111 #define LockQueueWorkQueueLock 8
1112 #define LockQueueIoVpbLock 9
1113 #define LockQueueIoDatabaseLock 10
1114 #define LockQueueIoCompletionLock 11
1115 #define LockQueueNtfsStructLock 12
1116 #define LockQueueAfdWorkQueueLock 13
1117 #define LockQueueBcbLock 14
1118 #define LockQueueMmNonPagedPoolLock 15
1119 #define LockQueueUnusedSpare16 16
1120 #define LockQueueTimerTableLock 17
1121 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
1125 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
1126 LockQueueDispatcherLock
,
1127 LockQueueExpansionLock
,
1129 LockQueueSystemSpaceLock
,
1131 LockQueueMasterLock
,
1132 LockQueueNonPagedPoolLock
,
1133 LockQueueIoCancelLock
,
1134 LockQueueWorkQueueLock
,
1136 LockQueueIoDatabaseLock
,
1137 LockQueueIoCompletionLock
,
1138 LockQueueNtfsStructLock
,
1139 LockQueueAfdWorkQueueLock
,
1141 LockQueueMmNonPagedPoolLock
,
1142 LockQueueUnusedSpare16
,
1143 LockQueueTimerTableLock
,
1144 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1145 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1147 #endif /* defined(_AMD64_) */
1150 (NTAPI
*PKDEFERRED_ROUTINE
)(
1151 IN
struct _KDPC
*Dpc
,
1152 IN PVOID DeferredContext OPTIONAL
,
1153 IN PVOID SystemArgument1 OPTIONAL
,
1154 IN PVOID SystemArgument2 OPTIONAL
);
1156 typedef enum _KDPC_IMPORTANCE
{
1160 MediumHighImportance
1163 typedef struct _KDPC
{
1166 volatile USHORT Number
;
1167 LIST_ENTRY DpcListEntry
;
1168 PKDEFERRED_ROUTINE DeferredRoutine
;
1169 PVOID DeferredContext
;
1170 PVOID SystemArgument1
;
1171 PVOID SystemArgument2
;
1172 volatile PVOID DpcData
;
1173 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1175 typedef struct _KDPC_WATCHDOG_INFORMATION
{
1178 ULONG DpcWatchdogLimit
;
1179 ULONG DpcWatchdogCount
;
1181 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
1183 typedef struct _KDEVICE_QUEUE
{
1186 LIST_ENTRY DeviceListHead
;
1188 #if defined(_AMD64_)
1199 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1201 #define TIMER_EXPIRED_INDEX_BITS 6
1202 #define TIMER_PROCESSOR_INDEX_BITS 5
1204 typedef struct _DISPATCHER_HEADER
{
1205 _ANONYMOUS_UNION
union {
1206 _ANONYMOUS_STRUCT
struct {
1208 _ANONYMOUS_UNION
union {
1209 _ANONYMOUS_UNION
union {
1210 UCHAR TimerControlFlags
;
1211 _ANONYMOUS_STRUCT
struct {
1213 UCHAR Coalescable
:1;
1214 UCHAR KeepShifting
:1;
1215 UCHAR EncodedTolerableDelay
:5;
1219 #if (NTDDI_VERSION < NTDDI_WIN7)
1224 _ANONYMOUS_UNION
union {
1225 _ANONYMOUS_UNION
union {
1226 UCHAR ThreadControlFlags
;
1227 _ANONYMOUS_STRUCT
struct {
1228 UCHAR CpuThrottled
:1;
1229 UCHAR CycleProfiling
:1;
1230 UCHAR CounterProfiling
:1;
1237 _ANONYMOUS_UNION
union {
1238 #if (NTDDI_VERSION >= NTDDI_WIN7)
1239 _ANONYMOUS_UNION
union {
1240 UCHAR TimerMiscFlags
;
1241 _ANONYMOUS_STRUCT
struct {
1243 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
1246 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
1249 volatile UCHAR Expired
:1;
1253 /* Pre Win7 compatibility fix to latest WDK */
1256 _ANONYMOUS_UNION
union {
1257 BOOLEAN DebugActive
;
1258 _ANONYMOUS_STRUCT
struct {
1259 BOOLEAN ActiveDR7
:1;
1260 BOOLEAN Instrumented
:1;
1261 BOOLEAN Reserved2
:4;
1262 BOOLEAN UmsScheduled
:1;
1263 BOOLEAN UmsPrimary
:1;
1265 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
1272 LIST_ENTRY WaitListHead
;
1273 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1275 typedef struct _KEVENT
{
1276 DISPATCHER_HEADER Header
;
1277 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1279 typedef struct _KSEMAPHORE
{
1280 DISPATCHER_HEADER Header
;
1282 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1284 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
1286 typedef struct _KGATE
{
1287 DISPATCHER_HEADER Header
;
1288 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1290 typedef struct _KGUARDED_MUTEX
{
1291 volatile LONG Count
;
1295 __GNU_EXTENSION
union {
1296 __GNU_EXTENSION
struct {
1297 SHORT KernelApcDisable
;
1298 SHORT SpecialApcDisable
;
1300 ULONG CombinedApcDisable
;
1302 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1304 typedef struct _KMUTANT
{
1305 DISPATCHER_HEADER Header
;
1306 LIST_ENTRY MutantListEntry
;
1307 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1310 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1312 #define TIMER_TABLE_SIZE 512
1313 #define TIMER_TABLE_SHIFT 9
1315 typedef struct _KTIMER
{
1316 DISPATCHER_HEADER Header
;
1317 ULARGE_INTEGER DueTime
;
1318 LIST_ENTRY TimerListEntry
;
1324 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1326 typedef enum _LOCK_OPERATION
{
1332 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
1335 (NTAPI
*PKSYNCHRONIZE_ROUTINE
)(
1336 IN PVOID SynchronizeContext
);
1338 typedef enum _POOL_TYPE
{
1341 NonPagedPoolMustSucceed
,
1343 NonPagedPoolCacheAligned
,
1344 PagedPoolCacheAligned
,
1345 NonPagedPoolCacheAlignedMustS
,
1347 NonPagedPoolSession
= 32,
1349 NonPagedPoolMustSucceedSession
,
1350 DontUseThisTypeSession
,
1351 NonPagedPoolCacheAlignedSession
,
1352 PagedPoolCacheAlignedSession
,
1353 NonPagedPoolCacheAlignedMustSSession
1356 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
1360 } ALTERNATIVE_ARCHITECTURE_TYPE
;
1365 #define IsNEC_98 (FALSE)
1369 #define IsNotNEC_98 (TRUE)
1376 #ifndef SetNotNEC_98
1377 #define SetNotNEC_98
1382 typedef struct _KSYSTEM_TIME
{
1386 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
1388 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1393 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
1400 USHORT ErrorSelector
;
1403 USHORT DataSelector
;
1407 M128A FloatRegisters
[8];
1409 M128A XmmRegisters
[16];
1410 UCHAR Reserved4
[96];
1412 M128A XmmRegisters
[8];
1413 UCHAR Reserved4
[192];
1414 ULONG StackControl
[7];
1417 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1419 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
1421 ULONG64 Reserved
[7];
1422 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1424 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
1425 XSAVE_FORMAT LegacyState
;
1426 XSAVE_AREA_HEADER Header
;
1427 } XSAVE_AREA
, *PXSAVE_AREA
;
1429 typedef struct _XSTATE_CONTEXT
{
1441 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
1443 typedef struct _XSTATE_SAVE
{
1444 #if defined(_AMD64_)
1445 struct _XSTATE_SAVE
* Prev
;
1446 struct _KTHREAD
* Thread
;
1448 XSTATE_CONTEXT XStateContext
;
1449 #elif defined(_IA64_)
1451 #elif defined(_X86_)
1456 struct _XSTATE_SAVE
* Prev
;
1457 PXSAVE_AREA Reserved3
;
1458 struct _KTHREAD
* Thread
;
1462 XSTATE_CONTEXT XStateContext
;
1465 } XSTATE_SAVE
, *PXSTATE_SAVE
;
1469 #define MAXIMUM_SUPPORTED_EXTENSION 512
1471 #if !defined(__midl) && !defined(MIDL_PASS)
1472 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
1477 #define XSAVE_ALIGN 64
1478 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
1480 #if !defined(__midl) && !defined(MIDL_PASS)
1481 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
1482 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
1483 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
1486 typedef struct _CONTEXT_CHUNK
{
1489 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1491 typedef struct _CONTEXT_EX
{
1493 CONTEXT_CHUNK Legacy
;
1494 CONTEXT_CHUNK XState
;
1495 } CONTEXT_EX
, *PCONTEXT_EX
;
1497 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
1499 #if (NTDDI_VERSION >= NTDDI_VISTA)
1500 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1501 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1502 extern NTSYSAPI CCHAR KeNumberProcessors
;
1504 extern PCCHAR KeNumberProcessors
;
1508 /******************************************************************************
1509 * Memory manager Types *
1510 ******************************************************************************/
1512 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1513 typedef ULONG NODE_REQUIREMENT
;
1514 #define MM_ANY_NODE_OK 0x80000000
1517 #define MM_DONT_ZERO_ALLOCATION 0x00000001
1518 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
1519 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
1520 #define MM_ALLOCATE_NO_WAIT 0x00000008
1521 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
1522 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
1524 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1525 #define MDL_PAGES_LOCKED 0x0002
1526 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1527 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1528 #define MDL_PARTIAL 0x0010
1529 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1530 #define MDL_IO_PAGE_READ 0x0040
1531 #define MDL_WRITE_OPERATION 0x0080
1532 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1533 #define MDL_FREE_EXTRA_PTES 0x0200
1534 #define MDL_DESCRIBES_AWE 0x0400
1535 #define MDL_IO_SPACE 0x0800
1536 #define MDL_NETWORK_HEADER 0x1000
1537 #define MDL_MAPPING_CAN_FAIL 0x2000
1538 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1539 #define MDL_INTERNAL 0x8000
1541 #define MDL_MAPPING_FLAGS ( \
1542 MDL_MAPPED_TO_SYSTEM_VA | \
1543 MDL_PAGES_LOCKED | \
1544 MDL_SOURCE_IS_NONPAGED_POOL | \
1545 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1546 MDL_PARENT_MAPPED_SYSTEM_VA | \
1550 #define FLUSH_MULTIPLE_MAXIMUM 32
1552 /* Section access rights */
1553 #define SECTION_QUERY 0x0001
1554 #define SECTION_MAP_WRITE 0x0002
1555 #define SECTION_MAP_READ 0x0004
1556 #define SECTION_MAP_EXECUTE 0x0008
1557 #define SECTION_EXTEND_SIZE 0x0010
1558 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
1560 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
1561 SECTION_MAP_WRITE | \
1562 SECTION_MAP_READ | \
1563 SECTION_MAP_EXECUTE | \
1564 SECTION_EXTEND_SIZE)
1566 #define SESSION_QUERY_ACCESS 0x0001
1567 #define SESSION_MODIFY_ACCESS 0x0002
1569 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
1570 SESSION_QUERY_ACCESS | \
1571 SESSION_MODIFY_ACCESS)
1573 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
1575 #define PAGE_NOACCESS 0x01
1576 #define PAGE_READONLY 0x02
1577 #define PAGE_READWRITE 0x04
1578 #define PAGE_WRITECOPY 0x08
1579 #define PAGE_EXECUTE 0x10
1580 #define PAGE_EXECUTE_READ 0x20
1581 #define PAGE_EXECUTE_READWRITE 0x40
1582 #define PAGE_EXECUTE_WRITECOPY 0x80
1583 #define PAGE_GUARD 0x100
1584 #define PAGE_NOCACHE 0x200
1585 #define PAGE_WRITECOMBINE 0x400
1587 #define MEM_COMMIT 0x1000
1588 #define MEM_RESERVE 0x2000
1589 #define MEM_DECOMMIT 0x4000
1590 #define MEM_RELEASE 0x8000
1591 #define MEM_FREE 0x10000
1592 #define MEM_PRIVATE 0x20000
1593 #define MEM_MAPPED 0x40000
1594 #define MEM_RESET 0x80000
1595 #define MEM_TOP_DOWN 0x100000
1596 #define MEM_LARGE_PAGES 0x20000000
1597 #define MEM_4MB_PAGES 0x80000000
1599 #define SEC_RESERVE 0x4000000
1600 #define SEC_COMMIT 0x8000000
1601 #define SEC_LARGE_PAGES 0x80000000
1603 /* Section map options */
1604 typedef enum _SECTION_INHERIT
{
1609 typedef ULONG PFN_COUNT
;
1610 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
1611 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
1613 typedef struct _MDL
{
1617 struct _EPROCESS
*Process
;
1618 PVOID MappedSystemVa
;
1625 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
1626 MmFrameBufferCached
= 2
1627 } MEMORY_CACHING_TYPE_ORIG
;
1629 typedef enum _MEMORY_CACHING_TYPE
{
1630 MmNonCached
= FALSE
,
1632 MmWriteCombined
= MmFrameBufferCached
,
1633 MmHardwareCoherentCached
,
1634 MmNonCachedUnordered
,
1637 } MEMORY_CACHING_TYPE
;
1639 typedef enum _MM_PAGE_PRIORITY
{
1641 NormalPagePriority
= 16,
1642 HighPagePriority
= 32
1645 typedef enum _MM_SYSTEM_SIZE
{
1651 /******************************************************************************
1653 ******************************************************************************/
1655 #define EX_RUNDOWN_ACTIVE 0x1
1656 #define EX_RUNDOWN_COUNT_SHIFT 0x1
1657 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
1659 typedef struct _FAST_MUTEX
{
1660 volatile LONG Count
;
1665 } FAST_MUTEX
, *PFAST_MUTEX
;
1667 typedef enum _SUITE_TYPE
{
1671 CommunicationServer
,
1673 SmallBusinessRestricted
,
1687 typedef enum _EX_POOL_PRIORITY
{
1689 LowPoolPrioritySpecialPoolOverrun
= 8,
1690 LowPoolPrioritySpecialPoolUnderrun
= 9,
1691 NormalPoolPriority
= 16,
1692 NormalPoolPrioritySpecialPoolOverrun
= 24,
1693 NormalPoolPrioritySpecialPoolUnderrun
= 25,
1694 HighPoolPriority
= 32,
1695 HighPoolPrioritySpecialPoolOverrun
= 40,
1696 HighPoolPrioritySpecialPoolUnderrun
= 41
1699 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
1700 #define LOOKASIDE_ALIGN
1702 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
1705 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
1708 (NTAPI
*PALLOCATE_FUNCTION
)(
1709 IN POOL_TYPE PoolType
,
1710 IN SIZE_T NumberOfBytes
,
1714 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
1715 IN POOL_TYPE PoolType
,
1716 IN SIZE_T NumberOfBytes
,
1718 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
1721 (NTAPI
*PFREE_FUNCTION
)(
1725 (NTAPI
*PFREE_FUNCTION_EX
)(
1727 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
1730 (NTAPI CALLBACK_FUNCTION
)(
1731 IN PVOID CallbackContext OPTIONAL
,
1732 IN PVOID Argument1 OPTIONAL
,
1733 IN PVOID Argument2 OPTIONAL
);
1734 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
1736 #define GENERAL_LOOKASIDE_LAYOUT \
1738 SLIST_HEADER ListHead; \
1739 SINGLE_LIST_ENTRY SingleListHead; \
1742 USHORT MaximumDepth; \
1743 ULONG TotalAllocates; \
1745 ULONG AllocateMisses; \
1746 ULONG AllocateHits; \
1747 } DUMMYUNIONNAME2; \
1753 } DUMMYUNIONNAME3; \
1759 PALLOCATE_FUNCTION_EX AllocateEx; \
1760 PALLOCATE_FUNCTION Allocate; \
1761 } DUMMYUNIONNAME4; \
1764 PFREE_FUNCTION_EX FreeEx; \
1765 PFREE_FUNCTION Free; \
1766 } DUMMYUNIONNAME5; \
1768 LIST_ENTRY ListEntry; \
1769 ULONG LastTotalAllocates; \
1771 ULONG LastAllocateMisses; \
1772 ULONG LastAllocateHits; \
1773 } DUMMYUNIONNAME6; \
1776 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
1777 GENERAL_LOOKASIDE_LAYOUT
1778 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
1780 typedef struct _GENERAL_LOOKASIDE_POOL
{
1781 GENERAL_LOOKASIDE_LAYOUT
1782 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
1784 #define LOOKASIDE_CHECK(f) \
1785 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
1787 LOOKASIDE_CHECK(TotalFrees
);
1788 LOOKASIDE_CHECK(Tag
);
1789 LOOKASIDE_CHECK(Future
);
1791 typedef struct _PAGED_LOOKASIDE_LIST
{
1792 GENERAL_LOOKASIDE L
;
1793 #if !defined(_AMD64_) && !defined(_IA64_)
1794 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
1796 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
1798 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
1799 GENERAL_LOOKASIDE L
;
1800 #if !defined(_AMD64_) && !defined(_IA64_)
1801 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
1803 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
1805 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
1807 typedef struct _LOOKASIDE_LIST_EX
{
1808 GENERAL_LOOKASIDE_POOL L
;
1809 } LOOKASIDE_LIST_EX
;
1811 #if (NTDDI_VERSION >= NTDDI_VISTA)
1813 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
1814 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
1816 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
1817 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
1819 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1821 typedef struct _EX_RUNDOWN_REF
{
1822 __GNU_EXTENSION
union {
1823 volatile ULONG_PTR Count
;
1826 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
1828 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
1830 typedef enum _WORK_QUEUE_TYPE
{
1833 HyperCriticalWorkQueue
,
1838 (NTAPI WORKER_THREAD_ROUTINE
)(
1839 IN PVOID Parameter
);
1840 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
1842 typedef struct _WORK_QUEUE_ITEM
{
1844 PWORKER_THREAD_ROUTINE WorkerRoutine
;
1845 volatile PVOID Parameter
;
1846 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
1848 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
1850 typedef struct _OWNER_ENTRY
{
1851 ERESOURCE_THREAD OwnerThread
;
1854 ULONG IoPriorityBoosted
:1;
1855 ULONG OwnerReferenced
:1;
1856 ULONG OwnerCount
:30;
1860 } OWNER_ENTRY
, *POWNER_ENTRY
;
1862 typedef struct _ERESOURCE
{
1863 LIST_ENTRY SystemResourcesList
;
1864 POWNER_ENTRY OwnerTable
;
1867 volatile PKSEMAPHORE SharedWaiters
;
1868 volatile PKEVENT ExclusiveWaiters
;
1869 OWNER_ENTRY OwnerEntry
;
1870 ULONG ActiveEntries
;
1871 ULONG ContentionCount
;
1872 ULONG NumberOfSharedWaiters
;
1873 ULONG NumberOfExclusiveWaiters
;
1877 __GNU_EXTENSION
union {
1879 ULONG_PTR CreatorBackTraceIndex
;
1881 KSPIN_LOCK SpinLock
;
1882 } ERESOURCE
, *PERESOURCE
;
1884 /* ERESOURCE.Flag */
1885 #define ResourceNeverExclusive 0x0010
1886 #define ResourceReleaseByOtherThread 0x0020
1887 #define ResourceOwnedExclusive 0x0080
1889 #define RESOURCE_HASH_TABLE_SIZE 64
1891 typedef struct _RESOURCE_HASH_ENTRY
{
1892 LIST_ENTRY ListEntry
;
1894 ULONG ContentionCount
;
1896 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
1898 typedef struct _RESOURCE_PERFORMANCE_DATA
{
1899 ULONG ActiveResourceCount
;
1900 ULONG TotalResourceCount
;
1901 ULONG ExclusiveAcquire
;
1902 ULONG SharedFirstLevel
;
1903 ULONG SharedSecondLevel
;
1904 ULONG StarveFirstLevel
;
1905 ULONG StarveSecondLevel
;
1906 ULONG WaitForExclusive
;
1907 ULONG OwnerTableExpands
;
1908 ULONG MaximumTableExpand
;
1909 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
1910 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
1914 /******************************************************************************
1915 * Security Manager Types *
1916 ******************************************************************************/
1919 typedef PVOID PSECURITY_DESCRIPTOR
;
1920 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
1921 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
1922 typedef PVOID PACCESS_TOKEN
;
1925 #define DELETE 0x00010000L
1926 #define READ_CONTROL 0x00020000L
1927 #define WRITE_DAC 0x00040000L
1928 #define WRITE_OWNER 0x00080000L
1929 #define SYNCHRONIZE 0x00100000L
1930 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
1931 #define STANDARD_RIGHTS_READ READ_CONTROL
1932 #define STANDARD_RIGHTS_WRITE READ_CONTROL
1933 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
1934 #define STANDARD_RIGHTS_ALL 0x001F0000L
1935 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
1936 #define ACCESS_SYSTEM_SECURITY 0x01000000L
1937 #define MAXIMUM_ALLOWED 0x02000000L
1938 #define GENERIC_READ 0x80000000L
1939 #define GENERIC_WRITE 0x40000000L
1940 #define GENERIC_EXECUTE 0x20000000L
1941 #define GENERIC_ALL 0x10000000L
1943 typedef struct _GENERIC_MAPPING
{
1944 ACCESS_MASK GenericRead
;
1945 ACCESS_MASK GenericWrite
;
1946 ACCESS_MASK GenericExecute
;
1947 ACCESS_MASK GenericAll
;
1948 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
1950 #define ACL_REVISION 2
1951 #define ACL_REVISION_DS 4
1953 #define ACL_REVISION1 1
1954 #define ACL_REVISION2 2
1955 #define ACL_REVISION3 3
1956 #define ACL_REVISION4 4
1957 #define MIN_ACL_REVISION ACL_REVISION2
1958 #define MAX_ACL_REVISION ACL_REVISION4
1960 typedef struct _ACL
{
1968 /* Current security descriptor revision value */
1969 #define SECURITY_DESCRIPTOR_REVISION (1)
1970 #define SECURITY_DESCRIPTOR_REVISION1 (1)
1972 /* Privilege attributes */
1973 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
1974 #define SE_PRIVILEGE_ENABLED (0x00000002L)
1975 #define SE_PRIVILEGE_REMOVED (0X00000004L)
1976 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
1978 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
1979 SE_PRIVILEGE_ENABLED | \
1980 SE_PRIVILEGE_REMOVED | \
1981 SE_PRIVILEGE_USED_FOR_ACCESS)
1983 #include <pshpack4.h>
1984 typedef struct _LUID_AND_ATTRIBUTES
{
1987 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
1988 #include <poppack.h>
1990 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
1991 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
1993 /* Privilege sets */
1994 #define PRIVILEGE_SET_ALL_NECESSARY (1)
1996 typedef struct _PRIVILEGE_SET
{
1997 ULONG PrivilegeCount
;
1999 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2000 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2002 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2004 SecurityIdentification
,
2005 SecurityImpersonation
,
2007 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2009 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2010 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2011 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2012 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2014 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2015 #define SECURITY_STATIC_TRACKING (FALSE)
2017 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2019 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2021 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2022 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2023 BOOLEAN EffectiveOnly
;
2024 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2026 typedef struct _SE_IMPERSONATION_STATE
{
2027 PACCESS_TOKEN Token
;
2029 BOOLEAN EffectiveOnly
;
2030 SECURITY_IMPERSONATION_LEVEL Level
;
2031 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2033 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2034 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2035 #define DACL_SECURITY_INFORMATION (0x00000004L)
2036 #define SACL_SECURITY_INFORMATION (0x00000008L)
2037 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2039 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2040 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2041 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2042 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2044 typedef enum _SECURITY_OPERATION_CODE
{
2045 SetSecurityDescriptor
,
2046 QuerySecurityDescriptor
,
2047 DeleteSecurityDescriptor
,
2048 AssignSecurityDescriptor
2049 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2051 #define INITIAL_PRIVILEGE_COUNT 3
2053 typedef struct _INITIAL_PRIVILEGE_SET
{
2054 ULONG PrivilegeCount
;
2056 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2057 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2059 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2060 #define SE_CREATE_TOKEN_PRIVILEGE 2
2061 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2062 #define SE_LOCK_MEMORY_PRIVILEGE 4
2063 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2064 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2065 #define SE_TCB_PRIVILEGE 7
2066 #define SE_SECURITY_PRIVILEGE 8
2067 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2068 #define SE_LOAD_DRIVER_PRIVILEGE 10
2069 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2070 #define SE_SYSTEMTIME_PRIVILEGE 12
2071 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2072 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2073 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2074 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2075 #define SE_BACKUP_PRIVILEGE 17
2076 #define SE_RESTORE_PRIVILEGE 18
2077 #define SE_SHUTDOWN_PRIVILEGE 19
2078 #define SE_DEBUG_PRIVILEGE 20
2079 #define SE_AUDIT_PRIVILEGE 21
2080 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2081 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2082 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2083 #define SE_UNDOCK_PRIVILEGE 25
2084 #define SE_SYNC_AGENT_PRIVILEGE 26
2085 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2086 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2087 #define SE_IMPERSONATE_PRIVILEGE 29
2088 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2089 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2090 #define SE_RELABEL_PRIVILEGE 32
2091 #define SE_INC_WORKING_SET_PRIVILEGE 33
2092 #define SE_TIME_ZONE_PRIVILEGE 34
2093 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2094 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2096 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2097 PACCESS_TOKEN ClientToken
;
2098 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2099 PACCESS_TOKEN PrimaryToken
;
2100 PVOID ProcessAuditId
;
2101 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2103 typedef struct _ACCESS_STATE
{
2105 BOOLEAN SecurityEvaluated
;
2106 BOOLEAN GenerateAudit
;
2107 BOOLEAN GenerateOnClose
;
2108 BOOLEAN PrivilegesAllocated
;
2110 ACCESS_MASK RemainingDesiredAccess
;
2111 ACCESS_MASK PreviouslyGrantedAccess
;
2112 ACCESS_MASK OriginalDesiredAccess
;
2113 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2114 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2117 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2118 PRIVILEGE_SET PrivilegeSet
;
2120 BOOLEAN AuditPrivileges
;
2121 UNICODE_STRING ObjectName
;
2122 UNICODE_STRING ObjectTypeName
;
2123 } ACCESS_STATE
, *PACCESS_STATE
;
2126 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2128 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
2132 #ifndef _NTLSA_AUDIT_
2133 #define _NTLSA_AUDIT_
2135 #define SE_MAX_AUDIT_PARAMETERS 32
2136 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2138 #define SE_ADT_OBJECT_ONLY 0x1
2140 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2141 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2142 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2143 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2144 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2146 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2147 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2148 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2150 typedef enum _SE_ADT_PARAMETER_TYPE
{
2151 SeAdtParmTypeNone
= 0,
2152 SeAdtParmTypeString
,
2153 SeAdtParmTypeFileSpec
,
2156 SeAdtParmTypeLogonId
,
2157 SeAdtParmTypeNoLogonId
,
2158 SeAdtParmTypeAccessMask
,
2160 SeAdtParmTypeObjectTypes
,
2161 SeAdtParmTypeHexUlong
,
2166 SeAdtParmTypeHexInt64
,
2167 SeAdtParmTypeStringList
,
2168 SeAdtParmTypeSidList
,
2169 SeAdtParmTypeDuration
,
2170 SeAdtParmTypeUserAccountControl
,
2172 SeAdtParmTypeMessage
,
2173 SeAdtParmTypeDateTime
,
2174 SeAdtParmTypeSockAddr
,
2176 SeAdtParmTypeLogonHours
,
2177 SeAdtParmTypeLogonIdNoSid
,
2178 SeAdtParmTypeUlongNoConv
,
2179 SeAdtParmTypeSockAddrNoPort
,
2180 SeAdtParmTypeAccessReason
2181 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2183 typedef struct _SE_ADT_OBJECT_TYPE
{
2187 ACCESS_MASK AccessMask
;
2188 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2190 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2191 SE_ADT_PARAMETER_TYPE Type
;
2195 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2197 typedef struct _SE_ADT_ACCESS_REASON
{
2198 ACCESS_MASK AccessMask
;
2199 ULONG AccessReasons
[32];
2200 ULONG ObjectTypeIndex
;
2201 ULONG AccessGranted
;
2202 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2203 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2205 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2208 ULONG ParameterCount
;
2210 USHORT FlatSubCategoryId
;
2213 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2214 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2216 #endif /* !_NTLSA_AUDIT_ */
2217 #endif /* !_NTLSA_IFS_ */
2219 /******************************************************************************
2220 * Power Management Support Types *
2221 ******************************************************************************/
2226 #define PO_CB_SYSTEM_POWER_POLICY 0
2227 #define PO_CB_AC_STATUS 1
2228 #define PO_CB_BUTTON_COLLISION 2
2229 #define PO_CB_SYSTEM_STATE_LOCK 3
2230 #define PO_CB_LID_SWITCH_STATE 4
2231 #define PO_CB_PROCESSOR_POWER_POLICY 5
2233 /* Power States/Levels */
2234 typedef enum _SYSTEM_POWER_STATE
{
2235 PowerSystemUnspecified
= 0,
2237 PowerSystemSleeping1
,
2238 PowerSystemSleeping2
,
2239 PowerSystemSleeping3
,
2240 PowerSystemHibernate
,
2241 PowerSystemShutdown
,
2243 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2245 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
2247 typedef enum _POWER_INFORMATION_LEVEL
{
2248 SystemPowerPolicyAc
,
2249 SystemPowerPolicyDc
,
2250 VerifySystemPolicyAc
,
2251 VerifySystemPolicyDc
,
2252 SystemPowerCapabilities
,
2254 SystemPowerStateHandler
,
2255 ProcessorStateHandler
,
2256 SystemPowerPolicyCurrent
,
2257 AdministratorPowerPolicy
,
2258 SystemReserveHiberFile
,
2259 ProcessorInformation
,
2260 SystemPowerInformation
,
2261 ProcessorStateHandler2
,
2264 SystemExecutionState
,
2265 SystemPowerStateNotifyHandler
,
2266 ProcessorPowerPolicyAc
,
2267 ProcessorPowerPolicyDc
,
2268 VerifyProcessorPowerPolicyAc
,
2269 VerifyProcessorPowerPolicyDc
,
2270 ProcessorPowerPolicyCurrent
,
2271 SystemPowerStateLogging
,
2272 SystemPowerLoggingEntry
,
2273 SetPowerSettingValue
,
2274 NotifyUserPowerSetting
,
2275 PowerInformationLevelUnused0
,
2276 PowerInformationLevelUnused1
,
2278 TraceApplicationPowerMessage
,
2279 TraceApplicationPowerMessageEnd
,
2280 ProcessorPerfStates
,
2281 ProcessorIdleStates
,
2284 SystemHiberFileInformation
,
2285 TraceServicePowerMessage
,
2287 PowerShutdownNotification
,
2288 MonitorCapabilities
,
2290 SessionDisplayState
,
2293 GetPowerRequestList
,
2294 ProcessorInformationEx
,
2295 NotifyUserModeLegacyPowerEvent
,
2297 ProcessorIdleDomains
,
2299 SystemHiberFileSize
,
2300 PowerInformationLevelMaximum
2301 } POWER_INFORMATION_LEVEL
;
2304 PowerActionNone
= 0,
2305 PowerActionReserved
,
2307 PowerActionHibernate
,
2308 PowerActionShutdown
,
2309 PowerActionShutdownReset
,
2310 PowerActionShutdownOff
,
2311 PowerActionWarmEject
2312 } POWER_ACTION
, *PPOWER_ACTION
;
2314 typedef enum _DEVICE_POWER_STATE
{
2315 PowerDeviceUnspecified
= 0,
2321 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
2323 typedef enum _MONITOR_DISPLAY_STATE
{
2324 PowerMonitorOff
= 0,
2327 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
2329 typedef union _POWER_STATE
{
2330 SYSTEM_POWER_STATE SystemState
;
2331 DEVICE_POWER_STATE DeviceState
;
2332 } POWER_STATE
, *PPOWER_STATE
;
2334 typedef enum _POWER_STATE_TYPE
{
2335 SystemPowerState
= 0,
2337 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
2339 #if (NTDDI_VERSION >= NTDDI_VISTA)
2340 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
2344 ULONG TargetSystemState
:4;
2345 ULONG EffectiveSystemState
:4;
2346 ULONG CurrentSystemState
:4;
2347 ULONG IgnoreHibernationPath
:1;
2348 ULONG PseudoTransition
:1;
2351 ULONG ContextAsUlong
;
2353 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
2356 #if (NTDDI_VERSION >= NTDDI_WIN7)
2357 typedef struct _COUNTED_REASON_CONTEXT
{
2362 UNICODE_STRING ResourceFileName
;
2363 USHORT ResourceReasonId
;
2365 PUNICODE_STRING ReasonStrings
;
2367 UNICODE_STRING SimpleString
;
2369 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
2372 #define IOCTL_QUERY_DEVICE_POWER_STATE \
2373 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
2375 #define IOCTL_SET_DEVICE_WAKE \
2376 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2378 #define IOCTL_CANCEL_DEVICE_WAKE \
2379 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2381 #define ES_SYSTEM_REQUIRED 0x00000001
2382 #define ES_DISPLAY_REQUIRED 0x00000002
2383 #define ES_USER_PRESENT 0x00000004
2384 #define ES_CONTINUOUS 0x80000000
2386 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
2393 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
2394 #define DIAGNOSTIC_REASON_VERSION 0
2395 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
2396 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
2397 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
2398 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
2401 #define POWER_REQUEST_CONTEXT_VERSION 0
2402 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
2403 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
2405 #define PowerRequestMaximum 3
2407 typedef enum _POWER_REQUEST_TYPE
{
2408 PowerRequestDisplayRequired
,
2409 PowerRequestSystemRequired
,
2410 PowerRequestAwayModeRequired
2411 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
2413 #if (NTDDI_VERSION >= NTDDI_WINXP)
2415 #define PDCAP_D0_SUPPORTED 0x00000001
2416 #define PDCAP_D1_SUPPORTED 0x00000002
2417 #define PDCAP_D2_SUPPORTED 0x00000004
2418 #define PDCAP_D3_SUPPORTED 0x00000008
2419 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
2420 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
2421 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
2422 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
2423 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
2425 typedef struct CM_Power_Data_s
{
2427 DEVICE_POWER_STATE PD_MostRecentPowerState
;
2428 ULONG PD_Capabilities
;
2432 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
2433 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
2434 } CM_POWER_DATA
, *PCM_POWER_DATA
;
2436 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2438 typedef enum _SYSTEM_POWER_CONDITION
{
2443 } SYSTEM_POWER_CONDITION
;
2445 typedef struct _SET_POWER_SETTING_VALUE
{
2448 SYSTEM_POWER_CONDITION PowerCondition
;
2450 UCHAR Data
[ANYSIZE_ARRAY
];
2451 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
2453 #define POWER_SETTING_VALUE_VERSION (0x1)
2455 typedef struct _NOTIFY_USER_POWER_SETTING
{
2457 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
2459 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
2460 LARGE_INTEGER ActivationTime
;
2462 ULONG ButtonInstanceID
;
2463 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
2465 typedef enum _POWER_PLATFORM_ROLE
{
2466 PlatformRoleUnspecified
= 0,
2467 PlatformRoleDesktop
,
2469 PlatformRoleWorkstation
,
2470 PlatformRoleEnterpriseServer
,
2471 PlatformRoleSOHOServer
,
2472 PlatformRoleAppliancePC
,
2473 PlatformRolePerformanceServer
,
2475 } POWER_PLATFORM_ROLE
;
2477 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
2481 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
2482 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
2484 #endif /* !_PO_DDK_ */
2486 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
2487 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
2488 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
2489 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
2491 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
2492 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
2493 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
2494 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 );
2495 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 );
2496 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 );
2497 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 );
2498 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 );
2499 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E );
2500 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63 );
2501 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64 );
2502 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
2503 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
2504 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
2505 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
2506 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
2507 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
2508 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
2509 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67 );
2510 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
2511 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23 );
2512 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 );
2513 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E );
2514 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63 );
2515 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 );
2516 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 );
2517 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 );
2518 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA );
2519 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0 );
2520 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 );
2521 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E );
2522 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
2523 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
2524 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
2525 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
2526 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
2527 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 );
2528 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 );
2529 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
2530 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78 );
2531 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB );
2532 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93 );
2533 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 );
2534 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 );
2535 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B );
2536 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 );
2537 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F );
2538 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 );
2539 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 );
2540 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f );
2541 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 );
2542 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A );
2543 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
2544 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
2545 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
2546 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
2547 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
2548 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
2549 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
2550 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
2551 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
2552 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
2553 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
2554 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb );
2555 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
2556 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
2557 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d );
2558 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 );
2559 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
2560 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
2561 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
2562 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
2563 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
2564 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
2565 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
2566 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
2567 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
2568 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
2569 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
2570 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 );
2571 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
2572 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
2573 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
2574 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
2575 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
2576 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
2577 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
2578 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
2579 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
2580 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
2581 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
2582 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
2583 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
2584 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
2585 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
2586 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
2587 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
2588 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
2589 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 );
2590 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19 );
2591 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 );
2592 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 );
2593 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
2594 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 );
2595 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E );
2596 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA );
2597 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 );
2598 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 );
2599 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6 );
2601 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
2602 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
2603 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
2604 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
2606 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
2607 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
2609 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
2610 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
2613 (NTAPI REQUEST_POWER_COMPLETE
)(
2614 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2615 IN UCHAR MinorFunction
,
2616 IN POWER_STATE PowerState
,
2618 IN
struct _IO_STATUS_BLOCK
*IoStatus
);
2619 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
2623 (NTAPI POWER_SETTING_CALLBACK
)(
2624 IN LPCGUID SettingGuid
,
2626 IN ULONG ValueLength
,
2627 IN OUT PVOID Context OPTIONAL
);
2628 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
2631 /******************************************************************************
2632 * Configuration Manager Types *
2633 ******************************************************************************/
2635 /* Resource list definitions */
2636 typedef int CM_RESOURCE_TYPE
;
2638 #define CmResourceTypeNull 0
2639 #define CmResourceTypePort 1
2640 #define CmResourceTypeInterrupt 2
2641 #define CmResourceTypeMemory 3
2642 #define CmResourceTypeDma 4
2643 #define CmResourceTypeDeviceSpecific 5
2644 #define CmResourceTypeBusNumber 6
2645 #define CmResourceTypeNonArbitrated 128
2646 #define CmResourceTypeConfigData 128
2647 #define CmResourceTypeDevicePrivate 129
2648 #define CmResourceTypePcCardConfig 130
2649 #define CmResourceTypeMfCardConfig 131
2651 /* KEY_VALUE_Xxx.Type */
2654 #define REG_EXPAND_SZ 2
2655 #define REG_BINARY 3
2657 #define REG_DWORD_LITTLE_ENDIAN 4
2658 #define REG_DWORD_BIG_ENDIAN 5
2660 #define REG_MULTI_SZ 7
2661 #define REG_RESOURCE_LIST 8
2662 #define REG_FULL_RESOURCE_DESCRIPTOR 9
2663 #define REG_RESOURCE_REQUIREMENTS_LIST 10
2664 #define REG_QWORD 11
2665 #define REG_QWORD_LITTLE_ENDIAN 11
2667 /* Registry Access Rights */
2668 #define KEY_QUERY_VALUE (0x0001)
2669 #define KEY_SET_VALUE (0x0002)
2670 #define KEY_CREATE_SUB_KEY (0x0004)
2671 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
2672 #define KEY_NOTIFY (0x0010)
2673 #define KEY_CREATE_LINK (0x0020)
2674 #define KEY_WOW64_32KEY (0x0200)
2675 #define KEY_WOW64_64KEY (0x0100)
2676 #define KEY_WOW64_RES (0x0300)
2678 #define KEY_READ ((STANDARD_RIGHTS_READ |\
2680 KEY_ENUMERATE_SUB_KEYS |\
2685 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
2687 KEY_CREATE_SUB_KEY) \
2691 #define KEY_EXECUTE ((KEY_READ) \
2695 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
2698 KEY_CREATE_SUB_KEY |\
2699 KEY_ENUMERATE_SUB_KEYS |\
2705 /* Registry Open/Create Options */
2706 #define REG_OPTION_RESERVED (0x00000000L)
2707 #define REG_OPTION_NON_VOLATILE (0x00000000L)
2708 #define REG_OPTION_VOLATILE (0x00000001L)
2709 #define REG_OPTION_CREATE_LINK (0x00000002L)
2710 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
2711 #define REG_OPTION_OPEN_LINK (0x00000008L)
2713 #define REG_LEGAL_OPTION \
2714 (REG_OPTION_RESERVED |\
2715 REG_OPTION_NON_VOLATILE |\
2716 REG_OPTION_VOLATILE |\
2717 REG_OPTION_CREATE_LINK |\
2718 REG_OPTION_BACKUP_RESTORE |\
2719 REG_OPTION_OPEN_LINK)
2721 #define REG_OPEN_LEGAL_OPTION \
2722 (REG_OPTION_RESERVED |\
2723 REG_OPTION_BACKUP_RESTORE |\
2724 REG_OPTION_OPEN_LINK)
2726 #define REG_STANDARD_FORMAT 1
2727 #define REG_LATEST_FORMAT 2
2728 #define REG_NO_COMPRESSION 4
2730 /* Key creation/open disposition */
2731 #define REG_CREATED_NEW_KEY (0x00000001L)
2732 #define REG_OPENED_EXISTING_KEY (0x00000002L)
2734 /* Key restore & hive load flags */
2735 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
2736 #define REG_REFRESH_HIVE (0x00000002L)
2737 #define REG_NO_LAZY_FLUSH (0x00000004L)
2738 #define REG_FORCE_RESTORE (0x00000008L)
2739 #define REG_APP_HIVE (0x00000010L)
2740 #define REG_PROCESS_PRIVATE (0x00000020L)
2741 #define REG_START_JOURNAL (0x00000040L)
2742 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
2743 #define REG_HIVE_NO_RM (0x00000100L)
2744 #define REG_HIVE_SINGLE_LOG (0x00000200L)
2745 #define REG_BOOT_HIVE (0x00000400L)
2748 #define REG_FORCE_UNLOAD 1
2750 /* Notify Filter Values */
2751 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
2752 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
2753 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
2754 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
2756 #define REG_LEGAL_CHANGE_FILTER \
2757 (REG_NOTIFY_CHANGE_NAME |\
2758 REG_NOTIFY_CHANGE_ATTRIBUTES |\
2759 REG_NOTIFY_CHANGE_LAST_SET |\
2760 REG_NOTIFY_CHANGE_SECURITY)
2762 #include <pshpack4.h>
2763 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
2765 UCHAR ShareDisposition
;
2769 PHYSICAL_ADDRESS Start
;
2773 PHYSICAL_ADDRESS Start
;
2777 #if defined(NT_PROCESSOR_GROUPS)
2786 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2788 __GNU_EXTENSION
union {
2790 #if defined(NT_PROCESSOR_GROUPS)
2795 USHORT MessageCount
;
2800 #if defined(NT_PROCESSOR_GROUPS)
2813 PHYSICAL_ADDRESS Start
;
2833 } DeviceSpecificData
;
2834 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2836 PHYSICAL_ADDRESS Start
;
2840 PHYSICAL_ADDRESS Start
;
2844 PHYSICAL_ADDRESS Start
;
2849 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
2850 #include <poppack.h>
2852 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
2853 #define CmResourceTypeNull 0
2854 #define CmResourceTypePort 1
2855 #define CmResourceTypeInterrupt 2
2856 #define CmResourceTypeMemory 3
2857 #define CmResourceTypeDma 4
2858 #define CmResourceTypeDeviceSpecific 5
2859 #define CmResourceTypeBusNumber 6
2860 #define CmResourceTypeMemoryLarge 7
2861 #define CmResourceTypeNonArbitrated 128
2862 #define CmResourceTypeConfigData 128
2863 #define CmResourceTypeDevicePrivate 129
2864 #define CmResourceTypePcCardConfig 130
2865 #define CmResourceTypeMfCardConfig 131
2867 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
2868 typedef enum _CM_SHARE_DISPOSITION
{
2869 CmResourceShareUndetermined
= 0,
2870 CmResourceShareDeviceExclusive
,
2871 CmResourceShareDriverExclusive
,
2872 CmResourceShareShared
2873 } CM_SHARE_DISPOSITION
;
2875 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
2876 #define CM_RESOURCE_PORT_MEMORY 0x0000
2877 #define CM_RESOURCE_PORT_IO 0x0001
2878 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
2879 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
2880 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
2881 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
2882 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
2883 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
2884 #define CM_RESOURCE_PORT_BAR 0x0100
2886 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
2887 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
2888 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
2889 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
2890 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
2892 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
2894 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
2896 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
2897 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
2898 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
2899 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
2900 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
2901 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
2902 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
2903 #define CM_RESOURCE_MEMORY_24 0x0010
2904 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
2905 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
2906 #define CM_RESOURCE_MEMORY_BAR 0x0080
2907 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
2909 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
2910 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
2911 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
2912 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
2914 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
2915 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
2916 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
2918 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
2919 #define CM_RESOURCE_DMA_8 0x0000
2920 #define CM_RESOURCE_DMA_16 0x0001
2921 #define CM_RESOURCE_DMA_32 0x0002
2922 #define CM_RESOURCE_DMA_8_AND_16 0x0004
2923 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
2924 #define CM_RESOURCE_DMA_TYPE_A 0x0010
2925 #define CM_RESOURCE_DMA_TYPE_B 0x0020
2926 #define CM_RESOURCE_DMA_TYPE_F 0x0040
2928 typedef struct _DEVICE_FLAGS
{
2936 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
2938 typedef enum _INTERFACE_TYPE
{
2939 InterfaceTypeUndefined
= -1,
2957 MaximumInterfaceType
2958 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
2960 typedef struct _CM_COMPONENT_INFORMATION
{
2964 KAFFINITY AffinityMask
;
2965 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
2967 typedef struct _CM_ROM_BLOCK
{
2970 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
2972 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
2976 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
2977 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
2979 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
2980 INTERFACE_TYPE InterfaceType
;
2982 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
2983 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
2985 typedef struct _CM_RESOURCE_LIST
{
2987 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
2988 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
2990 typedef struct _PNP_BUS_INFORMATION
{
2992 INTERFACE_TYPE LegacyBusType
;
2994 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
2996 #include <pshpack1.h>
2998 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3001 USHORT SectorsPerTrack
;
3003 USHORT NumberDrives
;
3004 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3006 typedef struct _CM_MCA_POS_DATA
{
3012 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3014 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3018 UCHAR DeviceType
[3];
3019 USHORT DeviceAttributes
;
3020 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3022 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3026 USHORT ControlField
;
3028 ULONG EventFlagAddress
;
3029 USHORT RealModeEntryOffset
;
3030 USHORT RealModeEntrySegment
;
3031 USHORT ProtectedModeEntryOffset
;
3032 ULONG ProtectedModeCodeBaseAddress
;
3034 USHORT RealModeDataBaseAddress
;
3035 ULONG ProtectedModeDataBaseAddress
;
3036 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3038 #include <poppack.h>
3040 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3041 ULONG BytesPerSector
;
3042 ULONG NumberOfCylinders
;
3043 ULONG SectorsPerTrack
;
3044 ULONG NumberOfHeads
;
3045 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3047 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3052 USHORT KeyboardFlags
;
3053 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3055 typedef struct _CM_SCSI_DEVICE_DATA
{
3058 UCHAR HostIdentifier
;
3059 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3061 typedef struct _CM_VIDEO_DEVICE_DATA
{
3065 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3067 typedef struct _CM_SONIC_DEVICE_DATA
{
3070 USHORT DataConfigurationRegister
;
3071 UCHAR EthernetAddress
[8];
3072 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3074 typedef struct _CM_SERIAL_DEVICE_DATA
{
3078 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3080 typedef struct _CM_MONITOR_DEVICE_DATA
{
3083 USHORT HorizontalScreenSize
;
3084 USHORT VerticalScreenSize
;
3085 USHORT HorizontalResolution
;
3086 USHORT VerticalResolution
;
3087 USHORT HorizontalDisplayTimeLow
;
3088 USHORT HorizontalDisplayTime
;
3089 USHORT HorizontalDisplayTimeHigh
;
3090 USHORT HorizontalBackPorchLow
;
3091 USHORT HorizontalBackPorch
;
3092 USHORT HorizontalBackPorchHigh
;
3093 USHORT HorizontalFrontPorchLow
;
3094 USHORT HorizontalFrontPorch
;
3095 USHORT HorizontalFrontPorchHigh
;
3096 USHORT HorizontalSyncLow
;
3097 USHORT HorizontalSync
;
3098 USHORT HorizontalSyncHigh
;
3099 USHORT VerticalBackPorchLow
;
3100 USHORT VerticalBackPorch
;
3101 USHORT VerticalBackPorchHigh
;
3102 USHORT VerticalFrontPorchLow
;
3103 USHORT VerticalFrontPorch
;
3104 USHORT VerticalFrontPorchHigh
;
3105 USHORT VerticalSyncLow
;
3106 USHORT VerticalSync
;
3107 USHORT VerticalSyncHigh
;
3108 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3110 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3116 UCHAR StepRateHeadUnloadTime
;
3119 UCHAR SectorLengthCode
;
3120 UCHAR SectorPerTrack
;
3121 UCHAR ReadWriteGapLength
;
3122 UCHAR DataTransferLength
;
3123 UCHAR FormatGapLength
;
3124 UCHAR FormatFillCharacter
;
3125 UCHAR HeadSettleTime
;
3126 UCHAR MotorSettleTime
;
3127 UCHAR MaximumTrackValue
;
3128 UCHAR DataTransferRate
;
3129 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3131 typedef enum _KEY_INFORMATION_CLASS
{
3132 KeyBasicInformation
,
3136 KeyCachedInformation
,
3137 KeyFlagsInformation
,
3138 KeyVirtualizationInformation
,
3139 KeyHandleTagsInformation
,
3141 } KEY_INFORMATION_CLASS
;
3143 typedef struct _KEY_BASIC_INFORMATION
{
3144 LARGE_INTEGER LastWriteTime
;
3148 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3150 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3152 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3154 typedef struct _KEY_FULL_INFORMATION
{
3155 LARGE_INTEGER LastWriteTime
;
3163 ULONG MaxValueNameLen
;
3164 ULONG MaxValueDataLen
;
3166 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3168 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3170 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3172 typedef struct _KEY_NODE_INFORMATION
{
3173 LARGE_INTEGER LastWriteTime
;
3179 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3181 typedef enum _KEY_SET_INFORMATION_CLASS
{
3182 KeyWriteTimeInformation
,
3183 KeyWow64FlagsInformation
,
3184 KeyControlFlagsInformation
,
3185 KeySetVirtualizationInformation
,
3186 KeySetDebugInformation
,
3187 KeySetHandleTagsInformation
,
3189 } KEY_SET_INFORMATION_CLASS
;
3191 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3192 ULONG VirtualTarget
:1;
3193 ULONG VirtualStore
:1;
3194 ULONG VirtualSource
:1;
3196 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3198 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3203 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3205 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3212 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3214 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3219 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3221 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3225 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3227 typedef struct _KEY_VALUE_ENTRY
{
3228 PUNICODE_STRING ValueName
;
3232 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3234 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3235 KeyValueBasicInformation
,
3236 KeyValueFullInformation
,
3237 KeyValuePartialInformation
,
3238 KeyValueFullInformationAlign64
,
3239 KeyValuePartialInformationAlign64
3240 } KEY_VALUE_INFORMATION_CLASS
;
3242 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3244 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
3246 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3247 LARGE_INTEGER LastWriteTime
;
3248 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3250 typedef enum _REG_NOTIFY_CLASS
{
3252 RegNtPreDeleteKey
= RegNtDeleteKey
,
3254 RegNtPreSetValueKey
= RegNtSetValueKey
,
3255 RegNtDeleteValueKey
,
3256 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3257 RegNtSetInformationKey
,
3258 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3260 RegNtPreRenameKey
= RegNtRenameKey
,
3262 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3263 RegNtEnumerateValueKey
,
3264 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3266 RegNtPreQueryKey
= RegNtQueryKey
,
3268 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3269 RegNtQueryMultipleValueKey
,
3270 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3275 RegNtKeyHandleClose
,
3276 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3278 RegNtPostSetValueKey
,
3279 RegNtPostDeleteValueKey
,
3280 RegNtPostSetInformationKey
,
3282 RegNtPostEnumerateKey
,
3283 RegNtPostEnumerateValueKey
,
3285 RegNtPostQueryValueKey
,
3286 RegNtPostQueryMultipleValueKey
,
3287 RegNtPostKeyHandleClose
,
3288 RegNtPreCreateKeyEx
,
3289 RegNtPostCreateKeyEx
,
3298 RegNtPreQueryKeySecurity
,
3299 RegNtPostQueryKeySecurity
,
3300 RegNtPreSetKeySecurity
,
3301 RegNtPostSetKeySecurity
,
3302 RegNtCallbackObjectContextCleanup
,
3304 RegNtPostRestoreKey
,
3308 RegNtPostReplaceKey
,
3310 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3313 (NTAPI EX_CALLBACK_FUNCTION
)(
3314 IN PVOID CallbackContext
,
3316 IN PVOID Argument2
);
3317 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
3319 typedef struct _REG_DELETE_KEY_INFORMATION
{
3322 PVOID ObjectContext
;
3324 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
3325 #if (NTDDI_VERSION >= NTDDI_VISTA)
3326 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
3330 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
3332 PUNICODE_STRING ValueName
;
3338 PVOID ObjectContext
;
3340 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3342 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
3344 PUNICODE_STRING ValueName
;
3346 PVOID ObjectContext
;
3348 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3350 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
3352 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3353 PVOID KeySetInformation
;
3354 ULONG KeySetInformationLength
;
3356 PVOID ObjectContext
;
3358 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3360 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
3363 KEY_INFORMATION_CLASS KeyInformationClass
;
3364 PVOID KeyInformation
;
3366 PULONG ResultLength
;
3368 PVOID ObjectContext
;
3370 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3372 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
3375 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3376 PVOID KeyValueInformation
;
3378 PULONG ResultLength
;
3380 PVOID ObjectContext
;
3382 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3384 typedef struct _REG_QUERY_KEY_INFORMATION
{
3386 KEY_INFORMATION_CLASS KeyInformationClass
;
3387 PVOID KeyInformation
;
3389 PULONG ResultLength
;
3391 PVOID ObjectContext
;
3393 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3395 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
3397 PUNICODE_STRING ValueName
;
3398 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3399 PVOID KeyValueInformation
;
3401 PULONG ResultLength
;
3403 PVOID ObjectContext
;
3405 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3407 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
3409 PKEY_VALUE_ENTRY ValueEntries
;
3412 PULONG BufferLength
;
3413 PULONG RequiredBufferLength
;
3415 PVOID ObjectContext
;
3417 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
3419 typedef struct _REG_RENAME_KEY_INFORMATION
{
3421 PUNICODE_STRING NewName
;
3423 PVOID ObjectContext
;
3425 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
3427 typedef struct _REG_CREATE_KEY_INFORMATION
{
3428 PUNICODE_STRING CompleteName
;
3431 ULONG CreateOptions
;
3432 PUNICODE_STRING Class
;
3433 PVOID SecurityDescriptor
;
3434 PVOID SecurityQualityOfService
;
3435 ACCESS_MASK DesiredAccess
;
3436 ACCESS_MASK GrantedAccess
;
3438 PVOID
*ResultObject
;
3440 PVOID RootObjectContext
;
3443 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
3445 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
3446 PUNICODE_STRING CompleteName
;
3450 PUNICODE_STRING Class
;
3451 PVOID SecurityDescriptor
;
3452 PVOID SecurityQualityOfService
;
3453 ACCESS_MASK DesiredAccess
;
3454 ACCESS_MASK GrantedAccess
;
3456 PVOID
*ResultObject
;
3458 PVOID RootObjectContext
;
3461 PUNICODE_STRING RemainingName
;
3464 KPROCESSOR_MODE CheckAccessMode
;
3465 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
3467 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
3468 PUNICODE_STRING CompleteName
;
3469 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
3471 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
3472 PUNICODE_STRING CompleteName
;
3475 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
3477 typedef struct _REG_POST_OPERATION_INFORMATION
{
3480 PVOID PreInformation
;
3481 NTSTATUS ReturnStatus
;
3483 PVOID ObjectContext
;
3485 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
3487 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
3490 PVOID ObjectContext
;
3492 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
3494 #if (NTDDI_VERSION >= NTDDI_VISTA)
3496 typedef struct _REG_LOAD_KEY_INFORMATION
{
3498 PUNICODE_STRING KeyName
;
3499 PUNICODE_STRING SourceFile
;
3501 PVOID TrustClassObject
;
3503 ACCESS_MASK DesiredAccess
;
3506 PVOID ObjectContext
;
3508 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
3510 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
3514 PVOID ObjectContext
;
3516 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
3518 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
3520 PVOID ObjectContext
;
3522 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
3524 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
3526 PSECURITY_INFORMATION SecurityInformation
;
3527 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3530 PVOID ObjectContext
;
3532 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
3534 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
3536 PSECURITY_INFORMATION SecurityInformation
;
3537 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3539 PVOID ObjectContext
;
3541 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
3543 typedef struct _REG_RESTORE_KEY_INFORMATION
{
3548 PVOID ObjectContext
;
3550 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
3552 typedef struct _REG_SAVE_KEY_INFORMATION
{
3557 PVOID ObjectContext
;
3559 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
3561 typedef struct _REG_REPLACE_KEY_INFORMATION
{
3563 PUNICODE_STRING OldFileName
;
3564 PUNICODE_STRING NewFileName
;
3566 PVOID ObjectContext
;
3568 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
3570 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
3572 #define SERVICE_KERNEL_DRIVER 0x00000001
3573 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
3574 #define SERVICE_ADAPTER 0x00000004
3575 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
3577 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
3578 SERVICE_FILE_SYSTEM_DRIVER | \
3579 SERVICE_RECOGNIZER_DRIVER)
3581 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
3582 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
3583 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
3584 SERVICE_WIN32_SHARE_PROCESS)
3586 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
3588 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
3591 SERVICE_INTERACTIVE_PROCESS)
3593 /* Service Start Types */
3594 #define SERVICE_BOOT_START 0x00000000
3595 #define SERVICE_SYSTEM_START 0x00000001
3596 #define SERVICE_AUTO_START 0x00000002
3597 #define SERVICE_DEMAND_START 0x00000003
3598 #define SERVICE_DISABLED 0x00000004
3600 #define SERVICE_ERROR_IGNORE 0x00000000
3601 #define SERVICE_ERROR_NORMAL 0x00000001
3602 #define SERVICE_ERROR_SEVERE 0x00000002
3603 #define SERVICE_ERROR_CRITICAL 0x00000003
3605 typedef enum _CM_SERVICE_NODE_TYPE
{
3606 DriverType
= SERVICE_KERNEL_DRIVER
,
3607 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
3608 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
3609 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
3610 AdapterType
= SERVICE_ADAPTER
,
3611 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
3612 } SERVICE_NODE_TYPE
;
3614 typedef enum _CM_SERVICE_LOAD_TYPE
{
3615 BootLoad
= SERVICE_BOOT_START
,
3616 SystemLoad
= SERVICE_SYSTEM_START
,
3617 AutoLoad
= SERVICE_AUTO_START
,
3618 DemandLoad
= SERVICE_DEMAND_START
,
3619 DisableLoad
= SERVICE_DISABLED
3620 } SERVICE_LOAD_TYPE
;
3622 typedef enum _CM_ERROR_CONTROL_TYPE
{
3623 IgnoreError
= SERVICE_ERROR_IGNORE
,
3624 NormalError
= SERVICE_ERROR_NORMAL
,
3625 SevereError
= SERVICE_ERROR_SEVERE
,
3626 CriticalError
= SERVICE_ERROR_CRITICAL
3627 } SERVICE_ERROR_TYPE
;
3629 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
3630 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
3631 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
3633 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
3634 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
3635 CM_SERVICE_USB_DISK_BOOT_LOAD)
3639 /******************************************************************************
3640 * I/O Manager Types *
3641 ******************************************************************************/
3643 #define WDM_MAJORVERSION 0x06
3644 #define WDM_MINORVERSION 0x00
3648 #ifndef USE_DMA_MACROS
3649 #define USE_DMA_MACROS
3652 #ifndef NO_LEGACY_DRIVERS
3653 #define NO_LEGACY_DRIVERS
3656 #endif /* defined(_WIN64) */
3658 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
3660 #define CONNECT_FULLY_SPECIFIED 0x1
3661 #define CONNECT_LINE_BASED 0x2
3662 #define CONNECT_MESSAGE_BASED 0x3
3663 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
3664 #define CONNECT_CURRENT_VERSION 0x4
3666 #define POOL_COLD_ALLOCATION 256
3667 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
3668 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
3670 #define IO_TYPE_ADAPTER 1
3671 #define IO_TYPE_CONTROLLER 2
3672 #define IO_TYPE_DEVICE 3
3673 #define IO_TYPE_DRIVER 4
3674 #define IO_TYPE_FILE 5
3675 #define IO_TYPE_IRP 6
3676 #define IO_TYPE_MASTER_ADAPTER 7
3677 #define IO_TYPE_OPEN_PACKET 8
3678 #define IO_TYPE_TIMER 9
3679 #define IO_TYPE_VPB 10
3680 #define IO_TYPE_ERROR_LOG 11
3681 #define IO_TYPE_ERROR_MESSAGE 12
3682 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3684 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3685 #define IO_TYPE_CSQ 2
3686 #define IO_TYPE_CSQ_EX 3
3688 /* IO_RESOURCE_DESCRIPTOR.Option */
3689 #define IO_RESOURCE_PREFERRED 0x01
3690 #define IO_RESOURCE_DEFAULT 0x02
3691 #define IO_RESOURCE_ALTERNATIVE 0x08
3693 #define FILE_DEVICE_BEEP 0x00000001
3694 #define FILE_DEVICE_CD_ROM 0x00000002
3695 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
3696 #define FILE_DEVICE_CONTROLLER 0x00000004
3697 #define FILE_DEVICE_DATALINK 0x00000005
3698 #define FILE_DEVICE_DFS 0x00000006
3699 #define FILE_DEVICE_DISK 0x00000007
3700 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
3701 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
3702 #define FILE_DEVICE_INPORT_PORT 0x0000000a
3703 #define FILE_DEVICE_KEYBOARD 0x0000000b
3704 #define FILE_DEVICE_MAILSLOT 0x0000000c
3705 #define FILE_DEVICE_MIDI_IN 0x0000000d
3706 #define FILE_DEVICE_MIDI_OUT 0x0000000e
3707 #define FILE_DEVICE_MOUSE 0x0000000f
3708 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
3709 #define FILE_DEVICE_NAMED_PIPE 0x00000011
3710 #define FILE_DEVICE_NETWORK 0x00000012
3711 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
3712 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
3713 #define FILE_DEVICE_NULL 0x00000015
3714 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
3715 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
3716 #define FILE_DEVICE_PRINTER 0x00000018
3717 #define FILE_DEVICE_SCANNER 0x00000019
3718 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
3719 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
3720 #define FILE_DEVICE_SCREEN 0x0000001c
3721 #define FILE_DEVICE_SOUND 0x0000001d
3722 #define FILE_DEVICE_STREAMS 0x0000001e
3723 #define FILE_DEVICE_TAPE 0x0000001f
3724 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
3725 #define FILE_DEVICE_TRANSPORT 0x00000021
3726 #define FILE_DEVICE_UNKNOWN 0x00000022
3727 #define FILE_DEVICE_VIDEO 0x00000023
3728 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
3729 #define FILE_DEVICE_WAVE_IN 0x00000025
3730 #define FILE_DEVICE_WAVE_OUT 0x00000026
3731 #define FILE_DEVICE_8042_PORT 0x00000027
3732 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
3733 #define FILE_DEVICE_BATTERY 0x00000029
3734 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
3735 #define FILE_DEVICE_MODEM 0x0000002b
3736 #define FILE_DEVICE_VDM 0x0000002c
3737 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
3738 #define FILE_DEVICE_SMB 0x0000002e
3739 #define FILE_DEVICE_KS 0x0000002f
3740 #define FILE_DEVICE_CHANGER 0x00000030
3741 #define FILE_DEVICE_SMARTCARD 0x00000031
3742 #define FILE_DEVICE_ACPI 0x00000032
3743 #define FILE_DEVICE_DVD 0x00000033
3744 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
3745 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
3746 #define FILE_DEVICE_DFS_VOLUME 0x00000036
3747 #define FILE_DEVICE_SERENUM 0x00000037
3748 #define FILE_DEVICE_TERMSRV 0x00000038
3749 #define FILE_DEVICE_KSEC 0x00000039
3750 #define FILE_DEVICE_FIPS 0x0000003A
3751 #define FILE_DEVICE_INFINIBAND 0x0000003B
3752 #define FILE_DEVICE_VMBUS 0x0000003E
3753 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
3754 #define FILE_DEVICE_WPD 0x00000040
3755 #define FILE_DEVICE_BLUETOOTH 0x00000041
3756 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
3757 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
3758 #define FILE_DEVICE_BIOMETRIC 0x00000044
3759 #define FILE_DEVICE_PMI 0x00000045
3761 #if defined(NT_PROCESSOR_GROUPS)
3763 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3765 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
3766 IrqPolicyMachineDefault
= 0,
3767 IrqPolicyAllCloseProcessors
= 1,
3768 IrqPolicyOneCloseProcessor
= 2,
3769 IrqPolicyAllProcessorsInMachine
= 3,
3770 IrqPolicyAllProcessorsInGroup
= 3,
3771 IrqPolicySpecifiedProcessors
= 4,
3772 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
3774 #else /* defined(NT_PROCESSOR_GROUPS) */
3776 typedef enum _IRQ_DEVICE_POLICY
{
3777 IrqPolicyMachineDefault
= 0,
3778 IrqPolicyAllCloseProcessors
,
3779 IrqPolicyOneCloseProcessor
,
3780 IrqPolicyAllProcessorsInMachine
,
3781 IrqPolicySpecifiedProcessors
,
3782 IrqPolicySpreadMessagesAcrossAllProcessors
3783 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3787 typedef enum _IRQ_PRIORITY
{
3788 IrqPriorityUndefined
= 0,
3792 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
3794 typedef enum _IRQ_GROUP_POLICY
{
3795 GroupAffinityAllGroupZero
= 0,
3796 GroupAffinityDontCare
3797 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
3799 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
3801 typedef struct _OBJECT_HANDLE_INFORMATION
{
3802 ULONG HandleAttributes
;
3803 ACCESS_MASK GrantedAccess
;
3804 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
3806 typedef struct _CLIENT_ID
{
3807 HANDLE UniqueProcess
;
3808 HANDLE UniqueThread
;
3809 } CLIENT_ID
, *PCLIENT_ID
;
3811 typedef struct _VPB
{
3815 USHORT VolumeLabelLength
;
3816 struct _DEVICE_OBJECT
*DeviceObject
;
3817 struct _DEVICE_OBJECT
*RealDevice
;
3819 ULONG ReferenceCount
;
3820 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
3823 typedef enum _IO_ALLOCATION_ACTION
{
3826 DeallocateObjectKeepRegisters
3827 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
3829 typedef IO_ALLOCATION_ACTION
3830 (NTAPI DRIVER_CONTROL
)(
3831 IN
struct _DEVICE_OBJECT
*DeviceObject
,
3832 IN
struct _IRP
*Irp
,
3833 IN PVOID MapRegisterBase
,
3835 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
3837 typedef struct _WAIT_CONTEXT_BLOCK
{
3838 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
3839 PDRIVER_CONTROL DeviceRoutine
;
3840 PVOID DeviceContext
;
3841 ULONG NumberOfMapRegisters
;
3844 PKDPC BufferChainingDpc
;
3845 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
3847 /* DEVICE_OBJECT.Flags */
3848 #define DO_VERIFY_VOLUME 0x00000002
3849 #define DO_BUFFERED_IO 0x00000004
3850 #define DO_EXCLUSIVE 0x00000008
3851 #define DO_DIRECT_IO 0x00000010
3852 #define DO_MAP_IO_BUFFER 0x00000020
3853 #define DO_DEVICE_INITIALIZING 0x00000080
3854 #define DO_SHUTDOWN_REGISTERED 0x00000800
3855 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
3856 #define DO_POWER_PAGABLE 0x00002000
3857 #define DO_POWER_INRUSH 0x00004000
3859 /* DEVICE_OBJECT.Characteristics */
3860 #define FILE_REMOVABLE_MEDIA 0x00000001
3861 #define FILE_READ_ONLY_DEVICE 0x00000002
3862 #define FILE_FLOPPY_DISKETTE 0x00000004
3863 #define FILE_WRITE_ONCE_MEDIA 0x00000008
3864 #define FILE_REMOTE_DEVICE 0x00000010
3865 #define FILE_DEVICE_IS_MOUNTED 0x00000020
3866 #define FILE_VIRTUAL_VOLUME 0x00000040
3867 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
3868 #define FILE_DEVICE_SECURE_OPEN 0x00000100
3869 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
3870 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
3871 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
3873 /* DEVICE_OBJECT.AlignmentRequirement */
3874 #define FILE_BYTE_ALIGNMENT 0x00000000
3875 #define FILE_WORD_ALIGNMENT 0x00000001
3876 #define FILE_LONG_ALIGNMENT 0x00000003
3877 #define FILE_QUAD_ALIGNMENT 0x00000007
3878 #define FILE_OCTA_ALIGNMENT 0x0000000f
3879 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
3880 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
3881 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
3882 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
3883 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
3885 /* DEVICE_OBJECT.DeviceType */
3886 #define DEVICE_TYPE ULONG
3888 typedef struct _DEVICE_OBJECT
{
3891 LONG ReferenceCount
;
3892 struct _DRIVER_OBJECT
*DriverObject
;
3893 struct _DEVICE_OBJECT
*NextDevice
;
3894 struct _DEVICE_OBJECT
*AttachedDevice
;
3895 struct _IRP
*CurrentIrp
;
3898 ULONG Characteristics
;
3900 PVOID DeviceExtension
;
3901 DEVICE_TYPE DeviceType
;
3904 LIST_ENTRY ListEntry
;
3905 WAIT_CONTEXT_BLOCK Wcb
;
3907 ULONG AlignmentRequirement
;
3908 KDEVICE_QUEUE DeviceQueue
;
3910 ULONG ActiveThreadCount
;
3911 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3915 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
3917 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
3919 typedef enum _IO_SESSION_STATE
{
3920 IoSessionStateCreated
= 1,
3921 IoSessionStateInitialized
,
3922 IoSessionStateConnected
,
3923 IoSessionStateDisconnected
,
3924 IoSessionStateDisconnectedLoggedOn
,
3925 IoSessionStateLoggedOn
,
3926 IoSessionStateLoggedOff
,
3927 IoSessionStateTerminated
,
3929 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
3931 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
3932 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
3933 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
3934 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
3936 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
3937 PHYSICAL_ADDRESS MessageAddress
;
3938 KAFFINITY TargetProcessorSet
;
3939 PKINTERRUPT InterruptObject
;
3943 KINTERRUPT_MODE Mode
;
3944 KINTERRUPT_POLARITY Polarity
;
3945 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
3947 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
3950 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
3951 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
3953 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
3954 IN PDEVICE_OBJECT PhysicalDeviceObject
;
3955 OUT PKINTERRUPT
*InterruptObject
;
3956 IN PKSERVICE_ROUTINE ServiceRoutine
;
3957 IN PVOID ServiceContext
;
3958 IN PKSPIN_LOCK SpinLock OPTIONAL
;
3959 IN KIRQL SynchronizeIrql
;
3960 IN BOOLEAN FloatingSave
;
3961 IN BOOLEAN ShareVector
;
3964 IN KINTERRUPT_MODE InterruptMode
;
3965 IN KAFFINITY ProcessorEnableMask
;
3967 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
3969 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
3970 IN PDEVICE_OBJECT PhysicalDeviceObject
;
3971 OUT PKINTERRUPT
*InterruptObject
;
3972 IN PKSERVICE_ROUTINE ServiceRoutine
;
3973 IN PVOID ServiceContext
;
3974 IN PKSPIN_LOCK SpinLock OPTIONAL
;
3975 IN KIRQL SynchronizeIrql OPTIONAL
;
3976 IN BOOLEAN FloatingSave
;
3977 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
3979 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
3980 IN PDEVICE_OBJECT PhysicalDeviceObject
;
3983 OUT PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
3984 OUT PKINTERRUPT
*InterruptObject
;
3985 } ConnectionContext
;
3986 IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
3987 IN PVOID ServiceContext
;
3988 IN PKSPIN_LOCK SpinLock OPTIONAL
;
3989 IN KIRQL SynchronizeIrql OPTIONAL
;
3990 IN BOOLEAN FloatingSave
;
3991 IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL
;
3992 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
3994 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
3995 IN OUT ULONG Version
;
3997 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
3998 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
3999 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4001 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4003 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4007 IN PKINTERRUPT InterruptObject
;
4008 IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4009 } ConnectionContext
;
4010 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4012 typedef enum _IO_ACCESS_TYPE
{
4018 typedef enum _IO_ACCESS_MODE
{
4023 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4024 IoSessionStateNotification
,
4025 IoMaxContainerNotificationClass
4026 } IO_CONTAINER_NOTIFICATION_CLASS
;
4028 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4034 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4036 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4037 IoSessionStateInformation
,
4038 IoMaxContainerInformationClass
4039 } IO_CONTAINER_INFORMATION_CLASS
;
4041 typedef struct _IO_SESSION_STATE_INFORMATION
{
4043 IO_SESSION_STATE SessionState
;
4044 BOOLEAN LocalSession
;
4045 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4047 #if (NTDDI_VERSION >= NTDDI_WIN7)
4050 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4054 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4055 IN PVOID SessionObject
,
4059 IN PVOID NotificationPayload
,
4060 IN ULONG PayloadLength
);
4062 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4066 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4068 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4070 BOOLEAN Reserved
[3];
4071 volatile LONG IoCount
;
4073 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4075 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4078 LONGLONG MaxLockedTicks
;
4080 LIST_ENTRY LockList
;
4082 volatile LONG LowMemoryCount
;
4085 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4086 } IO_REMOVE_LOCK_DBG_BLOCK
;
4088 typedef struct _IO_REMOVE_LOCK
{
4089 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4091 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4093 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4095 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4098 (NTAPI IO_WORKITEM_ROUTINE
)(
4099 IN PDEVICE_OBJECT DeviceObject
,
4101 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4104 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4106 IN PVOID Context OPTIONAL
,
4107 IN PIO_WORKITEM IoWorkItem
);
4108 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4110 typedef struct _SHARE_ACCESS
{
4118 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4120 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4121 inheritance, even from a struct renders the type non-POD. So we use
4123 #define PCI_COMMON_HEADER_LAYOUT \
4132 UCHAR CacheLineSize; \
4133 UCHAR LatencyTimer; \
4137 struct _PCI_HEADER_TYPE_0 { \
4138 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4140 USHORT SubVendorID; \
4141 USHORT SubSystemID; \
4142 ULONG ROMBaseAddress; \
4143 UCHAR CapabilitiesPtr; \
4144 UCHAR Reserved1[3]; \
4146 UCHAR InterruptLine; \
4147 UCHAR InterruptPin; \
4148 UCHAR MinimumGrant; \
4149 UCHAR MaximumLatency; \
4151 struct _PCI_HEADER_TYPE_1 { \
4152 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4154 UCHAR SecondaryBus; \
4155 UCHAR SubordinateBus; \
4156 UCHAR SecondaryLatency; \
4159 USHORT SecondaryStatus; \
4160 USHORT MemoryBase; \
4161 USHORT MemoryLimit; \
4162 USHORT PrefetchBase; \
4163 USHORT PrefetchLimit; \
4164 ULONG PrefetchBaseUpper32; \
4165 ULONG PrefetchLimitUpper32; \
4166 USHORT IOBaseUpper16; \
4167 USHORT IOLimitUpper16; \
4168 UCHAR CapabilitiesPtr; \
4169 UCHAR Reserved1[3]; \
4170 ULONG ROMBaseAddress; \
4171 UCHAR InterruptLine; \
4172 UCHAR InterruptPin; \
4173 USHORT BridgeControl; \
4175 struct _PCI_HEADER_TYPE_2 { \
4176 ULONG SocketRegistersBaseAddress; \
4177 UCHAR CapabilitiesPtr; \
4179 USHORT SecondaryStatus; \
4181 UCHAR SecondaryBus; \
4182 UCHAR SubordinateBus; \
4183 UCHAR SecondaryLatency; \
4187 } Range[PCI_TYPE2_ADDRESSES-1]; \
4188 UCHAR InterruptLine; \
4189 UCHAR InterruptPin; \
4190 USHORT BridgeControl; \
4194 typedef enum _CREATE_FILE_TYPE
{
4196 CreateFileTypeNamedPipe
,
4197 CreateFileTypeMailslot
4200 #define IO_FORCE_ACCESS_CHECK 0x001
4201 #define IO_NO_PARAMETER_CHECKING 0x100
4203 #define IO_REPARSE 0x0
4204 #define IO_REMOUNT 0x1
4206 typedef struct _IO_STATUS_BLOCK
{
4207 _ANONYMOUS_UNION
union {
4211 ULONG_PTR Information
;
4212 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4215 typedef struct _IO_STATUS_BLOCK32
{
4218 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4222 (NTAPI
*PIO_APC_ROUTINE
)(
4223 IN PVOID ApcContext
,
4224 IN PIO_STATUS_BLOCK IoStatusBlock
,
4227 #define PIO_APC_ROUTINE_DEFINED
4229 typedef enum _IO_SESSION_EVENT
{
4230 IoSessionEventIgnore
= 0,
4231 IoSessionEventCreated
,
4232 IoSessionEventTerminated
,
4233 IoSessionEventConnected
,
4234 IoSessionEventDisconnected
,
4235 IoSessionEventLogon
,
4236 IoSessionEventLogoff
,
4238 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4240 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4241 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4242 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4243 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4244 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4245 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4246 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4248 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4250 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4252 typedef struct _IO_SESSION_CONNECT_INFO
{
4254 BOOLEAN LocalSession
;
4255 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
4257 #define EVENT_INCREMENT 1
4258 #define IO_NO_INCREMENT 0
4259 #define IO_CD_ROM_INCREMENT 1
4260 #define IO_DISK_INCREMENT 1
4261 #define IO_KEYBOARD_INCREMENT 6
4262 #define IO_MAILSLOT_INCREMENT 2
4263 #define IO_MOUSE_INCREMENT 6
4264 #define IO_NAMED_PIPE_INCREMENT 2
4265 #define IO_NETWORK_INCREMENT 2
4266 #define IO_PARALLEL_INCREMENT 1
4267 #define IO_SERIAL_INCREMENT 2
4268 #define IO_SOUND_INCREMENT 8
4269 #define IO_VIDEO_INCREMENT 1
4270 #define SEMAPHORE_INCREMENT 1
4272 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
4274 typedef struct _BOOTDISK_INFORMATION
{
4275 LONGLONG BootPartitionOffset
;
4276 LONGLONG SystemPartitionOffset
;
4277 ULONG BootDeviceSignature
;
4278 ULONG SystemDeviceSignature
;
4279 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
4281 typedef struct _BOOTDISK_INFORMATION_EX
{
4282 LONGLONG BootPartitionOffset
;
4283 LONGLONG SystemPartitionOffset
;
4284 ULONG BootDeviceSignature
;
4285 ULONG SystemDeviceSignature
;
4286 GUID BootDeviceGuid
;
4287 GUID SystemDeviceGuid
;
4288 BOOLEAN BootDeviceIsGpt
;
4289 BOOLEAN SystemDeviceIsGpt
;
4290 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
4292 #if (NTDDI_VERSION >= NTDDI_WIN7)
4294 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
4295 ULONG PartitionStyle
;
4296 ULONG PartitionNumber
;
4302 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
4304 typedef struct _BOOTDISK_INFORMATION_LITE
{
4305 ULONG NumberEntries
;
4306 LOADER_PARTITION_INFORMATION_EX Entries
[1];
4307 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4311 #if (NTDDI_VERSION >= NTDDI_VISTA)
4312 typedef struct _BOOTDISK_INFORMATION_LITE
{
4313 ULONG BootDeviceSignature
;
4314 ULONG SystemDeviceSignature
;
4315 GUID BootDeviceGuid
;
4316 GUID SystemDeviceGuid
;
4317 BOOLEAN BootDeviceIsGpt
;
4318 BOOLEAN SystemDeviceIsGpt
;
4319 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4320 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4322 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4324 #include <pshpack1.h>
4326 typedef struct _EISA_MEMORY_TYPE
{
4333 UCHAR MoreEntries
:1;
4334 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
4336 typedef struct _EISA_MEMORY_CONFIGURATION
{
4337 EISA_MEMORY_TYPE ConfigurationByte
;
4339 USHORT AddressLowWord
;
4340 UCHAR AddressHighByte
;
4342 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
4344 typedef struct _EISA_IRQ_DESCRIPTOR
{
4347 UCHAR LevelTriggered
:1;
4349 UCHAR MoreEntries
:1;
4350 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
4352 typedef struct _EISA_IRQ_CONFIGURATION
{
4353 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
4355 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
4357 typedef struct _DMA_CONFIGURATION_BYTE0
{
4361 UCHAR MoreEntries
:1;
4362 } DMA_CONFIGURATION_BYTE0
;
4364 typedef struct _DMA_CONFIGURATION_BYTE1
{
4366 UCHAR TransferSize
:2;
4369 } DMA_CONFIGURATION_BYTE1
;
4371 typedef struct _EISA_DMA_CONFIGURATION
{
4372 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
4373 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
4374 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
4376 typedef struct _EISA_PORT_DESCRIPTOR
{
4377 UCHAR NumberPorts
:5;
4380 UCHAR MoreEntries
:1;
4381 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
4383 typedef struct _EISA_PORT_CONFIGURATION
{
4384 EISA_PORT_DESCRIPTOR Configuration
;
4386 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
4388 typedef struct _CM_EISA_SLOT_INFORMATION
{
4391 UCHAR MajorRevision
;
4392 UCHAR MinorRevision
;
4394 UCHAR NumberFunctions
;
4395 UCHAR FunctionInformation
;
4397 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
4399 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
4403 UCHAR MinorRevision
;
4404 UCHAR MajorRevision
;
4405 UCHAR Selections
[26];
4406 UCHAR FunctionFlags
;
4407 UCHAR TypeString
[80];
4408 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
4409 EISA_IRQ_CONFIGURATION EisaIrq
[7];
4410 EISA_DMA_CONFIGURATION EisaDma
[4];
4411 EISA_PORT_CONFIGURATION EisaPort
[20];
4412 UCHAR InitializationData
[60];
4413 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
4415 #include <poppack.h>
4417 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
4419 #define EISA_FUNCTION_ENABLED 0x80
4420 #define EISA_FREE_FORM_DATA 0x40
4421 #define EISA_HAS_PORT_INIT_ENTRY 0x20
4422 #define EISA_HAS_PORT_RANGE 0x10
4423 #define EISA_HAS_DMA_ENTRY 0x08
4424 #define EISA_HAS_IRQ_ENTRY 0x04
4425 #define EISA_HAS_MEMORY_ENTRY 0x02
4426 #define EISA_HAS_TYPE_ENTRY 0x01
4427 #define EISA_HAS_INFORMATION \
4428 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
4429 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
4431 #define EISA_MORE_ENTRIES 0x80
4432 #define EISA_SYSTEM_MEMORY 0x00
4433 #define EISA_MEMORY_TYPE_RAM 0x01
4435 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
4437 #define EISA_INVALID_SLOT 0x80
4438 #define EISA_INVALID_FUNCTION 0x81
4439 #define EISA_INVALID_CONFIGURATION 0x82
4440 #define EISA_EMPTY_SLOT 0x83
4441 #define EISA_INVALID_BIOS_CALL 0x86
4444 ** Plug and Play structures
4448 (NTAPI
*PINTERFACE_REFERENCE
)(
4452 (NTAPI
*PINTERFACE_DEREFERENCE
)(
4456 (NTAPI TRANSLATE_BUS_ADDRESS
)(
4458 IN PHYSICAL_ADDRESS BusAddress
,
4460 IN OUT PULONG AddressSpace
,
4461 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4462 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
4464 typedef struct _DMA_ADAPTER
*
4465 (NTAPI GET_DMA_ADAPTER
)(
4467 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
4468 OUT PULONG NumberOfMapRegisters
);
4469 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
4472 (NTAPI GET_SET_DEVICE_DATA
)(
4478 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
4480 typedef enum _DEVICE_INSTALL_STATE
{
4481 InstallStateInstalled
,
4482 InstallStateNeedsReinstall
,
4483 InstallStateFailedInstall
,
4484 InstallStateFinishInstall
4485 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
4487 typedef struct _LEGACY_BUS_INFORMATION
{
4489 INTERFACE_TYPE LegacyBusType
;
4491 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
4493 typedef enum _DEVICE_REMOVAL_POLICY
{
4494 RemovalPolicyExpectNoRemoval
= 1,
4495 RemovalPolicyExpectOrderlyRemoval
= 2,
4496 RemovalPolicyExpectSurpriseRemoval
= 3
4497 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
4500 (NTAPI
*PREENUMERATE_SELF
)(
4503 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
4507 PINTERFACE_REFERENCE InterfaceReference
;
4508 PINTERFACE_DEREFERENCE InterfaceDereference
;
4509 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
4510 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
4513 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
4515 IN OUT PVOID Context OPTIONAL
);
4517 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
4519 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
4520 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
4521 #define PCI_USE_REVISION 0x00000002
4522 #define PCI_USE_VENDEV_IDS 0x00000004
4523 #define PCI_USE_CLASS_SUBCLASS 0x00000008
4524 #define PCI_USE_PROGIF 0x00000010
4525 #define PCI_USE_LOCAL_BUS 0x00000020
4526 #define PCI_USE_LOCAL_DEVICE 0x00000040
4528 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
4539 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
4542 (NTAPI PCI_IS_DEVICE_PRESENT
)(
4545 IN UCHAR RevisionID
,
4546 IN USHORT SubVendorID
,
4547 IN USHORT SubSystemID
,
4549 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
4552 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
4554 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
4555 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
4557 typedef struct _BUS_INTERFACE_STANDARD
{
4561 PINTERFACE_REFERENCE InterfaceReference
;
4562 PINTERFACE_DEREFERENCE InterfaceDereference
;
4563 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
4564 PGET_DMA_ADAPTER GetDmaAdapter
;
4565 PGET_SET_DEVICE_DATA SetBusData
;
4566 PGET_SET_DEVICE_DATA GetBusData
;
4567 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
4569 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
4573 PINTERFACE_REFERENCE InterfaceReference
;
4574 PINTERFACE_DEREFERENCE InterfaceDereference
;
4575 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
4576 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
4577 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
4579 typedef struct _DEVICE_CAPABILITIES
{
4584 ULONG LockSupported
:1;
4585 ULONG EjectSupported
:1;
4589 ULONG SilentInstall
:1;
4590 ULONG RawDeviceOK
:1;
4591 ULONG SurpriseRemovalOK
:1;
4596 ULONG HardwareDisabled
:1;
4598 ULONG WarmEjectSupported
:1;
4599 ULONG NoDisplayInUI
:1;
4603 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
4604 SYSTEM_POWER_STATE SystemWake
;
4605 DEVICE_POWER_STATE DeviceWake
;
4609 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
4611 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
4615 GUID InterfaceClassGuid
;
4616 PUNICODE_STRING SymbolicLinkName
;
4617 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
4619 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
4623 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
4627 typedef struct _INTERFACE
{
4631 PINTERFACE_REFERENCE InterfaceReference
;
4632 PINTERFACE_DEREFERENCE InterfaceDereference
;
4633 } INTERFACE
, *PINTERFACE
;
4635 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
4639 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
4641 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
4643 /* PNP_DEVICE_STATE */
4645 #define PNP_DEVICE_DISABLED 0x00000001
4646 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
4647 #define PNP_DEVICE_FAILED 0x00000004
4648 #define PNP_DEVICE_REMOVED 0x00000008
4649 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
4650 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
4652 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
4656 struct _FILE_OBJECT
*FileObject
;
4657 LONG NameBufferOffset
;
4658 UCHAR CustomDataBuffer
[1];
4659 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
4661 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
4665 struct _FILE_OBJECT
*FileObject
;
4666 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
4668 #if (NTDDI_VERSION >= NTDDI_VISTA)
4669 #include <devpropdef.h>
4670 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
4673 #define PNP_REPLACE_NO_MAP MAXLONGLONG
4676 (NTAPI
*PREPLACE_MAP_MEMORY
)(
4677 IN PHYSICAL_ADDRESS TargetPhysicalAddress
,
4678 IN PHYSICAL_ADDRESS SparePhysicalAddress
,
4679 IN OUT PLARGE_INTEGER NumberOfBytes
,
4680 OUT PVOID
*TargetAddress
,
4681 OUT PVOID
*SpareAddress
);
4683 typedef struct _PNP_REPLACE_MEMORY_LIST
{
4684 ULONG AllocatedCount
;
4686 ULONGLONG TotalLength
;
4688 PHYSICAL_ADDRESS Address
;
4690 } Ranges
[ANYSIZE_ARRAY
];
4691 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
4693 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
4694 PKAFFINITY Affinity
;
4696 ULONG AllocatedCount
;
4698 ULONG ApicIds
[ANYSIZE_ARRAY
];
4699 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
4701 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
4702 KAFFINITY AffinityMask
;
4703 ULONG AllocatedCount
;
4705 ULONG ApicIds
[ANYSIZE_ARRAY
];
4706 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
4708 #define PNP_REPLACE_PARAMETERS_VERSION 2
4710 typedef struct _PNP_REPLACE_PARAMETERS
{
4715 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
4716 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
4717 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
4718 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
4719 PREPLACE_MAP_MEMORY MapMemory
;
4720 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
4723 (NTAPI
*PREPLACE_UNLOAD
)(
4727 (NTAPI
*PREPLACE_BEGIN
)(
4728 IN PPNP_REPLACE_PARAMETERS Parameters
,
4729 OUT PVOID
*Context
);
4732 (NTAPI
*PREPLACE_END
)(
4736 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
4738 IN PHYSICAL_ADDRESS PhysicalAddress
,
4739 IN LARGE_INTEGER ByteCount
);
4742 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
4748 (NTAPI
*PREPLACE_SWAP
)(
4752 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
4756 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
4760 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
4762 IN PHYSICAL_ADDRESS SourceAddress
,
4763 OUT PPHYSICAL_ADDRESS DestinationAddress
);
4766 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
4770 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
4771 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
4772 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
4774 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
4775 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
4776 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
4777 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
4778 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
4780 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
4784 PREPLACE_UNLOAD Unload
;
4785 PREPLACE_BEGIN BeginReplace
;
4786 PREPLACE_END EndReplace
;
4787 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
4788 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
4790 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
4791 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
4792 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
4793 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
4794 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
4797 (NTAPI
*PREPLACE_DRIVER_INIT
)(
4798 IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface
,
4801 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
4802 DeviceUsageTypeUndefined
,
4803 DeviceUsageTypePaging
,
4804 DeviceUsageTypeHibernation
,
4805 DeviceUsageTypeDumpFile
4806 } DEVICE_USAGE_NOTIFICATION_TYPE
;
4808 typedef struct _POWER_SEQUENCE
{
4812 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
4815 DevicePropertyDeviceDescription
= 0x0,
4816 DevicePropertyHardwareID
= 0x1,
4817 DevicePropertyCompatibleIDs
= 0x2,
4818 DevicePropertyBootConfiguration
= 0x3,
4819 DevicePropertyBootConfigurationTranslated
= 0x4,
4820 DevicePropertyClassName
= 0x5,
4821 DevicePropertyClassGuid
= 0x6,
4822 DevicePropertyDriverKeyName
= 0x7,
4823 DevicePropertyManufacturer
= 0x8,
4824 DevicePropertyFriendlyName
= 0x9,
4825 DevicePropertyLocationInformation
= 0xa,
4826 DevicePropertyPhysicalDeviceObjectName
= 0xb,
4827 DevicePropertyBusTypeGuid
= 0xc,
4828 DevicePropertyLegacyBusType
= 0xd,
4829 DevicePropertyBusNumber
= 0xe,
4830 DevicePropertyEnumeratorName
= 0xf,
4831 DevicePropertyAddress
= 0x10,
4832 DevicePropertyUINumber
= 0x11,
4833 DevicePropertyInstallState
= 0x12,
4834 DevicePropertyRemovalPolicy
= 0x13,
4835 DevicePropertyResourceRequirements
= 0x14,
4836 DevicePropertyAllocatedResources
= 0x15,
4837 DevicePropertyContainerID
= 0x16
4838 } DEVICE_REGISTRY_PROPERTY
;
4840 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
4841 EventCategoryReserved
,
4842 EventCategoryHardwareProfileChange
,
4843 EventCategoryDeviceInterfaceChange
,
4844 EventCategoryTargetDeviceChange
4845 } IO_NOTIFICATION_EVENT_CATEGORY
;
4847 typedef enum _IO_PRIORITY_HINT
{
4848 IoPriorityVeryLow
= 0,
4856 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
4859 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
4860 IN PVOID NotificationStructure
,
4862 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
4865 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
4867 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
4869 typedef enum _FILE_INFORMATION_CLASS
{
4870 FileDirectoryInformation
= 1,
4871 FileFullDirectoryInformation
,
4872 FileBothDirectoryInformation
,
4873 FileBasicInformation
,
4874 FileStandardInformation
,
4875 FileInternalInformation
,
4877 FileAccessInformation
,
4878 FileNameInformation
,
4879 FileRenameInformation
,
4880 FileLinkInformation
,
4881 FileNamesInformation
,
4882 FileDispositionInformation
,
4883 FilePositionInformation
,
4884 FileFullEaInformation
,
4885 FileModeInformation
,
4886 FileAlignmentInformation
,
4888 FileAllocationInformation
,
4889 FileEndOfFileInformation
,
4890 FileAlternateNameInformation
,
4891 FileStreamInformation
,
4892 FilePipeInformation
,
4893 FilePipeLocalInformation
,
4894 FilePipeRemoteInformation
,
4895 FileMailslotQueryInformation
,
4896 FileMailslotSetInformation
,
4897 FileCompressionInformation
,
4898 FileObjectIdInformation
,
4899 FileCompletionInformation
,
4900 FileMoveClusterInformation
,
4901 FileQuotaInformation
,
4902 FileReparsePointInformation
,
4903 FileNetworkOpenInformation
,
4904 FileAttributeTagInformation
,
4905 FileTrackingInformation
,
4906 FileIdBothDirectoryInformation
,
4907 FileIdFullDirectoryInformation
,
4908 FileValidDataLengthInformation
,
4909 FileShortNameInformation
,
4910 FileIoCompletionNotificationInformation
,
4911 FileIoStatusBlockRangeInformation
,
4912 FileIoPriorityHintInformation
,
4913 FileSfioReserveInformation
,
4914 FileSfioVolumeInformation
,
4915 FileHardLinkInformation
,
4916 FileProcessIdsUsingFileInformation
,
4917 FileNormalizedNameInformation
,
4918 FileNetworkPhysicalNameInformation
,
4919 FileIdGlobalTxDirectoryInformation
,
4920 FileIsRemoteDeviceInformation
,
4921 FileAttributeCacheInformation
,
4922 FileNumaNodeInformation
,
4923 FileStandardLinkInformation
,
4924 FileRemoteProtocolInformation
,
4925 FileMaximumInformation
4926 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
4928 typedef struct _FILE_POSITION_INFORMATION
{
4929 LARGE_INTEGER CurrentByteOffset
;
4930 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
4932 typedef struct _FILE_BASIC_INFORMATION
{
4933 LARGE_INTEGER CreationTime
;
4934 LARGE_INTEGER LastAccessTime
;
4935 LARGE_INTEGER LastWriteTime
;
4936 LARGE_INTEGER ChangeTime
;
4937 ULONG FileAttributes
;
4938 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
4940 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
4941 IO_PRIORITY_HINT PriorityHint
;
4942 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
4944 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
4946 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
4948 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
4949 PUCHAR IoStatusBlockRange
;
4951 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
4953 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
4955 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
4957 typedef struct _FILE_NUMA_NODE_INFORMATION
{
4959 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
4961 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
4962 ULONG NumberOfProcessIdsInList
;
4963 ULONG_PTR ProcessIdList
[1];
4964 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
4966 typedef struct _FILE_STANDARD_INFORMATION
{
4967 LARGE_INTEGER AllocationSize
;
4968 LARGE_INTEGER EndOfFile
;
4969 ULONG NumberOfLinks
;
4970 BOOLEAN DeletePending
;
4972 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
4974 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
4975 LARGE_INTEGER CreationTime
;
4976 LARGE_INTEGER LastAccessTime
;
4977 LARGE_INTEGER LastWriteTime
;
4978 LARGE_INTEGER ChangeTime
;
4979 LARGE_INTEGER AllocationSize
;
4980 LARGE_INTEGER EndOfFile
;
4981 ULONG FileAttributes
;
4982 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
4984 typedef enum _FSINFOCLASS
{
4985 FileFsVolumeInformation
= 1,
4986 FileFsLabelInformation
,
4987 FileFsSizeInformation
,
4988 FileFsDeviceInformation
,
4989 FileFsAttributeInformation
,
4990 FileFsControlInformation
,
4991 FileFsFullSizeInformation
,
4992 FileFsObjectIdInformation
,
4993 FileFsDriverPathInformation
,
4994 FileFsVolumeFlagsInformation
,
4995 FileFsMaximumInformation
4996 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
4998 typedef struct _FILE_FS_DEVICE_INFORMATION
{
4999 DEVICE_TYPE DeviceType
;
5000 ULONG Characteristics
;
5001 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5003 typedef struct _FILE_FULL_EA_INFORMATION
{
5004 ULONG NextEntryOffset
;
5007 USHORT EaValueLength
;
5009 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5011 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5012 ULONG RequestsPerPeriod
;
5014 BOOLEAN RetryFailures
;
5015 BOOLEAN Discardable
;
5017 ULONG NumOutstandingRequests
;
5018 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5020 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5021 ULONG MaximumRequestsPerPeriod
;
5022 ULONG MinimumPeriod
;
5023 ULONG MinimumTransferSize
;
5024 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5026 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5027 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5028 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5030 #define FM_LOCK_BIT (0x1)
5031 #define FM_LOCK_BIT_V (0x0)
5032 #define FM_LOCK_WAITER_WOKEN (0x2)
5033 #define FM_LOCK_WAITER_INC (0x4)
5036 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5037 IN
struct _FILE_OBJECT
*FileObject
,
5038 IN PLARGE_INTEGER FileOffset
,
5042 IN BOOLEAN CheckForReadOperation
,
5043 OUT PIO_STATUS_BLOCK IoStatus
,
5044 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5045 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5048 (NTAPI FAST_IO_READ
)(
5049 IN
struct _FILE_OBJECT
*FileObject
,
5050 IN PLARGE_INTEGER FileOffset
,
5055 OUT PIO_STATUS_BLOCK IoStatus
,
5056 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5057 typedef FAST_IO_READ
*PFAST_IO_READ
;
5060 (NTAPI FAST_IO_WRITE
)(
5061 IN
struct _FILE_OBJECT
*FileObject
,
5062 IN PLARGE_INTEGER FileOffset
,
5067 OUT PIO_STATUS_BLOCK IoStatus
,
5068 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5069 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5072 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5073 IN
struct _FILE_OBJECT
*FileObject
,
5075 OUT PFILE_BASIC_INFORMATION Buffer
,
5076 OUT PIO_STATUS_BLOCK IoStatus
,
5077 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5078 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5081 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5082 IN
struct _FILE_OBJECT
*FileObject
,
5084 OUT PFILE_STANDARD_INFORMATION Buffer
,
5085 OUT PIO_STATUS_BLOCK IoStatus
,
5086 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5087 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5090 (NTAPI FAST_IO_LOCK
)(
5091 IN
struct _FILE_OBJECT
*FileObject
,
5092 IN PLARGE_INTEGER FileOffset
,
5093 IN PLARGE_INTEGER Length
,
5094 PEPROCESS ProcessId
,
5096 BOOLEAN FailImmediately
,
5097 BOOLEAN ExclusiveLock
,
5098 OUT PIO_STATUS_BLOCK IoStatus
,
5099 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5100 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5103 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5104 IN
struct _FILE_OBJECT
*FileObject
,
5105 IN PLARGE_INTEGER FileOffset
,
5106 IN PLARGE_INTEGER Length
,
5107 PEPROCESS ProcessId
,
5109 OUT PIO_STATUS_BLOCK IoStatus
,
5110 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5111 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5114 (NTAPI FAST_IO_UNLOCK_ALL
)(
5115 IN
struct _FILE_OBJECT
*FileObject
,
5116 PEPROCESS ProcessId
,
5117 OUT PIO_STATUS_BLOCK IoStatus
,
5118 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5119 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5122 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5123 IN
struct _FILE_OBJECT
*FileObject
,
5126 OUT PIO_STATUS_BLOCK IoStatus
,
5127 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5128 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5131 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5132 IN
struct _FILE_OBJECT
*FileObject
,
5134 IN PVOID InputBuffer OPTIONAL
,
5135 IN ULONG InputBufferLength
,
5136 OUT PVOID OutputBuffer OPTIONAL
,
5137 IN ULONG OutputBufferLength
,
5138 IN ULONG IoControlCode
,
5139 OUT PIO_STATUS_BLOCK IoStatus
,
5140 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5141 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5144 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5145 IN
struct _FILE_OBJECT
*FileObject
);
5146 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5149 (NTAPI FAST_IO_RELEASE_FILE
)(
5150 IN
struct _FILE_OBJECT
*FileObject
);
5151 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5154 (NTAPI FAST_IO_DETACH_DEVICE
)(
5155 IN
struct _DEVICE_OBJECT
*SourceDevice
,
5156 IN
struct _DEVICE_OBJECT
*TargetDevice
);
5157 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5160 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5161 IN
struct _FILE_OBJECT
*FileObject
,
5163 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5164 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
5165 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5166 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5169 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5170 IN
struct _FILE_OBJECT
*FileObject
,
5171 IN PLARGE_INTEGER EndingOffset
,
5172 OUT
struct _ERESOURCE
**ResourceToRelease
,
5173 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5174 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5177 (NTAPI FAST_IO_MDL_READ
)(
5178 IN
struct _FILE_OBJECT
*FileObject
,
5179 IN PLARGE_INTEGER FileOffset
,
5183 OUT PIO_STATUS_BLOCK IoStatus
,
5184 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5185 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
5188 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
5189 IN
struct _FILE_OBJECT
*FileObject
,
5191 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5192 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
5195 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
5196 IN
struct _FILE_OBJECT
*FileObject
,
5197 IN PLARGE_INTEGER FileOffset
,
5201 OUT PIO_STATUS_BLOCK IoStatus
,
5202 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5203 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
5206 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
5207 IN
struct _FILE_OBJECT
*FileObject
,
5208 IN PLARGE_INTEGER FileOffset
,
5210 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5211 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
5214 (NTAPI FAST_IO_READ_COMPRESSED
)(
5215 IN
struct _FILE_OBJECT
*FileObject
,
5216 IN PLARGE_INTEGER FileOffset
,
5221 OUT PIO_STATUS_BLOCK IoStatus
,
5222 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5223 IN ULONG CompressedDataInfoLength
,
5224 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5225 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
5228 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
5229 IN
struct _FILE_OBJECT
*FileObject
,
5230 IN PLARGE_INTEGER FileOffset
,
5235 OUT PIO_STATUS_BLOCK IoStatus
,
5236 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5237 IN ULONG CompressedDataInfoLength
,
5238 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5239 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
5242 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
5243 IN
struct _FILE_OBJECT
*FileObject
,
5245 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5246 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
5249 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
5250 IN
struct _FILE_OBJECT
*FileObject
,
5251 IN PLARGE_INTEGER FileOffset
,
5253 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5254 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
5257 (NTAPI FAST_IO_QUERY_OPEN
)(
5258 IN
struct _IRP
*Irp
,
5259 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
5260 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5261 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
5264 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
5265 IN
struct _FILE_OBJECT
*FileObject
,
5266 IN
struct _ERESOURCE
*ResourceToRelease
,
5267 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5268 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
5271 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
5272 IN
struct _FILE_OBJECT
*FileObject
,
5273 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5274 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
5277 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
5278 IN
struct _FILE_OBJECT
*FileObject
,
5279 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5280 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
5282 typedef struct _FAST_IO_DISPATCH
{
5283 ULONG SizeOfFastIoDispatch
;
5284 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
5285 PFAST_IO_READ FastIoRead
;
5286 PFAST_IO_WRITE FastIoWrite
;
5287 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
5288 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
5289 PFAST_IO_LOCK FastIoLock
;
5290 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
5291 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
5292 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
5293 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
5294 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
5295 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
5296 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
5297 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
5298 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
5299 PFAST_IO_MDL_READ MdlRead
;
5300 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
5301 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
5302 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
5303 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
5304 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
5305 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
5306 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
5307 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
5308 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
5309 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
5310 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
5311 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
5313 typedef struct _SECTION_OBJECT_POINTERS
{
5314 PVOID DataSectionObject
;
5315 PVOID SharedCacheMap
;
5316 PVOID ImageSectionObject
;
5317 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
5319 typedef struct _IO_COMPLETION_CONTEXT
{
5322 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
5324 /* FILE_OBJECT.Flags */
5325 #define FO_FILE_OPEN 0x00000001
5326 #define FO_SYNCHRONOUS_IO 0x00000002
5327 #define FO_ALERTABLE_IO 0x00000004
5328 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
5329 #define FO_WRITE_THROUGH 0x00000010
5330 #define FO_SEQUENTIAL_ONLY 0x00000020
5331 #define FO_CACHE_SUPPORTED 0x00000040
5332 #define FO_NAMED_PIPE 0x00000080
5333 #define FO_STREAM_FILE 0x00000100
5334 #define FO_MAILSLOT 0x00000200
5335 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
5336 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
5337 #define FO_DIRECT_DEVICE_OPEN 0x00000800
5338 #define FO_FILE_MODIFIED 0x00001000
5339 #define FO_FILE_SIZE_CHANGED 0x00002000
5340 #define FO_CLEANUP_COMPLETE 0x00004000
5341 #define FO_TEMPORARY_FILE 0x00008000
5342 #define FO_DELETE_ON_CLOSE 0x00010000
5343 #define FO_OPENED_CASE_SENSITIVE 0x00020000
5344 #define FO_HANDLE_CREATED 0x00040000
5345 #define FO_FILE_FAST_IO_READ 0x00080000
5346 #define FO_RANDOM_ACCESS 0x00100000
5347 #define FO_FILE_OPEN_CANCELLED 0x00200000
5348 #define FO_VOLUME_OPEN 0x00400000
5349 #define FO_REMOTE_ORIGIN 0x01000000
5350 #define FO_DISALLOW_EXCLUSIVE 0x02000000
5351 #define FO_SKIP_COMPLETION_PORT 0x02000000
5352 #define FO_SKIP_SET_EVENT 0x04000000
5353 #define FO_SKIP_SET_FAST_IO 0x08000000
5354 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
5357 #define VPB_MOUNTED 0x0001
5358 #define VPB_LOCKED 0x0002
5359 #define VPB_PERSISTENT 0x0004
5360 #define VPB_REMOVE_PENDING 0x0008
5361 #define VPB_RAW_MOUNT 0x0010
5362 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
5366 #define SL_FORCE_ACCESS_CHECK 0x01
5367 #define SL_OPEN_PAGING_FILE 0x02
5368 #define SL_OPEN_TARGET_DIRECTORY 0x04
5369 #define SL_STOP_ON_SYMLINK 0x08
5370 #define SL_CASE_SENSITIVE 0x80
5372 #define SL_KEY_SPECIFIED 0x01
5373 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
5374 #define SL_WRITE_THROUGH 0x04
5375 #define SL_FT_SEQUENTIAL_WRITE 0x08
5376 #define SL_FORCE_DIRECT_WRITE 0x10
5377 #define SL_REALTIME_STREAM 0x20
5379 #define SL_READ_ACCESS_GRANTED 0x01
5380 #define SL_WRITE_ACCESS_GRANTED 0x04
5382 #define SL_FAIL_IMMEDIATELY 0x01
5383 #define SL_EXCLUSIVE_LOCK 0x02
5385 #define SL_RESTART_SCAN 0x01
5386 #define SL_RETURN_SINGLE_ENTRY 0x02
5387 #define SL_INDEX_SPECIFIED 0x04
5389 #define SL_WATCH_TREE 0x01
5391 #define SL_ALLOW_RAW_MOUNT 0x01
5393 #define CTL_CODE(DeviceType, Function, Method, Access) \
5394 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
5396 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
5398 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
5400 #define IRP_NOCACHE 0x00000001
5401 #define IRP_PAGING_IO 0x00000002
5402 #define IRP_MOUNT_COMPLETION 0x00000002
5403 #define IRP_SYNCHRONOUS_API 0x00000004
5404 #define IRP_ASSOCIATED_IRP 0x00000008
5405 #define IRP_BUFFERED_IO 0x00000010
5406 #define IRP_DEALLOCATE_BUFFER 0x00000020
5407 #define IRP_INPUT_OPERATION 0x00000040
5408 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
5409 #define IRP_CREATE_OPERATION 0x00000080
5410 #define IRP_READ_OPERATION 0x00000100
5411 #define IRP_WRITE_OPERATION 0x00000200
5412 #define IRP_CLOSE_OPERATION 0x00000400
5413 #define IRP_DEFER_IO_COMPLETION 0x00000800
5414 #define IRP_OB_QUERY_NAME 0x00001000
5415 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
5417 #define IRP_QUOTA_CHARGED 0x01
5418 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
5419 #define IRP_ALLOCATED_FIXED_SIZE 0x04
5420 #define IRP_LOOKASIDE_ALLOCATION 0x08
5423 ** IRP function codes
5426 #define IRP_MJ_CREATE 0x00
5427 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
5428 #define IRP_MJ_CLOSE 0x02
5429 #define IRP_MJ_READ 0x03
5430 #define IRP_MJ_WRITE 0x04
5431 #define IRP_MJ_QUERY_INFORMATION 0x05
5432 #define IRP_MJ_SET_INFORMATION 0x06
5433 #define IRP_MJ_QUERY_EA 0x07
5434 #define IRP_MJ_SET_EA 0x08
5435 #define IRP_MJ_FLUSH_BUFFERS 0x09
5436 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
5437 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
5438 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
5439 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
5440 #define IRP_MJ_DEVICE_CONTROL 0x0e
5441 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
5442 #define IRP_MJ_SCSI 0x0f
5443 #define IRP_MJ_SHUTDOWN 0x10
5444 #define IRP_MJ_LOCK_CONTROL 0x11
5445 #define IRP_MJ_CLEANUP 0x12
5446 #define IRP_MJ_CREATE_MAILSLOT 0x13
5447 #define IRP_MJ_QUERY_SECURITY 0x14
5448 #define IRP_MJ_SET_SECURITY 0x15
5449 #define IRP_MJ_POWER 0x16
5450 #define IRP_MJ_SYSTEM_CONTROL 0x17
5451 #define IRP_MJ_DEVICE_CHANGE 0x18
5452 #define IRP_MJ_QUERY_QUOTA 0x19
5453 #define IRP_MJ_SET_QUOTA 0x1a
5454 #define IRP_MJ_PNP 0x1b
5455 #define IRP_MJ_PNP_POWER 0x1b
5456 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
5458 #define IRP_MN_SCSI_CLASS 0x01
5460 #define IRP_MN_START_DEVICE 0x00
5461 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
5462 #define IRP_MN_REMOVE_DEVICE 0x02
5463 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
5464 #define IRP_MN_STOP_DEVICE 0x04
5465 #define IRP_MN_QUERY_STOP_DEVICE 0x05
5466 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
5468 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
5469 #define IRP_MN_QUERY_INTERFACE 0x08
5470 #define IRP_MN_QUERY_CAPABILITIES 0x09
5471 #define IRP_MN_QUERY_RESOURCES 0x0A
5472 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
5473 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
5474 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
5476 #define IRP_MN_READ_CONFIG 0x0F
5477 #define IRP_MN_WRITE_CONFIG 0x10
5478 #define IRP_MN_EJECT 0x11
5479 #define IRP_MN_SET_LOCK 0x12
5480 #define IRP_MN_QUERY_ID 0x13
5481 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
5482 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
5483 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
5484 #define IRP_MN_SURPRISE_REMOVAL 0x17
5485 #if (NTDDI_VERSION >= NTDDI_WIN7)
5486 #define IRP_MN_DEVICE_ENUMERATED 0x19
5489 #define IRP_MN_WAIT_WAKE 0x00
5490 #define IRP_MN_POWER_SEQUENCE 0x01
5491 #define IRP_MN_SET_POWER 0x02
5492 #define IRP_MN_QUERY_POWER 0x03
5494 #define IRP_MN_QUERY_ALL_DATA 0x00
5495 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
5496 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
5497 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
5498 #define IRP_MN_ENABLE_EVENTS 0x04
5499 #define IRP_MN_DISABLE_EVENTS 0x05
5500 #define IRP_MN_ENABLE_COLLECTION 0x06
5501 #define IRP_MN_DISABLE_COLLECTION 0x07
5502 #define IRP_MN_REGINFO 0x08
5503 #define IRP_MN_EXECUTE_METHOD 0x09
5505 #define IRP_MN_REGINFO_EX 0x0b
5507 typedef struct _FILE_OBJECT
{
5510 PDEVICE_OBJECT DeviceObject
;
5514 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
5515 PVOID PrivateCacheMap
;
5516 NTSTATUS FinalStatus
;
5517 struct _FILE_OBJECT
*RelatedFileObject
;
5518 BOOLEAN LockOperation
;
5519 BOOLEAN DeletePending
;
5521 BOOLEAN WriteAccess
;
5522 BOOLEAN DeleteAccess
;
5524 BOOLEAN SharedWrite
;
5525 BOOLEAN SharedDelete
;
5527 UNICODE_STRING FileName
;
5528 LARGE_INTEGER CurrentByteOffset
;
5529 volatile ULONG Waiters
;
5530 volatile ULONG Busy
;
5534 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
5535 KSPIN_LOCK IrpListLock
;
5537 volatile PVOID FileObjectExtension
;
5538 } FILE_OBJECT
, *PFILE_OBJECT
;
5540 typedef struct _IO_ERROR_LOG_PACKET
{
5541 UCHAR MajorFunctionCode
;
5543 USHORT DumpDataSize
;
5544 USHORT NumberOfStrings
;
5545 USHORT StringOffset
;
5546 USHORT EventCategory
;
5548 ULONG UniqueErrorValue
;
5549 NTSTATUS FinalStatus
;
5550 ULONG SequenceNumber
;
5551 ULONG IoControlCode
;
5552 LARGE_INTEGER DeviceOffset
;
5554 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
5556 typedef struct _IO_ERROR_LOG_MESSAGE
{
5559 USHORT DriverNameLength
;
5560 LARGE_INTEGER TimeStamp
;
5561 ULONG DriverNameOffset
;
5562 IO_ERROR_LOG_PACKET EntryData
;
5563 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
5565 #define ERROR_LOG_LIMIT_SIZE 240
5566 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
5567 sizeof(IO_ERROR_LOG_PACKET) + \
5568 (sizeof(WCHAR) * 40))
5569 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
5570 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5571 #define IO_ERROR_LOG_MESSAGE_LENGTH \
5572 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
5573 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
5574 PORT_MAXIMUM_MESSAGE_LENGTH)
5575 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
5576 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5579 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
5581 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
5584 typedef enum _DMA_WIDTH
{
5589 } DMA_WIDTH
, *PDMA_WIDTH
;
5591 typedef enum _DMA_SPEED
{
5598 } DMA_SPEED
, *PDMA_SPEED
;
5600 /* DEVICE_DESCRIPTION.Version */
5602 #define DEVICE_DESCRIPTION_VERSION 0x0000
5603 #define DEVICE_DESCRIPTION_VERSION1 0x0001
5604 #define DEVICE_DESCRIPTION_VERSION2 0x0002
5606 typedef struct _DEVICE_DESCRIPTION
{
5609 BOOLEAN ScatterGather
;
5611 BOOLEAN AutoInitialize
;
5612 BOOLEAN Dma32BitAddresses
;
5613 BOOLEAN IgnoreCount
;
5615 BOOLEAN Dma64BitAddresses
;
5618 INTERFACE_TYPE InterfaceType
;
5621 ULONG MaximumLength
;
5623 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
5625 typedef enum _DEVICE_RELATION_TYPE
{
5630 TargetDeviceRelation
,
5633 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
5635 typedef struct _DEVICE_RELATIONS
{
5637 PDEVICE_OBJECT Objects
[1];
5638 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
5640 typedef struct _DEVOBJ_EXTENSION
{
5643 PDEVICE_OBJECT DeviceObject
;
5644 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
5646 typedef struct _SCATTER_GATHER_ELEMENT
{
5647 PHYSICAL_ADDRESS Address
;
5650 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
5652 #if defined(_MSC_EXTENSIONS)
5654 #if _MSC_VER >= 1200
5655 #pragma warning(push)
5657 #pragma warning(disable:4200)
5658 typedef struct _SCATTER_GATHER_LIST
{
5659 ULONG NumberOfElements
;
5661 SCATTER_GATHER_ELEMENT Elements
[1];
5662 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5664 #if _MSC_VER >= 1200
5665 #pragma warning(pop)
5667 #pragma warning(default:4200)
5672 struct _SCATTER_GATHER_LIST
;
5673 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5678 (NTAPI DRIVER_ADD_DEVICE
)(
5679 IN
struct _DRIVER_OBJECT
*DriverObject
,
5680 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
5681 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
5683 typedef struct _DRIVER_EXTENSION
{
5684 struct _DRIVER_OBJECT
*DriverObject
;
5685 PDRIVER_ADD_DEVICE AddDevice
;
5687 UNICODE_STRING ServiceKeyName
;
5688 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
5690 #define DRVO_UNLOAD_INVOKED 0x00000001
5691 #define DRVO_LEGACY_DRIVER 0x00000002
5692 #define DRVO_BUILTIN_DRIVER 0x00000004
5695 (NTAPI DRIVER_INITIALIZE
)(
5696 IN
struct _DRIVER_OBJECT
*DriverObject
,
5697 IN PUNICODE_STRING RegistryPath
);
5698 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
5701 (NTAPI DRIVER_STARTIO
)(
5702 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5703 IN
struct _IRP
*Irp
);
5704 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
5707 (NTAPI DRIVER_UNLOAD
)(
5708 IN
struct _DRIVER_OBJECT
*DriverObject
);
5709 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
5712 (NTAPI DRIVER_DISPATCH
)(
5713 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5714 IN
struct _IRP
*Irp
);
5715 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
5717 typedef struct _DRIVER_OBJECT
{
5720 PDEVICE_OBJECT DeviceObject
;
5724 PVOID DriverSection
;
5725 PDRIVER_EXTENSION DriverExtension
;
5726 UNICODE_STRING DriverName
;
5727 PUNICODE_STRING HardwareDatabase
;
5728 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
5729 PDRIVER_INITIALIZE DriverInit
;
5730 PDRIVER_STARTIO DriverStartIo
;
5731 PDRIVER_UNLOAD DriverUnload
;
5732 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
5733 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
5735 typedef struct _DMA_ADAPTER
{
5738 struct _DMA_OPERATIONS
* DmaOperations
;
5739 } DMA_ADAPTER
, *PDMA_ADAPTER
;
5742 (NTAPI
*PPUT_DMA_ADAPTER
)(
5743 IN PDMA_ADAPTER DmaAdapter
);
5746 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
5747 IN PDMA_ADAPTER DmaAdapter
,
5749 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5750 IN BOOLEAN CacheEnabled
);
5753 (NTAPI
*PFREE_COMMON_BUFFER
)(
5754 IN PDMA_ADAPTER DmaAdapter
,
5756 IN PHYSICAL_ADDRESS LogicalAddress
,
5757 IN PVOID VirtualAddress
,
5758 IN BOOLEAN CacheEnabled
);
5761 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
5762 IN PDMA_ADAPTER DmaAdapter
,
5763 IN PDEVICE_OBJECT DeviceObject
,
5764 IN ULONG NumberOfMapRegisters
,
5765 IN PDRIVER_CONTROL ExecutionRoutine
,
5769 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
5770 IN PDMA_ADAPTER DmaAdapter
,
5772 IN PVOID MapRegisterBase
,
5775 IN BOOLEAN WriteToDevice
);
5778 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
5779 IN PDMA_ADAPTER DmaAdapter
);
5782 (NTAPI
*PFREE_MAP_REGISTERS
)(
5783 IN PDMA_ADAPTER DmaAdapter
,
5784 PVOID MapRegisterBase
,
5785 ULONG NumberOfMapRegisters
);
5787 typedef PHYSICAL_ADDRESS
5788 (NTAPI
*PMAP_TRANSFER
)(
5789 IN PDMA_ADAPTER DmaAdapter
,
5791 IN PVOID MapRegisterBase
,
5793 IN OUT PULONG Length
,
5794 IN BOOLEAN WriteToDevice
);
5797 (NTAPI
*PGET_DMA_ALIGNMENT
)(
5798 IN PDMA_ADAPTER DmaAdapter
);
5801 (NTAPI
*PREAD_DMA_COUNTER
)(
5802 IN PDMA_ADAPTER DmaAdapter
);
5805 (NTAPI DRIVER_LIST_CONTROL
)(
5806 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5807 IN
struct _IRP
*Irp
,
5808 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
5810 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
5813 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
5814 IN PDMA_ADAPTER DmaAdapter
,
5815 IN PDEVICE_OBJECT DeviceObject
,
5819 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
5821 IN BOOLEAN WriteToDevice
);
5824 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
5825 IN PDMA_ADAPTER DmaAdapter
,
5826 IN PSCATTER_GATHER_LIST ScatterGather
,
5827 IN BOOLEAN WriteToDevice
);
5830 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
5831 IN PDMA_ADAPTER DmaAdapter
,
5832 IN PMDL Mdl OPTIONAL
,
5835 OUT PULONG ScatterGatherListSize
,
5836 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
5839 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
5840 IN PDMA_ADAPTER DmaAdapter
,
5841 IN PDEVICE_OBJECT DeviceObject
,
5845 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
5847 IN BOOLEAN WriteToDevice
,
5848 IN PVOID ScatterGatherBuffer
,
5849 IN ULONG ScatterGatherLength
);
5852 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
5853 IN PDMA_ADAPTER DmaAdapter
,
5854 IN PSCATTER_GATHER_LIST ScatterGather
,
5855 IN PMDL OriginalMdl
,
5856 OUT PMDL
*TargetMdl
);
5858 typedef struct _DMA_OPERATIONS
{
5860 PPUT_DMA_ADAPTER PutDmaAdapter
;
5861 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
5862 PFREE_COMMON_BUFFER FreeCommonBuffer
;
5863 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
5864 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
5865 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
5866 PFREE_MAP_REGISTERS FreeMapRegisters
;
5867 PMAP_TRANSFER MapTransfer
;
5868 PGET_DMA_ALIGNMENT GetDmaAlignment
;
5869 PREAD_DMA_COUNTER ReadDmaCounter
;
5870 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
5871 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
5872 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
5873 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
5874 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
5875 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
5877 typedef struct _IO_RESOURCE_DESCRIPTOR
{
5880 UCHAR ShareDisposition
;
5888 PHYSICAL_ADDRESS MinimumAddress
;
5889 PHYSICAL_ADDRESS MaximumAddress
;
5894 PHYSICAL_ADDRESS MinimumAddress
;
5895 PHYSICAL_ADDRESS MaximumAddress
;
5898 ULONG MinimumVector
;
5899 ULONG MaximumVector
;
5902 ULONG MinimumChannel
;
5903 ULONG MaximumChannel
;
5908 PHYSICAL_ADDRESS MinimumAddress
;
5909 PHYSICAL_ADDRESS MaximumAddress
;
5926 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
5928 typedef struct _IO_RESOURCE_LIST
{
5932 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
5933 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
5935 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
5937 INTERFACE_TYPE InterfaceType
;
5941 ULONG AlternativeLists
;
5942 IO_RESOURCE_LIST List
[1];
5943 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
5946 (NTAPI DRIVER_CANCEL
)(
5947 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5948 IN
struct _IRP
*Irp
);
5949 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
5951 typedef struct _IRP
{
5954 struct _MDL
*MdlAddress
;
5957 struct _IRP
*MasterIrp
;
5958 volatile LONG IrpCount
;
5961 LIST_ENTRY ThreadListEntry
;
5962 IO_STATUS_BLOCK IoStatus
;
5963 KPROCESSOR_MODE RequestorMode
;
5964 BOOLEAN PendingReturned
;
5966 CHAR CurrentLocation
;
5969 CCHAR ApcEnvironment
;
5970 UCHAR AllocationFlags
;
5971 PIO_STATUS_BLOCK UserIosb
;
5975 _ANONYMOUS_UNION
union {
5976 PIO_APC_ROUTINE UserApcRoutine
;
5977 PVOID IssuingProcess
;
5979 PVOID UserApcContext
;
5980 } AsynchronousParameters
;
5981 LARGE_INTEGER AllocationSize
;
5983 volatile PDRIVER_CANCEL CancelRoutine
;
5987 _ANONYMOUS_UNION
union {
5988 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
5989 _ANONYMOUS_STRUCT
struct {
5990 PVOID DriverContext
[4];
5994 PCHAR AuxiliaryBuffer
;
5995 _ANONYMOUS_STRUCT
struct {
5996 LIST_ENTRY ListEntry
;
5997 _ANONYMOUS_UNION
union {
5998 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6002 struct _FILE_OBJECT
*OriginalFileObject
;
6005 PVOID CompletionKey
;
6009 typedef enum _IO_PAGING_PRIORITY
{
6010 IoPagingPriorityInvalid
,
6011 IoPagingPriorityNormal
,
6012 IoPagingPriorityHigh
,
6013 IoPagingPriorityReserved1
,
6014 IoPagingPriorityReserved2
6015 } IO_PAGING_PRIORITY
;
6018 (NTAPI IO_COMPLETION_ROUTINE
)(
6019 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6020 IN
struct _IRP
*Irp
,
6022 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6025 (NTAPI IO_DPC_ROUTINE
)(
6026 IN
struct _KDPC
*Dpc
,
6027 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6028 IN
struct _IRP
*Irp
,
6030 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6033 (NTAPI
*PMM_DLL_INITIALIZE
)(
6034 IN PUNICODE_STRING RegistryPath
);
6037 (NTAPI
*PMM_DLL_UNLOAD
)(
6041 (NTAPI IO_TIMER_ROUTINE
)(
6042 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6044 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6046 typedef struct _IO_SECURITY_CONTEXT
{
6047 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6048 PACCESS_STATE AccessState
;
6049 ACCESS_MASK DesiredAccess
;
6050 ULONG FullCreateOptions
;
6051 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6055 typedef struct _IO_CSQ_IRP_CONTEXT
{
6058 struct _IO_CSQ
*Csq
;
6059 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6062 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6063 IN
struct _IO_CSQ
*Csq
,
6067 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6068 IN
struct _IO_CSQ
*Csq
,
6070 IN PVOID InsertContext
);
6071 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6074 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6075 IN
struct _IO_CSQ
*Csq
,
6079 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6080 IN
struct _IO_CSQ
*Csq
,
6082 IN PVOID PeekContext
);
6085 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6086 IN
struct _IO_CSQ
*Csq
,
6090 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6091 IN
struct _IO_CSQ
*Csq
,
6095 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6096 IN
struct _IO_CSQ
*Csq
,
6099 typedef struct _IO_CSQ
{
6101 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6102 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6103 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6104 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6105 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6106 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6107 PVOID ReservePointer
;
6110 typedef enum _BUS_QUERY_ID_TYPE
{
6112 BusQueryHardwareIDs
,
6113 BusQueryCompatibleIDs
,
6115 BusQueryDeviceSerialNumber
6116 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6118 typedef enum _DEVICE_TEXT_TYPE
{
6119 DeviceTextDescription
,
6120 DeviceTextLocationInformation
6121 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
6124 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
6129 (NTAPI
*PGPE_CONNECT_VECTOR
)(
6134 PGPE_SERVICE_ROUTINE
,
6139 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
6143 (NTAPI
*PGPE_ENABLE_EVENT
)(
6148 (NTAPI
*PGPE_DISABLE_EVENT
)(
6153 (NTAPI
*PGPE_CLEAR_STATUS
)(
6158 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
6163 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6165 PDEVICE_NOTIFY_CALLBACK
,
6169 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6171 PDEVICE_NOTIFY_CALLBACK
);
6173 typedef struct _ACPI_INTERFACE_STANDARD
{
6177 PINTERFACE_REFERENCE InterfaceReference
;
6178 PINTERFACE_DEREFERENCE InterfaceDereference
;
6179 PGPE_CONNECT_VECTOR GpeConnectVector
;
6180 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
6181 PGPE_ENABLE_EVENT GpeEnableEvent
;
6182 PGPE_DISABLE_EVENT GpeDisableEvent
;
6183 PGPE_CLEAR_STATUS GpeClearStatus
;
6184 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
6185 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
6186 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
6189 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
6190 PVOID ObjectContext
,
6191 PVOID ServiceContext
);
6194 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
6197 KINTERRUPT_MODE Mode
,
6199 PGPE_SERVICE_ROUTINE ServiceRoutine
,
6200 PVOID ServiceContext
,
6201 PVOID
*ObjectContext
);
6204 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
6206 PVOID ObjectContext
);
6209 (NTAPI
*PGPE_ENABLE_EVENT2
)(
6211 PVOID ObjectContext
);
6214 (NTAPI
*PGPE_DISABLE_EVENT2
)(
6216 PVOID ObjectContext
);
6219 (NTAPI
*PGPE_CLEAR_STATUS2
)(
6221 PVOID ObjectContext
);
6224 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
6225 PVOID NotificationContext
,
6229 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6231 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
6232 PVOID NotificationContext
);
6235 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6238 typedef struct _ACPI_INTERFACE_STANDARD2
{
6242 PINTERFACE_REFERENCE InterfaceReference
;
6243 PINTERFACE_DEREFERENCE InterfaceDereference
;
6244 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
6245 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
6246 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
6247 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
6248 PGPE_CLEAR_STATUS2 GpeClearStatus
;
6249 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
6250 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
6251 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
6253 #if !defined(_AMD64_) && !defined(_IA64_)
6254 #include <pshpack4.h>
6256 typedef struct _IO_STACK_LOCATION
{
6257 UCHAR MajorFunction
;
6258 UCHAR MinorFunction
;
6263 PIO_SECURITY_CONTEXT SecurityContext
;
6265 USHORT POINTER_ALIGNMENT FileAttributes
;
6267 ULONG POINTER_ALIGNMENT EaLength
;
6271 ULONG POINTER_ALIGNMENT Key
;
6272 LARGE_INTEGER ByteOffset
;
6276 ULONG POINTER_ALIGNMENT Key
;
6277 LARGE_INTEGER ByteOffset
;
6281 PUNICODE_STRING FileName
;
6282 FILE_INFORMATION_CLASS FileInformationClass
;
6287 ULONG CompletionFilter
;
6291 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6295 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6296 PFILE_OBJECT FileObject
;
6297 _ANONYMOUS_UNION
union {
6298 _ANONYMOUS_STRUCT
struct {
6299 BOOLEAN ReplaceIfExists
;
6300 BOOLEAN AdvanceOnly
;
6303 HANDLE DeleteHandle
;
6317 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
6321 FS_INFORMATION_CLASS FsInformationClass
;
6324 ULONG OutputBufferLength
;
6325 ULONG InputBufferLength
;
6326 ULONG FsControlCode
;
6327 PVOID Type3InputBuffer
;
6328 } FileSystemControl
;
6330 PLARGE_INTEGER Length
;
6332 LARGE_INTEGER ByteOffset
;
6335 ULONG OutputBufferLength
;
6336 ULONG POINTER_ALIGNMENT InputBufferLength
;
6337 ULONG POINTER_ALIGNMENT IoControlCode
;
6338 PVOID Type3InputBuffer
;
6341 SECURITY_INFORMATION SecurityInformation
;
6342 ULONG POINTER_ALIGNMENT Length
;
6345 SECURITY_INFORMATION SecurityInformation
;
6346 PSECURITY_DESCRIPTOR SecurityDescriptor
;
6350 PDEVICE_OBJECT DeviceObject
;
6354 PDEVICE_OBJECT DeviceObject
;
6357 struct _SCSI_REQUEST_BLOCK
*Srb
;
6362 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
6363 ULONG SidListLength
;
6369 DEVICE_RELATION_TYPE Type
;
6370 } QueryDeviceRelations
;
6372 CONST GUID
*InterfaceType
;
6375 PINTERFACE Interface
;
6376 PVOID InterfaceSpecificData
;
6379 PDEVICE_CAPABILITIES Capabilities
;
6380 } DeviceCapabilities
;
6382 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
6383 } FilterResourceRequirements
;
6388 ULONG POINTER_ALIGNMENT Length
;
6394 BUS_QUERY_ID_TYPE IdType
;
6397 DEVICE_TEXT_TYPE DeviceTextType
;
6398 LCID POINTER_ALIGNMENT LocaleId
;
6402 BOOLEAN Reserved
[3];
6403 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
6404 } UsageNotification
;
6406 SYSTEM_POWER_STATE PowerState
;
6409 PPOWER_SEQUENCE PowerSequence
;
6412 ULONG SystemContext
;
6413 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
6414 POWER_STATE POINTER_ALIGNMENT State
;
6415 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
6418 PCM_RESOURCE_LIST AllocatedResources
;
6419 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
6422 ULONG_PTR ProviderId
;
6434 PDEVICE_OBJECT DeviceObject
;
6435 PFILE_OBJECT FileObject
;
6436 PIO_COMPLETION_ROUTINE CompletionRoutine
;
6438 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
6439 #if !defined(_AMD64_) && !defined(_IA64_)
6440 #include <poppack.h>
6443 /* IO_STACK_LOCATION.Control */
6445 #define SL_PENDING_RETURNED 0x01
6446 #define SL_ERROR_RETURNED 0x02
6447 #define SL_INVOKE_ON_CANCEL 0x20
6448 #define SL_INVOKE_ON_SUCCESS 0x40
6449 #define SL_INVOKE_ON_ERROR 0x80
6451 #define METHOD_BUFFERED 0
6452 #define METHOD_IN_DIRECT 1
6453 #define METHOD_OUT_DIRECT 2
6454 #define METHOD_NEITHER 3
6456 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
6457 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
6459 #define FILE_SUPERSEDED 0x00000000
6460 #define FILE_OPENED 0x00000001
6461 #define FILE_CREATED 0x00000002
6462 #define FILE_OVERWRITTEN 0x00000003
6463 #define FILE_EXISTS 0x00000004
6464 #define FILE_DOES_NOT_EXIST 0x00000005
6466 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
6467 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
6469 /* also in winnt.h */
6470 #define FILE_LIST_DIRECTORY 0x00000001
6471 #define FILE_READ_DATA 0x00000001
6472 #define FILE_ADD_FILE 0x00000002
6473 #define FILE_WRITE_DATA 0x00000002
6474 #define FILE_ADD_SUBDIRECTORY 0x00000004
6475 #define FILE_APPEND_DATA 0x00000004
6476 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
6477 #define FILE_READ_EA 0x00000008
6478 #define FILE_WRITE_EA 0x00000010
6479 #define FILE_EXECUTE 0x00000020
6480 #define FILE_TRAVERSE 0x00000020
6481 #define FILE_DELETE_CHILD 0x00000040
6482 #define FILE_READ_ATTRIBUTES 0x00000080
6483 #define FILE_WRITE_ATTRIBUTES 0x00000100
6485 #define FILE_SHARE_READ 0x00000001
6486 #define FILE_SHARE_WRITE 0x00000002
6487 #define FILE_SHARE_DELETE 0x00000004
6488 #define FILE_SHARE_VALID_FLAGS 0x00000007
6490 #define FILE_ATTRIBUTE_READONLY 0x00000001
6491 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
6492 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
6493 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
6494 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
6495 #define FILE_ATTRIBUTE_DEVICE 0x00000040
6496 #define FILE_ATTRIBUTE_NORMAL 0x00000080
6497 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
6498 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
6499 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
6500 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
6501 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
6502 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
6503 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
6504 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
6506 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
6507 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
6509 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
6510 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
6511 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
6512 #define FILE_VALID_SET_FLAGS 0x00000036
6514 #define FILE_SUPERSEDE 0x00000000
6515 #define FILE_OPEN 0x00000001
6516 #define FILE_CREATE 0x00000002
6517 #define FILE_OPEN_IF 0x00000003
6518 #define FILE_OVERWRITE 0x00000004
6519 #define FILE_OVERWRITE_IF 0x00000005
6520 #define FILE_MAXIMUM_DISPOSITION 0x00000005
6522 #define FILE_DIRECTORY_FILE 0x00000001
6523 #define FILE_WRITE_THROUGH 0x00000002
6524 #define FILE_SEQUENTIAL_ONLY 0x00000004
6525 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
6526 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
6527 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
6528 #define FILE_NON_DIRECTORY_FILE 0x00000040
6529 #define FILE_CREATE_TREE_CONNECTION 0x00000080
6530 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
6531 #define FILE_NO_EA_KNOWLEDGE 0x00000200
6532 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
6533 #define FILE_RANDOM_ACCESS 0x00000800
6534 #define FILE_DELETE_ON_CLOSE 0x00001000
6535 #define FILE_OPEN_BY_FILE_ID 0x00002000
6536 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
6537 #define FILE_NO_COMPRESSION 0x00008000
6538 #if (NTDDI_VERSION >= NTDDI_WIN7)
6539 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
6540 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
6541 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6542 #define FILE_RESERVE_OPFILTER 0x00100000
6543 #define FILE_OPEN_REPARSE_POINT 0x00200000
6544 #define FILE_OPEN_NO_RECALL 0x00400000
6545 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
6547 #define FILE_ANY_ACCESS 0x00000000
6548 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
6549 #define FILE_READ_ACCESS 0x00000001
6550 #define FILE_WRITE_ACCESS 0x00000002
6552 #define FILE_ALL_ACCESS \
6553 (STANDARD_RIGHTS_REQUIRED | \
6557 #define FILE_GENERIC_EXECUTE \
6558 (STANDARD_RIGHTS_EXECUTE | \
6559 FILE_READ_ATTRIBUTES | \
6563 #define FILE_GENERIC_READ \
6564 (STANDARD_RIGHTS_READ | \
6566 FILE_READ_ATTRIBUTES | \
6570 #define FILE_GENERIC_WRITE \
6571 (STANDARD_RIGHTS_WRITE | \
6573 FILE_WRITE_ATTRIBUTES | \
6575 FILE_APPEND_DATA | \
6580 #define WMIREG_ACTION_REGISTER 1
6581 #define WMIREG_ACTION_DEREGISTER 2
6582 #define WMIREG_ACTION_REREGISTER 3
6583 #define WMIREG_ACTION_UPDATE_GUIDS 4
6584 #define WMIREG_ACTION_BLOCK_IRPS 5
6586 #define WMIREGISTER 0
6590 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
6593 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
6598 typedef struct _PCI_SLOT_NUMBER
{
6601 ULONG DeviceNumber
:5;
6602 ULONG FunctionNumber
:3;
6607 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
6609 #define PCI_TYPE0_ADDRESSES 6
6610 #define PCI_TYPE1_ADDRESSES 2
6611 #define PCI_TYPE2_ADDRESSES 5
6613 typedef struct _PCI_COMMON_HEADER
{
6614 PCI_COMMON_HEADER_LAYOUT
6615 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
6618 typedef struct _PCI_COMMON_CONFIG
{
6619 PCI_COMMON_HEADER_LAYOUT
6620 UCHAR DeviceSpecific
[192];
6621 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6623 typedef struct _PCI_COMMON_CONFIG
{
6624 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
6625 UCHAR DeviceSpecific
[192];
6626 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6629 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
6631 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
6633 #define PCI_MAX_DEVICES 32
6634 #define PCI_MAX_FUNCTION 8
6635 #define PCI_MAX_BRIDGE_NUMBER 0xFF
6636 #define PCI_INVALID_VENDORID 0xFFFF
6638 /* PCI_COMMON_CONFIG.HeaderType */
6639 #define PCI_MULTIFUNCTION 0x80
6640 #define PCI_DEVICE_TYPE 0x00
6641 #define PCI_BRIDGE_TYPE 0x01
6642 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
6644 #define PCI_CONFIGURATION_TYPE(PciData) \
6645 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
6647 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
6648 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
6650 /* PCI_COMMON_CONFIG.Command */
6651 #define PCI_ENABLE_IO_SPACE 0x0001
6652 #define PCI_ENABLE_MEMORY_SPACE 0x0002
6653 #define PCI_ENABLE_BUS_MASTER 0x0004
6654 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
6655 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
6656 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
6657 #define PCI_ENABLE_PARITY 0x0040
6658 #define PCI_ENABLE_WAIT_CYCLE 0x0080
6659 #define PCI_ENABLE_SERR 0x0100
6660 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
6661 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
6663 /* PCI_COMMON_CONFIG.Status */
6664 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
6665 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
6666 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
6667 #define PCI_STATUS_UDF_SUPPORTED 0x0040
6668 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
6669 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
6670 #define PCI_STATUS_DEVSEL 0x0600
6671 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
6672 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
6673 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
6674 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
6675 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
6677 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
6679 #define PCI_WHICHSPACE_CONFIG 0x0
6680 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
6682 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
6683 #define PCI_CAPABILITY_ID_AGP 0x02
6684 #define PCI_CAPABILITY_ID_VPD 0x03
6685 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
6686 #define PCI_CAPABILITY_ID_MSI 0x05
6687 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
6688 #define PCI_CAPABILITY_ID_PCIX 0x07
6689 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
6690 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
6691 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
6692 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
6693 #define PCI_CAPABILITY_ID_SHPC 0x0C
6694 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
6695 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
6696 #define PCI_CAPABILITY_ID_SECURE 0x0F
6697 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
6698 #define PCI_CAPABILITY_ID_MSIX 0x11
6700 typedef struct _PCI_CAPABILITIES_HEADER
{
6703 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
6705 typedef struct _PCI_PMC
{
6709 UCHAR DeviceSpecificInitialization
:1;
6711 struct _PM_SUPPORT
{
6721 } PCI_PMC
, *PPCI_PMC
;
6723 typedef struct _PCI_PMCSR
{
6724 USHORT PowerState
:2;
6727 USHORT DataSelect
:4;
6730 } PCI_PMCSR
, *PPCI_PMCSR
;
6732 typedef struct _PCI_PMCSR_BSE
{
6734 UCHAR D3HotSupportsStopClock
:1;
6735 UCHAR BusPowerClockControlEnabled
:1;
6736 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
6738 typedef struct _PCI_PM_CAPABILITY
{
6739 PCI_CAPABILITIES_HEADER Header
;
6741 PCI_PMC Capabilities
;
6745 PCI_PMCSR ControlStatus
;
6749 PCI_PMCSR_BSE BridgeSupport
;
6753 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
6756 PCI_CAPABILITIES_HEADER Header
;
6759 USHORT DataParityErrorRecoveryEnable
:1;
6760 USHORT EnableRelaxedOrdering
:1;
6761 USHORT MaxMemoryReadByteCount
:2;
6762 USHORT MaxOutstandingSplitTransactions
:3;
6769 ULONG FunctionNumber
:3;
6770 ULONG DeviceNumber
:5;
6772 ULONG Device64Bit
:1;
6773 ULONG Capable133MHz
:1;
6774 ULONG SplitCompletionDiscarded
:1;
6775 ULONG UnexpectedSplitCompletion
:1;
6776 ULONG DeviceComplexity
:1;
6777 ULONG DesignedMaxMemoryReadByteCount
:2;
6778 ULONG DesignedMaxOutstandingSplitTransactions
:3;
6779 ULONG DesignedMaxCumulativeReadSize
:3;
6780 ULONG ReceivedSplitCompletionErrorMessage
:1;
6781 ULONG CapablePCIX266
:1;
6782 ULONG CapablePCIX533
:1;
6786 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
6788 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
6789 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
6790 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
6791 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
6792 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
6793 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
6794 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
6795 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
6796 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
6797 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
6798 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
6800 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
6801 USHORT CapabilityID
;
6804 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
6806 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
6807 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
6808 ULONG LowSerialNumber
;
6809 ULONG HighSerialNumber
;
6810 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
6812 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
6816 ULONG DataLinkProtocolError
:1;
6817 ULONG SurpriseDownError
:1;
6819 ULONG PoisonedTLP
:1;
6820 ULONG FlowControlProtocolError
:1;
6821 ULONG CompletionTimeout
:1;
6822 ULONG CompleterAbort
:1;
6823 ULONG UnexpectedCompletion
:1;
6824 ULONG ReceiverOverflow
:1;
6825 ULONG MalformedTLP
:1;
6827 ULONG UnsupportedRequestError
:1;
6831 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
6833 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
6837 ULONG DataLinkProtocolError
:1;
6838 ULONG SurpriseDownError
:1;
6840 ULONG PoisonedTLP
:1;
6841 ULONG FlowControlProtocolError
:1;
6842 ULONG CompletionTimeout
:1;
6843 ULONG CompleterAbort
:1;
6844 ULONG UnexpectedCompletion
:1;
6845 ULONG ReceiverOverflow
:1;
6846 ULONG MalformedTLP
:1;
6848 ULONG UnsupportedRequestError
:1;
6852 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
6854 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
6858 ULONG DataLinkProtocolError
:1;
6859 ULONG SurpriseDownError
:1;
6861 ULONG PoisonedTLP
:1;
6862 ULONG FlowControlProtocolError
:1;
6863 ULONG CompletionTimeout
:1;
6864 ULONG CompleterAbort
:1;
6865 ULONG UnexpectedCompletion
:1;
6866 ULONG ReceiverOverflow
:1;
6867 ULONG MalformedTLP
:1;
6869 ULONG UnsupportedRequestError
:1;
6873 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
6875 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
6877 ULONG ReceiverError
:1;
6881 ULONG ReplayNumRollover
:1;
6883 ULONG ReplayTimerTimeout
:1;
6884 ULONG AdvisoryNonFatalError
:1;
6888 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
6890 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
6892 ULONG ReceiverError
:1;
6896 ULONG ReplayNumRollover
:1;
6898 ULONG ReplayTimerTimeout
:1;
6899 ULONG AdvisoryNonFatalError
:1;
6903 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
6905 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
6907 ULONG FirstErrorPointer
:5;
6908 ULONG ECRCGenerationCapable
:1;
6909 ULONG ECRCGenerationEnable
:1;
6910 ULONG ECRCCheckCapable
:1;
6911 ULONG ECRCCheckEnable
:1;
6915 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
6917 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
6919 ULONG CorrectableErrorReportingEnable
:1;
6920 ULONG NonFatalErrorReportingEnable
:1;
6921 ULONG FatalErrorReportingEnable
:1;
6925 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
6927 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
6929 ULONG CorrectableErrorReceived
:1;
6930 ULONG MultipleCorrectableErrorsReceived
:1;
6931 ULONG UncorrectableErrorReceived
:1;
6932 ULONG MultipleUncorrectableErrorsReceived
:1;
6933 ULONG FirstUncorrectableFatal
:1;
6934 ULONG NonFatalErrorMessagesReceived
:1;
6935 ULONG FatalErrorMessagesReceived
:1;
6937 ULONG AdvancedErrorInterruptMessageNumber
:5;
6940 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
6942 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
6944 USHORT CorrectableSourceIdFun
:3;
6945 USHORT CorrectableSourceIdDev
:5;
6946 USHORT CorrectableSourceIdBus
:8;
6947 USHORT UncorrectableSourceIdFun
:3;
6948 USHORT UncorrectableSourceIdDev
:5;
6949 USHORT UncorrectableSourceIdBus
:8;
6952 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
6954 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
6956 ULONG TargetAbortOnSplitCompletion
:1;
6957 ULONG MasterAbortOnSplitCompletion
:1;
6958 ULONG ReceivedTargetAbort
:1;
6959 ULONG ReceivedMasterAbort
:1;
6961 ULONG UnexpectedSplitCompletionError
:1;
6962 ULONG UncorrectableSplitCompletion
:1;
6963 ULONG UncorrectableDataError
:1;
6964 ULONG UncorrectableAttributeError
:1;
6965 ULONG UncorrectableAddressError
:1;
6966 ULONG DelayedTransactionDiscardTimerExpired
:1;
6967 ULONG PERRAsserted
:1;
6968 ULONG SERRAsserted
:1;
6969 ULONG InternalBridgeError
:1;
6973 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
6975 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
6977 ULONG TargetAbortOnSplitCompletion
:1;
6978 ULONG MasterAbortOnSplitCompletion
:1;
6979 ULONG ReceivedTargetAbort
:1;
6980 ULONG ReceivedMasterAbort
:1;
6982 ULONG UnexpectedSplitCompletionError
:1;
6983 ULONG UncorrectableSplitCompletion
:1;
6984 ULONG UncorrectableDataError
:1;
6985 ULONG UncorrectableAttributeError
:1;
6986 ULONG UncorrectableAddressError
:1;
6987 ULONG DelayedTransactionDiscardTimerExpired
:1;
6988 ULONG PERRAsserted
:1;
6989 ULONG SERRAsserted
:1;
6990 ULONG InternalBridgeError
:1;
6994 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
6996 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
6998 ULONG TargetAbortOnSplitCompletion
:1;
6999 ULONG MasterAbortOnSplitCompletion
:1;
7000 ULONG ReceivedTargetAbort
:1;
7001 ULONG ReceivedMasterAbort
:1;
7003 ULONG UnexpectedSplitCompletionError
:1;
7004 ULONG UncorrectableSplitCompletion
:1;
7005 ULONG UncorrectableDataError
:1;
7006 ULONG UncorrectableAttributeError
:1;
7007 ULONG UncorrectableAddressError
:1;
7008 ULONG DelayedTransactionDiscardTimerExpired
:1;
7009 ULONG PERRAsserted
:1;
7010 ULONG SERRAsserted
:1;
7011 ULONG InternalBridgeError
:1;
7015 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7017 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7019 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7023 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7025 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7026 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7027 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7029 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7030 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7031 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7032 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7034 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7035 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7036 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7037 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7038 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7039 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7040 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7041 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7043 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7044 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7045 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7046 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7047 ULONG SecHeaderLog
[4];
7048 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7050 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7051 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7052 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7053 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7054 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7055 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7056 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7057 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7059 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7060 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7061 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7062 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7064 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7065 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7066 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7067 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7068 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7069 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7070 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7071 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7073 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7074 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7075 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7076 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7077 ULONG SecHeaderLog
[4];
7078 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7080 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7082 ULONG VFMigrationCapable
:1;
7084 ULONG VFMigrationInterruptNumber
:11;
7087 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7089 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7092 USHORT VFMigrationEnable
:1;
7093 USHORT VFMigrationInterruptEnable
:1;
7094 USHORT VFMemorySpaceEnable
:1;
7095 USHORT ARICapableHierarchy
:1;
7096 USHORT Reserved1
:11;
7099 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
7101 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
7103 USHORT VFMigrationStatus
:1;
7104 USHORT Reserved1
:15;
7107 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
7109 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
7111 ULONG VFMigrationStateBIR
:3;
7112 ULONG VFMigrationStateOffset
:29;
7115 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
7117 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
7118 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7119 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
7120 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
7121 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
7125 UCHAR FunctionDependencyLink
;
7127 USHORT FirstVFOffset
;
7131 ULONG SupportedPageSizes
;
7132 ULONG SystemPageSize
;
7133 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
7134 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
7135 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
7137 /* PCI device classes */
7138 #define PCI_CLASS_PRE_20 0x00
7139 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
7140 #define PCI_CLASS_NETWORK_CTLR 0x02
7141 #define PCI_CLASS_DISPLAY_CTLR 0x03
7142 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
7143 #define PCI_CLASS_MEMORY_CTLR 0x05
7144 #define PCI_CLASS_BRIDGE_DEV 0x06
7145 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
7146 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
7147 #define PCI_CLASS_INPUT_DEV 0x09
7148 #define PCI_CLASS_DOCKING_STATION 0x0a
7149 #define PCI_CLASS_PROCESSOR 0x0b
7150 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
7151 #define PCI_CLASS_WIRELESS_CTLR 0x0d
7152 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
7153 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
7154 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
7155 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
7156 #define PCI_CLASS_NOT_DEFINED 0xff
7158 /* PCI device subclasses for class 0 */
7159 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
7160 #define PCI_SUBCLASS_PRE_20_VGA 0x01
7162 /* PCI device subclasses for class 1 (mass storage controllers)*/
7163 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
7164 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
7165 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
7166 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
7167 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
7168 #define PCI_SUBCLASS_MSC_OTHER 0x80
7170 /* PCI device subclasses for class 2 (network controllers)*/
7171 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
7172 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
7173 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
7174 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
7175 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
7176 #define PCI_SUBCLASS_NET_OTHER 0x80
7178 /* PCI device subclasses for class 3 (display controllers)*/
7179 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
7180 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
7181 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
7182 #define PCI_SUBCLASS_VID_OTHER 0x80
7184 /* PCI device subclasses for class 4 (multimedia device)*/
7185 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
7186 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
7187 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
7188 #define PCI_SUBCLASS_MM_OTHER 0x80
7190 /* PCI device subclasses for class 5 (memory controller)*/
7191 #define PCI_SUBCLASS_MEM_RAM 0x00
7192 #define PCI_SUBCLASS_MEM_FLASH 0x01
7193 #define PCI_SUBCLASS_MEM_OTHER 0x80
7195 /* PCI device subclasses for class 6 (bridge device)*/
7196 #define PCI_SUBCLASS_BR_HOST 0x00
7197 #define PCI_SUBCLASS_BR_ISA 0x01
7198 #define PCI_SUBCLASS_BR_EISA 0x02
7199 #define PCI_SUBCLASS_BR_MCA 0x03
7200 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
7201 #define PCI_SUBCLASS_BR_PCMCIA 0x05
7202 #define PCI_SUBCLASS_BR_NUBUS 0x06
7203 #define PCI_SUBCLASS_BR_CARDBUS 0x07
7204 #define PCI_SUBCLASS_BR_RACEWAY 0x08
7205 #define PCI_SUBCLASS_BR_OTHER 0x80
7207 #define PCI_SUBCLASS_COM_SERIAL 0x00
7208 #define PCI_SUBCLASS_COM_PARALLEL 0x01
7209 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
7210 #define PCI_SUBCLASS_COM_MODEM 0x03
7211 #define PCI_SUBCLASS_COM_OTHER 0x80
7213 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
7214 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
7215 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
7216 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
7217 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
7218 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
7219 #define PCI_SUBCLASS_SYS_OTHER 0x80
7221 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
7222 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
7223 #define PCI_SUBCLASS_INP_MOUSE 0x02
7224 #define PCI_SUBCLASS_INP_SCANNER 0x03
7225 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
7226 #define PCI_SUBCLASS_INP_OTHER 0x80
7228 #define PCI_SUBCLASS_DOC_GENERIC 0x00
7229 #define PCI_SUBCLASS_DOC_OTHER 0x80
7231 #define PCI_SUBCLASS_PROC_386 0x00
7232 #define PCI_SUBCLASS_PROC_486 0x01
7233 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
7234 #define PCI_SUBCLASS_PROC_ALPHA 0x10
7235 #define PCI_SUBCLASS_PROC_POWERPC 0x20
7236 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
7238 /* PCI device subclasses for class C (serial bus controller)*/
7239 #define PCI_SUBCLASS_SB_IEEE1394 0x00
7240 #define PCI_SUBCLASS_SB_ACCESS 0x01
7241 #define PCI_SUBCLASS_SB_SSA 0x02
7242 #define PCI_SUBCLASS_SB_USB 0x03
7243 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
7244 #define PCI_SUBCLASS_SB_SMBUS 0x05
7246 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
7247 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
7248 #define PCI_SUBCLASS_WIRELESS_RF 0x10
7249 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
7251 #define PCI_SUBCLASS_INTIO_I2O 0x00
7253 #define PCI_SUBCLASS_SAT_TV 0x01
7254 #define PCI_SUBCLASS_SAT_AUDIO 0x02
7255 #define PCI_SUBCLASS_SAT_VOICE 0x03
7256 #define PCI_SUBCLASS_SAT_DATA 0x04
7258 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
7259 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
7260 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
7262 #define PCI_SUBCLASS_DASP_DPIO 0x00
7263 #define PCI_SUBCLASS_DASP_OTHER 0x80
7265 #define PCI_ADDRESS_IO_SPACE 0x00000001
7266 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
7267 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
7268 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
7269 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
7270 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
7272 #define PCI_TYPE_32BIT 0
7273 #define PCI_TYPE_20BIT 2
7274 #define PCI_TYPE_64BIT 4
7276 #define PCI_ROMADDRESS_ENABLED 0x00000001
7278 #endif /* _PCI_X_ */
7280 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
7283 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
7284 IN OUT PVOID Context
);
7285 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
7288 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
7289 IN OUT PVOID Context
);
7290 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
7292 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
7296 PINTERFACE_REFERENCE InterfaceReference
;
7297 PINTERFACE_DEREFERENCE InterfaceDereference
;
7298 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
7299 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
7300 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
7302 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
7305 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
7312 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
7318 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
7322 PINTERFACE_REFERENCE InterfaceReference
;
7323 PINTERFACE_DEREFERENCE InterfaceDereference
;
7324 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
7325 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
7326 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
7328 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
7331 (NTAPI PCI_MSIX_SET_ENTRY
)(
7333 IN ULONG TableEntry
,
7334 IN ULONG MessageNumber
);
7335 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
7338 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
7340 IN ULONG TableEntry
);
7341 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
7344 (NTAPI PCI_MSIX_GET_ENTRY
)(
7346 IN ULONG TableEntry
,
7347 OUT PULONG MessageNumber
,
7348 OUT PBOOLEAN Masked
);
7349 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
7352 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
7354 OUT PULONG TableSize
);
7355 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
7357 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
7361 PINTERFACE_REFERENCE InterfaceReference
;
7362 PINTERFACE_DEREFERENCE InterfaceDereference
;
7363 PPCI_MSIX_SET_ENTRY SetTableEntry
;
7364 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
7365 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
7366 PPCI_MSIX_GET_ENTRY GetTableEntry
;
7367 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
7368 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
7370 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
7371 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
7373 /******************************************************************************
7374 * Object Manager Types *
7375 ******************************************************************************/
7377 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
7378 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
7380 typedef ULONG OB_OPERATION
;
7382 #define OB_OPERATION_HANDLE_CREATE 0x00000001
7383 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
7385 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
7386 IN OUT ACCESS_MASK DesiredAccess
;
7387 IN ACCESS_MASK OriginalDesiredAccess
;
7388 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
7390 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
7391 IN OUT ACCESS_MASK DesiredAccess
;
7392 IN ACCESS_MASK OriginalDesiredAccess
;
7393 IN PVOID SourceProcess
;
7394 IN PVOID TargetProcess
;
7395 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
7397 typedef union _OB_PRE_OPERATION_PARAMETERS
{
7398 IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7399 IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7400 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
7402 typedef struct _OB_PRE_OPERATION_INFORMATION
{
7403 IN OB_OPERATION Operation
;
7407 IN ULONG KernelHandle
:1;
7408 IN ULONG Reserved
:31;
7412 IN POBJECT_TYPE ObjectType
;
7413 OUT PVOID CallContext
;
7414 IN POB_PRE_OPERATION_PARAMETERS Parameters
;
7415 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
7417 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
7418 IN ACCESS_MASK GrantedAccess
;
7419 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
7421 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
7422 IN ACCESS_MASK GrantedAccess
;
7423 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
7425 typedef union _OB_POST_OPERATION_PARAMETERS
{
7426 IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7427 IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7428 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
7430 typedef struct _OB_POST_OPERATION_INFORMATION
{
7431 IN OB_OPERATION Operation
;
7435 IN ULONG KernelHandle
:1;
7436 IN ULONG Reserved
:31;
7440 IN POBJECT_TYPE ObjectType
;
7441 IN PVOID CallContext
;
7442 IN NTSTATUS ReturnStatus
;
7443 IN POB_POST_OPERATION_PARAMETERS Parameters
;
7444 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
7446 typedef enum _OB_PREOP_CALLBACK_STATUS
{
7448 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
7450 typedef OB_PREOP_CALLBACK_STATUS
7451 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
7452 IN PVOID RegistrationContext
,
7453 IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation
);
7456 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
7457 IN PVOID RegistrationContext
,
7458 IN POB_POST_OPERATION_INFORMATION OperationInformation
);
7460 typedef struct _OB_OPERATION_REGISTRATION
{
7461 IN POBJECT_TYPE
*ObjectType
;
7462 IN OB_OPERATION Operations
;
7463 IN POB_PRE_OPERATION_CALLBACK PreOperation
;
7464 IN POB_POST_OPERATION_CALLBACK PostOperation
;
7465 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
7467 typedef struct _OB_CALLBACK_REGISTRATION
{
7469 IN USHORT OperationRegistrationCount
;
7470 IN UNICODE_STRING Altitude
;
7471 IN PVOID RegistrationContext
;
7472 IN OB_OPERATION_REGISTRATION
*OperationRegistration
;
7473 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
7475 typedef struct _OBJECT_NAME_INFORMATION
{
7476 UNICODE_STRING Name
;
7477 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
7479 /* Exported object types */
7480 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
7481 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
7482 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
7483 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
7484 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
7485 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
7486 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
7489 /******************************************************************************
7490 * Process Manager Types *
7491 ******************************************************************************/
7494 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
7495 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
7496 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
7497 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
7498 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
7500 /* Thread Access Rights */
7501 #define THREAD_TERMINATE 0x0001
7502 #define THREAD_SUSPEND_RESUME 0x0002
7503 #define THREAD_ALERT 0x0004
7504 #define THREAD_GET_CONTEXT 0x0008
7505 #define THREAD_SET_CONTEXT 0x0010
7506 #define THREAD_SET_INFORMATION 0x0020
7507 #define THREAD_SET_LIMITED_INFORMATION 0x0400
7508 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
7510 #define PROCESS_DUP_HANDLE (0x0040)
7512 #if (NTDDI_VERSION >= NTDDI_VISTA)
7513 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7515 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
7518 #if (NTDDI_VERSION >= NTDDI_VISTA)
7519 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7521 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
7524 #define LOW_PRIORITY 0
7525 #define LOW_REALTIME_PRIORITY 16
7526 #define HIGH_PRIORITY 31
7527 #define MAXIMUM_PRIORITY 32
7529 /******************************************************************************
7530 * WMI Library Support Types *
7531 ******************************************************************************/
7534 #include <evntrace.h>
7538 #ifndef TRACE_INFORMATION_CLASS_DEFINE
7540 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
7543 ULONG MinimumBuffers
;
7544 ULONG MaximumBuffers
;
7547 ULONG FlushThreshold
;
7549 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
7551 typedef enum _TRACE_INFORMATION_CLASS
{
7554 TraceEnableFlagsClass
,
7555 TraceEnableLevelClass
,
7556 GlobalLoggerHandleClass
,
7557 EventLoggerHandleClass
,
7558 AllLoggerHandlesClass
,
7559 TraceHandleByNameClass
,
7560 LoggerEventsLostClass
,
7561 TraceSessionSettingsClass
,
7562 LoggerEventsLoggedClass
,
7563 MaxTraceInformationClass
7564 } TRACE_INFORMATION_CLASS
;
7566 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
7572 #include <evntprov.h>
7575 (NTAPI
*PETWENABLECALLBACK
)(
7576 IN LPCGUID SourceId
,
7577 IN ULONG ControlCode
,
7579 IN ULONGLONG MatchAnyKeyword
,
7580 IN ULONGLONG MatchAllKeyword
,
7581 IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL
,
7582 IN OUT PVOID CallbackContext OPTIONAL
);
7584 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
7587 #if defined(_M_IX86)
7588 /** Kernel definitions for x86 **/
7590 /* Interrupt request levels */
7591 #define PASSIVE_LEVEL 0
7594 #define DISPATCH_LEVEL 2
7595 #define CMCI_LEVEL 5
7596 #define PROFILE_LEVEL 27
7597 #define CLOCK1_LEVEL 28
7598 #define CLOCK2_LEVEL 28
7599 #define IPI_LEVEL 29
7600 #define POWER_LEVEL 30
7601 #define HIGH_LEVEL 31
7602 #define CLOCK_LEVEL CLOCK2_LEVEL
7604 #define KIP0PCRADDRESS 0xffdff000
7605 #define KI_USER_SHARED_DATA 0xffdf0000
7606 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
7608 #define PAGE_SIZE 0x1000
7609 #define PAGE_SHIFT 12L
7610 #define KeGetDcacheFillSize() 1L
7612 #define EFLAG_SIGN 0x8000
7613 #define EFLAG_ZERO 0x4000
7614 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
7616 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7617 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
7618 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7621 typedef struct _KFLOATING_SAVE
{
7625 ULONG ErrorSelector
;
7630 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
7632 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
7634 #define YieldProcessor _mm_pause
7638 KeMemoryBarrier(VOID
)
7640 volatile LONG Barrier
;
7641 #if defined(__GNUC__)
7642 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
7643 #elif defined(_MSC_VER)
7644 __asm xchg
[Barrier
], eax
7653 #define KeLowerIrql(a) KfLowerIrql(a)
7660 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7665 KeRaiseIrqlToDpcLevel(VOID
);
7670 KeRaiseIrqlToSynchLevel(VOID
);
7676 IN OUT PKSPIN_LOCK SpinLock
);
7677 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
7683 IN OUT PKSPIN_LOCK SpinLock
,
7685 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
7690 KefAcquireSpinLockAtDpcLevel(
7691 IN OUT PKSPIN_LOCK SpinLock
);
7692 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
7697 KefReleaseSpinLockFromDpcLevel(
7698 IN OUT PKSPIN_LOCK SpinLock
);
7699 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
7704 KeGetCurrentThread(VOID
);
7709 KeSaveFloatingPointState(
7710 OUT PKFLOATING_SAVE FloatSave
);
7715 KeRestoreFloatingPointState(
7716 IN PKFLOATING_SAVE FloatSave
);
7721 * IN BOOLEAN ReadOperation,
7722 * IN BOOLEAN DmaOperation)
7724 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
7726 /* x86 and x64 performs a 0x2C interrupt */
7727 #define DbgRaiseAssertionFailure __int2c
7732 OUT PLARGE_INTEGER CurrentCount
)
7735 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
7736 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
7737 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
7741 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
7745 #elif defined(_M_AMD64)
7746 /** Kernel definitions for AMD64 **/
7748 /* Interrupt request levels */
7749 #define PASSIVE_LEVEL 0
7752 #define DISPATCH_LEVEL 2
7753 #define CMCI_LEVEL 5
7754 #define CLOCK_LEVEL 13
7755 #define IPI_LEVEL 14
7756 #define DRS_LEVEL 14
7757 #define POWER_LEVEL 14
7758 #define PROFILE_LEVEL 15
7759 #define HIGH_LEVEL 15
7761 #define PAGE_SIZE 0x1000
7762 #define PAGE_SHIFT 12L
7764 #define KI_USER_SHARED_DATA 0xFFFFF78000000000UI64
7765 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
7768 typedef struct _KFLOATING_SAVE
{
7770 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
7772 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
7774 #define KeQueryInterruptTime() \
7775 (*(volatile ULONG64*)SharedInterruptTime)
7777 #define KeQuerySystemTime(CurrentCount) \
7778 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
7780 #define KeQueryTickCount(CurrentCount) \
7781 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
7783 #define KeGetDcacheFillSize() 1L
7785 #define YieldProcessor _mm_pause
7789 KeGetCurrentIrql(VOID
)
7791 return (KIRQL
)__readcr8();
7796 KeLowerIrql(IN KIRQL NewIrql
)
7798 ASSERT(KeGetCurrentIrql() >= NewIrql
);
7799 __writecr8(NewIrql
);
7804 KfRaiseIrql(IN KIRQL NewIrql
)
7808 OldIrql
= __readcr8();
7809 ASSERT(OldIrql
<= NewIrql
);
7810 __writecr8(NewIrql
);
7813 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7817 KeRaiseIrqlToDpcLevel(VOID
)
7819 return KfRaiseIrql(DISPATCH_LEVEL
);
7824 KeRaiseIrqlToSynchLevel(VOID
)
7826 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
7831 KeGetCurrentThread(VOID
)
7833 return (struct _KTHREAD
*)__readgsqword(0x188);
7836 /* x86 and x64 performs a 0x2C interrupt */
7837 #define DbgRaiseAssertionFailure __int2c
7839 #elif defined(_M_IA64)
7840 /** Kernel definitions for IA64 **/
7842 /* Interrupt request levels */
7843 #define PASSIVE_LEVEL 0
7846 #define DISPATCH_LEVEL 2
7848 #define DEVICE_LEVEL_BASE 4
7850 #define IPI_LEVEL 14
7851 #define DRS_LEVEL 14
7852 #define CLOCK_LEVEL 13
7853 #define POWER_LEVEL 15
7854 #define PROFILE_LEVEL 15
7855 #define HIGH_LEVEL 15
7857 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
7858 extern volatile LARGE_INTEGER KeTickCount
;
7862 KeFlushWriteBuffer(VOID
)
7871 KeGetCurrentThread(VOID
);
7874 #elif defined(_M_PPC)
7876 /* Interrupt request levels */
7877 #define PASSIVE_LEVEL 0
7880 #define DISPATCH_LEVEL 2
7881 #define PROFILE_LEVEL 27
7882 #define CLOCK1_LEVEL 28
7883 #define CLOCK2_LEVEL 28
7884 #define IPI_LEVEL 29
7885 #define POWER_LEVEL 30
7886 #define HIGH_LEVEL 31
7889 // Used to contain PFNs and PFN counts
7891 typedef ULONG PFN_COUNT
;
7892 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
7893 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
7896 typedef struct _KFLOATING_SAVE
{
7898 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
7900 typedef struct _KPCR_TIB
{
7901 PVOID ExceptionList
; /* 00 */
7902 PVOID StackBase
; /* 04 */
7903 PVOID StackLimit
; /* 08 */
7904 PVOID SubSystemTib
; /* 0C */
7905 _ANONYMOUS_UNION
union {
7906 PVOID FiberData
; /* 10 */
7907 ULONG Version
; /* 10 */
7909 PVOID ArbitraryUserPointer
; /* 14 */
7910 struct _KPCR_TIB
*Self
; /* 18 */
7911 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
7913 #define PCR_MINOR_VERSION 1
7914 #define PCR_MAJOR_VERSION 1
7916 typedef struct _KPCR
{
7917 KPCR_TIB Tib
; /* 00 */
7918 struct _KPCR
*Self
; /* 1C */
7919 struct _KPRCB
*Prcb
; /* 20 */
7920 KIRQL Irql
; /* 24 */
7922 ULONG IrrActive
; /* 2C */
7924 PVOID KdVersionBlock
; /* 34 */
7925 PUSHORT IDT
; /* 38 */
7926 PUSHORT GDT
; /* 3C */
7927 struct _KTSS
*TSS
; /* 40 */
7928 USHORT MajorVersion
; /* 44 */
7929 USHORT MinorVersion
; /* 46 */
7930 KAFFINITY SetMember
; /* 48 */
7931 ULONG StallScaleFactor
; /* 4C */
7932 UCHAR SpareUnused
; /* 50 */
7933 UCHAR Number
; /* 51 */
7934 } KPCR
, *PKPCR
; /* 54 */
7936 #define KeGetPcr() PCR
7938 #define YieldProcessor() __asm__ __volatile__("nop");
7943 KeGetCurrentProcessorNumber(VOID
)
7946 __asm__
__volatile__ (
7949 : "i" (FIELD_OFFSET(KPCR
, Number
))
7959 #define KeLowerIrql(a) KfLowerIrql(a)
7966 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7971 KeRaiseIrqlToDpcLevel(VOID
);
7976 KeRaiseIrqlToSynchLevel(VOID
);
7980 #elif defined(_M_MIPS)
7981 #error MIPS Headers are totally incorrect
7984 // Used to contain PFNs and PFN counts
7986 typedef ULONG PFN_COUNT
;
7987 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
7988 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
7990 #define PASSIVE_LEVEL 0
7992 #define DISPATCH_LEVEL 2
7993 #define PROFILE_LEVEL 27
7994 #define IPI_LEVEL 29
7995 #define HIGH_LEVEL 31
7997 typedef struct _KPCR
{
7998 struct _KPRCB
*Prcb
; /* 20 */
7999 KIRQL Irql
; /* 24 */
8004 #define KeGetPcr() PCR
8006 typedef struct _KFLOATING_SAVE
{
8007 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8012 KeGetCurrentProcessorNumber(VOID
)
8017 #define YieldProcessor() __asm__ __volatile__("nop");
8019 #define KeLowerIrql(a) KfLowerIrql(a)
8020 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8037 KeRaiseIrqlToDpcLevel(VOID
);
8042 KeRaiseIrqlToSynchLevel(VOID
);
8045 #elif defined(_M_ARM)
8048 #error Unknown Architecture
8051 /******************************************************************************
8052 * Runtime Library Functions *
8053 ******************************************************************************/
8056 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
8058 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
8063 OUT PLIST_ENTRY ListHead
)
8065 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
8071 IN CONST LIST_ENTRY
* ListHead
)
8073 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
8079 IN PLIST_ENTRY Entry
)
8081 PLIST_ENTRY OldFlink
;
8082 PLIST_ENTRY OldBlink
;
8084 OldFlink
= Entry
->Flink
;
8085 OldBlink
= Entry
->Blink
;
8086 OldFlink
->Blink
= OldBlink
;
8087 OldBlink
->Flink
= OldFlink
;
8088 return (BOOLEAN
)(OldFlink
== OldBlink
);
8094 IN OUT PLIST_ENTRY ListHead
)
8099 Entry
= ListHead
->Flink
;
8100 Flink
= Entry
->Flink
;
8101 ListHead
->Flink
= Flink
;
8102 Flink
->Blink
= ListHead
;
8109 IN OUT PLIST_ENTRY ListHead
)
8114 Entry
= ListHead
->Blink
;
8115 Blink
= Entry
->Blink
;
8116 ListHead
->Blink
= Blink
;
8117 Blink
->Flink
= ListHead
;
8124 IN OUT PLIST_ENTRY ListHead
,
8125 IN OUT PLIST_ENTRY Entry
)
8127 PLIST_ENTRY OldBlink
;
8128 OldBlink
= ListHead
->Blink
;
8129 Entry
->Flink
= ListHead
;
8130 Entry
->Blink
= OldBlink
;
8131 OldBlink
->Flink
= Entry
;
8132 ListHead
->Blink
= Entry
;
8138 IN OUT PLIST_ENTRY ListHead
,
8139 IN OUT PLIST_ENTRY Entry
)
8141 PLIST_ENTRY OldFlink
;
8142 OldFlink
= ListHead
->Flink
;
8143 Entry
->Flink
= OldFlink
;
8144 Entry
->Blink
= ListHead
;
8145 OldFlink
->Blink
= Entry
;
8146 ListHead
->Flink
= Entry
;
8152 IN OUT PLIST_ENTRY ListHead
,
8153 IN OUT PLIST_ENTRY ListToAppend
)
8155 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
8157 ListHead
->Blink
->Flink
= ListToAppend
;
8158 ListHead
->Blink
= ListToAppend
->Blink
;
8159 ListToAppend
->Blink
->Flink
= ListHead
;
8160 ListToAppend
->Blink
= ListEnd
;
8166 IN OUT PSINGLE_LIST_ENTRY ListHead
)
8168 PSINGLE_LIST_ENTRY FirstEntry
;
8169 FirstEntry
= ListHead
->Next
;
8170 if (FirstEntry
!= NULL
) {
8171 ListHead
->Next
= FirstEntry
->Next
;
8179 IN OUT PSINGLE_LIST_ENTRY ListHead
,
8180 IN OUT PSINGLE_LIST_ENTRY Entry
)
8182 Entry
->Next
= ListHead
->Next
;
8183 ListHead
->Next
= Entry
;
8186 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
8192 IN PVOID FailedAssertion
,
8194 IN ULONG LineNumber
,
8199 * IN VOID UNALIGNED *Destination,
8200 * IN CONST VOID UNALIGNED *Source,
8203 #define RtlCopyMemory(Destination, Source, Length) \
8204 memcpy(Destination, Source, Length)
8206 #define RtlCopyBytes RtlCopyMemory
8208 #if defined(_M_AMD64)
8212 RtlCopyMemoryNonTemporal(
8213 VOID UNALIGNED
*Destination
,
8214 CONST VOID UNALIGNED
*Source
,
8217 #define RtlCopyMemoryNonTemporal RtlCopyMemory
8225 #define RtlEqualLuid(Luid1, Luid2) \
8226 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
8230 * IN VOID UNALIGNED *Destination,
8231 * IN CONST VOID UNALIGNED *Source,
8234 #define RtlEqualMemory(Destination, Source, Length) \
8235 (!memcmp(Destination, Source, Length))
8239 * IN VOID UNALIGNED *Destination,
8243 #define RtlFillMemory(Destination, Length, Fill) \
8244 memset(Destination, Fill, Length)
8246 #define RtlFillBytes RtlFillMemory
8251 RtlFreeUnicodeString(
8252 IN OUT PUNICODE_STRING UnicodeString
);
8258 IN PUNICODE_STRING GuidString
,
8264 RtlInitUnicodeString(
8265 IN OUT PUNICODE_STRING DestinationString
,
8266 IN PCWSTR SourceString OPTIONAL
);
8270 * IN VOID UNALIGNED *Destination,
8271 * IN CONST VOID UNALIGNED *Source,
8274 #define RtlMoveMemory(Destination, Source, Length) \
8275 memmove(Destination, Source, Length)
8282 OUT PUNICODE_STRING GuidString
);
8286 * IN VOID UNALIGNED *Destination,
8289 #define RtlZeroMemory(Destination, Length) \
8290 memset(Destination, 0, Length)
8292 #define RtlZeroBytes RtlZeroMemory
8294 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8302 IN PRTL_BITMAP BitMapHeader
,
8303 IN ULONG StartingIndex
,
8310 IN PRTL_BITMAP BitMapHeader
,
8311 IN ULONG StartingIndex
,
8317 RtlAnsiStringToUnicodeString(
8318 IN OUT PUNICODE_STRING DestinationString
,
8319 IN PANSI_STRING SourceString
,
8320 IN BOOLEAN AllocateDestinationString
);
8325 RtlxAnsiStringToUnicodeSize(
8326 IN PCANSI_STRING AnsiString
);
8328 #define RtlAnsiStringToUnicodeSize(String) ( \
8329 NLS_MB_CODE_PAGE_TAG ? \
8330 RtlxAnsiStringToUnicodeSize(String) : \
8331 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
8337 RtlAppendUnicodeStringToString(
8338 IN OUT PUNICODE_STRING Destination
,
8339 IN PCUNICODE_STRING Source
);
8344 RtlAppendUnicodeToString(
8345 IN OUT PUNICODE_STRING Destination
,
8351 RtlCheckRegistryKey(
8352 IN ULONG RelativeTo
,
8359 IN PRTL_BITMAP BitMapHeader
);
8365 IN PRTL_BITMAP BitMapHeader
,
8366 IN ULONG StartingIndex
,
8367 IN ULONG NumberToClear
);
8373 IN CONST VOID
*Source1
,
8374 IN CONST VOID
*Source2
,
8380 RtlCompareUnicodeString(
8381 IN PCUNICODE_STRING String1
,
8382 IN PCUNICODE_STRING String2
,
8383 IN BOOLEAN CaseInSensitive
);
8388 RtlCompareUnicodeStrings(
8390 IN SIZE_T String1Length
,
8392 IN SIZE_T String2Length
,
8393 IN BOOLEAN CaseInSensitive
);
8398 RtlCopyUnicodeString(
8399 IN OUT PUNICODE_STRING DestinationString
,
8400 IN PCUNICODE_STRING SourceString OPTIONAL
);
8405 RtlCreateRegistryKey(
8406 IN ULONG RelativeTo
,
8412 RtlCreateSecurityDescriptor(
8413 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8419 RtlDeleteRegistryValue(
8420 IN ULONG RelativeTo
,
8422 IN PCWSTR ValueName
);
8427 RtlEqualUnicodeString(
8428 IN CONST UNICODE_STRING
*String1
,
8429 IN CONST UNICODE_STRING
*String2
,
8430 IN BOOLEAN CaseInSensitive
);
8432 #if !defined(_AMD64_) && !defined(_IA64_)
8436 RtlExtendedIntegerMultiply(
8437 IN LARGE_INTEGER Multiplicand
,
8438 IN LONG Multiplier
);
8443 RtlExtendedLargeIntegerDivide(
8444 IN LARGE_INTEGER Dividend
,
8446 OUT PULONG Remainder OPTIONAL
);
8449 #if defined(_X86_) || defined(_IA64_)
8453 RtlExtendedMagicDivide(
8454 IN LARGE_INTEGER Dividend
,
8455 IN LARGE_INTEGER MagicDivisor
,
8456 IN CCHAR ShiftCount
);
8463 IN PANSI_STRING AnsiString
);
8469 IN PRTL_BITMAP BitMapHeader
,
8470 IN ULONG NumberToFind
,
8471 IN ULONG HintIndex
);
8476 RtlFindClearBitsAndSet(
8477 IN PRTL_BITMAP BitMapHeader
,
8478 IN ULONG NumberToFind
,
8479 IN ULONG HintIndex
);
8484 RtlFindFirstRunClear(
8485 IN PRTL_BITMAP BitMapHeader
,
8486 OUT PULONG StartingIndex
);
8492 IN PRTL_BITMAP BitMapHeader
,
8493 OUT PRTL_BITMAP_RUN RunArray
,
8494 IN ULONG SizeOfRunArray
,
8495 IN BOOLEAN LocateLongestRuns
);
8500 RtlFindLastBackwardRunClear(
8501 IN PRTL_BITMAP BitMapHeader
,
8503 OUT PULONG StartingRunIndex
);
8508 RtlFindLeastSignificantBit(
8514 RtlFindLongestRunClear(
8515 IN PRTL_BITMAP BitMapHeader
,
8516 OUT PULONG StartingIndex
);
8521 RtlFindMostSignificantBit(
8527 RtlFindNextForwardRunClear(
8528 IN PRTL_BITMAP BitMapHeader
,
8530 OUT PULONG StartingRunIndex
);
8536 IN PRTL_BITMAP BitMapHeader
,
8537 IN ULONG NumberToFind
,
8538 IN ULONG HintIndex
);
8543 RtlFindSetBitsAndClear(
8544 IN PRTL_BITMAP BitMapHeader
,
8545 IN ULONG NumberToFind
,
8546 IN ULONG HintIndex
);
8552 IN OUT PANSI_STRING DestinationString
,
8553 IN PCSZ SourceString
);
8558 RtlInitializeBitMap(
8559 IN PRTL_BITMAP BitMapHeader
,
8560 IN PULONG BitMapBuffer
,
8561 IN ULONG SizeOfBitMap
);
8567 IN OUT PSTRING DestinationString
,
8568 IN PCSZ SourceString
);
8573 RtlIntegerToUnicodeString(
8575 IN ULONG Base OPTIONAL
,
8576 IN OUT PUNICODE_STRING String
);
8581 RtlInt64ToUnicodeString(
8583 IN ULONG Base OPTIONAL
,
8584 IN OUT PUNICODE_STRING String
);
8587 #define RtlIntPtrToUnicodeString(Value, Base, String) \
8588 RtlInt64ToUnicodeString(Value, Base, String)
8590 #define RtlIntPtrToUnicodeString(Value, Base, String) \
8591 RtlIntegerToUnicodeString(Value, Base, String)
8598 #define RtlIsZeroLuid(_L1) \
8599 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
8604 RtlLengthSecurityDescriptor(
8605 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8610 RtlNumberOfClearBits(
8611 IN PRTL_BITMAP BitMapHeader
);
8617 IN PRTL_BITMAP BitMapHeader
);
8622 RtlQueryRegistryValues(
8623 IN ULONG RelativeTo
,
8625 IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable
,
8626 IN PVOID Context OPTIONAL
,
8627 IN PVOID Environment OPTIONAL
);
8629 #define SHORT_SIZE (sizeof(USHORT))
8630 #define SHORT_MASK (SHORT_SIZE - 1)
8631 #define LONG_SIZE (sizeof(LONG))
8632 #define LONGLONG_SIZE (sizeof(LONGLONG))
8633 #define LONG_MASK (LONG_SIZE - 1)
8634 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
8635 #define LOWBYTE_MASK 0x00FF
8637 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
8638 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
8639 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
8640 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
8646 IN PRTL_BITMAP BitMapHeader
);
8652 IN PRTL_BITMAP BitMapHeader
,
8653 IN ULONG StartingIndex
,
8654 IN ULONG NumberToSet
);
8659 RtlSetDaclSecurityDescriptor(
8660 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8661 IN BOOLEAN DaclPresent
,
8662 IN PACL Dacl OPTIONAL
,
8663 IN BOOLEAN DaclDefaulted OPTIONAL
);
8665 #if defined(_AMD64_)
8669 * IN PULONG Address,
8672 #define RtlStoreUlong(Address,Value) \
8673 *(ULONG UNALIGNED *)(Address) = (Value)
8676 * RtlStoreUlonglong(
8677 * IN OUT PULONGLONG Address,
8680 #define RtlStoreUlonglong(Address,Value) \
8681 *(ULONGLONG UNALIGNED *)(Address) = (Value)
8685 * IN PUSHORT Address,
8688 #define RtlStoreUshort(Address,Value) \
8689 *(USHORT UNALIGNED *)(Address) = (Value)
8692 * RtlRetrieveUshort(
8693 * PUSHORT DestinationAddress,
8694 * PUSHORT SourceAddress);
8696 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
8697 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
8701 * PULONG DestinationAddress,
8702 * PULONG SourceAddress);
8704 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
8705 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
8709 #define RtlStoreUlong(Address,Value) \
8710 if ((ULONG_PTR)(Address) & LONG_MASK) { \
8711 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
8712 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
8713 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
8714 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
8717 *((PULONG)(Address)) = (ULONG) (Value); \
8720 #define RtlStoreUlonglong(Address,Value) \
8721 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
8722 RtlStoreUlong((ULONG_PTR)(Address), \
8723 (ULONGLONG)(Value) & 0xFFFFFFFF); \
8724 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
8725 (ULONGLONG)(Value) >> 32); \
8727 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
8730 #define RtlStoreUshort(Address,Value) \
8731 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
8732 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
8733 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
8736 *((PUSHORT) (Address)) = (USHORT)Value; \
8739 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
8740 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
8742 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
8743 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
8747 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
8750 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
8751 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
8753 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
8754 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
8755 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
8756 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
8760 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
8763 #endif /* defined(_AMD64_) */
8768 * IN OUT PULONG_PTR Address,
8769 * IN ULONG_PTR Value);
8771 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
8773 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
8780 RtlTimeFieldsToTime(
8781 IN PTIME_FIELDS TimeFields
,
8782 IN PLARGE_INTEGER Time
);
8787 RtlTimeToTimeFields(
8788 IN PLARGE_INTEGER Time
,
8789 IN PTIME_FIELDS TimeFields
);
8800 RtlUlonglongByteSwap(
8801 IN ULONGLONG Source
);
8806 RtlUnicodeStringToAnsiString(
8807 IN OUT PANSI_STRING DestinationString
,
8808 IN PCUNICODE_STRING SourceString
,
8809 IN BOOLEAN AllocateDestinationString
);
8814 RtlxUnicodeStringToAnsiSize(
8815 IN PCUNICODE_STRING UnicodeString
);
8817 #define RtlUnicodeStringToAnsiSize(String) ( \
8818 NLS_MB_CODE_PAGE_TAG ? \
8819 RtlxUnicodeStringToAnsiSize(String) : \
8820 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
8826 RtlUnicodeStringToInteger(
8827 IN PCUNICODE_STRING String
,
8828 IN ULONG Base OPTIONAL
,
8834 RtlUpcaseUnicodeChar(
8835 IN WCHAR SourceCharacter
);
8846 RtlValidRelativeSecurityDescriptor(
8847 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
8848 IN ULONG SecurityDescriptorLength
,
8849 IN SECURITY_INFORMATION RequiredInformation
);
8854 RtlValidSecurityDescriptor(
8855 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8860 RtlWriteRegistryValue(
8861 IN ULONG RelativeTo
,
8863 IN PCWSTR ValueName
,
8866 IN ULONG ValueLength
);
8869 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8872 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
8876 RtlPrefetchMemoryNonTemporal(
8882 #if (NTDDI_VERSION >= NTDDI_WINXP)
8890 PRTL_BITMAP BitMapHeader
,
8896 RtlDowncaseUnicodeChar(
8897 IN WCHAR SourceCharacter
);
8903 PRTL_BITMAP BitMapHeader
,
8910 IN PRTL_BITMAP BitMapHeader
,
8911 IN ULONG BitNumber
);
8916 RtlHashUnicodeString(
8917 IN CONST UNICODE_STRING
*String
,
8918 IN BOOLEAN CaseInSensitive
,
8919 IN ULONG HashAlgorithm
,
8920 OUT PULONG HashValue
);
8923 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
8925 #if (NTDDI_VERSION >= NTDDI_VISTA)
8932 RtlNumberOfSetBitsUlongPtr(
8933 IN ULONG_PTR Target
);
8938 RtlIoDecodeMemIoResource(
8939 IN
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
8940 OUT PULONGLONG Alignment OPTIONAL
,
8941 OUT PULONGLONG MinimumAddress OPTIONAL
,
8942 OUT PULONGLONG MaximumAddress OPTIONAL
);
8947 RtlIoEncodeMemIoResource(
8948 IN
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
8950 IN ULONGLONG Length
,
8951 IN ULONGLONG Alignment
,
8952 IN ULONGLONG MinimumAddress
,
8953 IN ULONGLONG MaximumAddress
);
8958 RtlCmDecodeMemIoResource(
8959 IN
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
8960 OUT PULONGLONG Start OPTIONAL
);
8965 RtlFindClosestEncodableLength(
8966 IN ULONGLONG SourceLength
,
8967 OUT PULONGLONG TargetLength
);
8972 RtlCmEncodeMemIoResource(
8973 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
8975 IN ULONGLONG Length
,
8976 IN ULONGLONG Start
);
8979 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8981 #if (NTDDI_VERSION >= NTDDI_WIN7)
8989 OUT PCHAR UTF8StringDestination
,
8990 IN ULONG UTF8StringMaxByteCount
,
8991 OUT PULONG UTF8StringActualByteCount
,
8992 IN PCWCH UnicodeStringSource
,
8993 IN ULONG UnicodeStringByteCount
);
8999 OUT PWSTR UnicodeStringDestination
,
9000 IN ULONG UnicodeStringMaxByteCount
,
9001 OUT PULONG UnicodeStringActualByteCount
,
9002 IN PCCH UTF8StringSource
,
9003 IN ULONG UTF8StringByteCount
);
9008 RtlGetEnabledExtendedFeatures(
9009 IN ULONG64 FeatureMask
);
9012 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9015 #if !defined(MIDL_PASS)
9016 /* inline funftions */
9017 //DECLSPEC_DEPRECATED_DDK_WINXP
9021 RtlConvertLongToLargeInteger(
9022 IN LONG SignedInteger
)
9025 ret
.QuadPart
= SignedInteger
;
9029 //DECLSPEC_DEPRECATED_DDK_WINXP
9033 RtlConvertUlongToLargeInteger(
9034 IN ULONG UnsignedInteger
)
9037 ret
.QuadPart
= UnsignedInteger
;
9041 //DECLSPEC_DEPRECATED_DDK_WINXP
9045 RtlLargeIntegerShiftLeft(
9046 IN LARGE_INTEGER LargeInteger
,
9047 IN CCHAR ShiftCount
)
9049 LARGE_INTEGER Result
;
9051 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
9055 //DECLSPEC_DEPRECATED_DDK_WINXP
9059 RtlLargeIntegerShiftRight(
9060 IN LARGE_INTEGER LargeInteger
,
9061 IN CCHAR ShiftCount
)
9063 LARGE_INTEGER Result
;
9065 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
9069 //DECLSPEC_DEPRECATED_DDK
9073 RtlEnlargedUnsignedDivide(
9074 IN ULARGE_INTEGER Dividend
,
9076 IN OUT PULONG Remainder
)
9079 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9080 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
9083 //DECLSPEC_DEPRECATED_DDK
9087 RtlLargeIntegerNegate(
9088 IN LARGE_INTEGER Subtrahend
)
9090 LARGE_INTEGER Difference
;
9092 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
9096 //DECLSPEC_DEPRECATED_DDK
9100 RtlLargeIntegerSubtract(
9101 IN LARGE_INTEGER Minuend
,
9102 IN LARGE_INTEGER Subtrahend
)
9104 LARGE_INTEGER Difference
;
9106 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
9110 //DECLSPEC_DEPRECATED_DDK
9114 RtlEnlargedUnsignedMultiply(
9115 IN ULONG Multiplicand
,
9116 IN ULONG Multiplier
)
9119 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9123 //DECLSPEC_DEPRECATED_DDK
9127 RtlEnlargedIntegerMultiply(
9128 IN LONG Multiplicand
,
9132 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9138 RtlInitEmptyAnsiString(
9139 OUT PANSI_STRING AnsiString
,
9141 IN USHORT BufferSize
)
9143 AnsiString
->Length
= 0;
9144 AnsiString
->MaximumLength
= BufferSize
;
9145 AnsiString
->Buffer
= Buffer
;
9150 RtlInitEmptyUnicodeString(
9151 OUT PUNICODE_STRING UnicodeString
,
9153 IN USHORT BufferSize
)
9155 UnicodeString
->Length
= 0;
9156 UnicodeString
->MaximumLength
= BufferSize
;
9157 UnicodeString
->Buffer
= Buffer
;
9160 #if defined(_AMD64_) || defined(_IA64_)
9166 RtlExtendedIntegerMultiply(
9167 IN LARGE_INTEGER Multiplicand
,
9171 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
9178 RtlExtendedLargeIntegerDivide(
9179 IN LARGE_INTEGER Dividend
,
9181 OUT PULONG Remainder OPTIONAL
)
9184 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
9186 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9192 #endif /* defined(_AMD64_) || defined(_IA64_) */
9195 #if defined(_AMD64_)
9197 #define MultiplyHigh __mulh
9198 #define UnsignedMultiplyHigh __umulh
9200 //DECLSPEC_DEPRECATED_DDK
9204 RtlExtendedMagicDivide(
9205 IN LARGE_INTEGER Dividend
,
9206 IN LARGE_INTEGER MagicDivisor
,
9207 IN CCHAR ShiftCount
)
9212 Pos
= (Dividend
.QuadPart
>= 0);
9213 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
9214 MagicDivisor
.QuadPart
);
9215 ret64
>>= ShiftCount
;
9216 ret
.QuadPart
= Pos
? ret64
: -ret64
;
9221 //DECLSPEC_DEPRECATED_DDK
9226 IN LARGE_INTEGER Addend1
,
9227 IN LARGE_INTEGER Addend2
)
9230 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
9235 * RtlLargeIntegerAnd(
9236 * IN OUT LARGE_INTEGER Result,
9237 * IN LARGE_INTEGER Source,
9238 * IN LARGE_INTEGER Mask);
9240 #define RtlLargeIntegerAnd(Result, Source, Mask) \
9241 Result.QuadPart = Source.QuadPart & Mask.QuadPart
9243 //DECLSPEC_DEPRECATED_DDK
9247 RtlLargeIntegerArithmeticShift(
9248 IN LARGE_INTEGER LargeInteger
,
9249 IN CCHAR ShiftCount
)
9252 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
9257 * RtlLargeIntegerEqualTo(
9258 * IN LARGE_INTEGER Operand1,
9259 * IN LARGE_INTEGER Operand2);
9261 #define RtlLargeIntegerEqualTo(X,Y) \
9262 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
9266 RtlSecureZeroMemory(
9270 volatile char* vptr
= (volatile char*)Pointer
;
9271 #if defined(_M_AMD64)
9272 __stosb((PUCHAR
)vptr
, 0, Size
);
9274 char * endptr
= (char *)vptr
+ Size
;
9275 while (vptr
< endptr
) {
9282 #if defined(_M_AMD64)
9286 IN PRTL_BITMAP BitMapHeader
,
9287 IN ULONG BitPosition
)
9289 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
9292 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
9293 #endif /* defined(_M_AMD64) */
9295 #define RtlLargeIntegerGreaterThan(X,Y) ( \
9296 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
9297 ((X).HighPart > (Y).HighPart) \
9300 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
9301 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
9302 ((X).HighPart > (Y).HighPart) \
9305 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
9306 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
9309 #define RtlLargeIntegerLessThan(X,Y) ( \
9310 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
9311 ((X).HighPart < (Y).HighPart) \
9314 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
9315 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
9316 ((X).HighPart < (Y).HighPart) \
9319 #define RtlLargeIntegerGreaterThanZero(X) ( \
9320 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
9321 ((X).HighPart > 0 ) \
9324 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
9326 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
9328 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
9330 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
9332 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
9334 #endif /* !defined(MIDL_PASS) */
9336 /* Byte Swap Functions */
9337 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
9338 ((defined(_M_AMD64) || defined(_M_IA64)) \
9339 && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
9341 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
9342 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
9343 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
9349 #define ASSERT(exp) \
9351 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
9353 #define ASSERTMSG(msg, exp) \
9355 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
9357 #define RTL_SOFT_ASSERT(exp) \
9359 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
9361 #define RTL_SOFT_ASSERTMSG(msg, exp) \
9363 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
9365 #define RTL_VERIFY(exp) ASSERT(exp)
9366 #define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
9368 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
9369 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
9371 #if defined(_MSC_VER)
9373 #define NT_ASSERT(exp) \
9375 (__annotation(L"Debug", L"AssertFail", L#exp), \
9376 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9378 #define NT_ASSERTMSG(msg, exp) \
9380 (__annotation(L"Debug", L"AssertFail", L##msg), \
9381 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9383 #define NT_ASSERTMSGW(msg, exp) \
9385 (__annotation(L"Debug", L"AssertFail", msg), \
9386 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9388 #define NT_VERIFY NT_ASSERT
9389 #define NT_VERIFYMSG NT_ASSERTMSG
9390 #define NT_VERIFYMSGW NT_ASSERTMSGW
9394 /* GCC doesn't support __annotation (nor PDB) */
9395 #define NT_ASSERT(exp) \
9396 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
9398 #define NT_ASSERTMSG NT_ASSERT
9399 #define NT_ASSERTMSGW NT_ASSERT
9405 #define ASSERT(exp) ((VOID) 0)
9406 #define ASSERTMSG(msg, exp) ((VOID) 0)
9408 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
9409 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
9411 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
9412 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
9414 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
9415 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
9417 #define NT_ASSERT(exp) ((VOID)0)
9418 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
9419 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
9421 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
9422 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
9423 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
9427 #define InitializeListHead32(ListHead) (\
9428 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
9430 #if !defined(_WINBASE_)
9432 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
9436 InitializeSListHead(
9437 OUT PSLIST_HEADER SListHead
);
9443 InitializeSListHead(
9444 OUT PSLIST_HEADER SListHead
)
9447 ULONG64 FeatureBits
;
9451 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
9452 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
9455 RtlZeroMemory(SListHead
, sizeof(SLIST_HEADER
));
9457 FeatureBits
= __getReg(CV_IA64_CPUID4
);
9458 if ((FeatureBits
& KF_16BYTE_INSTR
) != 0) {
9459 SListHead
->Header16
.HeaderType
= 1;
9460 SListHead
->Header16
.Init
= 1;
9469 #define InterlockedPopEntrySList(Head) \
9470 ExpInterlockedPopEntrySList(Head)
9472 #define InterlockedPushEntrySList(Head, Entry) \
9473 ExpInterlockedPushEntrySList(Head, Entry)
9475 #define InterlockedFlushSList(Head) \
9476 ExpInterlockedFlushSList(Head)
9478 #define QueryDepthSList(Head) \
9479 ExQueryDepthSList(Head)
9481 #else /* !defined(_WIN64) */
9486 InterlockedPopEntrySList(
9487 IN PSLIST_HEADER ListHead
);
9492 InterlockedPushEntrySList(
9493 IN PSLIST_HEADER ListHead
,
9494 IN PSLIST_ENTRY ListEntry
);
9496 #define InterlockedFlushSList(ListHead) \
9497 ExInterlockedFlushSList(ListHead)
9499 #define QueryDepthSList(Head) \
9500 ExQueryDepthSList(Head)
9502 #endif /* !defined(_WIN64) */
9504 #endif /* !defined(_WINBASE_) */
9506 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
9507 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
9508 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
9509 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
9510 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
9511 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
9512 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
9513 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
9514 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
9515 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
9516 (PCONTEXT_EX)(Context + 1), \
9520 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
9524 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
9527 #ifndef RtlIsNtDdiVersionAvailable
9528 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
9531 #ifndef RtlIsServicePackVersionInstalled
9532 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
9535 #define RtlInterlockedSetBits(Flags, Flag) \
9536 InterlockedOr((PLONG)(Flags), Flag)
9538 #define RtlInterlockedAndBits(Flags, Flag) \
9539 InterlockedAnd((PLONG)(Flags), Flag)
9541 #define RtlInterlockedClearBits(Flags, Flag) \
9542 RtlInterlockedAndBits(Flags, ~(Flag))
9544 #define RtlInterlockedXorBits(Flags, Flag) \
9545 InterlockedXor(Flags, Flag)
9547 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
9548 (VOID) RtlInterlockedSetBits(Flags, Flag)
9550 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
9551 (VOID) RtlInterlockedAndBits(Flags, Flag)
9553 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
9554 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
9557 /******************************************************************************
9558 * Kernel Functions *
9559 ******************************************************************************/
9564 KeGetCurrentIrql(VOID
);
9578 IN OUT PRKEVENT Event
);
9580 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9584 #if defined(_NTDDK_) || defined(_NTIFS_)
9589 IN CONST VOID
*Address
, /* CONST is added */
9591 IN ULONG Alignment
);
9592 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
9600 IN ULONG Alignment
);
9603 #if defined(SINGLE_GROUP_LEGACY_API)
9608 KeRevertToUserAffinityThread(VOID
);
9613 KeSetSystemAffinityThread(
9614 IN KAFFINITY Affinity
);
9619 KeSetTargetProcessorDpc(
9626 KeQueryActiveProcessors(VOID
);
9629 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
9631 #if !defined(_M_AMD64)
9636 KeQueryInterruptTime(VOID
);
9642 OUT PLARGE_INTEGER CurrentTime
);
9644 #endif /* !_M_AMD64 */
9646 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
9650 KeInitializeSpinLock(
9651 IN PKSPIN_LOCK SpinLock
);
9655 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
9657 /* Clear the lock */
9667 IN ULONG BugCheckCode
,
9668 IN ULONG_PTR BugCheckParameter1
,
9669 IN ULONG_PTR BugCheckParameter2
,
9670 IN ULONG_PTR BugCheckParameter3
,
9671 IN ULONG_PTR BugCheckParameter4
);
9682 KeDelayExecutionThread(
9683 IN KPROCESSOR_MODE WaitMode
,
9684 IN BOOLEAN Alertable
,
9685 IN PLARGE_INTEGER Interval
);
9690 KeDeregisterBugCheckCallback(
9691 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
9696 KeEnterCriticalRegion(VOID
);
9701 KeInitializeDeviceQueue(
9702 OUT PKDEVICE_QUEUE DeviceQueue
);
9709 IN PKDEFERRED_ROUTINE DeferredRoutine
,
9710 IN PVOID DeferredContext OPTIONAL
);
9722 KeInitializeSemaphore(
9723 OUT PRKSEMAPHORE Semaphore
,
9736 KeInitializeTimerEx(
9738 IN TIMER_TYPE Type
);
9743 KeInsertByKeyDeviceQueue(
9744 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9745 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
9751 KeInsertDeviceQueue(
9752 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9753 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9760 IN PVOID SystemArgument1 OPTIONAL
,
9761 IN PVOID SystemArgument2 OPTIONAL
);
9766 KeLeaveCriticalRegion(VOID
);
9771 KeQueryPerformanceCounter(
9772 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
9777 KeQueryPriorityThread(
9778 IN PRKTHREAD Thread
);
9783 KeQueryTimeIncrement(VOID
);
9800 KeReadStateSemaphore(
9801 IN PRKSEMAPHORE Semaphore
);
9812 KeRegisterBugCheckCallback(
9813 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
9814 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
9817 IN PUCHAR Component
);
9823 IN OUT PRKMUTEX Mutex
,
9830 IN OUT PRKSEMAPHORE Semaphore
,
9831 IN KPRIORITY Increment
,
9836 PKDEVICE_QUEUE_ENTRY
9838 KeRemoveByKeyDeviceQueue(
9839 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9843 PKDEVICE_QUEUE_ENTRY
9845 KeRemoveDeviceQueue(
9846 IN OUT PKDEVICE_QUEUE DeviceQueue
);
9851 KeRemoveEntryDeviceQueue(
9852 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9853 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9865 IN OUT PRKEVENT Event
);
9871 IN OUT PRKEVENT Event
,
9872 IN KPRIORITY Increment
,
9880 IN KDPC_IMPORTANCE Importance
);
9885 KeSetPriorityThread(
9886 IN OUT PKTHREAD Thread
,
9887 IN KPRIORITY Priority
);
9893 IN OUT PKTIMER Timer
,
9894 IN LARGE_INTEGER DueTime
,
9895 IN PKDPC Dpc OPTIONAL
);
9901 IN OUT PKTIMER Timer
,
9902 IN LARGE_INTEGER DueTime
,
9903 IN LONG Period OPTIONAL
,
9904 IN PKDPC Dpc OPTIONAL
);
9909 KeStallExecutionProcessor(
9910 IN ULONG MicroSeconds
);
9915 KeSynchronizeExecution(
9916 IN OUT PKINTERRUPT Interrupt
,
9917 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
9918 IN PVOID SynchronizeContext OPTIONAL
);
9923 KeWaitForMultipleObjects(
9926 IN WAIT_TYPE WaitType
,
9927 IN KWAIT_REASON WaitReason
,
9928 IN KPROCESSOR_MODE WaitMode
,
9929 IN BOOLEAN Alertable
,
9930 IN PLARGE_INTEGER Timeout OPTIONAL
,
9931 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
9933 #define KeWaitForMutexObject KeWaitForSingleObject
9938 KeWaitForSingleObject(
9940 IN KWAIT_REASON WaitReason
,
9941 IN KPROCESSOR_MODE WaitMode
,
9942 IN BOOLEAN Alertable
,
9943 IN PLARGE_INTEGER Timeout OPTIONAL
);
9945 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9947 #if (NTDDI_VERSION >= NTDDI_WINXP)
9952 KeAcquireInStackQueuedSpinLock(
9953 IN OUT PKSPIN_LOCK SpinLock
,
9954 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
9959 KeAcquireInStackQueuedSpinLockAtDpcLevel(
9960 IN OUT PKSPIN_LOCK SpinLock
,
9961 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
9966 KeAcquireInterruptSpinLock(
9967 IN OUT PKINTERRUPT Interrupt
);
9972 KeAreApcsDisabled(VOID
);
9977 KeGetRecommendedSharedDataAlignment(VOID
);
9982 KeQueryRuntimeThread(
9984 OUT PULONG UserTime
);
9989 KeReleaseInStackQueuedSpinLockFromDpcLevel(
9990 IN PKLOCK_QUEUE_HANDLE LockHandle
);
9995 KeReleaseInterruptSpinLock(
9996 IN OUT PKINTERRUPT Interrupt
,
10000 PKDEVICE_QUEUE_ENTRY
10002 KeRemoveByKeyDeviceQueueIfBusy(
10003 IN OUT PKDEVICE_QUEUE DeviceQueue
,
10006 _DECL_HAL_KE_IMPORT
10009 KeReleaseInStackQueuedSpinLock(
10010 IN PKLOCK_QUEUE_HANDLE LockHandle
);
10012 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10014 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
10019 KeDeregisterBugCheckReasonCallback(
10020 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
10025 KeRegisterBugCheckReasonCallback(
10026 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
10027 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
10028 IN KBUGCHECK_CALLBACK_REASON Reason
,
10029 IN PUCHAR Component
);
10031 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
10033 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
10037 KeFlushQueuedDpcs(VOID
);
10038 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
10040 #if (NTDDI_VERSION >= NTDDI_WS03)
10045 KeRegisterNmiCallback(
10046 IN PNMI_CALLBACK CallbackRoutine
,
10047 IN PVOID Context OPTIONAL
);
10052 KeDeregisterNmiCallback(
10058 KeInitializeThreadedDpc(
10060 IN PKDEFERRED_ROUTINE DeferredRoutine
,
10061 IN PVOID DeferredContext OPTIONAL
);
10067 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
10068 IN ULONG_PTR Context
);
10073 KeAcquireSpinLockForDpc(
10074 IN OUT PKSPIN_LOCK SpinLock
);
10079 KeReleaseSpinLockForDpc(
10080 IN OUT PKSPIN_LOCK SpinLock
,
10087 IN PKSPIN_LOCK SpinLock
);
10089 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
10091 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10096 KeTryToAcquireSpinLockAtDpcLevel(
10097 IN OUT PKSPIN_LOCK SpinLock
);
10102 KeAreAllApcsDisabled(VOID
);
10107 KeAcquireGuardedMutex(
10108 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10113 KeAcquireGuardedMutexUnsafe(
10114 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10119 KeEnterGuardedRegion(VOID
);
10124 KeLeaveGuardedRegion(VOID
);
10129 KeInitializeGuardedMutex(
10130 OUT PKGUARDED_MUTEX GuardedMutex
);
10135 KeReleaseGuardedMutexUnsafe(
10136 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10141 KeReleaseGuardedMutex(
10142 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10147 KeTryToAcquireGuardedMutex(
10148 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10150 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
10152 #if (NTDDI_VERSION >= NTDDI_VISTA)
10156 KeAcquireInStackQueuedSpinLockForDpc(
10157 IN OUT PKSPIN_LOCK SpinLock
,
10158 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
10163 KeReleaseInStackQueuedSpinLockForDpc(
10164 IN PKLOCK_QUEUE_HANDLE LockHandle
);
10169 KeQueryDpcWatchdogInformation(
10170 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
10172 #if defined(SINGLE_GROUP_LEGACY_API)
10177 KeSetSystemAffinityThreadEx(
10178 IN KAFFINITY Affinity
);
10183 KeRevertToUserAffinityThreadEx(
10184 IN KAFFINITY Affinity
);
10189 KeQueryActiveProcessorCount(
10190 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
10195 KeQueryMaximumProcessorCount(VOID
);
10198 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10200 #if (NTDDI_VERSION >= NTDDI_WS08)
10203 KeRegisterProcessorChangeCallback(
10204 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
10205 IN PVOID CallbackContext OPTIONAL
,
10209 KeDeregisterProcessorChangeCallback(
10210 IN PVOID CallbackHandle
);
10212 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
10214 #if (NTDDI_VERSION >= NTDDI_WIN7)
10219 KeQueryTotalCycleTimeProcess(
10220 IN OUT PKPROCESS Process
,
10221 OUT PULONG64 CycleTimeStamp
);
10225 KeQueryTotalCycleTimeThread(
10226 IN OUT PKTHREAD Thread
,
10227 OUT PULONG64 CycleTimeStamp
);
10232 KeSetTargetProcessorDpcEx(
10234 IN PPROCESSOR_NUMBER ProcNumber
);
10239 KeSetSystemGroupAffinityThread(
10240 IN PGROUP_AFFINITY Affinity
,
10241 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
10246 KeRevertToUserGroupAffinityThread(
10247 IN PGROUP_AFFINITY PreviousAffinity
);
10252 KeSetCoalescableTimer(
10253 IN OUT PKTIMER Timer
,
10254 IN LARGE_INTEGER DueTime
,
10256 IN ULONG TolerableDelay
,
10257 IN PKDPC Dpc OPTIONAL
);
10262 KeQueryUnbiasedInterruptTime(VOID
);
10267 KeQueryActiveProcessorCountEx(
10268 IN USHORT GroupNumber
);
10273 KeQueryMaximumProcessorCountEx(
10274 IN USHORT GroupNumber
);
10279 KeQueryActiveGroupCount(VOID
);
10284 KeQueryMaximumGroupCount(VOID
);
10289 KeQueryGroupAffinity(
10290 IN USHORT GroupNumber
);
10295 KeGetCurrentProcessorNumberEx(
10296 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
10301 KeQueryNodeActiveAffinity(
10302 IN USHORT NodeNumber
,
10303 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
10304 OUT PUSHORT Count OPTIONAL
);
10309 KeQueryNodeMaximumProcessorCount(
10310 IN USHORT NodeNumber
);
10315 KeQueryHighestNodeNumber(VOID
);
10320 KeGetCurrentNodeNumber(VOID
);
10325 KeQueryLogicalProcessorRelationship(
10326 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
10327 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
10328 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
10329 IN OUT PULONG Length
);
10334 KeSaveExtendedProcessorState(
10336 OUT PXSTATE_SAVE XStateSave
);
10341 KeRestoreExtendedProcessorState(
10342 IN PXSTATE_SAVE XStateSave
);
10346 KeGetProcessorNumberFromIndex(
10347 IN ULONG ProcIndex
,
10348 OUT PPROCESSOR_NUMBER ProcNumber
);
10352 KeGetProcessorIndexFromNumber(
10353 IN PPROCESSOR_NUMBER ProcNumber
);
10355 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
10357 #if !defined(_IA64_)
10361 KeFlushWriteBuffer(VOID
);
10365 * KeInitializeCallbackRecord(
10366 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
10368 #define KeInitializeCallbackRecord(CallbackRecord) \
10369 CallbackRecord->State = BufferEmpty;
10373 #if (NTDDI_VERSION >= NTDDI_VISTA)
10374 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
10376 #define PAGED_ASSERT( exp ) ASSERT( exp )
10379 #define PAGED_CODE() { \
10380 if (KeGetCurrentIrql() > APC_LEVEL) { \
10381 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
10382 PAGED_ASSERT(FALSE); \
10388 #define PAGED_CODE()
10392 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
10394 /******************************************************************************
10395 * Memory manager Functions *
10396 ******************************************************************************/
10397 /* Alignment Macros */
10398 #define ALIGN_DOWN_BY(size, align) \
10399 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
10401 #define ALIGN_UP_BY(size, align) \
10402 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
10404 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
10405 ((PVOID)ALIGN_DOWN_BY(ptr, align))
10407 #define ALIGN_UP_POINTER_BY(ptr, align) \
10408 ((PVOID)ALIGN_UP_BY(ptr, align))
10410 #define ALIGN_DOWN(size, type) \
10411 ALIGN_DOWN_BY(size, sizeof(type))
10413 #define ALIGN_UP(size, type) \
10414 ALIGN_UP_BY(size, sizeof(type))
10416 #define ALIGN_DOWN_POINTER(ptr, type) \
10417 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
10419 #define ALIGN_UP_POINTER(ptr, type) \
10420 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
10422 #ifndef FIELD_OFFSET
10423 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
10427 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
10430 #define POOL_TAGGING 1
10433 #define IF_DEBUG if (TRUE)
10435 #define IF_DEBUG if (FALSE)
10442 #define BYTE_OFFSET(Va) \
10443 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
10449 #define BYTES_TO_PAGES(Size) \
10450 (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
10456 #define PAGE_ALIGN(Va) \
10457 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
10461 * IN ULONG_PTR Size)
10463 #define ROUND_TO_PAGES(Size) \
10464 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
10467 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
10471 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
10472 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
10473 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
10475 #define COMPUTE_PAGES_SPANNED(Va, Size) \
10476 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
10480 * MmGetMdlByteCount(
10483 #define MmGetMdlByteCount(_Mdl) \
10484 ((_Mdl)->ByteCount)
10488 * MmGetMdlByteOffset(
10491 #define MmGetMdlByteOffset(_Mdl) \
10492 ((_Mdl)->ByteOffset)
10494 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
10498 * MmGetMdlPfnArray(
10501 #define MmGetMdlPfnArray(_Mdl) \
10502 ((PPFN_NUMBER) ((_Mdl) + 1))
10506 * MmGetMdlVirtualAddress(
10509 #define MmGetMdlVirtualAddress(_Mdl) \
10510 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
10512 #define MmGetProcedureAddress(Address) (Address)
10514 /* PVOID MmGetSystemAddressForMdl(
10517 #define MmGetSystemAddressForMdl(Mdl) \
10518 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
10519 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
10520 ((Mdl)->MappedSystemVa) : \
10521 (MmMapLockedPages((Mdl), KernelMode)))
10524 * MmGetSystemAddressForMdlSafe(
10526 * IN MM_PAGE_PRIORITY Priority)
10528 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
10529 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
10530 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
10531 (_Mdl)->MappedSystemVa : \
10532 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
10533 KernelMode, MmCached, NULL, FALSE, (_Priority)))
10538 * IN PMDL MemoryDescriptorList,
10540 * IN SIZE_T Length)
10542 #define MmInitializeMdl(_MemoryDescriptorList, \
10546 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
10547 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
10548 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
10549 (_MemoryDescriptorList)->MdlFlags = 0; \
10550 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
10551 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
10552 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
10557 * MmPrepareMdlForReuse(
10560 #define MmPrepareMdlForReuse(_Mdl) \
10562 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
10563 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
10564 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
10565 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
10566 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
10570 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10575 MmAllocateContiguousMemory(
10576 IN SIZE_T NumberOfBytes
,
10577 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
10582 MmAllocateContiguousMemorySpecifyCache(
10583 IN SIZE_T NumberOfBytes
,
10584 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
10585 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
10586 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
10587 IN MEMORY_CACHING_TYPE CacheType
);
10592 MmAllocatePagesForMdl(
10593 IN PHYSICAL_ADDRESS LowAddress
,
10594 IN PHYSICAL_ADDRESS HighAddress
,
10595 IN PHYSICAL_ADDRESS SkipBytes
,
10596 IN SIZE_T TotalBytes
);
10601 MmBuildMdlForNonPagedPool(
10602 IN OUT PMDLX MemoryDescriptorList
);
10604 //DECLSPEC_DEPRECATED_DDK
10609 IN PMDL MemoryDescriptorList OPTIONAL
,
10616 MmFreeContiguousMemory(
10617 IN PVOID BaseAddress
);
10622 MmFreeContiguousMemorySpecifyCache(
10623 IN PVOID BaseAddress
,
10624 IN SIZE_T NumberOfBytes
,
10625 IN MEMORY_CACHING_TYPE CacheType
);
10630 MmFreePagesFromMdl(
10631 IN PMDLX MemoryDescriptorList
);
10636 MmGetSystemRoutineAddress(
10637 IN PUNICODE_STRING SystemRoutineName
);
10642 MmIsDriverVerifying(
10643 IN
struct _DRIVER_OBJECT
*DriverObject
);
10648 MmLockPagableDataSection(
10649 IN PVOID AddressWithinSection
);
10655 IN PHYSICAL_ADDRESS PhysicalAddress
,
10656 IN SIZE_T NumberOfBytes
,
10657 IN MEMORY_CACHING_TYPE CacheEnable
);
10663 IN PMDL MemoryDescriptorList
,
10664 IN KPROCESSOR_MODE AccessMode
);
10669 MmMapLockedPagesSpecifyCache(
10670 IN PMDLX MemoryDescriptorList
,
10671 IN KPROCESSOR_MODE AccessMode
,
10672 IN MEMORY_CACHING_TYPE CacheType
,
10673 IN PVOID BaseAddress OPTIONAL
,
10674 IN ULONG BugCheckOnFailure
,
10675 IN MM_PAGE_PRIORITY Priority
);
10680 MmPageEntireDriver(
10681 IN PVOID AddressWithinSection
);
10686 MmProbeAndLockPages(
10687 IN OUT PMDL MemoryDescriptorList
,
10688 IN KPROCESSOR_MODE AccessMode
,
10689 IN LOCK_OPERATION Operation
);
10694 MmQuerySystemSize(VOID
);
10699 MmResetDriverPaging(
10700 IN PVOID AddressWithinSection
);
10712 MmUnlockPagableImageSection(
10713 IN PVOID ImageSectionHandle
);
10719 IN OUT PMDL MemoryDescriptorList
);
10725 IN PVOID BaseAddress
,
10726 IN SIZE_T NumberOfBytes
);
10731 MmProbeAndLockProcessPages(
10732 IN OUT PMDL MemoryDescriptorList
,
10733 IN PEPROCESS Process
,
10734 IN KPROCESSOR_MODE AccessMode
,
10735 IN LOCK_OPERATION Operation
);
10740 MmUnmapLockedPages(
10741 IN PVOID BaseAddress
,
10742 IN PMDL MemoryDescriptorList
);
10747 MmAllocateContiguousMemorySpecifyCacheNode(
10748 IN SIZE_T NumberOfBytes
,
10749 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
10750 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
10751 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
10752 IN MEMORY_CACHING_TYPE CacheType
,
10753 IN NODE_REQUIREMENT PreferredNode
);
10755 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10757 #if (NTDDI_VERSION >= NTDDI_WINXP)
10764 IN ULONG NumberOfBytes
);
10769 MmAllocateMappingAddress(
10770 IN SIZE_T NumberOfBytes
,
10776 MmFreeMappingAddress(
10777 IN PVOID BaseAddress
,
10783 MmIsVerifierEnabled(
10784 OUT PULONG VerifierFlags
);
10789 MmMapLockedPagesWithReservedMapping(
10790 IN PVOID MappingAddress
,
10792 IN PMDL MemoryDescriptorList
,
10793 IN MEMORY_CACHING_TYPE CacheType
);
10798 MmProtectMdlSystemAddress(
10799 IN PMDL MemoryDescriptorList
,
10800 IN ULONG NewProtect
);
10805 MmUnmapReservedMapping(
10806 IN PVOID BaseAddress
,
10808 IN PMDL MemoryDescriptorList
);
10813 MmAddVerifierThunks(
10814 IN PVOID ThunkBuffer
,
10815 IN ULONG ThunkBufferSize
);
10817 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10819 #if (NTDDI_VERSION >= NTDDI_WS03)
10824 IN PHYSICAL_ADDRESS StartAddress
,
10825 IN SIZE_T NumberOfBytes
);
10828 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10832 MmAllocatePagesForMdlEx(
10833 IN PHYSICAL_ADDRESS LowAddress
,
10834 IN PHYSICAL_ADDRESS HighAddress
,
10835 IN PHYSICAL_ADDRESS SkipBytes
,
10836 IN SIZE_T TotalBytes
,
10837 IN MEMORY_CACHING_TYPE CacheType
,
10841 #if (NTDDI_VERSION >= NTDDI_VISTA)
10846 MmIsDriverVerifyingByAddress(
10847 IN PVOID AddressWithinSection
);
10850 /******************************************************************************
10851 * Security Manager Functions *
10852 ******************************************************************************/
10854 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10860 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
10861 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
10862 IN BOOLEAN SubjectContextLocked
,
10863 IN ACCESS_MASK DesiredAccess
,
10864 IN ACCESS_MASK PreviouslyGrantedAccess
,
10865 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
10866 IN PGENERIC_MAPPING GenericMapping
,
10867 IN KPROCESSOR_MODE AccessMode
,
10868 OUT PACCESS_MASK GrantedAccess
,
10869 OUT PNTSTATUS AccessStatus
);
10875 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
10876 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
10877 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
10878 IN BOOLEAN IsDirectoryObject
,
10879 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
10880 IN PGENERIC_MAPPING GenericMapping
,
10881 IN POOL_TYPE PoolType
);
10886 SeAssignSecurityEx(
10887 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
10888 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
10889 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
10890 IN GUID
*ObjectType OPTIONAL
,
10891 IN BOOLEAN IsDirectoryObject
,
10892 IN ULONG AutoInheritFlags
,
10893 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
10894 IN PGENERIC_MAPPING GenericMapping
,
10895 IN POOL_TYPE PoolType
);
10900 SeDeassignSecurity(
10901 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
10906 SeValidSecurityDescriptor(
10908 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
10913 SeObjectCreateSaclAccessBits(
10914 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
10919 SeReleaseSubjectContext(
10920 IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
);
10925 SeUnlockSubjectContext(
10926 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
10931 SeCaptureSubjectContext(
10932 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
);
10937 SeLockSubjectContext(
10938 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
10940 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10942 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10946 SeSetAuditParameter(
10947 IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters
,
10948 IN SE_ADT_PARAMETER_TYPE Type
,
10954 SeReportSecurityEvent(
10956 IN PUNICODE_STRING SourceName
,
10957 IN PSID UserSid OPTIONAL
,
10958 IN PSE_ADT_PARAMETER_ARRAY AuditParameters
);
10960 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
10962 #if (NTDDI_VERSION >= NTDDI_VISTA)
10967 SeComputeAutoInheritByObjectType(
10968 IN PVOID ObjectType
,
10969 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
10970 IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL
);
10972 #ifdef SE_NTFS_WORLD_CACHE
10976 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
10977 IN PGENERIC_MAPPING GenericMapping
,
10978 OUT PACCESS_MASK GrantedAccess
);
10979 #endif /* SE_NTFS_WORLD_CACHE */
10981 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10982 /******************************************************************************
10983 * Configuration Manager Functions *
10984 ******************************************************************************/
10986 #if (NTDDI_VERSION >= NTDDI_WINXP)
10990 CmRegisterCallback(
10991 IN PEX_CALLBACK_FUNCTION Function
,
10992 IN PVOID Context OPTIONAL
,
10993 OUT PLARGE_INTEGER Cookie
);
10998 CmUnRegisterCallback(
10999 IN LARGE_INTEGER Cookie
);
11002 #if (NTDDI_VERSION >= NTDDI_VISTA)
11007 CmRegisterCallbackEx(
11008 PEX_CALLBACK_FUNCTION Function
,
11009 PCUNICODE_STRING Altitude
,
11012 PLARGE_INTEGER Cookie
,
11018 CmGetCallbackVersion(
11019 OUT PULONG Major OPTIONAL
,
11020 OUT PULONG Minor OPTIONAL
);
11025 CmSetCallbackObjectContext(
11026 IN OUT PVOID Object
,
11027 IN PLARGE_INTEGER Cookie
,
11028 IN PVOID NewContext
,
11029 OUT PVOID
*OldContext OPTIONAL
);
11034 CmCallbackGetKeyObjectID(
11035 IN PLARGE_INTEGER Cookie
,
11037 OUT PULONG_PTR ObjectID OPTIONAL
,
11038 OUT PCUNICODE_STRING
*ObjectName OPTIONAL
);
11043 CmGetBoundTransaction(
11044 IN PLARGE_INTEGER Cookie
,
11047 #endif // NTDDI_VERSION >= NTDDI_VISTA
11050 /******************************************************************************
11051 * I/O Manager Functions *
11052 ******************************************************************************/
11057 * IoAcquireRemoveLock(
11058 * IN PIO_REMOVE_LOCK RemoveLock,
11059 * IN OPTIONAL PVOID Tag)
11062 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11063 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
11065 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11066 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
11071 * IoAdjustPagingPathCount(
11073 * IN BOOLEAN Increment)
11075 #define IoAdjustPagingPathCount(_Count, \
11080 InterlockedIncrement(_Count); \
11084 InterlockedDecrement(_Count); \
11088 #if !defined(_M_AMD64)
11092 READ_PORT_BUFFER_UCHAR(
11100 READ_PORT_BUFFER_ULONG(
11108 READ_PORT_BUFFER_USHORT(
11134 READ_REGISTER_BUFFER_UCHAR(
11135 IN PUCHAR Register
,
11142 READ_REGISTER_BUFFER_ULONG(
11143 IN PULONG Register
,
11150 READ_REGISTER_BUFFER_USHORT(
11151 IN PUSHORT Register
,
11158 READ_REGISTER_UCHAR(
11159 IN PUCHAR Register
);
11164 READ_REGISTER_ULONG(
11165 IN PULONG Register
);
11170 READ_REGISTER_USHORT(
11171 IN PUSHORT Register
);
11176 WRITE_PORT_BUFFER_UCHAR(
11184 WRITE_PORT_BUFFER_ULONG(
11192 WRITE_PORT_BUFFER_USHORT(
11221 WRITE_REGISTER_BUFFER_UCHAR(
11222 IN PUCHAR Register
,
11229 WRITE_REGISTER_BUFFER_ULONG(
11230 IN PULONG Register
,
11237 WRITE_REGISTER_BUFFER_USHORT(
11238 IN PUSHORT Register
,
11245 WRITE_REGISTER_UCHAR(
11246 IN PUCHAR Register
,
11252 WRITE_REGISTER_ULONG(
11253 IN PULONG Register
,
11259 WRITE_REGISTER_USHORT(
11260 IN PUSHORT Register
,
11267 READ_PORT_BUFFER_UCHAR(
11272 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11277 READ_PORT_BUFFER_ULONG(
11282 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11287 READ_PORT_BUFFER_USHORT(
11292 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11300 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
11308 return __indword((USHORT
)(ULONG_PTR
)Port
);
11316 return __inword((USHORT
)(ULONG_PTR
)Port
);
11321 READ_REGISTER_BUFFER_UCHAR(
11322 IN PUCHAR Register
,
11326 __movsb(Register
, Buffer
, Count
);
11331 READ_REGISTER_BUFFER_ULONG(
11332 IN PULONG Register
,
11336 __movsd(Register
, Buffer
, Count
);
11341 READ_REGISTER_BUFFER_USHORT(
11342 IN PUSHORT Register
,
11346 __movsw(Register
, Buffer
, Count
);
11351 READ_REGISTER_UCHAR(
11352 IN
volatile UCHAR
*Register
)
11359 READ_REGISTER_ULONG(
11360 IN
volatile ULONG
*Register
)
11367 READ_REGISTER_USHORT(
11368 IN
volatile USHORT
*Register
)
11375 WRITE_PORT_BUFFER_UCHAR(
11380 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11385 WRITE_PORT_BUFFER_ULONG(
11390 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11395 WRITE_PORT_BUFFER_USHORT(
11400 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11409 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
11418 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
11427 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
11432 WRITE_REGISTER_BUFFER_UCHAR(
11433 IN PUCHAR Register
,
11438 __movsb(Register
, Buffer
, Count
);
11439 InterlockedOr(&Synch
, 1);
11444 WRITE_REGISTER_BUFFER_ULONG(
11445 IN PULONG Register
,
11450 __movsd(Register
, Buffer
, Count
);
11451 InterlockedOr(&Synch
, 1);
11456 WRITE_REGISTER_BUFFER_USHORT(
11457 IN PUSHORT Register
,
11462 __movsw(Register
, Buffer
, Count
);
11463 InterlockedOr(&Synch
, 1);
11468 WRITE_REGISTER_UCHAR(
11469 IN
volatile UCHAR
*Register
,
11474 InterlockedOr(&Synch
, 1);
11479 WRITE_REGISTER_ULONG(
11480 IN
volatile ULONG
*Register
,
11485 InterlockedOr(&Synch
, 1);
11490 WRITE_REGISTER_USHORT(
11491 IN
volatile USHORT
*Register
,
11496 InterlockedOr(&Sync
, 1);
11500 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
11501 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
11503 #define DMA_MACROS_DEFINED
11507 IoAllocateAdapterChannel(
11508 IN PDMA_ADAPTER DmaAdapter
,
11509 IN PDEVICE_OBJECT DeviceObject
,
11510 IN ULONG NumberOfMapRegisters
,
11511 IN PDRIVER_CONTROL ExecutionRoutine
,
11514 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
11515 AllocateAdapterChannel
=
11516 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
11517 ASSERT(AllocateAdapterChannel
);
11518 return AllocateAdapterChannel(DmaAdapter
,
11520 NumberOfMapRegisters
,
11528 IoFlushAdapterBuffers(
11529 IN PDMA_ADAPTER DmaAdapter
,
11531 IN PVOID MapRegisterBase
,
11532 IN PVOID CurrentVa
,
11534 IN BOOLEAN WriteToDevice
)
11536 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
11537 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
11538 ASSERT(FlushAdapterBuffers
);
11539 return FlushAdapterBuffers(DmaAdapter
,
11550 IoFreeAdapterChannel(
11551 IN PDMA_ADAPTER DmaAdapter
)
11553 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
11554 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
11555 ASSERT(FreeAdapterChannel
);
11556 FreeAdapterChannel(DmaAdapter
);
11562 IoFreeMapRegisters(
11563 IN PDMA_ADAPTER DmaAdapter
,
11564 IN PVOID MapRegisterBase
,
11565 IN ULONG NumberOfMapRegisters
)
11567 PFREE_MAP_REGISTERS FreeMapRegisters
;
11568 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
11569 ASSERT(FreeMapRegisters
);
11570 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
11577 IN PDMA_ADAPTER DmaAdapter
,
11579 IN PVOID MapRegisterBase
,
11580 IN PVOID CurrentVa
,
11581 IN OUT PULONG Length
,
11582 IN BOOLEAN WriteToDevice
)
11584 PMAP_TRANSFER MapTransfer
;
11586 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
11587 ASSERT(MapTransfer
);
11588 return MapTransfer(DmaAdapter
,
11597 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11602 IoAcquireCancelSpinLock(
11608 IoAcquireRemoveLockEx(
11609 IN PIO_REMOVE_LOCK RemoveLock
,
11610 IN PVOID Tag OPTIONAL
,
11613 IN ULONG RemlockSize
);
11617 IoAllocateDriverObjectExtension(
11618 IN PDRIVER_OBJECT DriverObject
,
11619 IN PVOID ClientIdentificationAddress
,
11620 IN ULONG DriverObjectExtensionSize
,
11621 OUT PVOID
*DriverObjectExtension
);
11626 IoAllocateErrorLogEntry(
11628 IN UCHAR EntrySize
);
11634 IN CCHAR StackSize
,
11635 IN BOOLEAN ChargeQuota
);
11641 IN PVOID VirtualAddress OPTIONAL
,
11643 IN BOOLEAN SecondaryBuffer
,
11644 IN BOOLEAN ChargeQuota
,
11645 IN OUT PIRP Irp OPTIONAL
);
11650 IoAllocateWorkItem(
11651 IN PDEVICE_OBJECT DeviceObject
);
11657 IN PDEVICE_OBJECT SourceDevice
,
11658 IN PUNICODE_STRING TargetDevice
,
11659 OUT PDEVICE_OBJECT
*AttachedDevice
);
11664 IoAttachDeviceToDeviceStack(
11665 IN PDEVICE_OBJECT SourceDevice
,
11666 IN PDEVICE_OBJECT TargetDevice
);
11671 IoBuildAsynchronousFsdRequest(
11672 IN ULONG MajorFunction
,
11673 IN PDEVICE_OBJECT DeviceObject
,
11674 IN OUT PVOID Buffer OPTIONAL
,
11675 IN ULONG Length OPTIONAL
,
11676 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
11677 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
11682 IoBuildDeviceIoControlRequest(
11683 IN ULONG IoControlCode
,
11684 IN PDEVICE_OBJECT DeviceObject
,
11685 IN PVOID InputBuffer OPTIONAL
,
11686 IN ULONG InputBufferLength
,
11687 OUT PVOID OutputBuffer OPTIONAL
,
11688 IN ULONG OutputBufferLength
,
11689 IN BOOLEAN InternalDeviceIoControl
,
11691 OUT PIO_STATUS_BLOCK IoStatusBlock
);
11698 IN OUT PMDL TargetMdl
,
11699 IN PVOID VirtualAddress
,
11705 IoBuildSynchronousFsdRequest(
11706 IN ULONG MajorFunction
,
11707 IN PDEVICE_OBJECT DeviceObject
,
11708 IN OUT PVOID Buffer OPTIONAL
,
11709 IN ULONG Length OPTIONAL
,
11710 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
11712 OUT PIO_STATUS_BLOCK IoStatusBlock
);
11718 IN PDEVICE_OBJECT DeviceObject
,
11720 #define IoCallDriver IofCallDriver
11725 IofCompleteRequest(
11727 IN CCHAR PriorityBoost
);
11728 #define IoCompleteRequest IofCompleteRequest
11739 IoCheckShareAccess(
11740 IN ACCESS_MASK DesiredAccess
,
11741 IN ULONG DesiredShareAccess
,
11742 IN OUT PFILE_OBJECT FileObject
,
11743 IN OUT PSHARE_ACCESS ShareAccess
,
11744 IN BOOLEAN Update
);
11749 IofCompleteRequest(
11751 IN CCHAR PriorityBoost
);
11756 IoConnectInterrupt(
11757 OUT PKINTERRUPT
*InterruptObject
,
11758 IN PKSERVICE_ROUTINE ServiceRoutine
,
11759 IN PVOID ServiceContext OPTIONAL
,
11760 IN PKSPIN_LOCK SpinLock OPTIONAL
,
11763 IN KIRQL SynchronizeIrql
,
11764 IN KINTERRUPT_MODE InterruptMode
,
11765 IN BOOLEAN ShareVector
,
11766 IN KAFFINITY ProcessorEnableMask
,
11767 IN BOOLEAN FloatingSave
);
11773 IN PDRIVER_OBJECT DriverObject
,
11774 IN ULONG DeviceExtensionSize
,
11775 IN PUNICODE_STRING DeviceName OPTIONAL
,
11776 IN DEVICE_TYPE DeviceType
,
11777 IN ULONG DeviceCharacteristics
,
11778 IN BOOLEAN Exclusive
,
11779 OUT PDEVICE_OBJECT
*DeviceObject
);
11785 OUT PHANDLE FileHandle
,
11786 IN ACCESS_MASK DesiredAccess
,
11787 IN POBJECT_ATTRIBUTES ObjectAttributes
,
11788 OUT PIO_STATUS_BLOCK IoStatusBlock
,
11789 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
11790 IN ULONG FileAttributes
,
11791 IN ULONG ShareAccess
,
11792 IN ULONG Disposition
,
11793 IN ULONG CreateOptions
,
11794 IN PVOID EaBuffer OPTIONAL
,
11796 IN CREATE_FILE_TYPE CreateFileType
,
11797 IN PVOID InternalParameters OPTIONAL
,
11803 IoCreateNotificationEvent(
11804 IN PUNICODE_STRING EventName
,
11805 OUT PHANDLE EventHandle
);
11810 IoCreateSymbolicLink(
11811 IN PUNICODE_STRING SymbolicLinkName
,
11812 IN PUNICODE_STRING DeviceName
);
11817 IoCreateSynchronizationEvent(
11818 IN PUNICODE_STRING EventName
,
11819 OUT PHANDLE EventHandle
);
11824 IoCreateUnprotectedSymbolicLink(
11825 IN PUNICODE_STRING SymbolicLinkName
,
11826 IN PUNICODE_STRING DeviceName
);
11832 IN PDEVICE_OBJECT DeviceObject
);
11837 IoDeleteSymbolicLink(
11838 IN PUNICODE_STRING SymbolicLinkName
);
11844 IN OUT PDEVICE_OBJECT TargetDevice
);
11849 IoDisconnectInterrupt(
11850 IN PKINTERRUPT InterruptObject
);
11868 IN PIO_WORKITEM IoWorkItem
);
11873 IoGetAttachedDevice(
11874 IN PDEVICE_OBJECT DeviceObject
);
11879 IoGetAttachedDeviceReference(
11880 IN PDEVICE_OBJECT DeviceObject
);
11885 IoGetBootDiskInformation(
11886 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
11892 IoGetDeviceInterfaceAlias(
11893 IN PUNICODE_STRING SymbolicLinkName
,
11894 IN CONST GUID
*AliasInterfaceClassGuid
,
11895 OUT PUNICODE_STRING AliasSymbolicLinkName
);
11900 IoGetCurrentProcess(VOID
);
11905 IoGetDeviceInterfaces(
11906 IN CONST GUID
*InterfaceClassGuid
,
11907 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
11909 OUT PWSTR
*SymbolicLinkList
);
11914 IoGetDeviceObjectPointer(
11915 IN PUNICODE_STRING ObjectName
,
11916 IN ACCESS_MASK DesiredAccess
,
11917 OUT PFILE_OBJECT
*FileObject
,
11918 OUT PDEVICE_OBJECT
*DeviceObject
);
11923 IoGetDeviceProperty(
11924 IN PDEVICE_OBJECT DeviceObject
,
11925 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
11926 IN ULONG BufferLength
,
11927 OUT PVOID PropertyBuffer
,
11928 OUT PULONG ResultLength
);
11934 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
11935 IN PDEVICE_DESCRIPTION DeviceDescription
,
11936 IN OUT PULONG NumberOfMapRegisters
);
11941 IoGetDriverObjectExtension(
11942 IN PDRIVER_OBJECT DriverObject
,
11943 IN PVOID ClientIdentificationAddress
);
11948 IoGetInitialStack(VOID
);
11953 IoGetRelatedDeviceObject(
11954 IN PFILE_OBJECT FileObject
);
11960 IN PIO_WORKITEM IoWorkItem
,
11961 IN PIO_WORKITEM_ROUTINE WorkerRoutine
,
11962 IN WORK_QUEUE_TYPE QueueType
,
11963 IN PVOID Context OPTIONAL
);
11970 IN USHORT PacketSize
,
11971 IN CCHAR StackSize
);
11976 IoInitializeRemoveLockEx(
11977 IN PIO_REMOVE_LOCK Lock
,
11978 IN ULONG AllocateTag
,
11979 IN ULONG MaxLockedMinutes
,
11980 IN ULONG HighWatermark
,
11981 IN ULONG RemlockSize
);
11987 IN PDEVICE_OBJECT DeviceObject
,
11988 IN PIO_TIMER_ROUTINE TimerRoutine
,
11989 IN PVOID Context OPTIONAL
);
11994 IoInvalidateDeviceRelations(
11995 IN PDEVICE_OBJECT DeviceObject
,
11996 IN DEVICE_RELATION_TYPE Type
);
12001 IoInvalidateDeviceState(
12002 IN PDEVICE_OBJECT PhysicalDeviceObject
);
12007 IoIsWdmVersionAvailable(
12008 IN UCHAR MajorVersion
,
12009 IN UCHAR MinorVersion
);
12014 IoOpenDeviceInterfaceRegistryKey(
12015 IN PUNICODE_STRING SymbolicLinkName
,
12016 IN ACCESS_MASK DesiredAccess
,
12017 OUT PHANDLE DeviceInterfaceKey
);
12022 IoOpenDeviceRegistryKey(
12023 IN PDEVICE_OBJECT DeviceObject
,
12024 IN ULONG DevInstKeyType
,
12025 IN ACCESS_MASK DesiredAccess
,
12026 OUT PHANDLE DevInstRegKey
);
12031 IoRegisterDeviceInterface(
12032 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12033 IN CONST GUID
*InterfaceClassGuid
,
12034 IN PUNICODE_STRING ReferenceString OPTIONAL
,
12035 OUT PUNICODE_STRING SymbolicLinkName
);
12040 IoRegisterPlugPlayNotification(
12041 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
12042 IN ULONG EventCategoryFlags
,
12043 IN PVOID EventCategoryData OPTIONAL
,
12044 IN PDRIVER_OBJECT DriverObject
,
12045 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
12046 IN OUT PVOID Context OPTIONAL
,
12047 OUT PVOID
*NotificationEntry
);
12052 IoRegisterShutdownNotification(
12053 IN PDEVICE_OBJECT DeviceObject
);
12058 IoReleaseCancelSpinLock(
12064 IoReleaseRemoveLockAndWaitEx(
12065 IN PIO_REMOVE_LOCK RemoveLock
,
12066 IN PVOID Tag OPTIONAL
,
12067 IN ULONG RemlockSize
);
12072 IoReleaseRemoveLockEx(
12073 IN PIO_REMOVE_LOCK RemoveLock
,
12074 IN PVOID Tag OPTIONAL
,
12075 IN ULONG RemlockSize
);
12080 IoRemoveShareAccess(
12081 IN PFILE_OBJECT FileObject
,
12082 IN OUT PSHARE_ACCESS ShareAccess
);
12087 IoReportTargetDeviceChange(
12088 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12089 IN PVOID NotificationStructure
);
12094 IoReportTargetDeviceChangeAsynchronous(
12095 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12096 IN PVOID NotificationStructure
,
12097 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
12098 IN PVOID Context OPTIONAL
);
12103 IoRequestDeviceEject(
12104 IN PDEVICE_OBJECT PhysicalDeviceObject
);
12111 IN NTSTATUS Status
);
12116 IoSetDeviceInterfaceState(
12117 IN PUNICODE_STRING SymbolicLinkName
,
12118 IN BOOLEAN Enable
);
12124 IN ACCESS_MASK DesiredAccess
,
12125 IN ULONG DesiredShareAccess
,
12126 IN OUT PFILE_OBJECT FileObject
,
12127 OUT PSHARE_ACCESS ShareAccess
);
12133 IN PDEVICE_OBJECT DeviceObject
,
12134 IN BOOLEAN Cancelable
);
12139 IoStartNextPacketByKey(
12140 IN PDEVICE_OBJECT DeviceObject
,
12141 IN BOOLEAN Cancelable
,
12148 IN PDEVICE_OBJECT DeviceObject
,
12150 IN PULONG Key OPTIONAL
,
12151 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
12157 IN PDEVICE_OBJECT DeviceObject
);
12163 IN PDEVICE_OBJECT DeviceObject
);
12168 IoUnregisterPlugPlayNotification(
12169 IN PVOID NotificationEntry
);
12174 IoUnregisterShutdownNotification(
12175 IN PDEVICE_OBJECT DeviceObject
);
12180 IoUpdateShareAccess(
12181 IN PFILE_OBJECT FileObject
,
12182 IN OUT PSHARE_ACCESS ShareAccess
);
12187 IoWMIAllocateInstanceIds(
12189 IN ULONG InstanceCount
,
12190 OUT ULONG
*FirstInstanceId
);
12195 IoWMIQuerySingleInstanceMultiple(
12196 IN PVOID
*DataBlockObjectList
,
12197 IN PUNICODE_STRING InstanceNames
,
12198 IN ULONG ObjectCount
,
12199 IN OUT ULONG
*InOutBufferSize
,
12200 OUT PVOID OutBuffer
);
12205 IoWMIRegistrationControl(
12206 IN PDEVICE_OBJECT DeviceObject
,
12212 IoWMISuggestInstanceName(
12213 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
12214 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
12215 IN BOOLEAN CombineNames
,
12216 OUT PUNICODE_STRING SuggestedInstanceName
);
12222 IN OUT PVOID WnodeEventItem
);
12227 IoWriteErrorLogEntry(
12233 IoGetTopLevelIrp(VOID
);
12238 IoRegisterLastChanceShutdownNotification(
12239 IN PDEVICE_OBJECT DeviceObject
);
12245 IN PIRP Irp OPTIONAL
);
12247 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12250 #if (NTDDI_VERSION >= NTDDI_WINXP)
12257 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
12258 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
12259 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
12260 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
12261 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
12262 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
12270 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
);
12277 IN PIO_CSQ_IRP_CONTEXT Context
);
12282 IoCsqRemoveNextIrp(
12284 IN PVOID PeekContext OPTIONAL
);
12289 IoForwardIrpSynchronously(
12290 IN PDEVICE_OBJECT DeviceObject
,
12293 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
12298 IoFreeErrorLogEntry(
12304 IoSetCompletionRoutineEx(
12305 IN PDEVICE_OBJECT DeviceObject
,
12307 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
12309 IN BOOLEAN InvokeOnSuccess
,
12310 IN BOOLEAN InvokeOnError
,
12311 IN BOOLEAN InvokeOnCancel
);
12315 IoSetStartIoAttributes(
12316 IN PDEVICE_OBJECT DeviceObject
,
12317 IN BOOLEAN DeferredStartIo
,
12318 IN BOOLEAN NonCancelable
);
12323 IoWMIDeviceObjectToInstanceName(
12324 IN PVOID DataBlockObject
,
12325 IN PDEVICE_OBJECT DeviceObject
,
12326 OUT PUNICODE_STRING InstanceName
);
12331 IoWMIExecuteMethod(
12332 IN PVOID DataBlockObject
,
12333 IN PUNICODE_STRING InstanceName
,
12335 IN ULONG InBufferSize
,
12336 IN OUT PULONG OutBufferSize
,
12337 IN OUT PUCHAR InOutBuffer
);
12342 IoWMIHandleToInstanceName(
12343 IN PVOID DataBlockObject
,
12344 IN HANDLE FileHandle
,
12345 OUT PUNICODE_STRING InstanceName
);
12351 IN GUID
*DataBlockGuid
,
12352 IN ULONG DesiredAccess
,
12353 OUT PVOID
*DataBlockObject
);
12359 IN PVOID DataBlockObject
,
12360 IN OUT ULONG
*InOutBufferSize
,
12361 OUT PVOID OutBuffer
);
12366 IoWMIQueryAllDataMultiple(
12367 IN PVOID
*DataBlockObjectList
,
12368 IN ULONG ObjectCount
,
12369 IN OUT ULONG
*InOutBufferSize
,
12370 OUT PVOID OutBuffer
);
12375 IoWMIQuerySingleInstance(
12376 IN PVOID DataBlockObject
,
12377 IN PUNICODE_STRING InstanceName
,
12378 IN OUT ULONG
*InOutBufferSize
,
12379 OUT PVOID OutBuffer
);
12384 IoWMISetNotificationCallback(
12385 IN OUT PVOID Object
,
12386 IN WMI_NOTIFICATION_CALLBACK Callback
,
12387 IN PVOID Context OPTIONAL
);
12392 IoWMISetSingleInstance(
12393 IN PVOID DataBlockObject
,
12394 IN PUNICODE_STRING InstanceName
,
12396 IN ULONG ValueBufferSize
,
12397 IN PVOID ValueBuffer
);
12402 IoWMISetSingleItem(
12403 IN PVOID DataBlockObject
,
12404 IN PUNICODE_STRING InstanceName
,
12405 IN ULONG DataItemId
,
12407 IN ULONG ValueBufferSize
,
12408 IN PVOID ValueBuffer
);
12409 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
12411 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
12415 IoValidateDeviceIoControlAccess(
12417 IN ULONG RequiredAccess
);
12420 #if (NTDDI_VERSION >= NTDDI_WS03)
12427 IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
12428 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
12429 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
12430 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
12431 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
12432 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
12440 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
,
12441 IN PVOID InsertContext OPTIONAL
);
12442 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
12445 #if (NTDDI_VERSION >= NTDDI_VISTA)
12450 IoGetBootDiskInformationLite(
12451 OUT PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
12456 IoCheckShareAccessEx(
12457 IN ACCESS_MASK DesiredAccess
,
12458 IN ULONG DesiredShareAccess
,
12459 IN OUT PFILE_OBJECT FileObject
,
12460 IN OUT PSHARE_ACCESS ShareAccess
,
12462 IN PBOOLEAN WritePermission
);
12467 IoConnectInterruptEx(
12468 IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
12473 IoDisconnectInterruptEx(
12474 IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
12478 IoWithinStackLimits(
12479 IN ULONG_PTR RegionStart
,
12480 IN SIZE_T RegionSize
);
12485 IoSetShareAccessEx(
12486 IN ACCESS_MASK DesiredAccess
,
12487 IN ULONG DesiredShareAccess
,
12488 IN OUT PFILE_OBJECT FileObject
,
12489 OUT PSHARE_ACCESS ShareAccess
,
12490 IN PBOOLEAN WritePermission
);
12494 IoSizeofWorkItem(VOID
);
12498 IoInitializeWorkItem(
12500 IN PIO_WORKITEM IoWorkItem
);
12504 IoUninitializeWorkItem(
12505 IN PIO_WORKITEM IoWorkItem
);
12510 IN PIO_WORKITEM IoWorkItem
,
12511 IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
12512 IN WORK_QUEUE_TYPE QueueType
,
12513 IN PVOID Context OPTIONAL
);
12517 IoGetIoPriorityHint(
12522 IoSetIoPriorityHint(
12524 IN IO_PRIORITY_HINT PriorityHint
);
12528 IoAllocateSfioStreamIdentifier(
12529 IN PFILE_OBJECT FileObject
,
12531 IN PVOID Signature
,
12532 OUT PVOID
*StreamIdentifier
);
12536 IoGetSfioStreamIdentifier(
12537 IN PFILE_OBJECT FileObject
,
12538 IN PVOID Signature
);
12542 IoFreeSfioStreamIdentifier(
12543 IN PFILE_OBJECT FileObject
,
12544 IN PVOID Signature
);
12549 IoRequestDeviceEjectEx(
12550 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12551 IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL
,
12552 IN PVOID Context OPTIONAL
,
12553 IN PDRIVER_OBJECT DriverObject OPTIONAL
);
12558 IoSetDevicePropertyData(
12559 IN PDEVICE_OBJECT Pdo
,
12560 IN CONST DEVPROPKEY
*PropertyKey
,
12563 IN DEVPROPTYPE Type
,
12565 IN PVOID Data OPTIONAL
);
12570 IoGetDevicePropertyData(
12571 PDEVICE_OBJECT Pdo
,
12572 CONST DEVPROPKEY
*PropertyKey
,
12577 PULONG RequiredSize
,
12578 PDEVPROPTYPE Type
);
12580 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12582 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
12584 #if (NTDDI_VERSION >= NTDDI_WS08)
12588 IoReplacePartitionUnit(
12589 IN PDEVICE_OBJECT TargetPdo
,
12590 IN PDEVICE_OBJECT SparePdo
,
12594 #if (NTDDI_VERSION >= NTDDI_WIN7)
12599 IoGetAffinityInterrupt(
12600 IN PKINTERRUPT InterruptObject
,
12601 OUT PGROUP_AFFINITY GroupAffinity
);
12605 IoGetContainerInformation(
12606 IN IO_CONTAINER_INFORMATION_CLASS InformationClass
,
12607 IN PVOID ContainerObject OPTIONAL
,
12608 IN OUT PVOID Buffer OPTIONAL
,
12609 IN ULONG BufferLength
);
12613 IoRegisterContainerNotification(
12614 IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
12615 IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
12616 IN PVOID NotificationInformation OPTIONAL
,
12617 IN ULONG NotificationInformationLength
,
12618 OUT PVOID CallbackRegistration
);
12622 IoUnregisterContainerNotification(
12623 IN PVOID CallbackRegistration
);
12628 IoUnregisterPlugPlayNotificationEx(
12629 IN PVOID NotificationEntry
);
12634 IoGetDeviceNumaNode(
12635 IN PDEVICE_OBJECT Pdo
,
12636 OUT PUSHORT NodeNumber
);
12638 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
12640 #if defined(_WIN64)
12644 IoWMIDeviceObjectToProviderId(
12645 IN PDEVICE_OBJECT DeviceObject
);
12647 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
12653 * IN CCHAR StackSize)
12655 #define IoSizeOfIrp(_StackSize) \
12656 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
12660 IoSkipCurrentIrpStackLocation(
12663 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
12664 Irp
->CurrentLocation
++;
12665 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
12670 IoSetNextIrpStackLocation(
12673 ASSERT(Irp
->CurrentLocation
> 0);
12674 Irp
->CurrentLocation
--;
12675 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
12680 IoGetNextIrpStackLocation(
12683 ASSERT(Irp
->CurrentLocation
> 0);
12684 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
12689 IoSetCompletionRoutine(
12691 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
12692 IN PVOID Context OPTIONAL
,
12693 IN BOOLEAN InvokeOnSuccess
,
12694 IN BOOLEAN InvokeOnError
,
12695 IN BOOLEAN InvokeOnCancel
)
12697 PIO_STACK_LOCATION irpSp
;
12698 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
12699 irpSp
= IoGetNextIrpStackLocation(Irp
);
12700 irpSp
->CompletionRoutine
= CompletionRoutine
;
12701 irpSp
->Context
= Context
;
12702 irpSp
->Control
= 0;
12704 if (InvokeOnSuccess
) {
12705 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
12708 if (InvokeOnError
) {
12709 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
12712 if (InvokeOnCancel
) {
12713 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
12719 * IoSetCancelRoutine(
12721 * IN PDRIVER_CANCEL CancelRoutine)
12723 #define IoSetCancelRoutine(_Irp, \
12725 ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
12726 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
12731 * IN PDEVICE_OBJECT DeviceObject,
12733 * IN PVOID Context);
12735 #define IoRequestDpc(DeviceObject, Irp, Context)( \
12736 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
12740 * IoReleaseRemoveLock(
12741 * IN PIO_REMOVE_LOCK RemoveLock,
12744 #define IoReleaseRemoveLock(_RemoveLock, \
12746 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
12750 * IoReleaseRemoveLockAndWait(
12751 * IN PIO_REMOVE_LOCK RemoveLock,
12754 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
12756 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
12758 #if defined(_WIN64)
12762 IN PIRP Irp OPTIONAL
);
12765 #define PLUGPLAY_REGKEY_DEVICE 1
12766 #define PLUGPLAY_REGKEY_DRIVER 2
12767 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
12771 IoGetCurrentIrpStackLocation(
12774 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
12775 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
12783 IoGetCurrentIrpStackLocation( (Irp
) )->Control
|= SL_PENDING_RETURNED
;
12788 * IoIsErrorUserInduced(
12789 * IN NTSTATUS Status);
12791 #define IoIsErrorUserInduced(Status) \
12792 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
12793 ((Status) == STATUS_IO_TIMEOUT) || \
12794 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
12795 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
12796 ((Status) == STATUS_VERIFY_REQUIRED) || \
12797 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
12798 ((Status) == STATUS_WRONG_VOLUME)))
12801 * IoInitializeRemoveLock(
12802 * IN PIO_REMOVE_LOCK Lock,
12803 * IN ULONG AllocateTag,
12804 * IN ULONG MaxLockedMinutes,
12805 * IN ULONG HighWatermark)
12807 #define IoInitializeRemoveLock( \
12808 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
12809 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
12810 HighWatermark, sizeof(IO_REMOVE_LOCK))
12814 IoInitializeDpcRequest(
12815 IN PDEVICE_OBJECT DeviceObject
,
12816 IN PIO_DPC_ROUTINE DpcRoutine
)
12818 KeInitializeDpc( &DeviceObject
->Dpc
,
12819 (PKDEFERRED_ROUTINE
) DpcRoutine
,
12823 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
12827 * IoGetFunctionCodeFromCtlCode(
12828 * IN ULONG ControlCode)
12830 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
12831 (((_ControlCode) >> 2) & 0x00000FFF)
12835 IoCopyCurrentIrpStackLocationToNext(
12838 PIO_STACK_LOCATION irpSp
;
12839 PIO_STACK_LOCATION nextIrpSp
;
12840 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
12841 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
12842 RtlCopyMemory( nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
12843 nextIrpSp
->Control
= 0;
12850 OUT PULONG_PTR LowLimit
,
12851 OUT PULONG_PTR HighLimit
);
12855 IoGetRemainingStackSize(VOID
)
12857 ULONG_PTR End
, Begin
;
12860 IoGetStackLimits(&Begin
, &End
);
12861 Result
= (ULONG_PTR
)(&End
) - Begin
;
12865 #if (NTDDI_VERSION >= NTDDI_WS03)
12868 IoInitializeThreadedDpcRequest(
12869 IN PDEVICE_OBJECT DeviceObject
,
12870 IN PIO_DPC_ROUTINE DpcRoutine
)
12872 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
12873 (PKDEFERRED_ROUTINE
) DpcRoutine
,
12878 /******************************************************************************
12879 * Power Management Support Functions *
12880 ******************************************************************************/
12882 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
12884 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12890 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12891 IN OUT
struct _IRP
*Irp
);
12896 PoRegisterDeviceForIdleDetection(
12897 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12898 IN ULONG ConservationIdleTime
,
12899 IN ULONG PerformanceIdleTime
,
12900 IN DEVICE_POWER_STATE State
);
12905 PoRegisterSystemState(
12906 IN OUT PVOID StateHandle OPTIONAL
,
12907 IN EXECUTION_STATE Flags
);
12913 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12914 IN UCHAR MinorFunction
,
12915 IN POWER_STATE PowerState
,
12916 IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL
,
12917 IN PVOID Context OPTIONAL
,
12918 OUT
struct _IRP
**Irp OPTIONAL
);
12924 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12925 IN POWER_STATE_TYPE Type
,
12926 IN POWER_STATE State
);
12932 IN EXECUTION_STATE Flags
);
12937 PoStartNextPowerIrp(
12938 IN OUT
struct _IRP
*Irp
);
12943 PoUnregisterSystemState(
12944 IN OUT PVOID StateHandle
);
12949 PoRequestShutdownEvent(
12952 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12954 #if (NTDDI_VERSION >= NTDDI_VISTA)
12960 IN OUT
struct _IRP
*Irp
);
12966 IN
struct _IRP
*Irp
);
12971 PoRegisterPowerSettingCallback(
12972 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
12973 IN LPCGUID SettingGuid
,
12974 IN PPOWER_SETTING_CALLBACK Callback
,
12975 IN PVOID Context OPTIONAL
,
12976 OUT PVOID
*Handle OPTIONAL
);
12981 PoUnregisterPowerSettingCallback(
12982 IN OUT PVOID Handle
);
12984 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12986 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
12991 IN OUT PULONG IdlePointer
);
12992 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
12994 #if (NTDDI_VERSION >= NTDDI_WIN7)
13000 IN OUT PULONG IdlePointer
);
13006 IN OUT PULONG IdlePointer
);
13011 PoQueryWatchdogTime(
13012 IN PDEVICE_OBJECT Pdo
,
13013 OUT PULONG SecondsRemaining
);
13018 PoDeletePowerRequest(
13019 IN OUT PVOID PowerRequest
);
13025 IN OUT PVOID PowerRequest
,
13026 IN POWER_REQUEST_TYPE Type
);
13031 PoClearPowerRequest(
13032 IN OUT PVOID PowerRequest
,
13033 IN POWER_REQUEST_TYPE Type
);
13038 PoCreatePowerRequest(
13039 OUT PVOID
*PowerRequest
,
13040 IN PDEVICE_OBJECT DeviceObject
,
13041 IN PCOUNTED_REASON_CONTEXT Context
);
13043 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13045 /******************************************************************************
13046 * Executive Functions *
13047 ******************************************************************************/
13049 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
13050 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
13051 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
13053 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
13054 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
13055 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
13056 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
13058 #define ExInitializeSListHead InitializeSListHead
13060 #if defined(_NTHAL_) && defined(_X86_)
13065 ExiAcquireFastMutex(
13066 IN OUT PFAST_MUTEX FastMutex
);
13071 ExiReleaseFastMutex(
13072 IN OUT PFAST_MUTEX FastMutex
);
13077 ExiTryToAcquireFastMutex(
13078 IN OUT PFAST_MUTEX FastMutex
);
13080 #define ExAcquireFastMutex ExiAcquireFastMutex
13081 #define ExReleaseFastMutex ExiReleaseFastMutex
13082 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
13086 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13091 ExAcquireFastMutex(
13092 IN OUT PFAST_MUTEX FastMutex
);
13097 ExReleaseFastMutex(
13098 IN OUT PFAST_MUTEX FastMutex
);
13103 ExTryToAcquireFastMutex(
13104 IN OUT PFAST_MUTEX FastMutex
);
13106 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13108 #endif /* defined(_NTHAL_) && defined(_X86_) */
13111 #define ExInterlockedAddUlong ExfInterlockedAddUlong
13112 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
13113 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
13114 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
13115 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
13116 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
13117 #endif /* defined(_X86_) */
13119 #if defined(_WIN64)
13121 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
13122 defined(_NTHAL_) || defined(_NTOSP_)
13125 ExQueryDepthSList(IN PSLIST_HEADER ListHead
);
13129 ExQueryDepthSList(IN PSLIST_HEADER ListHead
)
13131 return (USHORT
)(ListHead
->Alignment
& 0xffff);
13137 ExpInterlockedFlushSList(
13138 PSLIST_HEADER ListHead
);
13142 ExpInterlockedPopEntrySList(
13143 PSLIST_HEADER ListHead
);
13147 ExpInterlockedPushEntrySList(
13148 PSLIST_HEADER ListHead
,
13149 PSLIST_ENTRY ListEntry
);
13151 #define ExInterlockedFlushSList(Head) \
13152 ExpInterlockedFlushSList(Head)
13153 #define ExInterlockedPopEntrySList(Head, Lock) \
13154 ExpInterlockedPopEntrySList(Head)
13155 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
13156 ExpInterlockedPushEntrySList(Head, Entry)
13158 #else /* !defined(_WIN64) */
13160 #define ExQueryDepthSList(listhead) (listhead)->Depth
13165 ExInterlockedFlushSList(
13166 IN OUT PSLIST_HEADER ListHead
);
13168 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
13173 ExInterlockedPopEntrySList(
13174 IN PSLIST_HEADER ListHead
,
13175 IN PKSPIN_LOCK Lock
);
13180 ExInterlockedPushEntrySList(
13181 IN PSLIST_HEADER ListHead
,
13182 IN PSINGLE_LIST_ENTRY ListEntry
,
13183 IN PKSPIN_LOCK Lock
);
13188 ExAllocateFromPagedLookasideList(
13189 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
);
13194 ExFreeToPagedLookasideList(
13195 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
13200 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
13201 InterlockedPopEntrySList(_ListHead)
13202 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
13203 InterlockedPushEntrySList(_ListHead, _ListEntry)
13207 ExAllocateFromPagedLookasideList(
13208 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
)
13212 Lookaside
->L
.TotalAllocates
++;
13213 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
13214 if (Entry
== NULL
) {
13215 Lookaside
->L
.AllocateMisses
++;
13216 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
13225 ExFreeToPagedLookasideList(
13226 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
13229 Lookaside
->L
.TotalFrees
++;
13230 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
13231 Lookaside
->L
.FreeMisses
++;
13232 (Lookaside
->L
.Free
)(Entry
);
13234 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
13238 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
13240 #endif /* !defined(_WIN64) */
13242 /* ERESOURCE_THREAD
13243 * ExGetCurrentResourceThread(
13246 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
13248 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
13251 * ExInitializeWorkItem(
13252 * IN PWORK_QUEUE_ITEM Item,
13253 * IN PWORKER_THREAD_ROUTINE Routine,
13254 * IN PVOID Context)
13256 #define ExInitializeWorkItem(Item, Routine, Context) \
13258 (Item)->WorkerRoutine = Routine; \
13259 (Item)->Parameter = Context; \
13260 (Item)->List.Flink = NULL; \
13265 ExInitializeFastMutex(
13266 OUT PFAST_MUTEX FastMutex
)
13268 FastMutex
->Count
= FM_LOCK_BIT
;
13269 FastMutex
->Owner
= NULL
;
13270 FastMutex
->Contention
= 0;
13271 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
13275 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13280 ExAcquireFastMutexUnsafe(
13281 IN OUT PFAST_MUTEX FastMutex
);
13286 ExReleaseFastMutexUnsafe(
13287 IN OUT PFAST_MUTEX FastMutex
);
13292 ExAcquireResourceExclusiveLite(
13293 IN OUT PERESOURCE Resource
,
13299 ExAcquireResourceSharedLite(
13300 IN OUT PERESOURCE Resource
,
13306 ExAcquireSharedStarveExclusive(
13307 IN OUT PERESOURCE Resource
,
13313 ExAcquireSharedWaitForExclusive(
13314 IN OUT PERESOURCE Resource
,
13321 IN POOL_TYPE PoolType
,
13322 IN SIZE_T NumberOfBytes
);
13327 ExAllocatePoolWithQuota(
13328 IN POOL_TYPE PoolType
,
13329 IN SIZE_T NumberOfBytes
);
13334 ExAllocatePoolWithQuotaTag(
13335 IN POOL_TYPE PoolType
,
13336 IN SIZE_T NumberOfBytes
,
13339 #ifndef POOL_TAGGING
13340 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
13346 ExAllocatePoolWithTag(
13347 IN POOL_TYPE PoolType
,
13348 IN SIZE_T NumberOfBytes
,
13351 #ifndef POOL_TAGGING
13352 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
13358 ExAllocatePoolWithTagPriority(
13359 IN POOL_TYPE PoolType
,
13360 IN SIZE_T NumberOfBytes
,
13362 IN EX_POOL_PRIORITY Priority
);
13367 ExConvertExclusiveToSharedLite(
13368 IN OUT PERESOURCE Resource
);
13374 OUT PCALLBACK_OBJECT
*CallbackObject
,
13375 IN POBJECT_ATTRIBUTES ObjectAttributes
,
13377 IN BOOLEAN AllowMultipleCallbacks
);
13382 ExDeleteNPagedLookasideList(
13383 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
);
13388 ExDeletePagedLookasideList(
13389 IN PPAGED_LOOKASIDE_LIST Lookaside
);
13394 ExDeleteResourceLite(
13395 IN OUT PERESOURCE Resource
);
13413 ExGetExclusiveWaiterCount(
13414 IN PERESOURCE Resource
);
13419 ExGetPreviousMode(VOID
);
13424 ExGetSharedWaiterCount(
13425 IN PERESOURCE Resource
);
13430 ExInitializeNPagedLookasideList(
13431 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
13432 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
13433 IN PFREE_FUNCTION Free OPTIONAL
,
13442 ExInitializePagedLookasideList(
13443 IN PPAGED_LOOKASIDE_LIST Lookaside
,
13444 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
13445 IN PFREE_FUNCTION Free OPTIONAL
,
13454 ExInitializeResourceLite(
13455 OUT PERESOURCE Resource
);
13460 ExInterlockedAddLargeInteger(
13461 IN PLARGE_INTEGER Addend
,
13462 IN LARGE_INTEGER Increment
,
13463 IN PKSPIN_LOCK Lock
);
13465 #if defined(_WIN64)
13466 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
13467 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
13469 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
13470 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
13476 ExInterlockedAddUlong(
13478 IN ULONG Increment
,
13479 IN OUT PKSPIN_LOCK Lock
);
13481 #if defined(_AMD64_) || defined(_IA64_)
13483 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
13484 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
13486 #elif defined(_X86_)
13491 ExfInterlockedCompareExchange64(
13492 IN OUT LONGLONG
volatile *Destination
,
13493 IN PLONGLONG Exchange
,
13494 IN PLONGLONG Comperand
);
13496 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
13497 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
13504 ExInterlockedCompareExchange64(
13505 IN OUT LONGLONG
volatile *Destination
,
13506 IN PLONGLONG Exchange
,
13507 IN PLONGLONG Comparand
,
13508 IN PKSPIN_LOCK Lock
);
13510 #endif /* defined(_AMD64_) || defined(_IA64_) */
13515 ExInterlockedInsertHeadList(
13516 IN OUT PLIST_ENTRY ListHead
,
13517 IN OUT PLIST_ENTRY ListEntry
,
13518 IN OUT PKSPIN_LOCK Lock
);
13523 ExInterlockedInsertTailList(
13524 IN OUT PLIST_ENTRY ListHead
,
13525 IN OUT PLIST_ENTRY ListEntry
,
13526 IN OUT PKSPIN_LOCK Lock
);
13531 ExInterlockedPopEntryList(
13532 IN OUT PSINGLE_LIST_ENTRY ListHead
,
13533 IN OUT PKSPIN_LOCK Lock
);
13538 ExInterlockedPushEntryList(
13539 IN OUT PSINGLE_LIST_ENTRY ListHead
,
13540 IN OUT PSINGLE_LIST_ENTRY ListEntry
,
13541 IN OUT PKSPIN_LOCK Lock
);
13546 ExInterlockedRemoveHeadList(
13547 IN OUT PLIST_ENTRY ListHead
,
13548 IN OUT PKSPIN_LOCK Lock
);
13553 ExIsProcessorFeaturePresent(
13554 IN ULONG ProcessorFeature
);
13559 ExIsResourceAcquiredExclusiveLite(
13560 IN PERESOURCE Resource
);
13565 ExIsResourceAcquiredSharedLite(
13566 IN PERESOURCE Resource
);
13568 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
13573 ExLocalTimeToSystemTime(
13574 IN PLARGE_INTEGER LocalTime
,
13575 OUT PLARGE_INTEGER SystemTime
);
13581 IN PCALLBACK_OBJECT CallbackObject
,
13582 IN PVOID Argument1 OPTIONAL
,
13583 IN PVOID Argument2 OPTIONAL
);
13589 IN OUT PWORK_QUEUE_ITEM WorkItem
,
13590 IN WORK_QUEUE_TYPE QueueType
);
13597 IN NTSTATUS Status
);
13602 ExRegisterCallback(
13603 IN PCALLBACK_OBJECT CallbackObject
,
13604 IN PCALLBACK_FUNCTION CallbackFunction
,
13605 IN PVOID CallbackContext OPTIONAL
);
13610 ExReinitializeResourceLite(
13611 IN OUT PERESOURCE Resource
);
13616 ExReleaseResourceForThreadLite(
13617 IN OUT PERESOURCE Resource
,
13618 IN ERESOURCE_THREAD ResourceThreadId
);
13623 ExReleaseResourceLite(
13624 IN OUT PERESOURCE Resource
);
13629 ExSetResourceOwnerPointer(
13630 IN OUT PERESOURCE Resource
,
13631 IN PVOID OwnerPointer
);
13636 ExSetTimerResolution(
13637 IN ULONG DesiredTime
,
13638 IN BOOLEAN SetResolution
);
13643 ExSystemTimeToLocalTime(
13644 IN PLARGE_INTEGER SystemTime
,
13645 OUT PLARGE_INTEGER LocalTime
);
13650 ExUnregisterCallback(
13651 IN OUT PVOID CbRegistration
);
13653 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13655 #if (NTDDI_VERSION >= NTDDI_WINXP)
13660 ExAcquireRundownProtection(
13661 IN OUT PEX_RUNDOWN_REF RunRef
);
13666 ExInitializeRundownProtection(
13667 OUT PEX_RUNDOWN_REF RunRef
);
13672 ExReInitializeRundownProtection(
13673 IN OUT PEX_RUNDOWN_REF RunRef
);
13678 ExReleaseRundownProtection(
13679 IN OUT PEX_RUNDOWN_REF RunRef
);
13684 ExRundownCompleted(
13685 OUT PEX_RUNDOWN_REF RunRef
);
13691 IN SUITE_TYPE SuiteType
);
13696 ExWaitForRundownProtectionRelease(
13697 IN OUT PEX_RUNDOWN_REF RunRef
);
13699 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
13701 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
13706 ExAcquireRundownProtectionEx(
13707 IN OUT PEX_RUNDOWN_REF RunRef
,
13713 ExReleaseRundownProtectionEx(
13714 IN OUT PEX_RUNDOWN_REF RunRef
,
13717 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
13719 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
13722 PEX_RUNDOWN_REF_CACHE_AWARE
13724 ExAllocateCacheAwareRundownProtection(
13725 IN POOL_TYPE PoolType
,
13731 ExSizeOfRundownProtectionCacheAware(VOID
);
13736 ExEnterCriticalRegionAndAcquireResourceShared(
13737 IN OUT PERESOURCE Resource
);
13742 ExEnterCriticalRegionAndAcquireResourceExclusive(
13743 IN OUT PERESOURCE Resource
);
13748 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
13749 IN OUT PERESOURCE Resource
);
13754 ExReleaseResourceAndLeaveCriticalRegion(
13755 IN OUT PERESOURCE Resource
);
13760 ExInitializeRundownProtectionCacheAware(
13761 OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
13762 IN SIZE_T RunRefSize
);
13767 ExFreeCacheAwareRundownProtection(
13768 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13773 ExAcquireRundownProtectionCacheAware(
13774 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13779 ExReleaseRundownProtectionCacheAware(
13780 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13785 ExAcquireRundownProtectionCacheAwareEx(
13786 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
13792 ExReleaseRundownProtectionCacheAwareEx(
13793 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
13799 ExWaitForRundownProtectionReleaseCacheAware(
13800 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
13805 ExReInitializeRundownProtectionCacheAware(
13806 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13811 ExRundownCompletedCacheAware(
13812 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13814 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
13816 #if (NTDDI_VERSION >= NTDDI_VISTA)
13821 ExInitializeLookasideListEx(
13822 OUT PLOOKASIDE_LIST_EX Lookaside
,
13823 IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL
,
13824 IN PFREE_FUNCTION_EX Free OPTIONAL
,
13825 IN POOL_TYPE PoolType
,
13834 ExDeleteLookasideListEx(
13835 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
13840 ExFlushLookasideListEx(
13841 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
13845 ExAllocateFromLookasideListEx(
13846 IN OUT PLOOKASIDE_LIST_EX Lookaside
)
13850 Lookaside
->L
.TotalAllocates
+= 1;
13851 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
13852 if (Entry
== NULL
) {
13853 Lookaside
->L
.AllocateMisses
+= 1;
13854 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
13864 ExFreeToLookasideListEx(
13865 IN OUT PLOOKASIDE_LIST_EX Lookaside
,
13868 Lookaside
->L
.TotalFrees
+= 1;
13869 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
13870 Lookaside
->L
.FreeMisses
+= 1;
13871 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
13873 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
13878 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
13880 #if (NTDDI_VERSION >= NTDDI_WIN7)
13885 ExSetResourceOwnerPointerEx(
13886 IN OUT PERESOURCE Resource
,
13887 IN PVOID OwnerPointer
,
13890 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
13892 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13894 static __inline PVOID
13895 ExAllocateFromNPagedLookasideList(
13896 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
)
13900 Lookaside
->L
.TotalAllocates
++;
13901 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
13902 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
13903 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
13905 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
13907 if (Entry
== NULL
) {
13908 Lookaside
->L
.AllocateMisses
++;
13909 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
13916 static __inline VOID
13917 ExFreeToNPagedLookasideList(
13918 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
,
13921 Lookaside
->L
.TotalFrees
++;
13922 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
13923 Lookaside
->L
.FreeMisses
++;
13924 (Lookaside
->L
.Free
)(Entry
);
13926 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
13927 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
13928 (PSLIST_ENTRY
)Entry
,
13929 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
13931 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
13937 /******************************************************************************
13938 * Object Manager Functions *
13939 ******************************************************************************/
13941 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13946 ObfDereferenceObject(
13948 #define ObDereferenceObject ObfDereferenceObject
13953 ObGetObjectSecurity(
13955 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
13956 OUT PBOOLEAN MemoryAllocated
);
13961 ObfReferenceObject(
13963 #define ObReferenceObject ObfReferenceObject
13968 ObReferenceObjectByHandle(
13970 IN ACCESS_MASK DesiredAccess
,
13971 IN POBJECT_TYPE ObjectType OPTIONAL
,
13972 IN KPROCESSOR_MODE AccessMode
,
13974 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
13979 ObReferenceObjectByPointer(
13981 IN ACCESS_MASK DesiredAccess
,
13982 IN POBJECT_TYPE ObjectType OPTIONAL
,
13983 IN KPROCESSOR_MODE AccessMode
);
13988 ObReleaseObjectSecurity(
13989 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
13990 IN BOOLEAN MemoryAllocated
);
13992 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13994 #if (NTDDI_VERSION >= NTDDI_VISTA)
13998 ObDereferenceObjectDeferDelete(
14002 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14006 ObRegisterCallbacks(
14007 IN POB_CALLBACK_REGISTRATION CallbackRegistration
,
14008 OUT PVOID
*RegistrationHandle
);
14013 ObUnRegisterCallbacks(
14014 IN PVOID RegistrationHandle
);
14019 ObGetFilterVersion(VOID
);
14021 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14023 #if (NTDDI_VERSION >= NTDDI_WIN7)
14028 ObReferenceObjectByHandleWithTag(
14030 IN ACCESS_MASK DesiredAccess
,
14031 IN POBJECT_TYPE ObjectType OPTIONAL
,
14032 IN KPROCESSOR_MODE AccessMode
,
14035 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
14040 ObfReferenceObjectWithTag(
14047 ObReferenceObjectByPointerWithTag(
14049 IN ACCESS_MASK DesiredAccess
,
14050 IN POBJECT_TYPE ObjectType OPTIONAL
,
14051 IN KPROCESSOR_MODE AccessMode
,
14057 ObfDereferenceObjectWithTag(
14064 ObDereferenceObjectDeferDeleteWithTag(
14068 #define ObDereferenceObject ObfDereferenceObject
14069 #define ObReferenceObject ObfReferenceObject
14070 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
14071 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
14073 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14076 /******************************************************************************
14077 * Process Manager Functions *
14078 ******************************************************************************/
14082 * PsGetCurrentProcess(VOID)
14084 #define PsGetCurrentProcess IoGetCurrentProcess
14086 #if !defined(_PSGETCURRENTTHREAD_)
14087 #define _PSGETCURRENTTHREAD_
14092 PsGetCurrentThread(VOID
)
14094 return (PETHREAD
)KeGetCurrentThread();
14099 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14105 PsCreateSystemThread(
14106 OUT PHANDLE ThreadHandle
,
14107 IN ULONG DesiredAccess
,
14108 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14109 IN HANDLE ProcessHandle OPTIONAL
,
14110 OUT PCLIENT_ID ClientId OPTIONAL
,
14111 IN PKSTART_ROUTINE StartRoutine
,
14112 IN PVOID StartContext OPTIONAL
);
14117 PsTerminateSystemThread(
14118 IN NTSTATUS ExitStatus
);
14126 PsWrapApcWow64Thread(
14127 IN OUT PVOID
*ApcContext
,
14128 IN OUT PVOID
*ApcRoutine
);
14130 /******************************************************************************
14131 * WMI Library Support Functions *
14132 ******************************************************************************/
14135 #if (NTDDI_VERSION >= NTDDI_WINXP)
14140 IN TRACEHANDLE LoggerHandle
,
14141 IN ULONG MessageFlags
,
14142 IN LPGUID MessageGuid
,
14143 IN USHORT MessageNumber
,
14146 #endif /* RUN_WPP */
14148 #if (NTDDI_VERSION >= NTDDI_WINXP)
14153 WmiQueryTraceInformation(
14154 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
14155 OUT PVOID TraceInformation
,
14156 IN ULONG TraceInformationLength
,
14157 OUT PULONG RequiredLength OPTIONAL
,
14158 IN PVOID Buffer OPTIONAL
);
14161 /* FIXME: Get va_list from where? */
14166 IN TRACEHANDLE LoggerHandle
,
14167 IN ULONG MessageFlags
,
14168 IN LPGUID MessageGuid
,
14169 IN USHORT MessageNumber
,
14170 IN
va_list MessageArgList
);
14173 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14175 #ifndef TRACE_INFORMATION_CLASS_DEFINE
14177 #if (NTDDI_VERSION >= NTDDI_WINXP)
14181 WmiQueryTraceInformation(
14182 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
14183 OUT PVOID TraceInformation
,
14184 IN ULONG TraceInformationLength
,
14185 OUT PULONG RequiredLength OPTIONAL
,
14186 IN PVOID Buffer OPTIONAL
);
14189 #define TRACE_INFORMATION_CLASS_DEFINE
14191 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
14193 #if (NTDDI_VERSION >= NTDDI_VISTA)
14199 IN LPCGUID ProviderId
,
14200 IN PETWENABLECALLBACK EnableCallback OPTIONAL
,
14201 IN PVOID CallbackContext OPTIONAL
,
14202 OUT PREGHANDLE RegHandle
);
14208 IN REGHANDLE RegHandle
);
14214 IN REGHANDLE RegHandle
,
14215 IN PCEVENT_DESCRIPTOR EventDescriptor
);
14220 EtwProviderEnabled(
14221 IN REGHANDLE RegHandle
,
14223 IN ULONGLONG Keyword
);
14228 EtwActivityIdControl(
14229 IN ULONG ControlCode
,
14230 IN OUT LPGUID ActivityId
);
14236 IN REGHANDLE RegHandle
,
14237 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14238 IN LPCGUID ActivityId OPTIONAL
,
14239 IN ULONG UserDataCount
,
14240 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14246 IN REGHANDLE RegHandle
,
14247 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14248 IN LPCGUID ActivityId OPTIONAL
,
14249 IN LPCGUID RelatedActivityId OPTIONAL
,
14250 IN ULONG UserDataCount
,
14251 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14257 IN REGHANDLE RegHandle
,
14259 IN ULONGLONG Keyword
,
14260 IN LPCGUID ActivityId OPTIONAL
,
14263 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14265 #if (NTDDI_VERSION >= NTDDI_WIN7)
14270 IN REGHANDLE RegHandle
,
14271 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14274 IN LPCGUID ActivityId OPTIONAL
,
14275 IN LPCGUID RelatedActivityId OPTIONAL
,
14276 IN ULONG UserDataCount
,
14277 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14282 /******************************************************************************
14283 * Kernel Debugger Functions *
14284 ******************************************************************************/
14294 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14298 DbgPrintReturnControlC(
14303 #if (NTDDI_VERSION >= NTDDI_WINXP)
14309 IN ULONG ComponentId
,
14314 #ifdef _VA_LIST_DEFINED
14320 IN ULONG ComponentId
,
14328 vDbgPrintExWithPrefix(
14330 IN ULONG ComponentId
,
14335 #endif /* _VA_LIST_DEFINED */
14340 DbgQueryDebugFilterState(
14341 IN ULONG ComponentId
,
14347 DbgSetDebugFilterState(
14348 IN ULONG ComponentId
,
14352 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14354 #if (NTDDI_VERSION >= NTDDI_VISTA)
14357 (*PDEBUG_PRINT_CALLBACK
)(
14359 IN ULONG ComponentId
,
14365 DbgSetDebugPrintCallback(
14366 IN PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
14367 IN BOOLEAN Enable
);
14369 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14371 #endif /* _DBGNT_ */
14375 #define KdPrint(_x_) DbgPrint _x_
14376 #define KdPrintEx(_x_) DbgPrintEx _x_
14377 #define vKdPrintEx(_x_) vDbgPrintEx _x_
14378 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
14379 #define KdBreakPoint() DbgBreakPoint()
14380 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
14384 #define KdPrint(_x_)
14385 #define KdPrintEx(_x_)
14386 #define vKdPrintEx(_x_)
14387 #define vKdPrintExWithPrefix(_x_)
14388 #define KdBreakPoint()
14389 #define KdBreakPointWithStatus(s)
14393 #if defined(__GNUC__)
14395 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
14396 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
14397 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
14398 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
14400 #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
14402 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
14403 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
14404 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
14405 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
14409 extern BOOLEAN KdDebuggerNotPresent
;
14410 extern BOOLEAN KdDebuggerEnabled
;
14411 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
14412 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
14416 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14421 KdDisableDebugger(VOID
);
14426 KdEnableDebugger(VOID
);
14428 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
14429 #define DbgBreakPoint __debugbreak
14433 DbgBreakPoint(VOID
);
14439 DbgBreakPointWithStatus(
14442 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14444 #if (NTDDI_VERSION >= NTDDI_WS03)
14448 KdRefreshDebuggerNotPresent(VOID
);
14451 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
14456 IN KD_OPTION Option
,
14457 IN ULONG InBufferBytes OPTIONAL
,
14459 IN ULONG OutBufferBytes OPTIONAL
,
14460 OUT PVOID OutBuffer
,
14461 OUT PULONG OutBufferNeeded OPTIONAL
);
14463 /* Hardware Abstraction Layer Functions */
14465 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
14471 HalAllocateCommonBuffer(
14472 IN PDMA_ADAPTER DmaAdapter
,
14474 OUT PPHYSICAL_ADDRESS LogicalAddress
,
14475 IN BOOLEAN CacheEnabled
)
14477 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
14478 PVOID commonBuffer
;
14480 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
14481 ASSERT( allocateCommonBuffer
!= NULL
);
14482 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
14483 return commonBuffer
;
14489 HalFreeCommonBuffer(
14490 IN PDMA_ADAPTER DmaAdapter
,
14492 IN PHYSICAL_ADDRESS LogicalAddress
,
14493 IN PVOID VirtualAddress
,
14494 IN BOOLEAN CacheEnabled
)
14496 PFREE_COMMON_BUFFER freeCommonBuffer
;
14498 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
14499 ASSERT( freeCommonBuffer
!= NULL
);
14500 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
14507 IN PDMA_ADAPTER DmaAdapter
)
14509 PREAD_DMA_COUNTER readDmaCounter
;
14512 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
14513 ASSERT( readDmaCounter
!= NULL
);
14514 counter
= readDmaCounter( DmaAdapter
);
14520 HalGetDmaAlignment(
14521 IN PDMA_ADAPTER DmaAdapter
)
14523 PGET_DMA_ALIGNMENT getDmaAlignment
;
14526 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
14527 ASSERT( getDmaAlignment
!= NULL
);
14528 alignment
= getDmaAlignment( DmaAdapter
);
14539 #include <ktmtypes.h>
14541 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
14542 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
14543 #define TRANSACTIONMANAGER_RECOVER (0x0004)
14544 #define TRANSACTIONMANAGER_RENAME (0x0008)
14545 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
14546 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
14548 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
14549 TRANSACTIONMANAGER_QUERY_INFORMATION)
14551 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14552 TRANSACTIONMANAGER_SET_INFORMATION |\
14553 TRANSACTIONMANAGER_RECOVER |\
14554 TRANSACTIONMANAGER_RENAME |\
14555 TRANSACTIONMANAGER_CREATE_RM)
14557 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
14559 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14560 TRANSACTIONMANAGER_GENERIC_READ |\
14561 TRANSACTIONMANAGER_GENERIC_WRITE |\
14562 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
14563 TRANSACTIONMANAGER_BIND_TRANSACTION)
14565 #define TRANSACTION_QUERY_INFORMATION (0x0001)
14566 #define TRANSACTION_SET_INFORMATION (0x0002)
14567 #define TRANSACTION_ENLIST (0x0004)
14568 #define TRANSACTION_COMMIT (0x0008)
14569 #define TRANSACTION_ROLLBACK (0x0010)
14570 #define TRANSACTION_PROPAGATE (0x0020)
14571 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
14573 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
14574 TRANSACTION_QUERY_INFORMATION |\
14577 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14578 TRANSACTION_SET_INFORMATION |\
14579 TRANSACTION_COMMIT |\
14580 TRANSACTION_ENLIST |\
14581 TRANSACTION_ROLLBACK |\
14582 TRANSACTION_PROPAGATE |\
14585 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14586 TRANSACTION_COMMIT |\
14587 TRANSACTION_ROLLBACK |\
14590 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14591 TRANSACTION_GENERIC_READ |\
14592 TRANSACTION_GENERIC_WRITE |\
14593 TRANSACTION_GENERIC_EXECUTE)
14595 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
14596 STANDARD_RIGHTS_WRITE |\
14597 TRANSACTION_SET_INFORMATION |\
14598 TRANSACTION_ENLIST |\
14599 TRANSACTION_ROLLBACK |\
14600 TRANSACTION_PROPAGATE |\
14603 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
14604 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
14605 #define RESOURCEMANAGER_RECOVER (0x0004)
14606 #define RESOURCEMANAGER_ENLIST (0x0008)
14607 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
14608 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
14609 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
14611 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
14612 RESOURCEMANAGER_QUERY_INFORMATION |\
14615 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14616 RESOURCEMANAGER_SET_INFORMATION |\
14617 RESOURCEMANAGER_RECOVER |\
14618 RESOURCEMANAGER_ENLIST |\
14619 RESOURCEMANAGER_GET_NOTIFICATION |\
14620 RESOURCEMANAGER_REGISTER_PROTOCOL |\
14621 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
14624 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14625 RESOURCEMANAGER_RECOVER |\
14626 RESOURCEMANAGER_ENLIST |\
14627 RESOURCEMANAGER_GET_NOTIFICATION |\
14628 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
14631 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14632 RESOURCEMANAGER_GENERIC_READ |\
14633 RESOURCEMANAGER_GENERIC_WRITE |\
14634 RESOURCEMANAGER_GENERIC_EXECUTE)
14636 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
14637 #define ENLISTMENT_SET_INFORMATION (0x0002)
14638 #define ENLISTMENT_RECOVER (0x0004)
14639 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
14640 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
14642 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
14643 ENLISTMENT_QUERY_INFORMATION)
14645 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14646 ENLISTMENT_SET_INFORMATION |\
14647 ENLISTMENT_RECOVER |\
14648 ENLISTMENT_SUBORDINATE_RIGHTS |\
14649 ENLISTMENT_SUPERIOR_RIGHTS)
14651 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14652 ENLISTMENT_RECOVER |\
14653 ENLISTMENT_SUBORDINATE_RIGHTS |\
14654 ENLISTMENT_SUPERIOR_RIGHTS)
14656 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14657 ENLISTMENT_GENERIC_READ |\
14658 ENLISTMENT_GENERIC_WRITE |\
14659 ENLISTMENT_GENERIC_EXECUTE)
14661 typedef enum _TRANSACTION_OUTCOME
{
14662 TransactionOutcomeUndetermined
= 1,
14663 TransactionOutcomeCommitted
,
14664 TransactionOutcomeAborted
,
14665 } TRANSACTION_OUTCOME
;
14668 typedef enum _TRANSACTION_STATE
{
14669 TransactionStateNormal
= 1,
14670 TransactionStateIndoubt
,
14671 TransactionStateCommittedNotify
,
14672 } TRANSACTION_STATE
;
14675 typedef struct _TRANSACTION_BASIC_INFORMATION
{
14676 GUID TransactionId
;
14679 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
14681 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
14683 LARGE_INTEGER VirtualClock
;
14684 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
14686 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
14688 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
14690 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
14691 ULONG LogPathLength
;
14693 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
14695 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
14696 ULONGLONG LastRecoveredLsn
;
14697 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
14699 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
14700 ULONG IsolationLevel
;
14701 ULONG IsolationFlags
;
14702 LARGE_INTEGER Timeout
;
14704 ULONG DescriptionLength
;
14705 WCHAR Description
[1];
14706 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
14708 typedef struct _TRANSACTION_BIND_INFORMATION
{
14710 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
14712 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
14714 GUID ResourceManagerId
;
14715 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
14717 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
14718 ULONG NumberOfEnlistments
;
14719 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
14720 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
14722 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
14723 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
14724 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
14726 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
14727 GUID ResourceManagerId
;
14728 ULONG DescriptionLength
;
14729 WCHAR Description
[1];
14730 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
14732 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
14733 HANDLE IoCompletionPortHandle
;
14734 ULONG_PTR CompletionKey
;
14735 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
14737 typedef enum _KTMOBJECT_TYPE
{
14738 KTMOBJECT_TRANSACTION
,
14739 KTMOBJECT_TRANSACTION_MANAGER
,
14740 KTMOBJECT_RESOURCE_MANAGER
,
14741 KTMOBJECT_ENLISTMENT
,
14743 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
14745 typedef struct _KTMOBJECT_CURSOR
{
14747 ULONG ObjectIdCount
;
14749 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
14751 typedef enum _TRANSACTION_INFORMATION_CLASS
{
14752 TransactionBasicInformation
,
14753 TransactionPropertiesInformation
,
14754 TransactionEnlistmentInformation
,
14755 TransactionSuperiorEnlistmentInformation
14756 } TRANSACTION_INFORMATION_CLASS
;
14758 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
14759 TransactionManagerBasicInformation
,
14760 TransactionManagerLogInformation
,
14761 TransactionManagerLogPathInformation
,
14762 TransactionManagerRecoveryInformation
= 4
14763 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
14765 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
14766 ResourceManagerBasicInformation
,
14767 ResourceManagerCompletionInformation
,
14768 } RESOURCEMANAGER_INFORMATION_CLASS
;
14770 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
14772 GUID TransactionId
;
14773 GUID ResourceManagerId
;
14774 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
14776 typedef struct _ENLISTMENT_CRM_INFORMATION
{
14777 GUID CrmTransactionManagerId
;
14778 GUID CrmResourceManagerId
;
14779 GUID CrmEnlistmentId
;
14780 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
14782 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
14783 EnlistmentBasicInformation
,
14784 EnlistmentRecoveryInformation
,
14785 EnlistmentCrmInformation
14786 } ENLISTMENT_INFORMATION_CLASS
;
14788 typedef struct _TRANSACTION_LIST_ENTRY
{
14789 #if defined(__cplusplus)
14794 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
14796 typedef struct _TRANSACTION_LIST_INFORMATION
{
14797 ULONG NumberOfTransactions
;
14798 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
14799 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
14802 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
14803 OUT PHANDLE TransactionHandle
,
14804 IN ACCESS_MASK DesiredAccess
,
14805 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14806 IN LPGUID Uow OPTIONAL
,
14807 IN HANDLE TmHandle OPTIONAL
,
14808 IN ULONG CreateOptions OPTIONAL
,
14809 IN ULONG IsolationLevel OPTIONAL
,
14810 IN ULONG IsolationFlags OPTIONAL
,
14811 IN PLARGE_INTEGER Timeout OPTIONAL
,
14812 IN PUNICODE_STRING Description OPTIONAL
);
14815 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
14816 OUT PHANDLE TransactionHandle
,
14817 IN ACCESS_MASK DesiredAccess
,
14818 IN POBJECT_ATTRIBUTES ObjectAttributes
,
14819 IN LPGUID Uow OPTIONAL
,
14820 IN HANDLE TmHandle OPTIONAL
);
14823 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
14824 IN HANDLE TransactionHandle
,
14825 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14826 OUT PVOID TransactionInformation
,
14827 IN ULONG TransactionInformationLength
,
14828 OUT PULONG ReturnLength OPTIONAL
);
14831 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
14832 IN HANDLE TransactionHandle
,
14833 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14834 IN PVOID TransactionInformation
,
14835 IN ULONG TransactionInformationLength
);
14838 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
14839 IN HANDLE TransactionHandle
,
14843 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
14844 IN HANDLE TransactionHandle
,
14847 #if (NTDDI_VERSION >= NTDDI_VISTA)
14852 NtCreateTransactionManager(
14853 OUT PHANDLE TmHandle
,
14854 IN ACCESS_MASK DesiredAccess
,
14855 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14856 IN PUNICODE_STRING LogFileName OPTIONAL
,
14857 IN ULONG CreateOptions OPTIONAL
,
14858 IN ULONG CommitStrength OPTIONAL
);
14863 NtOpenTransactionManager(
14864 OUT PHANDLE TmHandle
,
14865 IN ACCESS_MASK DesiredAccess
,
14866 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14867 IN PUNICODE_STRING LogFileName OPTIONAL
,
14868 IN LPGUID TmIdentity OPTIONAL
,
14869 IN ULONG OpenOptions OPTIONAL
);
14874 NtRenameTransactionManager(
14875 IN PUNICODE_STRING LogFileName
,
14876 IN LPGUID ExistingTransactionManagerGuid
);
14881 NtRollforwardTransactionManager(
14882 IN HANDLE TransactionManagerHandle
,
14883 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
14888 NtRecoverTransactionManager(
14889 IN HANDLE TransactionManagerHandle
);
14894 NtQueryInformationTransactionManager(
14895 IN HANDLE TransactionManagerHandle
,
14896 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
14897 OUT PVOID TransactionManagerInformation
,
14898 IN ULONG TransactionManagerInformationLength
,
14899 OUT PULONG ReturnLength
);
14904 NtSetInformationTransactionManager(
14905 IN HANDLE TmHandle OPTIONAL
,
14906 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
14907 IN PVOID TransactionManagerInformation
,
14908 IN ULONG TransactionManagerInformationLength
);
14913 NtEnumerateTransactionObject(
14914 IN HANDLE RootObjectHandle OPTIONAL
,
14915 IN KTMOBJECT_TYPE QueryType
,
14916 IN OUT PKTMOBJECT_CURSOR ObjectCursor
,
14917 IN ULONG ObjectCursorLength
,
14918 OUT PULONG ReturnLength
);
14923 NtCreateTransaction(
14924 OUT PHANDLE TransactionHandle
,
14925 IN ACCESS_MASK DesiredAccess
,
14926 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14927 IN LPGUID Uow OPTIONAL
,
14928 IN HANDLE TmHandle OPTIONAL
,
14929 IN ULONG CreateOptions OPTIONAL
,
14930 IN ULONG IsolationLevel OPTIONAL
,
14931 IN ULONG IsolationFlags OPTIONAL
,
14932 IN PLARGE_INTEGER Timeout OPTIONAL
,
14933 IN PUNICODE_STRING Description OPTIONAL
);
14939 OUT PHANDLE TransactionHandle
,
14940 IN ACCESS_MASK DesiredAccess
,
14941 IN POBJECT_ATTRIBUTES ObjectAttributes
,
14943 IN HANDLE TmHandle OPTIONAL
);
14948 NtQueryInformationTransaction(
14949 IN HANDLE TransactionHandle
,
14950 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14951 OUT PVOID TransactionInformation
,
14952 IN ULONG TransactionInformationLength
,
14953 OUT PULONG ReturnLength OPTIONAL
);
14958 NtSetInformationTransaction(
14959 IN HANDLE TransactionHandle
,
14960 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14961 IN PVOID TransactionInformation
,
14962 IN ULONG TransactionInformationLength
);
14967 NtCommitTransaction(
14968 IN HANDLE TransactionHandle
,
14974 NtRollbackTransaction(
14975 IN HANDLE TransactionHandle
,
14981 NtCreateEnlistment(
14982 OUT PHANDLE EnlistmentHandle
,
14983 IN ACCESS_MASK DesiredAccess
,
14984 IN HANDLE ResourceManagerHandle
,
14985 IN HANDLE TransactionHandle
,
14986 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14987 IN ULONG CreateOptions OPTIONAL
,
14988 IN NOTIFICATION_MASK NotificationMask
,
14989 IN PVOID EnlistmentKey OPTIONAL
);
14995 OUT PHANDLE EnlistmentHandle
,
14996 IN ACCESS_MASK DesiredAccess
,
14997 IN HANDLE ResourceManagerHandle
,
14998 IN LPGUID EnlistmentGuid
,
14999 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15004 NtQueryInformationEnlistment(
15005 IN HANDLE EnlistmentHandle
,
15006 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15007 OUT PVOID EnlistmentInformation
,
15008 IN ULONG EnlistmentInformationLength
,
15009 OUT PULONG ReturnLength
);
15014 NtSetInformationEnlistment(
15015 IN HANDLE EnlistmentHandle OPTIONAL
,
15016 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15017 IN PVOID EnlistmentInformation
,
15018 IN ULONG EnlistmentInformationLength
);
15023 NtRecoverEnlistment(
15024 IN HANDLE EnlistmentHandle
,
15025 IN PVOID EnlistmentKey OPTIONAL
);
15030 NtPrePrepareEnlistment(
15031 IN HANDLE EnlistmentHandle
,
15032 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15037 NtPrepareEnlistment(
15038 IN HANDLE EnlistmentHandle
,
15039 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15044 NtCommitEnlistment(
15045 IN HANDLE EnlistmentHandle
,
15046 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15051 NtRollbackEnlistment(
15052 IN HANDLE EnlistmentHandle
,
15053 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15058 NtPrePrepareComplete(
15059 IN HANDLE EnlistmentHandle
,
15060 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15066 IN HANDLE EnlistmentHandle
,
15067 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15073 IN HANDLE EnlistmentHandle
,
15074 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15079 NtReadOnlyEnlistment(
15080 IN HANDLE EnlistmentHandle
,
15081 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15086 NtRollbackComplete(
15087 IN HANDLE EnlistmentHandle
,
15088 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15093 NtSinglePhaseReject(
15094 IN HANDLE EnlistmentHandle
,
15095 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15100 NtCreateResourceManager(
15101 OUT PHANDLE ResourceManagerHandle
,
15102 IN ACCESS_MASK DesiredAccess
,
15103 IN HANDLE TmHandle
,
15105 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15106 IN ULONG CreateOptions OPTIONAL
,
15107 IN PUNICODE_STRING Description OPTIONAL
);
15112 NtOpenResourceManager(
15113 OUT PHANDLE ResourceManagerHandle
,
15114 IN ACCESS_MASK DesiredAccess
,
15115 IN HANDLE TmHandle
,
15116 IN LPGUID ResourceManagerGuid OPTIONAL
,
15117 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15122 NtRecoverResourceManager(
15123 IN HANDLE ResourceManagerHandle
);
15128 NtGetNotificationResourceManager(
15129 IN HANDLE ResourceManagerHandle
,
15130 OUT PTRANSACTION_NOTIFICATION TransactionNotification
,
15131 IN ULONG NotificationLength
,
15132 IN PLARGE_INTEGER Timeout OPTIONAL
,
15133 OUT PULONG ReturnLength OPTIONAL
,
15134 IN ULONG Asynchronous
,
15135 IN ULONG_PTR AsynchronousContext OPTIONAL
);
15140 NtQueryInformationResourceManager(
15141 IN HANDLE ResourceManagerHandle
,
15142 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15143 OUT PVOID ResourceManagerInformation
,
15144 IN ULONG ResourceManagerInformationLength
,
15145 OUT PULONG ReturnLength OPTIONAL
);
15150 NtSetInformationResourceManager(
15151 IN HANDLE ResourceManagerHandle
,
15152 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15153 IN PVOID ResourceManagerInformation
,
15154 IN ULONG ResourceManagerInformationLength
);
15159 NtRegisterProtocolAddressInformation(
15160 IN HANDLE ResourceManager
,
15161 IN PCRM_PROTOCOL_ID ProtocolId
,
15162 IN ULONG ProtocolInformationSize
,
15163 IN PVOID ProtocolInformation
,
15164 IN ULONG CreateOptions OPTIONAL
);
15169 NtPropagationComplete(
15170 IN HANDLE ResourceManagerHandle
,
15171 IN ULONG RequestCookie
,
15172 IN ULONG BufferLength
,
15178 NtPropagationFailed(
15179 IN HANDLE ResourceManagerHandle
,
15180 IN ULONG RequestCookie
,
15181 IN NTSTATUS PropStatus
);
15183 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
15185 #endif /* !_NTTMAPI_ */
15186 /******************************************************************************
15187 * ZwXxx Functions *
15188 ******************************************************************************/
15192 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
15193 #define ZwCurrentProcess() NtCurrentProcess()
15194 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
15195 #define ZwCurrentThread() NtCurrentThread()
15199 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15212 ZwCreateDirectoryObject(
15213 OUT PHANDLE DirectoryHandle
,
15214 IN ACCESS_MASK DesiredAccess
,
15215 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15221 OUT PHANDLE FileHandle
,
15222 IN ACCESS_MASK DesiredAccess
,
15223 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15224 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15225 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
15226 IN ULONG FileAttributes
,
15227 IN ULONG ShareAccess
,
15228 IN ULONG CreateDisposition
,
15229 IN ULONG CreateOptions
,
15230 IN PVOID EaBuffer OPTIONAL
,
15231 IN ULONG EaLength
);
15237 OUT PHANDLE KeyHandle
,
15238 IN ACCESS_MASK DesiredAccess
,
15239 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15240 IN ULONG TitleIndex
,
15241 IN PUNICODE_STRING Class OPTIONAL
,
15242 IN ULONG CreateOptions
,
15243 OUT PULONG Disposition OPTIONAL
);
15249 OUT PHANDLE SectionHandle
,
15250 IN ACCESS_MASK DesiredAccess
,
15251 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15252 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
15253 IN ULONG SectionPageProtection
,
15254 IN ULONG AllocationAttributes
,
15255 IN HANDLE FileHandle OPTIONAL
);
15261 IN HANDLE KeyHandle
);
15267 IN HANDLE KeyHandle
,
15268 IN PUNICODE_STRING ValueName
);
15274 IN HANDLE KeyHandle
,
15276 IN KEY_INFORMATION_CLASS KeyInformationClass
,
15277 OUT PVOID KeyInformation OPTIONAL
,
15279 OUT PULONG ResultLength
);
15284 ZwEnumerateValueKey(
15285 IN HANDLE KeyHandle
,
15287 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
15288 OUT PVOID KeyValueInformation OPTIONAL
,
15290 OUT PULONG ResultLength
);
15296 IN HANDLE KeyHandle
);
15302 IN PUNICODE_STRING DriverServiceName
);
15307 ZwMakeTemporaryObject(
15313 ZwMapViewOfSection(
15314 IN HANDLE SectionHandle
,
15315 IN HANDLE ProcessHandle
,
15316 IN OUT PVOID
*BaseAddress
,
15317 IN ULONG_PTR ZeroBits
,
15318 IN SIZE_T CommitSize
,
15319 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
15320 IN OUT PSIZE_T ViewSize
,
15321 IN SECTION_INHERIT InheritDisposition
,
15322 IN ULONG AllocationType
,
15329 OUT PHANDLE FileHandle
,
15330 IN ACCESS_MASK DesiredAccess
,
15331 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15332 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15333 IN ULONG ShareAccess
,
15334 IN ULONG OpenOptions
);
15340 OUT PHANDLE KeyHandle
,
15341 IN ACCESS_MASK DesiredAccess
,
15342 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15348 OUT PHANDLE SectionHandle
,
15349 IN ACCESS_MASK DesiredAccess
,
15350 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15355 ZwOpenSymbolicLinkObject(
15356 OUT PHANDLE LinkHandle
,
15357 IN ACCESS_MASK DesiredAccess
,
15358 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15363 ZwQueryInformationFile(
15364 IN HANDLE FileHandle
,
15365 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15366 OUT PVOID FileInformation
,
15368 IN FILE_INFORMATION_CLASS FileInformationClass
);
15374 IN HANDLE KeyHandle
,
15375 IN KEY_INFORMATION_CLASS KeyInformationClass
,
15376 OUT PVOID KeyInformation OPTIONAL
,
15378 OUT PULONG ResultLength
);
15383 ZwQuerySymbolicLinkObject(
15384 IN HANDLE LinkHandle
,
15385 IN OUT PUNICODE_STRING LinkTarget
,
15386 OUT PULONG ReturnedLength OPTIONAL
);
15392 IN HANDLE KeyHandle
,
15393 IN PUNICODE_STRING ValueName
,
15394 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
15395 OUT PVOID KeyValueInformation OPTIONAL
,
15397 OUT PULONG ResultLength
);
15403 IN HANDLE FileHandle
,
15404 IN HANDLE Event OPTIONAL
,
15405 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15406 IN PVOID ApcContext OPTIONAL
,
15407 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15410 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
15411 IN PULONG Key OPTIONAL
);
15416 ZwSetInformationFile(
15417 IN HANDLE FileHandle
,
15418 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15419 IN PVOID FileInformation
,
15421 IN FILE_INFORMATION_CLASS FileInformationClass
);
15427 IN HANDLE KeyHandle
,
15428 IN PUNICODE_STRING ValueName
,
15429 IN ULONG TitleIndex OPTIONAL
,
15431 IN PVOID Data OPTIONAL
,
15432 IN ULONG DataSize
);
15438 IN PUNICODE_STRING DriverServiceName
);
15443 ZwUnmapViewOfSection(
15444 IN HANDLE ProcessHandle
,
15445 IN PVOID BaseAddress OPTIONAL
);
15451 IN HANDLE FileHandle
,
15452 IN HANDLE Event OPTIONAL
,
15453 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15454 IN PVOID ApcContext OPTIONAL
,
15455 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15458 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
15459 IN PULONG Key OPTIONAL
);
15464 ZwQueryFullAttributesFile(
15465 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15466 OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
15469 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15472 #if (NTDDI_VERSION >= NTDDI_WS03)
15477 OUT PHANDLE EventHandle
,
15478 IN ACCESS_MASK DesiredAccess
,
15479 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15482 #if (NTDDI_VERSION >= NTDDI_VISTA)
15486 ZwCreateKeyTransacted(
15487 OUT PHANDLE KeyHandle
,
15488 IN ACCESS_MASK DesiredAccess
,
15489 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15490 IN ULONG TitleIndex
,
15491 IN PUNICODE_STRING Class OPTIONAL
,
15492 IN ULONG CreateOptions
,
15493 IN HANDLE TransactionHandle
,
15494 OUT PULONG Disposition OPTIONAL
);
15499 ZwOpenKeyTransacted(
15500 OUT PHANDLE KeyHandle
,
15501 IN ACCESS_MASK DesiredAccess
,
15502 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15503 IN HANDLE TransactionHandle
);
15508 ZwCreateTransactionManager(
15509 OUT PHANDLE TmHandle
,
15510 IN ACCESS_MASK DesiredAccess
,
15511 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15512 IN PUNICODE_STRING LogFileName OPTIONAL
,
15513 IN ULONG CreateOptions OPTIONAL
,
15514 IN ULONG CommitStrength OPTIONAL
);
15519 ZwOpenTransactionManager(
15520 OUT PHANDLE TmHandle
,
15521 IN ACCESS_MASK DesiredAccess
,
15522 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15523 IN PUNICODE_STRING LogFileName OPTIONAL
,
15524 IN LPGUID TmIdentity OPTIONAL
,
15525 IN ULONG OpenOptions OPTIONAL
);
15530 ZwRollforwardTransactionManager(
15531 IN HANDLE TransactionManagerHandle
,
15532 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15537 ZwRecoverTransactionManager(
15538 IN HANDLE TransactionManagerHandle
);
15543 ZwQueryInformationTransactionManager(
15544 IN HANDLE TransactionManagerHandle
,
15545 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
15546 OUT PVOID TransactionManagerInformation
,
15547 IN ULONG TransactionManagerInformationLength
,
15548 OUT PULONG ReturnLength OPTIONAL
);
15553 ZwSetInformationTransactionManager(
15554 IN HANDLE TmHandle
,
15555 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
15556 IN PVOID TransactionManagerInformation
,
15557 IN ULONG TransactionManagerInformationLength
);
15562 ZwEnumerateTransactionObject(
15563 IN HANDLE RootObjectHandle OPTIONAL
,
15564 IN KTMOBJECT_TYPE QueryType
,
15565 IN OUT PKTMOBJECT_CURSOR ObjectCursor
,
15566 IN ULONG ObjectCursorLength
,
15567 OUT PULONG ReturnLength
);
15572 ZwCreateTransaction(
15573 OUT PHANDLE TransactionHandle
,
15574 IN ACCESS_MASK DesiredAccess
,
15575 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15576 IN LPGUID Uow OPTIONAL
,
15577 IN HANDLE TmHandle OPTIONAL
,
15578 IN ULONG CreateOptions OPTIONAL
,
15579 IN ULONG IsolationLevel OPTIONAL
,
15580 IN ULONG IsolationFlags OPTIONAL
,
15581 IN PLARGE_INTEGER Timeout OPTIONAL
,
15582 IN PUNICODE_STRING Description OPTIONAL
);
15588 OUT PHANDLE TransactionHandle
,
15589 IN ACCESS_MASK DesiredAccess
,
15590 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15592 IN HANDLE TmHandle OPTIONAL
);
15597 ZwQueryInformationTransaction(
15598 IN HANDLE TransactionHandle
,
15599 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15600 OUT PVOID TransactionInformation
,
15601 IN ULONG TransactionInformationLength
,
15602 OUT PULONG ReturnLength OPTIONAL
);
15607 ZwSetInformationTransaction(
15608 IN HANDLE TransactionHandle
,
15609 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15610 IN PVOID TransactionInformation
,
15611 IN ULONG TransactionInformationLength
);
15616 ZwCommitTransaction(
15617 IN HANDLE TransactionHandle
,
15623 ZwRollbackTransaction(
15624 IN HANDLE TransactionHandle
,
15630 ZwCreateResourceManager(
15631 OUT PHANDLE ResourceManagerHandle
,
15632 IN ACCESS_MASK DesiredAccess
,
15633 IN HANDLE TmHandle
,
15634 IN LPGUID ResourceManagerGuid OPTIONAL
,
15635 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15636 IN ULONG CreateOptions OPTIONAL
,
15637 IN PUNICODE_STRING Description OPTIONAL
);
15642 ZwOpenResourceManager(
15643 OUT PHANDLE ResourceManagerHandle
,
15644 IN ACCESS_MASK DesiredAccess
,
15645 IN HANDLE TmHandle
,
15646 IN LPGUID ResourceManagerGuid
,
15647 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15652 ZwRecoverResourceManager(
15653 IN HANDLE ResourceManagerHandle
);
15658 ZwGetNotificationResourceManager(
15659 IN HANDLE ResourceManagerHandle
,
15660 OUT PTRANSACTION_NOTIFICATION TransactionNotification
,
15661 IN ULONG NotificationLength
,
15662 IN PLARGE_INTEGER Timeout
,
15663 IN PULONG ReturnLength OPTIONAL
,
15664 IN ULONG Asynchronous
,
15665 IN ULONG_PTR AsynchronousContext OPTIONAL
);
15670 ZwQueryInformationResourceManager(
15671 IN HANDLE ResourceManagerHandle
,
15672 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15673 OUT PVOID ResourceManagerInformation
,
15674 IN ULONG ResourceManagerInformationLength
,
15675 IN PULONG ReturnLength OPTIONAL
);
15680 ZwSetInformationResourceManager(
15681 IN HANDLE ResourceManagerHandle
,
15682 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15683 IN PVOID ResourceManagerInformation
,
15684 IN ULONG ResourceManagerInformationLength
);
15689 ZwCreateEnlistment(
15690 OUT PHANDLE EnlistmentHandle
,
15691 IN ACCESS_MASK DesiredAccess
,
15692 IN HANDLE ResourceManagerHandle
,
15693 IN HANDLE TransactionHandle
,
15694 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15695 IN ULONG CreateOptions OPTIONAL
,
15696 IN NOTIFICATION_MASK NotificationMask
,
15697 IN PVOID EnlistmentKey OPTIONAL
);
15703 OUT PHANDLE EnlistmentHandle
,
15704 IN ACCESS_MASK DesiredAccess
,
15705 IN HANDLE RmHandle
,
15706 IN LPGUID EnlistmentGuid
,
15707 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15712 ZwQueryInformationEnlistment(
15713 IN HANDLE EnlistmentHandle
,
15714 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15715 OUT PVOID EnlistmentInformation
,
15716 IN ULONG EnlistmentInformationLength
,
15717 IN PULONG ReturnLength OPTIONAL
);
15722 ZwSetInformationEnlistment(
15723 IN HANDLE EnlistmentHandle
,
15724 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15725 IN PVOID EnlistmentInformation
,
15726 IN ULONG EnlistmentInformationLength
);
15731 ZwRecoverEnlistment(
15732 IN HANDLE EnlistmentHandle
,
15733 IN PVOID EnlistmentKey OPTIONAL
);
15738 ZwPrePrepareEnlistment(
15739 IN HANDLE EnlistmentHandle
,
15740 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15745 ZwPrepareEnlistment(
15746 IN HANDLE EnlistmentHandle
,
15747 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15752 ZwCommitEnlistment(
15753 IN HANDLE EnlistmentHandle
,
15754 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15759 ZwRollbackEnlistment(
15760 IN HANDLE EnlistmentHandle
,
15761 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15766 ZwPrePrepareComplete(
15767 IN HANDLE EnlistmentHandle
,
15768 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15774 IN HANDLE EnlistmentHandle
,
15775 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15781 IN HANDLE EnlistmentHandle
,
15782 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15787 ZwReadOnlyEnlistment(
15788 IN HANDLE EnlistmentHandle
,
15789 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15794 ZwRollbackComplete(
15795 IN HANDLE EnlistmentHandle
,
15796 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15801 ZwSinglePhaseReject(
15802 IN HANDLE EnlistmentHandle
,
15803 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15806 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15809 #if (NTDDI_VERSION >= NTDDI_WIN7)
15817 OUT PHANDLE KeyHandle
,
15818 IN ACCESS_MASK DesiredAccess
,
15819 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15820 IN ULONG OpenOptions
);
15825 ZwOpenKeyTransactedEx(
15826 OUT PHANDLE KeyHandle
,
15827 IN ACCESS_MASK DesiredAccess
,
15828 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15829 IN ULONG OpenOptions
,
15830 IN HANDLE TransactionHandle
);
15835 ZwNotifyChangeMultipleKeys(
15836 IN HANDLE MasterKeyHandle
,
15837 IN ULONG Count OPTIONAL
,
15838 IN OBJECT_ATTRIBUTES SubordinateObjects
[] OPTIONAL
,
15839 IN HANDLE Event OPTIONAL
,
15840 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15841 IN PVOID ApcContext OPTIONAL
,
15842 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15843 IN ULONG CompletionFilter
,
15844 IN BOOLEAN WatchTree
,
15845 OUT PVOID Buffer OPTIONAL
,
15846 IN ULONG BufferSize
,
15847 IN BOOLEAN Asynchronous
);
15852 ZwQueryMultipleValueKey(
15853 IN HANDLE KeyHandle
,
15854 IN OUT PKEY_VALUE_ENTRY ValueEntries
,
15855 IN ULONG EntryCount
,
15856 OUT PVOID ValueBuffer
,
15857 IN OUT PULONG BufferLength
,
15858 OUT PULONG RequiredBufferLength OPTIONAL
);
15864 IN HANDLE KeyHandle
,
15865 IN PUNICODE_STRING NewName
);
15870 ZwSetInformationKey(
15871 IN HANDLE KeyHandle
,
15872 IN KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
15873 IN PVOID KeySetInformation
,
15874 IN ULONG KeySetInformationLength
);
15877 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15880 /******************************************************************************
15882 ******************************************************************************/
15886 #ifndef _INC_STRING
15887 #include <string.h>
15891 #include <string.h>
15894 #ifndef DEFINE_GUIDEX
15896 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
15898 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
15900 #endif /* DEFINE_GUIDEX */
15902 #ifndef STATICGUIDOF
15903 #define STATICGUIDOF(guid) STATIC_##guid
15906 /* GUID Comparison */
15907 #ifndef __IID_ALIGNED__
15908 #define __IID_ALIGNED__
15910 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
15912 return ( (*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) &&
15913 (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)) );
15916 #define IsEqualGUIDAligned(guid1, guid2) \
15917 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
15918 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
15919 #endif /* __cplusplus */
15920 #endif /* !__IID_ALIGNED__ */
15922 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
15924 #define MAXIMUM_FILENAME_LENGTH 256
15926 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
15928 #define OBJECT_TYPE_CREATE (0x0001)
15929 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
15931 #define DIRECTORY_QUERY (0x0001)
15932 #define DIRECTORY_TRAVERSE (0x0002)
15933 #define DIRECTORY_CREATE_OBJECT (0x0004)
15934 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
15935 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
15937 #define SYMBOLIC_LINK_QUERY 0x0001
15938 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
15940 #define DUPLICATE_CLOSE_SOURCE 0x00000001
15941 #define DUPLICATE_SAME_ACCESS 0x00000002
15942 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
15944 /* Global debug flag */
15946 extern ULONG NtGlobalFlag
;
15947 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_ ## FlagName))
15949 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
15952 #ifndef _TRACEHANDLE_DEFINED
15953 #define _TRACEHANDLE_DEFINED
15954 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
15957 extern PBOOLEAN Mm64BitPhysicalAddress
;
15959 extern PVOID MmBadPointer
;
15965 #endif /* !_WDMDDK_ */