4 * Windows NT WDM Driver Developer Kit
6 * This file is part of the ReactOS DDK package.
9 * Amine Khaldi (amine.khaldi@reactos.org)
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 #define WDM_MAJORVERSION 0x06
29 #define WDM_MINORVERSION 0x00
31 /* Included via ntddk.h? */
34 #define _WDM_INCLUDED_
36 #define NO_INTERLOCKED_INTRINSICS
44 #include <kernelspecs.h>
54 #endif /* _INC_STRING */
60 typedef GUID UOW
, *PUOW
;
65 #if (NTDDI_VERSION >= NTDDI_WINXP)
71 __internal_kernel_driver
72 __drv_Mode_impl(WDM_INCLUDED
)
78 #if !defined(_NTHALDLL_) && !defined(_BLDR_)
79 #define NTHALAPI DECLSPEC_IMPORT
85 #if !defined(_NTOSKRNL_) && !defined(_BLDR_)
86 #define NTKERNELAPI DECLSPEC_IMPORT
91 #if defined(_X86_) && !defined(_NTHAL_)
92 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
94 #define _DECL_HAL_KE_IMPORT
96 #define _DECL_HAL_KE_IMPORT NTKERNELAPI
100 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
102 #define POINTER_ALIGNMENT
105 /* Helper macro to enable gcc's extension. */
106 #ifndef __GNU_EXTENSION
108 #define __GNU_EXTENSION __extension__
110 #define __GNU_EXTENSION
114 #if defined(_MSC_VER)
116 /* Disable some warnings */
117 #pragma warning(disable:4115) /* Named type definition in parentheses */
118 #pragma warning(disable:4201) /* Nameless unions and structs */
119 #pragma warning(disable:4214) /* Bit fields of other types than int */
120 #pragma warning(disable:4820) /* Padding added, due to alignment requirement */
122 /* Indicate if #pragma alloc_text() is supported */
123 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
124 #define ALLOC_PRAGMA 1
127 /* Indicate if #pragma data_seg() is supported */
128 #if defined(_M_IX86) || defined(_M_AMD64)
129 #define ALLOC_DATA_PRAGMA 1
135 #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_)
136 #define USE_DMA_MACROS
138 #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__)
139 #define NO_LEGACY_DRIVERS
141 #endif /* defined(_WIN64) */
143 /* Forward declarations */
150 struct _DEVICE_OBJECT
;
151 struct _DRIVER_OBJECT
;
152 struct _IO_STATUS_BLOCK
;
153 struct _DEVICE_DESCRIPTION
;
154 struct _SCATTER_GATHER_LIST
;
155 struct _DRIVE_LAYOUT_INFORMATION
;
156 struct _COMPRESSED_DATA_INFO
;
157 struct _IO_RESOURCE_DESCRIPTOR
;
159 /* Structures not exposed to drivers */
160 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
161 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
162 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
163 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
164 typedef struct _EPROCESS
*PEPROCESS
;
165 typedef struct _ETHREAD
*PETHREAD
;
166 typedef struct _IO_TIMER
*PIO_TIMER
;
167 typedef struct _KINTERRUPT
*PKINTERRUPT
;
168 typedef struct _KPROCESS
*PKPROCESS
;
169 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
170 typedef struct _CONTEXT
*PCONTEXT
;
172 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_)
173 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
174 #elif defined(_WDM_INCLUDED_)
175 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
177 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
180 #ifndef DEFINE_GUIDEX
182 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
184 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
186 #endif /* DEFINE_GUIDEX */
189 #define STATICGUIDOF(guid) STATIC_##guid
192 /* GUID Comparison */
193 #ifndef __IID_ALIGNED__
194 #define __IID_ALIGNED__
196 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
198 return ( (*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) &&
199 (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)) );
202 #define IsEqualGUIDAligned(guid1, guid2) \
203 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
204 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
205 #endif /* __cplusplus */
206 #endif /* !__IID_ALIGNED__ */
209 /******************************************************************************
210 * INTERLOCKED Functions *
211 ******************************************************************************/
213 // Intrinsics (note: taken from our winnt.h)
216 #if defined(__GNUC__)
218 static __inline__ BOOLEAN
219 InterlockedBitTestAndSet(
220 _Inout_updates_bytes_((Bit
+7)/8) _Interlocked_operand_ LONG
volatile *Base
,
225 __asm__
__volatile__("lock "
228 :"=r" (OldBit
),"+m" (*Base
)
233 return (_InterlockedOr(Base
, 1 << Bit
) >> Bit
) & 1;
237 static __inline__ BOOLEAN
238 InterlockedBitTestAndReset(
239 _Inout_updates_bytes_((Bit
+7)/8) _Interlocked_operand_ LONG
volatile *Base
,
244 __asm__
__volatile__("lock "
247 :"=r" (OldBit
),"+m" (*Base
)
252 return (_InterlockedAnd(Base
, ~(1 << Bit
)) >> Bit
) & 1;
256 #endif /* defined(__GNUC__) */
258 #define BitScanForward _BitScanForward
259 #define BitScanReverse _BitScanReverse
260 #define BitTest _bittest
261 #define BitTestAndComplement _bittestandcomplement
262 #define BitTestAndSet _bittestandset
263 #define BitTestAndReset _bittestandreset
264 #define InterlockedBitTestAndSet _interlockedbittestandset
265 #define InterlockedBitTestAndReset _interlockedbittestandreset
268 #define BitScanForward64 _BitScanForward64
269 #define BitScanReverse64 _BitScanReverse64
270 #define BitTest64 _bittest64
271 #define BitTestAndComplement64 _bittestandcomplement64
272 #define BitTestAndSet64 _bittestandset64
273 #define BitTestAndReset64 _bittestandreset64
274 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
275 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
278 #if !defined(__INTERLOCKED_DECLARED)
279 #define __INTERLOCKED_DECLARED
282 #if defined(NO_INTERLOCKED_INTRINSICS)
286 InterlockedIncrement(
287 _Inout_ _Interlocked_operand_ LONG
volatile *Addend
);
292 InterlockedDecrement(
293 _Inout_ _Interlocked_operand_ LONG
volatile *Addend
);
298 InterlockedCompareExchange(
299 _Inout_ _Interlocked_operand_ LONG
volatile *Destination
,
301 _In_ LONG Comparand
);
307 _Inout_ _Interlocked_operand_ LONG
volatile *Destination
,
313 InterlockedExchangeAdd(
314 _Inout_ _Interlocked_operand_ LONG
volatile *Addend
,
317 #else /* !defined(NO_INTERLOCKED_INTRINSICS) */
319 #define InterlockedExchange _InterlockedExchange
320 #define InterlockedIncrement _InterlockedIncrement
321 #define InterlockedDecrement _InterlockedDecrement
322 #define InterlockedExchangeAdd _InterlockedExchangeAdd
323 #define InterlockedCompareExchange _InterlockedCompareExchange
324 #define InterlockedOr _InterlockedOr
325 #define InterlockedAnd _InterlockedAnd
326 #define InterlockedXor _InterlockedXor
328 #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
330 #endif /* defined (_X86_) */
332 #if !defined (_WIN64)
335 * InterlockedExchangePointer(
336 * IN OUT PVOID volatile *Target,
339 #define InterlockedExchangePointer(Target, Value) \
340 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
344 * InterlockedCompareExchangePointer(
345 * IN OUT PVOID *Destination,
347 * IN PVOID Comparand)
349 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
350 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
352 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
353 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
354 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
356 #endif // !defined (_WIN64)
358 #if defined (_M_AMD64)
360 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
361 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
362 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
363 #define InterlockedAnd _InterlockedAnd
364 #define InterlockedOr _InterlockedOr
365 #define InterlockedXor _InterlockedXor
366 #define InterlockedIncrement _InterlockedIncrement
367 #define InterlockedDecrement _InterlockedDecrement
368 #define InterlockedAdd _InterlockedAdd
369 #define InterlockedExchange _InterlockedExchange
370 #define InterlockedExchangeAdd _InterlockedExchangeAdd
371 #define InterlockedCompareExchange _InterlockedCompareExchange
372 #define InterlockedAnd64 _InterlockedAnd64
373 #define InterlockedOr64 _InterlockedOr64
374 #define InterlockedXor64 _InterlockedXor64
375 #define InterlockedIncrement64 _InterlockedIncrement64
376 #define InterlockedDecrement64 _InterlockedDecrement64
377 #define InterlockedAdd64 _InterlockedAdd64
378 #define InterlockedExchange64 _InterlockedExchange64
379 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
380 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
381 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
382 #define InterlockedExchangePointer _InterlockedExchangePointer
383 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
384 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
388 #if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
389 //#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for?
393 _Inout_ _Interlocked_operand_ LONG64
volatile *Addend
,
396 return InterlockedExchangeAdd64(Addend
, Value
) + Value
;
401 #endif /* !__INTERLOCKED_DECLARED */
404 /******************************************************************************
405 * Runtime Library Types *
406 ******************************************************************************/
408 #define RTL_REGISTRY_ABSOLUTE 0
409 #define RTL_REGISTRY_SERVICES 1
410 #define RTL_REGISTRY_CONTROL 2
411 #define RTL_REGISTRY_WINDOWS_NT 3
412 #define RTL_REGISTRY_DEVICEMAP 4
413 #define RTL_REGISTRY_USER 5
414 #define RTL_REGISTRY_MAXIMUM 6
415 #define RTL_REGISTRY_HANDLE 0x40000000
416 #define RTL_REGISTRY_OPTIONAL 0x80000000
418 /* RTL_QUERY_REGISTRY_TABLE.Flags */
419 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
420 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
421 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
422 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
423 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
424 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
425 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
427 #define HASH_STRING_ALGORITHM_DEFAULT 0
428 #define HASH_STRING_ALGORITHM_X65599 1
429 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
431 typedef struct _RTL_BITMAP
{
434 } RTL_BITMAP
, *PRTL_BITMAP
;
436 typedef struct _RTL_BITMAP_RUN
{
439 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
441 _Function_class_(RTL_QUERY_REGISTRY_ROUTINE
)
442 _IRQL_requires_max_(PASSIVE_LEVEL
)
445 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
446 _In_z_ PWSTR ValueName
,
447 _In_ ULONG ValueType
,
448 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
449 _In_ ULONG ValueLength
,
450 _In_opt_ PVOID Context
,
451 _In_opt_ PVOID EntryContext
);
453 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
454 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
461 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
463 typedef struct _TIME_FIELDS
{
472 } TIME_FIELDS
, *PTIME_FIELDS
;
475 #ifndef _SLIST_HEADER_
476 #define _SLIST_HEADER_
480 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
481 struct _SLIST_ENTRY
*Next
;
482 } SLIST_ENTRY
, *PSLIST_ENTRY
;
484 typedef struct _SLIST_ENTRY32
{
486 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
488 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
489 _ANONYMOUS_STRUCT
struct {
495 ULONGLONG Sequence
:9;
496 ULONGLONG NextEntry
:39;
497 ULONGLONG HeaderType
:1;
499 ULONGLONG Reserved
:59;
504 ULONGLONG Sequence
:48;
505 ULONGLONG HeaderType
:1;
507 ULONGLONG Reserved
:2;
508 ULONGLONG NextEntry
:60;
512 ULONGLONG Sequence
:48;
513 ULONGLONG HeaderType
:1;
514 ULONGLONG Reserved
:3;
515 ULONGLONG NextEntry
:60;
517 } SLIST_HEADER
, *PSLIST_HEADER
;
519 typedef union _SLIST_HEADER32
{
521 _ANONYMOUS_STRUCT
struct {
526 } SLIST_HEADER32
, *PSLIST_HEADER32
;
530 #define SLIST_ENTRY SINGLE_LIST_ENTRY
531 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
532 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
534 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
536 typedef union _SLIST_HEADER
{
538 _ANONYMOUS_STRUCT
struct {
543 } SLIST_HEADER
, *PSLIST_HEADER
;
545 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
547 #endif /* defined(_WIN64) */
549 #endif /* _SLIST_HEADER_ */
551 /* Exception record flags */
552 #define EXCEPTION_NONCONTINUABLE 0x01
553 #define EXCEPTION_UNWINDING 0x02
554 #define EXCEPTION_EXIT_UNWIND 0x04
555 #define EXCEPTION_STACK_INVALID 0x08
556 #define EXCEPTION_NESTED_CALL 0x10
557 #define EXCEPTION_TARGET_UNWIND 0x20
558 #define EXCEPTION_COLLIDED_UNWIND 0x40
559 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | \
560 EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND)
562 #define IS_UNWINDING(Flag) ((Flag & EXCEPTION_UNWIND) != 0)
563 #define IS_DISPATCHING(Flag) ((Flag & EXCEPTION_UNWIND) == 0)
564 #define IS_TARGET_UNWIND(Flag) (Flag & EXCEPTION_TARGET_UNWIND)
566 #define EXCEPTION_MAXIMUM_PARAMETERS 15
568 /* Exception records */
569 typedef struct _EXCEPTION_RECORD
{
570 NTSTATUS ExceptionCode
;
571 ULONG ExceptionFlags
;
572 struct _EXCEPTION_RECORD
*ExceptionRecord
;
573 PVOID ExceptionAddress
;
574 ULONG NumberParameters
;
575 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
576 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
578 typedef struct _EXCEPTION_RECORD32
{
579 NTSTATUS ExceptionCode
;
580 ULONG ExceptionFlags
;
581 ULONG ExceptionRecord
;
582 ULONG ExceptionAddress
;
583 ULONG NumberParameters
;
584 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
585 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
587 typedef struct _EXCEPTION_RECORD64
{
588 NTSTATUS ExceptionCode
;
589 ULONG ExceptionFlags
;
590 ULONG64 ExceptionRecord
;
591 ULONG64 ExceptionAddress
;
592 ULONG NumberParameters
;
593 ULONG __unusedAlignment
;
594 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
595 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
597 typedef struct _EXCEPTION_POINTERS
{
598 PEXCEPTION_RECORD ExceptionRecord
;
599 PCONTEXT ContextRecord
;
600 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
602 /* MS definition is broken! */
603 extern BOOLEAN NTSYSAPI NlsMbCodePageTag
;
604 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag
;
605 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
606 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
608 #define SHORT_LEAST_SIGNIFICANT_BIT 0
609 #define SHORT_MOST_SIGNIFICANT_BIT 1
611 #define LONG_LEAST_SIGNIFICANT_BIT 0
612 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
613 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
614 #define LONG_MOST_SIGNIFICANT_BIT 3
616 #define RTLVERLIB_DDI(x) Wdmlib##x
619 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
623 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
626 typedef struct _OSVERSIONINFOA
{
627 ULONG dwOSVersionInfoSize
;
628 ULONG dwMajorVersion
;
629 ULONG dwMinorVersion
;
632 CHAR szCSDVersion
[128];
633 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
635 typedef struct _OSVERSIONINFOW
{
636 ULONG dwOSVersionInfoSize
;
637 ULONG dwMajorVersion
;
638 ULONG dwMinorVersion
;
641 WCHAR szCSDVersion
[128];
642 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
644 typedef struct _OSVERSIONINFOEXA
{
645 ULONG dwOSVersionInfoSize
;
646 ULONG dwMajorVersion
;
647 ULONG dwMinorVersion
;
650 CHAR szCSDVersion
[128];
651 USHORT wServicePackMajor
;
652 USHORT wServicePackMinor
;
656 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
658 typedef struct _OSVERSIONINFOEXW
{
659 ULONG dwOSVersionInfoSize
;
660 ULONG dwMajorVersion
;
661 ULONG dwMinorVersion
;
664 WCHAR szCSDVersion
[128];
665 USHORT wServicePackMajor
;
666 USHORT wServicePackMinor
;
670 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
673 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
674 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
675 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
676 typedef OSVERSIONINFOW OSVERSIONINFO
;
677 typedef POSVERSIONINFOW POSVERSIONINFO
;
678 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
680 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
681 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
682 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
683 typedef OSVERSIONINFOA OSVERSIONINFO
;
684 typedef POSVERSIONINFOA POSVERSIONINFO
;
685 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
688 /******************************************************************************
690 ******************************************************************************/
692 typedef UCHAR KIRQL
, *PKIRQL
;
693 typedef CCHAR KPROCESSOR_MODE
;
694 typedef LONG KPRIORITY
;
702 #define CACHE_FULLY_ASSOCIATIVE 0xFF
703 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
705 #define EVENT_QUERY_STATE (0x0001)
706 #define EVENT_MODIFY_STATE (0x0002)
707 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
709 #define LTP_PC_SMT 0x1
711 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
712 #define SINGLE_GROUP_LEGACY_API 1
715 #define SEMAPHORE_QUERY_STATE (0x0001)
716 #define SEMAPHORE_MODIFY_STATE (0x0002)
717 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
719 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
720 RelationProcessorCore
,
723 RelationProcessorPackage
,
726 } LOGICAL_PROCESSOR_RELATIONSHIP
;
728 typedef enum _PROCESSOR_CACHE_TYPE
{
733 } PROCESSOR_CACHE_TYPE
;
735 typedef struct _CACHE_DESCRIPTOR
{
740 PROCESSOR_CACHE_TYPE Type
;
741 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
743 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
744 ULONG_PTR ProcessorMask
;
745 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
746 _ANONYMOUS_UNION
union {
753 CACHE_DESCRIPTOR Cache
;
754 ULONGLONG Reserved
[2];
756 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
758 typedef struct _PROCESSOR_RELATIONSHIP
{
762 _Field_size_(GroupCount
) GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
763 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
765 typedef struct _NUMA_NODE_RELATIONSHIP
{
768 GROUP_AFFINITY GroupMask
;
769 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
771 typedef struct _CACHE_RELATIONSHIP
{
776 PROCESSOR_CACHE_TYPE Type
;
778 GROUP_AFFINITY GroupMask
;
779 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
781 typedef struct _PROCESSOR_GROUP_INFO
{
782 UCHAR MaximumProcessorCount
;
783 UCHAR ActiveProcessorCount
;
785 KAFFINITY ActiveProcessorMask
;
786 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
788 typedef struct _GROUP_RELATIONSHIP
{
789 USHORT MaximumGroupCount
;
790 USHORT ActiveGroupCount
;
792 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
793 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
795 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
796 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
798 _ANONYMOUS_UNION
union {
799 PROCESSOR_RELATIONSHIP Processor
;
800 NUMA_NODE_RELATIONSHIP NumaNode
;
801 CACHE_RELATIONSHIP Cache
;
802 GROUP_RELATIONSHIP Group
;
804 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;;
806 /* Processor features */
807 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
808 #define PF_FLOATING_POINT_EMULATED 1
809 #define PF_COMPARE_EXCHANGE_DOUBLE 2
810 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
811 #define PF_PPC_MOVEMEM_64BIT_OK 4
812 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
813 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
814 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
815 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
816 #define PF_PAE_ENABLED 9
817 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
818 #define PF_SSE_DAZ_MODE_AVAILABLE 11
819 #define PF_NX_ENABLED 12
820 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
821 #define PF_COMPARE_EXCHANGE128 14
822 #define PF_COMPARE64_EXCHANGE128 15
823 #define PF_CHANNELS_ENABLED 16
824 #define PF_XSAVE_ENABLED 17
826 #define MAXIMUM_WAIT_OBJECTS 64
828 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
830 #define ASSERT_DPC(Object) \
831 ASSERT(((Object)->Type == 0) || \
832 ((Object)->Type == DpcObject) || \
833 ((Object)->Type == ThreadedDpcObject))
835 #define ASSERT_GATE(object) \
836 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
837 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
839 #define ASSERT_DEVICE_QUEUE(Object) \
840 NT_ASSERT((Object)->Type == DeviceQueueObject)
842 #define ASSERT_TIMER(E) \
843 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
844 ((E)->Header.Type == TimerSynchronizationObject))
846 #define ASSERT_MUTANT(E) \
847 NT_ASSERT((E)->Header.Type == MutantObject)
849 #define ASSERT_SEMAPHORE(E) \
850 NT_ASSERT((E)->Header.Type == SemaphoreObject)
852 #define ASSERT_EVENT(E) \
853 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
854 ((E)->Header.Type == SynchronizationEvent))
857 #define DPC_THREADED 1
859 #define GM_LOCK_BIT 0x1
860 #define GM_LOCK_BIT_V 0x0
861 #define GM_LOCK_WAITER_WOKEN 0x2
862 #define GM_LOCK_WAITER_INC 0x4
864 #define LOCK_QUEUE_WAIT_BIT 0
865 #define LOCK_QUEUE_OWNER_BIT 1
867 #define LOCK_QUEUE_WAIT 1
868 #define LOCK_QUEUE_OWNER 2
869 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
870 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
872 #define PROCESSOR_FEATURE_MAX 64
874 #define DBG_STATUS_CONTROL_C 1
875 #define DBG_STATUS_SYSRQ 2
876 #define DBG_STATUS_BUGCHECK_FIRST 3
877 #define DBG_STATUS_BUGCHECK_SECOND 4
878 #define DBG_STATUS_FATAL 5
879 #define DBG_STATUS_DEBUG_CONTROL 6
880 #define DBG_STATUS_WORKER 7
883 #define MAXIMUM_PROC_PER_GROUP 64
885 #define MAXIMUM_PROC_PER_GROUP 32
887 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
889 #define EXCEPTION_DIVIDED_BY_ZERO 0
890 #define EXCEPTION_DEBUG 1
891 #define EXCEPTION_NMI 2
892 #define EXCEPTION_INT3 3
893 #define EXCEPTION_BOUND_CHECK 5
894 #define EXCEPTION_INVALID_OPCODE 6
895 #define EXCEPTION_NPX_NOT_AVAILABLE 7
896 #define EXCEPTION_DOUBLE_FAULT 8
897 #define EXCEPTION_NPX_OVERRUN 9
898 #define EXCEPTION_INVALID_TSS 0x0A
899 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
900 #define EXCEPTION_STACK_FAULT 0x0C
901 #define EXCEPTION_GP_FAULT 0x0D
902 #define EXCEPTION_RESERVED_TRAP 0x0F
903 #define EXCEPTION_NPX_ERROR 0x010
904 #define EXCEPTION_ALIGNMENT_CHECK 0x011
906 typedef enum _KBUGCHECK_CALLBACK_REASON
{
909 KbCallbackSecondaryDumpData
,
912 } KBUGCHECK_CALLBACK_REASON
;
914 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
916 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE
)
919 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
920 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
921 _In_
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
922 _Inout_ PVOID ReasonSpecificData
,
923 _In_ ULONG ReasonSpecificDataLength
);
924 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
926 typedef struct _KBUGCHECK_ADD_PAGES
{
927 _Inout_ PVOID Context
;
929 _In_ ULONG BugCheckCode
;
930 _Out_ ULONG_PTR Address
;
931 _Out_ ULONG_PTR Count
;
932 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
934 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
936 _In_ ULONG InBufferLength
;
937 _In_ ULONG MaximumAllowed
;
939 _Out_ PVOID OutBuffer
;
940 _Out_ ULONG OutBufferLength
;
941 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
943 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
947 KbDumpIoSecondaryData
,
949 } KBUGCHECK_DUMP_IO_TYPE
;
951 typedef struct _KBUGCHECK_DUMP_IO
{
954 _In_ ULONG BufferLength
;
955 _In_ KBUGCHECK_DUMP_IO_TYPE Type
;
956 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
958 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
959 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
960 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
962 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
964 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
967 KBUGCHECK_CALLBACK_REASON Reason
;
969 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
971 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
977 } KBUGCHECK_BUFFER_DUMP_STATE
;
979 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE
)
982 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
985 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
987 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
989 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
990 _Field_size_bytes_opt_(Length
) PVOID Buffer
;
995 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
997 _Function_class_(NMI_CALLBACK
)
1000 (NTAPI NMI_CALLBACK
)(
1001 _In_opt_ PVOID Context
,
1002 _In_ BOOLEAN Handled
);
1003 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
1005 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
1006 KeProcessorAddStartNotify
= 0,
1007 KeProcessorAddCompleteNotify
,
1008 KeProcessorAddFailureNotify
1009 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
1011 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
1012 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
1015 #if (NTDDI_VERSION >= NTDDI_WIN7)
1016 PROCESSOR_NUMBER ProcNumber
;
1018 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
1020 _IRQL_requires_same_
1021 _Function_class_(PROCESSOR_CALLBACK_FUNCTION
)
1023 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
1024 _In_ PVOID CallbackContext
,
1025 _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
1026 _Inout_ PNTSTATUS OperationStatus
);
1027 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
1029 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
1031 #define INVALID_PROCESSOR_INDEX 0xffffffff
1033 typedef enum _KINTERRUPT_POLARITY
{
1034 InterruptPolarityUnknown
,
1035 InterruptActiveHigh
,
1037 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1039 typedef enum _KPROFILE_SOURCE
{
1041 ProfileAlignmentFixup
,
1044 ProfileLoadInstructions
,
1045 ProfilePipelineFrozen
,
1046 ProfileBranchInstructions
,
1047 ProfileTotalNonissues
,
1048 ProfileDcacheMisses
,
1049 ProfileIcacheMisses
,
1051 ProfileBranchMispredictions
,
1052 ProfileStoreInstructions
,
1053 ProfileFpInstructions
,
1054 ProfileIntegerInstructions
,
1058 ProfileSpecialInstructions
,
1060 ProfileIcacheIssues
,
1061 ProfileDcacheAccesses
,
1062 ProfileMemoryBarrierCycles
,
1063 ProfileLoadLinkedIssues
,
1067 typedef enum _KWAIT_REASON
{
1108 typedef struct _KWAIT_BLOCK
{
1109 LIST_ENTRY WaitListEntry
;
1110 struct _KTHREAD
*Thread
;
1112 struct _KWAIT_BLOCK
*NextWaitBlock
;
1115 #if (NTDDI_VERSION >= NTDDI_WIN7)
1116 volatile UCHAR BlockState
;
1123 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
1125 typedef enum _KINTERRUPT_MODE
{
1130 #define THREAD_WAIT_OBJECTS 3
1132 _IRQL_requires_same_
1133 _Function_class_(KSTART_ROUTINE
)
1135 (NTAPI KSTART_ROUTINE
)(
1136 _In_ PVOID StartContext
);
1137 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
1140 (NTAPI
*PKINTERRUPT_ROUTINE
)(
1143 _Function_class_(KSERVICE_ROUTINE
)
1144 _IRQL_requires_(HIGH_LEVEL
)
1145 _IRQL_requires_same_
1147 (NTAPI KSERVICE_ROUTINE
)(
1148 _In_
struct _KINTERRUPT
*Interrupt
,
1149 _In_ PVOID ServiceContext
);
1150 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
1152 _Function_class_(KMESSAGE_SERVICE_ROUTINE
)
1153 _IRQL_requires_same_
1155 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
1156 _In_
struct _KINTERRUPT
*Interrupt
,
1157 _In_ PVOID ServiceContext
,
1158 _In_ ULONG MessageID
);
1159 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
1161 typedef enum _KD_OPTION
{
1162 KD_OPTION_SET_BLOCK_ENABLE
,
1166 (NTAPI
*PKNORMAL_ROUTINE
)(
1167 IN PVOID NormalContext OPTIONAL
,
1168 IN PVOID SystemArgument1 OPTIONAL
,
1169 IN PVOID SystemArgument2 OPTIONAL
);
1172 (NTAPI
*PKRUNDOWN_ROUTINE
)(
1173 IN
struct _KAPC
*Apc
);
1176 (NTAPI
*PKKERNEL_ROUTINE
)(
1177 IN
struct _KAPC
*Apc
,
1178 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
1179 IN OUT PVOID
*NormalContext OPTIONAL
,
1180 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
1181 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
1183 typedef struct _KAPC
{
1189 struct _KTHREAD
*Thread
;
1190 LIST_ENTRY ApcListEntry
;
1191 PKKERNEL_ROUTINE KernelRoutine
;
1192 PKRUNDOWN_ROUTINE RundownRoutine
;
1193 PKNORMAL_ROUTINE NormalRoutine
;
1194 PVOID NormalContext
;
1195 PVOID SystemArgument1
;
1196 PVOID SystemArgument2
;
1197 CCHAR ApcStateIndex
;
1198 KPROCESSOR_MODE ApcMode
;
1200 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1202 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
1203 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
1204 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
1205 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
1206 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
1207 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
1208 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
1210 typedef struct _KDEVICE_QUEUE_ENTRY
{
1211 LIST_ENTRY DeviceListEntry
;
1214 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1215 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1217 typedef PVOID PKIPI_CONTEXT
;
1220 (NTAPI
*PKIPI_WORKER
)(
1221 IN OUT PKIPI_CONTEXT PacketContext
,
1222 IN PVOID Parameter1 OPTIONAL
,
1223 IN PVOID Parameter2 OPTIONAL
,
1224 IN PVOID Parameter3 OPTIONAL
);
1226 typedef struct _KIPI_COUNTS
{
1231 ULONG FlushSingleTb
;
1232 ULONG FlushMultipleTb
;
1233 ULONG FlushEntireTb
;
1238 ULONG SweepIcacheRange
;
1239 ULONG FlushIoBuffers
;
1240 ULONG GratuitousDPC
;
1241 } KIPI_COUNTS
, *PKIPI_COUNTS
;
1243 _IRQL_requires_same_
1244 _Function_class_(KIPI_BROADCAST_WORKER
)
1245 _IRQL_requires_(IPI_LEVEL
)
1247 (NTAPI KIPI_BROADCAST_WORKER
)(
1248 _In_ ULONG_PTR Argument
);
1249 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
1251 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
1253 typedef struct _KSPIN_LOCK_QUEUE
{
1254 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1255 PKSPIN_LOCK
volatile Lock
;
1256 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1258 typedef struct _KLOCK_QUEUE_HANDLE
{
1259 KSPIN_LOCK_QUEUE LockQueue
;
1261 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1263 #if defined(_AMD64_)
1265 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
1267 #define LockQueueDispatcherLock 0
1268 #define LockQueueExpansionLock 1
1269 #define LockQueuePfnLock 2
1270 #define LockQueueSystemSpaceLock 3
1271 #define LockQueueVacbLock 4
1272 #define LockQueueMasterLock 5
1273 #define LockQueueNonPagedPoolLock 6
1274 #define LockQueueIoCancelLock 7
1275 #define LockQueueWorkQueueLock 8
1276 #define LockQueueIoVpbLock 9
1277 #define LockQueueIoDatabaseLock 10
1278 #define LockQueueIoCompletionLock 11
1279 #define LockQueueNtfsStructLock 12
1280 #define LockQueueAfdWorkQueueLock 13
1281 #define LockQueueBcbLock 14
1282 #define LockQueueMmNonPagedPoolLock 15
1283 #define LockQueueUnusedSpare16 16
1284 #define LockQueueTimerTableLock 17
1285 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
1289 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
1290 LockQueueDispatcherLock
,
1291 LockQueueExpansionLock
,
1293 LockQueueSystemSpaceLock
,
1295 LockQueueMasterLock
,
1296 LockQueueNonPagedPoolLock
,
1297 LockQueueIoCancelLock
,
1298 LockQueueWorkQueueLock
,
1300 LockQueueIoDatabaseLock
,
1301 LockQueueIoCompletionLock
,
1302 LockQueueNtfsStructLock
,
1303 LockQueueAfdWorkQueueLock
,
1305 LockQueueMmNonPagedPoolLock
,
1306 LockQueueUnusedSpare16
,
1307 LockQueueTimerTableLock
,
1308 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1309 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1311 #endif /* defined(_AMD64_) */
1313 _Function_class_(KDEFERRED_ROUTINE
)
1314 _IRQL_requires_(DISPATCH_LEVEL
)
1315 _IRQL_requires_same_
1317 (NTAPI KDEFERRED_ROUTINE
)(
1318 _In_
struct _KDPC
*Dpc
,
1319 _In_opt_ PVOID DeferredContext
,
1320 _In_opt_ PVOID SystemArgument1
,
1321 _In_opt_ PVOID SystemArgument2
);
1322 typedef KDEFERRED_ROUTINE
*PKDEFERRED_ROUTINE
;
1324 typedef enum _KDPC_IMPORTANCE
{
1328 MediumHighImportance
1331 typedef struct _KDPC
{
1334 volatile USHORT Number
;
1335 LIST_ENTRY DpcListEntry
;
1336 PKDEFERRED_ROUTINE DeferredRoutine
;
1337 PVOID DeferredContext
;
1338 PVOID SystemArgument1
;
1339 PVOID SystemArgument2
;
1340 volatile PVOID DpcData
;
1341 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1343 typedef struct _KDPC_WATCHDOG_INFORMATION
{
1346 ULONG DpcWatchdogLimit
;
1347 ULONG DpcWatchdogCount
;
1349 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
1351 typedef struct _KDEVICE_QUEUE
{
1354 LIST_ENTRY DeviceListHead
;
1356 # if defined(_AMD64_)
1357 _ANONYMOUS_UNION
union {
1359 _ANONYMOUS_STRUCT
struct {
1367 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1369 #define TIMER_EXPIRED_INDEX_BITS 6
1370 #define TIMER_PROCESSOR_INDEX_BITS 5
1372 typedef struct _DISPATCHER_HEADER
{
1373 _ANONYMOUS_UNION
union {
1374 _ANONYMOUS_STRUCT
struct {
1376 _ANONYMOUS_UNION
union {
1377 _ANONYMOUS_UNION
union {
1378 UCHAR TimerControlFlags
;
1379 _ANONYMOUS_STRUCT
struct {
1381 UCHAR Coalescable
:1;
1382 UCHAR KeepShifting
:1;
1383 UCHAR EncodedTolerableDelay
:5;
1387 #if (NTDDI_VERSION < NTDDI_WIN7)
1392 _ANONYMOUS_UNION
union {
1393 _ANONYMOUS_UNION
union {
1394 UCHAR ThreadControlFlags
;
1395 _ANONYMOUS_STRUCT
struct {
1396 UCHAR CpuThrottled
:1;
1397 UCHAR CycleProfiling
:1;
1398 UCHAR CounterProfiling
:1;
1405 _ANONYMOUS_UNION
union {
1406 #if (NTDDI_VERSION >= NTDDI_WIN7)
1407 _ANONYMOUS_UNION
union {
1408 UCHAR TimerMiscFlags
;
1409 _ANONYMOUS_STRUCT
struct {
1411 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
1414 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
1417 volatile UCHAR Expired
:1;
1421 /* Pre Win7 compatibility fix to latest WDK */
1424 _ANONYMOUS_UNION
union {
1425 BOOLEAN DebugActive
;
1426 _ANONYMOUS_STRUCT
struct {
1427 BOOLEAN ActiveDR7
:1;
1428 BOOLEAN Instrumented
:1;
1429 BOOLEAN Reserved2
:4;
1430 BOOLEAN UmsScheduled
:1;
1431 BOOLEAN UmsPrimary
:1;
1433 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
1440 LIST_ENTRY WaitListHead
;
1441 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1443 typedef struct _KEVENT
{
1444 DISPATCHER_HEADER Header
;
1445 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1447 typedef struct _KSEMAPHORE
{
1448 DISPATCHER_HEADER Header
;
1450 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1452 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
1454 typedef struct _KGATE
{
1455 DISPATCHER_HEADER Header
;
1456 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1458 typedef struct _KGUARDED_MUTEX
{
1459 volatile LONG Count
;
1463 _ANONYMOUS_UNION
union {
1464 _ANONYMOUS_STRUCT
struct {
1465 SHORT KernelApcDisable
;
1466 SHORT SpecialApcDisable
;
1468 ULONG CombinedApcDisable
;
1470 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1472 typedef struct _KMUTANT
{
1473 DISPATCHER_HEADER Header
;
1474 LIST_ENTRY MutantListEntry
;
1475 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1478 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1480 #define TIMER_TABLE_SIZE 512
1481 #define TIMER_TABLE_SHIFT 9
1483 typedef struct _KTIMER
{
1484 DISPATCHER_HEADER Header
;
1485 ULARGE_INTEGER DueTime
;
1486 LIST_ENTRY TimerListEntry
;
1488 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_)
1492 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1494 typedef enum _LOCK_OPERATION
{
1500 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
1502 _Function_class_(KSYNCHRONIZE_ROUTINE
)
1503 _IRQL_requires_same_
1505 (NTAPI KSYNCHRONIZE_ROUTINE
)(
1506 _In_ PVOID SynchronizeContext
);
1507 typedef KSYNCHRONIZE_ROUTINE
*PKSYNCHRONIZE_ROUTINE
;
1509 typedef enum _POOL_TYPE
{
1512 NonPagedPoolMustSucceed
,
1514 NonPagedPoolCacheAligned
,
1515 PagedPoolCacheAligned
,
1516 NonPagedPoolCacheAlignedMustS
,
1518 NonPagedPoolSession
= 32,
1520 NonPagedPoolMustSucceedSession
,
1521 DontUseThisTypeSession
,
1522 NonPagedPoolCacheAlignedSession
,
1523 PagedPoolCacheAlignedSession
,
1524 NonPagedPoolCacheAlignedMustSSession
1527 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
1531 } ALTERNATIVE_ARCHITECTURE_TYPE
;
1536 #define IsNEC_98 (FALSE)
1540 #define IsNotNEC_98 (TRUE)
1547 #ifndef SetNotNEC_98
1548 #define SetNotNEC_98
1553 typedef struct _KSYSTEM_TIME
{
1557 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
1559 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1564 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
1571 USHORT ErrorSelector
;
1574 USHORT DataSelector
;
1578 M128A FloatRegisters
[8];
1580 M128A XmmRegisters
[16];
1581 UCHAR Reserved4
[96];
1583 M128A XmmRegisters
[8];
1584 UCHAR Reserved4
[192];
1585 ULONG StackControl
[7];
1588 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1590 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
1592 ULONG64 Reserved
[7];
1593 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1595 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
1596 XSAVE_FORMAT LegacyState
;
1597 XSAVE_AREA_HEADER Header
;
1598 } XSAVE_AREA
, *PXSAVE_AREA
;
1600 typedef struct _XSTATE_CONTEXT
{
1604 _Field_size_bytes_opt_(Length
) PXSAVE_AREA Area
;
1612 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
1614 typedef struct _XSTATE_SAVE
{
1615 #if defined(_AMD64_)
1616 struct _XSTATE_SAVE
* Prev
;
1617 struct _KTHREAD
* Thread
;
1619 XSTATE_CONTEXT XStateContext
;
1620 #elif defined(_IA64_) || defined(_ARM_)
1622 #elif defined(_X86_)
1623 _ANONYMOUS_UNION
union {
1624 _ANONYMOUS_STRUCT
struct {
1627 struct _XSTATE_SAVE
* Prev
;
1628 PXSAVE_AREA Reserved3
;
1629 struct _KTHREAD
* Thread
;
1633 XSTATE_CONTEXT XStateContext
;
1636 } XSTATE_SAVE
, *PXSTATE_SAVE
;
1640 #define MAXIMUM_SUPPORTED_EXTENSION 512
1642 #if !defined(__midl) && !defined(MIDL_PASS)
1643 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
1648 #define XSAVE_ALIGN 64
1649 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
1651 #if !defined(__midl) && !defined(MIDL_PASS)
1652 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
1653 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
1654 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
1657 typedef struct _CONTEXT_CHUNK
{
1660 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1662 typedef struct _CONTEXT_EX
{
1664 CONTEXT_CHUNK Legacy
;
1665 CONTEXT_CHUNK XState
;
1666 } CONTEXT_EX
, *PCONTEXT_EX
;
1668 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
1670 #if (NTDDI_VERSION >= NTDDI_VISTA)
1671 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1672 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1673 extern NTSYSAPI CCHAR KeNumberProcessors
;
1675 extern PCCHAR KeNumberProcessors
;
1679 /******************************************************************************
1680 * Memory manager Types *
1681 ******************************************************************************/
1683 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1684 typedef ULONG NODE_REQUIREMENT
;
1685 #define MM_ANY_NODE_OK 0x80000000
1688 #define MM_DONT_ZERO_ALLOCATION 0x00000001
1689 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
1690 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
1691 #define MM_ALLOCATE_NO_WAIT 0x00000008
1692 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
1693 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
1695 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1696 #define MDL_PAGES_LOCKED 0x0002
1697 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1698 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1699 #define MDL_PARTIAL 0x0010
1700 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1701 #define MDL_IO_PAGE_READ 0x0040
1702 #define MDL_WRITE_OPERATION 0x0080
1703 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1704 #define MDL_FREE_EXTRA_PTES 0x0200
1705 #define MDL_DESCRIBES_AWE 0x0400
1706 #define MDL_IO_SPACE 0x0800
1707 #define MDL_NETWORK_HEADER 0x1000
1708 #define MDL_MAPPING_CAN_FAIL 0x2000
1709 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1710 #define MDL_INTERNAL 0x8000
1712 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
1713 MDL_PAGES_LOCKED | \
1714 MDL_SOURCE_IS_NONPAGED_POOL | \
1715 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1716 MDL_PARENT_MAPPED_SYSTEM_VA | \
1720 #define FLUSH_MULTIPLE_MAXIMUM 32
1722 /* Section access rights */
1723 #define SECTION_QUERY 0x0001
1724 #define SECTION_MAP_WRITE 0x0002
1725 #define SECTION_MAP_READ 0x0004
1726 #define SECTION_MAP_EXECUTE 0x0008
1727 #define SECTION_EXTEND_SIZE 0x0010
1728 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
1730 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
1731 SECTION_MAP_WRITE | \
1732 SECTION_MAP_READ | \
1733 SECTION_MAP_EXECUTE | \
1734 SECTION_EXTEND_SIZE)
1736 #define SESSION_QUERY_ACCESS 0x0001
1737 #define SESSION_MODIFY_ACCESS 0x0002
1739 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
1740 SESSION_QUERY_ACCESS | \
1741 SESSION_MODIFY_ACCESS)
1743 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
1745 #define PAGE_NOACCESS 0x01
1746 #define PAGE_READONLY 0x02
1747 #define PAGE_READWRITE 0x04
1748 #define PAGE_WRITECOPY 0x08
1749 #define PAGE_EXECUTE 0x10
1750 #define PAGE_EXECUTE_READ 0x20
1751 #define PAGE_EXECUTE_READWRITE 0x40
1752 #define PAGE_EXECUTE_WRITECOPY 0x80
1753 #define PAGE_GUARD 0x100
1754 #define PAGE_NOCACHE 0x200
1755 #define PAGE_WRITECOMBINE 0x400
1757 #define MEM_COMMIT 0x1000
1758 #define MEM_RESERVE 0x2000
1759 #define MEM_DECOMMIT 0x4000
1760 #define MEM_RELEASE 0x8000
1761 #define MEM_FREE 0x10000
1762 #define MEM_PRIVATE 0x20000
1763 #define MEM_MAPPED 0x40000
1764 #define MEM_RESET 0x80000
1765 #define MEM_TOP_DOWN 0x100000
1766 #define MEM_LARGE_PAGES 0x20000000
1767 #define MEM_4MB_PAGES 0x80000000
1769 #define SEC_RESERVE 0x4000000
1770 #define SEC_COMMIT 0x8000000
1771 #define SEC_LARGE_PAGES 0x80000000
1773 /* Section map options */
1774 typedef enum _SECTION_INHERIT
{
1779 typedef ULONG PFN_COUNT
;
1780 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
1781 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
1783 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL
) +
1784 (ByteOffset
+ ByteCount
+ PAGE_SIZE
-1) / PAGE_SIZE
* sizeof(PFN_NUMBER
)))
1785 typedef struct _MDL
{
1789 struct _EPROCESS
*Process
;
1790 PVOID MappedSystemVa
;
1795 #if (_MSC_VER >= 1600)
1796 typedef _Readable_bytes_(_Inexpressible_(polymorphism
)) MDL
*PMDLX
;
1801 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
1802 MmFrameBufferCached
= 2
1803 } MEMORY_CACHING_TYPE_ORIG
;
1805 typedef enum _MEMORY_CACHING_TYPE
{
1806 MmNonCached
= FALSE
,
1808 MmWriteCombined
= MmFrameBufferCached
,
1809 MmHardwareCoherentCached
,
1810 MmNonCachedUnordered
,
1813 } MEMORY_CACHING_TYPE
;
1815 typedef enum _MM_PAGE_PRIORITY
{
1817 NormalPagePriority
= 16,
1818 HighPagePriority
= 32
1821 typedef enum _MM_SYSTEM_SIZE
{
1827 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress
;
1828 extern PVOID MmBadPointer
;
1831 /******************************************************************************
1833 ******************************************************************************/
1834 #define EX_RUNDOWN_ACTIVE 0x1
1835 #define EX_RUNDOWN_COUNT_SHIFT 0x1
1836 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
1838 typedef struct _FAST_MUTEX
{
1839 volatile LONG Count
;
1844 } FAST_MUTEX
, *PFAST_MUTEX
;
1846 typedef enum _SUITE_TYPE
{
1850 CommunicationServer
,
1852 SmallBusinessRestricted
,
1866 typedef enum _EX_POOL_PRIORITY
{
1868 LowPoolPrioritySpecialPoolOverrun
= 8,
1869 LowPoolPrioritySpecialPoolUnderrun
= 9,
1870 NormalPoolPriority
= 16,
1871 NormalPoolPrioritySpecialPoolOverrun
= 24,
1872 NormalPoolPrioritySpecialPoolUnderrun
= 25,
1873 HighPoolPriority
= 32,
1874 HighPoolPrioritySpecialPoolOverrun
= 40,
1875 HighPoolPrioritySpecialPoolUnderrun
= 41
1878 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
1879 #define LOOKASIDE_ALIGN
1881 #define LOOKASIDE_ALIGN DECLSPEC_CACHEALIGN
1884 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
1886 _IRQL_requires_same_
1887 _Function_class_(ALLOCATE_FUNCTION
)
1889 (NTAPI
*PALLOCATE_FUNCTION
)(
1890 _In_ POOL_TYPE PoolType
,
1891 _In_ SIZE_T NumberOfBytes
,
1894 _IRQL_requires_same_
1895 _Function_class_(ALLOCATE_FUNCTION_EX
)
1897 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
1898 _In_ POOL_TYPE PoolType
,
1899 _In_ SIZE_T NumberOfBytes
,
1901 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
1903 _IRQL_requires_same_
1904 _Function_class_(FREE_FUNCTION
)
1906 (NTAPI
*PFREE_FUNCTION
)(
1909 _IRQL_requires_same_
1910 _Function_class_(FREE_FUNCTION_EX
)
1912 (NTAPI
*PFREE_FUNCTION_EX
)(
1914 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
1916 _IRQL_requires_same_
1917 _Function_class_(CALLBACK_FUNCTION
)
1919 (NTAPI CALLBACK_FUNCTION
)(
1920 _In_opt_ PVOID CallbackContext
,
1921 _In_opt_ PVOID Argument1
,
1922 _In_opt_ PVOID Argument2
);
1923 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
1925 #define GENERAL_LOOKASIDE_LAYOUT \
1926 _ANONYMOUS_UNION union { \
1927 SLIST_HEADER ListHead; \
1928 SINGLE_LIST_ENTRY SingleListHead; \
1931 USHORT MaximumDepth; \
1932 ULONG TotalAllocates; \
1933 _ANONYMOUS_UNION union { \
1934 ULONG AllocateMisses; \
1935 ULONG AllocateHits; \
1936 } DUMMYUNIONNAME2; \
1938 _ANONYMOUS_UNION union { \
1941 } DUMMYUNIONNAME3; \
1945 _ANONYMOUS_UNION union { \
1946 PALLOCATE_FUNCTION_EX AllocateEx; \
1947 PALLOCATE_FUNCTION Allocate; \
1948 } DUMMYUNIONNAME4; \
1949 _ANONYMOUS_UNION union { \
1950 PFREE_FUNCTION_EX FreeEx; \
1951 PFREE_FUNCTION Free; \
1952 } DUMMYUNIONNAME5; \
1953 LIST_ENTRY ListEntry; \
1954 ULONG LastTotalAllocates; \
1955 _ANONYMOUS_UNION union { \
1956 ULONG LastAllocateMisses; \
1957 ULONG LastAllocateHits; \
1958 } DUMMYUNIONNAME6; \
1961 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
1962 GENERAL_LOOKASIDE_LAYOUT
1963 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
1965 typedef struct _GENERAL_LOOKASIDE_POOL
{
1966 GENERAL_LOOKASIDE_LAYOUT
1967 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
1969 #define LOOKASIDE_CHECK(f) \
1970 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
1972 LOOKASIDE_CHECK(TotalFrees
);
1973 LOOKASIDE_CHECK(Tag
);
1974 LOOKASIDE_CHECK(Future
);
1976 typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST
{
1977 GENERAL_LOOKASIDE L
;
1978 #if !defined(_AMD64_) && !defined(_IA64_)
1979 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
1981 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
1983 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
1984 GENERAL_LOOKASIDE L
;
1985 #if !defined(_AMD64_) && !defined(_IA64_)
1986 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
1988 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
1990 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
1992 typedef struct _LOOKASIDE_LIST_EX
{
1993 GENERAL_LOOKASIDE_POOL L
;
1994 } LOOKASIDE_LIST_EX
;
1996 #if (NTDDI_VERSION >= NTDDI_VISTA)
1998 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
1999 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
2001 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
2002 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
2004 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2006 typedef struct _EX_RUNDOWN_REF
{
2007 _ANONYMOUS_UNION
union {
2008 volatile ULONG_PTR Count
;
2011 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
2013 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
2015 typedef enum _WORK_QUEUE_TYPE
{
2018 HyperCriticalWorkQueue
,
2022 _IRQL_requires_same_
2023 _Function_class_(WORKER_THREAD_ROUTINE
)
2025 (NTAPI WORKER_THREAD_ROUTINE
)(
2026 _In_ PVOID Parameter
);
2027 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
2029 typedef struct _WORK_QUEUE_ITEM
{
2031 PWORKER_THREAD_ROUTINE WorkerRoutine
;
2032 volatile PVOID Parameter
;
2033 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
2035 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
2037 typedef struct _OWNER_ENTRY
{
2038 ERESOURCE_THREAD OwnerThread
;
2039 _ANONYMOUS_UNION
union {
2040 _ANONYMOUS_STRUCT
struct {
2041 ULONG IoPriorityBoosted
:1;
2042 ULONG OwnerReferenced
:1;
2043 ULONG OwnerCount
:30;
2047 } OWNER_ENTRY
, *POWNER_ENTRY
;
2049 typedef struct _ERESOURCE
{
2050 LIST_ENTRY SystemResourcesList
;
2051 POWNER_ENTRY OwnerTable
;
2054 volatile PKSEMAPHORE SharedWaiters
;
2055 volatile PKEVENT ExclusiveWaiters
;
2056 OWNER_ENTRY OwnerEntry
;
2057 ULONG ActiveEntries
;
2058 ULONG ContentionCount
;
2059 ULONG NumberOfSharedWaiters
;
2060 ULONG NumberOfExclusiveWaiters
;
2064 _ANONYMOUS_UNION
union {
2066 ULONG_PTR CreatorBackTraceIndex
;
2068 KSPIN_LOCK SpinLock
;
2069 } ERESOURCE
, *PERESOURCE
;
2071 /* ERESOURCE.Flag */
2072 #define ResourceNeverExclusive 0x0010
2073 #define ResourceReleaseByOtherThread 0x0020
2074 #define ResourceOwnedExclusive 0x0080
2076 #define RESOURCE_HASH_TABLE_SIZE 64
2078 typedef struct _RESOURCE_HASH_ENTRY
{
2079 LIST_ENTRY ListEntry
;
2081 ULONG ContentionCount
;
2083 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
2085 typedef struct _RESOURCE_PERFORMANCE_DATA
{
2086 ULONG ActiveResourceCount
;
2087 ULONG TotalResourceCount
;
2088 ULONG ExclusiveAcquire
;
2089 ULONG SharedFirstLevel
;
2090 ULONG SharedSecondLevel
;
2091 ULONG StarveFirstLevel
;
2092 ULONG StarveSecondLevel
;
2093 ULONG WaitForExclusive
;
2094 ULONG OwnerTableExpands
;
2095 ULONG MaximumTableExpand
;
2096 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
2097 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
2099 /* Global debug flag */
2101 extern ULONG NtGlobalFlag
;
2102 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
2104 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
2107 /******************************************************************************
2108 * Security Manager Types *
2109 ******************************************************************************/
2112 typedef PVOID PSECURITY_DESCRIPTOR
;
2113 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
2114 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
2115 typedef PVOID PACCESS_TOKEN
;
2118 #define DELETE 0x00010000L
2119 #define READ_CONTROL 0x00020000L
2120 #define WRITE_DAC 0x00040000L
2121 #define WRITE_OWNER 0x00080000L
2122 #define SYNCHRONIZE 0x00100000L
2123 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
2124 #define STANDARD_RIGHTS_READ READ_CONTROL
2125 #define STANDARD_RIGHTS_WRITE READ_CONTROL
2126 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
2127 #define STANDARD_RIGHTS_ALL 0x001F0000L
2128 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
2129 #define ACCESS_SYSTEM_SECURITY 0x01000000L
2130 #define MAXIMUM_ALLOWED 0x02000000L
2131 #define GENERIC_READ 0x80000000L
2132 #define GENERIC_WRITE 0x40000000L
2133 #define GENERIC_EXECUTE 0x20000000L
2134 #define GENERIC_ALL 0x10000000L
2136 typedef struct _GENERIC_MAPPING
{
2137 ACCESS_MASK GenericRead
;
2138 ACCESS_MASK GenericWrite
;
2139 ACCESS_MASK GenericExecute
;
2140 ACCESS_MASK GenericAll
;
2141 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
2143 #define ACL_REVISION 2
2144 #define ACL_REVISION_DS 4
2146 #define ACL_REVISION1 1
2147 #define ACL_REVISION2 2
2148 #define ACL_REVISION3 3
2149 #define ACL_REVISION4 4
2150 #define MIN_ACL_REVISION ACL_REVISION2
2151 #define MAX_ACL_REVISION ACL_REVISION4
2153 typedef struct _ACL
{
2161 /* Current security descriptor revision value */
2162 #define SECURITY_DESCRIPTOR_REVISION (1)
2163 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2165 /* Privilege attributes */
2166 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2167 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2168 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2169 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2171 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
2172 SE_PRIVILEGE_ENABLED | \
2173 SE_PRIVILEGE_REMOVED | \
2174 SE_PRIVILEGE_USED_FOR_ACCESS)
2176 #include <pshpack4.h>
2177 typedef struct _LUID_AND_ATTRIBUTES
{
2180 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
2181 #include <poppack.h>
2183 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2184 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2186 /* Privilege sets */
2187 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2189 typedef struct _PRIVILEGE_SET
{
2190 ULONG PrivilegeCount
;
2192 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2193 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2195 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2197 SecurityIdentification
,
2198 SecurityImpersonation
,
2200 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2202 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2203 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2204 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2205 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2207 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2208 #define SECURITY_STATIC_TRACKING (FALSE)
2210 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2212 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2214 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2215 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2216 BOOLEAN EffectiveOnly
;
2217 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2219 typedef struct _SE_IMPERSONATION_STATE
{
2220 PACCESS_TOKEN Token
;
2222 BOOLEAN EffectiveOnly
;
2223 SECURITY_IMPERSONATION_LEVEL Level
;
2224 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2226 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2227 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2228 #define DACL_SECURITY_INFORMATION (0x00000004L)
2229 #define SACL_SECURITY_INFORMATION (0x00000008L)
2230 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2232 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2233 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2234 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2235 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2237 typedef enum _SECURITY_OPERATION_CODE
{
2238 SetSecurityDescriptor
,
2239 QuerySecurityDescriptor
,
2240 DeleteSecurityDescriptor
,
2241 AssignSecurityDescriptor
2242 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2244 #define INITIAL_PRIVILEGE_COUNT 3
2246 typedef struct _INITIAL_PRIVILEGE_SET
{
2247 ULONG PrivilegeCount
;
2249 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2250 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2252 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2253 #define SE_CREATE_TOKEN_PRIVILEGE 2
2254 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2255 #define SE_LOCK_MEMORY_PRIVILEGE 4
2256 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2257 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2258 #define SE_TCB_PRIVILEGE 7
2259 #define SE_SECURITY_PRIVILEGE 8
2260 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2261 #define SE_LOAD_DRIVER_PRIVILEGE 10
2262 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2263 #define SE_SYSTEMTIME_PRIVILEGE 12
2264 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2265 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2266 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2267 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2268 #define SE_BACKUP_PRIVILEGE 17
2269 #define SE_RESTORE_PRIVILEGE 18
2270 #define SE_SHUTDOWN_PRIVILEGE 19
2271 #define SE_DEBUG_PRIVILEGE 20
2272 #define SE_AUDIT_PRIVILEGE 21
2273 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2274 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2275 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2276 #define SE_UNDOCK_PRIVILEGE 25
2277 #define SE_SYNC_AGENT_PRIVILEGE 26
2278 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2279 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2280 #define SE_IMPERSONATE_PRIVILEGE 29
2281 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2282 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2283 #define SE_RELABEL_PRIVILEGE 32
2284 #define SE_INC_WORKING_SET_PRIVILEGE 33
2285 #define SE_TIME_ZONE_PRIVILEGE 34
2286 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2287 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2289 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2290 PACCESS_TOKEN ClientToken
;
2291 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2292 PACCESS_TOKEN PrimaryToken
;
2293 PVOID ProcessAuditId
;
2294 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2296 typedef struct _ACCESS_STATE
{
2298 BOOLEAN SecurityEvaluated
;
2299 BOOLEAN GenerateAudit
;
2300 BOOLEAN GenerateOnClose
;
2301 BOOLEAN PrivilegesAllocated
;
2303 ACCESS_MASK RemainingDesiredAccess
;
2304 ACCESS_MASK PreviouslyGrantedAccess
;
2305 ACCESS_MASK OriginalDesiredAccess
;
2306 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2307 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2310 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2311 PRIVILEGE_SET PrivilegeSet
;
2313 BOOLEAN AuditPrivileges
;
2314 UNICODE_STRING ObjectName
;
2315 UNICODE_STRING ObjectTypeName
;
2316 } ACCESS_STATE
, *PACCESS_STATE
;
2319 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2321 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
2325 #ifndef _NTLSA_AUDIT_
2326 #define _NTLSA_AUDIT_
2328 #define SE_MAX_AUDIT_PARAMETERS 32
2329 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2331 #define SE_ADT_OBJECT_ONLY 0x1
2333 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2334 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2335 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2336 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2337 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2339 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2340 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2341 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2343 typedef enum _SE_ADT_PARAMETER_TYPE
{
2344 SeAdtParmTypeNone
= 0,
2345 SeAdtParmTypeString
,
2346 SeAdtParmTypeFileSpec
,
2349 SeAdtParmTypeLogonId
,
2350 SeAdtParmTypeNoLogonId
,
2351 SeAdtParmTypeAccessMask
,
2353 SeAdtParmTypeObjectTypes
,
2354 SeAdtParmTypeHexUlong
,
2359 SeAdtParmTypeHexInt64
,
2360 SeAdtParmTypeStringList
,
2361 SeAdtParmTypeSidList
,
2362 SeAdtParmTypeDuration
,
2363 SeAdtParmTypeUserAccountControl
,
2365 SeAdtParmTypeMessage
,
2366 SeAdtParmTypeDateTime
,
2367 SeAdtParmTypeSockAddr
,
2369 SeAdtParmTypeLogonHours
,
2370 SeAdtParmTypeLogonIdNoSid
,
2371 SeAdtParmTypeUlongNoConv
,
2372 SeAdtParmTypeSockAddrNoPort
,
2373 SeAdtParmTypeAccessReason
2374 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2376 typedef struct _SE_ADT_OBJECT_TYPE
{
2380 ACCESS_MASK AccessMask
;
2381 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2383 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2384 SE_ADT_PARAMETER_TYPE Type
;
2388 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2390 typedef struct _SE_ADT_ACCESS_REASON
{
2391 ACCESS_MASK AccessMask
;
2392 ULONG AccessReasons
[32];
2393 ULONG ObjectTypeIndex
;
2394 ULONG AccessGranted
;
2395 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2396 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2398 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2401 ULONG ParameterCount
;
2403 USHORT FlatSubCategoryId
;
2406 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2407 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2409 #endif /* !_NTLSA_AUDIT_ */
2410 #endif /* !_NTLSA_IFS_ */
2411 /******************************************************************************
2412 * Power Management Support Types *
2413 ******************************************************************************/
2418 #define PO_CB_SYSTEM_POWER_POLICY 0
2419 #define PO_CB_AC_STATUS 1
2420 #define PO_CB_BUTTON_COLLISION 2
2421 #define PO_CB_SYSTEM_STATE_LOCK 3
2422 #define PO_CB_LID_SWITCH_STATE 4
2423 #define PO_CB_PROCESSOR_POWER_POLICY 5
2425 /* Power States/Levels */
2426 typedef enum _SYSTEM_POWER_STATE
{
2427 PowerSystemUnspecified
= 0,
2429 PowerSystemSleeping1
,
2430 PowerSystemSleeping2
,
2431 PowerSystemSleeping3
,
2432 PowerSystemHibernate
,
2433 PowerSystemShutdown
,
2435 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2437 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
2439 typedef enum _POWER_INFORMATION_LEVEL
{
2440 SystemPowerPolicyAc
,
2441 SystemPowerPolicyDc
,
2442 VerifySystemPolicyAc
,
2443 VerifySystemPolicyDc
,
2444 SystemPowerCapabilities
,
2446 SystemPowerStateHandler
,
2447 ProcessorStateHandler
,
2448 SystemPowerPolicyCurrent
,
2449 AdministratorPowerPolicy
,
2450 SystemReserveHiberFile
,
2451 ProcessorInformation
,
2452 SystemPowerInformation
,
2453 ProcessorStateHandler2
,
2456 SystemExecutionState
,
2457 SystemPowerStateNotifyHandler
,
2458 ProcessorPowerPolicyAc
,
2459 ProcessorPowerPolicyDc
,
2460 VerifyProcessorPowerPolicyAc
,
2461 VerifyProcessorPowerPolicyDc
,
2462 ProcessorPowerPolicyCurrent
,
2463 SystemPowerStateLogging
,
2464 SystemPowerLoggingEntry
,
2465 SetPowerSettingValue
,
2466 NotifyUserPowerSetting
,
2467 PowerInformationLevelUnused0
,
2468 PowerInformationLevelUnused1
,
2470 TraceApplicationPowerMessage
,
2471 TraceApplicationPowerMessageEnd
,
2472 ProcessorPerfStates
,
2473 ProcessorIdleStates
,
2476 SystemHiberFileInformation
,
2477 TraceServicePowerMessage
,
2479 PowerShutdownNotification
,
2480 MonitorCapabilities
,
2482 SessionDisplayState
,
2485 GetPowerRequestList
,
2486 ProcessorInformationEx
,
2487 NotifyUserModeLegacyPowerEvent
,
2489 ProcessorIdleDomains
,
2491 SystemHiberFileSize
,
2492 PowerInformationLevelMaximum
2493 } POWER_INFORMATION_LEVEL
;
2496 PowerActionNone
= 0,
2497 PowerActionReserved
,
2499 PowerActionHibernate
,
2500 PowerActionShutdown
,
2501 PowerActionShutdownReset
,
2502 PowerActionShutdownOff
,
2503 PowerActionWarmEject
2504 } POWER_ACTION
, *PPOWER_ACTION
;
2506 typedef enum _DEVICE_POWER_STATE
{
2507 PowerDeviceUnspecified
= 0,
2513 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
2515 typedef enum _MONITOR_DISPLAY_STATE
{
2516 PowerMonitorOff
= 0,
2519 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
2521 typedef union _POWER_STATE
{
2522 SYSTEM_POWER_STATE SystemState
;
2523 DEVICE_POWER_STATE DeviceState
;
2524 } POWER_STATE
, *PPOWER_STATE
;
2526 typedef enum _POWER_STATE_TYPE
{
2527 SystemPowerState
= 0,
2529 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
2531 #if (NTDDI_VERSION >= NTDDI_VISTA)
2532 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
2533 _ANONYMOUS_UNION
union {
2534 _ANONYMOUS_STRUCT
struct {
2536 ULONG TargetSystemState
:4;
2537 ULONG EffectiveSystemState
:4;
2538 ULONG CurrentSystemState
:4;
2539 ULONG IgnoreHibernationPath
:1;
2540 ULONG PseudoTransition
:1;
2543 ULONG ContextAsUlong
;
2545 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
2548 #if (NTDDI_VERSION >= NTDDI_WIN7)
2549 typedef struct _COUNTED_REASON_CONTEXT
{
2552 _ANONYMOUS_UNION
union {
2553 _ANONYMOUS_STRUCT
struct {
2554 UNICODE_STRING ResourceFileName
;
2555 USHORT ResourceReasonId
;
2557 PUNICODE_STRING ReasonStrings
;
2559 UNICODE_STRING SimpleString
;
2561 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
2564 #define IOCTL_QUERY_DEVICE_POWER_STATE \
2565 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
2567 #define IOCTL_SET_DEVICE_WAKE \
2568 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2570 #define IOCTL_CANCEL_DEVICE_WAKE \
2571 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2573 #define ES_SYSTEM_REQUIRED 0x00000001
2574 #define ES_DISPLAY_REQUIRED 0x00000002
2575 #define ES_USER_PRESENT 0x00000004
2576 #define ES_CONTINUOUS 0x80000000
2578 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
2585 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
2586 #define DIAGNOSTIC_REASON_VERSION 0
2587 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
2588 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
2589 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
2590 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
2593 #define POWER_REQUEST_CONTEXT_VERSION 0
2594 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
2595 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
2597 #define PowerRequestMaximum 3
2599 typedef enum _POWER_REQUEST_TYPE
{
2600 PowerRequestDisplayRequired
,
2601 PowerRequestSystemRequired
,
2602 PowerRequestAwayModeRequired
2603 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
2605 #if (NTDDI_VERSION >= NTDDI_WINXP)
2607 #define PDCAP_D0_SUPPORTED 0x00000001
2608 #define PDCAP_D1_SUPPORTED 0x00000002
2609 #define PDCAP_D2_SUPPORTED 0x00000004
2610 #define PDCAP_D3_SUPPORTED 0x00000008
2611 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
2612 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
2613 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
2614 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
2615 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
2617 typedef struct CM_Power_Data_s
{
2619 DEVICE_POWER_STATE PD_MostRecentPowerState
;
2620 ULONG PD_Capabilities
;
2624 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
2625 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
2626 } CM_POWER_DATA
, *PCM_POWER_DATA
;
2628 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2630 typedef enum _SYSTEM_POWER_CONDITION
{
2635 } SYSTEM_POWER_CONDITION
;
2637 typedef struct _SET_POWER_SETTING_VALUE
{
2640 SYSTEM_POWER_CONDITION PowerCondition
;
2642 UCHAR Data
[ANYSIZE_ARRAY
];
2643 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
2645 #define POWER_SETTING_VALUE_VERSION (0x1)
2647 typedef struct _NOTIFY_USER_POWER_SETTING
{
2649 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
2651 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
2652 LARGE_INTEGER ActivationTime
;
2654 ULONG ButtonInstanceID
;
2655 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
2657 typedef enum _POWER_PLATFORM_ROLE
{
2658 PlatformRoleUnspecified
= 0,
2659 PlatformRoleDesktop
,
2661 PlatformRoleWorkstation
,
2662 PlatformRoleEnterpriseServer
,
2663 PlatformRoleSOHOServer
,
2664 PlatformRoleAppliancePC
,
2665 PlatformRolePerformanceServer
,
2667 } POWER_PLATFORM_ROLE
;
2669 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
2673 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
2674 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
2676 #endif /* !_PO_DDK_ */
2678 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
2679 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
2680 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
2681 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
2683 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
2684 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
2685 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
2686 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
2687 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
2688 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
2689 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
2690 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
2691 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
2692 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
2693 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
2694 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
2695 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
2696 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
2697 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
2698 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
2699 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
2700 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
2701 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
2702 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
2703 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
2704 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
2705 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
2706 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
2707 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
2708 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
2709 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
2710 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
2711 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
2712 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
2713 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
2714 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
2715 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
2716 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
2717 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
2718 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
2719 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
2720 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
2721 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
2722 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
2723 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
2724 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
2725 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
2726 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
2727 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
2728 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
2729 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
2730 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
2731 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
2732 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
2733 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
2734 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
2735 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
2736 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
2737 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
2738 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
2739 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
2740 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
2741 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
2742 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
2743 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
2744 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
2745 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
2746 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
2747 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
2748 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
2749 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
2750 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
2751 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
2752 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
2753 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
2754 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
2755 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
2756 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
2757 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
2758 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
2759 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
2760 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
2761 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
2762 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
2763 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
2764 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
2765 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
2766 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
2767 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
2768 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
2769 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
2770 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
2771 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
2772 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
2773 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
2774 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
2775 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
2776 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
2777 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
2778 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
2779 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
2780 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
2781 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
2782 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
2783 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
2784 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
2785 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
2786 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
2787 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
2788 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
2789 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
2790 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
2791 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
2793 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
2794 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
2795 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
2796 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
2798 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
2799 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
2801 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
2802 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
2804 _Function_class_(REQUEST_POWER_COMPLETE
)
2805 _IRQL_requires_same_
2807 (NTAPI REQUEST_POWER_COMPLETE
)(
2808 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2809 _In_ UCHAR MinorFunction
,
2810 _In_ POWER_STATE PowerState
,
2811 _In_opt_ PVOID Context
,
2812 _In_
struct _IO_STATUS_BLOCK
*IoStatus
);
2813 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
2815 _Function_class_(POWER_SETTING_CALLBACK
)
2816 _IRQL_requires_same_
2818 (NTAPI POWER_SETTING_CALLBACK
)(
2819 _In_ LPCGUID SettingGuid
,
2820 _In_reads_bytes_(ValueLength
) PVOID Value
,
2821 _In_ ULONG ValueLength
,
2822 _Inout_opt_ PVOID Context
);
2823 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
2825 /******************************************************************************
2826 * Configuration Manager Types *
2827 ******************************************************************************/
2829 /* Resource list definitions */
2830 typedef int CM_RESOURCE_TYPE
;
2832 #define CmResourceTypeNull 0
2833 #define CmResourceTypePort 1
2834 #define CmResourceTypeInterrupt 2
2835 #define CmResourceTypeMemory 3
2836 #define CmResourceTypeDma 4
2837 #define CmResourceTypeDeviceSpecific 5
2838 #define CmResourceTypeBusNumber 6
2839 #define CmResourceTypeNonArbitrated 128
2840 #define CmResourceTypeConfigData 128
2841 #define CmResourceTypeDevicePrivate 129
2842 #define CmResourceTypePcCardConfig 130
2843 #define CmResourceTypeMfCardConfig 131
2845 /* KEY_VALUE_Xxx.Type */
2848 #define REG_EXPAND_SZ 2
2849 #define REG_BINARY 3
2851 #define REG_DWORD_LITTLE_ENDIAN 4
2852 #define REG_DWORD_BIG_ENDIAN 5
2854 #define REG_MULTI_SZ 7
2855 #define REG_RESOURCE_LIST 8
2856 #define REG_FULL_RESOURCE_DESCRIPTOR 9
2857 #define REG_RESOURCE_REQUIREMENTS_LIST 10
2858 #define REG_QWORD 11
2859 #define REG_QWORD_LITTLE_ENDIAN 11
2861 /* Registry Access Rights */
2862 #define KEY_QUERY_VALUE (0x0001)
2863 #define KEY_SET_VALUE (0x0002)
2864 #define KEY_CREATE_SUB_KEY (0x0004)
2865 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
2866 #define KEY_NOTIFY (0x0010)
2867 #define KEY_CREATE_LINK (0x0020)
2868 #define KEY_WOW64_32KEY (0x0200)
2869 #define KEY_WOW64_64KEY (0x0100)
2870 #define KEY_WOW64_RES (0x0300)
2872 #define KEY_READ ((STANDARD_RIGHTS_READ |\
2874 KEY_ENUMERATE_SUB_KEYS |\
2879 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
2881 KEY_CREATE_SUB_KEY) \
2885 #define KEY_EXECUTE ((KEY_READ) \
2889 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
2892 KEY_CREATE_SUB_KEY |\
2893 KEY_ENUMERATE_SUB_KEYS |\
2899 /* Registry Open/Create Options */
2900 #define REG_OPTION_RESERVED (0x00000000L)
2901 #define REG_OPTION_NON_VOLATILE (0x00000000L)
2902 #define REG_OPTION_VOLATILE (0x00000001L)
2903 #define REG_OPTION_CREATE_LINK (0x00000002L)
2904 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
2905 #define REG_OPTION_OPEN_LINK (0x00000008L)
2907 #define REG_LEGAL_OPTION \
2908 (REG_OPTION_RESERVED |\
2909 REG_OPTION_NON_VOLATILE |\
2910 REG_OPTION_VOLATILE |\
2911 REG_OPTION_CREATE_LINK |\
2912 REG_OPTION_BACKUP_RESTORE |\
2913 REG_OPTION_OPEN_LINK)
2915 #define REG_OPEN_LEGAL_OPTION \
2916 (REG_OPTION_RESERVED |\
2917 REG_OPTION_BACKUP_RESTORE |\
2918 REG_OPTION_OPEN_LINK)
2920 #define REG_STANDARD_FORMAT 1
2921 #define REG_LATEST_FORMAT 2
2922 #define REG_NO_COMPRESSION 4
2924 /* Key creation/open disposition */
2925 #define REG_CREATED_NEW_KEY (0x00000001L)
2926 #define REG_OPENED_EXISTING_KEY (0x00000002L)
2928 /* Key restore & hive load flags */
2929 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
2930 #define REG_REFRESH_HIVE (0x00000002L)
2931 #define REG_NO_LAZY_FLUSH (0x00000004L)
2932 #define REG_FORCE_RESTORE (0x00000008L)
2933 #define REG_APP_HIVE (0x00000010L)
2934 #define REG_PROCESS_PRIVATE (0x00000020L)
2935 #define REG_START_JOURNAL (0x00000040L)
2936 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
2937 #define REG_HIVE_NO_RM (0x00000100L)
2938 #define REG_HIVE_SINGLE_LOG (0x00000200L)
2939 #define REG_BOOT_HIVE (0x00000400L)
2942 #define REG_FORCE_UNLOAD 1
2944 /* Notify Filter Values */
2945 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
2946 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
2947 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
2948 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
2950 #define REG_LEGAL_CHANGE_FILTER \
2951 (REG_NOTIFY_CHANGE_NAME |\
2952 REG_NOTIFY_CHANGE_ATTRIBUTES |\
2953 REG_NOTIFY_CHANGE_LAST_SET |\
2954 REG_NOTIFY_CHANGE_SECURITY)
2956 #include <pshpack4.h>
2957 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
2959 UCHAR ShareDisposition
;
2963 PHYSICAL_ADDRESS Start
;
2967 PHYSICAL_ADDRESS Start
;
2971 #if defined(NT_PROCESSOR_GROUPS)
2980 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2982 _ANONYMOUS_UNION
union {
2984 #if defined(NT_PROCESSOR_GROUPS)
2989 USHORT MessageCount
;
2994 #if defined(NT_PROCESSOR_GROUPS)
3007 PHYSICAL_ADDRESS Start
;
3027 } DeviceSpecificData
;
3028 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3030 PHYSICAL_ADDRESS Start
;
3034 PHYSICAL_ADDRESS Start
;
3038 PHYSICAL_ADDRESS Start
;
3043 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
3044 #include <poppack.h>
3046 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
3047 #define CmResourceTypeNull 0
3048 #define CmResourceTypePort 1
3049 #define CmResourceTypeInterrupt 2
3050 #define CmResourceTypeMemory 3
3051 #define CmResourceTypeDma 4
3052 #define CmResourceTypeDeviceSpecific 5
3053 #define CmResourceTypeBusNumber 6
3054 #define CmResourceTypeMemoryLarge 7
3055 #define CmResourceTypeNonArbitrated 128
3056 #define CmResourceTypeConfigData 128
3057 #define CmResourceTypeDevicePrivate 129
3058 #define CmResourceTypePcCardConfig 130
3059 #define CmResourceTypeMfCardConfig 131
3061 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
3062 typedef enum _CM_SHARE_DISPOSITION
{
3063 CmResourceShareUndetermined
= 0,
3064 CmResourceShareDeviceExclusive
,
3065 CmResourceShareDriverExclusive
,
3066 CmResourceShareShared
3067 } CM_SHARE_DISPOSITION
;
3069 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
3070 #define CM_RESOURCE_PORT_MEMORY 0x0000
3071 #define CM_RESOURCE_PORT_IO 0x0001
3072 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
3073 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
3074 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
3075 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
3076 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
3077 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
3078 #define CM_RESOURCE_PORT_BAR 0x0100
3080 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
3081 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
3082 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
3083 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
3084 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
3086 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
3088 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
3090 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
3091 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
3092 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
3093 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
3094 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
3095 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
3096 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
3097 #define CM_RESOURCE_MEMORY_24 0x0010
3098 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
3099 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
3100 #define CM_RESOURCE_MEMORY_BAR 0x0080
3101 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
3103 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
3104 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
3105 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
3106 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
3108 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
3109 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
3110 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
3112 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
3113 #define CM_RESOURCE_DMA_8 0x0000
3114 #define CM_RESOURCE_DMA_16 0x0001
3115 #define CM_RESOURCE_DMA_32 0x0002
3116 #define CM_RESOURCE_DMA_8_AND_16 0x0004
3117 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
3118 #define CM_RESOURCE_DMA_TYPE_A 0x0010
3119 #define CM_RESOURCE_DMA_TYPE_B 0x0020
3120 #define CM_RESOURCE_DMA_TYPE_F 0x0040
3122 typedef struct _DEVICE_FLAGS
{
3130 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
3132 typedef enum _INTERFACE_TYPE
{
3133 InterfaceTypeUndefined
= -1,
3151 MaximumInterfaceType
3152 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
3154 typedef struct _CM_COMPONENT_INFORMATION
{
3158 KAFFINITY AffinityMask
;
3159 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
3161 typedef struct _CM_ROM_BLOCK
{
3164 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
3166 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
3170 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
3171 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
3173 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
3174 INTERFACE_TYPE InterfaceType
;
3176 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
3177 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
3179 typedef struct _CM_RESOURCE_LIST
{
3181 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
3182 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
3184 typedef struct _PNP_BUS_INFORMATION
{
3186 INTERFACE_TYPE LegacyBusType
;
3188 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
3190 #include <pshpack1.h>
3192 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3195 USHORT SectorsPerTrack
;
3197 USHORT NumberDrives
;
3198 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3200 typedef struct _CM_MCA_POS_DATA
{
3206 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3208 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3212 UCHAR DeviceType
[3];
3213 USHORT DeviceAttributes
;
3214 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3216 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3220 USHORT ControlField
;
3222 ULONG EventFlagAddress
;
3223 USHORT RealModeEntryOffset
;
3224 USHORT RealModeEntrySegment
;
3225 USHORT ProtectedModeEntryOffset
;
3226 ULONG ProtectedModeCodeBaseAddress
;
3228 USHORT RealModeDataBaseAddress
;
3229 ULONG ProtectedModeDataBaseAddress
;
3230 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3232 #include <poppack.h>
3234 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3235 ULONG BytesPerSector
;
3236 ULONG NumberOfCylinders
;
3237 ULONG SectorsPerTrack
;
3238 ULONG NumberOfHeads
;
3239 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3241 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3246 USHORT KeyboardFlags
;
3247 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3249 typedef struct _CM_SCSI_DEVICE_DATA
{
3252 UCHAR HostIdentifier
;
3253 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3255 typedef struct _CM_VIDEO_DEVICE_DATA
{
3259 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3261 typedef struct _CM_SONIC_DEVICE_DATA
{
3264 USHORT DataConfigurationRegister
;
3265 UCHAR EthernetAddress
[8];
3266 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3268 typedef struct _CM_SERIAL_DEVICE_DATA
{
3272 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3274 typedef struct _CM_MONITOR_DEVICE_DATA
{
3277 USHORT HorizontalScreenSize
;
3278 USHORT VerticalScreenSize
;
3279 USHORT HorizontalResolution
;
3280 USHORT VerticalResolution
;
3281 USHORT HorizontalDisplayTimeLow
;
3282 USHORT HorizontalDisplayTime
;
3283 USHORT HorizontalDisplayTimeHigh
;
3284 USHORT HorizontalBackPorchLow
;
3285 USHORT HorizontalBackPorch
;
3286 USHORT HorizontalBackPorchHigh
;
3287 USHORT HorizontalFrontPorchLow
;
3288 USHORT HorizontalFrontPorch
;
3289 USHORT HorizontalFrontPorchHigh
;
3290 USHORT HorizontalSyncLow
;
3291 USHORT HorizontalSync
;
3292 USHORT HorizontalSyncHigh
;
3293 USHORT VerticalBackPorchLow
;
3294 USHORT VerticalBackPorch
;
3295 USHORT VerticalBackPorchHigh
;
3296 USHORT VerticalFrontPorchLow
;
3297 USHORT VerticalFrontPorch
;
3298 USHORT VerticalFrontPorchHigh
;
3299 USHORT VerticalSyncLow
;
3300 USHORT VerticalSync
;
3301 USHORT VerticalSyncHigh
;
3302 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3304 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3310 UCHAR StepRateHeadUnloadTime
;
3313 UCHAR SectorLengthCode
;
3314 UCHAR SectorPerTrack
;
3315 UCHAR ReadWriteGapLength
;
3316 UCHAR DataTransferLength
;
3317 UCHAR FormatGapLength
;
3318 UCHAR FormatFillCharacter
;
3319 UCHAR HeadSettleTime
;
3320 UCHAR MotorSettleTime
;
3321 UCHAR MaximumTrackValue
;
3322 UCHAR DataTransferRate
;
3323 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3325 typedef enum _KEY_INFORMATION_CLASS
{
3326 KeyBasicInformation
,
3330 KeyCachedInformation
,
3331 KeyFlagsInformation
,
3332 KeyVirtualizationInformation
,
3333 KeyHandleTagsInformation
,
3335 } KEY_INFORMATION_CLASS
;
3337 typedef struct _KEY_BASIC_INFORMATION
{
3338 LARGE_INTEGER LastWriteTime
;
3342 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3344 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3346 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3348 typedef struct _KEY_FULL_INFORMATION
{
3349 LARGE_INTEGER LastWriteTime
;
3357 ULONG MaxValueNameLen
;
3358 ULONG MaxValueDataLen
;
3360 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3362 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3364 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3366 typedef struct _KEY_NODE_INFORMATION
{
3367 LARGE_INTEGER LastWriteTime
;
3373 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3375 typedef enum _KEY_SET_INFORMATION_CLASS
{
3376 KeyWriteTimeInformation
,
3377 KeyWow64FlagsInformation
,
3378 KeyControlFlagsInformation
,
3379 KeySetVirtualizationInformation
,
3380 KeySetDebugInformation
,
3381 KeySetHandleTagsInformation
,
3383 } KEY_SET_INFORMATION_CLASS
;
3385 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3386 ULONG VirtualTarget
:1;
3387 ULONG VirtualStore
:1;
3388 ULONG VirtualSource
:1;
3390 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3392 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3397 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3399 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3406 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3408 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3412 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3413 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3415 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3418 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3419 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3421 typedef struct _KEY_VALUE_ENTRY
{
3422 PUNICODE_STRING ValueName
;
3426 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3428 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3429 KeyValueBasicInformation
,
3430 KeyValueFullInformation
,
3431 KeyValuePartialInformation
,
3432 KeyValueFullInformationAlign64
,
3433 KeyValuePartialInformationAlign64
3434 } KEY_VALUE_INFORMATION_CLASS
;
3436 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3438 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
3440 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3441 LARGE_INTEGER LastWriteTime
;
3442 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3444 #if (NTDDI_VERSION < NTDDI_VISTA)
3445 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3447 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3450 typedef enum _REG_NOTIFY_CLASS
{
3452 RegNtPreDeleteKey
= RegNtDeleteKey
,
3454 RegNtPreSetValueKey
= RegNtSetValueKey
,
3455 RegNtDeleteValueKey
,
3456 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3457 RegNtSetInformationKey
,
3458 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3460 RegNtPreRenameKey
= RegNtRenameKey
,
3462 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3463 RegNtEnumerateValueKey
,
3464 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3466 RegNtPreQueryKey
= RegNtQueryKey
,
3468 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3469 RegNtQueryMultipleValueKey
,
3470 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3475 RegNtKeyHandleClose
,
3476 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3478 RegNtPostSetValueKey
,
3479 RegNtPostDeleteValueKey
,
3480 RegNtPostSetInformationKey
,
3482 RegNtPostEnumerateKey
,
3483 RegNtPostEnumerateValueKey
,
3485 RegNtPostQueryValueKey
,
3486 RegNtPostQueryMultipleValueKey
,
3487 RegNtPostKeyHandleClose
,
3488 RegNtPreCreateKeyEx
,
3489 RegNtPostCreateKeyEx
,
3498 RegNtPreQueryKeySecurity
,
3499 RegNtPostQueryKeySecurity
,
3500 RegNtPreSetKeySecurity
,
3501 RegNtPostSetKeySecurity
,
3502 RegNtCallbackObjectContextCleanup
,
3504 RegNtPostRestoreKey
,
3508 RegNtPostReplaceKey
,
3510 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3512 _IRQL_requires_same_
3513 _Function_class_(EX_CALLBACK_FUNCTION
)
3515 (NTAPI EX_CALLBACK_FUNCTION
)(
3516 _In_ PVOID CallbackContext
,
3517 _In_opt_ PVOID Argument1
,
3518 _In_opt_ PVOID Argument2
);
3519 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
3521 typedef struct _REG_DELETE_KEY_INFORMATION
{
3524 PVOID ObjectContext
;
3526 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
3527 #if (NTDDI_VERSION >= NTDDI_VISTA)
3528 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
3532 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
3534 PUNICODE_STRING ValueName
;
3540 PVOID ObjectContext
;
3542 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3544 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
3546 PUNICODE_STRING ValueName
;
3548 PVOID ObjectContext
;
3550 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3552 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
3554 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3555 PVOID KeySetInformation
;
3556 ULONG KeySetInformationLength
;
3558 PVOID ObjectContext
;
3560 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3562 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
3565 KEY_INFORMATION_CLASS KeyInformationClass
;
3566 PVOID KeyInformation
;
3568 PULONG ResultLength
;
3570 PVOID ObjectContext
;
3572 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3574 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
3577 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3578 PVOID KeyValueInformation
;
3580 PULONG ResultLength
;
3582 PVOID ObjectContext
;
3584 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3586 typedef struct _REG_QUERY_KEY_INFORMATION
{
3588 KEY_INFORMATION_CLASS KeyInformationClass
;
3589 PVOID KeyInformation
;
3591 PULONG ResultLength
;
3593 PVOID ObjectContext
;
3595 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3597 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
3599 PUNICODE_STRING ValueName
;
3600 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3601 PVOID KeyValueInformation
;
3603 PULONG ResultLength
;
3605 PVOID ObjectContext
;
3607 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3609 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
3611 PKEY_VALUE_ENTRY ValueEntries
;
3614 PULONG BufferLength
;
3615 PULONG RequiredBufferLength
;
3617 PVOID ObjectContext
;
3619 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
3621 typedef struct _REG_RENAME_KEY_INFORMATION
{
3623 PUNICODE_STRING NewName
;
3625 PVOID ObjectContext
;
3627 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
3629 typedef struct _REG_CREATE_KEY_INFORMATION
{
3630 PUNICODE_STRING CompleteName
;
3633 ULONG CreateOptions
;
3634 PUNICODE_STRING Class
;
3635 PVOID SecurityDescriptor
;
3636 PVOID SecurityQualityOfService
;
3637 ACCESS_MASK DesiredAccess
;
3638 ACCESS_MASK GrantedAccess
;
3640 PVOID
*ResultObject
;
3642 PVOID RootObjectContext
;
3645 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
3647 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
3648 PUNICODE_STRING CompleteName
;
3652 PUNICODE_STRING Class
;
3653 PVOID SecurityDescriptor
;
3654 PVOID SecurityQualityOfService
;
3655 ACCESS_MASK DesiredAccess
;
3656 ACCESS_MASK GrantedAccess
;
3658 PVOID
*ResultObject
;
3660 PVOID RootObjectContext
;
3663 PUNICODE_STRING RemainingName
;
3666 KPROCESSOR_MODE CheckAccessMode
;
3667 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
3669 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
3670 PUNICODE_STRING CompleteName
;
3671 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
3673 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
3674 PUNICODE_STRING CompleteName
;
3677 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
3679 typedef struct _REG_POST_OPERATION_INFORMATION
{
3682 PVOID PreInformation
;
3683 NTSTATUS ReturnStatus
;
3685 PVOID ObjectContext
;
3687 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
3689 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
3692 PVOID ObjectContext
;
3694 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
3696 #if (NTDDI_VERSION >= NTDDI_VISTA)
3698 typedef struct _REG_LOAD_KEY_INFORMATION
{
3700 PUNICODE_STRING KeyName
;
3701 PUNICODE_STRING SourceFile
;
3703 PVOID TrustClassObject
;
3705 ACCESS_MASK DesiredAccess
;
3708 PVOID ObjectContext
;
3710 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
3712 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
3716 PVOID ObjectContext
;
3718 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
3720 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
3722 PVOID ObjectContext
;
3724 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
3726 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
3728 PSECURITY_INFORMATION SecurityInformation
;
3729 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3732 PVOID ObjectContext
;
3734 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
3736 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
3738 PSECURITY_INFORMATION SecurityInformation
;
3739 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3741 PVOID ObjectContext
;
3743 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
3745 typedef struct _REG_RESTORE_KEY_INFORMATION
{
3750 PVOID ObjectContext
;
3752 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
3754 typedef struct _REG_SAVE_KEY_INFORMATION
{
3759 PVOID ObjectContext
;
3761 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
3763 typedef struct _REG_REPLACE_KEY_INFORMATION
{
3765 PUNICODE_STRING OldFileName
;
3766 PUNICODE_STRING NewFileName
;
3768 PVOID ObjectContext
;
3770 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
3772 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
3774 #define SERVICE_KERNEL_DRIVER 0x00000001
3775 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
3776 #define SERVICE_ADAPTER 0x00000004
3777 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
3779 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
3780 SERVICE_FILE_SYSTEM_DRIVER | \
3781 SERVICE_RECOGNIZER_DRIVER)
3783 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
3784 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
3785 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
3786 SERVICE_WIN32_SHARE_PROCESS)
3788 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
3790 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
3793 SERVICE_INTERACTIVE_PROCESS)
3795 /* Service Start Types */
3796 #define SERVICE_BOOT_START 0x00000000
3797 #define SERVICE_SYSTEM_START 0x00000001
3798 #define SERVICE_AUTO_START 0x00000002
3799 #define SERVICE_DEMAND_START 0x00000003
3800 #define SERVICE_DISABLED 0x00000004
3802 #define SERVICE_ERROR_IGNORE 0x00000000
3803 #define SERVICE_ERROR_NORMAL 0x00000001
3804 #define SERVICE_ERROR_SEVERE 0x00000002
3805 #define SERVICE_ERROR_CRITICAL 0x00000003
3807 typedef enum _CM_SERVICE_NODE_TYPE
{
3808 DriverType
= SERVICE_KERNEL_DRIVER
,
3809 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
3810 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
3811 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
3812 AdapterType
= SERVICE_ADAPTER
,
3813 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
3814 } SERVICE_NODE_TYPE
;
3816 typedef enum _CM_SERVICE_LOAD_TYPE
{
3817 BootLoad
= SERVICE_BOOT_START
,
3818 SystemLoad
= SERVICE_SYSTEM_START
,
3819 AutoLoad
= SERVICE_AUTO_START
,
3820 DemandLoad
= SERVICE_DEMAND_START
,
3821 DisableLoad
= SERVICE_DISABLED
3822 } SERVICE_LOAD_TYPE
;
3824 typedef enum _CM_ERROR_CONTROL_TYPE
{
3825 IgnoreError
= SERVICE_ERROR_IGNORE
,
3826 NormalError
= SERVICE_ERROR_NORMAL
,
3827 SevereError
= SERVICE_ERROR_SEVERE
,
3828 CriticalError
= SERVICE_ERROR_CRITICAL
3829 } SERVICE_ERROR_TYPE
;
3831 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
3832 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
3833 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
3835 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
3836 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
3837 CM_SERVICE_USB_DISK_BOOT_LOAD)
3839 /******************************************************************************
3840 * I/O Manager Types *
3841 ******************************************************************************/
3844 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
3846 #define CONNECT_FULLY_SPECIFIED 0x1
3847 #define CONNECT_LINE_BASED 0x2
3848 #define CONNECT_MESSAGE_BASED 0x3
3849 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
3850 #define CONNECT_CURRENT_VERSION 0x4
3852 #define POOL_COLD_ALLOCATION 256
3853 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
3854 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
3856 #define IO_TYPE_ADAPTER 1
3857 #define IO_TYPE_CONTROLLER 2
3858 #define IO_TYPE_DEVICE 3
3859 #define IO_TYPE_DRIVER 4
3860 #define IO_TYPE_FILE 5
3861 #define IO_TYPE_IRP 6
3862 #define IO_TYPE_MASTER_ADAPTER 7
3863 #define IO_TYPE_OPEN_PACKET 8
3864 #define IO_TYPE_TIMER 9
3865 #define IO_TYPE_VPB 10
3866 #define IO_TYPE_ERROR_LOG 11
3867 #define IO_TYPE_ERROR_MESSAGE 12
3868 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3870 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3871 #define IO_TYPE_CSQ 2
3872 #define IO_TYPE_CSQ_EX 3
3874 /* IO_RESOURCE_DESCRIPTOR.Option */
3875 #define IO_RESOURCE_PREFERRED 0x01
3876 #define IO_RESOURCE_DEFAULT 0x02
3877 #define IO_RESOURCE_ALTERNATIVE 0x08
3879 #define FILE_DEVICE_BEEP 0x00000001
3880 #define FILE_DEVICE_CD_ROM 0x00000002
3881 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
3882 #define FILE_DEVICE_CONTROLLER 0x00000004
3883 #define FILE_DEVICE_DATALINK 0x00000005
3884 #define FILE_DEVICE_DFS 0x00000006
3885 #define FILE_DEVICE_DISK 0x00000007
3886 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
3887 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
3888 #define FILE_DEVICE_INPORT_PORT 0x0000000a
3889 #define FILE_DEVICE_KEYBOARD 0x0000000b
3890 #define FILE_DEVICE_MAILSLOT 0x0000000c
3891 #define FILE_DEVICE_MIDI_IN 0x0000000d
3892 #define FILE_DEVICE_MIDI_OUT 0x0000000e
3893 #define FILE_DEVICE_MOUSE 0x0000000f
3894 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
3895 #define FILE_DEVICE_NAMED_PIPE 0x00000011
3896 #define FILE_DEVICE_NETWORK 0x00000012
3897 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
3898 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
3899 #define FILE_DEVICE_NULL 0x00000015
3900 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
3901 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
3902 #define FILE_DEVICE_PRINTER 0x00000018
3903 #define FILE_DEVICE_SCANNER 0x00000019
3904 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
3905 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
3906 #define FILE_DEVICE_SCREEN 0x0000001c
3907 #define FILE_DEVICE_SOUND 0x0000001d
3908 #define FILE_DEVICE_STREAMS 0x0000001e
3909 #define FILE_DEVICE_TAPE 0x0000001f
3910 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
3911 #define FILE_DEVICE_TRANSPORT 0x00000021
3912 #define FILE_DEVICE_UNKNOWN 0x00000022
3913 #define FILE_DEVICE_VIDEO 0x00000023
3914 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
3915 #define FILE_DEVICE_WAVE_IN 0x00000025
3916 #define FILE_DEVICE_WAVE_OUT 0x00000026
3917 #define FILE_DEVICE_8042_PORT 0x00000027
3918 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
3919 #define FILE_DEVICE_BATTERY 0x00000029
3920 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
3921 #define FILE_DEVICE_MODEM 0x0000002b
3922 #define FILE_DEVICE_VDM 0x0000002c
3923 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
3924 #define FILE_DEVICE_SMB 0x0000002e
3925 #define FILE_DEVICE_KS 0x0000002f
3926 #define FILE_DEVICE_CHANGER 0x00000030
3927 #define FILE_DEVICE_SMARTCARD 0x00000031
3928 #define FILE_DEVICE_ACPI 0x00000032
3929 #define FILE_DEVICE_DVD 0x00000033
3930 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
3931 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
3932 #define FILE_DEVICE_DFS_VOLUME 0x00000036
3933 #define FILE_DEVICE_SERENUM 0x00000037
3934 #define FILE_DEVICE_TERMSRV 0x00000038
3935 #define FILE_DEVICE_KSEC 0x00000039
3936 #define FILE_DEVICE_FIPS 0x0000003A
3937 #define FILE_DEVICE_INFINIBAND 0x0000003B
3938 #define FILE_DEVICE_VMBUS 0x0000003E
3939 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
3940 #define FILE_DEVICE_WPD 0x00000040
3941 #define FILE_DEVICE_BLUETOOTH 0x00000041
3942 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
3943 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
3944 #define FILE_DEVICE_BIOMETRIC 0x00000044
3945 #define FILE_DEVICE_PMI 0x00000045
3947 #if defined(NT_PROCESSOR_GROUPS)
3949 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3951 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
3952 IrqPolicyMachineDefault
= 0,
3953 IrqPolicyAllCloseProcessors
= 1,
3954 IrqPolicyOneCloseProcessor
= 2,
3955 IrqPolicyAllProcessorsInMachine
= 3,
3956 IrqPolicyAllProcessorsInGroup
= 3,
3957 IrqPolicySpecifiedProcessors
= 4,
3958 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
3960 #else /* defined(NT_PROCESSOR_GROUPS) */
3962 typedef enum _IRQ_DEVICE_POLICY
{
3963 IrqPolicyMachineDefault
= 0,
3964 IrqPolicyAllCloseProcessors
,
3965 IrqPolicyOneCloseProcessor
,
3966 IrqPolicyAllProcessorsInMachine
,
3967 IrqPolicySpecifiedProcessors
,
3968 IrqPolicySpreadMessagesAcrossAllProcessors
3969 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3973 typedef enum _IRQ_PRIORITY
{
3974 IrqPriorityUndefined
= 0,
3978 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
3980 typedef enum _IRQ_GROUP_POLICY
{
3981 GroupAffinityAllGroupZero
= 0,
3982 GroupAffinityDontCare
3983 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
3985 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
3987 typedef struct _OBJECT_HANDLE_INFORMATION
{
3988 ULONG HandleAttributes
;
3989 ACCESS_MASK GrantedAccess
;
3990 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
3992 typedef struct _CLIENT_ID
{
3993 HANDLE UniqueProcess
;
3994 HANDLE UniqueThread
;
3995 } CLIENT_ID
, *PCLIENT_ID
;
3997 typedef struct _VPB
{
4001 USHORT VolumeLabelLength
;
4002 struct _DEVICE_OBJECT
*DeviceObject
;
4003 struct _DEVICE_OBJECT
*RealDevice
;
4005 ULONG ReferenceCount
;
4006 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
4009 typedef enum _IO_ALLOCATION_ACTION
{
4012 DeallocateObjectKeepRegisters
4013 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
4015 _Function_class_(DRIVER_CONTROL
)
4016 _IRQL_requires_same_
4017 typedef IO_ALLOCATION_ACTION
4018 (NTAPI DRIVER_CONTROL
)(
4019 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
4020 _Inout_
struct _IRP
*Irp
,
4021 _In_ PVOID MapRegisterBase
,
4022 _In_ PVOID Context
);
4023 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
4025 typedef struct _WAIT_CONTEXT_BLOCK
{
4026 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
4027 PDRIVER_CONTROL DeviceRoutine
;
4028 PVOID DeviceContext
;
4029 ULONG NumberOfMapRegisters
;
4032 PKDPC BufferChainingDpc
;
4033 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
4035 /* DEVICE_OBJECT.Flags */
4036 #define DO_VERIFY_VOLUME 0x00000002
4037 #define DO_BUFFERED_IO 0x00000004
4038 #define DO_EXCLUSIVE 0x00000008
4039 #define DO_DIRECT_IO 0x00000010
4040 #define DO_MAP_IO_BUFFER 0x00000020
4041 #define DO_DEVICE_INITIALIZING 0x00000080
4042 #define DO_SHUTDOWN_REGISTERED 0x00000800
4043 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4044 #define DO_POWER_PAGABLE 0x00002000
4045 #define DO_POWER_INRUSH 0x00004000
4047 /* DEVICE_OBJECT.Characteristics */
4048 #define FILE_REMOVABLE_MEDIA 0x00000001
4049 #define FILE_READ_ONLY_DEVICE 0x00000002
4050 #define FILE_FLOPPY_DISKETTE 0x00000004
4051 #define FILE_WRITE_ONCE_MEDIA 0x00000008
4052 #define FILE_REMOTE_DEVICE 0x00000010
4053 #define FILE_DEVICE_IS_MOUNTED 0x00000020
4054 #define FILE_VIRTUAL_VOLUME 0x00000040
4055 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
4056 #define FILE_DEVICE_SECURE_OPEN 0x00000100
4057 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
4058 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
4059 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
4061 /* DEVICE_OBJECT.AlignmentRequirement */
4062 #define FILE_BYTE_ALIGNMENT 0x00000000
4063 #define FILE_WORD_ALIGNMENT 0x00000001
4064 #define FILE_LONG_ALIGNMENT 0x00000003
4065 #define FILE_QUAD_ALIGNMENT 0x00000007
4066 #define FILE_OCTA_ALIGNMENT 0x0000000f
4067 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
4068 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
4069 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
4070 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
4071 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
4073 /* DEVICE_OBJECT.DeviceType */
4074 #define DEVICE_TYPE ULONG
4076 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _DEVICE_OBJECT
{
4079 LONG ReferenceCount
;
4080 struct _DRIVER_OBJECT
*DriverObject
;
4081 struct _DEVICE_OBJECT
*NextDevice
;
4082 struct _DEVICE_OBJECT
*AttachedDevice
;
4083 struct _IRP
*CurrentIrp
;
4086 ULONG Characteristics
;
4088 PVOID DeviceExtension
;
4089 DEVICE_TYPE DeviceType
;
4092 LIST_ENTRY ListEntry
;
4093 WAIT_CONTEXT_BLOCK Wcb
;
4095 ULONG AlignmentRequirement
;
4096 KDEVICE_QUEUE DeviceQueue
;
4098 ULONG ActiveThreadCount
;
4099 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4103 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
4105 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
4107 typedef enum _IO_SESSION_STATE
{
4108 IoSessionStateCreated
= 1,
4109 IoSessionStateInitialized
,
4110 IoSessionStateConnected
,
4111 IoSessionStateDisconnected
,
4112 IoSessionStateDisconnectedLoggedOn
,
4113 IoSessionStateLoggedOn
,
4114 IoSessionStateLoggedOff
,
4115 IoSessionStateTerminated
,
4117 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
4119 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
4120 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
4121 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
4122 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
4124 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
4125 PHYSICAL_ADDRESS MessageAddress
;
4126 KAFFINITY TargetProcessorSet
;
4127 PKINTERRUPT InterruptObject
;
4131 KINTERRUPT_MODE Mode
;
4132 KINTERRUPT_POLARITY Polarity
;
4133 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
4135 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
4138 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
4139 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
4141 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
4142 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4143 _Out_ PKINTERRUPT
*InterruptObject
;
4144 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4145 _In_ PVOID ServiceContext
;
4146 _In_opt_ PKSPIN_LOCK SpinLock
;
4147 _In_ KIRQL SynchronizeIrql
;
4148 _In_ BOOLEAN FloatingSave
;
4149 _In_ BOOLEAN ShareVector
;
4152 _In_ KINTERRUPT_MODE InterruptMode
;
4153 _In_ KAFFINITY ProcessorEnableMask
;
4155 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
4157 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
4158 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4159 _Out_ PKINTERRUPT
*InterruptObject
;
4160 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4161 _In_ PVOID ServiceContext
;
4162 _In_opt_ PKSPIN_LOCK SpinLock
;
4163 _In_opt_ KIRQL SynchronizeIrql
;
4164 _In_ BOOLEAN FloatingSave
;
4165 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
4167 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
4168 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4170 _Out_ PVOID
*Generic
;
4171 _Out_ PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
4172 _Out_ PKINTERRUPT
*InterruptObject
;
4173 } ConnectionContext
;
4174 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
4175 _In_ PVOID ServiceContext
;
4176 _In_opt_ PKSPIN_LOCK SpinLock
;
4177 _In_opt_ KIRQL SynchronizeIrql
;
4178 _In_ BOOLEAN FloatingSave
;
4179 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine
;
4180 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
4182 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
4183 _Inout_ ULONG Version
;
4184 _ANONYMOUS_UNION
union {
4185 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
4186 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
4187 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4189 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4191 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4195 _In_ PKINTERRUPT InterruptObject
;
4196 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4197 } ConnectionContext
;
4198 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4200 typedef enum _IO_ACCESS_TYPE
{
4206 typedef enum _IO_ACCESS_MODE
{
4211 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4212 IoSessionStateNotification
,
4213 IoMaxContainerNotificationClass
4214 } IO_CONTAINER_NOTIFICATION_CLASS
;
4216 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4222 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4224 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4225 IoSessionStateInformation
,
4226 IoMaxContainerInformationClass
4227 } IO_CONTAINER_INFORMATION_CLASS
;
4229 typedef struct _IO_SESSION_STATE_INFORMATION
{
4231 IO_SESSION_STATE SessionState
;
4232 BOOLEAN LocalSession
;
4233 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4235 #if (NTDDI_VERSION >= NTDDI_WIN7)
4238 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4242 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4243 _In_ PVOID SessionObject
,
4244 _In_ PVOID IoObject
,
4247 _In_reads_bytes_opt_(PayloadLength
) PVOID NotificationPayload
,
4248 _In_ ULONG PayloadLength
);
4250 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4254 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4256 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4258 BOOLEAN Reserved
[3];
4259 volatile LONG IoCount
;
4261 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4263 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4266 LONGLONG MaxLockedTicks
;
4268 LIST_ENTRY LockList
;
4270 volatile LONG LowMemoryCount
;
4273 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4274 } IO_REMOVE_LOCK_DBG_BLOCK
;
4276 typedef struct _IO_REMOVE_LOCK
{
4277 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4279 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4281 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4283 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4285 _Function_class_(IO_WORKITEM_ROUTINE
)
4286 _IRQL_requires_(PASSIVE_LEVEL
)
4287 _IRQL_requires_same_
4289 (NTAPI IO_WORKITEM_ROUTINE
)(
4290 _In_ PDEVICE_OBJECT DeviceObject
,
4291 _In_opt_ PVOID Context
);
4292 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4295 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4296 _In_ PVOID IoObject
,
4297 _In_opt_ PVOID Context
,
4298 _In_ PIO_WORKITEM IoWorkItem
);
4299 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4301 typedef struct _SHARE_ACCESS
{
4309 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4311 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4312 inheritance, even from a struct renders the type non-POD. So we use
4314 #define PCI_COMMON_HEADER_LAYOUT \
4323 UCHAR CacheLineSize; \
4324 UCHAR LatencyTimer; \
4328 struct _PCI_HEADER_TYPE_0 { \
4329 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4331 USHORT SubVendorID; \
4332 USHORT SubSystemID; \
4333 ULONG ROMBaseAddress; \
4334 UCHAR CapabilitiesPtr; \
4335 UCHAR Reserved1[3]; \
4337 UCHAR InterruptLine; \
4338 UCHAR InterruptPin; \
4339 UCHAR MinimumGrant; \
4340 UCHAR MaximumLatency; \
4342 struct _PCI_HEADER_TYPE_1 { \
4343 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4345 UCHAR SecondaryBus; \
4346 UCHAR SubordinateBus; \
4347 UCHAR SecondaryLatency; \
4350 USHORT SecondaryStatus; \
4351 USHORT MemoryBase; \
4352 USHORT MemoryLimit; \
4353 USHORT PrefetchBase; \
4354 USHORT PrefetchLimit; \
4355 ULONG PrefetchBaseUpper32; \
4356 ULONG PrefetchLimitUpper32; \
4357 USHORT IOBaseUpper16; \
4358 USHORT IOLimitUpper16; \
4359 UCHAR CapabilitiesPtr; \
4360 UCHAR Reserved1[3]; \
4361 ULONG ROMBaseAddress; \
4362 UCHAR InterruptLine; \
4363 UCHAR InterruptPin; \
4364 USHORT BridgeControl; \
4366 struct _PCI_HEADER_TYPE_2 { \
4367 ULONG SocketRegistersBaseAddress; \
4368 UCHAR CapabilitiesPtr; \
4370 USHORT SecondaryStatus; \
4372 UCHAR SecondaryBus; \
4373 UCHAR SubordinateBus; \
4374 UCHAR SecondaryLatency; \
4378 } Range[PCI_TYPE2_ADDRESSES-1]; \
4379 UCHAR InterruptLine; \
4380 UCHAR InterruptPin; \
4381 USHORT BridgeControl; \
4385 typedef enum _CREATE_FILE_TYPE
{
4387 CreateFileTypeNamedPipe
,
4388 CreateFileTypeMailslot
4391 #define IO_FORCE_ACCESS_CHECK 0x001
4392 #define IO_NO_PARAMETER_CHECKING 0x100
4394 #define IO_REPARSE 0x0
4395 #define IO_REMOUNT 0x1
4397 typedef struct _IO_STATUS_BLOCK
{
4398 _ANONYMOUS_UNION
union {
4402 ULONG_PTR Information
;
4403 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4406 typedef struct _IO_STATUS_BLOCK32
{
4409 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4413 (NTAPI
*PIO_APC_ROUTINE
)(
4414 _In_ PVOID ApcContext
,
4415 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
4416 _In_ ULONG Reserved
);
4418 #define PIO_APC_ROUTINE_DEFINED
4420 typedef enum _IO_SESSION_EVENT
{
4421 IoSessionEventIgnore
= 0,
4422 IoSessionEventCreated
,
4423 IoSessionEventTerminated
,
4424 IoSessionEventConnected
,
4425 IoSessionEventDisconnected
,
4426 IoSessionEventLogon
,
4427 IoSessionEventLogoff
,
4429 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4431 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4432 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4433 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4434 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4435 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4436 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4437 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4439 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4441 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4443 typedef struct _IO_SESSION_CONNECT_INFO
{
4445 BOOLEAN LocalSession
;
4446 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
4448 #define EVENT_INCREMENT 1
4449 #define IO_NO_INCREMENT 0
4450 #define IO_CD_ROM_INCREMENT 1
4451 #define IO_DISK_INCREMENT 1
4452 #define IO_KEYBOARD_INCREMENT 6
4453 #define IO_MAILSLOT_INCREMENT 2
4454 #define IO_MOUSE_INCREMENT 6
4455 #define IO_NAMED_PIPE_INCREMENT 2
4456 #define IO_NETWORK_INCREMENT 2
4457 #define IO_PARALLEL_INCREMENT 1
4458 #define IO_SERIAL_INCREMENT 2
4459 #define IO_SOUND_INCREMENT 8
4460 #define IO_VIDEO_INCREMENT 1
4461 #define SEMAPHORE_INCREMENT 1
4463 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
4465 typedef struct _BOOTDISK_INFORMATION
{
4466 LONGLONG BootPartitionOffset
;
4467 LONGLONG SystemPartitionOffset
;
4468 ULONG BootDeviceSignature
;
4469 ULONG SystemDeviceSignature
;
4470 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
4472 typedef struct _BOOTDISK_INFORMATION_EX
{
4473 LONGLONG BootPartitionOffset
;
4474 LONGLONG SystemPartitionOffset
;
4475 ULONG BootDeviceSignature
;
4476 ULONG SystemDeviceSignature
;
4477 GUID BootDeviceGuid
;
4478 GUID SystemDeviceGuid
;
4479 BOOLEAN BootDeviceIsGpt
;
4480 BOOLEAN SystemDeviceIsGpt
;
4481 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
4483 #if (NTDDI_VERSION >= NTDDI_WIN7)
4485 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
4486 ULONG PartitionStyle
;
4487 ULONG PartitionNumber
;
4488 _ANONYMOUS_UNION
union {
4493 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
4495 typedef struct _BOOTDISK_INFORMATION_LITE
{
4496 ULONG NumberEntries
;
4497 LOADER_PARTITION_INFORMATION_EX Entries
[1];
4498 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4502 #if (NTDDI_VERSION >= NTDDI_VISTA)
4503 typedef struct _BOOTDISK_INFORMATION_LITE
{
4504 ULONG BootDeviceSignature
;
4505 ULONG SystemDeviceSignature
;
4506 GUID BootDeviceGuid
;
4507 GUID SystemDeviceGuid
;
4508 BOOLEAN BootDeviceIsGpt
;
4509 BOOLEAN SystemDeviceIsGpt
;
4510 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4511 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4513 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4515 #include <pshpack1.h>
4517 typedef struct _EISA_MEMORY_TYPE
{
4524 UCHAR MoreEntries
:1;
4525 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
4527 typedef struct _EISA_MEMORY_CONFIGURATION
{
4528 EISA_MEMORY_TYPE ConfigurationByte
;
4530 USHORT AddressLowWord
;
4531 UCHAR AddressHighByte
;
4533 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
4535 typedef struct _EISA_IRQ_DESCRIPTOR
{
4538 UCHAR LevelTriggered
:1;
4540 UCHAR MoreEntries
:1;
4541 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
4543 typedef struct _EISA_IRQ_CONFIGURATION
{
4544 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
4546 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
4548 typedef struct _DMA_CONFIGURATION_BYTE0
{
4552 UCHAR MoreEntries
:1;
4553 } DMA_CONFIGURATION_BYTE0
;
4555 typedef struct _DMA_CONFIGURATION_BYTE1
{
4557 UCHAR TransferSize
:2;
4560 } DMA_CONFIGURATION_BYTE1
;
4562 typedef struct _EISA_DMA_CONFIGURATION
{
4563 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
4564 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
4565 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
4567 typedef struct _EISA_PORT_DESCRIPTOR
{
4568 UCHAR NumberPorts
:5;
4571 UCHAR MoreEntries
:1;
4572 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
4574 typedef struct _EISA_PORT_CONFIGURATION
{
4575 EISA_PORT_DESCRIPTOR Configuration
;
4577 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
4579 typedef struct _CM_EISA_SLOT_INFORMATION
{
4582 UCHAR MajorRevision
;
4583 UCHAR MinorRevision
;
4585 UCHAR NumberFunctions
;
4586 UCHAR FunctionInformation
;
4588 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
4590 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
4594 UCHAR MinorRevision
;
4595 UCHAR MajorRevision
;
4596 UCHAR Selections
[26];
4597 UCHAR FunctionFlags
;
4598 UCHAR TypeString
[80];
4599 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
4600 EISA_IRQ_CONFIGURATION EisaIrq
[7];
4601 EISA_DMA_CONFIGURATION EisaDma
[4];
4602 EISA_PORT_CONFIGURATION EisaPort
[20];
4603 UCHAR InitializationData
[60];
4604 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
4606 #include <poppack.h>
4608 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
4610 #define EISA_FUNCTION_ENABLED 0x80
4611 #define EISA_FREE_FORM_DATA 0x40
4612 #define EISA_HAS_PORT_INIT_ENTRY 0x20
4613 #define EISA_HAS_PORT_RANGE 0x10
4614 #define EISA_HAS_DMA_ENTRY 0x08
4615 #define EISA_HAS_IRQ_ENTRY 0x04
4616 #define EISA_HAS_MEMORY_ENTRY 0x02
4617 #define EISA_HAS_TYPE_ENTRY 0x01
4618 #define EISA_HAS_INFORMATION \
4619 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
4620 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
4622 #define EISA_MORE_ENTRIES 0x80
4623 #define EISA_SYSTEM_MEMORY 0x00
4624 #define EISA_MEMORY_TYPE_RAM 0x01
4626 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
4628 #define EISA_INVALID_SLOT 0x80
4629 #define EISA_INVALID_FUNCTION 0x81
4630 #define EISA_INVALID_CONFIGURATION 0x82
4631 #define EISA_EMPTY_SLOT 0x83
4632 #define EISA_INVALID_BIOS_CALL 0x86
4635 ** Plug and Play structures
4639 (NTAPI
*PINTERFACE_REFERENCE
)(
4643 (NTAPI
*PINTERFACE_DEREFERENCE
)(
4646 _Function_class_(TRANSLATE_BUS_ADDRESS
)
4647 _IRQL_requires_same_
4649 (NTAPI TRANSLATE_BUS_ADDRESS
)(
4650 _Inout_opt_ PVOID Context
,
4651 _In_ PHYSICAL_ADDRESS BusAddress
,
4653 _Out_ PULONG AddressSpace
,
4654 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
4655 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
4657 _Function_class_(GET_DMA_ADAPTER
)
4658 _IRQL_requires_same_
4659 typedef struct _DMA_ADAPTER
*
4660 (NTAPI GET_DMA_ADAPTER
)(
4661 _Inout_opt_ PVOID Context
,
4662 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
4663 _Out_ PULONG NumberOfMapRegisters
);
4664 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
4666 _Function_class_(GET_SET_DEVICE_DATA
)
4667 _IRQL_requires_same_
4669 (NTAPI GET_SET_DEVICE_DATA
)(
4670 _Inout_opt_ PVOID Context
,
4671 _In_ ULONG DataType
,
4672 _Inout_updates_bytes_(Length
) PVOID Buffer
,
4675 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
4677 typedef enum _DEVICE_INSTALL_STATE
{
4678 InstallStateInstalled
,
4679 InstallStateNeedsReinstall
,
4680 InstallStateFailedInstall
,
4681 InstallStateFinishInstall
4682 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
4684 typedef struct _LEGACY_BUS_INFORMATION
{
4686 INTERFACE_TYPE LegacyBusType
;
4688 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
4690 typedef enum _DEVICE_REMOVAL_POLICY
{
4691 RemovalPolicyExpectNoRemoval
= 1,
4692 RemovalPolicyExpectOrderlyRemoval
= 2,
4693 RemovalPolicyExpectSurpriseRemoval
= 3
4694 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
4697 (NTAPI
*PREENUMERATE_SELF
)(
4698 _In_ PVOID Context
);
4700 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
4704 PINTERFACE_REFERENCE InterfaceReference
;
4705 PINTERFACE_DEREFERENCE InterfaceDereference
;
4706 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
4707 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
4710 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
4711 _In_ NTSTATUS Status
,
4712 _Inout_opt_ PVOID Context
);
4714 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
4716 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
4717 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
4718 #define PCI_USE_REVISION 0x00000002
4719 #define PCI_USE_VENDEV_IDS 0x00000004
4720 #define PCI_USE_CLASS_SUBCLASS 0x00000008
4721 #define PCI_USE_PROGIF 0x00000010
4722 #define PCI_USE_LOCAL_BUS 0x00000020
4723 #define PCI_USE_LOCAL_DEVICE 0x00000040
4725 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
4736 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
4738 _IRQL_requires_max_(PASSIVE_LEVEL
)
4739 _Must_inspect_result_
4741 (NTAPI PCI_IS_DEVICE_PRESENT
)(
4742 _In_ USHORT VendorID
,
4743 _In_ USHORT DeviceID
,
4744 _In_ UCHAR RevisionID
,
4745 _In_ USHORT SubVendorID
,
4746 _In_ USHORT SubSystemID
,
4748 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
4750 _IRQL_requires_max_(PASSIVE_LEVEL
)
4751 _Must_inspect_result_
4753 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
4755 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
4756 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
4758 typedef struct _BUS_INTERFACE_STANDARD
{
4762 PINTERFACE_REFERENCE InterfaceReference
;
4763 PINTERFACE_DEREFERENCE InterfaceDereference
;
4764 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
4765 PGET_DMA_ADAPTER GetDmaAdapter
;
4766 PGET_SET_DEVICE_DATA SetBusData
;
4767 PGET_SET_DEVICE_DATA GetBusData
;
4768 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
4770 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
4774 PINTERFACE_REFERENCE InterfaceReference
;
4775 PINTERFACE_DEREFERENCE InterfaceDereference
;
4776 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
4777 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
4778 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
4780 _Struct_size_bytes_(Size
)
4781 typedef struct _DEVICE_CAPABILITIES
{
4782 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES
)) USHORT Size
;
4786 ULONG LockSupported
:1;
4787 ULONG EjectSupported
:1;
4791 ULONG SilentInstall
:1;
4792 ULONG RawDeviceOK
:1;
4793 ULONG SurpriseRemovalOK
:1;
4798 ULONG HardwareDisabled
:1;
4800 ULONG WarmEjectSupported
:1;
4801 ULONG NoDisplayInUI
:1;
4805 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
4806 SYSTEM_POWER_STATE SystemWake
;
4807 DEVICE_POWER_STATE DeviceWake
;
4811 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
4813 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
4817 GUID InterfaceClassGuid
;
4818 PUNICODE_STRING SymbolicLinkName
;
4819 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
4821 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
4825 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
4829 typedef struct _INTERFACE
{
4833 PINTERFACE_REFERENCE InterfaceReference
;
4834 PINTERFACE_DEREFERENCE InterfaceDereference
;
4835 } INTERFACE
, *PINTERFACE
;
4837 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
4841 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
4843 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
4845 /* PNP_DEVICE_STATE */
4847 #define PNP_DEVICE_DISABLED 0x00000001
4848 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
4849 #define PNP_DEVICE_FAILED 0x00000004
4850 #define PNP_DEVICE_REMOVED 0x00000008
4851 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
4852 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
4854 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
4858 struct _FILE_OBJECT
*FileObject
;
4859 LONG NameBufferOffset
;
4860 UCHAR CustomDataBuffer
[1];
4861 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
4863 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
4867 struct _FILE_OBJECT
*FileObject
;
4868 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
4870 #if (NTDDI_VERSION >= NTDDI_VISTA)
4871 #include <devpropdef.h>
4872 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
4875 #define PNP_REPLACE_NO_MAP MAXLONGLONG
4877 _Must_inspect_result_
4879 (NTAPI
*PREPLACE_MAP_MEMORY
)(
4880 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress
,
4881 _In_ PHYSICAL_ADDRESS SparePhysicalAddress
,
4882 _Inout_ PLARGE_INTEGER NumberOfBytes
,
4883 _Outptr_ PVOID
*TargetAddress
,
4884 _Outptr_ PVOID
*SpareAddress
);
4886 typedef struct _PNP_REPLACE_MEMORY_LIST
{
4887 ULONG AllocatedCount
;
4889 ULONGLONG TotalLength
;
4891 PHYSICAL_ADDRESS Address
;
4893 } Ranges
[ANYSIZE_ARRAY
];
4894 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
4896 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
4897 PKAFFINITY Affinity
;
4898 _Field_range_(<=, MAXIMUM_GROUPS
) ULONG GroupCount
;
4899 ULONG AllocatedCount
;
4901 ULONG ApicIds
[ANYSIZE_ARRAY
];
4902 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
4904 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
4905 KAFFINITY AffinityMask
;
4906 ULONG AllocatedCount
;
4908 ULONG ApicIds
[ANYSIZE_ARRAY
];
4909 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
4911 #define PNP_REPLACE_PARAMETERS_VERSION 2
4913 typedef struct _PNP_REPLACE_PARAMETERS
{
4918 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
4919 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
4920 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
4921 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
4922 PREPLACE_MAP_MEMORY MapMemory
;
4923 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
4926 (NTAPI
*PREPLACE_UNLOAD
)(
4929 _Must_inspect_result_
4931 (NTAPI
*PREPLACE_BEGIN
)(
4932 _In_ PPNP_REPLACE_PARAMETERS Parameters
,
4933 _Outptr_ PVOID
*Context
);
4935 _Must_inspect_result_
4937 (NTAPI
*PREPLACE_END
)(
4938 _In_ PVOID Context
);
4940 _Must_inspect_result_
4942 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
4944 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
4945 _In_ LARGE_INTEGER ByteCount
);
4947 _Must_inspect_result_
4949 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
4952 _In_ BOOLEAN Target
);
4954 _Must_inspect_result_
4956 (NTAPI
*PREPLACE_SWAP
)(
4957 _In_ PVOID Context
);
4959 _Must_inspect_result_
4961 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
4962 _In_ PVOID Context
);
4964 _Must_inspect_result_
4966 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
4967 _In_ PVOID Context
);
4969 _Must_inspect_result_
4971 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
4973 _In_ PHYSICAL_ADDRESS SourceAddress
,
4974 _Out_ PPHYSICAL_ADDRESS DestinationAddress
);
4976 _Must_inspect_result_
4978 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
4980 _In_ BOOLEAN Enable
);
4982 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
4983 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
4984 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
4986 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
4987 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
4988 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
4989 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
4990 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
4992 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
4996 PREPLACE_UNLOAD Unload
;
4997 PREPLACE_BEGIN BeginReplace
;
4998 PREPLACE_END EndReplace
;
4999 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
5000 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
5002 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
5003 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
5004 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
5005 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
5006 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
5008 _Must_inspect_result_
5010 (NTAPI
*PREPLACE_DRIVER_INIT
)(
5011 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface
,
5014 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
5015 DeviceUsageTypeUndefined
,
5016 DeviceUsageTypePaging
,
5017 DeviceUsageTypeHibernation
,
5018 DeviceUsageTypeDumpFile
5019 } DEVICE_USAGE_NOTIFICATION_TYPE
;
5021 typedef struct _POWER_SEQUENCE
{
5025 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
5028 #define __string_type 0x1000
5029 #define __guid_type 0x2000
5030 #define __multiString_type 0x4000
5032 #define __string_type 0
5033 #define __guid_type 0
5034 #define __multiString_type 0
5038 DevicePropertyDeviceDescription
= 0x0 | __string_type
,
5039 DevicePropertyHardwareID
= 0x1 | __multiString_type
,
5040 DevicePropertyCompatibleIDs
= 0x2 | __multiString_type
,
5041 DevicePropertyBootConfiguration
= 0x3,
5042 DevicePropertyBootConfigurationTranslated
= 0x4,
5043 DevicePropertyClassName
= 0x5 | __string_type
,
5044 DevicePropertyClassGuid
= 0x6 | __string_type
,
5045 DevicePropertyDriverKeyName
= 0x7 | __string_type
,
5046 DevicePropertyManufacturer
= 0x8 | __string_type
,
5047 DevicePropertyFriendlyName
= 0x9 | __string_type
,
5048 DevicePropertyLocationInformation
= 0xa | __string_type
,
5049 DevicePropertyPhysicalDeviceObjectName
= 0xb | __string_type
,
5050 DevicePropertyBusTypeGuid
= 0xc | __guid_type
,
5051 DevicePropertyLegacyBusType
= 0xd,
5052 DevicePropertyBusNumber
= 0xe,
5053 DevicePropertyEnumeratorName
= 0xf | __string_type
,
5054 DevicePropertyAddress
= 0x10,
5055 DevicePropertyUINumber
= 0x11,
5056 DevicePropertyInstallState
= 0x12,
5057 DevicePropertyRemovalPolicy
= 0x13,
5058 DevicePropertyResourceRequirements
= 0x14,
5059 DevicePropertyAllocatedResources
= 0x15,
5060 DevicePropertyContainerID
= 0x16 | __string_type
5061 } DEVICE_REGISTRY_PROPERTY
;
5063 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
5064 EventCategoryReserved
,
5065 EventCategoryHardwareProfileChange
,
5066 EventCategoryDeviceInterfaceChange
,
5067 EventCategoryTargetDeviceChange
5068 } IO_NOTIFICATION_EVENT_CATEGORY
;
5070 typedef enum _IO_PRIORITY_HINT
{
5071 IoPriorityVeryLow
= 0,
5079 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
5081 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)
5082 _IRQL_requires_max_(PASSIVE_LEVEL
)
5084 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
5085 _In_ PVOID NotificationStructure
,
5086 _Inout_opt_ PVOID Context
);
5087 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
5089 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK
)
5090 _IRQL_requires_same_
5092 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
5093 _Inout_opt_ PVOID Context
);
5094 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
5096 typedef enum _FILE_INFORMATION_CLASS
{
5097 FileDirectoryInformation
= 1,
5098 FileFullDirectoryInformation
,
5099 FileBothDirectoryInformation
,
5100 FileBasicInformation
,
5101 FileStandardInformation
,
5102 FileInternalInformation
,
5104 FileAccessInformation
,
5105 FileNameInformation
,
5106 FileRenameInformation
,
5107 FileLinkInformation
,
5108 FileNamesInformation
,
5109 FileDispositionInformation
,
5110 FilePositionInformation
,
5111 FileFullEaInformation
,
5112 FileModeInformation
,
5113 FileAlignmentInformation
,
5115 FileAllocationInformation
,
5116 FileEndOfFileInformation
,
5117 FileAlternateNameInformation
,
5118 FileStreamInformation
,
5119 FilePipeInformation
,
5120 FilePipeLocalInformation
,
5121 FilePipeRemoteInformation
,
5122 FileMailslotQueryInformation
,
5123 FileMailslotSetInformation
,
5124 FileCompressionInformation
,
5125 FileObjectIdInformation
,
5126 FileCompletionInformation
,
5127 FileMoveClusterInformation
,
5128 FileQuotaInformation
,
5129 FileReparsePointInformation
,
5130 FileNetworkOpenInformation
,
5131 FileAttributeTagInformation
,
5132 FileTrackingInformation
,
5133 FileIdBothDirectoryInformation
,
5134 FileIdFullDirectoryInformation
,
5135 FileValidDataLengthInformation
,
5136 FileShortNameInformation
,
5137 #if (NTDDI_VERSION >= NTDDI_VISTA)
5138 FileIoCompletionNotificationInformation
,
5139 FileIoStatusBlockRangeInformation
,
5140 FileIoPriorityHintInformation
,
5141 FileSfioReserveInformation
,
5142 FileSfioVolumeInformation
,
5143 FileHardLinkInformation
,
5144 FileProcessIdsUsingFileInformation
,
5145 FileNormalizedNameInformation
,
5146 FileNetworkPhysicalNameInformation
,
5148 #if (NTDDI_VERSION >= NTDDI_WIN7)
5149 FileIdGlobalTxDirectoryInformation
,
5150 FileIsRemoteDeviceInformation
,
5151 FileAttributeCacheInformation
,
5152 FileNumaNodeInformation
,
5153 FileStandardLinkInformation
,
5154 FileRemoteProtocolInformation
,
5156 FileMaximumInformation
5157 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
5159 typedef struct _FILE_POSITION_INFORMATION
{
5160 LARGE_INTEGER CurrentByteOffset
;
5161 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
5163 typedef struct _FILE_BASIC_INFORMATION
{
5164 LARGE_INTEGER CreationTime
;
5165 LARGE_INTEGER LastAccessTime
;
5166 LARGE_INTEGER LastWriteTime
;
5167 LARGE_INTEGER ChangeTime
;
5168 ULONG FileAttributes
;
5169 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
5171 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
5172 IO_PRIORITY_HINT PriorityHint
;
5173 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
5175 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
5177 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
5179 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
5180 PUCHAR IoStatusBlockRange
;
5182 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
5184 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
5186 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
5188 typedef struct _FILE_NUMA_NODE_INFORMATION
{
5190 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
5192 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
5193 ULONG NumberOfProcessIdsInList
;
5194 ULONG_PTR ProcessIdList
[1];
5195 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
5197 typedef struct _FILE_STANDARD_INFORMATION
{
5198 LARGE_INTEGER AllocationSize
;
5199 LARGE_INTEGER EndOfFile
;
5200 ULONG NumberOfLinks
;
5201 BOOLEAN DeletePending
;
5203 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
5205 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
5206 LARGE_INTEGER CreationTime
;
5207 LARGE_INTEGER LastAccessTime
;
5208 LARGE_INTEGER LastWriteTime
;
5209 LARGE_INTEGER ChangeTime
;
5210 LARGE_INTEGER AllocationSize
;
5211 LARGE_INTEGER EndOfFile
;
5212 ULONG FileAttributes
;
5213 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
5215 typedef enum _FSINFOCLASS
{
5216 FileFsVolumeInformation
= 1,
5217 FileFsLabelInformation
,
5218 FileFsSizeInformation
,
5219 FileFsDeviceInformation
,
5220 FileFsAttributeInformation
,
5221 FileFsControlInformation
,
5222 FileFsFullSizeInformation
,
5223 FileFsObjectIdInformation
,
5224 FileFsDriverPathInformation
,
5225 FileFsVolumeFlagsInformation
,
5226 FileFsMaximumInformation
5227 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
5229 typedef struct _FILE_FS_DEVICE_INFORMATION
{
5230 DEVICE_TYPE DeviceType
;
5231 ULONG Characteristics
;
5232 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5234 typedef struct _FILE_FULL_EA_INFORMATION
{
5235 ULONG NextEntryOffset
;
5238 USHORT EaValueLength
;
5240 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5242 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5243 ULONG RequestsPerPeriod
;
5245 BOOLEAN RetryFailures
;
5246 BOOLEAN Discardable
;
5248 ULONG NumOutstandingRequests
;
5249 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5251 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5252 ULONG MaximumRequestsPerPeriod
;
5253 ULONG MinimumPeriod
;
5254 ULONG MinimumTransferSize
;
5255 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5257 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5258 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5259 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5261 #define FM_LOCK_BIT (0x1)
5262 #define FM_LOCK_BIT_V (0x0)
5263 #define FM_LOCK_WAITER_WOKEN (0x2)
5264 #define FM_LOCK_WAITER_INC (0x4)
5266 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE
)
5267 _IRQL_requires_same_
5269 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5270 _In_
struct _FILE_OBJECT
*FileObject
,
5271 _In_ PLARGE_INTEGER FileOffset
,
5275 _In_ BOOLEAN CheckForReadOperation
,
5276 _Out_ PIO_STATUS_BLOCK IoStatus
,
5277 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5278 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5280 _Function_class_(FAST_IO_READ
)
5281 _IRQL_requires_same_
5283 (NTAPI FAST_IO_READ
)(
5284 _In_
struct _FILE_OBJECT
*FileObject
,
5285 _In_ PLARGE_INTEGER FileOffset
,
5290 _Out_ PIO_STATUS_BLOCK IoStatus
,
5291 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5292 typedef FAST_IO_READ
*PFAST_IO_READ
;
5294 _Function_class_(FAST_IO_WRITE
)
5295 _IRQL_requires_same_
5297 (NTAPI FAST_IO_WRITE
)(
5298 _In_
struct _FILE_OBJECT
*FileObject
,
5299 _In_ PLARGE_INTEGER FileOffset
,
5304 _Out_ PIO_STATUS_BLOCK IoStatus
,
5305 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5306 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5308 _Function_class_(FAST_IO_QUERY_BASIC_INFO
)
5309 _IRQL_requires_same_
5311 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5312 _In_
struct _FILE_OBJECT
*FileObject
,
5314 _Out_ PFILE_BASIC_INFORMATION Buffer
,
5315 _Out_ PIO_STATUS_BLOCK IoStatus
,
5316 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5317 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5319 _Function_class_(FAST_IO_QUERY_STANDARD_INFO
)
5320 _IRQL_requires_same_
5322 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5323 _In_
struct _FILE_OBJECT
*FileObject
,
5325 _Out_ PFILE_STANDARD_INFORMATION Buffer
,
5326 _Out_ PIO_STATUS_BLOCK IoStatus
,
5327 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5328 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5330 _Function_class_(FAST_IO_LOCK
)
5331 _IRQL_requires_same_
5333 (NTAPI FAST_IO_LOCK
)(
5334 _In_
struct _FILE_OBJECT
*FileObject
,
5335 _In_ PLARGE_INTEGER FileOffset
,
5336 _In_ PLARGE_INTEGER Length
,
5337 _In_ PEPROCESS ProcessId
,
5339 _In_ BOOLEAN FailImmediately
,
5340 _In_ BOOLEAN ExclusiveLock
,
5341 _Out_ PIO_STATUS_BLOCK IoStatus
,
5342 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5343 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5345 _Function_class_(FAST_IO_UNLOCK_SINGLE
)
5346 _IRQL_requires_same_
5348 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5349 _In_
struct _FILE_OBJECT
*FileObject
,
5350 _In_ PLARGE_INTEGER FileOffset
,
5351 _In_ PLARGE_INTEGER Length
,
5352 _In_ PEPROCESS ProcessId
,
5354 _Out_ PIO_STATUS_BLOCK IoStatus
,
5355 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5356 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5358 _Function_class_(FAST_IO_UNLOCK_ALL
)
5359 _IRQL_requires_same_
5361 (NTAPI FAST_IO_UNLOCK_ALL
)(
5362 _In_
struct _FILE_OBJECT
*FileObject
,
5363 _In_ PEPROCESS ProcessId
,
5364 _Out_ PIO_STATUS_BLOCK IoStatus
,
5365 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5366 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5368 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY
)
5369 _IRQL_requires_same_
5371 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5372 _In_
struct _FILE_OBJECT
*FileObject
,
5373 _In_ PVOID ProcessId
,
5375 _Out_ PIO_STATUS_BLOCK IoStatus
,
5376 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5377 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5379 _Function_class_(FAST_IO_DEVICE_CONTROL
)
5380 _IRQL_requires_same_
5382 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5383 _In_
struct _FILE_OBJECT
*FileObject
,
5385 _In_opt_ PVOID InputBuffer
,
5386 _In_ ULONG InputBufferLength
,
5387 _Out_opt_ PVOID OutputBuffer
,
5388 _In_ ULONG OutputBufferLength
,
5389 _In_ ULONG IoControlCode
,
5390 _Out_ PIO_STATUS_BLOCK IoStatus
,
5391 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5392 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5394 _Function_class_(FAST_IO_ACQUIRE_FILE
)
5395 _IRQL_requires_same_
5397 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5398 _In_
struct _FILE_OBJECT
*FileObject
);
5399 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5401 _Function_class_(FAST_IO_RELEASE_FILE
)
5402 _IRQL_requires_same_
5404 (NTAPI FAST_IO_RELEASE_FILE
)(
5405 _In_
struct _FILE_OBJECT
*FileObject
);
5406 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5408 _Function_class_(FAST_IO_DETACH_DEVICE
)
5409 _IRQL_requires_same_
5411 (NTAPI FAST_IO_DETACH_DEVICE
)(
5412 _In_
struct _DEVICE_OBJECT
*SourceDevice
,
5413 _In_
struct _DEVICE_OBJECT
*TargetDevice
);
5414 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5416 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO
)
5417 _IRQL_requires_same_
5419 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5420 _In_
struct _FILE_OBJECT
*FileObject
,
5422 _Out_
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5423 _Out_
struct _IO_STATUS_BLOCK
*IoStatus
,
5424 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5425 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5427 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE
)
5428 _IRQL_requires_same_
5430 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5431 _In_
struct _FILE_OBJECT
*FileObject
,
5432 _In_ PLARGE_INTEGER EndingOffset
,
5433 _Out_
struct _ERESOURCE
**ResourceToRelease
,
5434 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5435 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5437 _Function_class_(FAST_IO_MDL_READ
)
5438 _IRQL_requires_same_
5440 (NTAPI FAST_IO_MDL_READ
)(
5441 _In_
struct _FILE_OBJECT
*FileObject
,
5442 _In_ PLARGE_INTEGER FileOffset
,
5445 _Out_ PMDL
*MdlChain
,
5446 _Out_ PIO_STATUS_BLOCK IoStatus
,
5447 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5448 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
5450 _Function_class_(FAST_IO_MDL_READ_COMPLETE
)
5451 _IRQL_requires_same_
5453 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
5454 _In_
struct _FILE_OBJECT
*FileObject
,
5456 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5457 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
5459 _Function_class_(FAST_IO_PREPARE_MDL_WRITE
)
5460 _IRQL_requires_same_
5462 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
5463 _In_
struct _FILE_OBJECT
*FileObject
,
5464 _In_ PLARGE_INTEGER FileOffset
,
5467 _Out_ PMDL
*MdlChain
,
5468 _Out_ PIO_STATUS_BLOCK IoStatus
,
5469 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5470 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
5472 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE
)
5473 _IRQL_requires_same_
5475 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
5476 _In_
struct _FILE_OBJECT
*FileObject
,
5477 _In_ PLARGE_INTEGER FileOffset
,
5479 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5480 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
5482 _Function_class_(FAST_IO_READ_COMPRESSED
)
5483 _IRQL_requires_same_
5485 (NTAPI FAST_IO_READ_COMPRESSED
)(
5486 _In_
struct _FILE_OBJECT
*FileObject
,
5487 _In_ PLARGE_INTEGER FileOffset
,
5491 _Out_ PMDL
*MdlChain
,
5492 _Out_ PIO_STATUS_BLOCK IoStatus
,
5493 _Out_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5494 _In_ ULONG CompressedDataInfoLength
,
5495 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5496 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
5498 _Function_class_(FAST_IO_WRITE_COMPRESSED
)
5499 _IRQL_requires_same_
5501 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
5502 _In_
struct _FILE_OBJECT
*FileObject
,
5503 _In_ PLARGE_INTEGER FileOffset
,
5507 _Out_ PMDL
*MdlChain
,
5508 _Out_ PIO_STATUS_BLOCK IoStatus
,
5509 _In_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5510 _In_ ULONG CompressedDataInfoLength
,
5511 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5512 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
5514 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)
5515 _IRQL_requires_same_
5517 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
5518 _In_
struct _FILE_OBJECT
*FileObject
,
5520 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5521 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
5523 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)
5524 _IRQL_requires_same_
5526 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
5527 _In_
struct _FILE_OBJECT
*FileObject
,
5528 _In_ PLARGE_INTEGER FileOffset
,
5530 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5531 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
5533 _Function_class_(FAST_IO_QUERY_OPEN
)
5534 _IRQL_requires_same_
5536 (NTAPI FAST_IO_QUERY_OPEN
)(
5537 _Inout_
struct _IRP
*Irp
,
5538 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
5539 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5540 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
5542 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE
)
5543 _IRQL_requires_same_
5545 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
5546 _In_
struct _FILE_OBJECT
*FileObject
,
5547 _In_
struct _ERESOURCE
*ResourceToRelease
,
5548 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5549 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
5551 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH
)
5552 _IRQL_requires_same_
5554 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
5555 _In_
struct _FILE_OBJECT
*FileObject
,
5556 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5557 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
5559 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH
)
5560 _IRQL_requires_same_
5562 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
5563 _In_
struct _FILE_OBJECT
*FileObject
,
5564 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5565 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
5567 typedef struct _FAST_IO_DISPATCH
{
5568 ULONG SizeOfFastIoDispatch
;
5569 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
5570 PFAST_IO_READ FastIoRead
;
5571 PFAST_IO_WRITE FastIoWrite
;
5572 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
5573 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
5574 PFAST_IO_LOCK FastIoLock
;
5575 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
5576 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
5577 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
5578 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
5579 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
5580 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
5581 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
5582 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
5583 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
5584 PFAST_IO_MDL_READ MdlRead
;
5585 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
5586 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
5587 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
5588 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
5589 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
5590 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
5591 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
5592 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
5593 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
5594 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
5595 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
5596 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
5598 typedef struct _SECTION_OBJECT_POINTERS
{
5599 PVOID DataSectionObject
;
5600 PVOID SharedCacheMap
;
5601 PVOID ImageSectionObject
;
5602 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
5604 typedef struct _IO_COMPLETION_CONTEXT
{
5607 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
5609 /* FILE_OBJECT.Flags */
5610 #define FO_FILE_OPEN 0x00000001
5611 #define FO_SYNCHRONOUS_IO 0x00000002
5612 #define FO_ALERTABLE_IO 0x00000004
5613 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
5614 #define FO_WRITE_THROUGH 0x00000010
5615 #define FO_SEQUENTIAL_ONLY 0x00000020
5616 #define FO_CACHE_SUPPORTED 0x00000040
5617 #define FO_NAMED_PIPE 0x00000080
5618 #define FO_STREAM_FILE 0x00000100
5619 #define FO_MAILSLOT 0x00000200
5620 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
5621 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
5622 #define FO_DIRECT_DEVICE_OPEN 0x00000800
5623 #define FO_FILE_MODIFIED 0x00001000
5624 #define FO_FILE_SIZE_CHANGED 0x00002000
5625 #define FO_CLEANUP_COMPLETE 0x00004000
5626 #define FO_TEMPORARY_FILE 0x00008000
5627 #define FO_DELETE_ON_CLOSE 0x00010000
5628 #define FO_OPENED_CASE_SENSITIVE 0x00020000
5629 #define FO_HANDLE_CREATED 0x00040000
5630 #define FO_FILE_FAST_IO_READ 0x00080000
5631 #define FO_RANDOM_ACCESS 0x00100000
5632 #define FO_FILE_OPEN_CANCELLED 0x00200000
5633 #define FO_VOLUME_OPEN 0x00400000
5634 #define FO_REMOTE_ORIGIN 0x01000000
5635 #define FO_DISALLOW_EXCLUSIVE 0x02000000
5636 #define FO_SKIP_COMPLETION_PORT 0x02000000
5637 #define FO_SKIP_SET_EVENT 0x04000000
5638 #define FO_SKIP_SET_FAST_IO 0x08000000
5639 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
5642 #define VPB_MOUNTED 0x0001
5643 #define VPB_LOCKED 0x0002
5644 #define VPB_PERSISTENT 0x0004
5645 #define VPB_REMOVE_PENDING 0x0008
5646 #define VPB_RAW_MOUNT 0x0010
5647 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
5651 #define SL_FORCE_ACCESS_CHECK 0x01
5652 #define SL_OPEN_PAGING_FILE 0x02
5653 #define SL_OPEN_TARGET_DIRECTORY 0x04
5654 #define SL_STOP_ON_SYMLINK 0x08
5655 #define SL_CASE_SENSITIVE 0x80
5657 #define SL_KEY_SPECIFIED 0x01
5658 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
5659 #define SL_WRITE_THROUGH 0x04
5660 #define SL_FT_SEQUENTIAL_WRITE 0x08
5661 #define SL_FORCE_DIRECT_WRITE 0x10
5662 #define SL_REALTIME_STREAM 0x20
5664 #define SL_READ_ACCESS_GRANTED 0x01
5665 #define SL_WRITE_ACCESS_GRANTED 0x04
5667 #define SL_FAIL_IMMEDIATELY 0x01
5668 #define SL_EXCLUSIVE_LOCK 0x02
5670 #define SL_RESTART_SCAN 0x01
5671 #define SL_RETURN_SINGLE_ENTRY 0x02
5672 #define SL_INDEX_SPECIFIED 0x04
5674 #define SL_WATCH_TREE 0x01
5676 #define SL_ALLOW_RAW_MOUNT 0x01
5678 #define CTL_CODE(DeviceType, Function, Method, Access) \
5679 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
5681 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
5683 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
5685 #define IRP_NOCACHE 0x00000001
5686 #define IRP_PAGING_IO 0x00000002
5687 #define IRP_MOUNT_COMPLETION 0x00000002
5688 #define IRP_SYNCHRONOUS_API 0x00000004
5689 #define IRP_ASSOCIATED_IRP 0x00000008
5690 #define IRP_BUFFERED_IO 0x00000010
5691 #define IRP_DEALLOCATE_BUFFER 0x00000020
5692 #define IRP_INPUT_OPERATION 0x00000040
5693 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
5694 #define IRP_CREATE_OPERATION 0x00000080
5695 #define IRP_READ_OPERATION 0x00000100
5696 #define IRP_WRITE_OPERATION 0x00000200
5697 #define IRP_CLOSE_OPERATION 0x00000400
5698 #define IRP_DEFER_IO_COMPLETION 0x00000800
5699 #define IRP_OB_QUERY_NAME 0x00001000
5700 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
5701 /* The following 2 are missing in latest WDK */
5702 #define IRP_RETRY_IO_COMPLETION 0x00004000
5703 #define IRP_CLASS_CACHE_OPERATION 0x00008000
5705 #define IRP_QUOTA_CHARGED 0x01
5706 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
5707 #define IRP_ALLOCATED_FIXED_SIZE 0x04
5708 #define IRP_LOOKASIDE_ALLOCATION 0x08
5711 ** IRP function codes
5714 #define IRP_MJ_CREATE 0x00
5715 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
5716 #define IRP_MJ_CLOSE 0x02
5717 #define IRP_MJ_READ 0x03
5718 #define IRP_MJ_WRITE 0x04
5719 #define IRP_MJ_QUERY_INFORMATION 0x05
5720 #define IRP_MJ_SET_INFORMATION 0x06
5721 #define IRP_MJ_QUERY_EA 0x07
5722 #define IRP_MJ_SET_EA 0x08
5723 #define IRP_MJ_FLUSH_BUFFERS 0x09
5724 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
5725 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
5726 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
5727 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
5728 #define IRP_MJ_DEVICE_CONTROL 0x0e
5729 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
5730 #define IRP_MJ_SCSI 0x0f
5731 #define IRP_MJ_SHUTDOWN 0x10
5732 #define IRP_MJ_LOCK_CONTROL 0x11
5733 #define IRP_MJ_CLEANUP 0x12
5734 #define IRP_MJ_CREATE_MAILSLOT 0x13
5735 #define IRP_MJ_QUERY_SECURITY 0x14
5736 #define IRP_MJ_SET_SECURITY 0x15
5737 #define IRP_MJ_POWER 0x16
5738 #define IRP_MJ_SYSTEM_CONTROL 0x17
5739 #define IRP_MJ_DEVICE_CHANGE 0x18
5740 #define IRP_MJ_QUERY_QUOTA 0x19
5741 #define IRP_MJ_SET_QUOTA 0x1a
5742 #define IRP_MJ_PNP 0x1b
5743 #define IRP_MJ_PNP_POWER 0x1b
5744 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
5746 #define IRP_MN_SCSI_CLASS 0x01
5748 #define IRP_MN_START_DEVICE 0x00
5749 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
5750 #define IRP_MN_REMOVE_DEVICE 0x02
5751 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
5752 #define IRP_MN_STOP_DEVICE 0x04
5753 #define IRP_MN_QUERY_STOP_DEVICE 0x05
5754 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
5756 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
5757 #define IRP_MN_QUERY_INTERFACE 0x08
5758 #define IRP_MN_QUERY_CAPABILITIES 0x09
5759 #define IRP_MN_QUERY_RESOURCES 0x0A
5760 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
5761 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
5762 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
5764 #define IRP_MN_READ_CONFIG 0x0F
5765 #define IRP_MN_WRITE_CONFIG 0x10
5766 #define IRP_MN_EJECT 0x11
5767 #define IRP_MN_SET_LOCK 0x12
5768 #define IRP_MN_QUERY_ID 0x13
5769 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
5770 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
5771 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
5772 #define IRP_MN_SURPRISE_REMOVAL 0x17
5773 #if (NTDDI_VERSION >= NTDDI_WIN7)
5774 #define IRP_MN_DEVICE_ENUMERATED 0x19
5777 #define IRP_MN_WAIT_WAKE 0x00
5778 #define IRP_MN_POWER_SEQUENCE 0x01
5779 #define IRP_MN_SET_POWER 0x02
5780 #define IRP_MN_QUERY_POWER 0x03
5782 #define IRP_MN_QUERY_ALL_DATA 0x00
5783 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
5784 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
5785 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
5786 #define IRP_MN_ENABLE_EVENTS 0x04
5787 #define IRP_MN_DISABLE_EVENTS 0x05
5788 #define IRP_MN_ENABLE_COLLECTION 0x06
5789 #define IRP_MN_DISABLE_COLLECTION 0x07
5790 #define IRP_MN_REGINFO 0x08
5791 #define IRP_MN_EXECUTE_METHOD 0x09
5793 #define IRP_MN_REGINFO_EX 0x0b
5795 typedef struct _FILE_OBJECT
{
5798 PDEVICE_OBJECT DeviceObject
;
5802 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
5803 PVOID PrivateCacheMap
;
5804 NTSTATUS FinalStatus
;
5805 struct _FILE_OBJECT
*RelatedFileObject
;
5806 BOOLEAN LockOperation
;
5807 BOOLEAN DeletePending
;
5809 BOOLEAN WriteAccess
;
5810 BOOLEAN DeleteAccess
;
5812 BOOLEAN SharedWrite
;
5813 BOOLEAN SharedDelete
;
5815 UNICODE_STRING FileName
;
5816 LARGE_INTEGER CurrentByteOffset
;
5817 volatile ULONG Waiters
;
5818 volatile ULONG Busy
;
5822 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
5823 KSPIN_LOCK IrpListLock
;
5825 volatile PVOID FileObjectExtension
;
5826 } FILE_OBJECT
, *PFILE_OBJECT
;
5828 typedef struct _IO_ERROR_LOG_PACKET
{
5829 UCHAR MajorFunctionCode
;
5831 USHORT DumpDataSize
;
5832 USHORT NumberOfStrings
;
5833 USHORT StringOffset
;
5834 USHORT EventCategory
;
5836 ULONG UniqueErrorValue
;
5837 NTSTATUS FinalStatus
;
5838 ULONG SequenceNumber
;
5839 ULONG IoControlCode
;
5840 LARGE_INTEGER DeviceOffset
;
5842 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
5844 typedef struct _IO_ERROR_LOG_MESSAGE
{
5847 USHORT DriverNameLength
;
5848 LARGE_INTEGER TimeStamp
;
5849 ULONG DriverNameOffset
;
5850 IO_ERROR_LOG_PACKET EntryData
;
5851 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
5853 #define ERROR_LOG_LIMIT_SIZE 240
5854 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
5855 sizeof(IO_ERROR_LOG_PACKET) + \
5856 (sizeof(WCHAR) * 40))
5857 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
5858 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5859 #define IO_ERROR_LOG_MESSAGE_LENGTH \
5860 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
5861 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
5862 PORT_MAXIMUM_MESSAGE_LENGTH)
5863 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
5864 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5867 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
5869 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
5872 typedef enum _DMA_WIDTH
{
5877 } DMA_WIDTH
, *PDMA_WIDTH
;
5879 typedef enum _DMA_SPEED
{
5886 } DMA_SPEED
, *PDMA_SPEED
;
5888 /* DEVICE_DESCRIPTION.Version */
5890 #define DEVICE_DESCRIPTION_VERSION 0x0000
5891 #define DEVICE_DESCRIPTION_VERSION1 0x0001
5892 #define DEVICE_DESCRIPTION_VERSION2 0x0002
5894 typedef struct _DEVICE_DESCRIPTION
{
5897 BOOLEAN ScatterGather
;
5899 BOOLEAN AutoInitialize
;
5900 BOOLEAN Dma32BitAddresses
;
5901 BOOLEAN IgnoreCount
;
5903 BOOLEAN Dma64BitAddresses
;
5906 INTERFACE_TYPE InterfaceType
;
5909 ULONG MaximumLength
;
5911 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
5913 typedef enum _DEVICE_RELATION_TYPE
{
5918 TargetDeviceRelation
,
5921 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
5923 typedef struct _DEVICE_RELATIONS
{
5925 PDEVICE_OBJECT Objects
[1];
5926 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
5928 typedef struct _DEVOBJ_EXTENSION
{
5931 PDEVICE_OBJECT DeviceObject
;
5932 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
5934 typedef struct _SCATTER_GATHER_ELEMENT
{
5935 PHYSICAL_ADDRESS Address
;
5938 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
5940 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
5942 #if defined(_MSC_VER)
5943 #if _MSC_VER >= 1200
5944 #pragma warning(push)
5946 #pragma warning(disable:4200)
5947 #endif /* _MSC_VER */
5949 typedef struct _SCATTER_GATHER_LIST
{
5950 ULONG NumberOfElements
;
5952 SCATTER_GATHER_ELEMENT Elements
[1];
5953 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5955 #if defined(_MSC_VER)
5956 #if _MSC_VER >= 1200
5957 #pragma warning(pop)
5959 #pragma warning(default:4200)
5961 #endif /* _MSC_VER */
5963 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
5965 struct _SCATTER_GATHER_LIST
;
5966 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5968 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
5970 _Function_class_(DRIVER_ADD_DEVICE
)
5971 _IRQL_requires_(PASSIVE_LEVEL
)
5972 _IRQL_requires_same_
5973 _When_(return>=0, _Kernel_clear_do_init_(__yes
))
5975 (NTAPI DRIVER_ADD_DEVICE
)(
5976 _In_
struct _DRIVER_OBJECT
*DriverObject
,
5977 _In_
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
5978 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
5980 typedef struct _DRIVER_EXTENSION
{
5981 struct _DRIVER_OBJECT
*DriverObject
;
5982 PDRIVER_ADD_DEVICE AddDevice
;
5984 UNICODE_STRING ServiceKeyName
;
5985 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
5987 #define DRVO_UNLOAD_INVOKED 0x00000001
5988 #define DRVO_LEGACY_DRIVER 0x00000002
5989 #define DRVO_BUILTIN_DRIVER 0x00000004
5991 _Function_class_(DRIVER_INITIALIZE
)
5992 _IRQL_requires_same_
5994 (NTAPI DRIVER_INITIALIZE
)(
5995 _In_
struct _DRIVER_OBJECT
*DriverObject
,
5996 _In_ PUNICODE_STRING RegistryPath
);
5997 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
5999 _Function_class_(DRIVER_STARTIO
)
6000 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6001 _IRQL_requires_(DISPATCH_LEVEL
)
6002 _IRQL_requires_same_
6004 (NTAPI DRIVER_STARTIO
)(
6005 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6006 _Inout_
struct _IRP
*Irp
);
6007 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
6009 _Function_class_(DRIVER_UNLOAD
)
6010 _IRQL_requires_(PASSIVE_LEVEL
)
6011 _IRQL_requires_same_
6013 (NTAPI DRIVER_UNLOAD
)(
6014 _In_
struct _DRIVER_OBJECT
*DriverObject
);
6015 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
6017 _Function_class_(DRIVER_DISPATCH
)
6018 _IRQL_requires_(PASSIVE_LEVEL
)
6019 _IRQL_requires_same_
6021 (NTAPI DRIVER_DISPATCH
)(
6022 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6023 _Inout_
struct _IRP
*Irp
);
6024 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
6026 typedef struct _DRIVER_OBJECT
{
6029 PDEVICE_OBJECT DeviceObject
;
6033 PVOID DriverSection
;
6034 PDRIVER_EXTENSION DriverExtension
;
6035 UNICODE_STRING DriverName
;
6036 PUNICODE_STRING HardwareDatabase
;
6037 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
6038 PDRIVER_INITIALIZE DriverInit
;
6039 PDRIVER_STARTIO DriverStartIo
;
6040 PDRIVER_UNLOAD DriverUnload
;
6041 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
6042 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
6044 typedef struct _DMA_ADAPTER
{
6047 struct _DMA_OPERATIONS
* DmaOperations
;
6048 } DMA_ADAPTER
, *PDMA_ADAPTER
;
6051 (NTAPI
*PPUT_DMA_ADAPTER
)(
6052 PDMA_ADAPTER DmaAdapter
);
6055 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
6056 _In_ PDMA_ADAPTER DmaAdapter
,
6058 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
6059 _In_ BOOLEAN CacheEnabled
);
6062 (NTAPI
*PFREE_COMMON_BUFFER
)(
6063 _In_ PDMA_ADAPTER DmaAdapter
,
6065 _In_ PHYSICAL_ADDRESS LogicalAddress
,
6066 _In_ PVOID VirtualAddress
,
6067 _In_ BOOLEAN CacheEnabled
);
6070 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
6071 _In_ PDMA_ADAPTER DmaAdapter
,
6072 _In_ PDEVICE_OBJECT DeviceObject
,
6073 _In_ ULONG NumberOfMapRegisters
,
6074 _In_ PDRIVER_CONTROL ExecutionRoutine
,
6075 _In_ PVOID Context
);
6078 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
6079 _In_ PDMA_ADAPTER DmaAdapter
,
6081 _In_ PVOID MapRegisterBase
,
6082 _In_ PVOID CurrentVa
,
6084 _In_ BOOLEAN WriteToDevice
);
6087 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
6088 _In_ PDMA_ADAPTER DmaAdapter
);
6091 (NTAPI
*PFREE_MAP_REGISTERS
)(
6092 _In_ PDMA_ADAPTER DmaAdapter
,
6093 PVOID MapRegisterBase
,
6094 ULONG NumberOfMapRegisters
);
6096 typedef PHYSICAL_ADDRESS
6097 (NTAPI
*PMAP_TRANSFER
)(
6098 _In_ PDMA_ADAPTER DmaAdapter
,
6100 _In_ PVOID MapRegisterBase
,
6101 _In_ PVOID CurrentVa
,
6102 _Inout_ PULONG Length
,
6103 _In_ BOOLEAN WriteToDevice
);
6106 (NTAPI
*PGET_DMA_ALIGNMENT
)(
6107 _In_ PDMA_ADAPTER DmaAdapter
);
6110 (NTAPI
*PREAD_DMA_COUNTER
)(
6111 _In_ PDMA_ADAPTER DmaAdapter
);
6113 _Function_class_(DRIVER_LIST_CONTROL
)
6114 _IRQL_requires_same_
6116 (NTAPI DRIVER_LIST_CONTROL
)(
6117 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6118 _In_
struct _IRP
*Irp
,
6119 _In_
struct _SCATTER_GATHER_LIST
*ScatterGather
,
6120 _In_ PVOID Context
);
6121 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
6124 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
6125 _In_ PDMA_ADAPTER DmaAdapter
,
6126 _In_ PDEVICE_OBJECT DeviceObject
,
6128 _In_ PVOID CurrentVa
,
6130 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6132 _In_ BOOLEAN WriteToDevice
);
6135 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
6136 _In_ PDMA_ADAPTER DmaAdapter
,
6137 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6138 _In_ BOOLEAN WriteToDevice
);
6141 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
6142 _In_ PDMA_ADAPTER DmaAdapter
,
6143 _In_ PMDL Mdl OPTIONAL
,
6144 _In_ PVOID CurrentVa
,
6146 _Out_ PULONG ScatterGatherListSize
,
6147 _Out_ OPTIONAL PULONG pNumberOfMapRegisters
);
6150 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
6151 _In_ PDMA_ADAPTER DmaAdapter
,
6152 _In_ PDEVICE_OBJECT DeviceObject
,
6154 _In_ PVOID CurrentVa
,
6156 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6158 _In_ BOOLEAN WriteToDevice
,
6159 _In_ PVOID ScatterGatherBuffer
,
6160 _In_ ULONG ScatterGatherLength
);
6163 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
6164 _In_ PDMA_ADAPTER DmaAdapter
,
6165 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6166 _In_ PMDL OriginalMdl
,
6167 _Out_ PMDL
*TargetMdl
);
6169 typedef struct _DMA_OPERATIONS
{
6171 PPUT_DMA_ADAPTER PutDmaAdapter
;
6172 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
6173 PFREE_COMMON_BUFFER FreeCommonBuffer
;
6174 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
6175 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
6176 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
6177 PFREE_MAP_REGISTERS FreeMapRegisters
;
6178 PMAP_TRANSFER MapTransfer
;
6179 PGET_DMA_ALIGNMENT GetDmaAlignment
;
6180 PREAD_DMA_COUNTER ReadDmaCounter
;
6181 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
6182 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
6183 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
6184 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
6185 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
6186 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
6188 typedef struct _IO_RESOURCE_DESCRIPTOR
{
6191 UCHAR ShareDisposition
;
6199 PHYSICAL_ADDRESS MinimumAddress
;
6200 PHYSICAL_ADDRESS MaximumAddress
;
6205 PHYSICAL_ADDRESS MinimumAddress
;
6206 PHYSICAL_ADDRESS MaximumAddress
;
6209 ULONG MinimumVector
;
6210 ULONG MaximumVector
;
6213 ULONG MinimumChannel
;
6214 ULONG MaximumChannel
;
6219 PHYSICAL_ADDRESS MinimumAddress
;
6220 PHYSICAL_ADDRESS MaximumAddress
;
6237 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
6239 typedef struct _IO_RESOURCE_LIST
{
6243 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
6244 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
6246 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
6248 INTERFACE_TYPE InterfaceType
;
6252 ULONG AlternativeLists
;
6253 IO_RESOURCE_LIST List
[1];
6254 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
6256 _Function_class_(DRIVER_CANCEL
)
6257 _Requires_lock_held_(_Global_cancel_spin_lock_
)
6258 _Releases_lock_(_Global_cancel_spin_lock_
)
6259 _IRQL_requires_min_(DISPATCH_LEVEL
)
6260 _IRQL_requires_(DISPATCH_LEVEL
)
6262 (NTAPI DRIVER_CANCEL
)(
6263 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6264 _Inout_ _IRQL_uses_cancel_
struct _IRP
*Irp
);
6265 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
6267 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _IRP
{
6270 struct _MDL
*MdlAddress
;
6273 struct _IRP
*MasterIrp
;
6274 volatile LONG IrpCount
;
6277 LIST_ENTRY ThreadListEntry
;
6278 IO_STATUS_BLOCK IoStatus
;
6279 KPROCESSOR_MODE RequestorMode
;
6280 BOOLEAN PendingReturned
;
6282 CHAR CurrentLocation
;
6285 CCHAR ApcEnvironment
;
6286 UCHAR AllocationFlags
;
6287 PIO_STATUS_BLOCK UserIosb
;
6291 _ANONYMOUS_UNION
union {
6292 PIO_APC_ROUTINE UserApcRoutine
;
6293 PVOID IssuingProcess
;
6295 PVOID UserApcContext
;
6296 } AsynchronousParameters
;
6297 LARGE_INTEGER AllocationSize
;
6299 volatile PDRIVER_CANCEL CancelRoutine
;
6303 _ANONYMOUS_UNION
union {
6304 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
6305 _ANONYMOUS_STRUCT
struct {
6306 PVOID DriverContext
[4];
6310 PCHAR AuxiliaryBuffer
;
6311 _ANONYMOUS_STRUCT
struct {
6312 LIST_ENTRY ListEntry
;
6313 _ANONYMOUS_UNION
union {
6314 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6318 struct _FILE_OBJECT
*OriginalFileObject
;
6321 PVOID CompletionKey
;
6325 typedef enum _IO_PAGING_PRIORITY
{
6326 IoPagingPriorityInvalid
,
6327 IoPagingPriorityNormal
,
6328 IoPagingPriorityHigh
,
6329 IoPagingPriorityReserved1
,
6330 IoPagingPriorityReserved2
6331 } IO_PAGING_PRIORITY
;
6333 _Function_class_(IO_COMPLETION_ROUTINE
)
6334 _IRQL_requires_same_
6336 (NTAPI IO_COMPLETION_ROUTINE
)(
6337 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6338 _In_
struct _IRP
*Irp
,
6339 _In_opt_ PVOID Context
);
6340 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6342 _Function_class_(IO_DPC_ROUTINE
)
6343 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6344 _IRQL_requires_(DISPATCH_LEVEL
)
6345 _IRQL_requires_same_
6347 (NTAPI IO_DPC_ROUTINE
)(
6348 _In_
struct _KDPC
*Dpc
,
6349 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6350 _Inout_
struct _IRP
*Irp
,
6351 _In_opt_ PVOID Context
);
6352 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6355 (NTAPI
*PMM_DLL_INITIALIZE
)(
6356 _In_ PUNICODE_STRING RegistryPath
);
6359 (NTAPI
*PMM_DLL_UNLOAD
)(
6362 _Function_class_(IO_TIMER_ROUTINE
)
6363 _IRQL_requires_same_
6365 (NTAPI IO_TIMER_ROUTINE
)(
6366 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6367 _In_opt_ PVOID Context
);
6368 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6370 typedef struct _IO_SECURITY_CONTEXT
{
6371 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6372 PACCESS_STATE AccessState
;
6373 ACCESS_MASK DesiredAccess
;
6374 ULONG FullCreateOptions
;
6375 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6379 typedef struct _IO_CSQ_IRP_CONTEXT
{
6382 struct _IO_CSQ
*Csq
;
6383 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6386 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6387 _In_
struct _IO_CSQ
*Csq
,
6391 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6392 _In_
struct _IO_CSQ
*Csq
,
6394 _In_ PVOID InsertContext
);
6395 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6398 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6399 _In_
struct _IO_CSQ
*Csq
,
6403 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6404 _In_
struct _IO_CSQ
*Csq
,
6406 _In_ PVOID PeekContext
);
6409 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6410 _In_
struct _IO_CSQ
*Csq
,
6414 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6415 _In_
struct _IO_CSQ
*Csq
,
6419 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6420 _In_
struct _IO_CSQ
*Csq
,
6423 typedef struct _IO_CSQ
{
6425 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6426 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6427 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6428 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6429 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6430 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6431 PVOID ReservePointer
;
6434 typedef enum _BUS_QUERY_ID_TYPE
{
6436 BusQueryHardwareIDs
,
6437 BusQueryCompatibleIDs
,
6439 BusQueryDeviceSerialNumber
6440 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6442 typedef enum _DEVICE_TEXT_TYPE
{
6443 DeviceTextDescription
,
6444 DeviceTextLocationInformation
6445 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
6448 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
6452 _IRQL_requires_max_(DISPATCH_LEVEL
)
6453 _Must_inspect_result_
6455 (NTAPI
*PGPE_CONNECT_VECTOR
)(
6460 PGPE_SERVICE_ROUTINE
,
6464 _IRQL_requires_max_(DISPATCH_LEVEL
)
6465 _Must_inspect_result_
6467 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
6470 _IRQL_requires_max_(DISPATCH_LEVEL
)
6471 _Must_inspect_result_
6473 (NTAPI
*PGPE_ENABLE_EVENT
)(
6477 _IRQL_requires_max_(DISPATCH_LEVEL
)
6478 _Must_inspect_result_
6480 (NTAPI
*PGPE_DISABLE_EVENT
)(
6484 _IRQL_requires_max_(DISPATCH_LEVEL
)
6485 _Must_inspect_result_
6487 (NTAPI
*PGPE_CLEAR_STATUS
)(
6492 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
6496 _IRQL_requires_max_(DISPATCH_LEVEL
)
6497 _Must_inspect_result_
6499 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6501 PDEVICE_NOTIFY_CALLBACK
,
6504 _IRQL_requires_max_(DISPATCH_LEVEL
)
6506 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6508 PDEVICE_NOTIFY_CALLBACK
);
6510 typedef struct _ACPI_INTERFACE_STANDARD
{
6514 PINTERFACE_REFERENCE InterfaceReference
;
6515 PINTERFACE_DEREFERENCE InterfaceDereference
;
6516 PGPE_CONNECT_VECTOR GpeConnectVector
;
6517 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
6518 PGPE_ENABLE_EVENT GpeEnableEvent
;
6519 PGPE_DISABLE_EVENT GpeDisableEvent
;
6520 PGPE_CLEAR_STATUS GpeClearStatus
;
6521 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
6522 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
6523 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
6526 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
6527 PVOID ObjectContext
,
6528 PVOID ServiceContext
);
6530 _IRQL_requires_max_(DISPATCH_LEVEL
)
6531 _Must_inspect_result_
6533 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
6536 KINTERRUPT_MODE Mode
,
6538 PGPE_SERVICE_ROUTINE ServiceRoutine
,
6539 PVOID ServiceContext
,
6540 PVOID
*ObjectContext
);
6542 _IRQL_requires_max_(DISPATCH_LEVEL
)
6543 _Must_inspect_result_
6545 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
6547 PVOID ObjectContext
);
6549 _IRQL_requires_max_(DISPATCH_LEVEL
)
6550 _Must_inspect_result_
6552 (NTAPI
*PGPE_ENABLE_EVENT2
)(
6554 PVOID ObjectContext
);
6556 _IRQL_requires_max_(DISPATCH_LEVEL
)
6557 _Must_inspect_result_
6559 (NTAPI
*PGPE_DISABLE_EVENT2
)(
6561 PVOID ObjectContext
);
6563 _IRQL_requires_max_(DISPATCH_LEVEL
)
6564 _Must_inspect_result_
6566 (NTAPI
*PGPE_CLEAR_STATUS2
)(
6568 PVOID ObjectContext
);
6570 _IRQL_requires_max_(DISPATCH_LEVEL
)
6572 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
6573 PVOID NotificationContext
,
6576 _IRQL_requires_max_(DISPATCH_LEVEL
)
6577 _Must_inspect_result_
6579 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6581 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
6582 PVOID NotificationContext
);
6584 _IRQL_requires_max_(DISPATCH_LEVEL
)
6586 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6589 typedef struct _ACPI_INTERFACE_STANDARD2
{
6593 PINTERFACE_REFERENCE InterfaceReference
;
6594 PINTERFACE_DEREFERENCE InterfaceDereference
;
6595 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
6596 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
6597 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
6598 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
6599 PGPE_CLEAR_STATUS2 GpeClearStatus
;
6600 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
6601 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
6602 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
6604 #if !defined(_AMD64_) && !defined(_IA64_)
6605 #include <pshpack4.h>
6607 typedef struct _IO_STACK_LOCATION
{
6608 UCHAR MajorFunction
;
6609 UCHAR MinorFunction
;
6614 PIO_SECURITY_CONTEXT SecurityContext
;
6616 USHORT POINTER_ALIGNMENT FileAttributes
;
6618 ULONG POINTER_ALIGNMENT EaLength
;
6622 ULONG POINTER_ALIGNMENT Key
;
6623 LARGE_INTEGER ByteOffset
;
6627 ULONG POINTER_ALIGNMENT Key
;
6628 LARGE_INTEGER ByteOffset
;
6632 PUNICODE_STRING FileName
;
6633 FILE_INFORMATION_CLASS FileInformationClass
;
6638 ULONG CompletionFilter
;
6642 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6646 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6647 PFILE_OBJECT FileObject
;
6648 _ANONYMOUS_UNION
union {
6649 _ANONYMOUS_STRUCT
struct {
6650 BOOLEAN ReplaceIfExists
;
6651 BOOLEAN AdvanceOnly
;
6654 HANDLE DeleteHandle
;
6668 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
6672 FS_INFORMATION_CLASS FsInformationClass
;
6675 ULONG OutputBufferLength
;
6676 ULONG InputBufferLength
;
6677 ULONG FsControlCode
;
6678 PVOID Type3InputBuffer
;
6679 } FileSystemControl
;
6681 PLARGE_INTEGER Length
;
6683 LARGE_INTEGER ByteOffset
;
6686 ULONG OutputBufferLength
;
6687 ULONG POINTER_ALIGNMENT InputBufferLength
;
6688 ULONG POINTER_ALIGNMENT IoControlCode
;
6689 PVOID Type3InputBuffer
;
6692 SECURITY_INFORMATION SecurityInformation
;
6693 ULONG POINTER_ALIGNMENT Length
;
6696 SECURITY_INFORMATION SecurityInformation
;
6697 PSECURITY_DESCRIPTOR SecurityDescriptor
;
6701 PDEVICE_OBJECT DeviceObject
;
6705 PDEVICE_OBJECT DeviceObject
;
6708 struct _SCSI_REQUEST_BLOCK
*Srb
;
6713 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
6714 ULONG SidListLength
;
6720 DEVICE_RELATION_TYPE Type
;
6721 } QueryDeviceRelations
;
6723 CONST GUID
*InterfaceType
;
6726 PINTERFACE Interface
;
6727 PVOID InterfaceSpecificData
;
6730 PDEVICE_CAPABILITIES Capabilities
;
6731 } DeviceCapabilities
;
6733 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
6734 } FilterResourceRequirements
;
6739 ULONG POINTER_ALIGNMENT Length
;
6745 BUS_QUERY_ID_TYPE IdType
;
6748 DEVICE_TEXT_TYPE DeviceTextType
;
6749 LCID POINTER_ALIGNMENT LocaleId
;
6753 BOOLEAN Reserved
[3];
6754 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
6755 } UsageNotification
;
6757 SYSTEM_POWER_STATE PowerState
;
6760 PPOWER_SEQUENCE PowerSequence
;
6763 ULONG SystemContext
;
6764 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
6765 POWER_STATE POINTER_ALIGNMENT State
;
6766 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
6769 PCM_RESOURCE_LIST AllocatedResources
;
6770 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
6773 ULONG_PTR ProviderId
;
6785 PDEVICE_OBJECT DeviceObject
;
6786 PFILE_OBJECT FileObject
;
6787 PIO_COMPLETION_ROUTINE CompletionRoutine
;
6789 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
6790 #if !defined(_AMD64_) && !defined(_IA64_)
6791 #include <poppack.h>
6794 /* IO_STACK_LOCATION.Control */
6796 #define SL_PENDING_RETURNED 0x01
6797 #define SL_ERROR_RETURNED 0x02
6798 #define SL_INVOKE_ON_CANCEL 0x20
6799 #define SL_INVOKE_ON_SUCCESS 0x40
6800 #define SL_INVOKE_ON_ERROR 0x80
6802 #define METHOD_BUFFERED 0
6803 #define METHOD_IN_DIRECT 1
6804 #define METHOD_OUT_DIRECT 2
6805 #define METHOD_NEITHER 3
6807 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
6808 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
6810 #define FILE_SUPERSEDED 0x00000000
6811 #define FILE_OPENED 0x00000001
6812 #define FILE_CREATED 0x00000002
6813 #define FILE_OVERWRITTEN 0x00000003
6814 #define FILE_EXISTS 0x00000004
6815 #define FILE_DOES_NOT_EXIST 0x00000005
6817 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
6818 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
6820 /* also in winnt.h */
6821 #define FILE_LIST_DIRECTORY 0x00000001
6822 #define FILE_READ_DATA 0x00000001
6823 #define FILE_ADD_FILE 0x00000002
6824 #define FILE_WRITE_DATA 0x00000002
6825 #define FILE_ADD_SUBDIRECTORY 0x00000004
6826 #define FILE_APPEND_DATA 0x00000004
6827 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
6828 #define FILE_READ_EA 0x00000008
6829 #define FILE_WRITE_EA 0x00000010
6830 #define FILE_EXECUTE 0x00000020
6831 #define FILE_TRAVERSE 0x00000020
6832 #define FILE_DELETE_CHILD 0x00000040
6833 #define FILE_READ_ATTRIBUTES 0x00000080
6834 #define FILE_WRITE_ATTRIBUTES 0x00000100
6836 #define FILE_SHARE_READ 0x00000001
6837 #define FILE_SHARE_WRITE 0x00000002
6838 #define FILE_SHARE_DELETE 0x00000004
6839 #define FILE_SHARE_VALID_FLAGS 0x00000007
6841 #define FILE_ATTRIBUTE_READONLY 0x00000001
6842 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
6843 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
6844 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
6845 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
6846 #define FILE_ATTRIBUTE_DEVICE 0x00000040
6847 #define FILE_ATTRIBUTE_NORMAL 0x00000080
6848 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
6849 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
6850 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
6851 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
6852 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
6853 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
6854 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
6855 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
6857 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
6858 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
6860 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
6861 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
6862 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
6863 #define FILE_VALID_SET_FLAGS 0x00000036
6865 #define FILE_SUPERSEDE 0x00000000
6866 #define FILE_OPEN 0x00000001
6867 #define FILE_CREATE 0x00000002
6868 #define FILE_OPEN_IF 0x00000003
6869 #define FILE_OVERWRITE 0x00000004
6870 #define FILE_OVERWRITE_IF 0x00000005
6871 #define FILE_MAXIMUM_DISPOSITION 0x00000005
6873 #define FILE_DIRECTORY_FILE 0x00000001
6874 #define FILE_WRITE_THROUGH 0x00000002
6875 #define FILE_SEQUENTIAL_ONLY 0x00000004
6876 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
6877 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
6878 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
6879 #define FILE_NON_DIRECTORY_FILE 0x00000040
6880 #define FILE_CREATE_TREE_CONNECTION 0x00000080
6881 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
6882 #define FILE_NO_EA_KNOWLEDGE 0x00000200
6883 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
6884 #define FILE_RANDOM_ACCESS 0x00000800
6885 #define FILE_DELETE_ON_CLOSE 0x00001000
6886 #define FILE_OPEN_BY_FILE_ID 0x00002000
6887 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
6888 #define FILE_NO_COMPRESSION 0x00008000
6889 #if (NTDDI_VERSION >= NTDDI_WIN7)
6890 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
6891 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
6892 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6893 #define FILE_RESERVE_OPFILTER 0x00100000
6894 #define FILE_OPEN_REPARSE_POINT 0x00200000
6895 #define FILE_OPEN_NO_RECALL 0x00400000
6896 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
6898 #define FILE_ANY_ACCESS 0x00000000
6899 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
6900 #define FILE_READ_ACCESS 0x00000001
6901 #define FILE_WRITE_ACCESS 0x00000002
6903 #define FILE_ALL_ACCESS \
6904 (STANDARD_RIGHTS_REQUIRED | \
6908 #define FILE_GENERIC_EXECUTE \
6909 (STANDARD_RIGHTS_EXECUTE | \
6910 FILE_READ_ATTRIBUTES | \
6914 #define FILE_GENERIC_READ \
6915 (STANDARD_RIGHTS_READ | \
6917 FILE_READ_ATTRIBUTES | \
6921 #define FILE_GENERIC_WRITE \
6922 (STANDARD_RIGHTS_WRITE | \
6924 FILE_WRITE_ATTRIBUTES | \
6926 FILE_APPEND_DATA | \
6931 #define WMIREG_ACTION_REGISTER 1
6932 #define WMIREG_ACTION_DEREGISTER 2
6933 #define WMIREG_ACTION_REREGISTER 3
6934 #define WMIREG_ACTION_UPDATE_GUIDS 4
6935 #define WMIREG_ACTION_BLOCK_IRPS 5
6937 #define WMIREGISTER 0
6940 _Function_class_(WMI_NOTIFICATION_CALLBACK
)
6941 _IRQL_requires_same_
6943 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
6946 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
6951 typedef struct _PCI_SLOT_NUMBER
{
6954 ULONG DeviceNumber
:5;
6955 ULONG FunctionNumber
:3;
6960 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
6962 #define PCI_TYPE0_ADDRESSES 6
6963 #define PCI_TYPE1_ADDRESSES 2
6964 #define PCI_TYPE2_ADDRESSES 5
6966 typedef struct _PCI_COMMON_HEADER
{
6967 PCI_COMMON_HEADER_LAYOUT
6968 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
6971 typedef struct _PCI_COMMON_CONFIG
{
6972 PCI_COMMON_HEADER_LAYOUT
6973 UCHAR DeviceSpecific
[192];
6974 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6976 typedef struct _PCI_COMMON_CONFIG
{
6977 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
6978 UCHAR DeviceSpecific
[192];
6979 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6982 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
6984 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
6986 #define PCI_MAX_DEVICES 32
6987 #define PCI_MAX_FUNCTION 8
6988 #define PCI_MAX_BRIDGE_NUMBER 0xFF
6989 #define PCI_INVALID_VENDORID 0xFFFF
6991 /* PCI_COMMON_CONFIG.HeaderType */
6992 #define PCI_MULTIFUNCTION 0x80
6993 #define PCI_DEVICE_TYPE 0x00
6994 #define PCI_BRIDGE_TYPE 0x01
6995 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
6997 #define PCI_CONFIGURATION_TYPE(PciData) \
6998 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
7000 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
7001 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
7003 /* PCI_COMMON_CONFIG.Command */
7004 #define PCI_ENABLE_IO_SPACE 0x0001
7005 #define PCI_ENABLE_MEMORY_SPACE 0x0002
7006 #define PCI_ENABLE_BUS_MASTER 0x0004
7007 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
7008 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
7009 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
7010 #define PCI_ENABLE_PARITY 0x0040
7011 #define PCI_ENABLE_WAIT_CYCLE 0x0080
7012 #define PCI_ENABLE_SERR 0x0100
7013 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
7014 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
7016 /* PCI_COMMON_CONFIG.Status */
7017 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
7018 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
7019 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
7020 #define PCI_STATUS_UDF_SUPPORTED 0x0040
7021 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
7022 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
7023 #define PCI_STATUS_DEVSEL 0x0600
7024 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
7025 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
7026 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
7027 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
7028 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
7030 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
7032 #define PCI_WHICHSPACE_CONFIG 0x0
7033 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
7035 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
7036 #define PCI_CAPABILITY_ID_AGP 0x02
7037 #define PCI_CAPABILITY_ID_VPD 0x03
7038 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
7039 #define PCI_CAPABILITY_ID_MSI 0x05
7040 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
7041 #define PCI_CAPABILITY_ID_PCIX 0x07
7042 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
7043 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
7044 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
7045 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
7046 #define PCI_CAPABILITY_ID_SHPC 0x0C
7047 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
7048 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
7049 #define PCI_CAPABILITY_ID_SECURE 0x0F
7050 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
7051 #define PCI_CAPABILITY_ID_MSIX 0x11
7053 typedef struct _PCI_CAPABILITIES_HEADER
{
7056 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
7058 typedef struct _PCI_PMC
{
7062 UCHAR DeviceSpecificInitialization
:1;
7064 struct _PM_SUPPORT
{
7074 } PCI_PMC
, *PPCI_PMC
;
7076 typedef struct _PCI_PMCSR
{
7077 USHORT PowerState
:2;
7080 USHORT DataSelect
:4;
7083 } PCI_PMCSR
, *PPCI_PMCSR
;
7085 typedef struct _PCI_PMCSR_BSE
{
7087 UCHAR D3HotSupportsStopClock
:1;
7088 UCHAR BusPowerClockControlEnabled
:1;
7089 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
7091 typedef struct _PCI_PM_CAPABILITY
{
7092 PCI_CAPABILITIES_HEADER Header
;
7094 PCI_PMC Capabilities
;
7098 PCI_PMCSR ControlStatus
;
7102 PCI_PMCSR_BSE BridgeSupport
;
7106 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
7109 PCI_CAPABILITIES_HEADER Header
;
7112 USHORT DataParityErrorRecoveryEnable
:1;
7113 USHORT EnableRelaxedOrdering
:1;
7114 USHORT MaxMemoryReadByteCount
:2;
7115 USHORT MaxOutstandingSplitTransactions
:3;
7122 ULONG FunctionNumber
:3;
7123 ULONG DeviceNumber
:5;
7125 ULONG Device64Bit
:1;
7126 ULONG Capable133MHz
:1;
7127 ULONG SplitCompletionDiscarded
:1;
7128 ULONG UnexpectedSplitCompletion
:1;
7129 ULONG DeviceComplexity
:1;
7130 ULONG DesignedMaxMemoryReadByteCount
:2;
7131 ULONG DesignedMaxOutstandingSplitTransactions
:3;
7132 ULONG DesignedMaxCumulativeReadSize
:3;
7133 ULONG ReceivedSplitCompletionErrorMessage
:1;
7134 ULONG CapablePCIX266
:1;
7135 ULONG CapablePCIX533
:1;
7139 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
7141 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
7142 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
7143 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
7144 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
7145 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
7146 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
7147 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
7148 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
7149 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
7150 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
7151 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
7153 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
7154 USHORT CapabilityID
;
7157 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
7159 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
7160 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7161 ULONG LowSerialNumber
;
7162 ULONG HighSerialNumber
;
7163 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
7165 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
7166 _ANONYMOUS_STRUCT
struct {
7169 ULONG DataLinkProtocolError
:1;
7170 ULONG SurpriseDownError
:1;
7172 ULONG PoisonedTLP
:1;
7173 ULONG FlowControlProtocolError
:1;
7174 ULONG CompletionTimeout
:1;
7175 ULONG CompleterAbort
:1;
7176 ULONG UnexpectedCompletion
:1;
7177 ULONG ReceiverOverflow
:1;
7178 ULONG MalformedTLP
:1;
7180 ULONG UnsupportedRequestError
:1;
7184 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
7186 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
7187 _ANONYMOUS_STRUCT
struct {
7190 ULONG DataLinkProtocolError
:1;
7191 ULONG SurpriseDownError
:1;
7193 ULONG PoisonedTLP
:1;
7194 ULONG FlowControlProtocolError
:1;
7195 ULONG CompletionTimeout
:1;
7196 ULONG CompleterAbort
:1;
7197 ULONG UnexpectedCompletion
:1;
7198 ULONG ReceiverOverflow
:1;
7199 ULONG MalformedTLP
:1;
7201 ULONG UnsupportedRequestError
:1;
7205 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
7207 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
7208 _ANONYMOUS_STRUCT
struct {
7211 ULONG DataLinkProtocolError
:1;
7212 ULONG SurpriseDownError
:1;
7214 ULONG PoisonedTLP
:1;
7215 ULONG FlowControlProtocolError
:1;
7216 ULONG CompletionTimeout
:1;
7217 ULONG CompleterAbort
:1;
7218 ULONG UnexpectedCompletion
:1;
7219 ULONG ReceiverOverflow
:1;
7220 ULONG MalformedTLP
:1;
7222 ULONG UnsupportedRequestError
:1;
7226 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
7228 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
7229 _ANONYMOUS_STRUCT
struct {
7230 ULONG ReceiverError
:1;
7234 ULONG ReplayNumRollover
:1;
7236 ULONG ReplayTimerTimeout
:1;
7237 ULONG AdvisoryNonFatalError
:1;
7241 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
7243 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
7244 _ANONYMOUS_STRUCT
struct {
7245 ULONG ReceiverError
:1;
7249 ULONG ReplayNumRollover
:1;
7251 ULONG ReplayTimerTimeout
:1;
7252 ULONG AdvisoryNonFatalError
:1;
7256 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
7258 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
7259 _ANONYMOUS_STRUCT
struct {
7260 ULONG FirstErrorPointer
:5;
7261 ULONG ECRCGenerationCapable
:1;
7262 ULONG ECRCGenerationEnable
:1;
7263 ULONG ECRCCheckCapable
:1;
7264 ULONG ECRCCheckEnable
:1;
7268 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
7270 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
7271 _ANONYMOUS_STRUCT
struct {
7272 ULONG CorrectableErrorReportingEnable
:1;
7273 ULONG NonFatalErrorReportingEnable
:1;
7274 ULONG FatalErrorReportingEnable
:1;
7278 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
7280 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
7281 _ANONYMOUS_STRUCT
struct {
7282 ULONG CorrectableErrorReceived
:1;
7283 ULONG MultipleCorrectableErrorsReceived
:1;
7284 ULONG UncorrectableErrorReceived
:1;
7285 ULONG MultipleUncorrectableErrorsReceived
:1;
7286 ULONG FirstUncorrectableFatal
:1;
7287 ULONG NonFatalErrorMessagesReceived
:1;
7288 ULONG FatalErrorMessagesReceived
:1;
7290 ULONG AdvancedErrorInterruptMessageNumber
:5;
7293 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
7295 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
7296 _ANONYMOUS_STRUCT
struct {
7297 USHORT CorrectableSourceIdFun
:3;
7298 USHORT CorrectableSourceIdDev
:5;
7299 USHORT CorrectableSourceIdBus
:8;
7300 USHORT UncorrectableSourceIdFun
:3;
7301 USHORT UncorrectableSourceIdDev
:5;
7302 USHORT UncorrectableSourceIdBus
:8;
7305 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
7307 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
7308 _ANONYMOUS_STRUCT
struct {
7309 ULONG TargetAbortOnSplitCompletion
:1;
7310 ULONG MasterAbortOnSplitCompletion
:1;
7311 ULONG ReceivedTargetAbort
:1;
7312 ULONG ReceivedMasterAbort
:1;
7314 ULONG UnexpectedSplitCompletionError
:1;
7315 ULONG UncorrectableSplitCompletion
:1;
7316 ULONG UncorrectableDataError
:1;
7317 ULONG UncorrectableAttributeError
:1;
7318 ULONG UncorrectableAddressError
:1;
7319 ULONG DelayedTransactionDiscardTimerExpired
:1;
7320 ULONG PERRAsserted
:1;
7321 ULONG SERRAsserted
:1;
7322 ULONG InternalBridgeError
:1;
7326 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
7328 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
7329 _ANONYMOUS_STRUCT
struct {
7330 ULONG TargetAbortOnSplitCompletion
:1;
7331 ULONG MasterAbortOnSplitCompletion
:1;
7332 ULONG ReceivedTargetAbort
:1;
7333 ULONG ReceivedMasterAbort
:1;
7335 ULONG UnexpectedSplitCompletionError
:1;
7336 ULONG UncorrectableSplitCompletion
:1;
7337 ULONG UncorrectableDataError
:1;
7338 ULONG UncorrectableAttributeError
:1;
7339 ULONG UncorrectableAddressError
:1;
7340 ULONG DelayedTransactionDiscardTimerExpired
:1;
7341 ULONG PERRAsserted
:1;
7342 ULONG SERRAsserted
:1;
7343 ULONG InternalBridgeError
:1;
7347 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
7349 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
7350 _ANONYMOUS_STRUCT
struct {
7351 ULONG TargetAbortOnSplitCompletion
:1;
7352 ULONG MasterAbortOnSplitCompletion
:1;
7353 ULONG ReceivedTargetAbort
:1;
7354 ULONG ReceivedMasterAbort
:1;
7356 ULONG UnexpectedSplitCompletionError
:1;
7357 ULONG UncorrectableSplitCompletion
:1;
7358 ULONG UncorrectableDataError
:1;
7359 ULONG UncorrectableAttributeError
:1;
7360 ULONG UncorrectableAddressError
:1;
7361 ULONG DelayedTransactionDiscardTimerExpired
:1;
7362 ULONG PERRAsserted
:1;
7363 ULONG SERRAsserted
:1;
7364 ULONG InternalBridgeError
:1;
7368 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7370 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7371 _ANONYMOUS_STRUCT
struct {
7372 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7376 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7378 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7379 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7380 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7382 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7383 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7384 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7385 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7387 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7388 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7389 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7390 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7391 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7392 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7393 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7394 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7396 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7397 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7398 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7399 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7400 ULONG SecHeaderLog
[4];
7401 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7403 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7404 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7405 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7406 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7407 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7408 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7409 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7410 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7412 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7413 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7414 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7415 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7417 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7418 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7419 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7420 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7421 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7422 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7423 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7424 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7426 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7427 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7428 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7429 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7430 ULONG SecHeaderLog
[4];
7431 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7433 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7434 _ANONYMOUS_STRUCT
struct {
7435 ULONG VFMigrationCapable
:1;
7437 ULONG VFMigrationInterruptNumber
:11;
7440 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7442 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7443 _ANONYMOUS_STRUCT
struct {
7445 USHORT VFMigrationEnable
:1;
7446 USHORT VFMigrationInterruptEnable
:1;
7447 USHORT VFMemorySpaceEnable
:1;
7448 USHORT ARICapableHierarchy
:1;
7449 USHORT Reserved1
:11;
7452 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
7454 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
7455 _ANONYMOUS_STRUCT
struct {
7456 USHORT VFMigrationStatus
:1;
7457 USHORT Reserved1
:15;
7460 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
7462 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
7463 _ANONYMOUS_STRUCT
struct {
7464 ULONG VFMigrationStateBIR
:3;
7465 ULONG VFMigrationStateOffset
:29;
7468 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
7470 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
7471 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7472 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
7473 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
7474 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
7478 UCHAR FunctionDependencyLink
;
7480 USHORT FirstVFOffset
;
7484 ULONG SupportedPageSizes
;
7485 ULONG SystemPageSize
;
7486 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
7487 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
7488 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
7490 /* PCI device classes */
7491 #define PCI_CLASS_PRE_20 0x00
7492 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
7493 #define PCI_CLASS_NETWORK_CTLR 0x02
7494 #define PCI_CLASS_DISPLAY_CTLR 0x03
7495 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
7496 #define PCI_CLASS_MEMORY_CTLR 0x05
7497 #define PCI_CLASS_BRIDGE_DEV 0x06
7498 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
7499 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
7500 #define PCI_CLASS_INPUT_DEV 0x09
7501 #define PCI_CLASS_DOCKING_STATION 0x0a
7502 #define PCI_CLASS_PROCESSOR 0x0b
7503 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
7504 #define PCI_CLASS_WIRELESS_CTLR 0x0d
7505 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
7506 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
7507 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
7508 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
7509 #define PCI_CLASS_NOT_DEFINED 0xff
7511 /* PCI device subclasses for class 0 */
7512 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
7513 #define PCI_SUBCLASS_PRE_20_VGA 0x01
7515 /* PCI device subclasses for class 1 (mass storage controllers)*/
7516 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
7517 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
7518 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
7519 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
7520 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
7521 #define PCI_SUBCLASS_MSC_OTHER 0x80
7523 /* PCI device subclasses for class 2 (network controllers)*/
7524 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
7525 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
7526 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
7527 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
7528 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
7529 #define PCI_SUBCLASS_NET_OTHER 0x80
7531 /* PCI device subclasses for class 3 (display controllers)*/
7532 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
7533 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
7534 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
7535 #define PCI_SUBCLASS_VID_OTHER 0x80
7537 /* PCI device subclasses for class 4 (multimedia device)*/
7538 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
7539 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
7540 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
7541 #define PCI_SUBCLASS_MM_OTHER 0x80
7543 /* PCI device subclasses for class 5 (memory controller)*/
7544 #define PCI_SUBCLASS_MEM_RAM 0x00
7545 #define PCI_SUBCLASS_MEM_FLASH 0x01
7546 #define PCI_SUBCLASS_MEM_OTHER 0x80
7548 /* PCI device subclasses for class 6 (bridge device)*/
7549 #define PCI_SUBCLASS_BR_HOST 0x00
7550 #define PCI_SUBCLASS_BR_ISA 0x01
7551 #define PCI_SUBCLASS_BR_EISA 0x02
7552 #define PCI_SUBCLASS_BR_MCA 0x03
7553 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
7554 #define PCI_SUBCLASS_BR_PCMCIA 0x05
7555 #define PCI_SUBCLASS_BR_NUBUS 0x06
7556 #define PCI_SUBCLASS_BR_CARDBUS 0x07
7557 #define PCI_SUBCLASS_BR_RACEWAY 0x08
7558 #define PCI_SUBCLASS_BR_OTHER 0x80
7560 #define PCI_SUBCLASS_COM_SERIAL 0x00
7561 #define PCI_SUBCLASS_COM_PARALLEL 0x01
7562 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
7563 #define PCI_SUBCLASS_COM_MODEM 0x03
7564 #define PCI_SUBCLASS_COM_OTHER 0x80
7566 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
7567 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
7568 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
7569 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
7570 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
7571 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
7572 #define PCI_SUBCLASS_SYS_OTHER 0x80
7574 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
7575 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
7576 #define PCI_SUBCLASS_INP_MOUSE 0x02
7577 #define PCI_SUBCLASS_INP_SCANNER 0x03
7578 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
7579 #define PCI_SUBCLASS_INP_OTHER 0x80
7581 #define PCI_SUBCLASS_DOC_GENERIC 0x00
7582 #define PCI_SUBCLASS_DOC_OTHER 0x80
7584 #define PCI_SUBCLASS_PROC_386 0x00
7585 #define PCI_SUBCLASS_PROC_486 0x01
7586 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
7587 #define PCI_SUBCLASS_PROC_ALPHA 0x10
7588 #define PCI_SUBCLASS_PROC_POWERPC 0x20
7589 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
7591 /* PCI device subclasses for class C (serial bus controller)*/
7592 #define PCI_SUBCLASS_SB_IEEE1394 0x00
7593 #define PCI_SUBCLASS_SB_ACCESS 0x01
7594 #define PCI_SUBCLASS_SB_SSA 0x02
7595 #define PCI_SUBCLASS_SB_USB 0x03
7596 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
7597 #define PCI_SUBCLASS_SB_SMBUS 0x05
7599 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
7600 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
7601 #define PCI_SUBCLASS_WIRELESS_RF 0x10
7602 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
7604 #define PCI_SUBCLASS_INTIO_I2O 0x00
7606 #define PCI_SUBCLASS_SAT_TV 0x01
7607 #define PCI_SUBCLASS_SAT_AUDIO 0x02
7608 #define PCI_SUBCLASS_SAT_VOICE 0x03
7609 #define PCI_SUBCLASS_SAT_DATA 0x04
7611 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
7612 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
7613 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
7615 #define PCI_SUBCLASS_DASP_DPIO 0x00
7616 #define PCI_SUBCLASS_DASP_OTHER 0x80
7618 #define PCI_ADDRESS_IO_SPACE 0x00000001
7619 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
7620 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
7621 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
7622 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
7623 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
7625 #define PCI_TYPE_32BIT 0
7626 #define PCI_TYPE_20BIT 2
7627 #define PCI_TYPE_64BIT 4
7629 #define PCI_ROMADDRESS_ENABLED 0x00000001
7631 #endif /* _PCI_X_ */
7633 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
7635 _IRQL_requires_max_(PASSIVE_LEVEL
)
7636 _Must_inspect_result_
7638 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
7639 _Inout_ PVOID Context
);
7640 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
7642 _IRQL_requires_max_(PASSIVE_LEVEL
)
7643 _Must_inspect_result_
7645 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
7646 _Inout_ PVOID Context
);
7647 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
7649 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
7653 PINTERFACE_REFERENCE InterfaceReference
;
7654 PINTERFACE_DEREFERENCE InterfaceDereference
;
7655 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
7656 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
7657 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
7659 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
7662 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
7664 _Out_writes_bytes_(Length
) PVOID Buffer
,
7669 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
7671 _In_reads_bytes_(Length
) PVOID Buffer
,
7675 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
7679 PINTERFACE_REFERENCE InterfaceReference
;
7680 PINTERFACE_DEREFERENCE InterfaceDereference
;
7681 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
7682 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
7683 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
7685 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
7687 _Must_inspect_result_
7689 (NTAPI PCI_MSIX_SET_ENTRY
)(
7691 _In_ ULONG TableEntry
,
7692 _In_ ULONG MessageNumber
);
7693 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
7695 _Must_inspect_result_
7697 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
7699 _In_ ULONG TableEntry
);
7700 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
7702 _Must_inspect_result_
7704 (NTAPI PCI_MSIX_GET_ENTRY
)(
7706 _In_ ULONG TableEntry
,
7707 _Out_ PULONG MessageNumber
,
7708 _Out_ PBOOLEAN Masked
);
7709 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
7711 _Must_inspect_result_
7713 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
7715 _Out_ PULONG TableSize
);
7716 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
7718 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
7722 PINTERFACE_REFERENCE InterfaceReference
;
7723 PINTERFACE_DEREFERENCE InterfaceDereference
;
7724 PPCI_MSIX_SET_ENTRY SetTableEntry
;
7725 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
7726 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
7727 PPCI_MSIX_GET_ENTRY GetTableEntry
;
7728 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
7729 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
7731 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
7732 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
7734 /******************************************************************************
7735 * Object Manager Types *
7736 ******************************************************************************/
7738 #define MAXIMUM_FILENAME_LENGTH 256
7739 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
7741 #define OBJECT_TYPE_CREATE 0x0001
7742 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
7744 #define DIRECTORY_QUERY 0x0001
7745 #define DIRECTORY_TRAVERSE 0x0002
7746 #define DIRECTORY_CREATE_OBJECT 0x0004
7747 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
7748 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
7750 #define SYMBOLIC_LINK_QUERY 0x0001
7751 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
7753 #define DUPLICATE_CLOSE_SOURCE 0x00000001
7754 #define DUPLICATE_SAME_ACCESS 0x00000002
7755 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
7757 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
7758 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
7760 typedef ULONG OB_OPERATION
;
7762 #define OB_OPERATION_HANDLE_CREATE 0x00000001
7763 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
7765 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
7766 _Inout_ ACCESS_MASK DesiredAccess
;
7767 _In_ ACCESS_MASK OriginalDesiredAccess
;
7768 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
7770 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
7771 _Inout_ ACCESS_MASK DesiredAccess
;
7772 _In_ ACCESS_MASK OriginalDesiredAccess
;
7773 _In_ PVOID SourceProcess
;
7774 _In_ PVOID TargetProcess
;
7775 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
7777 typedef union _OB_PRE_OPERATION_PARAMETERS
{
7778 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7779 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7780 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
7782 typedef struct _OB_PRE_OPERATION_INFORMATION
{
7783 _In_ OB_OPERATION Operation
;
7784 _ANONYMOUS_UNION
union {
7786 _ANONYMOUS_STRUCT
struct {
7787 _In_ ULONG KernelHandle
:1;
7788 _In_ ULONG Reserved
:31;
7792 _In_ POBJECT_TYPE ObjectType
;
7793 _Out_ PVOID CallContext
;
7794 _In_ POB_PRE_OPERATION_PARAMETERS Parameters
;
7795 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
7797 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
7798 _In_ ACCESS_MASK GrantedAccess
;
7799 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
7801 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
7802 _In_ ACCESS_MASK GrantedAccess
;
7803 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
7805 typedef union _OB_POST_OPERATION_PARAMETERS
{
7806 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7807 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7808 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
7810 typedef struct _OB_POST_OPERATION_INFORMATION
{
7811 _In_ OB_OPERATION Operation
;
7812 _ANONYMOUS_UNION
union {
7814 _ANONYMOUS_STRUCT
struct {
7815 _In_ ULONG KernelHandle
:1;
7816 _In_ ULONG Reserved
:31;
7820 _In_ POBJECT_TYPE ObjectType
;
7821 _In_ PVOID CallContext
;
7822 _In_ NTSTATUS ReturnStatus
;
7823 _In_ POB_POST_OPERATION_PARAMETERS Parameters
;
7824 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
7826 typedef enum _OB_PREOP_CALLBACK_STATUS
{
7828 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
7830 typedef OB_PREOP_CALLBACK_STATUS
7831 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
7832 _In_ PVOID RegistrationContext
,
7833 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
);
7836 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
7837 _In_ PVOID RegistrationContext
,
7838 _In_ POB_POST_OPERATION_INFORMATION OperationInformation
);
7840 typedef struct _OB_OPERATION_REGISTRATION
{
7841 _In_ POBJECT_TYPE
*ObjectType
;
7842 _In_ OB_OPERATION Operations
;
7843 _In_ POB_PRE_OPERATION_CALLBACK PreOperation
;
7844 _In_ POB_POST_OPERATION_CALLBACK PostOperation
;
7845 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
7847 typedef struct _OB_CALLBACK_REGISTRATION
{
7848 _In_ USHORT Version
;
7849 _In_ USHORT OperationRegistrationCount
;
7850 _In_ UNICODE_STRING Altitude
;
7851 _In_ PVOID RegistrationContext
;
7852 _In_ OB_OPERATION_REGISTRATION
*OperationRegistration
;
7853 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
7855 typedef struct _OBJECT_NAME_INFORMATION
{
7856 UNICODE_STRING Name
;
7857 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
7859 /* Exported object types */
7860 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
7861 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
7862 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
7863 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
7864 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
7865 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
7866 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
7869 /******************************************************************************
7870 * Process Manager Types *
7871 ******************************************************************************/
7873 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
7874 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
7875 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
7876 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
7877 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
7879 /* Thread Access Rights */
7880 #define THREAD_TERMINATE 0x0001
7881 #define THREAD_SUSPEND_RESUME 0x0002
7882 #define THREAD_ALERT 0x0004
7883 #define THREAD_GET_CONTEXT 0x0008
7884 #define THREAD_SET_CONTEXT 0x0010
7885 #define THREAD_SET_INFORMATION 0x0020
7886 #define THREAD_SET_LIMITED_INFORMATION 0x0400
7887 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
7889 #define PROCESS_DUP_HANDLE (0x0040)
7891 #if (NTDDI_VERSION >= NTDDI_VISTA)
7892 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7894 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
7897 #if (NTDDI_VERSION >= NTDDI_VISTA)
7898 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7900 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
7903 #define LOW_PRIORITY 0
7904 #define LOW_REALTIME_PRIORITY 16
7905 #define HIGH_PRIORITY 31
7906 #define MAXIMUM_PRIORITY 32
7909 /******************************************************************************
7910 * WMI Library Support Types *
7911 ******************************************************************************/
7914 #include <evntrace.h>
7918 #ifndef _TRACEHANDLE_DEFINED
7919 #define _TRACEHANDLE_DEFINED
7920 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
7923 #ifndef TRACE_INFORMATION_CLASS_DEFINE
7925 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
7928 ULONG MinimumBuffers
;
7929 ULONG MaximumBuffers
;
7932 ULONG FlushThreshold
;
7934 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
7936 typedef enum _TRACE_INFORMATION_CLASS
{
7939 TraceEnableFlagsClass
,
7940 TraceEnableLevelClass
,
7941 GlobalLoggerHandleClass
,
7942 EventLoggerHandleClass
,
7943 AllLoggerHandlesClass
,
7944 TraceHandleByNameClass
,
7945 LoggerEventsLostClass
,
7946 TraceSessionSettingsClass
,
7947 LoggerEventsLoggedClass
,
7948 MaxTraceInformationClass
7949 } TRACE_INFORMATION_CLASS
;
7951 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
7957 #include <evntprov.h>
7959 _IRQL_requires_same_
7961 (NTAPI
*PETWENABLECALLBACK
)(
7962 _In_ LPCGUID SourceId
,
7963 _In_ ULONG ControlCode
,
7965 _In_ ULONGLONG MatchAnyKeyword
,
7966 _In_ ULONGLONG MatchAllKeyword
,
7967 _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData
,
7968 _Inout_opt_ PVOID CallbackContext
);
7970 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
7973 /******************************************************************************
7974 * Kernel Functions *
7975 ******************************************************************************/
7976 #if defined(_M_IX86)
7977 /** Kernel definitions for x86 **/
7979 /* Interrupt request levels */
7980 #define PASSIVE_LEVEL 0
7983 #define DISPATCH_LEVEL 2
7984 #define CMCI_LEVEL 5
7985 #define PROFILE_LEVEL 27
7986 #define CLOCK1_LEVEL 28
7987 #define CLOCK2_LEVEL 28
7988 #define IPI_LEVEL 29
7989 #define POWER_LEVEL 30
7990 #define HIGH_LEVEL 31
7991 #define CLOCK_LEVEL CLOCK2_LEVEL
7993 #define KIP0PCRADDRESS 0xffdff000
7994 #define KI_USER_SHARED_DATA 0xffdf0000
7995 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
7997 #define PAGE_SIZE 0x1000
7998 #define PAGE_SHIFT 12L
7999 #define KeGetDcacheFillSize() 1L
8001 #define EFLAG_SIGN 0x8000
8002 #define EFLAG_ZERO 0x4000
8003 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8005 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8006 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
8007 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8010 typedef struct _KFLOATING_SAVE
{
8014 ULONG ErrorSelector
;
8019 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8021 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
8023 #define YieldProcessor _mm_pause
8027 KeMemoryBarrier(VOID
)
8029 LONG Barrier
, *Dummy
= &Barrier
;
8030 UNREFERENCED_LOCAL_VARIABLE(Dummy
);
8032 #if defined(__GNUC__)
8033 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8034 #elif defined(_MSC_VER)
8035 __asm xchg
[Barrier
], eax
8039 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8041 _IRQL_requires_max_(HIGH_LEVEL
)
8046 KeGetCurrentIrql(VOID
);
8048 _IRQL_requires_max_(HIGH_LEVEL
)
8053 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
);
8054 #define KeLowerIrql(a) KfLowerIrql(a)
8056 _IRQL_requires_max_(HIGH_LEVEL
)
8057 _IRQL_raises_(NewIrql
)
8063 _In_ KIRQL NewIrql
);
8064 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8066 _IRQL_requires_max_(DISPATCH_LEVEL
)
8068 _IRQL_raises_(DISPATCH_LEVEL
)
8072 KeRaiseIrqlToDpcLevel(VOID
);
8077 KeRaiseIrqlToSynchLevel(VOID
);
8079 _Requires_lock_not_held_(*SpinLock
)
8080 _Acquires_lock_(*SpinLock
)
8081 _IRQL_requires_max_(DISPATCH_LEVEL
)
8083 _IRQL_raises_(DISPATCH_LEVEL
)
8088 _Inout_ PKSPIN_LOCK SpinLock
);
8089 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
8091 _Requires_lock_held_(*SpinLock
)
8092 _Releases_lock_(*SpinLock
)
8093 _IRQL_requires_(DISPATCH_LEVEL
)
8098 _Inout_ PKSPIN_LOCK SpinLock
,
8099 _In_ _IRQL_restores_ KIRQL NewIrql
);
8100 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
8102 _Requires_lock_not_held_(*SpinLock
)
8103 _Acquires_lock_(*SpinLock
)
8104 _IRQL_requires_min_(DISPATCH_LEVEL
)
8108 KefAcquireSpinLockAtDpcLevel(
8109 _Inout_ PKSPIN_LOCK SpinLock
);
8110 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
8112 _Requires_lock_held_(*SpinLock
)
8113 _Releases_lock_(*SpinLock
)
8114 _IRQL_requires_min_(DISPATCH_LEVEL
)
8118 KefReleaseSpinLockFromDpcLevel(
8119 _Inout_ PKSPIN_LOCK SpinLock
);
8120 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
8125 KeGetCurrentThread(VOID
);
8127 _Always_(_Post_satisfies_(return<=0))
8128 _Must_inspect_result_
8129 _IRQL_requires_max_(DISPATCH_LEVEL
)
8130 _Kernel_float_saved_
8131 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
8135 KeSaveFloatingPointState(
8136 _Out_ PKFLOATING_SAVE FloatSave
);
8139 _Kernel_float_restored_
8140 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
8144 KeRestoreFloatingPointState(
8145 _In_ PKFLOATING_SAVE FloatSave
);
8150 * IN BOOLEAN ReadOperation,
8151 * IN BOOLEAN DmaOperation)
8153 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8155 /* x86 and x64 performs a 0x2C interrupt */
8156 #define DbgRaiseAssertionFailure __int2c
8161 OUT PLARGE_INTEGER CurrentCount
)
8164 #ifdef NONAMELESSUNION
8165 CurrentCount
->s
.HighPart
= KeTickCount
.High1Time
;
8166 CurrentCount
->s
.LowPart
= KeTickCount
.LowPart
;
8167 if (CurrentCount
->s
.HighPart
== KeTickCount
.High2Time
) break;
8169 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
8170 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
8171 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
8176 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
8182 #elif defined(_M_AMD64)
8183 /** Kernel definitions for AMD64 **/
8185 /* Interrupt request levels */
8186 #define PASSIVE_LEVEL 0
8189 #define DISPATCH_LEVEL 2
8190 #define CMCI_LEVEL 5
8191 #define CLOCK_LEVEL 13
8192 #define IPI_LEVEL 14
8193 #define DRS_LEVEL 14
8194 #define POWER_LEVEL 14
8195 #define PROFILE_LEVEL 15
8196 #define HIGH_LEVEL 15
8198 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
8199 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
8200 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
8201 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
8202 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
8204 #define PAGE_SIZE 0x1000
8205 #define PAGE_SHIFT 12L
8207 #define EFLAG_SIGN 0x8000
8208 #define EFLAG_ZERO 0x4000
8209 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8211 typedef struct _KFLOATING_SAVE
{
8213 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8215 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
8217 #define KeQueryInterruptTime() \
8218 (*(volatile ULONG64*)SharedInterruptTime)
8220 #define KeQuerySystemTime(CurrentCount) \
8221 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
8223 #define KeQueryTickCount(CurrentCount) \
8224 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
8226 #define KeGetDcacheFillSize() 1L
8228 #define YieldProcessor _mm_pause
8229 #define MemoryBarrier __faststorefence
8230 #define FastFence __faststorefence
8231 #define LoadFence _mm_lfence
8232 #define MemoryFence _mm_mfence
8233 #define StoreFence _mm_sfence
8234 #define LFENCE_ACQUIRE() LoadFence()
8238 KeMemoryBarrier(VOID
)
8240 // FIXME: Do we really need lfence after the __faststorefence ?
8245 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8249 KeGetCurrentIrql(VOID
)
8251 return (KIRQL
)__readcr8();
8256 KeLowerIrql(IN KIRQL NewIrql
)
8258 //ASSERT((KIRQL)__readcr8() >= NewIrql);
8259 __writecr8(NewIrql
);
8264 KfRaiseIrql(IN KIRQL NewIrql
)
8268 OldIrql
= (KIRQL
)__readcr8();
8269 //ASSERT(OldIrql <= NewIrql);
8270 __writecr8(NewIrql
);
8273 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8277 KeRaiseIrqlToDpcLevel(VOID
)
8279 return KfRaiseIrql(DISPATCH_LEVEL
);
8284 KeRaiseIrqlToSynchLevel(VOID
)
8286 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8291 KeGetCurrentThread(VOID
)
8293 return (struct _KTHREAD
*)__readgsqword(0x188);
8298 KeSaveFloatingPointState(PVOID FloatingState
)
8300 UNREFERENCED_PARAMETER(FloatingState
);
8301 return STATUS_SUCCESS
;
8306 KeRestoreFloatingPointState(PVOID FloatingState
)
8308 UNREFERENCED_PARAMETER(FloatingState
);
8309 return STATUS_SUCCESS
;
8315 * IN BOOLEAN ReadOperation,
8316 * IN BOOLEAN DmaOperation)
8318 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8320 /* x86 and x64 performs a 0x2C interrupt */
8321 #define DbgRaiseAssertionFailure __int2c
8323 #elif defined(_M_IA64)
8324 /** Kernel definitions for IA64 **/
8326 /* Interrupt request levels */
8327 #define PASSIVE_LEVEL 0
8330 #define DISPATCH_LEVEL 2
8332 #define DEVICE_LEVEL_BASE 4
8334 #define IPI_LEVEL 14
8335 #define DRS_LEVEL 14
8336 #define CLOCK_LEVEL 13
8337 #define POWER_LEVEL 15
8338 #define PROFILE_LEVEL 15
8339 #define HIGH_LEVEL 15
8341 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
8342 extern volatile LARGE_INTEGER KeTickCount
;
8344 #define PAUSE_PROCESSOR __yield();
8348 KeFlushWriteBuffer(VOID
)
8357 KeGetCurrentThread(VOID
);
8360 #elif defined(_M_PPC)
8362 /* Interrupt request levels */
8363 #define PASSIVE_LEVEL 0
8366 #define DISPATCH_LEVEL 2
8367 #define PROFILE_LEVEL 27
8368 #define CLOCK1_LEVEL 28
8369 #define CLOCK2_LEVEL 28
8370 #define IPI_LEVEL 29
8371 #define POWER_LEVEL 30
8372 #define HIGH_LEVEL 31
8375 // Used to contain PFNs and PFN counts
8377 typedef ULONG PFN_COUNT
;
8378 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8379 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8382 typedef struct _KFLOATING_SAVE
{
8384 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8386 typedef struct _KPCR_TIB
{
8387 PVOID ExceptionList
; /* 00 */
8388 PVOID StackBase
; /* 04 */
8389 PVOID StackLimit
; /* 08 */
8390 PVOID SubSystemTib
; /* 0C */
8391 _ANONYMOUS_UNION
union {
8392 PVOID FiberData
; /* 10 */
8393 ULONG Version
; /* 10 */
8395 PVOID ArbitraryUserPointer
; /* 14 */
8396 struct _KPCR_TIB
*Self
; /* 18 */
8397 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
8399 #define PCR_MINOR_VERSION 1
8400 #define PCR_MAJOR_VERSION 1
8402 typedef struct _KPCR
{
8403 KPCR_TIB Tib
; /* 00 */
8404 struct _KPCR
*Self
; /* 1C */
8405 struct _KPRCB
*Prcb
; /* 20 */
8406 KIRQL Irql
; /* 24 */
8408 ULONG IrrActive
; /* 2C */
8410 PVOID KdVersionBlock
; /* 34 */
8411 PUSHORT IDT
; /* 38 */
8412 PUSHORT GDT
; /* 3C */
8413 struct _KTSS
*TSS
; /* 40 */
8414 USHORT MajorVersion
; /* 44 */
8415 USHORT MinorVersion
; /* 46 */
8416 KAFFINITY SetMember
; /* 48 */
8417 ULONG StallScaleFactor
; /* 4C */
8418 UCHAR SpareUnused
; /* 50 */
8419 UCHAR Number
; /* 51 */
8420 } KPCR
, *PKPCR
; /* 54 */
8422 #define KeGetPcr() PCR
8424 #define YieldProcessor() __asm__ __volatile__("nop");
8429 KeGetCurrentProcessorNumber(VOID
)
8432 __asm__
__volatile__ (
8435 : "i" (FIELD_OFFSET(KPCR
, Number
))
8445 #define KeLowerIrql(a) KfLowerIrql(a)
8452 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8457 KeRaiseIrqlToDpcLevel(VOID
);
8462 KeRaiseIrqlToSynchLevel(VOID
);
8466 #elif defined(_M_MIPS)
8467 #error MIPS Headers are totally incorrect
8470 // Used to contain PFNs and PFN counts
8472 typedef ULONG PFN_COUNT
;
8473 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8474 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8476 #define PASSIVE_LEVEL 0
8478 #define DISPATCH_LEVEL 2
8479 #define PROFILE_LEVEL 27
8480 #define IPI_LEVEL 29
8481 #define HIGH_LEVEL 31
8483 typedef struct _KPCR
{
8484 struct _KPRCB
*Prcb
; /* 20 */
8485 KIRQL Irql
; /* 24 */
8490 #define KeGetPcr() PCR
8492 typedef struct _KFLOATING_SAVE
{
8493 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8498 KeGetCurrentProcessorNumber(VOID
)
8503 #define YieldProcessor() __asm__ __volatile__("nop");
8505 #define KeLowerIrql(a) KfLowerIrql(a)
8506 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8523 KeRaiseIrqlToDpcLevel(VOID
);
8528 KeRaiseIrqlToSynchLevel(VOID
);
8531 #elif defined(_M_ARM)
8534 #error Unknown Architecture
8541 _Out_ PRKEVENT Event
,
8542 _In_ EVENT_TYPE Type
,
8543 _In_ BOOLEAN State
);
8545 _IRQL_requires_max_(DISPATCH_LEVEL
)
8550 _Inout_ PRKEVENT Event
);
8552 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8554 #if defined(_NTDDK_) || defined(_NTIFS_)
8555 _Maybe_raises_SEH_exception_
8556 _IRQL_requires_max_(APC_LEVEL
)
8561 __in_data_source(USER_MODE
) _In_reads_bytes_(Length
) CONST VOID
*Address
, /* CONST is added */
8563 _In_ ULONG Alignment
);
8564 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
8566 _Maybe_raises_SEH_exception_
8567 _IRQL_requires_max_(APC_LEVEL
)
8572 __in_data_source(USER_MODE
) _Out_writes_bytes_(Length
) PVOID Address
,
8574 _In_ ULONG Alignment
);
8576 #if defined(SINGLE_GROUP_LEGACY_API)
8578 _IRQL_requires_min_(PASSIVE_LEVEL
)
8579 _IRQL_requires_max_(APC_LEVEL
)
8583 KeRevertToUserAffinityThread(VOID
);
8585 _IRQL_requires_min_(PASSIVE_LEVEL
)
8586 _IRQL_requires_max_(APC_LEVEL
)
8590 KeSetSystemAffinityThread(
8591 _In_ KAFFINITY Affinity
);
8596 KeSetTargetProcessorDpc(
8603 KeQueryActiveProcessors(VOID
);
8604 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
8606 #if !defined(_M_AMD64)
8610 KeQueryInterruptTime(VOID
);
8616 _Out_ PLARGE_INTEGER CurrentTime
);
8617 #endif /* !_M_AMD64 */
8619 #if !defined(_X86_) && !defined(_M_ARM)
8620 _Requires_lock_not_held_(*SpinLock
)
8621 _Acquires_lock_(*SpinLock
)
8622 _IRQL_requires_max_(DISPATCH_LEVEL
)
8624 _IRQL_raises_(DISPATCH_LEVEL
)
8628 KeAcquireSpinLockRaiseToDpc(
8629 _Inout_ PKSPIN_LOCK SpinLock
);
8631 #define KeAcquireSpinLock(SpinLock, OldIrql) \
8632 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
8634 _Requires_lock_not_held_(*SpinLock
)
8635 _Acquires_lock_(*SpinLock
)
8636 _IRQL_requires_min_(DISPATCH_LEVEL
)
8640 KeAcquireSpinLockAtDpcLevel(
8641 _Inout_ PKSPIN_LOCK SpinLock
);
8643 _Requires_lock_held_(*SpinLock
)
8644 _Releases_lock_(*SpinLock
)
8645 _IRQL_requires_(DISPATCH_LEVEL
)
8650 _Inout_ PKSPIN_LOCK SpinLock
,
8651 _In_ _IRQL_restores_ KIRQL NewIrql
);
8653 _Requires_lock_held_(*SpinLock
)
8654 _Releases_lock_(*SpinLock
)
8655 _IRQL_requires_min_(DISPATCH_LEVEL
)
8659 KeReleaseSpinLockFromDpcLevel(
8660 _Inout_ PKSPIN_LOCK SpinLock
);
8663 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
8667 KeInitializeSpinLock(
8668 _Out_ PKSPIN_LOCK SpinLock
);
8672 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock
)
8674 /* Clear the lock */
8684 _In_ ULONG BugCheckCode
,
8685 _In_ ULONG_PTR BugCheckParameter1
,
8686 _In_ ULONG_PTR BugCheckParameter2
,
8687 _In_ ULONG_PTR BugCheckParameter3
,
8688 _In_ ULONG_PTR BugCheckParameter4
);
8690 _IRQL_requires_max_(DISPATCH_LEVEL
)
8697 _IRQL_requires_min_(PASSIVE_LEVEL
)
8698 _IRQL_requires_max_(APC_LEVEL
)
8702 KeDelayExecutionThread(
8703 _In_ KPROCESSOR_MODE WaitMode
,
8704 _In_ BOOLEAN Alertable
,
8705 _In_ PLARGE_INTEGER Interval
);
8707 _Must_inspect_result_
8711 KeDeregisterBugCheckCallback(
8712 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
8714 _Acquires_lock_(_Global_critical_region_
)
8715 _IRQL_requires_max_(APC_LEVEL
)
8719 KeEnterCriticalRegion(VOID
);
8721 _IRQL_requires_max_(DISPATCH_LEVEL
)
8725 KeInitializeDeviceQueue(
8726 _Out_ PKDEVICE_QUEUE DeviceQueue
);
8732 _Out_ __drv_aliasesMem PRKDPC Dpc
,
8733 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
8734 _In_opt_ __drv_aliasesMem PVOID DeferredContext
);
8740 _Out_ PRKMUTEX Mutex
,
8743 _IRQL_requires_max_(PASSIVE_LEVEL
)
8747 KeInitializeSemaphore(
8748 _Out_ PRKSEMAPHORE Semaphore
,
8752 _IRQL_requires_max_(DISPATCH_LEVEL
)
8757 _Out_ PKTIMER Timer
);
8759 _IRQL_requires_max_(DISPATCH_LEVEL
)
8763 KeInitializeTimerEx(
8764 _Out_ PKTIMER Timer
,
8765 _In_ TIMER_TYPE Type
);
8767 _IRQL_requires_(DISPATCH_LEVEL
)
8771 KeInsertByKeyDeviceQueue(
8772 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
8773 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
8774 _In_ ULONG SortKey
);
8776 _IRQL_requires_(DISPATCH_LEVEL
)
8780 KeInsertDeviceQueue(
8781 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
8782 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8789 _In_opt_ PVOID SystemArgument1
,
8790 _In_opt_ PVOID SystemArgument2
);
8792 _Releases_lock_(_Global_critical_region_
)
8793 _IRQL_requires_max_(APC_LEVEL
)
8797 KeLeaveCriticalRegion(VOID
);
8802 KeQueryPerformanceCounter(
8803 _Out_opt_ PLARGE_INTEGER PerformanceFrequency
);
8805 _IRQL_requires_max_(PASSIVE_LEVEL
)
8809 KeQueryPriorityThread(
8810 _In_ PRKTHREAD Thread
);
8815 KeQueryTimeIncrement(VOID
);
8817 _IRQL_requires_max_(DISPATCH_LEVEL
)
8822 _In_ PRKEVENT Event
);
8824 _IRQL_requires_max_(DISPATCH_LEVEL
)
8829 _In_ PRKMUTEX Mutex
);
8831 _IRQL_requires_max_(DISPATCH_LEVEL
)
8835 KeReadStateSemaphore(
8836 _In_ PRKSEMAPHORE Semaphore
);
8838 _IRQL_requires_max_(DISPATCH_LEVEL
)
8843 _In_ PKTIMER Timer
);
8845 _Must_inspect_result_
8849 KeRegisterBugCheckCallback(
8850 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
8851 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
8852 _In_reads_bytes_opt_(Length
) PVOID Buffer
,
8854 _In_ PUCHAR Component
);
8856 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
8857 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
8862 _Inout_ PRKMUTEX Mutex
,
8865 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
8866 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
8871 _Inout_ PRKSEMAPHORE Semaphore
,
8872 _In_ KPRIORITY Increment
,
8873 _In_ LONG Adjustment
,
8874 _In_ _Literal_ BOOLEAN Wait
);
8876 _IRQL_requires_(DISPATCH_LEVEL
)
8878 PKDEVICE_QUEUE_ENTRY
8880 KeRemoveByKeyDeviceQueue(
8881 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
8882 _In_ ULONG SortKey
);
8884 _IRQL_requires_(DISPATCH_LEVEL
)
8886 PKDEVICE_QUEUE_ENTRY
8888 KeRemoveDeviceQueue(
8889 _Inout_ PKDEVICE_QUEUE DeviceQueue
);
8891 _IRQL_requires_max_(DISPATCH_LEVEL
)
8895 KeRemoveEntryDeviceQueue(
8896 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
8897 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8899 _IRQL_requires_max_(HIGH_LEVEL
)
8904 _Inout_ PRKDPC Dpc
);
8906 _IRQL_requires_max_(DISPATCH_LEVEL
)
8911 _Inout_ PRKEVENT Event
);
8913 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
8914 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
8919 _Inout_ PRKEVENT Event
,
8920 _In_ KPRIORITY Increment
,
8921 _In_ _Literal_ BOOLEAN Wait
);
8928 _In_ KDPC_IMPORTANCE Importance
);
8930 _IRQL_requires_min_(PASSIVE_LEVEL
)
8931 _IRQL_requires_max_(DISPATCH_LEVEL
)
8935 KeSetPriorityThread(
8936 _Inout_ PKTHREAD Thread
,
8937 _In_ KPRIORITY Priority
);
8939 _IRQL_requires_max_(DISPATCH_LEVEL
)
8944 _Inout_ PKTIMER Timer
,
8945 _In_ LARGE_INTEGER DueTime
,
8946 _In_opt_ PKDPC Dpc
);
8948 _IRQL_requires_max_(DISPATCH_LEVEL
)
8953 _Inout_ PKTIMER Timer
,
8954 _In_ LARGE_INTEGER DueTime
,
8955 _In_ LONG Period OPTIONAL
,
8956 _In_opt_ PKDPC Dpc
);
8961 KeStallExecutionProcessor(
8962 _In_ ULONG MicroSeconds
);
8964 _IRQL_requires_max_(HIGH_LEVEL
)
8968 KeSynchronizeExecution(
8969 _Inout_ PKINTERRUPT Interrupt
,
8970 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
8971 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
);
8973 _IRQL_requires_min_(PASSIVE_LEVEL
)
8974 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
8975 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
8979 KeWaitForMultipleObjects(
8981 _In_reads_(Count
) PVOID Object
[],
8982 _In_
__drv_strictTypeMatch(__drv_typeConst
) WAIT_TYPE WaitType
,
8983 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
8984 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
8985 _In_ BOOLEAN Alertable
,
8986 _In_opt_ PLARGE_INTEGER Timeout
,
8987 _Out_opt_ PKWAIT_BLOCK WaitBlockArray
);
8989 #define KeWaitForMutexObject KeWaitForSingleObject
8991 _IRQL_requires_min_(PASSIVE_LEVEL
)
8992 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
8993 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
8997 KeWaitForSingleObject(
8998 _In_ _Points_to_data_ PVOID Object
,
8999 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
9000 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
9001 _In_ BOOLEAN Alertable
,
9002 _In_opt_ PLARGE_INTEGER Timeout
);
9004 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9006 #if (NTDDI_VERSION >= NTDDI_WINXP)
9008 _Requires_lock_not_held_(*LockHandle
)
9009 _Acquires_lock_(*LockHandle
)
9010 _Post_same_lock_(*SpinLock
, *LockHandle
)
9011 _IRQL_requires_max_(DISPATCH_LEVEL
)
9012 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9013 _IRQL_raises_(DISPATCH_LEVEL
)
9017 KeAcquireInStackQueuedSpinLock(
9018 _Inout_ PKSPIN_LOCK SpinLock
,
9019 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9021 _Requires_lock_not_held_(*LockHandle
)
9022 _Acquires_lock_(*LockHandle
)
9023 _Post_same_lock_(*SpinLock
, *LockHandle
)
9024 _IRQL_requires_min_(DISPATCH_LEVEL
)
9028 KeAcquireInStackQueuedSpinLockAtDpcLevel(
9029 _Inout_ PKSPIN_LOCK SpinLock
,
9030 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9032 _Requires_lock_not_held_(*Interrupt
->ActualLock
)
9033 _Acquires_lock_(*Interrupt
->ActualLock
)
9034 _IRQL_requires_max_(HIGH_LEVEL
)
9036 _IRQL_raises_(HIGH_LEVEL
)
9040 KeAcquireInterruptSpinLock(
9041 _Inout_ PKINTERRUPT Interrupt
);
9043 _IRQL_requires_min_(PASSIVE_LEVEL
)
9044 _IRQL_requires_max_(DISPATCH_LEVEL
)
9048 KeAreApcsDisabled(VOID
);
9053 KeGetRecommendedSharedDataAlignment(VOID
);
9055 _IRQL_requires_max_(PASSIVE_LEVEL
)
9059 KeQueryRuntimeThread(
9060 _In_ PKTHREAD Thread
,
9061 _Out_ PULONG UserTime
);
9063 _Requires_lock_held_(*LockHandle
)
9064 _Releases_lock_(*LockHandle
)
9065 _IRQL_requires_(DISPATCH_LEVEL
)
9069 KeReleaseInStackQueuedSpinLockFromDpcLevel(
9070 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9072 _Requires_lock_held_(*Interrupt
->ActualLock
)
9073 _Releases_lock_(*Interrupt
->ActualLock
)
9074 _IRQL_requires_(HIGH_LEVEL
)
9078 KeReleaseInterruptSpinLock(
9079 _Inout_ PKINTERRUPT Interrupt
,
9080 _In_ _IRQL_restores_ KIRQL OldIrql
);
9082 _IRQL_requires_(DISPATCH_LEVEL
)
9084 PKDEVICE_QUEUE_ENTRY
9086 KeRemoveByKeyDeviceQueueIfBusy(
9087 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9088 _In_ ULONG SortKey
);
9090 _Requires_lock_held_(*LockHandle
)
9091 _Releases_lock_(*LockHandle
)
9092 _IRQL_requires_(DISPATCH_LEVEL
)
9093 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9097 KeReleaseInStackQueuedSpinLock(
9098 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9100 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9102 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
9104 _Must_inspect_result_
9108 KeDeregisterBugCheckReasonCallback(
9109 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
9111 _Must_inspect_result_
9115 KeRegisterBugCheckReasonCallback(
9116 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
9117 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
9118 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
9119 _In_ PUCHAR Component
);
9121 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
9123 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
9124 _IRQL_requires_max_(APC_LEVEL
)
9128 KeFlushQueuedDpcs(VOID
);
9129 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
9130 #if (NTDDI_VERSION >= NTDDI_WS03)
9132 _IRQL_requires_max_(APC_LEVEL
)
9136 KeRegisterNmiCallback(
9137 _In_ PNMI_CALLBACK CallbackRoutine
,
9138 _In_opt_ PVOID Context
);
9140 _IRQL_requires_max_(APC_LEVEL
)
9144 KeDeregisterNmiCallback(
9150 KeInitializeThreadedDpc(
9152 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
9153 _In_opt_ PVOID DeferredContext
);
9155 _IRQL_requires_min_(PASSIVE_LEVEL
)
9156 _IRQL_requires_max_(IPI_LEVEL
-1)
9161 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction
,
9162 _In_ ULONG_PTR Context
);
9164 _Requires_lock_not_held_(*SpinLock
)
9165 _Acquires_lock_(*SpinLock
)
9166 _IRQL_requires_max_(DISPATCH_LEVEL
)
9171 KeAcquireSpinLockForDpc(
9172 _Inout_ PKSPIN_LOCK SpinLock
);
9174 _Requires_lock_held_(*SpinLock
)
9175 _Releases_lock_(*SpinLock
)
9176 _IRQL_requires_(DISPATCH_LEVEL
)
9180 KeReleaseSpinLockForDpc(
9181 _Inout_ PKSPIN_LOCK SpinLock
,
9182 _In_ _IRQL_restores_ KIRQL OldIrql
);
9184 _Must_inspect_result_
9189 _In_ PKSPIN_LOCK SpinLock
);
9191 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
9192 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
9194 _Must_inspect_result_
9195 _IRQL_requires_min_(DISPATCH_LEVEL
)
9196 _Post_satisfies_(return == 1 || return == 0)
9200 KeTryToAcquireSpinLockAtDpcLevel(
9201 _Inout_
_Requires_lock_not_held_(*_Curr_
)
9202 _When_(return!=0, _Acquires_lock_(*_Curr_
))
9203 PKSPIN_LOCK SpinLock
);
9205 _IRQL_requires_min_(PASSIVE_LEVEL
)
9206 _IRQL_requires_max_(DISPATCH_LEVEL
)
9210 KeAreAllApcsDisabled(VOID
);
9212 _Acquires_lock_(_Global_critical_region_
)
9213 _Requires_lock_not_held_(*Mutex
)
9214 _Acquires_lock_(*Mutex
)
9215 _IRQL_requires_max_(APC_LEVEL
)
9216 _IRQL_requires_min_(PASSIVE_LEVEL
)
9220 KeAcquireGuardedMutex(
9221 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9223 _Requires_lock_not_held_(*FastMutex
)
9224 _Acquires_lock_(*FastMutex
)
9225 _IRQL_requires_max_(APC_LEVEL
)
9226 _IRQL_requires_min_(PASSIVE_LEVEL
)
9230 KeAcquireGuardedMutexUnsafe(
9231 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9233 _Acquires_lock_(_Global_critical_region_
)
9234 _IRQL_requires_max_(APC_LEVEL
)
9238 KeEnterGuardedRegion(VOID
);
9240 _Releases_lock_(_Global_critical_region_
)
9241 _IRQL_requires_max_(APC_LEVEL
)
9245 KeLeaveGuardedRegion(VOID
);
9247 _IRQL_requires_max_(APC_LEVEL
)
9248 _IRQL_requires_min_(PASSIVE_LEVEL
)
9252 KeInitializeGuardedMutex(
9253 _Out_ PKGUARDED_MUTEX GuardedMutex
);
9255 _Requires_lock_held_(*FastMutex
)
9256 _Releases_lock_(*FastMutex
)
9257 _IRQL_requires_max_(APC_LEVEL
)
9261 KeReleaseGuardedMutexUnsafe(
9262 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9264 _Releases_lock_(_Global_critical_region_
)
9265 _Requires_lock_held_(*Mutex
)
9266 _Releases_lock_(*Mutex
)
9267 _IRQL_requires_max_(APC_LEVEL
)
9271 KeReleaseGuardedMutex(
9272 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9274 _Must_inspect_result_
9275 _Success_(return != FALSE
)
9276 _IRQL_requires_max_(APC_LEVEL
)
9277 _Post_satisfies_(return == 1 || return == 0)
9281 KeTryToAcquireGuardedMutex(
9282 _When_ (return, _Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)) _Acquires_lock_(_Global_critical_region_
)
9283 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9284 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
9286 #if (NTDDI_VERSION >= NTDDI_VISTA)
9287 _Requires_lock_not_held_(*LockHandle
)
9288 _Acquires_lock_(*LockHandle
)
9289 _Post_same_lock_(*SpinLock
, *LockHandle
)
9290 _IRQL_requires_max_(DISPATCH_LEVEL
)
9291 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9295 KeAcquireInStackQueuedSpinLockForDpc(
9296 _Inout_ PKSPIN_LOCK SpinLock
,
9297 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9299 _Requires_lock_held_(*LockHandle
)
9300 _Releases_lock_(*LockHandle
)
9301 _IRQL_requires_(DISPATCH_LEVEL
)
9302 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9306 KeReleaseInStackQueuedSpinLockForDpc(
9307 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9309 _IRQL_requires_(DISPATCH_LEVEL
)
9313 KeQueryDpcWatchdogInformation(
9314 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
9315 #if defined(SINGLE_GROUP_LEGACY_API)
9317 _IRQL_requires_min_(PASSIVE_LEVEL
)
9318 _IRQL_requires_max_(APC_LEVEL
)
9322 KeSetSystemAffinityThreadEx(
9323 _In_ KAFFINITY Affinity
);
9325 _IRQL_requires_min_(PASSIVE_LEVEL
)
9326 _IRQL_requires_max_(APC_LEVEL
)
9330 KeRevertToUserAffinityThreadEx(
9331 _In_ KAFFINITY Affinity
);
9336 KeQueryActiveProcessorCount(
9337 _Out_opt_ PKAFFINITY ActiveProcessors
);
9342 KeQueryMaximumProcessorCount(VOID
);
9343 #endif /* SINGLE_GROUP_LEGACY_API */
9345 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9347 #if (NTDDI_VERSION >= NTDDI_WS08)
9349 _IRQL_requires_max_(APC_LEVEL
)
9352 KeRegisterProcessorChangeCallback(
9353 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
9354 _In_opt_ PVOID CallbackContext
,
9357 _IRQL_requires_max_(APC_LEVEL
)
9360 KeDeregisterProcessorChangeCallback(
9361 _In_ PVOID CallbackHandle
);
9363 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
9364 #if (NTDDI_VERSION >= NTDDI_WIN7)
9366 _IRQL_requires_max_(DISPATCH_LEVEL
)
9367 _IRQL_requires_min_(PASSIVE_LEVEL
)
9368 _IRQL_requires_same_
9371 KeQueryTotalCycleTimeProcess(
9372 _Inout_ PKPROCESS Process
,
9373 _Out_ PULONG64 CycleTimeStamp
);
9375 _IRQL_requires_max_(APC_LEVEL
)
9376 _IRQL_requires_min_(PASSIVE_LEVEL
)
9377 _IRQL_requires_same_
9380 KeQueryTotalCycleTimeThread(
9381 _Inout_ PKTHREAD Thread
,
9382 _Out_ PULONG64 CycleTimeStamp
);
9384 _Must_inspect_result_
9388 KeSetTargetProcessorDpcEx(
9390 _In_ PPROCESSOR_NUMBER ProcNumber
);
9392 _IRQL_requires_min_(PASSIVE_LEVEL
)
9393 _IRQL_requires_max_(APC_LEVEL
)
9397 KeSetSystemGroupAffinityThread(
9398 _In_ PGROUP_AFFINITY Affinity
,
9399 _Out_opt_ PGROUP_AFFINITY PreviousAffinity
);
9401 _IRQL_requires_min_(PASSIVE_LEVEL
)
9402 _IRQL_requires_max_(APC_LEVEL
)
9406 KeRevertToUserGroupAffinityThread(
9407 _In_ PGROUP_AFFINITY PreviousAffinity
);
9409 _IRQL_requires_max_(DISPATCH_LEVEL
)
9413 KeSetCoalescableTimer(
9414 _Inout_ PKTIMER Timer
,
9415 _In_ LARGE_INTEGER DueTime
,
9417 _In_ ULONG TolerableDelay
,
9418 _In_opt_ PKDPC Dpc
);
9423 KeQueryUnbiasedInterruptTime(VOID
);
9428 KeQueryActiveProcessorCountEx(
9429 _In_ USHORT GroupNumber
);
9434 KeQueryMaximumProcessorCountEx(
9435 _In_ USHORT GroupNumber
);
9440 KeQueryActiveGroupCount(VOID
);
9445 KeQueryMaximumGroupCount(VOID
);
9450 KeQueryGroupAffinity(
9451 _In_ USHORT GroupNumber
);
9456 KeGetCurrentProcessorNumberEx(
9457 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
9462 KeQueryNodeActiveAffinity(
9463 _In_ USHORT NodeNumber
,
9464 _Out_opt_ PGROUP_AFFINITY Affinity
,
9465 _Out_opt_ PUSHORT Count
);
9470 KeQueryNodeMaximumProcessorCount(
9471 _In_ USHORT NodeNumber
);
9476 KeQueryHighestNodeNumber(VOID
);
9481 KeGetCurrentNodeNumber(VOID
);
9483 _IRQL_requires_max_(DISPATCH_LEVEL
)
9487 KeQueryLogicalProcessorRelationship(
9488 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
9489 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
9490 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
9491 _Inout_ PULONG Length
);
9493 _Must_inspect_result_
9494 _IRQL_requires_max_(DISPATCH_LEVEL
)
9496 _When_(return==0, _Kernel_float_saved_
)
9500 KeSaveExtendedProcessorState(
9502 _Out_
_Requires_lock_not_held_(*_Curr_
)
9503 _When_(return==0, _Acquires_lock_(*_Curr_
))
9504 PXSTATE_SAVE XStateSave
);
9506 _Kernel_float_restored_
9510 KeRestoreExtendedProcessorState(
9511 _In_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
9512 PXSTATE_SAVE XStateSave
);
9516 KeGetProcessorNumberFromIndex(
9517 _In_ ULONG ProcIndex
,
9518 _Out_ PPROCESSOR_NUMBER ProcNumber
);
9522 KeGetProcessorIndexFromNumber(
9523 _In_ PPROCESSOR_NUMBER ProcNumber
);
9524 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9525 #if !defined(_IA64_)
9529 KeFlushWriteBuffer(VOID
);
9533 * KeInitializeCallbackRecord(
9534 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
9536 #define KeInitializeCallbackRecord(CallbackRecord) \
9537 CallbackRecord->State = BufferEmpty;
9539 #if defined(_PREFAST_)
9541 void __PREfastPagedCode(void);
9542 void __PREfastPagedCodeLocked(void);
9543 #define PAGED_CODE() __PREfastPagedCode();
9544 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked();
9548 #if (NTDDI_VERSION >= NTDDI_VISTA)
9549 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
9551 #define PAGED_ASSERT( exp ) ASSERT( exp )
9554 #define PAGED_CODE() { \
9555 if (KeGetCurrentIrql() > APC_LEVEL) { \
9556 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
9557 PAGED_ASSERT(FALSE); \
9561 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
9565 #define PAGED_CODE() NOP_FUNCTION;
9566 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
9570 /******************************************************************************
9571 * Runtime Library Functions *
9572 ******************************************************************************/
9575 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
9577 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
9582 _Out_ PLIST_ENTRY ListHead
)
9584 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
9587 _Must_inspect_result_
9591 _In_
const LIST_ENTRY
* ListHead
)
9593 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
9599 _In_ PLIST_ENTRY Entry
)
9601 PLIST_ENTRY OldFlink
;
9602 PLIST_ENTRY OldBlink
;
9604 OldFlink
= Entry
->Flink
;
9605 OldBlink
= Entry
->Blink
;
9606 OldFlink
->Blink
= OldBlink
;
9607 OldBlink
->Flink
= OldFlink
;
9608 return (BOOLEAN
)(OldFlink
== OldBlink
);
9614 _Inout_ PLIST_ENTRY ListHead
)
9619 Entry
= ListHead
->Flink
;
9620 Flink
= Entry
->Flink
;
9621 ListHead
->Flink
= Flink
;
9622 Flink
->Blink
= ListHead
;
9629 _Inout_ PLIST_ENTRY ListHead
)
9634 Entry
= ListHead
->Blink
;
9635 Blink
= Entry
->Blink
;
9636 ListHead
->Blink
= Blink
;
9637 Blink
->Flink
= ListHead
;
9644 _Inout_ PLIST_ENTRY ListHead
,
9645 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
9647 PLIST_ENTRY OldBlink
;
9648 OldBlink
= ListHead
->Blink
;
9649 Entry
->Flink
= ListHead
;
9650 Entry
->Blink
= OldBlink
;
9651 OldBlink
->Flink
= Entry
;
9652 ListHead
->Blink
= Entry
;
9658 _Inout_ PLIST_ENTRY ListHead
,
9659 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
9661 PLIST_ENTRY OldFlink
;
9662 OldFlink
= ListHead
->Flink
;
9663 Entry
->Flink
= OldFlink
;
9664 Entry
->Blink
= ListHead
;
9665 OldFlink
->Blink
= Entry
;
9666 ListHead
->Flink
= Entry
;
9672 _Inout_ PLIST_ENTRY ListHead
,
9673 _Inout_ PLIST_ENTRY ListToAppend
)
9675 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
9677 ListHead
->Blink
->Flink
= ListToAppend
;
9678 ListHead
->Blink
= ListToAppend
->Blink
;
9679 ListToAppend
->Blink
->Flink
= ListHead
;
9680 ListToAppend
->Blink
= ListEnd
;
9686 _Inout_ PSINGLE_LIST_ENTRY ListHead
)
9688 PSINGLE_LIST_ENTRY FirstEntry
;
9689 FirstEntry
= ListHead
->Next
;
9690 if (FirstEntry
!= NULL
) {
9691 ListHead
->Next
= FirstEntry
->Next
;
9699 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
9700 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry
)
9702 Entry
->Next
= ListHead
->Next
;
9703 ListHead
->Next
= Entry
;
9706 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
9713 _In_ PVOID FailedAssertion
,
9714 _In_ PVOID FileName
,
9715 _In_ ULONG LineNumber
,
9716 _In_opt_z_ PSTR Message
);
9720 * IN VOID UNALIGNED *Destination,
9721 * IN CONST VOID UNALIGNED *Source,
9724 #define RtlCopyMemory(Destination, Source, Length) \
9725 memcpy(Destination, Source, Length)
9727 #define RtlCopyBytes RtlCopyMemory
9729 #if defined(_M_AMD64)
9733 RtlCopyMemoryNonTemporal(
9734 _Out_writes_bytes_all_(Length
) VOID UNALIGNED
*Destination
,
9735 _In_reads_bytes_(Length
) const VOID UNALIGNED
*Source
,
9736 _In_ SIZE_T Length
);
9738 #define RtlCopyMemoryNonTemporal RtlCopyMemory
9746 #define RtlEqualLuid(Luid1, Luid2) \
9747 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
9751 * IN VOID UNALIGNED *Destination,
9752 * IN CONST VOID UNALIGNED *Source,
9755 #define RtlEqualMemory(Destination, Source, Length) \
9756 (!memcmp(Destination, Source, Length))
9760 * IN VOID UNALIGNED *Destination,
9764 #define RtlFillMemory(Destination, Length, Fill) \
9765 memset(Destination, Fill, Length)
9767 #define RtlFillBytes RtlFillMemory
9769 _IRQL_requires_max_(PASSIVE_LEVEL
)
9773 RtlFreeUnicodeString(
9774 _Inout_
_At_(UnicodeString
->Buffer
, __drv_freesMem(Mem
))
9775 PUNICODE_STRING UnicodeString
);
9777 _IRQL_requires_max_(PASSIVE_LEVEL
)
9778 _Must_inspect_result_
9783 _In_ PUNICODE_STRING GuidString
,
9786 _IRQL_requires_max_(DISPATCH_LEVEL
)
9787 _At_(DestinationString
->Buffer
, _Post_equal_to_(SourceString
))
9788 _When_(SourceString
!= NULL
,
9789 _At_(DestinationString
->Length
, _Post_equal_to_(_String_length_(SourceString
) * sizeof(WCHAR
)))
9790 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(DestinationString
->Length
+ sizeof(WCHAR
))))
9791 _When_(SourceString
== NULL
,
9792 _At_(DestinationString
->Length
, _Post_equal_to_(0))
9793 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(0)))
9797 RtlInitUnicodeString(
9798 _Out_ PUNICODE_STRING DestinationString
,
9799 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
);
9803 * IN VOID UNALIGNED *Destination,
9804 * IN CONST VOID UNALIGNED *Source,
9807 #define RtlMoveMemory(Destination, Source, Length) \
9808 memmove(Destination, Source, Length)
9810 _IRQL_requires_max_(PASSIVE_LEVEL
)
9811 _Must_inspect_result_
9817 _Out_
_At_(GuidString
->Buffer
, __drv_allocatesMem(Mem
))
9818 PUNICODE_STRING GuidString
);
9822 * IN VOID UNALIGNED *Destination,
9825 #define RtlZeroMemory(Destination, Length) \
9826 memset(Destination, 0, Length)
9828 #define RtlZeroBytes RtlZeroMemory
9830 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9832 _Must_inspect_result_
9837 _In_ PRTL_BITMAP BitMapHeader
,
9838 _In_ ULONG StartingIndex
,
9841 _Must_inspect_result_
9846 _In_ PRTL_BITMAP BitMapHeader
,
9847 _In_ ULONG StartingIndex
,
9850 _IRQL_requires_max_(PASSIVE_LEVEL
)
9851 _Must_inspect_result_
9855 RtlAnsiStringToUnicodeString(
9856 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
9857 _When_(!AllocateDestinationString
, _Inout_
)
9858 PUNICODE_STRING DestinationString
,
9859 _In_ PANSI_STRING SourceString
,
9860 _In_ BOOLEAN AllocateDestinationString
);
9862 _IRQL_requires_max_(PASSIVE_LEVEL
)
9866 RtlxAnsiStringToUnicodeSize(
9867 _In_ PCANSI_STRING AnsiString
);
9869 #define RtlAnsiStringToUnicodeSize(String) ( \
9870 NLS_MB_CODE_PAGE_TAG ? \
9871 RtlxAnsiStringToUnicodeSize(String) : \
9872 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
9876 _Unchanged_(Destination
->MaximumLength
)
9877 _Unchanged_(Destination
->Buffer
)
9878 _When_(_Old_(Destination
->Length
) + Source
->Length
<= Destination
->MaximumLength
,
9879 _At_(Destination
->Length
, _Post_equal_to_(_Old_(Destination
->Length
) + Source
->Length
))
9880 _At_(return, _Out_range_(==, 0)))
9881 _When_(_Old_(Destination
->Length
) + Source
->Length
> Destination
->MaximumLength
,
9882 _Unchanged_(Destination
->Length
)
9883 _At_(return, _Out_range_(<, 0)))
9887 RtlAppendUnicodeStringToString(
9888 _Inout_ PUNICODE_STRING Destination
,
9889 _In_ PCUNICODE_STRING Source
);
9892 _Unchanged_(Destination
->MaximumLength
)
9893 _Unchanged_(Destination
->Buffer
)
9894 /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
9895 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
9896 _At_(return, _Out_range_(==, 0)))
9897 _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
9898 _Unchanged_(Destination->Length)
9899 _At_(return, _Out_range_(<, 0))) */
9903 RtlAppendUnicodeToString(
9904 _Inout_ PUNICODE_STRING Destination
,
9905 _In_opt_z_ PCWSTR Source
);
9907 _IRQL_requires_max_(PASSIVE_LEVEL
)
9908 _Must_inspect_result_
9912 RtlCheckRegistryKey(
9913 _In_ ULONG RelativeTo
,
9920 _In_ PRTL_BITMAP BitMapHeader
);
9926 _In_ PRTL_BITMAP BitMapHeader
,
9927 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToClear
) ULONG StartingIndex
,
9928 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToClear
);
9930 _Must_inspect_result_
9935 _In_
const VOID
*Source1
,
9936 _In_
const VOID
*Source2
,
9937 _In_ SIZE_T Length
);
9939 _IRQL_requires_max_(PASSIVE_LEVEL
)
9940 _Must_inspect_result_
9944 RtlCompareUnicodeString(
9945 _In_ PCUNICODE_STRING String1
,
9946 _In_ PCUNICODE_STRING String2
,
9947 _In_ BOOLEAN CaseInSensitive
);
9949 _IRQL_requires_max_(PASSIVE_LEVEL
)
9950 _Must_inspect_result_
9954 RtlCompareUnicodeStrings(
9955 _In_reads_(String1Length
) PCWCH String1
,
9956 _In_ SIZE_T String1Length
,
9957 _In_reads_(String2Length
) PCWCH String2
,
9958 _In_ SIZE_T String2Length
,
9959 _In_ BOOLEAN CaseInSensitive
);
9961 _Unchanged_(DestinationString
->Buffer
)
9962 _Unchanged_(DestinationString
->MaximumLength
)
9963 _At_(DestinationString
->Length
,
9964 _When_(SourceString
->Length
> DestinationString
->MaximumLength
,
9965 _Post_equal_to_(DestinationString
->MaximumLength
))
9966 _When_(SourceString
->Length
<= DestinationString
->MaximumLength
,
9967 _Post_equal_to_(SourceString
->Length
)))
9971 RtlCopyUnicodeString(
9972 _Inout_ PUNICODE_STRING DestinationString
,
9973 _In_opt_ PCUNICODE_STRING SourceString
);
9975 _IRQL_requires_max_(PASSIVE_LEVEL
)
9979 RtlCreateRegistryKey(
9980 _In_ ULONG RelativeTo
,
9983 _IRQL_requires_max_(APC_LEVEL
)
9987 RtlCreateSecurityDescriptor(
9988 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
9989 _In_ ULONG Revision
);
9991 _IRQL_requires_max_(PASSIVE_LEVEL
)
9995 RtlDeleteRegistryValue(
9996 _In_ ULONG RelativeTo
,
9998 _In_z_ PCWSTR ValueName
);
10000 _IRQL_requires_max_(PASSIVE_LEVEL
)
10001 _Must_inspect_result_
10005 RtlEqualUnicodeString(
10006 _In_ CONST UNICODE_STRING
*String1
,
10007 _In_ CONST UNICODE_STRING
*String2
,
10008 _In_ BOOLEAN CaseInSensitive
);
10010 #if !defined(_AMD64_) && !defined(_IA64_)
10014 RtlExtendedIntegerMultiply(
10015 _In_ LARGE_INTEGER Multiplicand
,
10016 _In_ LONG Multiplier
);
10021 RtlExtendedLargeIntegerDivide(
10022 _In_ LARGE_INTEGER Dividend
,
10023 _In_ ULONG Divisor
,
10024 _Out_opt_ PULONG Remainder
);
10027 #if defined(_X86_) || defined(_IA64_)
10031 RtlExtendedMagicDivide(
10032 _In_ LARGE_INTEGER Dividend
,
10033 _In_ LARGE_INTEGER MagicDivisor
,
10034 _In_ CCHAR ShiftCount
);
10037 _IRQL_requires_max_(PASSIVE_LEVEL
)
10042 _Inout_
_At_(AnsiString
->Buffer
, __drv_freesMem(Mem
))
10043 PANSI_STRING AnsiString
);
10045 _Success_(return != -1)
10046 _Must_inspect_result_
10051 _In_ PRTL_BITMAP BitMapHeader
,
10052 _In_ ULONG NumberToFind
,
10053 _In_ ULONG HintIndex
);
10055 _Success_(return != -1)
10059 RtlFindClearBitsAndSet(
10060 _In_ PRTL_BITMAP BitMapHeader
,
10061 _In_ ULONG NumberToFind
,
10062 _In_ ULONG HintIndex
);
10067 RtlFindFirstRunClear(
10068 _In_ PRTL_BITMAP BitMapHeader
,
10069 _Out_ PULONG StartingIndex
);
10075 _In_ PRTL_BITMAP BitMapHeader
,
10076 _Out_writes_to_(SizeOfRunArray
, return) PRTL_BITMAP_RUN RunArray
,
10077 _In_range_(>, 0) ULONG SizeOfRunArray
,
10078 _In_ BOOLEAN LocateLongestRuns
);
10083 RtlFindLastBackwardRunClear(
10084 _In_ PRTL_BITMAP BitMapHeader
,
10085 _In_ ULONG FromIndex
,
10086 _Out_ PULONG StartingRunIndex
);
10088 _Success_(return != -1)
10089 _Must_inspect_result_
10093 RtlFindLeastSignificantBit(
10094 _In_ ULONGLONG Set
);
10099 RtlFindLongestRunClear(
10100 _In_ PRTL_BITMAP BitMapHeader
,
10101 _Out_ PULONG StartingIndex
);
10103 _Success_(return != -1)
10104 _Must_inspect_result_
10108 RtlFindMostSignificantBit(
10109 _In_ ULONGLONG Set
);
10114 RtlFindNextForwardRunClear(
10115 _In_ PRTL_BITMAP BitMapHeader
,
10116 _In_ ULONG FromIndex
,
10117 _Out_ PULONG StartingRunIndex
);
10119 _Success_(return != -1)
10120 _Must_inspect_result_
10125 _In_ PRTL_BITMAP BitMapHeader
,
10126 _In_ ULONG NumberToFind
,
10127 _In_ ULONG HintIndex
);
10129 _Success_(return != -1)
10133 RtlFindSetBitsAndClear(
10134 _In_ PRTL_BITMAP BitMapHeader
,
10135 _In_ ULONG NumberToFind
,
10136 _In_ ULONG HintIndex
);
10138 _IRQL_requires_max_(DISPATCH_LEVEL
)
10143 _Out_ PANSI_STRING DestinationString
,
10144 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10146 _At_(BitMapHeader
->SizeOfBitMap
, _Post_equal_to_(SizeOfBitMap
))
10147 _At_(BitMapHeader
->Buffer
, _Post_equal_to_(BitMapBuffer
))
10151 RtlInitializeBitMap(
10152 _Out_ PRTL_BITMAP BitMapHeader
,
10153 _In_opt_ __drv_aliasesMem PULONG BitMapBuffer
,
10154 _In_opt_ ULONG SizeOfBitMap
);
10156 _IRQL_requires_max_(DISPATCH_LEVEL
)
10161 _Out_ PSTRING DestinationString
,
10162 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10164 _IRQL_requires_max_(PASSIVE_LEVEL
)
10165 _At_(String
->MaximumLength
, _Const_
)
10169 RtlIntegerToUnicodeString(
10171 _In_opt_ ULONG Base
,
10172 _Inout_ PUNICODE_STRING String
);
10174 _IRQL_requires_max_(PASSIVE_LEVEL
)
10175 _At_(String
->MaximumLength
, _Const_
)
10179 RtlInt64ToUnicodeString(
10180 _In_ ULONGLONG Value
,
10181 _In_opt_ ULONG Base
,
10182 _Inout_ PUNICODE_STRING String
);
10185 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10186 RtlInt64ToUnicodeString(Value, Base, String)
10188 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10189 RtlIntegerToUnicodeString(Value, Base, String)
10196 #define RtlIsZeroLuid(_L1) \
10197 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
10199 _IRQL_requires_max_(APC_LEVEL
)
10203 RtlLengthSecurityDescriptor(
10204 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
10209 RtlNumberOfClearBits(
10210 _In_ PRTL_BITMAP BitMapHeader
);
10215 RtlNumberOfSetBits(
10216 _In_ PRTL_BITMAP BitMapHeader
);
10218 _IRQL_requires_max_(PASSIVE_LEVEL
)
10222 RtlQueryRegistryValues(
10223 _In_ ULONG RelativeTo
,
10225 _Inout_
_At_(*(*QueryTable
).EntryContext
, _Pre_unknown_
)
10226 PRTL_QUERY_REGISTRY_TABLE QueryTable
,
10227 _In_opt_ PVOID Context
,
10228 _In_opt_ PVOID Environment
);
10230 #define SHORT_SIZE (sizeof(USHORT))
10231 #define SHORT_MASK (SHORT_SIZE - 1)
10232 #define LONG_SIZE (sizeof(LONG))
10233 #define LONGLONG_SIZE (sizeof(LONGLONG))
10234 #define LONG_MASK (LONG_SIZE - 1)
10235 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
10236 #define LOWBYTE_MASK 0x00FF
10238 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
10239 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
10240 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
10241 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
10247 _In_ PRTL_BITMAP BitMapHeader
);
10253 _In_ PRTL_BITMAP BitMapHeader
,
10254 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToSet
) ULONG StartingIndex
,
10255 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToSet
);
10257 _IRQL_requires_max_(APC_LEVEL
)
10261 RtlSetDaclSecurityDescriptor(
10262 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
10263 _In_ BOOLEAN DaclPresent
,
10264 _In_opt_ PACL Dacl
,
10265 _In_opt_ BOOLEAN DaclDefaulted
);
10267 #if defined(_AMD64_)
10271 * IN PULONG Address,
10274 #define RtlStoreUlong(Address,Value) \
10275 *(ULONG UNALIGNED *)(Address) = (Value)
10278 * RtlStoreUlonglong(
10279 * IN OUT PULONGLONG Address,
10280 * ULONGLONG Value);
10282 #define RtlStoreUlonglong(Address,Value) \
10283 *(ULONGLONG UNALIGNED *)(Address) = (Value)
10287 * IN PUSHORT Address,
10288 * IN USHORT Value);
10290 #define RtlStoreUshort(Address,Value) \
10291 *(USHORT UNALIGNED *)(Address) = (Value)
10294 * RtlRetrieveUshort(
10295 * PUSHORT DestinationAddress,
10296 * PUSHORT SourceAddress);
10298 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
10299 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
10302 * RtlRetrieveUlong(
10303 * PULONG DestinationAddress,
10304 * PULONG SourceAddress);
10306 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
10307 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
10311 #define RtlStoreUlong(Address,Value) \
10312 if ((ULONG_PTR)(Address) & LONG_MASK) { \
10313 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
10314 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
10315 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
10316 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
10319 *((PULONG)(Address)) = (ULONG) (Value); \
10322 #define RtlStoreUlonglong(Address,Value) \
10323 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
10324 RtlStoreUlong((ULONG_PTR)(Address), \
10325 (ULONGLONG)(Value) & 0xFFFFFFFF); \
10326 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
10327 (ULONGLONG)(Value) >> 32); \
10329 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
10332 #define RtlStoreUshort(Address,Value) \
10333 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
10334 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
10335 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
10338 *((PUSHORT) (Address)) = (USHORT)Value; \
10341 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
10342 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
10344 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
10345 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
10349 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
10352 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
10353 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
10355 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
10356 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
10357 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
10358 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
10362 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
10365 #endif /* defined(_AMD64_) */
10369 * RtlStoreUlongPtr(
10370 * IN OUT PULONG_PTR Address,
10371 * IN ULONG_PTR Value);
10373 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
10375 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
10376 #endif /* _WIN64 */
10378 _Success_(return!=FALSE
)
10379 _Must_inspect_result_
10383 RtlTimeFieldsToTime(
10384 _In_ PTIME_FIELDS TimeFields
,
10385 _Out_ PLARGE_INTEGER Time
);
10390 RtlTimeToTimeFields(
10391 _In_ PLARGE_INTEGER Time
,
10392 _Out_ PTIME_FIELDS TimeFields
);
10398 _In_ ULONG Source
);
10403 RtlUlonglongByteSwap(
10404 _In_ ULONGLONG Source
);
10406 _When_(AllocateDestinationString
,
10407 _At_(DestinationString
->MaximumLength
,
10408 _Out_range_(<=, (SourceString
->MaximumLength
/ sizeof(WCHAR
)))))
10409 _When_(!AllocateDestinationString
,
10410 _At_(DestinationString
->Buffer
, _Const_
)
10411 _At_(DestinationString
->MaximumLength
, _Const_
))
10412 _IRQL_requires_max_(PASSIVE_LEVEL
)
10413 _When_(AllocateDestinationString
, _Must_inspect_result_
)
10417 RtlUnicodeStringToAnsiString(
10418 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
10419 _When_(!AllocateDestinationString
, _Inout_
)
10420 PANSI_STRING DestinationString
,
10421 _In_ PCUNICODE_STRING SourceString
,
10422 _In_ BOOLEAN AllocateDestinationString
);
10424 _IRQL_requires_max_(PASSIVE_LEVEL
)
10428 RtlxUnicodeStringToAnsiSize(
10429 _In_ PCUNICODE_STRING UnicodeString
);
10431 #define RtlUnicodeStringToAnsiSize(String) ( \
10432 NLS_MB_CODE_PAGE_TAG ? \
10433 RtlxUnicodeStringToAnsiSize(String) : \
10434 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
10437 _IRQL_requires_max_(PASSIVE_LEVEL
)
10441 RtlUnicodeStringToInteger(
10442 _In_ PCUNICODE_STRING String
,
10443 _In_opt_ ULONG Base
,
10444 _Out_ PULONG Value
);
10446 _IRQL_requires_max_(PASSIVE_LEVEL
)
10450 RtlUpcaseUnicodeChar(
10451 _In_ WCHAR SourceCharacter
);
10457 _In_ USHORT Source
);
10459 _IRQL_requires_max_(APC_LEVEL
)
10460 _Must_inspect_result_
10464 RtlValidRelativeSecurityDescriptor(
10465 _In_reads_bytes_(SecurityDescriptorLength
) PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
10466 _In_ ULONG SecurityDescriptorLength
,
10467 _In_ SECURITY_INFORMATION RequiredInformation
);
10469 _IRQL_requires_max_(APC_LEVEL
)
10470 _Must_inspect_result_
10474 RtlValidSecurityDescriptor(
10475 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
10477 _IRQL_requires_max_(PASSIVE_LEVEL
)
10483 _At_(lpVersionInformation
->dwOSVersionInfoSize
, _Pre_ _Valid_
)
10484 _When_(lpVersionInformation
->dwOSVersionInfoSize
== sizeof(RTL_OSVERSIONINFOEXW
),
10485 _At_((PRTL_OSVERSIONINFOEXW
)lpVersionInformation
, _Out_
))
10486 PRTL_OSVERSIONINFOW lpVersionInformation
);
10488 _IRQL_requires_max_(PASSIVE_LEVEL
)
10489 _Must_inspect_result_
10493 RtlVerifyVersionInfo(
10494 _In_ PRTL_OSVERSIONINFOEXW VersionInfo
,
10495 _In_ ULONG TypeMask
,
10496 _In_ ULONGLONG ConditionMask
);
10498 _IRQL_requires_max_(PASSIVE_LEVEL
)
10502 RtlWriteRegistryValue(
10503 _In_ ULONG RelativeTo
,
10505 _In_z_ PCWSTR ValueName
,
10506 _In_ ULONG ValueType
,
10507 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
10508 _In_ ULONG ValueLength
);
10511 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10514 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
10518 RtlPrefetchMemoryNonTemporal(
10520 _In_ SIZE_T Length
);
10524 #if (NTDDI_VERSION >= NTDDI_WINXP)
10531 _In_ PRTL_BITMAP BitMapHeader
,
10532 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
10534 _IRQL_requires_max_(PASSIVE_LEVEL
)
10538 RtlDowncaseUnicodeChar(
10539 _In_ WCHAR SourceCharacter
);
10545 _In_ PRTL_BITMAP BitMapHeader
,
10546 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
10548 _Must_inspect_result_
10553 _In_ PRTL_BITMAP BitMapHeader
,
10554 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
10556 _IRQL_requires_max_(PASSIVE_LEVEL
)
10560 RtlHashUnicodeString(
10561 _In_ CONST UNICODE_STRING
*String
,
10562 _In_ BOOLEAN CaseInSensitive
,
10563 _In_ ULONG HashAlgorithm
,
10564 _Out_ PULONG HashValue
);
10568 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10571 #if (NTDDI_VERSION >= NTDDI_VISTA)
10576 RtlNumberOfSetBitsUlongPtr(
10577 _In_ ULONG_PTR Target
);
10582 RtlIoDecodeMemIoResource(
10583 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
10584 _Out_opt_ PULONGLONG Alignment
,
10585 _Out_opt_ PULONGLONG MinimumAddress
,
10586 _Out_opt_ PULONGLONG MaximumAddress
);
10591 RtlIoEncodeMemIoResource(
10592 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
10594 _In_ ULONGLONG Length
,
10595 _In_ ULONGLONG Alignment
,
10596 _In_ ULONGLONG MinimumAddress
,
10597 _In_ ULONGLONG MaximumAddress
);
10602 RtlCmDecodeMemIoResource(
10603 _In_
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
10604 _Out_opt_ PULONGLONG Start
);
10609 RtlFindClosestEncodableLength(
10610 _In_ ULONGLONG SourceLength
,
10611 _Out_ PULONGLONG TargetLength
);
10616 RtlCmEncodeMemIoResource(
10617 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
10619 _In_ ULONGLONG Length
,
10620 _In_ ULONGLONG Start
);
10623 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10625 #if (NTDDI_VERSION >= NTDDI_WIN7)
10627 _IRQL_requires_max_(PASSIVE_LEVEL
)
10628 _Must_inspect_result_
10633 _Out_writes_bytes_to_(UTF8StringMaxByteCount
, *UTF8StringActualByteCount
)
10634 PCHAR UTF8StringDestination
,
10635 _In_ ULONG UTF8StringMaxByteCount
,
10636 _Out_ PULONG UTF8StringActualByteCount
,
10637 _In_reads_bytes_(UnicodeStringByteCount
) PCWCH UnicodeStringSource
,
10638 _In_ ULONG UnicodeStringByteCount
);
10640 _IRQL_requires_max_(PASSIVE_LEVEL
)
10641 _Must_inspect_result_
10646 _Out_writes_bytes_to_(UnicodeStringMaxByteCount
, *UnicodeStringActualByteCount
)
10647 PWSTR UnicodeStringDestination
,
10648 _In_ ULONG UnicodeStringMaxByteCount
,
10649 _Out_ PULONG UnicodeStringActualByteCount
,
10650 _In_reads_bytes_(UTF8StringByteCount
) PCCH UTF8StringSource
,
10651 _In_ ULONG UTF8StringByteCount
);
10656 RtlGetEnabledExtendedFeatures(
10657 IN ULONG64 FeatureMask
);
10660 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
10663 #if !defined(MIDL_PASS)
10664 /* inline funftions */
10665 //DECLSPEC_DEPRECATED_DDK_WINXP
10669 RtlConvertLongToLargeInteger(
10670 _In_ LONG SignedInteger
)
10673 ret
.QuadPart
= SignedInteger
;
10677 //DECLSPEC_DEPRECATED_DDK_WINXP
10681 RtlConvertUlongToLargeInteger(
10682 _In_ ULONG UnsignedInteger
)
10685 ret
.QuadPart
= UnsignedInteger
;
10689 //DECLSPEC_DEPRECATED_DDK_WINXP
10693 RtlLargeIntegerShiftLeft(
10694 _In_ LARGE_INTEGER LargeInteger
,
10695 _In_ CCHAR ShiftCount
)
10697 LARGE_INTEGER Result
;
10699 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
10703 //DECLSPEC_DEPRECATED_DDK_WINXP
10707 RtlLargeIntegerShiftRight(
10708 _In_ LARGE_INTEGER LargeInteger
,
10709 _In_ CCHAR ShiftCount
)
10711 LARGE_INTEGER Result
;
10713 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
10717 //DECLSPEC_DEPRECATED_DDK
10721 RtlEnlargedUnsignedDivide(
10722 _In_ ULARGE_INTEGER Dividend
,
10723 _In_ ULONG Divisor
,
10724 _Out_opt_ PULONG Remainder
)
10727 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
10728 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
10731 //DECLSPEC_DEPRECATED_DDK
10735 RtlLargeIntegerNegate(
10736 _In_ LARGE_INTEGER Subtrahend
)
10738 LARGE_INTEGER Difference
;
10740 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
10744 //DECLSPEC_DEPRECATED_DDK
10748 RtlLargeIntegerSubtract(
10749 _In_ LARGE_INTEGER Minuend
,
10750 _In_ LARGE_INTEGER Subtrahend
)
10752 LARGE_INTEGER Difference
;
10754 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
10758 //DECLSPEC_DEPRECATED_DDK
10762 RtlEnlargedUnsignedMultiply(
10763 _In_ ULONG Multiplicand
,
10764 _In_ ULONG Multiplier
)
10767 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
10771 //DECLSPEC_DEPRECATED_DDK
10775 RtlEnlargedIntegerMultiply(
10776 _In_ LONG Multiplicand
,
10777 _In_ LONG Multiplier
)
10780 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
10784 _At_(AnsiString
->Buffer
, _Post_equal_to_(Buffer
))
10785 _At_(AnsiString
->Length
, _Post_equal_to_(0))
10786 _At_(AnsiString
->MaximumLength
, _Post_equal_to_(BufferSize
))
10789 RtlInitEmptyAnsiString(
10790 _Out_ PANSI_STRING AnsiString
,
10791 _Pre_maybenull_
_Pre_readable_size_(BufferSize
) __drv_aliasesMem PCHAR Buffer
,
10792 _In_ USHORT BufferSize
)
10794 AnsiString
->Length
= 0;
10795 AnsiString
->MaximumLength
= BufferSize
;
10796 AnsiString
->Buffer
= Buffer
;
10799 _At_(UnicodeString
->Buffer
, _Post_equal_to_(Buffer
))
10800 _At_(UnicodeString
->Length
, _Post_equal_to_(0))
10801 _At_(UnicodeString
->MaximumLength
, _Post_equal_to_(BufferSize
))
10804 RtlInitEmptyUnicodeString(
10805 _Out_ PUNICODE_STRING UnicodeString
,
10806 _Writable_bytes_(BufferSize
)
10807 _When_(BufferSize
!= 0, _Notnull_
)
10808 __drv_aliasesMem PWSTR Buffer
,
10809 _In_ USHORT BufferSize
)
10811 UnicodeString
->Length
= 0;
10812 UnicodeString
->MaximumLength
= BufferSize
;
10813 UnicodeString
->Buffer
= Buffer
;
10816 #if defined(_AMD64_) || defined(_IA64_)
10822 RtlExtendedIntegerMultiply(
10823 _In_ LARGE_INTEGER Multiplicand
,
10824 _In_ LONG Multiplier
)
10827 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
10834 RtlExtendedLargeIntegerDivide(
10835 _In_ LARGE_INTEGER Dividend
,
10836 _In_ ULONG Divisor
,
10837 _Out_opt_ PULONG Remainder
)
10840 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
10842 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
10848 #endif /* defined(_AMD64_) || defined(_IA64_) */
10851 #if defined(_AMD64_)
10853 #define MultiplyHigh __mulh
10854 #define UnsignedMultiplyHigh __umulh
10856 //DECLSPEC_DEPRECATED_DDK
10860 RtlExtendedMagicDivide(
10861 _In_ LARGE_INTEGER Dividend
,
10862 _In_ LARGE_INTEGER MagicDivisor
,
10863 _In_ CCHAR ShiftCount
)
10868 Pos
= (Dividend
.QuadPart
>= 0);
10869 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
10870 MagicDivisor
.QuadPart
);
10871 ret64
>>= ShiftCount
;
10872 ret
.QuadPart
= Pos
? ret64
: -(LONG64
)ret64
;
10877 //DECLSPEC_DEPRECATED_DDK
10881 RtlLargeIntegerAdd(
10882 _In_ LARGE_INTEGER Addend1
,
10883 _In_ LARGE_INTEGER Addend2
)
10886 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
10891 * RtlLargeIntegerAnd(
10892 * IN OUT LARGE_INTEGER Result,
10893 * IN LARGE_INTEGER Source,
10894 * IN LARGE_INTEGER Mask);
10896 #define RtlLargeIntegerAnd(Result, Source, Mask) \
10897 Result.QuadPart = Source.QuadPart & Mask.QuadPart
10899 //DECLSPEC_DEPRECATED_DDK
10903 RtlLargeIntegerArithmeticShift(
10904 _In_ LARGE_INTEGER LargeInteger
,
10905 _In_ CCHAR ShiftCount
)
10908 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
10913 * RtlLargeIntegerEqualTo(
10914 * IN LARGE_INTEGER Operand1,
10915 * IN LARGE_INTEGER Operand2);
10917 #define RtlLargeIntegerEqualTo(X,Y) \
10918 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
10922 RtlSecureZeroMemory(
10923 _Out_writes_bytes_all_(Size
) PVOID Pointer
,
10926 volatile char* vptr
= (volatile char*)Pointer
;
10927 #if defined(_M_AMD64)
10928 __stosb((PUCHAR
)vptr
, 0, Size
);
10930 char * endptr
= (char *)vptr
+ Size
;
10931 while (vptr
< endptr
) {
10938 #if defined(_M_AMD64)
10939 _Must_inspect_result_
10943 _In_ PRTL_BITMAP BitMapHeader
,
10944 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitPosition
)
10946 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
10949 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
10950 #endif /* defined(_M_AMD64) */
10952 #define RtlLargeIntegerGreaterThan(X,Y) ( \
10953 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
10954 ((X).HighPart > (Y).HighPart) \
10957 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
10958 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
10959 ((X).HighPart > (Y).HighPart) \
10962 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
10963 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
10966 #define RtlLargeIntegerLessThan(X,Y) ( \
10967 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
10968 ((X).HighPart < (Y).HighPart) \
10971 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
10972 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
10973 ((X).HighPart < (Y).HighPart) \
10976 #define RtlLargeIntegerGreaterThanZero(X) ( \
10977 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
10978 ((X).HighPart > 0 ) \
10981 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
10983 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
10985 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
10987 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
10989 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
10991 #endif /* !defined(MIDL_PASS) */
10993 /* Byte Swap Functions */
10994 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
10995 ((defined(_M_AMD64) || defined(_M_IA64)) \
10996 && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
10998 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
10999 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
11000 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
11006 #define RTL_VERIFY(exp) \
11008 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
11010 #define RTL_VERIFYMSG(msg, exp) \
11012 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
11014 #define RTL_SOFT_VERIFY(exp) \
11016 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
11018 #define RTL_SOFT_VERIFYMSG(msg, exp) \
11020 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
11022 /* The ASSERTs must be cast to void to avoid warnings about unused results.
11023 * We also cannot invoke the VERIFY versions because the indirection messes
11024 * with stringify. */
11025 #define ASSERT(exp) \
11026 ((VOID)((!(exp)) ? \
11027 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE))
11029 #define ASSERTMSG(msg, exp) \
11030 ((VOID)((!(exp)) ? \
11031 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE))
11033 #define RTL_SOFT_ASSERT(exp) \
11034 ((VOID)((!(exp)) ? \
11035 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE))
11037 #define RTL_SOFT_ASSERTMSG(msg, exp) \
11038 ((VOID)((!(exp)) ? \
11039 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE))
11041 #if defined(_MSC_VER)
11042 # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
11043 # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
11045 # define __assert_annotationA(msg) \
11046 DbgPrint("Assertion %s(%d): %s", __FILE__, __LINE__, msg)
11047 # define __assert_annotationW(msg) \
11048 DbgPrint("Assertion %s(%d): %S", __FILE__, __LINE__, msg)
11051 #define NT_VERIFY(exp) \
11053 (__assert_annotationA(#exp), \
11054 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11056 #define NT_VERIFYMSG(msg, exp) \
11058 (__assert_annotationA(msg), \
11059 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11061 #define NT_VERIFYMSGW(msg, exp) \
11063 (__assert_annotationW(msg), \
11064 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11066 /* Can't reuse verify, see above */
11067 #define NT_ASSERT(exp) \
11068 ((VOID)((!(exp)) ? \
11069 (__assert_annotationA(#exp), \
11070 DbgRaiseAssertionFailure(), FALSE) : TRUE))
11072 #define NT_ASSERTMSG(msg, exp) \
11073 ((VOID)((!(exp)) ? \
11074 (__assert_annotationA(msg), \
11075 DbgRaiseAssertionFailure(), FALSE) : TRUE))
11077 #define NT_ASSERTMSGW(msg, exp) \
11078 ((VOID)((!(exp)) ? \
11079 (__assert_annotationW(msg), \
11080 DbgRaiseAssertionFailure(), FALSE) : TRUE))
11084 #define ASSERT(exp) ((VOID) 0)
11085 #define ASSERTMSG(msg, exp) ((VOID) 0)
11087 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
11088 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
11090 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
11091 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11093 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
11094 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11096 #define NT_ASSERT(exp) ((VOID)0)
11097 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
11098 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
11100 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
11101 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
11102 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
11106 #define InitializeListHead32(ListHead) (\
11107 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
11109 #if !defined(_WINBASE_)
11111 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
11115 InitializeSListHead(
11116 _Out_ PSLIST_HEADER SListHead
);
11122 InitializeSListHead(
11123 _Out_ PSLIST_HEADER SListHead
)
11125 #if defined(_IA64_)
11126 ULONG64 FeatureBits
;
11129 #if defined(_WIN64)
11130 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
11131 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
11134 RtlZeroMemory(SListHead
, sizeof(SLIST_HEADER
));
11135 #if defined(_IA64_)
11136 FeatureBits
= __getReg(CV_IA64_CPUID4
);
11137 if ((FeatureBits
& KF_16BYTE_INSTR
) != 0) {
11138 SListHead
->Header16
.HeaderType
= 1;
11139 SListHead
->Header16
.Init
= 1;
11146 #if defined(_WIN64)
11148 #define InterlockedPopEntrySList(Head) \
11149 ExpInterlockedPopEntrySList(Head)
11151 #define InterlockedPushEntrySList(Head, Entry) \
11152 ExpInterlockedPushEntrySList(Head, Entry)
11154 #define InterlockedFlushSList(Head) \
11155 ExpInterlockedFlushSList(Head)
11157 #define QueryDepthSList(Head) \
11158 ExQueryDepthSList(Head)
11160 #else /* !defined(_WIN64) */
11165 InterlockedPopEntrySList(
11166 _Inout_ PSLIST_HEADER ListHead
);
11171 InterlockedPushEntrySList(
11172 _Inout_ PSLIST_HEADER ListHead
,
11173 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
11175 #define InterlockedFlushSList(ListHead) \
11176 ExInterlockedFlushSList(ListHead)
11178 #define QueryDepthSList(Head) \
11179 ExQueryDepthSList(Head)
11181 #endif /* !defined(_WIN64) */
11183 #endif /* !defined(_WINBASE_) */
11185 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
11186 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
11187 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
11188 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
11189 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
11190 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
11191 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
11192 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
11193 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
11194 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
11195 (PCONTEXT_EX)(Context + 1), \
11199 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
11200 _In_ ULONG Version
);
11203 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
11204 _In_ ULONG Version
);
11206 #ifndef RtlIsNtDdiVersionAvailable
11207 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
11210 #ifndef RtlIsServicePackVersionInstalled
11211 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
11214 #define RtlInterlockedSetBits(Flags, Flag) \
11215 InterlockedOr((PLONG)(Flags), Flag)
11217 #define RtlInterlockedAndBits(Flags, Flag) \
11218 InterlockedAnd((PLONG)(Flags), Flag)
11220 #define RtlInterlockedClearBits(Flags, Flag) \
11221 RtlInterlockedAndBits(Flags, ~(Flag))
11223 #define RtlInterlockedXorBits(Flags, Flag) \
11224 InterlockedXor(Flags, Flag)
11226 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
11227 (VOID) RtlInterlockedSetBits(Flags, Flag)
11229 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
11230 (VOID) RtlInterlockedAndBits(Flags, Flag)
11232 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
11233 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
11236 /******************************************************************************
11237 * Memory manager Functions *
11238 ******************************************************************************/
11239 /* Alignment Macros */
11240 #define ALIGN_DOWN_BY(size, align) \
11241 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
11243 #define ALIGN_UP_BY(size, align) \
11244 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
11246 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
11247 ((PVOID)ALIGN_DOWN_BY(ptr, align))
11249 #define ALIGN_UP_POINTER_BY(ptr, align) \
11250 ((PVOID)ALIGN_UP_BY(ptr, align))
11252 #define ALIGN_DOWN(size, type) \
11253 ALIGN_DOWN_BY(size, sizeof(type))
11255 #define ALIGN_UP(size, type) \
11256 ALIGN_UP_BY(size, sizeof(type))
11258 #define ALIGN_DOWN_POINTER(ptr, type) \
11259 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
11261 #define ALIGN_UP_POINTER(ptr, type) \
11262 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
11264 #ifndef FIELD_OFFSET
11265 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
11269 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
11272 #define POOL_TAGGING 1
11275 #define IF_DEBUG if (TRUE)
11277 #define IF_DEBUG if (FALSE)
11284 #define BYTE_OFFSET(Va) \
11285 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
11291 * Note: This needs to be like this to avoid overflows!
11293 #define BYTES_TO_PAGES(Size) \
11294 (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
11300 #define PAGE_ALIGN(Va) \
11301 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
11305 * _In_ ULONG_PTR Size)
11307 #define ROUND_TO_PAGES(Size) \
11308 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
11311 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
11315 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
11316 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
11317 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
11319 #define COMPUTE_PAGES_SPANNED(Va, Size) \
11320 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
11324 * MmGetMdlByteCount(
11327 #define MmGetMdlByteCount(_Mdl) \
11328 ((_Mdl)->ByteCount)
11332 * MmGetMdlByteOffset(
11335 #define MmGetMdlByteOffset(_Mdl) \
11336 ((_Mdl)->ByteOffset)
11338 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
11342 * MmGetMdlPfnArray(
11345 #define MmGetMdlPfnArray(_Mdl) \
11346 ((PPFN_NUMBER) ((_Mdl) + 1))
11350 * MmGetMdlVirtualAddress(
11353 #define MmGetMdlVirtualAddress(_Mdl) \
11354 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
11356 #define MmGetProcedureAddress(Address) (Address)
11357 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
11359 /* PVOID MmGetSystemAddressForMdl(
11362 #define MmGetSystemAddressForMdl(Mdl) \
11363 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
11364 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11365 ((Mdl)->MappedSystemVa) : \
11366 (MmMapLockedPages((Mdl), KernelMode)))
11369 * MmGetSystemAddressForMdlSafe(
11371 * _In_ MM_PAGE_PRIORITY Priority)
11373 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
11374 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
11375 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11376 (_Mdl)->MappedSystemVa : \
11377 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
11378 KernelMode, MmCached, NULL, FALSE, (_Priority)))
11383 * _In_ PMDL MemoryDescriptorList,
11384 * _In_ PVOID BaseVa,
11385 * _In_ SIZE_T Length)
11387 #define MmInitializeMdl(_MemoryDescriptorList, \
11391 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
11392 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
11393 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
11394 (_MemoryDescriptorList)->MdlFlags = 0; \
11395 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
11396 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
11397 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
11402 * MmPrepareMdlForReuse(
11405 #define MmPrepareMdlForReuse(_Mdl) \
11407 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
11408 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
11409 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
11410 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
11411 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
11415 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11416 _Must_inspect_result_
11417 _IRQL_requires_max_(DISPATCH_LEVEL
)
11418 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11422 MmAllocateContiguousMemory(
11423 _In_ SIZE_T NumberOfBytes
,
11424 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
);
11426 _Must_inspect_result_
11427 _IRQL_requires_max_(DISPATCH_LEVEL
)
11428 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11432 MmAllocateContiguousMemorySpecifyCache(
11433 _In_ SIZE_T NumberOfBytes
,
11434 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
11435 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
11436 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
11437 _In_ MEMORY_CACHING_TYPE CacheType
);
11439 _Must_inspect_result_
11440 _IRQL_requires_max_(DISPATCH_LEVEL
)
11444 MmAllocatePagesForMdl(
11445 _In_ PHYSICAL_ADDRESS LowAddress
,
11446 _In_ PHYSICAL_ADDRESS HighAddress
,
11447 _In_ PHYSICAL_ADDRESS SkipBytes
,
11448 _In_ SIZE_T TotalBytes
);
11450 _IRQL_requires_max_(DISPATCH_LEVEL
)
11454 MmBuildMdlForNonPagedPool(
11455 _Inout_ PMDLX MemoryDescriptorList
);
11457 //DECLSPEC_DEPRECATED_DDK
11462 _Out_writes_bytes_opt_ (sizeof (MDL
) + (sizeof (PFN_NUMBER
) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base
, Length
)))
11463 PMDL MemoryDescriptorList
,
11464 _In_reads_bytes_opt_ (Length
) PVOID Base
,
11465 _In_ SIZE_T Length
);
11467 _IRQL_requires_max_(DISPATCH_LEVEL
)
11471 MmFreeContiguousMemory(
11472 _In_ PVOID BaseAddress
);
11474 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11478 MmFreeContiguousMemorySpecifyCache(
11479 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
11480 _In_ SIZE_T NumberOfBytes
,
11481 _In_ MEMORY_CACHING_TYPE CacheType
);
11483 _IRQL_requires_max_(DISPATCH_LEVEL
)
11487 MmFreePagesFromMdl(
11488 _Inout_ PMDLX MemoryDescriptorList
);
11490 _IRQL_requires_max_(PASSIVE_LEVEL
)
11494 MmGetSystemRoutineAddress(
11495 _In_ PUNICODE_STRING SystemRoutineName
);
11500 MmIsDriverVerifying(
11501 _In_
struct _DRIVER_OBJECT
*DriverObject
);
11503 _Must_inspect_result_
11504 _IRQL_requires_max_(APC_LEVEL
)
11508 MmLockPagableDataSection(
11509 _In_ PVOID AddressWithinSection
);
11511 _Must_inspect_result_
11512 _IRQL_requires_max_(DISPATCH_LEVEL
)
11513 _Out_writes_bytes_opt_ (NumberOfBytes
)
11518 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
11519 _In_ SIZE_T NumberOfBytes
,
11520 _In_ MEMORY_CACHING_TYPE CacheType
);
11522 _Must_inspect_result_
11523 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
11524 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
))
11529 _Inout_ PMDL MemoryDescriptorList
,
11530 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
11531 KPROCESSOR_MODE AccessMode
);
11533 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
11534 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
11535 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
) _Post_notnull_
)
11536 _At_(MemoryDescriptorList
->MappedSystemVa
, _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
11537 _Must_inspect_result_
11538 _Success_(return != NULL
)
11542 MmMapLockedPagesSpecifyCache(
11543 _Inout_ PMDLX MemoryDescriptorList
,
11544 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
11545 KPROCESSOR_MODE AccessMode
,
11546 _In_
__drv_strictTypeMatch(__drv_typeCond
) MEMORY_CACHING_TYPE CacheType
,
11547 _In_opt_ PVOID BaseAddress
,
11548 _In_ ULONG BugCheckOnFailure
,
11549 _In_ MM_PAGE_PRIORITY Priority
);
11551 _IRQL_requires_max_(APC_LEVEL
)
11555 MmPageEntireDriver(
11556 _In_ PVOID AddressWithinSection
);
11558 _IRQL_requires_max_(DISPATCH_LEVEL
)
11559 _At_(MemoryDescriptorList
->StartVa
+ MemoryDescriptorList
->ByteOffset
,
11560 _Field_size_bytes_opt_(MemoryDescriptorList
->ByteCount
))
11564 MmProbeAndLockPages(
11565 _Inout_ PMDLX MemoryDescriptorList
,
11566 _In_ KPROCESSOR_MODE AccessMode
,
11567 _In_ LOCK_OPERATION Operation
);
11572 MmQuerySystemSize(VOID
);
11574 _IRQL_requires_max_(APC_LEVEL
)
11578 MmResetDriverPaging(
11579 _In_ PVOID AddressWithinSection
);
11585 _In_reads_bytes_opt_ (Length
) PVOID Base
,
11586 _In_ SIZE_T Length
);
11588 _IRQL_requires_max_(DISPATCH_LEVEL
)
11592 MmUnlockPagableImageSection(
11593 _In_ PVOID ImageSectionHandle
);
11595 _IRQL_requires_max_(DISPATCH_LEVEL
)
11600 _Inout_ PMDLX MemoryDescriptorList
);
11602 _IRQL_requires_max_(DISPATCH_LEVEL
)
11607 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
11608 _In_ SIZE_T NumberOfBytes
);
11610 _IRQL_requires_max_ (APC_LEVEL
)
11614 MmProbeAndLockProcessPages(
11615 _Inout_ PMDL MemoryDescriptorList
,
11616 _In_ PEPROCESS Process
,
11617 _In_ KPROCESSOR_MODE AccessMode
,
11618 _In_ LOCK_OPERATION Operation
);
11620 _IRQL_requires_max_(DISPATCH_LEVEL
)
11624 MmUnmapLockedPages(
11625 _In_ PVOID BaseAddress
,
11626 _Inout_ PMDL MemoryDescriptorList
);
11628 _Must_inspect_result_
11629 _IRQL_requires_max_(DISPATCH_LEVEL
)
11630 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11634 MmAllocateContiguousMemorySpecifyCacheNode(
11635 _In_ SIZE_T NumberOfBytes
,
11636 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
11637 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
11638 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
11639 _In_ MEMORY_CACHING_TYPE CacheType
,
11640 _In_ NODE_REQUIREMENT PreferredNode
);
11642 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11644 #if (NTDDI_VERSION >= NTDDI_WINXP)
11646 _IRQL_requires_max_(DISPATCH_LEVEL
)
11652 _In_ ULONG NumberOfBytes
);
11654 _Must_inspect_result_
11655 _IRQL_requires_max_(APC_LEVEL
)
11656 _When_ (return != NULL
, _Out_writes_bytes_opt_ (NumberOfBytes
))
11660 MmAllocateMappingAddress(
11661 _In_ SIZE_T NumberOfBytes
,
11662 _In_ ULONG PoolTag
);
11664 _IRQL_requires_max_(APC_LEVEL
)
11668 MmFreeMappingAddress(
11669 _In_ PVOID BaseAddress
,
11670 _In_ ULONG PoolTag
);
11672 _IRQL_requires_max_ (APC_LEVEL
)
11676 MmIsVerifierEnabled(
11677 _Out_ PULONG VerifierFlags
);
11679 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
11680 _IRQL_requires_max_(DISPATCH_LEVEL
)
11681 _At_(MemoryDescriptorList
->MappedSystemVa
+ MemoryDescriptorList
->ByteOffset
,
11682 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
11683 _Must_inspect_result_
11684 _Success_(return != NULL
)
11688 MmMapLockedPagesWithReservedMapping(
11689 _In_ PVOID MappingAddress
,
11690 _In_ ULONG PoolTag
,
11691 _Inout_ PMDLX MemoryDescriptorList
,
11692 _In_
__drv_strictTypeMatch(__drv_typeCond
)
11693 MEMORY_CACHING_TYPE CacheType
);
11695 _Must_inspect_result_
11696 _IRQL_requires_max_(DISPATCH_LEVEL
)
11700 MmProtectMdlSystemAddress(
11701 _In_ PMDLX MemoryDescriptorList
,
11702 _In_ ULONG NewProtect
);
11704 _IRQL_requires_max_(DISPATCH_LEVEL
)
11708 MmUnmapReservedMapping(
11709 _In_ PVOID BaseAddress
,
11710 _In_ ULONG PoolTag
,
11711 _Inout_ PMDLX MemoryDescriptorList
);
11713 _IRQL_requires_max_ (APC_LEVEL
)
11717 MmAddVerifierThunks(
11718 _In_reads_bytes_ (ThunkBufferSize
) PVOID ThunkBuffer
,
11719 _In_ ULONG ThunkBufferSize
);
11721 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
11722 #if (NTDDI_VERSION >= NTDDI_WS03)
11723 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11728 _In_ PHYSICAL_ADDRESS StartAddress
,
11729 _In_ SIZE_T NumberOfBytes
);
11731 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
11732 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
11733 _Must_inspect_result_
11734 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11738 MmAllocatePagesForMdlEx(
11739 _In_ PHYSICAL_ADDRESS LowAddress
,
11740 _In_ PHYSICAL_ADDRESS HighAddress
,
11741 _In_ PHYSICAL_ADDRESS SkipBytes
,
11742 _In_ SIZE_T TotalBytes
,
11743 _In_ MEMORY_CACHING_TYPE CacheType
,
11747 #if (NTDDI_VERSION >= NTDDI_VISTA)
11748 _IRQL_requires_max_ (APC_LEVEL
)
11752 MmIsDriverVerifyingByAddress(
11753 _In_ PVOID AddressWithinSection
);
11754 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11756 /******************************************************************************
11757 * Security Manager Functions *
11758 ******************************************************************************/
11760 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11761 _IRQL_requires_max_(PASSIVE_LEVEL
)
11766 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11767 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
11768 _In_ BOOLEAN SubjectContextLocked
,
11769 _In_ ACCESS_MASK DesiredAccess
,
11770 _In_ ACCESS_MASK PreviouslyGrantedAccess
,
11771 _Outptr_opt_ PPRIVILEGE_SET
*Privileges
,
11772 _In_ PGENERIC_MAPPING GenericMapping
,
11773 _In_ KPROCESSOR_MODE AccessMode
,
11774 _Out_ PACCESS_MASK GrantedAccess
,
11775 _Out_ PNTSTATUS AccessStatus
);
11777 _IRQL_requires_max_(PASSIVE_LEVEL
)
11782 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
11783 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
11784 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
11785 _In_ BOOLEAN IsDirectoryObject
,
11786 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
11787 _In_ PGENERIC_MAPPING GenericMapping
,
11788 _In_ POOL_TYPE PoolType
);
11793 SeAssignSecurityEx(
11794 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
11795 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
11796 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
11797 _In_opt_ GUID
*ObjectType
,
11798 _In_ BOOLEAN IsDirectoryObject
,
11799 _In_ ULONG AutoInheritFlags
,
11800 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
11801 _In_ PGENERIC_MAPPING GenericMapping
,
11802 _In_ POOL_TYPE PoolType
);
11804 _IRQL_requires_max_(PASSIVE_LEVEL
)
11808 SeDeassignSecurity(
11809 _Inout_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
11811 _IRQL_requires_max_(PASSIVE_LEVEL
)
11815 SeValidSecurityDescriptor(
11817 _In_reads_bytes_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
);
11822 SeObjectCreateSaclAccessBits(
11823 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
11828 SeReleaseSubjectContext(
11829 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11834 SeUnlockSubjectContext(
11835 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11840 SeCaptureSubjectContext(
11841 _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11846 SeLockSubjectContext(
11847 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11850 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11852 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
11854 _At_(AuditParameters
->ParameterCount
, _Const_
)
11857 SeSetAuditParameter(
11858 _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters
,
11859 _In_ SE_ADT_PARAMETER_TYPE Type
,
11860 _In_range_(<,SE_MAX_AUDIT_PARAMETERS
) ULONG Index
,
11861 _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE"))
11866 SeReportSecurityEvent(
11868 _In_ PUNICODE_STRING SourceName
,
11869 _In_opt_ PSID UserSid
,
11870 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters
);
11872 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
11874 #if (NTDDI_VERSION >= NTDDI_VISTA)
11878 SeComputeAutoInheritByObjectType(
11879 _In_ PVOID ObjectType
,
11880 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11881 _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor
);
11883 #ifdef SE_NTFS_WORLD_CACHE
11887 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11888 _In_ PGENERIC_MAPPING GenericMapping
,
11889 _Out_ PACCESS_MASK GrantedAccess
);
11890 #endif /* SE_NTFS_WORLD_CACHE */
11891 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11892 /******************************************************************************
11893 * Configuration Manager Functions *
11894 ******************************************************************************/
11896 #if (NTDDI_VERSION >= NTDDI_WINXP)
11897 _IRQL_requires_max_(APC_LEVEL
)
11901 CmRegisterCallback(
11902 _In_ PEX_CALLBACK_FUNCTION Function
,
11903 _In_opt_ PVOID Context
,
11904 _Out_ PLARGE_INTEGER Cookie
);
11906 _IRQL_requires_max_(APC_LEVEL
)
11910 CmUnRegisterCallback(
11911 _In_ LARGE_INTEGER Cookie
);
11914 #if (NTDDI_VERSION >= NTDDI_VISTA)
11916 _IRQL_requires_max_(APC_LEVEL
)
11920 CmRegisterCallbackEx(
11921 _In_ PEX_CALLBACK_FUNCTION Function
,
11922 _In_ PCUNICODE_STRING Altitude
,
11924 _In_opt_ PVOID Context
,
11925 _Out_ PLARGE_INTEGER Cookie
,
11926 _Reserved_ PVOID Reserved
);
11928 _IRQL_requires_max_(APC_LEVEL
)
11932 CmGetCallbackVersion(
11933 _Out_opt_ PULONG Major
,
11934 _Out_opt_ PULONG Minor
);
11936 _IRQL_requires_max_(APC_LEVEL
)
11940 CmSetCallbackObjectContext(
11941 _Inout_ PVOID Object
,
11942 _In_ PLARGE_INTEGER Cookie
,
11943 _In_ PVOID NewContext
,
11944 _Out_opt_ PVOID
*OldContext
);
11946 _IRQL_requires_max_(APC_LEVEL
)
11950 CmCallbackGetKeyObjectID(
11951 _In_ PLARGE_INTEGER Cookie
,
11953 _Out_opt_ PULONG_PTR ObjectID
,
11954 _Outptr_opt_ PCUNICODE_STRING
*ObjectName
);
11956 _IRQL_requires_max_(APC_LEVEL
)
11960 CmGetBoundTransaction(
11961 _In_ PLARGE_INTEGER Cookie
,
11962 _In_ PVOID Object
);
11964 #endif // NTDDI_VERSION >= NTDDI_VISTA
11967 /******************************************************************************
11968 * I/O Manager Functions *
11969 ******************************************************************************/
11973 * IoAcquireRemoveLock(
11974 * IN PIO_REMOVE_LOCK RemoveLock,
11975 * IN OPTIONAL PVOID Tag)
11978 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11979 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
11981 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11982 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
11987 * IoAdjustPagingPathCount(
11989 * IN BOOLEAN Increment)
11991 #define IoAdjustPagingPathCount(_Count, \
11996 InterlockedIncrement(_Count); \
12000 InterlockedDecrement(_Count); \
12004 #if !defined(_M_AMD64)
12008 READ_PORT_BUFFER_UCHAR(
12016 READ_PORT_BUFFER_ULONG(
12024 READ_PORT_BUFFER_USHORT(
12050 READ_REGISTER_BUFFER_UCHAR(
12051 IN PUCHAR Register
,
12058 READ_REGISTER_BUFFER_ULONG(
12059 IN PULONG Register
,
12066 READ_REGISTER_BUFFER_USHORT(
12067 IN PUSHORT Register
,
12074 READ_REGISTER_UCHAR(
12075 IN PUCHAR Register
);
12080 READ_REGISTER_ULONG(
12081 IN PULONG Register
);
12086 READ_REGISTER_USHORT(
12087 IN PUSHORT Register
);
12092 WRITE_PORT_BUFFER_UCHAR(
12100 WRITE_PORT_BUFFER_ULONG(
12108 WRITE_PORT_BUFFER_USHORT(
12137 WRITE_REGISTER_BUFFER_UCHAR(
12138 IN PUCHAR Register
,
12145 WRITE_REGISTER_BUFFER_ULONG(
12146 IN PULONG Register
,
12153 WRITE_REGISTER_BUFFER_USHORT(
12154 IN PUSHORT Register
,
12161 WRITE_REGISTER_UCHAR(
12162 IN PUCHAR Register
,
12168 WRITE_REGISTER_ULONG(
12169 IN PULONG Register
,
12175 WRITE_REGISTER_USHORT(
12176 IN PUSHORT Register
,
12183 READ_PORT_BUFFER_UCHAR(
12188 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12193 READ_PORT_BUFFER_ULONG(
12198 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12203 READ_PORT_BUFFER_USHORT(
12208 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12216 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
12224 return __indword((USHORT
)(ULONG_PTR
)Port
);
12232 return __inword((USHORT
)(ULONG_PTR
)Port
);
12237 READ_REGISTER_BUFFER_UCHAR(
12238 IN PUCHAR Register
,
12242 __movsb(Register
, Buffer
, Count
);
12247 READ_REGISTER_BUFFER_ULONG(
12248 IN PULONG Register
,
12252 __movsd(Register
, Buffer
, Count
);
12257 READ_REGISTER_BUFFER_USHORT(
12258 IN PUSHORT Register
,
12262 __movsw(Register
, Buffer
, Count
);
12267 READ_REGISTER_UCHAR(
12268 IN
volatile UCHAR
*Register
)
12275 READ_REGISTER_ULONG(
12276 IN
volatile ULONG
*Register
)
12283 READ_REGISTER_USHORT(
12284 IN
volatile USHORT
*Register
)
12291 WRITE_PORT_BUFFER_UCHAR(
12296 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12301 WRITE_PORT_BUFFER_ULONG(
12306 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12311 WRITE_PORT_BUFFER_USHORT(
12316 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12325 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
12334 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
12343 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
12348 WRITE_REGISTER_BUFFER_UCHAR(
12349 IN PUCHAR Register
,
12354 __movsb(Register
, Buffer
, Count
);
12355 InterlockedOr(&Synch
, 1);
12360 WRITE_REGISTER_BUFFER_ULONG(
12361 IN PULONG Register
,
12366 __movsd(Register
, Buffer
, Count
);
12367 InterlockedOr(&Synch
, 1);
12372 WRITE_REGISTER_BUFFER_USHORT(
12373 IN PUSHORT Register
,
12378 __movsw(Register
, Buffer
, Count
);
12379 InterlockedOr(&Synch
, 1);
12384 WRITE_REGISTER_UCHAR(
12385 IN
volatile UCHAR
*Register
,
12390 InterlockedOr(&Synch
, 1);
12395 WRITE_REGISTER_ULONG(
12396 IN
volatile ULONG
*Register
,
12401 InterlockedOr(&Synch
, 1);
12406 WRITE_REGISTER_USHORT(
12407 IN
volatile USHORT
*Register
,
12412 InterlockedOr(&Sync
, 1);
12416 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
12417 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
12419 #define DMA_MACROS_DEFINED
12421 _IRQL_requires_max_(DISPATCH_LEVEL
)
12422 _IRQL_requires_min_(DISPATCH_LEVEL
)
12425 IoAllocateAdapterChannel(
12426 _In_ PDMA_ADAPTER DmaAdapter
,
12427 _In_ PDEVICE_OBJECT DeviceObject
,
12428 _In_ ULONG NumberOfMapRegisters
,
12429 _In_ PDRIVER_CONTROL ExecutionRoutine
,
12430 _In_ PVOID Context
)
12432 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
12433 AllocateAdapterChannel
=
12434 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
12435 ASSERT(AllocateAdapterChannel
);
12436 return AllocateAdapterChannel(DmaAdapter
,
12438 NumberOfMapRegisters
,
12446 IoFlushAdapterBuffers(
12447 _In_ PDMA_ADAPTER DmaAdapter
,
12449 _In_ PVOID MapRegisterBase
,
12450 _In_ PVOID CurrentVa
,
12452 _In_ BOOLEAN WriteToDevice
)
12454 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
12455 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
12456 ASSERT(FlushAdapterBuffers
);
12457 return FlushAdapterBuffers(DmaAdapter
,
12468 IoFreeAdapterChannel(
12469 _In_ PDMA_ADAPTER DmaAdapter
)
12471 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
12472 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
12473 ASSERT(FreeAdapterChannel
);
12474 FreeAdapterChannel(DmaAdapter
);
12480 IoFreeMapRegisters(
12481 _In_ PDMA_ADAPTER DmaAdapter
,
12482 _In_ PVOID MapRegisterBase
,
12483 _In_ ULONG NumberOfMapRegisters
)
12485 PFREE_MAP_REGISTERS FreeMapRegisters
;
12486 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
12487 ASSERT(FreeMapRegisters
);
12488 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
12495 _In_ PDMA_ADAPTER DmaAdapter
,
12497 _In_ PVOID MapRegisterBase
,
12498 _In_ PVOID CurrentVa
,
12499 _Inout_ PULONG Length
,
12500 _In_ BOOLEAN WriteToDevice
)
12502 PMAP_TRANSFER MapTransfer
;
12504 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
12505 ASSERT(MapTransfer
);
12506 return MapTransfer(DmaAdapter
,
12515 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12517 _Acquires_lock_(_Global_cancel_spin_lock_
)
12518 _Requires_lock_not_held_(_Global_cancel_spin_lock_
)
12519 _IRQL_requires_max_(DISPATCH_LEVEL
)
12520 _IRQL_raises_(DISPATCH_LEVEL
)
12524 IoAcquireCancelSpinLock(
12525 _Out_
_At_(*Irql
, _IRQL_saves_
) PKIRQL Irql
);
12527 _IRQL_requires_max_(DISPATCH_LEVEL
)
12531 IoAcquireRemoveLockEx(
12532 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
12533 _In_opt_ PVOID Tag
,
12536 _In_ ULONG RemlockSize
);
12538 _IRQL_requires_max_(DISPATCH_LEVEL
)
12543 IoAllocateDriverObjectExtension(
12544 _In_ PDRIVER_OBJECT DriverObject
,
12545 _In_ PVOID ClientIdentificationAddress
,
12546 _In_ ULONG DriverObjectExtensionSize
,
12547 _Post_
_At_(*DriverObjectExtension
, _When_(return==0,
12548 __drv_aliasesMem
__drv_allocatesMem(Mem
) _Post_notnull_
))
12549 _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize
))
12550 PVOID
*DriverObjectExtension
);
12552 _IRQL_requires_max_(DISPATCH_LEVEL
)
12556 IoAllocateErrorLogEntry(
12557 _In_ PVOID IoObject
,
12558 _In_ UCHAR EntrySize
);
12560 _Must_inspect_result_
12561 _IRQL_requires_max_(DISPATCH_LEVEL
)
12566 _In_ CCHAR StackSize
,
12567 _In_ BOOLEAN ChargeQuota
);
12569 _IRQL_requires_max_(DISPATCH_LEVEL
)
12574 _In_opt_ __drv_aliasesMem PVOID VirtualAddress
,
12576 _In_ BOOLEAN SecondaryBuffer
,
12577 _In_ BOOLEAN ChargeQuota
,
12578 _Inout_opt_ PIRP Irp
);
12580 __drv_allocatesMem(Mem
)
12581 _IRQL_requires_max_(DISPATCH_LEVEL
)
12585 IoAllocateWorkItem(
12586 _In_ PDEVICE_OBJECT DeviceObject
);
12588 _IRQL_requires_max_(APC_LEVEL
)
12594 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return==0, __drv_aliasesMem
)
12595 PDEVICE_OBJECT SourceDevice
,
12596 _In_ PUNICODE_STRING TargetDevice
,
12597 _Out_ PDEVICE_OBJECT
*AttachedDevice
);
12599 _Must_inspect_result_
12600 _IRQL_requires_max_(DISPATCH_LEVEL
)
12604 IoAttachDeviceToDeviceStack(
12605 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return!=0, __drv_aliasesMem
)
12606 PDEVICE_OBJECT SourceDevice
,
12607 _In_ PDEVICE_OBJECT TargetDevice
);
12609 _Must_inspect_result_
12611 _IRQL_requires_max_(DISPATCH_LEVEL
)
12615 IoBuildAsynchronousFsdRequest(
12616 _In_ ULONG MajorFunction
,
12617 _In_ PDEVICE_OBJECT DeviceObject
,
12618 _Inout_opt_ PVOID Buffer
,
12619 _In_opt_ ULONG Length
,
12620 _In_opt_ PLARGE_INTEGER StartingOffset
,
12621 _In_opt_ PIO_STATUS_BLOCK IoStatusBlock
);
12623 _Must_inspect_result_
12625 _IRQL_requires_max_(PASSIVE_LEVEL
)
12629 IoBuildDeviceIoControlRequest(
12630 _In_ ULONG IoControlCode
,
12631 _In_ PDEVICE_OBJECT DeviceObject
,
12632 _In_opt_ PVOID InputBuffer
,
12633 _In_ ULONG InputBufferLength
,
12634 _Out_opt_ PVOID OutputBuffer
,
12635 _In_ ULONG OutputBufferLength
,
12636 _In_ BOOLEAN InternalDeviceIoControl
,
12637 _In_opt_ PKEVENT Event
,
12638 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
12640 _IRQL_requires_max_(DISPATCH_LEVEL
)
12645 _In_ PMDL SourceMdl
,
12646 _Inout_ PMDL TargetMdl
,
12647 _In_ PVOID VirtualAddress
,
12648 _In_ ULONG Length
);
12650 _Must_inspect_result_
12652 _IRQL_requires_max_(PASSIVE_LEVEL
)
12656 IoBuildSynchronousFsdRequest(
12657 _In_ ULONG MajorFunction
,
12658 _In_ PDEVICE_OBJECT DeviceObject
,
12659 _Inout_opt_ PVOID Buffer
,
12660 _In_opt_ ULONG Length
,
12661 _In_opt_ PLARGE_INTEGER StartingOffset
,
12662 _In_ PKEVENT Event
,
12663 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
12665 _IRQL_requires_max_(DISPATCH_LEVEL
)
12671 _In_ PDEVICE_OBJECT DeviceObject
,
12672 _Inout_ __drv_aliasesMem PIRP Irp
);
12673 #define IoCallDriver IofCallDriver
12675 _IRQL_requires_max_(DISPATCH_LEVEL
)
12679 IofCompleteRequest(
12681 _In_ CCHAR PriorityBoost
);
12682 #define IoCompleteRequest IofCompleteRequest
12684 _IRQL_requires_max_(DISPATCH_LEVEL
)
12691 _IRQL_requires_max_(PASSIVE_LEVEL
)
12695 IoCheckShareAccess(
12696 _In_ ACCESS_MASK DesiredAccess
,
12697 _In_ ULONG DesiredShareAccess
,
12698 _Inout_ PFILE_OBJECT FileObject
,
12699 _Inout_ PSHARE_ACCESS ShareAccess
,
12700 _In_ BOOLEAN Update
);
12702 _IRQL_requires_max_(DISPATCH_LEVEL
)
12706 IofCompleteRequest(
12708 _In_ CCHAR PriorityBoost
);
12710 _IRQL_requires_max_(PASSIVE_LEVEL
)
12714 IoConnectInterrupt(
12715 _Out_ PKINTERRUPT
*InterruptObject
,
12716 _In_ PKSERVICE_ROUTINE ServiceRoutine
,
12717 _In_opt_ PVOID ServiceContext
,
12718 _In_opt_ PKSPIN_LOCK SpinLock
,
12721 _In_ KIRQL SynchronizeIrql
,
12722 _In_ KINTERRUPT_MODE InterruptMode
,
12723 _In_ BOOLEAN ShareVector
,
12724 _In_ KAFFINITY ProcessorEnableMask
,
12725 _In_ BOOLEAN FloatingSave
);
12727 _IRQL_requires_max_(APC_LEVEL
)
12733 _In_ PDRIVER_OBJECT DriverObject
,
12734 _In_ ULONG DeviceExtensionSize
,
12735 _In_opt_ PUNICODE_STRING DeviceName
,
12736 _In_ DEVICE_TYPE DeviceType
,
12737 _In_ ULONG DeviceCharacteristics
,
12738 _In_ BOOLEAN Exclusive
,
12739 _Outptr_result_nullonfailure_
12740 _At_(*DeviceObject
,
12741 __drv_allocatesMem(Mem
)
12742 _When_(((_In_function_class_(DRIVER_INITIALIZE
))
12743 ||(_In_function_class_(DRIVER_DISPATCH
))),
12745 PDEVICE_OBJECT
*DeviceObject
);
12747 _IRQL_requires_max_(PASSIVE_LEVEL
)
12752 _Out_ PHANDLE FileHandle
,
12753 _In_ ACCESS_MASK DesiredAccess
,
12754 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
12755 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
12756 _In_opt_ PLARGE_INTEGER AllocationSize
,
12757 _In_ ULONG FileAttributes
,
12758 _In_ ULONG ShareAccess
,
12759 _In_ ULONG Disposition
,
12760 _In_ ULONG CreateOptions
,
12761 _In_opt_ PVOID EaBuffer
,
12762 _In_ ULONG EaLength
,
12763 _In_ CREATE_FILE_TYPE CreateFileType
,
12764 _In_opt_ PVOID InternalParameters
,
12765 _In_ ULONG Options
);
12767 _IRQL_requires_max_(PASSIVE_LEVEL
)
12771 IoCreateNotificationEvent(
12772 _In_ PUNICODE_STRING EventName
,
12773 _Out_ PHANDLE EventHandle
);
12775 _IRQL_requires_max_(PASSIVE_LEVEL
)
12779 IoCreateSymbolicLink(
12780 _In_ PUNICODE_STRING SymbolicLinkName
,
12781 _In_ PUNICODE_STRING DeviceName
);
12783 _IRQL_requires_max_(PASSIVE_LEVEL
)
12787 IoCreateSynchronizationEvent(
12788 _In_ PUNICODE_STRING EventName
,
12789 _Out_ PHANDLE EventHandle
);
12791 _IRQL_requires_max_(PASSIVE_LEVEL
)
12795 IoCreateUnprotectedSymbolicLink(
12796 _In_ PUNICODE_STRING SymbolicLinkName
,
12797 _In_ PUNICODE_STRING DeviceName
);
12799 _IRQL_requires_max_(APC_LEVEL
)
12800 _Kernel_clear_do_init_(__yes
)
12805 _In_
_Kernel_requires_resource_held_(Memory
) __drv_freesMem(Mem
)
12806 PDEVICE_OBJECT DeviceObject
);
12808 _IRQL_requires_max_(PASSIVE_LEVEL
)
12812 IoDeleteSymbolicLink(
12813 _In_ PUNICODE_STRING SymbolicLinkName
);
12815 _IRQL_requires_max_(PASSIVE_LEVEL
)
12820 _Inout_ PDEVICE_OBJECT TargetDevice
);
12822 _IRQL_requires_max_(PASSIVE_LEVEL
)
12826 IoDisconnectInterrupt(
12827 _In_ PKINTERRUPT InterruptObject
);
12829 __drv_freesMem(Mem
)
12830 _IRQL_requires_max_(DISPATCH_LEVEL
)
12837 _IRQL_requires_max_(DISPATCH_LEVEL
)
12844 _IRQL_requires_max_(DISPATCH_LEVEL
)
12849 _In_
__drv_freesMem(Mem
) PIO_WORKITEM IoWorkItem
);
12854 IoGetAttachedDevice(
12855 IN PDEVICE_OBJECT DeviceObject
);
12857 _IRQL_requires_max_(DISPATCH_LEVEL
)
12861 IoGetAttachedDeviceReference(
12862 _In_ PDEVICE_OBJECT DeviceObject
);
12867 IoGetBootDiskInformation(
12868 _Inout_ PBOOTDISK_INFORMATION BootDiskInformation
,
12871 _IRQL_requires_max_(PASSIVE_LEVEL
)
12872 _Must_inspect_result_
12876 IoGetDeviceInterfaceAlias(
12877 _In_ PUNICODE_STRING SymbolicLinkName
,
12878 _In_ CONST GUID
*AliasInterfaceClassGuid
,
12880 _When_(return==0, _At_(AliasSymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
12881 PUNICODE_STRING AliasSymbolicLinkName
);
12886 IoGetCurrentProcess(VOID
);
12888 _IRQL_requires_max_(PASSIVE_LEVEL
)
12889 _Must_inspect_result_
12893 IoGetDeviceInterfaces(
12894 _In_ CONST GUID
*InterfaceClassGuid
,
12895 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
12897 _Outptr_result_nullonfailure_
12898 _At_(*SymbolicLinkList
, _When_(return==0, __drv_allocatesMem(Mem
)))
12899 PZZWSTR
*SymbolicLinkList
);
12901 _IRQL_requires_max_(PASSIVE_LEVEL
)
12905 IoGetDeviceObjectPointer(
12906 _In_ PUNICODE_STRING ObjectName
,
12907 _In_ ACCESS_MASK DesiredAccess
,
12908 _Out_ PFILE_OBJECT
*FileObject
,
12909 _Out_ PDEVICE_OBJECT
*DeviceObject
);
12911 _IRQL_requires_max_(PASSIVE_LEVEL
)
12912 _When_((DeviceProperty
& __string_type
),
12913 _At_(PropertyBuffer
, _Post_z_
))
12914 _When_((DeviceProperty
& __multiString_type
),
12915 _At_(PropertyBuffer
, _Post_ _NullNull_terminated_
))
12919 IoGetDeviceProperty(
12920 _In_ PDEVICE_OBJECT DeviceObject
,
12921 _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty
,
12922 _In_ ULONG BufferLength
,
12923 _Out_writes_bytes_opt_(BufferLength
) PVOID PropertyBuffer
,
12924 _Deref_out_range_(<=, BufferLength
) PULONG ResultLength
);
12926 _Must_inspect_result_
12927 _IRQL_requires_max_(PASSIVE_LEVEL
)
12932 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
12933 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
12934 _Out_
_When_(return!=0, _Kernel_IoGetDmaAdapter_
_At_(*NumberOfMapRegisters
, _Must_inspect_result_
))
12935 PULONG NumberOfMapRegisters
);
12938 _IRQL_requires_max_(DISPATCH_LEVEL
)
12942 IoGetDriverObjectExtension(
12943 _In_ PDRIVER_OBJECT DriverObject
,
12944 _In_ PVOID ClientIdentificationAddress
);
12946 _IRQL_requires_max_(APC_LEVEL
)
12950 IoGetInitialStack(VOID
);
12955 IoGetRelatedDeviceObject(
12956 _In_ PFILE_OBJECT FileObject
);
12958 _IRQL_requires_max_(DISPATCH_LEVEL
)
12963 _Inout_ PIO_WORKITEM IoWorkItem
,
12964 _In_ PIO_WORKITEM_ROUTINE WorkerRoutine
,
12965 _In_ WORK_QUEUE_TYPE QueueType
,
12966 _In_opt_ __drv_aliasesMem PVOID Context
);
12968 _IRQL_requires_max_(DISPATCH_LEVEL
)
12974 _In_ USHORT PacketSize
,
12975 _In_ CCHAR StackSize
);
12977 _IRQL_requires_max_(PASSIVE_LEVEL
)
12981 IoInitializeRemoveLockEx(
12982 _Out_ PIO_REMOVE_LOCK Lock
,
12983 _In_ ULONG AllocateTag
,
12984 _In_ ULONG MaxLockedMinutes
,
12985 _In_ ULONG HighWatermark
,
12986 _In_ ULONG RemlockSize
);
12988 _IRQL_requires_max_(PASSIVE_LEVEL
)
12993 _In_ PDEVICE_OBJECT DeviceObject
,
12994 _In_ PIO_TIMER_ROUTINE TimerRoutine
,
12995 _In_opt_ __drv_aliasesMem PVOID Context
);
12997 _IRQL_requires_max_(DISPATCH_LEVEL
)
13001 IoInvalidateDeviceRelations(
13002 _In_ PDEVICE_OBJECT DeviceObject
,
13003 _In_ DEVICE_RELATION_TYPE Type
);
13005 _IRQL_requires_max_(DISPATCH_LEVEL
)
13009 IoInvalidateDeviceState(
13010 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13012 _IRQL_requires_max_(PASSIVE_LEVEL
)
13016 IoIsWdmVersionAvailable(
13017 _When_(MajorVersion
!=1&&MajorVersion
!=6, _In_
__drv_reportError("MajorVersion must be 1 or 6"))
13018 UCHAR MajorVersion
,
13019 _In_
_When_(MinorVersion
!=0 && MinorVersion
!=5 &&
13020 MinorVersion
!=16 && MinorVersion
!=32 &&
13021 MinorVersion
!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30"))
13022 UCHAR MinorVersion
);
13024 _IRQL_requires_max_(PASSIVE_LEVEL
)
13025 _Must_inspect_result_
13029 IoOpenDeviceInterfaceRegistryKey(
13030 _In_ PUNICODE_STRING SymbolicLinkName
,
13031 _In_ ACCESS_MASK DesiredAccess
,
13032 _Out_ PHANDLE DeviceInterfaceKey
);
13034 _IRQL_requires_max_(PASSIVE_LEVEL
)
13035 _Must_inspect_result_
13039 IoOpenDeviceRegistryKey(
13040 _In_ PDEVICE_OBJECT DeviceObject
,
13041 _In_ ULONG DevInstKeyType
,
13042 _In_ ACCESS_MASK DesiredAccess
,
13043 _Out_ PHANDLE DevInstRegKey
);
13045 _IRQL_requires_max_(PASSIVE_LEVEL
)
13046 _Must_inspect_result_
13050 IoRegisterDeviceInterface(
13051 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13052 _In_ CONST GUID
*InterfaceClassGuid
,
13053 _In_opt_ PUNICODE_STRING ReferenceString
,
13054 _Out_
_When_(return==0, _At_(SymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13055 PUNICODE_STRING SymbolicLinkName
);
13057 _IRQL_requires_max_(PASSIVE_LEVEL
)
13058 _Must_inspect_result_
13062 IoRegisterPlugPlayNotification(
13063 _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
13064 _In_ ULONG EventCategoryFlags
,
13065 _In_opt_ PVOID EventCategoryData
,
13066 _In_ PDRIVER_OBJECT DriverObject
,
13067 _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
13068 _Inout_opt_ __drv_aliasesMem PVOID Context
,
13069 _Outptr_result_nullonfailure_
13070 _At_(*NotificationEntry
, _When_(return==0, __drv_allocatesMem(Mem
)))
13071 PVOID
*NotificationEntry
);
13073 _IRQL_requires_max_(PASSIVE_LEVEL
)
13077 IoRegisterShutdownNotification(
13078 _In_ PDEVICE_OBJECT DeviceObject
);
13080 _Requires_lock_held_(_Global_cancel_spin_lock_
)
13081 _Releases_lock_(_Global_cancel_spin_lock_
)
13082 _IRQL_requires_max_(DISPATCH_LEVEL
)
13083 _IRQL_requires_min_(DISPATCH_LEVEL
)
13087 IoReleaseCancelSpinLock(
13088 _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql
);
13090 _IRQL_requires_max_(PASSIVE_LEVEL
)
13094 IoReleaseRemoveLockAndWaitEx(
13095 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13096 _In_opt_ PVOID Tag
,
13097 _In_ ULONG RemlockSize
);
13102 IoReleaseRemoveLockEx(
13103 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13104 _In_opt_ PVOID Tag
,
13105 _In_ ULONG RemlockSize
);
13107 _IRQL_requires_max_(PASSIVE_LEVEL
)
13111 IoRemoveShareAccess(
13112 _In_ PFILE_OBJECT FileObject
,
13113 _Inout_ PSHARE_ACCESS ShareAccess
);
13115 _IRQL_requires_max_(PASSIVE_LEVEL
)
13119 IoReportTargetDeviceChange(
13120 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13121 _In_ PVOID NotificationStructure
);
13123 _IRQL_requires_max_(DISPATCH_LEVEL
)
13127 IoReportTargetDeviceChangeAsynchronous(
13128 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13129 _In_ PVOID NotificationStructure
,
13130 _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback
,
13131 _In_opt_ PVOID Context
);
13133 _IRQL_requires_max_(DISPATCH_LEVEL
)
13137 IoRequestDeviceEject(
13138 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13140 _IRQL_requires_max_(DISPATCH_LEVEL
)
13146 _In_ NTSTATUS Status
);
13148 _IRQL_requires_max_(PASSIVE_LEVEL
)
13149 _Must_inspect_result_
13153 IoSetDeviceInterfaceState(
13154 _In_ PUNICODE_STRING SymbolicLinkName
,
13155 _In_ BOOLEAN Enable
);
13161 _In_ ACCESS_MASK DesiredAccess
,
13162 _In_ ULONG DesiredShareAccess
,
13163 _Inout_ PFILE_OBJECT FileObject
,
13164 _Out_ PSHARE_ACCESS ShareAccess
);
13166 _IRQL_requires_max_(DISPATCH_LEVEL
)
13167 _IRQL_requires_min_(DISPATCH_LEVEL
)
13172 _In_ PDEVICE_OBJECT DeviceObject
,
13173 _In_ BOOLEAN Cancelable
);
13175 _IRQL_requires_max_(DISPATCH_LEVEL
)
13179 IoStartNextPacketByKey(
13180 _In_ PDEVICE_OBJECT DeviceObject
,
13181 _In_ BOOLEAN Cancelable
,
13184 _IRQL_requires_max_(DISPATCH_LEVEL
)
13189 _In_ PDEVICE_OBJECT DeviceObject
,
13191 _In_opt_ PULONG Key
,
13192 _In_opt_ PDRIVER_CANCEL CancelFunction
);
13194 _IRQL_requires_max_(DISPATCH_LEVEL
)
13199 _In_ PDEVICE_OBJECT DeviceObject
);
13201 _IRQL_requires_max_(DISPATCH_LEVEL
)
13206 _In_ PDEVICE_OBJECT DeviceObject
);
13208 _IRQL_requires_max_(PASSIVE_LEVEL
)
13209 __drv_freesMem(Pool
)
13213 IoUnregisterPlugPlayNotification(
13214 _In_ PVOID NotificationEntry
);
13216 _IRQL_requires_max_(PASSIVE_LEVEL
)
13220 IoUnregisterShutdownNotification(
13221 _In_ PDEVICE_OBJECT DeviceObject
);
13223 _IRQL_requires_max_(PASSIVE_LEVEL
)
13227 IoUpdateShareAccess(
13228 _In_ PFILE_OBJECT FileObject
,
13229 _Inout_ PSHARE_ACCESS ShareAccess
);
13231 _IRQL_requires_max_(PASSIVE_LEVEL
)
13235 IoWMIAllocateInstanceIds(
13237 _In_ ULONG InstanceCount
,
13238 _Out_ ULONG
*FirstInstanceId
);
13243 IoWMIQuerySingleInstanceMultiple(
13244 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13245 _In_reads_(ObjectCount
) PUNICODE_STRING InstanceNames
,
13246 _In_ ULONG ObjectCount
,
13247 _Inout_ ULONG
*InOutBufferSize
,
13248 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13250 _IRQL_requires_max_(PASSIVE_LEVEL
)
13254 IoWMIRegistrationControl(
13255 _In_ PDEVICE_OBJECT DeviceObject
,
13256 _In_ ULONG Action
);
13261 IoWMISuggestInstanceName(
13262 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13263 _In_opt_ PUNICODE_STRING SymbolicLinkName
,
13264 _In_ BOOLEAN CombineNames
,
13265 _Out_ PUNICODE_STRING SuggestedInstanceName
);
13267 _Must_inspect_result_
13268 _IRQL_requires_max_(DISPATCH_LEVEL
)
13274 _Inout_
_When_(return==0, __drv_aliasesMem
) PVOID WnodeEventItem
);
13276 _IRQL_requires_max_(DISPATCH_LEVEL
)
13280 IoWriteErrorLogEntry(
13281 _In_ PVOID ElEntry
);
13286 IoGetTopLevelIrp(VOID
);
13288 _IRQL_requires_max_(PASSIVE_LEVEL
)
13292 IoRegisterLastChanceShutdownNotification(
13293 _In_ PDEVICE_OBJECT DeviceObject
);
13299 _In_opt_ PIRP Irp
);
13302 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13305 #if (NTDDI_VERSION >= NTDDI_WINXP)
13312 _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp
,
13313 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
13314 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
13315 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
13316 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
13317 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
13323 _Inout_ PIO_CSQ Csq
,
13325 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
);
13331 _Inout_ PIO_CSQ Csq
,
13332 _Inout_ PIO_CSQ_IRP_CONTEXT Context
);
13337 IoCsqRemoveNextIrp(
13338 _Inout_ PIO_CSQ Csq
,
13339 _In_opt_ PVOID PeekContext
);
13344 IoForwardIrpSynchronously(
13345 _In_ PDEVICE_OBJECT DeviceObject
,
13348 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
13353 IoFreeErrorLogEntry(
13354 _In_ PVOID ElEntry
);
13356 _IRQL_requires_max_(DISPATCH_LEVEL
)
13357 _Must_inspect_result_
13361 IoSetCompletionRoutineEx(
13362 _In_ PDEVICE_OBJECT DeviceObject
,
13364 _In_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
13365 _In_opt_ PVOID Context
,
13366 _In_ BOOLEAN InvokeOnSuccess
,
13367 _In_ BOOLEAN InvokeOnError
,
13368 _In_ BOOLEAN InvokeOnCancel
);
13372 IoSetStartIoAttributes(
13373 _In_ PDEVICE_OBJECT DeviceObject
,
13374 _In_ BOOLEAN DeferredStartIo
,
13375 _In_ BOOLEAN NonCancelable
);
13380 IoWMIDeviceObjectToInstanceName(
13381 _In_ PVOID DataBlockObject
,
13382 _In_ PDEVICE_OBJECT DeviceObject
,
13383 _Out_ PUNICODE_STRING InstanceName
);
13388 IoWMIExecuteMethod(
13389 _In_ PVOID DataBlockObject
,
13390 _In_ PUNICODE_STRING InstanceName
,
13391 _In_ ULONG MethodId
,
13392 _In_ ULONG InBufferSize
,
13393 _Inout_ PULONG OutBufferSize
,
13394 _Inout_updates_bytes_to_opt_(*OutBufferSize
, InBufferSize
) PUCHAR InOutBuffer
);
13399 IoWMIHandleToInstanceName(
13400 _In_ PVOID DataBlockObject
,
13401 _In_ HANDLE FileHandle
,
13402 _Out_ PUNICODE_STRING InstanceName
);
13408 _In_ GUID
*DataBlockGuid
,
13409 _In_ ULONG DesiredAccess
,
13410 _Out_ PVOID
*DataBlockObject
);
13416 _In_ PVOID DataBlockObject
,
13417 _Inout_ ULONG
*InOutBufferSize
,
13418 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13423 IoWMIQueryAllDataMultiple(
13424 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13425 _In_ ULONG ObjectCount
,
13426 _Inout_ ULONG
*InOutBufferSize
,
13427 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13432 IoWMIQuerySingleInstance(
13433 _In_ PVOID DataBlockObject
,
13434 _In_ PUNICODE_STRING InstanceName
,
13435 _Inout_ ULONG
*InOutBufferSize
,
13436 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13441 IoWMISetNotificationCallback(
13442 _Inout_ PVOID Object
,
13443 _In_ WMI_NOTIFICATION_CALLBACK Callback
,
13444 _In_opt_ PVOID Context
);
13449 IoWMISetSingleInstance(
13450 _In_ PVOID DataBlockObject
,
13451 _In_ PUNICODE_STRING InstanceName
,
13452 _In_ ULONG Version
,
13453 _In_ ULONG ValueBufferSize
,
13454 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
13459 IoWMISetSingleItem(
13460 _In_ PVOID DataBlockObject
,
13461 _In_ PUNICODE_STRING InstanceName
,
13462 _In_ ULONG DataItemId
,
13463 _In_ ULONG Version
,
13464 _In_ ULONG ValueBufferSize
,
13465 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
13467 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
13469 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
13473 IoValidateDeviceIoControlAccess(
13475 _In_ ULONG RequiredAccess
);
13478 #if (NTDDI_VERSION >= NTDDI_WS03)
13484 _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
13485 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
13486 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
13487 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
13488 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
13489 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
13495 _Inout_ PIO_CSQ Csq
,
13497 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
,
13498 _In_opt_ PVOID InsertContext
);
13499 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
13502 #if (NTDDI_VERSION >= NTDDI_VISTA)
13506 IoGetBootDiskInformationLite(
13507 _Outptr_ PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
13512 IoCheckShareAccessEx(
13513 _In_ ACCESS_MASK DesiredAccess
,
13514 _In_ ULONG DesiredShareAccess
,
13515 _Inout_ PFILE_OBJECT FileObject
,
13516 _Inout_ PSHARE_ACCESS ShareAccess
,
13517 _In_ BOOLEAN Update
,
13518 _In_ PBOOLEAN WritePermission
);
13523 IoConnectInterruptEx(
13524 _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
13529 IoDisconnectInterruptEx(
13530 _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
13534 IoWithinStackLimits(
13535 _In_ ULONG_PTR RegionStart
,
13536 _In_ SIZE_T RegionSize
);
13541 IoSetShareAccessEx(
13542 _In_ ACCESS_MASK DesiredAccess
,
13543 _In_ ULONG DesiredShareAccess
,
13544 _Inout_ PFILE_OBJECT FileObject
,
13545 _Out_ PSHARE_ACCESS ShareAccess
,
13546 _In_ PBOOLEAN WritePermission
);
13550 IoSizeofWorkItem(VOID
);
13554 IoInitializeWorkItem(
13555 _In_ PVOID IoObject
,
13556 _Out_ PIO_WORKITEM IoWorkItem
);
13560 IoUninitializeWorkItem(
13561 _Inout_ PIO_WORKITEM IoWorkItem
);
13563 _IRQL_requires_max_(DISPATCH_LEVEL
)
13567 _Inout_ PIO_WORKITEM IoWorkItem
,
13568 _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
13569 _In_ WORK_QUEUE_TYPE QueueType
,
13570 _In_opt_ __drv_aliasesMem PVOID Context
);
13574 IoGetIoPriorityHint(
13579 IoSetIoPriorityHint(
13581 _In_ IO_PRIORITY_HINT PriorityHint
);
13585 IoAllocateSfioStreamIdentifier(
13586 _In_ PFILE_OBJECT FileObject
,
13588 _In_ PVOID Signature
,
13589 _Out_ PVOID
*StreamIdentifier
);
13593 IoGetSfioStreamIdentifier(
13594 _In_ PFILE_OBJECT FileObject
,
13595 _In_ PVOID Signature
);
13599 IoFreeSfioStreamIdentifier(
13600 _In_ PFILE_OBJECT FileObject
,
13601 _In_ PVOID Signature
);
13603 _IRQL_requires_max_(DISPATCH_LEVEL
)
13604 _Must_inspect_result_
13608 IoRequestDeviceEjectEx(
13609 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13610 _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback
,
13611 _In_opt_ PVOID Context
,
13612 _In_opt_ PDRIVER_OBJECT DriverObject
);
13614 _IRQL_requires_max_(PASSIVE_LEVEL
)
13615 _Must_inspect_result_
13619 IoSetDevicePropertyData(
13620 _In_ PDEVICE_OBJECT Pdo
,
13621 _In_ CONST DEVPROPKEY
*PropertyKey
,
13624 _In_ DEVPROPTYPE Type
,
13626 _In_opt_ PVOID Data
);
13628 _IRQL_requires_max_(PASSIVE_LEVEL
)
13629 _Must_inspect_result_
13633 IoGetDevicePropertyData(
13634 _In_ PDEVICE_OBJECT Pdo
,
13635 _In_ CONST DEVPROPKEY
*PropertyKey
,
13637 _Reserved_ ULONG Flags
,
13640 _Out_ PULONG RequiredSize
,
13641 _Out_ PDEVPROPTYPE Type
);
13643 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
13645 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
13647 #if (NTDDI_VERSION >= NTDDI_WS08)
13648 _IRQL_requires_max_(PASSIVE_LEVEL
)
13649 _Must_inspect_result_
13653 IoReplacePartitionUnit(
13654 _In_ PDEVICE_OBJECT TargetPdo
,
13655 _In_ PDEVICE_OBJECT SparePdo
,
13659 #if (NTDDI_VERSION >= NTDDI_WIN7)
13664 IoGetAffinityInterrupt(
13665 _In_ PKINTERRUPT InterruptObject
,
13666 _Out_ PGROUP_AFFINITY GroupAffinity
);
13670 IoGetContainerInformation(
13671 _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass
,
13672 _In_opt_ PVOID ContainerObject
,
13673 _Inout_updates_bytes_opt_(BufferLength
) PVOID Buffer
,
13674 _In_ ULONG BufferLength
);
13678 IoRegisterContainerNotification(
13679 _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
13680 _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
13681 _In_reads_bytes_opt_(NotificationInformationLength
) PVOID NotificationInformation
,
13682 _In_ ULONG NotificationInformationLength
,
13683 _Out_ PVOID CallbackRegistration
);
13687 IoUnregisterContainerNotification(
13688 _In_ PVOID CallbackRegistration
);
13690 _IRQL_requires_max_(PASSIVE_LEVEL
)
13691 __drv_freesMem(Pool
)
13695 IoUnregisterPlugPlayNotificationEx(
13696 _In_ PVOID NotificationEntry
);
13698 _IRQL_requires_max_(PASSIVE_LEVEL
)
13699 _Must_inspect_result_
13703 IoGetDeviceNumaNode(
13704 _In_ PDEVICE_OBJECT Pdo
,
13705 _Out_ PUSHORT NodeNumber
);
13707 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13709 #if defined(_WIN64)
13713 IoWMIDeviceObjectToProviderId(
13714 _In_ PDEVICE_OBJECT DeviceObject
);
13716 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
13722 * IN CCHAR StackSize)
13724 #define IoSizeOfIrp(_StackSize) \
13725 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
13729 IoSkipCurrentIrpStackLocation(
13732 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
13733 Irp
->CurrentLocation
++;
13734 #ifdef NONAMELESSUNION
13735 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
++;
13737 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
13743 IoSetNextIrpStackLocation(
13746 ASSERT(Irp
->CurrentLocation
> 0);
13747 Irp
->CurrentLocation
--;
13748 #ifdef NONAMELESSUNION
13749 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
--;
13751 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
13758 IoGetNextIrpStackLocation(
13761 ASSERT(Irp
->CurrentLocation
> 0);
13762 #ifdef NONAMELESSUNION
13763 return ((Irp
)->Tail
.Overlay
.s
.u
.CurrentStackLocation
- 1 );
13765 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
13769 _IRQL_requires_max_(DISPATCH_LEVEL
)
13772 IoSetCompletionRoutine(
13774 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
13775 _In_opt_ __drv_aliasesMem PVOID Context
,
13776 _In_ BOOLEAN InvokeOnSuccess
,
13777 _In_ BOOLEAN InvokeOnError
,
13778 _In_ BOOLEAN InvokeOnCancel
)
13780 PIO_STACK_LOCATION irpSp
;
13781 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
13782 irpSp
= IoGetNextIrpStackLocation(Irp
);
13783 irpSp
->CompletionRoutine
= CompletionRoutine
;
13784 irpSp
->Context
= Context
;
13785 irpSp
->Control
= 0;
13787 if (InvokeOnSuccess
) {
13788 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
13791 if (InvokeOnError
) {
13792 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
13795 if (InvokeOnCancel
) {
13796 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
13800 _IRQL_requires_max_(DISPATCH_LEVEL
)
13804 IoSetCancelRoutine(
13806 _In_opt_ PDRIVER_CANCEL CancelRoutine
)
13808 return (PDRIVER_CANCEL
)(ULONG_PTR
) InterlockedExchangePointer((PVOID
*)&(Irp
)->CancelRoutine
, (PVOID
)(ULONG_PTR
)(CancelRoutine
));
13814 _Inout_ PDEVICE_OBJECT DeviceObject
,
13816 _In_opt_ __drv_aliasesMem PVOID Context
)
13818 KeInsertQueueDpc(&DeviceObject
->Dpc
, Irp
, Context
);
13823 * IoReleaseRemoveLock(
13824 * IN PIO_REMOVE_LOCK RemoveLock,
13827 #define IoReleaseRemoveLock(_RemoveLock, \
13829 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
13833 * IoReleaseRemoveLockAndWait(
13834 * IN PIO_REMOVE_LOCK RemoveLock,
13837 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
13839 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
13841 #if defined(_WIN64)
13842 _IRQL_requires_max_(DISPATCH_LEVEL
)
13846 _In_opt_ PIRP Irp
);
13849 #define PLUGPLAY_REGKEY_DEVICE 1
13850 #define PLUGPLAY_REGKEY_DRIVER 2
13851 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
13856 IoGetCurrentIrpStackLocation(
13859 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
13860 #ifdef NONAMELESSUNION
13861 return Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
;
13863 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
13872 IoGetCurrentIrpStackLocation((Irp
))->Control
|= SL_PENDING_RETURNED
;
13877 * IoIsErrorUserInduced(
13878 * IN NTSTATUS Status);
13880 #define IoIsErrorUserInduced(Status) \
13881 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
13882 ((Status) == STATUS_IO_TIMEOUT) || \
13883 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
13884 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
13885 ((Status) == STATUS_VERIFY_REQUIRED) || \
13886 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
13887 ((Status) == STATUS_WRONG_VOLUME)))
13890 * IoInitializeRemoveLock(
13891 * IN PIO_REMOVE_LOCK Lock,
13892 * IN ULONG AllocateTag,
13893 * IN ULONG MaxLockedMinutes,
13894 * IN ULONG HighWatermark)
13896 #define IoInitializeRemoveLock( \
13897 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
13898 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
13899 HighWatermark, sizeof(IO_REMOVE_LOCK))
13903 IoInitializeDpcRequest(
13904 _In_ PDEVICE_OBJECT DeviceObject
,
13905 _In_ PIO_DPC_ROUTINE DpcRoutine
)
13908 #pragma warning(push)
13909 #pragma warning(disable:28024)
13911 KeInitializeDpc(&DeviceObject
->Dpc
,
13912 (PKDEFERRED_ROUTINE
) DpcRoutine
,
13915 #pragma warning(pop)
13919 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
13923 * IoGetFunctionCodeFromCtlCode(
13924 * IN ULONG ControlCode)
13926 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
13927 (((_ControlCode) >> 2) & 0x00000FFF)
13931 IoCopyCurrentIrpStackLocationToNext(
13934 PIO_STACK_LOCATION irpSp
;
13935 PIO_STACK_LOCATION nextIrpSp
;
13936 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
13937 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
13938 RtlCopyMemory(nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
13939 nextIrpSp
->Control
= 0;
13942 _IRQL_requires_max_(APC_LEVEL
)
13947 _Out_ PULONG_PTR LowLimit
,
13948 _Out_ PULONG_PTR HighLimit
);
13950 _IRQL_requires_max_(APC_LEVEL
)
13953 IoGetRemainingStackSize(VOID
)
13955 ULONG_PTR End
, Begin
;
13958 IoGetStackLimits(&Begin
, &End
);
13959 Result
= (ULONG_PTR
)(&End
) - Begin
;
13963 #if (NTDDI_VERSION >= NTDDI_WS03)
13966 IoInitializeThreadedDpcRequest(
13967 _In_ PDEVICE_OBJECT DeviceObject
,
13968 _In_ PIO_DPC_ROUTINE DpcRoutine
)
13971 #pragma warning(push)
13972 #pragma warning(disable:28024)
13973 #pragma warning(disable:28128)
13975 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
13976 (PKDEFERRED_ROUTINE
) DpcRoutine
,
13979 #pragma warning(pop)
13984 /******************************************************************************
13985 * Power Management Support Functions *
13986 ******************************************************************************/
13988 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
13990 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13992 _IRQL_requires_max_(DISPATCH_LEVEL
)
13997 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
13998 _Inout_ __drv_aliasesMem
struct _IRP
*Irp
);
14000 _IRQL_requires_max_(APC_LEVEL
)
14004 PoRegisterDeviceForIdleDetection(
14005 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14006 _In_ ULONG ConservationIdleTime
,
14007 _In_ ULONG PerformanceIdleTime
,
14008 _In_ DEVICE_POWER_STATE State
);
14010 _IRQL_requires_max_(APC_LEVEL
)
14014 PoRegisterSystemState(
14015 _Inout_opt_ PVOID StateHandle
,
14016 _In_ EXECUTION_STATE Flags
);
14018 _IRQL_requires_max_(DISPATCH_LEVEL
)
14023 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14024 _In_ UCHAR MinorFunction
,
14025 _In_ POWER_STATE PowerState
,
14026 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
,
14027 _In_opt_ __drv_aliasesMem PVOID Context
,
14028 _Outptr_opt_
struct _IRP
**Irp
);
14030 _IRQL_requires_max_(DISPATCH_LEVEL
)
14035 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14036 _In_ POWER_STATE_TYPE Type
,
14037 _In_ POWER_STATE State
);
14039 _IRQL_requires_max_(DISPATCH_LEVEL
)
14044 _In_ EXECUTION_STATE Flags
);
14046 _IRQL_requires_max_(DISPATCH_LEVEL
)
14050 PoStartNextPowerIrp(
14051 _Inout_
struct _IRP
*Irp
);
14053 _IRQL_requires_max_(APC_LEVEL
)
14057 PoUnregisterSystemState(
14058 _Inout_ PVOID StateHandle
);
14063 PoRequestShutdownEvent(
14066 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14068 #if (NTDDI_VERSION >= NTDDI_VISTA)
14070 _IRQL_requires_max_(DISPATCH_LEVEL
)
14075 _Inout_
struct _IRP
*Irp
);
14077 _IRQL_requires_max_(DISPATCH_LEVEL
)
14082 _In_
struct _IRP
*Irp
);
14084 _IRQL_requires_max_(APC_LEVEL
)
14088 PoRegisterPowerSettingCallback(
14089 _In_opt_ PDEVICE_OBJECT DeviceObject
,
14090 _In_ LPCGUID SettingGuid
,
14091 _In_ PPOWER_SETTING_CALLBACK Callback
,
14092 _In_opt_ PVOID Context
,
14093 _Outptr_opt_ PVOID
*Handle
);
14095 _IRQL_requires_max_(APC_LEVEL
)
14099 PoUnregisterPowerSettingCallback(
14100 _Inout_ PVOID Handle
);
14102 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14104 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14109 _Inout_ PULONG IdlePointer
);
14110 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14112 #if (NTDDI_VERSION >= NTDDI_WIN7)
14118 _Inout_ PULONG IdlePointer
);
14124 _Inout_ PULONG IdlePointer
);
14126 _IRQL_requires_max_(DISPATCH_LEVEL
)
14130 PoQueryWatchdogTime(
14131 _In_ PDEVICE_OBJECT Pdo
,
14132 _Out_ PULONG SecondsRemaining
);
14134 _IRQL_requires_max_(APC_LEVEL
)
14138 PoDeletePowerRequest(
14139 _Inout_ PVOID PowerRequest
);
14141 _IRQL_requires_max_(DISPATCH_LEVEL
)
14146 _Inout_ PVOID PowerRequest
,
14147 _In_ POWER_REQUEST_TYPE Type
);
14149 _IRQL_requires_max_(DISPATCH_LEVEL
)
14153 PoClearPowerRequest(
14154 _Inout_ PVOID PowerRequest
,
14155 _In_ POWER_REQUEST_TYPE Type
);
14157 _IRQL_requires_max_(APC_LEVEL
)
14161 PoCreatePowerRequest(
14162 _Outptr_ PVOID
*PowerRequest
,
14163 _In_ PDEVICE_OBJECT DeviceObject
,
14164 _In_opt_ PCOUNTED_REASON_CONTEXT Context
);
14166 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14168 /******************************************************************************
14169 * Executive Functions *
14170 ******************************************************************************/
14172 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
14173 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
14174 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
14176 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
14177 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
14178 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
14179 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
14181 #define ExInitializeSListHead InitializeSListHead
14183 #if defined(_NTHAL_) && defined(_X86_)
14188 ExiAcquireFastMutex(
14189 IN OUT PFAST_MUTEX FastMutex
);
14194 ExiReleaseFastMutex(
14195 IN OUT PFAST_MUTEX FastMutex
);
14200 ExiTryToAcquireFastMutex(
14201 IN OUT PFAST_MUTEX FastMutex
);
14203 #define ExAcquireFastMutex ExiAcquireFastMutex
14204 #define ExReleaseFastMutex ExiReleaseFastMutex
14205 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
14209 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14211 _IRQL_raises_(APC_LEVEL
)
14212 _IRQL_saves_global_(OldIrql
, FastMutex
)
14216 ExAcquireFastMutex(
14217 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14218 PFAST_MUTEX FastMutex
);
14220 _IRQL_requires_(APC_LEVEL
)
14221 _IRQL_restores_global_(OldIrql
, FastMutex
)
14225 ExReleaseFastMutex(
14226 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14227 PFAST_MUTEX FastMutex
);
14229 _Must_inspect_result_
14230 _Success_(return!=FALSE
)
14231 _IRQL_raises_(APC_LEVEL
)
14232 _IRQL_saves_global_(OldIrql
, FastMutex
)
14236 ExTryToAcquireFastMutex(
14237 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14238 PFAST_MUTEX FastMutex
);
14240 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14242 #endif /* defined(_NTHAL_) && defined(_X86_) */
14245 #define ExInterlockedAddUlong ExfInterlockedAddUlong
14246 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
14247 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
14248 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
14249 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
14250 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
14251 #endif /* defined(_X86_) */
14253 #if defined(_WIN64)
14255 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
14256 defined(_NTHAL_) || defined(_NTOSP_)
14259 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
);
14263 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
)
14265 return (USHORT
)(ListHead
->Alignment
& 0xffff);
14271 ExpInterlockedFlushSList(
14272 PSLIST_HEADER ListHead
);
14276 ExpInterlockedPopEntrySList(
14277 _Inout_ PSLIST_HEADER ListHead
);
14281 ExpInterlockedPushEntrySList(
14282 _Inout_ PSLIST_HEADER ListHead
,
14283 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
14285 #define ExInterlockedFlushSList(Head) \
14286 ExpInterlockedFlushSList(Head)
14287 #define ExInterlockedPopEntrySList(Head, Lock) \
14288 ExpInterlockedPopEntrySList(Head)
14289 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
14290 ExpInterlockedPushEntrySList(Head, Entry)
14292 #else /* !defined(_WIN64) */
14294 #ifdef NONAMELESSUNION
14295 #define ExQueryDepthSList(listhead) (listhead)->s.Depth
14297 #define ExQueryDepthSList(listhead) (listhead)->Depth
14303 ExInterlockedFlushSList(
14304 _Inout_ PSLIST_HEADER ListHead
);
14306 #endif /* !defined(_WIN64) */
14308 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
14313 ExInterlockedPopEntrySList(
14314 _Inout_ PSLIST_HEADER ListHead
,
14315 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14320 ExInterlockedPushEntrySList(
14321 _Inout_ PSLIST_HEADER ListHead
,
14322 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
14323 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14325 _IRQL_requires_max_(APC_LEVEL
)
14329 ExAllocateFromPagedLookasideList(
14330 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
14332 _IRQL_requires_max_(APC_LEVEL
)
14336 ExFreeToPagedLookasideList(
14337 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14340 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
14342 #if !defined(_WIN64)
14343 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
14344 InterlockedPopEntrySList(_ListHead)
14345 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
14346 InterlockedPushEntrySList(_ListHead, _ListEntry)
14349 _IRQL_requires_max_(APC_LEVEL
)
14352 ExAllocateFromPagedLookasideList(
14353 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
)
14357 Lookaside
->L
.TotalAllocates
++;
14358 #ifdef NONAMELESSUNION
14359 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
14360 if (Entry
== NULL
) {
14361 Lookaside
->L
.u2
.AllocateMisses
++;
14362 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
14366 #else /* NONAMELESSUNION */
14367 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
14368 if (Entry
== NULL
) {
14369 Lookaside
->L
.AllocateMisses
++;
14370 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
14374 #endif /* NONAMELESSUNION */
14378 _IRQL_requires_max_(APC_LEVEL
)
14381 ExFreeToPagedLookasideList(
14382 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14385 Lookaside
->L
.TotalFrees
++;
14386 #ifdef NONAMELESSUNION
14387 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
14388 Lookaside
->L
.u3
.FreeMisses
++;
14389 (Lookaside
->L
.u5
.Free
)(Entry
);
14391 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
14393 #else /* NONAMELESSUNION */
14394 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
14395 Lookaside
->L
.FreeMisses
++;
14396 (Lookaside
->L
.Free
)(Entry
);
14398 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
14400 #endif /* NONAMELESSUNION */
14403 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
14406 /* ERESOURCE_THREAD
14407 * ExGetCurrentResourceThread(
14410 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
14412 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
14415 * ExInitializeWorkItem(
14416 * IN PWORK_QUEUE_ITEM Item,
14417 * IN PWORKER_THREAD_ROUTINE Routine,
14418 * IN PVOID Context)
14420 #define ExInitializeWorkItem(Item, Routine, Context) \
14422 (Item)->WorkerRoutine = Routine; \
14423 (Item)->Parameter = Context; \
14424 (Item)->List.Flink = NULL; \
14429 ExInitializeFastMutex(
14430 _Out_ PFAST_MUTEX FastMutex
)
14432 FastMutex
->Count
= FM_LOCK_BIT
;
14433 FastMutex
->Owner
= NULL
;
14434 FastMutex
->Contention
= 0;
14435 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
14440 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14441 _IRQL_requires_max_(APC_LEVEL
)
14442 _Requires_lock_held_(_Global_critical_region_
)
14446 ExAcquireFastMutexUnsafe(
14447 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14448 PFAST_MUTEX FastMutex
);
14450 _IRQL_requires_max_(APC_LEVEL
)
14451 _Requires_lock_held_(_Global_critical_region_
)
14455 ExReleaseFastMutexUnsafe(
14456 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14457 PFAST_MUTEX FastMutex
);
14459 _Requires_lock_held_(_Global_critical_region_
)
14460 _Requires_lock_not_held_(*Resource
)
14461 _When_(Wait
!=0, _Acquires_exclusive_lock_(*Resource
))
14462 _IRQL_requires_max_(APC_LEVEL
)
14463 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14464 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14468 ExAcquireResourceExclusiveLite(
14469 _Inout_ PERESOURCE Resource
,
14470 _In_ _Literal_ BOOLEAN Wait
);
14472 _IRQL_requires_max_(APC_LEVEL
)
14473 _Requires_lock_held_(_Global_critical_region_
)
14474 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14475 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14479 ExAcquireResourceSharedLite(
14480 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14481 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
14482 PERESOURCE Resource
,
14483 _In_ BOOLEAN Wait
);
14485 _IRQL_requires_max_(APC_LEVEL
)
14486 _Requires_lock_held_(_Global_critical_region_
)
14487 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14488 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14492 ExAcquireSharedStarveExclusive(
14493 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14494 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
14495 PERESOURCE Resource
,
14496 _In_ BOOLEAN Wait
);
14498 _IRQL_requires_max_(APC_LEVEL
)
14499 _Requires_lock_held_(_Global_critical_region_
)
14500 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14501 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14505 ExAcquireSharedWaitForExclusive(
14506 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14507 _When_(return!=0, _Acquires_lock_(*_Curr_
))
14508 PERESOURCE Resource
,
14509 _In_ BOOLEAN Wait
);
14511 __drv_preferredFunction("ExAllocatePoolWithTag",
14512 "No tag interferes with debugging.")
14513 __drv_allocatesMem(Mem
)
14514 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14515 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14516 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14517 __drv_reportError("Must succeed pool allocations are forbidden. "
14518 "Allocation failures cause a system crash"))
14519 _When_((PoolType
& (NonPagedPoolMustSucceed
|
14520 POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14521 _Post_maybenull_ _Must_inspect_result_
)
14522 _When_((PoolType
& (NonPagedPoolMustSucceed
|
14523 POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14525 _Post_writable_byte_size_(NumberOfBytes
)
14530 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
14531 _In_ SIZE_T NumberOfBytes
);
14533 __drv_preferredFunction("ExAllocatePoolWithQuotaTag",
14534 "No tag interferes with debugging.")
14535 __drv_allocatesMem(Mem
)
14536 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14537 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14538 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14539 __drv_reportError("Must succeed pool allocations are forbidden. "
14540 "Allocation failures cause a system crash"))
14541 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
14542 _Post_maybenull_ _Must_inspect_result_
)
14543 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
14544 _Post_writable_byte_size_(NumberOfBytes
)
14548 ExAllocatePoolWithQuota(
14549 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
14550 _In_ SIZE_T NumberOfBytes
);
14552 __drv_allocatesMem(Mem
)
14553 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14554 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14555 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14556 __drv_reportError("Must succeed pool allocations are forbidden. "
14557 "Allocation failures cause a system crash"))
14558 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
14559 _Post_maybenull_ _Must_inspect_result_
)
14560 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
14561 _Post_writable_byte_size_(NumberOfBytes
)
14565 ExAllocatePoolWithQuotaTag(
14566 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
14567 _In_ SIZE_T NumberOfBytes
,
14570 #ifndef POOL_TAGGING
14571 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
14574 __drv_allocatesMem(Mem
)
14575 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14576 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14577 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14578 __drv_reportError("Must succeed pool allocations are forbidden. "
14579 "Allocation failures cause a system crash"))
14580 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14581 _Post_maybenull_ _Must_inspect_result_
)
14582 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14584 _Post_writable_byte_size_(NumberOfBytes
)
14585 _Function_class_(ALLOCATE_FUNCTION
)
14589 ExAllocatePoolWithTag(
14590 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
14591 _In_ SIZE_T NumberOfBytes
,
14594 #ifndef POOL_TAGGING
14595 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
14598 __drv_allocatesMem(Mem
)
14599 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14600 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14601 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14602 __drv_reportError("Must succeed pool allocations are forbidden. "
14603 "Allocation failures cause a system crash"))
14604 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14605 _Post_maybenull_ _Must_inspect_result_
)
14606 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14608 _Post_writable_byte_size_(NumberOfBytes
)
14612 ExAllocatePoolWithTagPriority(
14613 _In_
__drv_strictTypeMatch(__drv_typeCond
) POOL_TYPE PoolType
,
14614 _In_ SIZE_T NumberOfBytes
,
14616 _In_
__drv_strictTypeMatch(__drv_typeExpr
) EX_POOL_PRIORITY Priority
);
14618 _IRQL_requires_max_(DISPATCH_LEVEL
)
14622 ExConvertExclusiveToSharedLite(
14623 _Inout_
_Requires_lock_held_(*_Curr_
) PERESOURCE Resource
);
14625 _IRQL_requires_max_(APC_LEVEL
)
14630 _Outptr_ PCALLBACK_OBJECT
*CallbackObject
,
14631 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
14632 _In_ BOOLEAN Create
,
14633 _In_ BOOLEAN AllowMultipleCallbacks
);
14638 ExDeleteNPagedLookasideList(
14639 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
);
14641 _IRQL_requires_max_(APC_LEVEL
)
14645 ExDeletePagedLookasideList(
14646 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
14648 _IRQL_requires_max_(DISPATCH_LEVEL
)
14652 ExDeleteResourceLite(
14653 _Inout_ PERESOURCE Resource
);
14655 _IRQL_requires_max_(DISPATCH_LEVEL
)
14656 _Function_class_(FREE_FUNCTION
)
14661 _In_
__drv_freesMem(Mem
) PVOID P
);
14663 _IRQL_requires_max_(DISPATCH_LEVEL
)
14668 _In_
__drv_freesMem(Mem
) PVOID P
,
14671 _IRQL_requires_max_(DISPATCH_LEVEL
)
14675 ExGetExclusiveWaiterCount(
14676 _In_ PERESOURCE Resource
);
14678 _IRQL_requires_max_(DISPATCH_LEVEL
)
14682 ExGetPreviousMode(VOID
);
14684 _IRQL_requires_max_(DISPATCH_LEVEL
)
14688 ExGetSharedWaiterCount(
14689 _In_ PERESOURCE Resource
);
14691 _IRQL_requires_max_(DISPATCH_LEVEL
)
14695 ExInitializeNPagedLookasideList(
14696 _Out_ PNPAGED_LOOKASIDE_LIST Lookaside
,
14697 _In_opt_ PALLOCATE_FUNCTION Allocate
,
14698 _In_opt_ PFREE_FUNCTION Free
,
14702 _In_ USHORT Depth
);
14704 _IRQL_requires_max_(APC_LEVEL
)
14708 ExInitializePagedLookasideList(
14709 _Out_ PPAGED_LOOKASIDE_LIST Lookaside
,
14710 _In_opt_ PALLOCATE_FUNCTION Allocate
,
14711 _In_opt_ PFREE_FUNCTION Free
,
14715 _In_ USHORT Depth
);
14717 _IRQL_requires_max_(DISPATCH_LEVEL
)
14721 ExInitializeResourceLite(
14722 _Out_ PERESOURCE Resource
);
14727 ExInterlockedAddLargeInteger(
14728 _Inout_ PLARGE_INTEGER Addend
,
14729 _In_ LARGE_INTEGER Increment
,
14730 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14732 #if defined(_WIN64)
14733 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
14734 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
14736 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
14737 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
14743 ExInterlockedAddUlong(
14744 _Inout_ PULONG Addend
,
14745 _In_ ULONG Increment
,
14746 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14748 #if defined(_AMD64_) || defined(_IA64_)
14750 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
14751 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
14753 #elif defined(_X86_)
14758 ExfInterlockedCompareExchange64(
14759 _Inout_ _Interlocked_operand_ LONGLONG
volatile *Destination
,
14760 _In_ PLONGLONG Exchange
,
14761 _In_ PLONGLONG Comperand
);
14763 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
14764 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
14771 ExInterlockedCompareExchange64(
14772 IN OUT LONGLONG
volatile *Destination
,
14773 IN PLONGLONG Exchange
,
14774 IN PLONGLONG Comparand
,
14775 IN PKSPIN_LOCK Lock
);
14777 #endif /* defined(_AMD64_) || defined(_IA64_) */
14782 ExInterlockedInsertHeadList(
14783 _Inout_ PLIST_ENTRY ListHead
,
14784 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
14785 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14790 ExInterlockedInsertTailList(
14791 _Inout_ PLIST_ENTRY ListHead
,
14792 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
14793 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14798 ExInterlockedPopEntryList(
14799 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
14800 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14805 ExInterlockedPushEntryList(
14806 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
14807 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
14808 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14813 ExInterlockedRemoveHeadList(
14814 _Inout_ PLIST_ENTRY ListHead
,
14815 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14817 _IRQL_requires_max_(PASSIVE_LEVEL
)
14821 ExIsProcessorFeaturePresent(
14822 _In_ ULONG ProcessorFeature
);
14824 _IRQL_requires_max_(DISPATCH_LEVEL
)
14828 ExIsResourceAcquiredExclusiveLite(
14829 _In_ PERESOURCE Resource
);
14831 _IRQL_requires_max_(DISPATCH_LEVEL
)
14835 ExIsResourceAcquiredSharedLite(
14836 _In_ PERESOURCE Resource
);
14838 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
14843 ExLocalTimeToSystemTime(
14844 _In_ PLARGE_INTEGER LocalTime
,
14845 _Out_ PLARGE_INTEGER SystemTime
);
14847 _IRQL_requires_max_(DISPATCH_LEVEL
)
14852 _In_ PCALLBACK_OBJECT CallbackObject
,
14853 _In_opt_ PVOID Argument1
,
14854 _In_opt_ PVOID Argument2
);
14856 _IRQL_requires_max_(DISPATCH_LEVEL
)
14861 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
,
14862 __drv_strictTypeMatch(__drv_typeExpr
) _In_ WORK_QUEUE_TYPE QueueType
);
14864 _IRQL_requires_max_(APC_LEVEL
)
14870 _In_ NTSTATUS Status
);
14872 _IRQL_requires_max_(APC_LEVEL
)
14876 ExRegisterCallback(
14877 _Inout_ PCALLBACK_OBJECT CallbackObject
,
14878 _In_ PCALLBACK_FUNCTION CallbackFunction
,
14879 _In_opt_ PVOID CallbackContext
);
14881 _IRQL_requires_max_(DISPATCH_LEVEL
)
14885 ExReinitializeResourceLite(
14886 _Inout_ PERESOURCE Resource
);
14888 _IRQL_requires_max_(DISPATCH_LEVEL
)
14889 _Requires_lock_held_(_Global_critical_region_
)
14893 ExReleaseResourceForThreadLite(
14894 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14895 PERESOURCE Resource
,
14896 _In_ ERESOURCE_THREAD ResourceThreadId
);
14898 _Requires_lock_held_(_Global_critical_region_
)
14899 _Requires_lock_held_(*Resource
)
14900 _Releases_lock_(*Resource
)
14901 _IRQL_requires_max_(DISPATCH_LEVEL
)
14905 ExReleaseResourceLite(
14906 _Inout_ PERESOURCE Resource
);
14908 _IRQL_requires_max_(DISPATCH_LEVEL
)
14912 ExSetResourceOwnerPointer(
14913 _Inout_ PERESOURCE Resource
,
14914 _In_ PVOID OwnerPointer
);
14916 _IRQL_requires_max_(APC_LEVEL
)
14920 ExSetTimerResolution(
14921 _In_ ULONG DesiredTime
,
14922 _In_ BOOLEAN SetResolution
);
14927 ExSystemTimeToLocalTime(
14928 _In_ PLARGE_INTEGER SystemTime
,
14929 _Out_ PLARGE_INTEGER LocalTime
);
14931 _IRQL_requires_max_(APC_LEVEL
)
14935 ExUnregisterCallback(
14936 _Inout_ PVOID CbRegistration
);
14938 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14940 #if (NTDDI_VERSION >= NTDDI_WINXP)
14942 _Must_inspect_result_
14943 _Post_satisfies_(return == 0 || return == 1)
14947 ExAcquireRundownProtection(
14948 _Inout_ PEX_RUNDOWN_REF RunRef
);
14953 ExInitializeRundownProtection(
14954 _Out_ PEX_RUNDOWN_REF RunRef
);
14959 ExReInitializeRundownProtection(
14960 _Inout_ PEX_RUNDOWN_REF RunRef
);
14965 ExReleaseRundownProtection(
14966 _Inout_ PEX_RUNDOWN_REF RunRef
);
14971 ExRundownCompleted(
14972 _Out_ PEX_RUNDOWN_REF RunRef
);
14978 __drv_strictTypeMatch(__drv_typeExpr
) _In_ SUITE_TYPE SuiteType
);
14983 ExWaitForRundownProtectionRelease(
14984 _Inout_ PEX_RUNDOWN_REF RunRef
);
14985 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14987 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
14989 _Must_inspect_result_
14990 _Post_satisfies_(return == 0 || return == 1)
14994 ExAcquireRundownProtectionEx(
14995 _Inout_ PEX_RUNDOWN_REF RunRef
,
15001 ExReleaseRundownProtectionEx(
15002 _Inout_ PEX_RUNDOWN_REF RunRef
,
15005 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
15007 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
15009 _Must_inspect_result_
15010 _IRQL_requires_max_(APC_LEVEL
)
15012 PEX_RUNDOWN_REF_CACHE_AWARE
15014 ExAllocateCacheAwareRundownProtection(
15015 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15016 _In_ ULONG PoolTag
);
15018 _IRQL_requires_max_(APC_LEVEL
)
15022 ExSizeOfRundownProtectionCacheAware(VOID
);
15024 _IRQL_requires_max_(APC_LEVEL
)
15025 _Acquires_lock_(_Global_critical_region_
)
15029 ExEnterCriticalRegionAndAcquireResourceShared(
15030 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_shared_lock_(*_Curr_
)
15031 PERESOURCE Resource
);
15033 _IRQL_requires_max_(APC_LEVEL
)
15034 _Acquires_lock_(_Global_critical_region_
)
15038 ExEnterCriticalRegionAndAcquireResourceExclusive(
15039 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)
15040 PERESOURCE Resource
);
15042 _IRQL_requires_max_(APC_LEVEL
)
15043 _Acquires_lock_(_Global_critical_region_
)
15047 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
15048 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15049 PERESOURCE Resource
);
15051 _IRQL_requires_max_(DISPATCH_LEVEL
)
15052 _Releases_lock_(_Global_critical_region_
)
15056 ExReleaseResourceAndLeaveCriticalRegion(
15057 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15058 PERESOURCE Resource
);
15060 _IRQL_requires_max_(APC_LEVEL
)
15064 ExInitializeRundownProtectionCacheAware(
15065 _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15066 _In_ SIZE_T RunRefSize
);
15068 _IRQL_requires_max_(APC_LEVEL
)
15072 ExFreeCacheAwareRundownProtection(
15073 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15075 _Must_inspect_result_
15076 _Post_satisfies_(return == 0 || return == 1)
15080 ExAcquireRundownProtectionCacheAware(
15081 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15086 ExReleaseRundownProtectionCacheAware(
15087 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15089 _Must_inspect_result_
15090 _Post_satisfies_(return == 0 || return == 1)
15094 ExAcquireRundownProtectionCacheAwareEx(
15095 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15101 ExReleaseRundownProtectionCacheAwareEx(
15102 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
15108 ExWaitForRundownProtectionReleaseCacheAware(
15109 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
15114 ExReInitializeRundownProtectionCacheAware(
15115 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15120 ExRundownCompletedCacheAware(
15121 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15123 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
15125 #if (NTDDI_VERSION >= NTDDI_VISTA)
15127 _IRQL_requires_max_(DISPATCH_LEVEL
)
15131 ExInitializeLookasideListEx(
15132 _Out_ PLOOKASIDE_LIST_EX Lookaside
,
15133 _In_opt_ PALLOCATE_FUNCTION_EX Allocate
,
15134 _In_opt_ PFREE_FUNCTION_EX Free
,
15135 _In_ POOL_TYPE PoolType
,
15139 _In_ USHORT Depth
);
15141 _IRQL_requires_max_(DISPATCH_LEVEL
)
15145 ExDeleteLookasideListEx(
15146 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15148 _IRQL_requires_max_(DISPATCH_LEVEL
)
15152 ExFlushLookasideListEx(
15153 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15155 _Must_inspect_result_
15156 _IRQL_requires_max_(DISPATCH_LEVEL
)
15159 ExAllocateFromLookasideListEx(
15160 _Inout_ PLOOKASIDE_LIST_EX Lookaside
)
15164 Lookaside
->L
.TotalAllocates
+= 1;
15165 #ifdef NONAMELESSUNION
15166 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15167 if (Entry
== NULL
) {
15168 Lookaside
->L
.u2
.AllocateMisses
+= 1;
15169 Entry
= (Lookaside
->L
.u4
.AllocateEx
)(Lookaside
->L
.Type
,
15174 #else /* NONAMELESSUNION */
15175 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15176 if (Entry
== NULL
) {
15177 Lookaside
->L
.AllocateMisses
+= 1;
15178 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
15183 #endif /* NONAMELESSUNION */
15187 _IRQL_requires_max_(DISPATCH_LEVEL
)
15190 ExFreeToLookasideListEx(
15191 _Inout_ PLOOKASIDE_LIST_EX Lookaside
,
15194 Lookaside
->L
.TotalFrees
+= 1;
15195 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15196 Lookaside
->L
.FreeMisses
+= 1;
15197 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
15199 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15204 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15206 #if (NTDDI_VERSION >= NTDDI_WIN7)
15208 _IRQL_requires_max_(DISPATCH_LEVEL
)
15212 ExSetResourceOwnerPointerEx(
15213 _Inout_ PERESOURCE Resource
,
15214 _In_ PVOID OwnerPointer
,
15217 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
15219 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15221 _IRQL_requires_max_(DISPATCH_LEVEL
)
15222 static __inline PVOID
15223 ExAllocateFromNPagedLookasideList(
15224 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
)
15228 Lookaside
->L
.TotalAllocates
++;
15229 #ifdef NONAMELESSUNION
15230 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15231 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
,
15232 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15234 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15236 if (Entry
== NULL
) {
15237 Lookaside
->L
.u2
.AllocateMisses
++;
15238 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
15242 #else /* NONAMELESSUNION */
15243 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15244 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
15245 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15247 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15249 if (Entry
== NULL
) {
15250 Lookaside
->L
.AllocateMisses
++;
15251 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
15255 #endif /* NONAMELESSUNION */
15259 _IRQL_requires_max_(DISPATCH_LEVEL
)
15260 static __inline VOID
15261 ExFreeToNPagedLookasideList(
15262 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
,
15265 Lookaside
->L
.TotalFrees
++;
15266 #ifdef NONAMELESSUNION
15267 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
15268 Lookaside
->L
.u3
.FreeMisses
++;
15269 (Lookaside
->L
.u5
.Free
)(Entry
);
15271 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15272 ExInterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
,
15273 (PSLIST_ENTRY
)Entry
,
15274 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15276 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
15279 #else /* NONAMELESSUNION */
15280 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15281 Lookaside
->L
.FreeMisses
++;
15282 (Lookaside
->L
.Free
)(Entry
);
15284 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15285 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
15286 (PSLIST_ENTRY
)Entry
,
15287 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15289 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15292 #endif /* NONAMELESSUNION */
15295 /******************************************************************************
15296 * Object Manager Functions *
15297 ******************************************************************************/
15299 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15300 _IRQL_requires_max_(DISPATCH_LEVEL
)
15304 ObfDereferenceObject(
15305 _In_ PVOID Object
);
15306 #define ObDereferenceObject ObfDereferenceObject
15308 _IRQL_requires_max_(APC_LEVEL
)
15312 ObGetObjectSecurity(
15314 _Out_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
15315 _Out_ PBOOLEAN MemoryAllocated
);
15317 _IRQL_requires_max_(DISPATCH_LEVEL
)
15321 ObfReferenceObject(
15322 _In_ PVOID Object
);
15323 #define ObReferenceObject ObfReferenceObject
15325 _IRQL_requires_max_(APC_LEVEL
)
15329 ObReferenceObjectByHandle(
15330 _In_ HANDLE Handle
,
15331 _In_ ACCESS_MASK DesiredAccess
,
15332 _In_opt_ POBJECT_TYPE ObjectType
,
15333 _In_ KPROCESSOR_MODE AccessMode
,
15334 _Out_ PVOID
*Object
,
15335 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15337 _IRQL_requires_max_(DISPATCH_LEVEL
)
15341 ObReferenceObjectByPointer(
15343 _In_ ACCESS_MASK DesiredAccess
,
15344 _In_opt_ POBJECT_TYPE ObjectType
,
15345 _In_ KPROCESSOR_MODE AccessMode
);
15347 _IRQL_requires_max_(APC_LEVEL
)
15351 ObReleaseObjectSecurity(
15352 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
15353 _In_ BOOLEAN MemoryAllocated
);
15354 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15356 #if (NTDDI_VERSION >= NTDDI_VISTA)
15360 ObDereferenceObjectDeferDelete(
15361 _In_ PVOID Object
);
15364 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
15368 ObRegisterCallbacks(
15369 _In_ POB_CALLBACK_REGISTRATION CallbackRegistration
,
15370 _Outptr_ PVOID
*RegistrationHandle
);
15375 ObUnRegisterCallbacks(
15376 _In_ PVOID RegistrationHandle
);
15381 ObGetFilterVersion(VOID
);
15383 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
15385 #if (NTDDI_VERSION >= NTDDI_WIN7)
15386 _IRQL_requires_max_(APC_LEVEL
)
15390 ObReferenceObjectByHandleWithTag(
15391 _In_ HANDLE Handle
,
15392 _In_ ACCESS_MASK DesiredAccess
,
15393 _In_opt_ POBJECT_TYPE ObjectType
,
15394 _In_ KPROCESSOR_MODE AccessMode
,
15396 _Out_ PVOID
*Object
,
15397 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15399 _IRQL_requires_max_(DISPATCH_LEVEL
)
15403 ObfReferenceObjectWithTag(
15407 _IRQL_requires_max_(DISPATCH_LEVEL
)
15411 ObReferenceObjectByPointerWithTag(
15413 _In_ ACCESS_MASK DesiredAccess
,
15414 _In_opt_ POBJECT_TYPE ObjectType
,
15415 _In_ KPROCESSOR_MODE AccessMode
,
15418 _IRQL_requires_max_(DISPATCH_LEVEL
)
15422 ObfDereferenceObjectWithTag(
15429 ObDereferenceObjectDeferDeleteWithTag(
15433 #define ObDereferenceObject ObfDereferenceObject
15434 #define ObReferenceObject ObfReferenceObject
15435 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
15436 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
15437 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15439 /******************************************************************************
15440 * Process Manager Functions *
15441 ******************************************************************************/
15446 PsWrapApcWow64Thread(
15447 _Inout_ PVOID
*ApcContext
,
15448 _Inout_ PVOID
*ApcRoutine
);
15452 * PsGetCurrentProcess(VOID)
15454 #define PsGetCurrentProcess IoGetCurrentProcess
15456 #if !defined(_PSGETCURRENTTHREAD_)
15457 #define _PSGETCURRENTTHREAD_
15458 _IRQL_requires_max_(DISPATCH_LEVEL
)
15462 PsGetCurrentThread(VOID
)
15464 return (PETHREAD
)KeGetCurrentThread();
15466 #endif /* !_PSGETCURRENTTHREAD_ */
15469 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15471 _IRQL_requires_max_(APC_LEVEL
)
15472 _Post_satisfies_(return <= 0)
15473 _Must_inspect_result_
15477 PsCreateSystemThread(
15478 _Out_ PHANDLE ThreadHandle
,
15479 _In_ ULONG DesiredAccess
,
15480 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
15481 _In_opt_ HANDLE ProcessHandle
,
15482 _Out_opt_ PCLIENT_ID ClientId
,
15483 _In_ PKSTART_ROUTINE StartRoutine
,
15484 _In_opt_
_When_(return==0, __drv_aliasesMem
) PVOID StartContext
);
15486 _IRQL_requires_max_(PASSIVE_LEVEL
)
15490 PsTerminateSystemThread(
15491 _In_ NTSTATUS ExitStatus
);
15493 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15496 /******************************************************************************
15497 * WMI Library Support Functions *
15498 ******************************************************************************/
15501 #if (NTDDI_VERSION >= NTDDI_WINXP)
15502 _IRQL_requires_max_(HIGH_LEVEL
)
15507 _In_ TRACEHANDLE LoggerHandle
,
15508 _In_ ULONG MessageFlags
,
15509 _In_ LPGUID MessageGuid
,
15510 _In_ USHORT MessageNumber
,
15513 #endif /* RUN_WPP */
15515 #if (NTDDI_VERSION >= NTDDI_WINXP)
15517 _IRQL_requires_max_(APC_LEVEL
)
15521 WmiQueryTraceInformation(
15522 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
15523 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
15524 _In_ ULONG TraceInformationLength
,
15525 _Out_opt_ PULONG RequiredLength
,
15526 _In_opt_ PVOID Buffer
);
15529 /* FIXME: Get va_list from where? */
15530 _IRQL_requires_max_(HIGH_LEVEL
)
15535 _In_ TRACEHANDLE LoggerHandle
,
15536 _In_ ULONG MessageFlags
,
15537 _In_ LPGUID MessageGuid
,
15538 _In_ USHORT MessageNumber
,
15539 _In_
va_list MessageArgList
);
15542 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15544 #ifndef TRACE_INFORMATION_CLASS_DEFINE
15546 #if (NTDDI_VERSION >= NTDDI_WINXP)
15547 _IRQL_requires_max_(APC_LEVEL
)
15551 WmiQueryTraceInformation(
15552 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
15553 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
15554 _In_ ULONG TraceInformationLength
,
15555 _Out_opt_ PULONG RequiredLength
,
15556 _In_opt_ PVOID Buffer
);
15559 #define TRACE_INFORMATION_CLASS_DEFINE
15561 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
15563 #if (NTDDI_VERSION >= NTDDI_VISTA)
15565 _IRQL_requires_max_(PASSIVE_LEVEL
)
15570 _In_ LPCGUID ProviderId
,
15571 _In_opt_ PETWENABLECALLBACK EnableCallback
,
15572 _In_opt_ PVOID CallbackContext
,
15573 _Out_ PREGHANDLE RegHandle
);
15575 _IRQL_requires_max_(PASSIVE_LEVEL
)
15580 _In_ REGHANDLE RegHandle
);
15582 _IRQL_requires_max_(HIGH_LEVEL
)
15587 _In_ REGHANDLE RegHandle
,
15588 _In_ PCEVENT_DESCRIPTOR EventDescriptor
);
15590 _IRQL_requires_max_(HIGH_LEVEL
)
15594 EtwProviderEnabled(
15595 _In_ REGHANDLE RegHandle
,
15597 _In_ ULONGLONG Keyword
);
15599 _When_(ControlCode
==EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(HIGH_LEVEL
))
15600 _When_(ControlCode
!=EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(APC_LEVEL
))
15604 EtwActivityIdControl(
15605 _In_ ULONG ControlCode
,
15606 _Inout_updates_bytes_(sizeof(GUID
)) LPGUID ActivityId
);
15608 _IRQL_requires_max_(HIGH_LEVEL
)
15613 _In_ REGHANDLE RegHandle
,
15614 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15615 _In_opt_ LPCGUID ActivityId
,
15616 _In_ ULONG UserDataCount
,
15617 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15619 _IRQL_requires_max_(HIGH_LEVEL
)
15624 _In_ REGHANDLE RegHandle
,
15625 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15626 _In_opt_ LPCGUID ActivityId
,
15627 _In_opt_ LPCGUID RelatedActivityId
,
15628 _In_ ULONG UserDataCount
,
15629 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15631 _IRQL_requires_max_(HIGH_LEVEL
)
15636 _In_ REGHANDLE RegHandle
,
15638 _In_ ULONGLONG Keyword
,
15639 _In_opt_ LPCGUID ActivityId
,
15640 _In_ PCWSTR String
);
15642 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15644 #if (NTDDI_VERSION >= NTDDI_WIN7)
15645 _IRQL_requires_max_(HIGH_LEVEL
)
15650 _In_ REGHANDLE RegHandle
,
15651 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15652 _In_ ULONG64 Filter
,
15654 _In_opt_ LPCGUID ActivityId
,
15655 _In_opt_ LPCGUID RelatedActivityId
,
15656 _In_ ULONG UserDataCount
,
15657 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15662 /******************************************************************************
15663 * Kernel Debugger Functions *
15664 ******************************************************************************/
15671 _In_z_ _Printf_format_string_ PCSTR Format
,
15674 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15678 DbgPrintReturnControlC(
15679 _In_z_ _Printf_format_string_ PCCH Format
,
15683 #if (NTDDI_VERSION >= NTDDI_WINXP)
15689 _In_ ULONG ComponentId
,
15691 _In_z_ _Printf_format_string_ PCSTR Format
,
15694 #ifdef _VA_LIST_DEFINED
15700 _In_ ULONG ComponentId
,
15702 _In_z_ PCCH Format
,
15708 vDbgPrintExWithPrefix(
15709 _In_z_ PCCH Prefix
,
15710 _In_ ULONG ComponentId
,
15712 _In_z_ PCCH Format
,
15715 #endif /* _VA_LIST_DEFINED */
15720 DbgQueryDebugFilterState(
15721 _In_ ULONG ComponentId
,
15727 DbgSetDebugFilterState(
15728 _In_ ULONG ComponentId
,
15730 _In_ BOOLEAN State
);
15732 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15734 #if (NTDDI_VERSION >= NTDDI_VISTA)
15737 (*PDEBUG_PRINT_CALLBACK
)(
15738 _In_ PSTRING Output
,
15739 _In_ ULONG ComponentId
,
15745 DbgSetDebugPrintCallback(
15746 _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
15747 _In_ BOOLEAN Enable
);
15749 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15751 #endif /* _DBGNT_ */
15755 #define KdPrint(_x_) DbgPrint _x_
15756 #define KdPrintEx(_x_) DbgPrintEx _x_
15757 #define vKdPrintEx(_x_) vDbgPrintEx _x_
15758 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
15759 #define KdBreakPoint() DbgBreakPoint()
15760 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
15764 #define KdPrint(_x_)
15765 #define KdPrintEx(_x_)
15766 #define vKdPrintEx(_x_)
15767 #define vKdPrintExWithPrefix(_x_)
15768 #define KdBreakPoint()
15769 #define KdBreakPointWithStatus(s)
15773 #if defined(__GNUC__)
15775 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
15776 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
15777 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
15778 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
15780 #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
15782 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
15783 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
15784 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
15785 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
15789 extern BOOLEAN KdDebuggerNotPresent
;
15790 extern BOOLEAN KdDebuggerEnabled
;
15791 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
15792 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
15796 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15801 KdDisableDebugger(VOID
);
15806 KdEnableDebugger(VOID
);
15808 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
15809 #define DbgBreakPoint __debugbreak
15811 __analysis_noreturn
15814 DbgBreakPoint(VOID
);
15817 __analysis_noreturn
15821 DbgBreakPointWithStatus(
15822 _In_ ULONG Status
);
15824 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15826 #if (NTDDI_VERSION >= NTDDI_WS03)
15830 KdRefreshDebuggerNotPresent(VOID
);
15833 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
15838 _In_ KD_OPTION Option
,
15839 _In_opt_ ULONG InBufferBytes
,
15840 _In_ PVOID InBuffer
,
15841 _In_opt_ ULONG OutBufferBytes
,
15842 _Out_ PVOID OutBuffer
,
15843 _Out_opt_ PULONG OutBufferNeeded
);
15845 /* Hardware Abstraction Layer Functions */
15847 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15849 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
15851 __drv_preferredFunction("AllocateCommonBuffer","Obsolete")
15855 HalAllocateCommonBuffer(
15856 _In_ PDMA_ADAPTER DmaAdapter
,
15858 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
15859 _In_ BOOLEAN CacheEnabled
)
15861 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
15862 PVOID commonBuffer
;
15864 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
15865 ASSERT( allocateCommonBuffer
!= NULL
);
15866 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
15867 return commonBuffer
;
15870 __drv_preferredFunction("FreeCommonBuffer","Obsolete")
15874 HalFreeCommonBuffer(
15875 _In_ PDMA_ADAPTER DmaAdapter
,
15877 _In_ PHYSICAL_ADDRESS LogicalAddress
,
15878 _In_ PVOID VirtualAddress
,
15879 _In_ BOOLEAN CacheEnabled
)
15881 PFREE_COMMON_BUFFER freeCommonBuffer
;
15883 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
15884 ASSERT( freeCommonBuffer
!= NULL
);
15885 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
15888 __drv_preferredFunction("ReadDmaCounter","Obsolete")
15893 _In_ PDMA_ADAPTER DmaAdapter
)
15895 PREAD_DMA_COUNTER readDmaCounter
;
15898 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
15899 ASSERT( readDmaCounter
!= NULL
);
15900 counter
= readDmaCounter( DmaAdapter
);
15906 HalGetDmaAlignment(
15907 _In_ PDMA_ADAPTER DmaAdapter
)
15909 PGET_DMA_ALIGNMENT getDmaAlignment
;
15912 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
15913 ASSERT( getDmaAlignment
!= NULL
);
15914 alignment
= getDmaAlignment( DmaAdapter
);
15918 #endif /* USE_DMA_MACROS ... */
15920 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15925 #include <ktmtypes.h>
15927 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
15928 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
15929 #define TRANSACTIONMANAGER_RECOVER (0x0004)
15930 #define TRANSACTIONMANAGER_RENAME (0x0008)
15931 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
15932 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
15934 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
15935 TRANSACTIONMANAGER_QUERY_INFORMATION)
15937 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
15938 TRANSACTIONMANAGER_SET_INFORMATION |\
15939 TRANSACTIONMANAGER_RECOVER |\
15940 TRANSACTIONMANAGER_RENAME |\
15941 TRANSACTIONMANAGER_CREATE_RM)
15943 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
15945 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
15946 TRANSACTIONMANAGER_GENERIC_READ |\
15947 TRANSACTIONMANAGER_GENERIC_WRITE |\
15948 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
15949 TRANSACTIONMANAGER_BIND_TRANSACTION)
15951 #define TRANSACTION_QUERY_INFORMATION (0x0001)
15952 #define TRANSACTION_SET_INFORMATION (0x0002)
15953 #define TRANSACTION_ENLIST (0x0004)
15954 #define TRANSACTION_COMMIT (0x0008)
15955 #define TRANSACTION_ROLLBACK (0x0010)
15956 #define TRANSACTION_PROPAGATE (0x0020)
15957 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
15959 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
15960 TRANSACTION_QUERY_INFORMATION |\
15963 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
15964 TRANSACTION_SET_INFORMATION |\
15965 TRANSACTION_COMMIT |\
15966 TRANSACTION_ENLIST |\
15967 TRANSACTION_ROLLBACK |\
15968 TRANSACTION_PROPAGATE |\
15971 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
15972 TRANSACTION_COMMIT |\
15973 TRANSACTION_ROLLBACK |\
15976 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
15977 TRANSACTION_GENERIC_READ |\
15978 TRANSACTION_GENERIC_WRITE |\
15979 TRANSACTION_GENERIC_EXECUTE)
15981 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
15982 STANDARD_RIGHTS_WRITE |\
15983 TRANSACTION_SET_INFORMATION |\
15984 TRANSACTION_ENLIST |\
15985 TRANSACTION_ROLLBACK |\
15986 TRANSACTION_PROPAGATE |\
15989 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
15990 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
15991 #define RESOURCEMANAGER_RECOVER (0x0004)
15992 #define RESOURCEMANAGER_ENLIST (0x0008)
15993 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
15994 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
15995 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
15997 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
15998 RESOURCEMANAGER_QUERY_INFORMATION |\
16001 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16002 RESOURCEMANAGER_SET_INFORMATION |\
16003 RESOURCEMANAGER_RECOVER |\
16004 RESOURCEMANAGER_ENLIST |\
16005 RESOURCEMANAGER_GET_NOTIFICATION |\
16006 RESOURCEMANAGER_REGISTER_PROTOCOL |\
16007 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16010 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16011 RESOURCEMANAGER_RECOVER |\
16012 RESOURCEMANAGER_ENLIST |\
16013 RESOURCEMANAGER_GET_NOTIFICATION |\
16014 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16017 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16018 RESOURCEMANAGER_GENERIC_READ |\
16019 RESOURCEMANAGER_GENERIC_WRITE |\
16020 RESOURCEMANAGER_GENERIC_EXECUTE)
16022 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
16023 #define ENLISTMENT_SET_INFORMATION (0x0002)
16024 #define ENLISTMENT_RECOVER (0x0004)
16025 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
16026 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
16028 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
16029 ENLISTMENT_QUERY_INFORMATION)
16031 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16032 ENLISTMENT_SET_INFORMATION |\
16033 ENLISTMENT_RECOVER |\
16034 ENLISTMENT_SUBORDINATE_RIGHTS |\
16035 ENLISTMENT_SUPERIOR_RIGHTS)
16037 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16038 ENLISTMENT_RECOVER |\
16039 ENLISTMENT_SUBORDINATE_RIGHTS |\
16040 ENLISTMENT_SUPERIOR_RIGHTS)
16042 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16043 ENLISTMENT_GENERIC_READ |\
16044 ENLISTMENT_GENERIC_WRITE |\
16045 ENLISTMENT_GENERIC_EXECUTE)
16047 typedef enum _TRANSACTION_OUTCOME
{
16048 TransactionOutcomeUndetermined
= 1,
16049 TransactionOutcomeCommitted
,
16050 TransactionOutcomeAborted
,
16051 } TRANSACTION_OUTCOME
;
16054 typedef enum _TRANSACTION_STATE
{
16055 TransactionStateNormal
= 1,
16056 TransactionStateIndoubt
,
16057 TransactionStateCommittedNotify
,
16058 } TRANSACTION_STATE
;
16061 typedef struct _TRANSACTION_BASIC_INFORMATION
{
16062 GUID TransactionId
;
16065 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
16067 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
16069 LARGE_INTEGER VirtualClock
;
16070 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
16072 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
16074 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
16076 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
16077 ULONG LogPathLength
;
16078 _Field_size_(LogPathLength
) WCHAR LogPath
[1];
16079 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
16081 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
16082 ULONGLONG LastRecoveredLsn
;
16083 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
16085 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
16086 ULONG IsolationLevel
;
16087 ULONG IsolationFlags
;
16088 LARGE_INTEGER Timeout
;
16090 ULONG DescriptionLength
;
16091 WCHAR Description
[1];
16092 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
16094 typedef struct _TRANSACTION_BIND_INFORMATION
{
16096 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
16098 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
16100 GUID ResourceManagerId
;
16101 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
16103 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
16104 ULONG NumberOfEnlistments
;
16105 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
16106 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
16108 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
16109 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
16110 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
16112 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
16113 GUID ResourceManagerId
;
16114 ULONG DescriptionLength
;
16115 WCHAR Description
[1];
16116 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
16118 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
16119 HANDLE IoCompletionPortHandle
;
16120 ULONG_PTR CompletionKey
;
16121 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
16123 typedef enum _KTMOBJECT_TYPE
{
16124 KTMOBJECT_TRANSACTION
,
16125 KTMOBJECT_TRANSACTION_MANAGER
,
16126 KTMOBJECT_RESOURCE_MANAGER
,
16127 KTMOBJECT_ENLISTMENT
,
16129 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
16131 typedef struct _KTMOBJECT_CURSOR
{
16133 ULONG ObjectIdCount
;
16135 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
16137 typedef enum _TRANSACTION_INFORMATION_CLASS
{
16138 TransactionBasicInformation
,
16139 TransactionPropertiesInformation
,
16140 TransactionEnlistmentInformation
,
16141 TransactionSuperiorEnlistmentInformation
16142 } TRANSACTION_INFORMATION_CLASS
;
16144 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
16145 TransactionManagerBasicInformation
,
16146 TransactionManagerLogInformation
,
16147 TransactionManagerLogPathInformation
,
16148 TransactionManagerRecoveryInformation
= 4
16149 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
16151 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
16152 ResourceManagerBasicInformation
,
16153 ResourceManagerCompletionInformation
,
16154 } RESOURCEMANAGER_INFORMATION_CLASS
;
16156 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
16158 GUID TransactionId
;
16159 GUID ResourceManagerId
;
16160 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
16162 typedef struct _ENLISTMENT_CRM_INFORMATION
{
16163 GUID CrmTransactionManagerId
;
16164 GUID CrmResourceManagerId
;
16165 GUID CrmEnlistmentId
;
16166 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
16168 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
16169 EnlistmentBasicInformation
,
16170 EnlistmentRecoveryInformation
,
16171 EnlistmentCrmInformation
16172 } ENLISTMENT_INFORMATION_CLASS
;
16174 typedef struct _TRANSACTION_LIST_ENTRY
{
16175 #if defined(__cplusplus)
16180 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
16182 typedef struct _TRANSACTION_LIST_INFORMATION
{
16183 ULONG NumberOfTransactions
;
16184 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
16185 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
16188 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
16189 _Out_ PHANDLE TransactionHandle
,
16190 _In_ ACCESS_MASK DesiredAccess
,
16191 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16192 _In_opt_ LPGUID Uow
,
16193 _In_opt_ HANDLE TmHandle
,
16194 _In_opt_ ULONG CreateOptions
,
16195 _In_opt_ ULONG IsolationLevel
,
16196 _In_opt_ ULONG IsolationFlags
,
16197 _In_opt_ PLARGE_INTEGER Timeout
,
16198 _In_opt_ PUNICODE_STRING Description
);
16201 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
16202 _Out_ PHANDLE TransactionHandle
,
16203 _In_ ACCESS_MASK DesiredAccess
,
16204 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16205 _In_opt_ LPGUID Uow
,
16206 _In_opt_ HANDLE TmHandle
);
16209 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
16210 _In_ HANDLE TransactionHandle
,
16211 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16212 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16213 _In_ ULONG TransactionInformationLength
,
16214 _Out_opt_ PULONG ReturnLength
);
16217 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
16218 _In_ HANDLE TransactionHandle
,
16219 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16220 _In_ PVOID TransactionInformation
,
16221 _In_ ULONG TransactionInformationLength
);
16224 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
16225 _In_ HANDLE TransactionHandle
,
16226 _In_ BOOLEAN Wait
);
16229 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
16230 _In_ HANDLE TransactionHandle
,
16231 _In_ BOOLEAN Wait
);
16233 #if (NTDDI_VERSION >= NTDDI_VISTA)
16235 _Must_inspect_result_
16236 _IRQL_requires_max_ (APC_LEVEL
)
16241 NtCreateTransactionManager(
16242 _Out_ PHANDLE TmHandle
,
16243 _In_ ACCESS_MASK DesiredAccess
,
16244 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16245 _In_opt_ PUNICODE_STRING LogFileName
,
16246 _In_opt_ ULONG CreateOptions
,
16247 _In_opt_ ULONG CommitStrength
);
16249 _Must_inspect_result_
16250 _IRQL_requires_max_ (APC_LEVEL
)
16255 NtOpenTransactionManager(
16256 _Out_ PHANDLE TmHandle
,
16257 _In_ ACCESS_MASK DesiredAccess
,
16258 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16259 _In_opt_ PUNICODE_STRING LogFileName
,
16260 _In_opt_ LPGUID TmIdentity
,
16261 _In_opt_ ULONG OpenOptions
);
16263 _Must_inspect_result_
16264 _IRQL_requires_max_ (APC_LEVEL
)
16269 NtRenameTransactionManager(
16270 _In_ PUNICODE_STRING LogFileName
,
16271 _In_ LPGUID ExistingTransactionManagerGuid
);
16273 _Must_inspect_result_
16274 _IRQL_requires_max_ (APC_LEVEL
)
16279 NtRollforwardTransactionManager(
16280 _In_ HANDLE TransactionManagerHandle
,
16281 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16283 _Must_inspect_result_
16284 _IRQL_requires_max_ (APC_LEVEL
)
16289 NtRecoverTransactionManager(
16290 _In_ HANDLE TransactionManagerHandle
);
16292 _Must_inspect_result_
16293 _IRQL_requires_max_ (APC_LEVEL
)
16298 NtQueryInformationTransactionManager(
16299 _In_ HANDLE TransactionManagerHandle
,
16300 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16301 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16302 _In_ ULONG TransactionManagerInformationLength
,
16303 _Out_ PULONG ReturnLength
);
16305 _Must_inspect_result_
16306 _IRQL_requires_max_ (APC_LEVEL
)
16311 NtSetInformationTransactionManager(
16312 _In_opt_ HANDLE TmHandle
,
16313 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16314 _In_reads_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16315 _In_ ULONG TransactionManagerInformationLength
);
16317 _Must_inspect_result_
16318 _IRQL_requires_max_ (APC_LEVEL
)
16323 NtEnumerateTransactionObject(
16324 _In_opt_ HANDLE RootObjectHandle
,
16325 _In_ KTMOBJECT_TYPE QueryType
,
16326 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
16327 _In_ ULONG ObjectCursorLength
,
16328 _Out_ PULONG ReturnLength
);
16330 _Must_inspect_result_
16331 _IRQL_requires_max_ (APC_LEVEL
)
16336 NtCreateTransaction(
16337 _Out_ PHANDLE TransactionHandle
,
16338 _In_ ACCESS_MASK DesiredAccess
,
16339 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16340 _In_opt_ LPGUID Uow
,
16341 _In_opt_ HANDLE TmHandle
,
16342 _In_opt_ ULONG CreateOptions
,
16343 _In_opt_ ULONG IsolationLevel
,
16344 _In_opt_ ULONG IsolationFlags
,
16345 _In_opt_ PLARGE_INTEGER Timeout
,
16346 _In_opt_ PUNICODE_STRING Description
);
16348 _Must_inspect_result_
16349 _IRQL_requires_max_ (APC_LEVEL
)
16355 _Out_ PHANDLE TransactionHandle
,
16356 _In_ ACCESS_MASK DesiredAccess
,
16357 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16359 _In_opt_ HANDLE TmHandle
);
16361 _Must_inspect_result_
16362 _IRQL_requires_max_ (APC_LEVEL
)
16367 NtQueryInformationTransaction(
16368 _In_ HANDLE TransactionHandle
,
16369 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16370 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16371 _In_ ULONG TransactionInformationLength
,
16372 _Out_opt_ PULONG ReturnLength
);
16374 _Must_inspect_result_
16375 _IRQL_requires_max_ (APC_LEVEL
)
16380 NtSetInformationTransaction(
16381 _In_ HANDLE TransactionHandle
,
16382 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16383 _In_reads_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16384 _In_ ULONG TransactionInformationLength
);
16386 _IRQL_requires_max_ (APC_LEVEL
)
16391 NtCommitTransaction(
16392 _In_ HANDLE TransactionHandle
,
16393 _In_ BOOLEAN Wait
);
16395 _IRQL_requires_max_ (APC_LEVEL
)
16400 NtRollbackTransaction(
16401 _In_ HANDLE TransactionHandle
,
16402 _In_ BOOLEAN Wait
);
16404 _Must_inspect_result_
16405 _IRQL_requires_max_ (APC_LEVEL
)
16410 NtCreateEnlistment(
16411 _Out_ PHANDLE EnlistmentHandle
,
16412 _In_ ACCESS_MASK DesiredAccess
,
16413 _In_ HANDLE ResourceManagerHandle
,
16414 _In_ HANDLE TransactionHandle
,
16415 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16416 _In_opt_ ULONG CreateOptions
,
16417 _In_ NOTIFICATION_MASK NotificationMask
,
16418 _In_opt_ PVOID EnlistmentKey
);
16420 _Must_inspect_result_
16421 _IRQL_requires_max_ (APC_LEVEL
)
16427 _Out_ PHANDLE EnlistmentHandle
,
16428 _In_ ACCESS_MASK DesiredAccess
,
16429 _In_ HANDLE ResourceManagerHandle
,
16430 _In_ LPGUID EnlistmentGuid
,
16431 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
16433 _Must_inspect_result_
16434 _IRQL_requires_max_ (APC_LEVEL
)
16439 NtQueryInformationEnlistment(
16440 _In_ HANDLE EnlistmentHandle
,
16441 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16442 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16443 _In_ ULONG EnlistmentInformationLength
,
16444 _Out_ PULONG ReturnLength
);
16446 _Must_inspect_result_
16447 _IRQL_requires_max_ (APC_LEVEL
)
16452 NtSetInformationEnlistment(
16453 _In_opt_ HANDLE EnlistmentHandle
,
16454 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16455 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16456 _In_ ULONG EnlistmentInformationLength
);
16458 _Must_inspect_result_
16459 _IRQL_requires_max_ (APC_LEVEL
)
16464 NtRecoverEnlistment(
16465 _In_ HANDLE EnlistmentHandle
,
16466 _In_opt_ PVOID EnlistmentKey
);
16468 _Must_inspect_result_
16469 _IRQL_requires_max_ (APC_LEVEL
)
16474 NtPrePrepareEnlistment(
16475 _In_ HANDLE EnlistmentHandle
,
16476 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16478 _Must_inspect_result_
16479 _IRQL_requires_max_ (APC_LEVEL
)
16484 NtPrepareEnlistment(
16485 _In_ HANDLE EnlistmentHandle
,
16486 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16488 _Must_inspect_result_
16489 _IRQL_requires_max_ (APC_LEVEL
)
16494 NtCommitEnlistment(
16495 _In_ HANDLE EnlistmentHandle
,
16496 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16498 _IRQL_requires_max_ (APC_LEVEL
)
16503 NtRollbackEnlistment(
16504 _In_ HANDLE EnlistmentHandle
,
16505 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16507 _IRQL_requires_max_ (APC_LEVEL
)
16512 NtPrePrepareComplete(
16513 _In_ HANDLE EnlistmentHandle
,
16514 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16516 _IRQL_requires_max_ (APC_LEVEL
)
16522 _In_ HANDLE EnlistmentHandle
,
16523 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16525 _IRQL_requires_max_ (APC_LEVEL
)
16531 _In_ HANDLE EnlistmentHandle
,
16532 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16534 _IRQL_requires_max_ (APC_LEVEL
)
16539 NtReadOnlyEnlistment(
16540 _In_ HANDLE EnlistmentHandle
,
16541 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16543 _IRQL_requires_max_ (APC_LEVEL
)
16548 NtRollbackComplete(
16549 _In_ HANDLE EnlistmentHandle
,
16550 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16552 _IRQL_requires_max_ (APC_LEVEL
)
16557 NtSinglePhaseReject(
16558 _In_ HANDLE EnlistmentHandle
,
16559 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16561 _Must_inspect_result_
16562 _IRQL_requires_max_ (APC_LEVEL
)
16567 NtCreateResourceManager(
16568 _Out_ PHANDLE ResourceManagerHandle
,
16569 _In_ ACCESS_MASK DesiredAccess
,
16570 _In_ HANDLE TmHandle
,
16571 _In_ LPGUID RmGuid
,
16572 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16573 _In_opt_ ULONG CreateOptions
,
16574 _In_opt_ PUNICODE_STRING Description
);
16576 _Must_inspect_result_
16577 _IRQL_requires_max_ (APC_LEVEL
)
16582 NtOpenResourceManager(
16583 _Out_ PHANDLE ResourceManagerHandle
,
16584 _In_ ACCESS_MASK DesiredAccess
,
16585 _In_ HANDLE TmHandle
,
16586 _In_opt_ LPGUID ResourceManagerGuid
,
16587 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
16589 _Must_inspect_result_
16590 _IRQL_requires_max_ (APC_LEVEL
)
16595 NtRecoverResourceManager(
16596 _In_ HANDLE ResourceManagerHandle
);
16598 _Must_inspect_result_
16599 _IRQL_requires_max_ (APC_LEVEL
)
16604 NtGetNotificationResourceManager(
16605 _In_ HANDLE ResourceManagerHandle
,
16606 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
16607 _In_ ULONG NotificationLength
,
16608 _In_opt_ PLARGE_INTEGER Timeout
,
16609 _Out_opt_ PULONG ReturnLength
,
16610 _In_ ULONG Asynchronous
,
16611 _In_opt_ ULONG_PTR AsynchronousContext
);
16613 _Must_inspect_result_
16614 _IRQL_requires_max_ (APC_LEVEL
)
16619 NtQueryInformationResourceManager(
16620 _In_ HANDLE ResourceManagerHandle
,
16621 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
16622 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
16623 _In_ ULONG ResourceManagerInformationLength
,
16624 _Out_opt_ PULONG ReturnLength
);
16626 _Must_inspect_result_
16627 _IRQL_requires_max_ (APC_LEVEL
)
16632 NtSetInformationResourceManager(
16633 _In_ HANDLE ResourceManagerHandle
,
16634 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
16635 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
16636 _In_ ULONG ResourceManagerInformationLength
);
16638 _Must_inspect_result_
16639 _IRQL_requires_max_ (APC_LEVEL
)
16644 NtRegisterProtocolAddressInformation(
16645 _In_ HANDLE ResourceManager
,
16646 _In_ PCRM_PROTOCOL_ID ProtocolId
,
16647 _In_ ULONG ProtocolInformationSize
,
16648 _In_ PVOID ProtocolInformation
,
16649 _In_opt_ ULONG CreateOptions
);
16651 _IRQL_requires_max_ (APC_LEVEL
)
16656 NtPropagationComplete(
16657 _In_ HANDLE ResourceManagerHandle
,
16658 _In_ ULONG RequestCookie
,
16659 _In_ ULONG BufferLength
,
16660 _In_ PVOID Buffer
);
16662 _IRQL_requires_max_ (APC_LEVEL
)
16667 NtPropagationFailed(
16668 _In_ HANDLE ResourceManagerHandle
,
16669 _In_ ULONG RequestCookie
,
16670 _In_ NTSTATUS PropStatus
);
16672 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
16674 #endif /* !_NTTMAPI_ */
16675 /******************************************************************************
16676 * ZwXxx Functions *
16677 ******************************************************************************/
16681 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
16682 #define ZwCurrentProcess() NtCurrentProcess()
16683 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
16684 #define ZwCurrentThread() NtCurrentThread()
16687 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16689 _IRQL_requires_max_(PASSIVE_LEVEL
)
16694 _In_ HANDLE Handle
);
16696 _IRQL_requires_max_(PASSIVE_LEVEL
)
16700 ZwCreateDirectoryObject(
16701 _Out_ PHANDLE DirectoryHandle
,
16702 _In_ ACCESS_MASK DesiredAccess
,
16703 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16705 _IRQL_requires_max_(PASSIVE_LEVEL
)
16710 _Out_ PHANDLE FileHandle
,
16711 _In_ ACCESS_MASK DesiredAccess
,
16712 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16713 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16714 _In_opt_ PLARGE_INTEGER AllocationSize
,
16715 _In_ ULONG FileAttributes
,
16716 _In_ ULONG ShareAccess
,
16717 _In_ ULONG CreateDisposition
,
16718 _In_ ULONG CreateOptions
,
16719 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
16720 _In_ ULONG EaLength
16723 _IRQL_requires_max_(PASSIVE_LEVEL
)
16728 _Out_ PHANDLE KeyHandle
,
16729 _In_ ACCESS_MASK DesiredAccess
,
16730 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16731 _Reserved_ ULONG TitleIndex
,
16732 _In_opt_ PUNICODE_STRING Class
,
16733 _In_ ULONG CreateOptions
,
16734 _Out_opt_ PULONG Disposition
);
16736 _IRQL_requires_max_(APC_LEVEL
)
16741 _Out_ PHANDLE SectionHandle
,
16742 _In_ ACCESS_MASK DesiredAccess
,
16743 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16744 _In_opt_ PLARGE_INTEGER MaximumSize
,
16745 _In_ ULONG SectionPageProtection
,
16746 _In_ ULONG AllocationAttributes
,
16747 _In_opt_ HANDLE FileHandle
);
16749 _IRQL_requires_max_(PASSIVE_LEVEL
)
16754 _In_ HANDLE KeyHandle
);
16756 _IRQL_requires_max_(PASSIVE_LEVEL
)
16761 _In_ HANDLE KeyHandle
,
16762 _In_ PUNICODE_STRING ValueName
);
16764 _IRQL_requires_max_(PASSIVE_LEVEL
)
16765 _When_(Length
== 0, _Post_satisfies_(return < 0))
16766 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16771 _In_ HANDLE KeyHandle
,
16773 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
16774 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
16776 _Out_ PULONG ResultLength
);
16778 _IRQL_requires_max_(PASSIVE_LEVEL
)
16779 _When_(Length
== 0, _Post_satisfies_(return < 0))
16780 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16784 ZwEnumerateValueKey(
16785 _In_ HANDLE KeyHandle
,
16787 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
16788 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
16790 _Out_ PULONG ResultLength
);
16792 _IRQL_requires_max_(PASSIVE_LEVEL
)
16797 _In_ HANDLE KeyHandle
);
16799 _IRQL_requires_max_(PASSIVE_LEVEL
)
16804 _In_ PUNICODE_STRING DriverServiceName
);
16806 _IRQL_requires_max_(PASSIVE_LEVEL
)
16810 ZwMakeTemporaryObject(
16811 _In_ HANDLE Handle
);
16813 _IRQL_requires_max_(PASSIVE_LEVEL
)
16817 ZwMapViewOfSection(
16818 _In_ HANDLE SectionHandle
,
16819 _In_ HANDLE ProcessHandle
,
16820 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
16821 _In_ ULONG_PTR ZeroBits
,
16822 _In_ SIZE_T CommitSize
,
16823 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
16824 _Inout_ PSIZE_T ViewSize
,
16825 _In_ SECTION_INHERIT InheritDisposition
,
16826 _In_ ULONG AllocationType
,
16827 _In_ ULONG Protect
);
16829 _IRQL_requires_max_(PASSIVE_LEVEL
)
16834 _Out_ PHANDLE FileHandle
,
16835 _In_ ACCESS_MASK DesiredAccess
,
16836 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16837 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16838 _In_ ULONG ShareAccess
,
16839 _In_ ULONG OpenOptions
);
16841 _IRQL_requires_max_(PASSIVE_LEVEL
)
16846 _Out_ PHANDLE KeyHandle
,
16847 _In_ ACCESS_MASK DesiredAccess
,
16848 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16850 _IRQL_requires_max_(PASSIVE_LEVEL
)
16855 _Out_ PHANDLE SectionHandle
,
16856 _In_ ACCESS_MASK DesiredAccess
,
16857 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16859 _IRQL_requires_max_(PASSIVE_LEVEL
)
16863 ZwOpenSymbolicLinkObject(
16864 _Out_ PHANDLE LinkHandle
,
16865 _In_ ACCESS_MASK DesiredAccess
,
16866 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16868 _IRQL_requires_max_(PASSIVE_LEVEL
)
16872 ZwQueryInformationFile(
16873 _In_ HANDLE FileHandle
,
16874 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16875 _Out_writes_bytes_(Length
) PVOID FileInformation
,
16877 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
16879 _IRQL_requires_max_(PASSIVE_LEVEL
)
16880 _When_(Length
== 0, _Post_satisfies_(return < 0))
16881 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16886 _In_ HANDLE KeyHandle
,
16887 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
16888 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
16890 _Out_ PULONG ResultLength
);
16892 _IRQL_requires_max_(PASSIVE_LEVEL
)
16896 ZwQuerySymbolicLinkObject(
16897 _In_ HANDLE LinkHandle
,
16898 _Inout_ PUNICODE_STRING LinkTarget
,
16899 _Out_opt_ PULONG ReturnedLength
);
16901 _IRQL_requires_max_(PASSIVE_LEVEL
)
16902 _When_(Length
== 0, _Post_satisfies_(return < 0))
16903 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16908 _In_ HANDLE KeyHandle
,
16909 _In_ PUNICODE_STRING ValueName
,
16910 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
16911 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
16913 _Out_ PULONG ResultLength
);
16915 _IRQL_requires_max_(PASSIVE_LEVEL
)
16920 _In_ HANDLE FileHandle
,
16921 _In_opt_ HANDLE Event
,
16922 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
16923 _In_opt_ PVOID ApcContext
,
16924 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16925 _Out_writes_bytes_(Length
) PVOID Buffer
,
16927 _In_opt_ PLARGE_INTEGER ByteOffset
,
16928 _In_opt_ PULONG Key
);
16930 _IRQL_requires_max_(PASSIVE_LEVEL
)
16934 ZwSetInformationFile(
16935 _In_ HANDLE FileHandle
,
16936 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16937 _In_reads_bytes_(Length
) PVOID FileInformation
,
16939 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
16941 _IRQL_requires_max_(PASSIVE_LEVEL
)
16946 _In_ HANDLE KeyHandle
,
16947 _In_ PUNICODE_STRING ValueName
,
16948 _In_opt_ ULONG TitleIndex
,
16950 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
16951 _In_ ULONG DataSize
);
16953 _IRQL_requires_max_(PASSIVE_LEVEL
)
16958 _In_ PUNICODE_STRING DriverServiceName
);
16960 _IRQL_requires_max_(PASSIVE_LEVEL
)
16964 ZwUnmapViewOfSection(
16965 _In_ HANDLE ProcessHandle
,
16966 _In_opt_ PVOID BaseAddress
);
16968 _IRQL_requires_max_(PASSIVE_LEVEL
)
16973 _In_ HANDLE FileHandle
,
16974 _In_opt_ HANDLE Event
,
16975 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
16976 _In_opt_ PVOID ApcContext
,
16977 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16978 _In_reads_bytes_(Length
) PVOID Buffer
,
16980 _In_opt_ PLARGE_INTEGER ByteOffset
,
16981 _In_opt_ PULONG Key
);
16983 _IRQL_requires_max_(PASSIVE_LEVEL
)
16987 ZwQueryFullAttributesFile(
16988 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16989 _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
16991 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16994 #if (NTDDI_VERSION >= NTDDI_WS03)
16995 _IRQL_requires_max_(PASSIVE_LEVEL
)
17000 _Out_ PHANDLE EventHandle
,
17001 _In_ ACCESS_MASK DesiredAccess
,
17002 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17005 #if (NTDDI_VERSION >= NTDDI_VISTA)
17007 _IRQL_requires_max_(PASSIVE_LEVEL
)
17010 ZwCreateKeyTransacted(
17011 _Out_ PHANDLE KeyHandle
,
17012 _In_ ACCESS_MASK DesiredAccess
,
17013 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17014 _Reserved_ ULONG TitleIndex
,
17015 _In_opt_ PUNICODE_STRING Class
,
17016 _In_ ULONG CreateOptions
,
17017 _In_ HANDLE TransactionHandle
,
17018 _Out_opt_ PULONG Disposition
);
17020 _IRQL_requires_max_(PASSIVE_LEVEL
)
17024 ZwOpenKeyTransacted(
17025 _Out_ PHANDLE KeyHandle
,
17026 _In_ ACCESS_MASK DesiredAccess
,
17027 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17028 _In_ HANDLE TransactionHandle
);
17030 _IRQL_requires_max_(PASSIVE_LEVEL
)
17034 ZwCreateTransactionManager(
17035 _Out_ PHANDLE TmHandle
,
17036 _In_ ACCESS_MASK DesiredAccess
,
17037 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17038 _In_opt_ PUNICODE_STRING LogFileName
,
17039 _In_opt_ ULONG CreateOptions
,
17040 _In_opt_ ULONG CommitStrength
);
17042 _IRQL_requires_max_(PASSIVE_LEVEL
)
17046 ZwOpenTransactionManager(
17047 _Out_ PHANDLE TmHandle
,
17048 _In_ ACCESS_MASK DesiredAccess
,
17049 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17050 _In_opt_ PUNICODE_STRING LogFileName
,
17051 _In_opt_ LPGUID TmIdentity
,
17052 _In_opt_ ULONG OpenOptions
);
17054 _IRQL_requires_max_(PASSIVE_LEVEL
)
17058 ZwRollforwardTransactionManager(
17059 _In_ HANDLE TransactionManagerHandle
,
17060 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17062 _IRQL_requires_max_(PASSIVE_LEVEL
)
17066 ZwRecoverTransactionManager(
17067 _In_ HANDLE TransactionManagerHandle
);
17069 _IRQL_requires_max_(PASSIVE_LEVEL
)
17073 ZwQueryInformationTransactionManager(
17074 _In_ HANDLE TransactionManagerHandle
,
17075 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17076 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17077 _In_ ULONG TransactionManagerInformationLength
,
17078 _Out_opt_ PULONG ReturnLength
);
17080 _IRQL_requires_max_(PASSIVE_LEVEL
)
17084 ZwSetInformationTransactionManager(
17085 _In_ HANDLE TmHandle
,
17086 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17087 _In_ PVOID TransactionManagerInformation
,
17088 _In_ ULONG TransactionManagerInformationLength
);
17090 _IRQL_requires_max_(PASSIVE_LEVEL
)
17094 ZwEnumerateTransactionObject(
17095 _In_opt_ HANDLE RootObjectHandle
,
17096 _In_ KTMOBJECT_TYPE QueryType
,
17097 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
17098 _In_ ULONG ObjectCursorLength
,
17099 _Out_ PULONG ReturnLength
);
17101 _IRQL_requires_max_(PASSIVE_LEVEL
)
17105 ZwCreateTransaction(
17106 _Out_ PHANDLE TransactionHandle
,
17107 _In_ ACCESS_MASK DesiredAccess
,
17108 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17109 _In_opt_ LPGUID Uow
,
17110 _In_opt_ HANDLE TmHandle
,
17111 _In_opt_ ULONG CreateOptions
,
17112 _In_opt_ ULONG IsolationLevel
,
17113 _In_opt_ ULONG IsolationFlags
,
17114 _In_opt_ PLARGE_INTEGER Timeout
,
17115 _In_opt_ PUNICODE_STRING Description
);
17117 _IRQL_requires_max_(PASSIVE_LEVEL
)
17122 _Out_ PHANDLE TransactionHandle
,
17123 _In_ ACCESS_MASK DesiredAccess
,
17124 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17126 _In_opt_ HANDLE TmHandle
);
17128 _IRQL_requires_max_(PASSIVE_LEVEL
)
17132 ZwQueryInformationTransaction(
17133 _In_ HANDLE TransactionHandle
,
17134 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17135 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17136 _In_ ULONG TransactionInformationLength
,
17137 _Out_opt_ PULONG ReturnLength
);
17139 _IRQL_requires_max_(PASSIVE_LEVEL
)
17143 ZwSetInformationTransaction(
17144 _In_ HANDLE TransactionHandle
,
17145 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17146 _In_ PVOID TransactionInformation
,
17147 _In_ ULONG TransactionInformationLength
);
17149 _IRQL_requires_max_(PASSIVE_LEVEL
)
17153 ZwCommitTransaction(
17154 _In_ HANDLE TransactionHandle
,
17155 _In_ BOOLEAN Wait
);
17157 _IRQL_requires_max_(PASSIVE_LEVEL
)
17161 ZwRollbackTransaction(
17162 _In_ HANDLE TransactionHandle
,
17163 _In_ BOOLEAN Wait
);
17165 _IRQL_requires_max_(PASSIVE_LEVEL
)
17169 ZwCreateResourceManager(
17170 _Out_ PHANDLE ResourceManagerHandle
,
17171 _In_ ACCESS_MASK DesiredAccess
,
17172 _In_ HANDLE TmHandle
,
17173 _In_opt_ LPGUID ResourceManagerGuid
,
17174 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17175 _In_opt_ ULONG CreateOptions
,
17176 _In_opt_ PUNICODE_STRING Description
);
17178 _IRQL_requires_max_(PASSIVE_LEVEL
)
17182 ZwOpenResourceManager(
17183 _Out_ PHANDLE ResourceManagerHandle
,
17184 _In_ ACCESS_MASK DesiredAccess
,
17185 _In_ HANDLE TmHandle
,
17186 _In_ LPGUID ResourceManagerGuid
,
17187 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17189 _IRQL_requires_max_(PASSIVE_LEVEL
)
17193 ZwRecoverResourceManager(
17194 _In_ HANDLE ResourceManagerHandle
);
17196 _IRQL_requires_max_(PASSIVE_LEVEL
)
17200 ZwGetNotificationResourceManager(
17201 _In_ HANDLE ResourceManagerHandle
,
17202 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17203 _In_ ULONG NotificationLength
,
17204 _In_ PLARGE_INTEGER Timeout
,
17205 _Out_opt_ PULONG ReturnLength
,
17206 _In_ ULONG Asynchronous
,
17207 _In_opt_ ULONG_PTR AsynchronousContext
);
17209 _IRQL_requires_max_(PASSIVE_LEVEL
)
17213 ZwQueryInformationResourceManager(
17214 _In_ HANDLE ResourceManagerHandle
,
17215 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17216 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17217 _In_ ULONG ResourceManagerInformationLength
,
17218 _Out_opt_ PULONG ReturnLength
);
17220 _IRQL_requires_max_(PASSIVE_LEVEL
)
17224 ZwSetInformationResourceManager(
17225 _In_ HANDLE ResourceManagerHandle
,
17226 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17227 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17228 _In_ ULONG ResourceManagerInformationLength
);
17230 _IRQL_requires_max_(PASSIVE_LEVEL
)
17234 ZwCreateEnlistment(
17235 _Out_ PHANDLE EnlistmentHandle
,
17236 _In_ ACCESS_MASK DesiredAccess
,
17237 _In_ HANDLE ResourceManagerHandle
,
17238 _In_ HANDLE TransactionHandle
,
17239 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17240 _In_opt_ ULONG CreateOptions
,
17241 _In_ NOTIFICATION_MASK NotificationMask
,
17242 _In_opt_ PVOID EnlistmentKey
);
17244 _IRQL_requires_max_(PASSIVE_LEVEL
)
17249 _Out_ PHANDLE EnlistmentHandle
,
17250 _In_ ACCESS_MASK DesiredAccess
,
17251 _In_ HANDLE RmHandle
,
17252 _In_ LPGUID EnlistmentGuid
,
17253 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17255 _IRQL_requires_max_(PASSIVE_LEVEL
)
17259 ZwQueryInformationEnlistment(
17260 _In_ HANDLE EnlistmentHandle
,
17261 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17262 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17263 _In_ ULONG EnlistmentInformationLength
,
17264 _Out_opt_ PULONG ReturnLength
);
17266 _IRQL_requires_max_(PASSIVE_LEVEL
)
17270 ZwSetInformationEnlistment(
17271 _In_ HANDLE EnlistmentHandle
,
17272 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17273 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17274 _In_ ULONG EnlistmentInformationLength
);
17276 _IRQL_requires_max_(PASSIVE_LEVEL
)
17280 ZwRecoverEnlistment(
17281 _In_ HANDLE EnlistmentHandle
,
17282 _In_opt_ PVOID EnlistmentKey
);
17284 _IRQL_requires_max_(PASSIVE_LEVEL
)
17288 ZwPrePrepareEnlistment(
17289 _In_ HANDLE EnlistmentHandle
,
17290 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17292 _IRQL_requires_max_(PASSIVE_LEVEL
)
17296 ZwPrepareEnlistment(
17297 _In_ HANDLE EnlistmentHandle
,
17298 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17300 _IRQL_requires_max_(PASSIVE_LEVEL
)
17304 ZwCommitEnlistment(
17305 _In_ HANDLE EnlistmentHandle
,
17306 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17308 _IRQL_requires_max_(PASSIVE_LEVEL
)
17312 ZwRollbackEnlistment(
17313 _In_ HANDLE EnlistmentHandle
,
17314 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17316 _IRQL_requires_max_(PASSIVE_LEVEL
)
17320 ZwPrePrepareComplete(
17321 _In_ HANDLE EnlistmentHandle
,
17322 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17324 _IRQL_requires_max_(PASSIVE_LEVEL
)
17329 _In_ HANDLE EnlistmentHandle
,
17330 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17332 _IRQL_requires_max_(PASSIVE_LEVEL
)
17337 _In_ HANDLE EnlistmentHandle
,
17338 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17340 _IRQL_requires_max_(PASSIVE_LEVEL
)
17344 ZwReadOnlyEnlistment(
17345 _In_ HANDLE EnlistmentHandle
,
17346 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17351 ZwRollbackComplete(
17352 _In_ HANDLE EnlistmentHandle
,
17353 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17358 ZwSinglePhaseReject(
17359 _In_ HANDLE EnlistmentHandle
,
17360 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17361 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
17362 #if (NTDDI_VERSION >= NTDDI_WIN7)
17364 _IRQL_requires_max_(PASSIVE_LEVEL
)
17369 _Out_ PHANDLE KeyHandle
,
17370 _In_ ACCESS_MASK DesiredAccess
,
17371 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17372 _In_ ULONG OpenOptions
);
17374 _IRQL_requires_max_(PASSIVE_LEVEL
)
17378 ZwOpenKeyTransactedEx(
17379 _Out_ PHANDLE KeyHandle
,
17380 _In_ ACCESS_MASK DesiredAccess
,
17381 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17382 _In_ ULONG OpenOptions
,
17383 _In_ HANDLE TransactionHandle
);
17388 ZwNotifyChangeMultipleKeys(
17389 _In_ HANDLE MasterKeyHandle
,
17390 _In_opt_ ULONG Count
,
17391 _In_opt_ OBJECT_ATTRIBUTES SubordinateObjects
[],
17392 _In_opt_ HANDLE Event
,
17393 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17394 _In_opt_ PVOID ApcContext
,
17395 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17396 _In_ ULONG CompletionFilter
,
17397 _In_ BOOLEAN WatchTree
,
17398 _Out_opt_ PVOID Buffer
,
17399 _In_ ULONG BufferSize
,
17400 _In_ BOOLEAN Asynchronous
);
17405 ZwQueryMultipleValueKey(
17406 _In_ HANDLE KeyHandle
,
17407 _Inout_ PKEY_VALUE_ENTRY ValueEntries
,
17408 _In_ ULONG EntryCount
,
17409 _Out_ PVOID ValueBuffer
,
17410 _Inout_ PULONG BufferLength
,
17411 _Out_opt_ PULONG RequiredBufferLength
);
17413 _IRQL_requires_max_(PASSIVE_LEVEL
)
17418 _In_ HANDLE KeyHandle
,
17419 _In_ PUNICODE_STRING NewName
);
17421 _IRQL_requires_max_(PASSIVE_LEVEL
)
17425 ZwSetInformationKey(
17426 _In_ HANDLE KeyHandle
,
17427 _In_
__drv_strictTypeMatch(__drv_typeConst
) KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
17428 _In_reads_bytes_(KeySetInformationLength
) PVOID KeySetInformation
,
17429 _In_ ULONG KeySetInformationLength
);
17431 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
17438 #endif /* !_WDMDDK_ */