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 #if defined(_M_IX86)
1680 /** Kernel definitions for x86 **/
1682 /* Interrupt request levels */
1683 #define PASSIVE_LEVEL 0
1686 #define DISPATCH_LEVEL 2
1687 #define CMCI_LEVEL 5
1688 #define PROFILE_LEVEL 27
1689 #define CLOCK1_LEVEL 28
1690 #define CLOCK2_LEVEL 28
1691 #define IPI_LEVEL 29
1692 #define POWER_LEVEL 30
1693 #define HIGH_LEVEL 31
1694 #define CLOCK_LEVEL CLOCK2_LEVEL
1696 #define KIP0PCRADDRESS 0xffdff000
1697 #define KI_USER_SHARED_DATA 0xffdf0000
1698 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
1700 #define PAGE_SIZE 0x1000
1701 #define PAGE_SHIFT 12L
1702 #define KeGetDcacheFillSize() 1L
1704 #define EFLAG_SIGN 0x8000
1705 #define EFLAG_ZERO 0x4000
1706 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
1708 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
1709 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
1710 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
1713 typedef struct _KFLOATING_SAVE
{
1717 ULONG ErrorSelector
;
1722 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1724 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
1726 #define YieldProcessor _mm_pause
1730 KeMemoryBarrier(VOID
)
1732 LONG Barrier
, *Dummy
= &Barrier
;
1733 UNREFERENCED_LOCAL_VARIABLE(Dummy
);
1735 #if defined(__GNUC__)
1736 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
1737 #elif defined(_MSC_VER)
1738 __asm xchg
[Barrier
], eax
1742 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
1744 _IRQL_requires_max_(HIGH_LEVEL
)
1749 KeGetCurrentIrql(VOID
);
1751 _IRQL_requires_max_(HIGH_LEVEL
)
1756 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
);
1757 #define KeLowerIrql(a) KfLowerIrql(a)
1759 _IRQL_requires_max_(HIGH_LEVEL
)
1760 _IRQL_raises_(NewIrql
)
1766 _In_ KIRQL NewIrql
);
1767 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
1769 _IRQL_requires_max_(DISPATCH_LEVEL
)
1771 _IRQL_raises_(DISPATCH_LEVEL
)
1775 KeRaiseIrqlToDpcLevel(VOID
);
1780 KeRaiseIrqlToSynchLevel(VOID
);
1782 _Requires_lock_not_held_(*SpinLock
)
1783 _Acquires_lock_(*SpinLock
)
1784 _IRQL_requires_max_(DISPATCH_LEVEL
)
1786 _IRQL_raises_(DISPATCH_LEVEL
)
1791 _Inout_ PKSPIN_LOCK SpinLock
);
1792 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
1794 _Requires_lock_held_(*SpinLock
)
1795 _Releases_lock_(*SpinLock
)
1796 _IRQL_requires_(DISPATCH_LEVEL
)
1801 _Inout_ PKSPIN_LOCK SpinLock
,
1802 _In_ _IRQL_restores_ KIRQL NewIrql
);
1803 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
1805 _Requires_lock_not_held_(*SpinLock
)
1806 _Acquires_lock_(*SpinLock
)
1807 _IRQL_requires_min_(DISPATCH_LEVEL
)
1811 KefAcquireSpinLockAtDpcLevel(
1812 _Inout_ PKSPIN_LOCK SpinLock
);
1813 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
1815 _Requires_lock_held_(*SpinLock
)
1816 _Releases_lock_(*SpinLock
)
1817 _IRQL_requires_min_(DISPATCH_LEVEL
)
1821 KefReleaseSpinLockFromDpcLevel(
1822 _Inout_ PKSPIN_LOCK SpinLock
);
1823 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
1828 KeGetCurrentThread(VOID
);
1830 _Always_(_Post_satisfies_(return<=0))
1831 _Must_inspect_result_
1832 _IRQL_requires_max_(DISPATCH_LEVEL
)
1833 _Kernel_float_saved_
1834 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
1838 KeSaveFloatingPointState(
1839 _Out_ PKFLOATING_SAVE FloatSave
);
1842 _Kernel_float_restored_
1843 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
1847 KeRestoreFloatingPointState(
1848 _In_ PKFLOATING_SAVE FloatSave
);
1853 * IN BOOLEAN ReadOperation,
1854 * IN BOOLEAN DmaOperation)
1856 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
1858 /* x86 and x64 performs a 0x2C interrupt */
1859 #define DbgRaiseAssertionFailure __int2c
1864 OUT PLARGE_INTEGER CurrentCount
)
1867 #ifdef NONAMELESSUNION
1868 CurrentCount
->s
.HighPart
= KeTickCount
.High1Time
;
1869 CurrentCount
->s
.LowPart
= KeTickCount
.LowPart
;
1870 if (CurrentCount
->s
.HighPart
== KeTickCount
.High2Time
) break;
1872 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
1873 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
1874 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
1879 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
1885 #elif defined(_M_AMD64)
1886 /** Kernel definitions for AMD64 **/
1888 /* Interrupt request levels */
1889 #define PASSIVE_LEVEL 0
1892 #define DISPATCH_LEVEL 2
1893 #define CMCI_LEVEL 5
1894 #define CLOCK_LEVEL 13
1895 #define IPI_LEVEL 14
1896 #define DRS_LEVEL 14
1897 #define POWER_LEVEL 14
1898 #define PROFILE_LEVEL 15
1899 #define HIGH_LEVEL 15
1901 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1902 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1903 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
1904 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
1905 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
1907 #define PAGE_SIZE 0x1000
1908 #define PAGE_SHIFT 12L
1910 #define EFLAG_SIGN 0x8000
1911 #define EFLAG_ZERO 0x4000
1912 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
1914 typedef struct _KFLOATING_SAVE
{
1916 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1918 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1920 #define KeQueryInterruptTime() \
1921 (*(volatile ULONG64*)SharedInterruptTime)
1923 #define KeQuerySystemTime(CurrentCount) \
1924 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1926 #define KeQueryTickCount(CurrentCount) \
1927 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1929 #define KeGetDcacheFillSize() 1L
1931 #define YieldProcessor _mm_pause
1932 #define MemoryBarrier __faststorefence
1933 #define FastFence __faststorefence
1934 #define LoadFence _mm_lfence
1935 #define MemoryFence _mm_mfence
1936 #define StoreFence _mm_sfence
1937 #define LFENCE_ACQUIRE() LoadFence()
1941 KeMemoryBarrier(VOID
)
1943 // FIXME: Do we really need lfence after the __faststorefence ?
1948 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
1952 KeGetCurrentIrql(VOID
)
1954 return (KIRQL
)__readcr8();
1959 KeLowerIrql(IN KIRQL NewIrql
)
1961 ASSERT((KIRQL
)__readcr8() >= NewIrql
);
1962 __writecr8(NewIrql
);
1967 KfRaiseIrql(IN KIRQL NewIrql
)
1971 OldIrql
= (KIRQL
)__readcr8();
1972 ASSERT(OldIrql
<= NewIrql
);
1973 __writecr8(NewIrql
);
1976 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
1980 KeRaiseIrqlToDpcLevel(VOID
)
1982 return KfRaiseIrql(DISPATCH_LEVEL
);
1987 KeRaiseIrqlToSynchLevel(VOID
)
1989 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
1994 KeGetCurrentThread(VOID
)
1996 return (struct _KTHREAD
*)__readgsqword(0x188);
2001 KeSaveFloatingPointState(PVOID FloatingState
)
2003 UNREFERENCED_PARAMETER(FloatingState
);
2004 return STATUS_SUCCESS
;
2009 KeRestoreFloatingPointState(PVOID FloatingState
)
2011 UNREFERENCED_PARAMETER(FloatingState
);
2012 return STATUS_SUCCESS
;
2018 * IN BOOLEAN ReadOperation,
2019 * IN BOOLEAN DmaOperation)
2021 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
2023 /* x86 and x64 performs a 0x2C interrupt */
2024 #define DbgRaiseAssertionFailure __int2c
2026 #elif defined(_M_IA64)
2027 /** Kernel definitions for IA64 **/
2029 /* Interrupt request levels */
2030 #define PASSIVE_LEVEL 0
2033 #define DISPATCH_LEVEL 2
2035 #define DEVICE_LEVEL_BASE 4
2037 #define IPI_LEVEL 14
2038 #define DRS_LEVEL 14
2039 #define CLOCK_LEVEL 13
2040 #define POWER_LEVEL 15
2041 #define PROFILE_LEVEL 15
2042 #define HIGH_LEVEL 15
2044 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
2045 extern volatile LARGE_INTEGER KeTickCount
;
2047 #define PAUSE_PROCESSOR __yield();
2051 KeFlushWriteBuffer(VOID
)
2060 KeGetCurrentThread(VOID
);
2063 #elif defined(_M_PPC)
2065 /* Interrupt request levels */
2066 #define PASSIVE_LEVEL 0
2069 #define DISPATCH_LEVEL 2
2070 #define PROFILE_LEVEL 27
2071 #define CLOCK1_LEVEL 28
2072 #define CLOCK2_LEVEL 28
2073 #define IPI_LEVEL 29
2074 #define POWER_LEVEL 30
2075 #define HIGH_LEVEL 31
2078 // Used to contain PFNs and PFN counts
2080 typedef ULONG PFN_COUNT
;
2081 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2082 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2085 typedef struct _KFLOATING_SAVE
{
2087 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2089 typedef struct _KPCR_TIB
{
2090 PVOID ExceptionList
; /* 00 */
2091 PVOID StackBase
; /* 04 */
2092 PVOID StackLimit
; /* 08 */
2093 PVOID SubSystemTib
; /* 0C */
2094 _ANONYMOUS_UNION
union {
2095 PVOID FiberData
; /* 10 */
2096 ULONG Version
; /* 10 */
2098 PVOID ArbitraryUserPointer
; /* 14 */
2099 struct _KPCR_TIB
*Self
; /* 18 */
2100 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
2102 #define PCR_MINOR_VERSION 1
2103 #define PCR_MAJOR_VERSION 1
2105 typedef struct _KPCR
{
2106 KPCR_TIB Tib
; /* 00 */
2107 struct _KPCR
*Self
; /* 1C */
2108 struct _KPRCB
*Prcb
; /* 20 */
2109 KIRQL Irql
; /* 24 */
2111 ULONG IrrActive
; /* 2C */
2113 PVOID KdVersionBlock
; /* 34 */
2114 PUSHORT IDT
; /* 38 */
2115 PUSHORT GDT
; /* 3C */
2116 struct _KTSS
*TSS
; /* 40 */
2117 USHORT MajorVersion
; /* 44 */
2118 USHORT MinorVersion
; /* 46 */
2119 KAFFINITY SetMember
; /* 48 */
2120 ULONG StallScaleFactor
; /* 4C */
2121 UCHAR SpareUnused
; /* 50 */
2122 UCHAR Number
; /* 51 */
2123 } KPCR
, *PKPCR
; /* 54 */
2125 #define KeGetPcr() PCR
2127 #define YieldProcessor() __asm__ __volatile__("nop");
2132 KeGetCurrentProcessorNumber(VOID
)
2135 __asm__
__volatile__ (
2138 : "i" (FIELD_OFFSET(KPCR
, Number
))
2148 #define KeLowerIrql(a) KfLowerIrql(a)
2155 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2160 KeRaiseIrqlToDpcLevel(VOID
);
2165 KeRaiseIrqlToSynchLevel(VOID
);
2169 #elif defined(_M_MIPS)
2170 #error MIPS Headers are totally incorrect
2173 // Used to contain PFNs and PFN counts
2175 typedef ULONG PFN_COUNT
;
2176 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2177 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2179 #define PASSIVE_LEVEL 0
2181 #define DISPATCH_LEVEL 2
2182 #define PROFILE_LEVEL 27
2183 #define IPI_LEVEL 29
2184 #define HIGH_LEVEL 31
2186 typedef struct _KPCR
{
2187 struct _KPRCB
*Prcb
; /* 20 */
2188 KIRQL Irql
; /* 24 */
2193 #define KeGetPcr() PCR
2195 typedef struct _KFLOATING_SAVE
{
2196 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2201 KeGetCurrentProcessorNumber(VOID
)
2206 #define YieldProcessor() __asm__ __volatile__("nop");
2208 #define KeLowerIrql(a) KfLowerIrql(a)
2209 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2226 KeRaiseIrqlToDpcLevel(VOID
);
2231 KeRaiseIrqlToSynchLevel(VOID
);
2234 #elif defined(_M_ARM)
2237 #error Unknown Architecture
2240 /******************************************************************************
2241 * Memory manager Types *
2242 ******************************************************************************/
2244 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2245 typedef ULONG NODE_REQUIREMENT
;
2246 #define MM_ANY_NODE_OK 0x80000000
2249 #define MM_DONT_ZERO_ALLOCATION 0x00000001
2250 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
2251 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
2252 #define MM_ALLOCATE_NO_WAIT 0x00000008
2253 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
2254 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
2256 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2257 #define MDL_PAGES_LOCKED 0x0002
2258 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2259 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2260 #define MDL_PARTIAL 0x0010
2261 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2262 #define MDL_IO_PAGE_READ 0x0040
2263 #define MDL_WRITE_OPERATION 0x0080
2264 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2265 #define MDL_FREE_EXTRA_PTES 0x0200
2266 #define MDL_DESCRIBES_AWE 0x0400
2267 #define MDL_IO_SPACE 0x0800
2268 #define MDL_NETWORK_HEADER 0x1000
2269 #define MDL_MAPPING_CAN_FAIL 0x2000
2270 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2271 #define MDL_INTERNAL 0x8000
2273 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
2274 MDL_PAGES_LOCKED | \
2275 MDL_SOURCE_IS_NONPAGED_POOL | \
2276 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2277 MDL_PARENT_MAPPED_SYSTEM_VA | \
2281 #define FLUSH_MULTIPLE_MAXIMUM 32
2283 /* Section access rights */
2284 #define SECTION_QUERY 0x0001
2285 #define SECTION_MAP_WRITE 0x0002
2286 #define SECTION_MAP_READ 0x0004
2287 #define SECTION_MAP_EXECUTE 0x0008
2288 #define SECTION_EXTEND_SIZE 0x0010
2289 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
2291 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
2292 SECTION_MAP_WRITE | \
2293 SECTION_MAP_READ | \
2294 SECTION_MAP_EXECUTE | \
2295 SECTION_EXTEND_SIZE)
2297 #define SESSION_QUERY_ACCESS 0x0001
2298 #define SESSION_MODIFY_ACCESS 0x0002
2300 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
2301 SESSION_QUERY_ACCESS | \
2302 SESSION_MODIFY_ACCESS)
2304 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
2306 #define PAGE_NOACCESS 0x01
2307 #define PAGE_READONLY 0x02
2308 #define PAGE_READWRITE 0x04
2309 #define PAGE_WRITECOPY 0x08
2310 #define PAGE_EXECUTE 0x10
2311 #define PAGE_EXECUTE_READ 0x20
2312 #define PAGE_EXECUTE_READWRITE 0x40
2313 #define PAGE_EXECUTE_WRITECOPY 0x80
2314 #define PAGE_GUARD 0x100
2315 #define PAGE_NOCACHE 0x200
2316 #define PAGE_WRITECOMBINE 0x400
2318 #define MEM_COMMIT 0x1000
2319 #define MEM_RESERVE 0x2000
2320 #define MEM_DECOMMIT 0x4000
2321 #define MEM_RELEASE 0x8000
2322 #define MEM_FREE 0x10000
2323 #define MEM_PRIVATE 0x20000
2324 #define MEM_MAPPED 0x40000
2325 #define MEM_RESET 0x80000
2326 #define MEM_TOP_DOWN 0x100000
2327 #define MEM_LARGE_PAGES 0x20000000
2328 #define MEM_4MB_PAGES 0x80000000
2330 #define SEC_RESERVE 0x4000000
2331 #define SEC_COMMIT 0x8000000
2332 #define SEC_LARGE_PAGES 0x80000000
2334 /* Section map options */
2335 typedef enum _SECTION_INHERIT
{
2340 typedef ULONG PFN_COUNT
;
2341 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
2342 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
2344 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL
) +
2345 (ByteOffset
+ ByteCount
+ PAGE_SIZE
-1) / PAGE_SIZE
* sizeof(PFN_NUMBER
)))
2346 typedef struct _MDL
{
2350 struct _EPROCESS
*Process
;
2351 PVOID MappedSystemVa
;
2356 #if (_MSC_VER >= 1600)
2357 typedef _Readable_bytes_(_Inexpressible_(polymorphism
)) MDL
*PMDLX
;
2362 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
2363 MmFrameBufferCached
= 2
2364 } MEMORY_CACHING_TYPE_ORIG
;
2366 typedef enum _MEMORY_CACHING_TYPE
{
2367 MmNonCached
= FALSE
,
2369 MmWriteCombined
= MmFrameBufferCached
,
2370 MmHardwareCoherentCached
,
2371 MmNonCachedUnordered
,
2374 } MEMORY_CACHING_TYPE
;
2376 typedef enum _MM_PAGE_PRIORITY
{
2378 NormalPagePriority
= 16,
2379 HighPagePriority
= 32
2382 typedef enum _MM_SYSTEM_SIZE
{
2388 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress
;
2389 extern PVOID MmBadPointer
;
2392 /******************************************************************************
2394 ******************************************************************************/
2395 #define EX_RUNDOWN_ACTIVE 0x1
2396 #define EX_RUNDOWN_COUNT_SHIFT 0x1
2397 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
2399 typedef struct _FAST_MUTEX
{
2400 volatile LONG Count
;
2405 } FAST_MUTEX
, *PFAST_MUTEX
;
2407 typedef enum _SUITE_TYPE
{
2411 CommunicationServer
,
2413 SmallBusinessRestricted
,
2427 typedef enum _EX_POOL_PRIORITY
{
2429 LowPoolPrioritySpecialPoolOverrun
= 8,
2430 LowPoolPrioritySpecialPoolUnderrun
= 9,
2431 NormalPoolPriority
= 16,
2432 NormalPoolPrioritySpecialPoolOverrun
= 24,
2433 NormalPoolPrioritySpecialPoolUnderrun
= 25,
2434 HighPoolPriority
= 32,
2435 HighPoolPrioritySpecialPoolOverrun
= 40,
2436 HighPoolPrioritySpecialPoolUnderrun
= 41
2439 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
2440 #define LOOKASIDE_ALIGN
2442 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
2445 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
2447 _IRQL_requires_same_
2448 _Function_class_(ALLOCATE_FUNCTION
)
2450 (NTAPI
*PALLOCATE_FUNCTION
)(
2451 _In_ POOL_TYPE PoolType
,
2452 _In_ SIZE_T NumberOfBytes
,
2455 _IRQL_requires_same_
2456 _Function_class_(ALLOCATE_FUNCTION_EX
)
2458 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
2459 _In_ POOL_TYPE PoolType
,
2460 _In_ SIZE_T NumberOfBytes
,
2462 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2464 _IRQL_requires_same_
2465 _Function_class_(FREE_FUNCTION
)
2467 (NTAPI
*PFREE_FUNCTION
)(
2470 _IRQL_requires_same_
2471 _Function_class_(FREE_FUNCTION_EX
)
2473 (NTAPI
*PFREE_FUNCTION_EX
)(
2475 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2477 _IRQL_requires_same_
2478 _Function_class_(CALLBACK_FUNCTION
)
2480 (NTAPI CALLBACK_FUNCTION
)(
2481 _In_opt_ PVOID CallbackContext
,
2482 _In_opt_ PVOID Argument1
,
2483 _In_opt_ PVOID Argument2
);
2484 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
2486 #define GENERAL_LOOKASIDE_LAYOUT \
2487 _ANONYMOUS_UNION union { \
2488 SLIST_HEADER ListHead; \
2489 SINGLE_LIST_ENTRY SingleListHead; \
2492 USHORT MaximumDepth; \
2493 ULONG TotalAllocates; \
2494 _ANONYMOUS_UNION union { \
2495 ULONG AllocateMisses; \
2496 ULONG AllocateHits; \
2497 } DUMMYUNIONNAME2; \
2499 _ANONYMOUS_UNION union { \
2502 } DUMMYUNIONNAME3; \
2506 _ANONYMOUS_UNION union { \
2507 PALLOCATE_FUNCTION_EX AllocateEx; \
2508 PALLOCATE_FUNCTION Allocate; \
2509 } DUMMYUNIONNAME4; \
2510 _ANONYMOUS_UNION union { \
2511 PFREE_FUNCTION_EX FreeEx; \
2512 PFREE_FUNCTION Free; \
2513 } DUMMYUNIONNAME5; \
2514 LIST_ENTRY ListEntry; \
2515 ULONG LastTotalAllocates; \
2516 _ANONYMOUS_UNION union { \
2517 ULONG LastAllocateMisses; \
2518 ULONG LastAllocateHits; \
2519 } DUMMYUNIONNAME6; \
2522 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
2523 GENERAL_LOOKASIDE_LAYOUT
2524 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
2526 typedef struct _GENERAL_LOOKASIDE_POOL
{
2527 GENERAL_LOOKASIDE_LAYOUT
2528 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
2530 #define LOOKASIDE_CHECK(f) \
2531 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
2533 LOOKASIDE_CHECK(TotalFrees
);
2534 LOOKASIDE_CHECK(Tag
);
2535 LOOKASIDE_CHECK(Future
);
2537 typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST
{
2538 GENERAL_LOOKASIDE L
;
2539 #if !defined(_AMD64_) && !defined(_IA64_)
2540 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
2542 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
2544 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
2545 GENERAL_LOOKASIDE L
;
2546 #if !defined(_AMD64_) && !defined(_IA64_)
2547 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
2549 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
2551 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
2553 typedef struct _LOOKASIDE_LIST_EX
{
2554 GENERAL_LOOKASIDE_POOL L
;
2555 } LOOKASIDE_LIST_EX
;
2557 #if (NTDDI_VERSION >= NTDDI_VISTA)
2559 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
2560 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
2562 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
2563 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
2565 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2567 typedef struct _EX_RUNDOWN_REF
{
2568 _ANONYMOUS_UNION
union {
2569 volatile ULONG_PTR Count
;
2572 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
2574 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
2576 typedef enum _WORK_QUEUE_TYPE
{
2579 HyperCriticalWorkQueue
,
2583 _IRQL_requires_same_
2584 _Function_class_(WORKER_THREAD_ROUTINE
)
2586 (NTAPI WORKER_THREAD_ROUTINE
)(
2587 _In_ PVOID Parameter
);
2588 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
2590 typedef struct _WORK_QUEUE_ITEM
{
2592 PWORKER_THREAD_ROUTINE WorkerRoutine
;
2593 volatile PVOID Parameter
;
2594 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
2596 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
2598 typedef struct _OWNER_ENTRY
{
2599 ERESOURCE_THREAD OwnerThread
;
2600 _ANONYMOUS_UNION
union {
2601 _ANONYMOUS_STRUCT
struct {
2602 ULONG IoPriorityBoosted
:1;
2603 ULONG OwnerReferenced
:1;
2604 ULONG OwnerCount
:30;
2608 } OWNER_ENTRY
, *POWNER_ENTRY
;
2610 typedef struct _ERESOURCE
{
2611 LIST_ENTRY SystemResourcesList
;
2612 POWNER_ENTRY OwnerTable
;
2615 volatile PKSEMAPHORE SharedWaiters
;
2616 volatile PKEVENT ExclusiveWaiters
;
2617 OWNER_ENTRY OwnerEntry
;
2618 ULONG ActiveEntries
;
2619 ULONG ContentionCount
;
2620 ULONG NumberOfSharedWaiters
;
2621 ULONG NumberOfExclusiveWaiters
;
2625 _ANONYMOUS_UNION
union {
2627 ULONG_PTR CreatorBackTraceIndex
;
2629 KSPIN_LOCK SpinLock
;
2630 } ERESOURCE
, *PERESOURCE
;
2632 /* ERESOURCE.Flag */
2633 #define ResourceNeverExclusive 0x0010
2634 #define ResourceReleaseByOtherThread 0x0020
2635 #define ResourceOwnedExclusive 0x0080
2637 #define RESOURCE_HASH_TABLE_SIZE 64
2639 typedef struct _RESOURCE_HASH_ENTRY
{
2640 LIST_ENTRY ListEntry
;
2642 ULONG ContentionCount
;
2644 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
2646 typedef struct _RESOURCE_PERFORMANCE_DATA
{
2647 ULONG ActiveResourceCount
;
2648 ULONG TotalResourceCount
;
2649 ULONG ExclusiveAcquire
;
2650 ULONG SharedFirstLevel
;
2651 ULONG SharedSecondLevel
;
2652 ULONG StarveFirstLevel
;
2653 ULONG StarveSecondLevel
;
2654 ULONG WaitForExclusive
;
2655 ULONG OwnerTableExpands
;
2656 ULONG MaximumTableExpand
;
2657 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
2658 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
2660 /* Global debug flag */
2662 extern ULONG NtGlobalFlag
;
2663 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
2665 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
2668 /******************************************************************************
2669 * Security Manager Types *
2670 ******************************************************************************/
2673 typedef PVOID PSECURITY_DESCRIPTOR
;
2674 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
2675 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
2676 typedef PVOID PACCESS_TOKEN
;
2679 #define DELETE 0x00010000L
2680 #define READ_CONTROL 0x00020000L
2681 #define WRITE_DAC 0x00040000L
2682 #define WRITE_OWNER 0x00080000L
2683 #define SYNCHRONIZE 0x00100000L
2684 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
2685 #define STANDARD_RIGHTS_READ READ_CONTROL
2686 #define STANDARD_RIGHTS_WRITE READ_CONTROL
2687 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
2688 #define STANDARD_RIGHTS_ALL 0x001F0000L
2689 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
2690 #define ACCESS_SYSTEM_SECURITY 0x01000000L
2691 #define MAXIMUM_ALLOWED 0x02000000L
2692 #define GENERIC_READ 0x80000000L
2693 #define GENERIC_WRITE 0x40000000L
2694 #define GENERIC_EXECUTE 0x20000000L
2695 #define GENERIC_ALL 0x10000000L
2697 typedef struct _GENERIC_MAPPING
{
2698 ACCESS_MASK GenericRead
;
2699 ACCESS_MASK GenericWrite
;
2700 ACCESS_MASK GenericExecute
;
2701 ACCESS_MASK GenericAll
;
2702 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
2704 #define ACL_REVISION 2
2705 #define ACL_REVISION_DS 4
2707 #define ACL_REVISION1 1
2708 #define ACL_REVISION2 2
2709 #define ACL_REVISION3 3
2710 #define ACL_REVISION4 4
2711 #define MIN_ACL_REVISION ACL_REVISION2
2712 #define MAX_ACL_REVISION ACL_REVISION4
2714 typedef struct _ACL
{
2722 /* Current security descriptor revision value */
2723 #define SECURITY_DESCRIPTOR_REVISION (1)
2724 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2726 /* Privilege attributes */
2727 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2728 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2729 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2730 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2732 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
2733 SE_PRIVILEGE_ENABLED | \
2734 SE_PRIVILEGE_REMOVED | \
2735 SE_PRIVILEGE_USED_FOR_ACCESS)
2737 #include <pshpack4.h>
2738 typedef struct _LUID_AND_ATTRIBUTES
{
2741 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
2742 #include <poppack.h>
2744 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2745 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2747 /* Privilege sets */
2748 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2750 typedef struct _PRIVILEGE_SET
{
2751 ULONG PrivilegeCount
;
2753 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2754 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2756 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2758 SecurityIdentification
,
2759 SecurityImpersonation
,
2761 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2763 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2764 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2765 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2766 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2768 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2769 #define SECURITY_STATIC_TRACKING (FALSE)
2771 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2773 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2775 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2776 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2777 BOOLEAN EffectiveOnly
;
2778 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2780 typedef struct _SE_IMPERSONATION_STATE
{
2781 PACCESS_TOKEN Token
;
2783 BOOLEAN EffectiveOnly
;
2784 SECURITY_IMPERSONATION_LEVEL Level
;
2785 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2787 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2788 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2789 #define DACL_SECURITY_INFORMATION (0x00000004L)
2790 #define SACL_SECURITY_INFORMATION (0x00000008L)
2791 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2793 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2794 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2795 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2796 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2798 typedef enum _SECURITY_OPERATION_CODE
{
2799 SetSecurityDescriptor
,
2800 QuerySecurityDescriptor
,
2801 DeleteSecurityDescriptor
,
2802 AssignSecurityDescriptor
2803 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2805 #define INITIAL_PRIVILEGE_COUNT 3
2807 typedef struct _INITIAL_PRIVILEGE_SET
{
2808 ULONG PrivilegeCount
;
2810 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2811 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2813 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2814 #define SE_CREATE_TOKEN_PRIVILEGE 2
2815 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2816 #define SE_LOCK_MEMORY_PRIVILEGE 4
2817 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2818 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2819 #define SE_TCB_PRIVILEGE 7
2820 #define SE_SECURITY_PRIVILEGE 8
2821 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2822 #define SE_LOAD_DRIVER_PRIVILEGE 10
2823 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2824 #define SE_SYSTEMTIME_PRIVILEGE 12
2825 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2826 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2827 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2828 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2829 #define SE_BACKUP_PRIVILEGE 17
2830 #define SE_RESTORE_PRIVILEGE 18
2831 #define SE_SHUTDOWN_PRIVILEGE 19
2832 #define SE_DEBUG_PRIVILEGE 20
2833 #define SE_AUDIT_PRIVILEGE 21
2834 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2835 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2836 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2837 #define SE_UNDOCK_PRIVILEGE 25
2838 #define SE_SYNC_AGENT_PRIVILEGE 26
2839 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2840 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2841 #define SE_IMPERSONATE_PRIVILEGE 29
2842 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2843 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2844 #define SE_RELABEL_PRIVILEGE 32
2845 #define SE_INC_WORKING_SET_PRIVILEGE 33
2846 #define SE_TIME_ZONE_PRIVILEGE 34
2847 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2848 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2850 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2851 PACCESS_TOKEN ClientToken
;
2852 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2853 PACCESS_TOKEN PrimaryToken
;
2854 PVOID ProcessAuditId
;
2855 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2857 typedef struct _ACCESS_STATE
{
2859 BOOLEAN SecurityEvaluated
;
2860 BOOLEAN GenerateAudit
;
2861 BOOLEAN GenerateOnClose
;
2862 BOOLEAN PrivilegesAllocated
;
2864 ACCESS_MASK RemainingDesiredAccess
;
2865 ACCESS_MASK PreviouslyGrantedAccess
;
2866 ACCESS_MASK OriginalDesiredAccess
;
2867 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2868 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2871 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2872 PRIVILEGE_SET PrivilegeSet
;
2874 BOOLEAN AuditPrivileges
;
2875 UNICODE_STRING ObjectName
;
2876 UNICODE_STRING ObjectTypeName
;
2877 } ACCESS_STATE
, *PACCESS_STATE
;
2880 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2882 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
2886 #ifndef _NTLSA_AUDIT_
2887 #define _NTLSA_AUDIT_
2889 #define SE_MAX_AUDIT_PARAMETERS 32
2890 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2892 #define SE_ADT_OBJECT_ONLY 0x1
2894 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2895 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2896 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2897 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2898 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2900 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2901 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2902 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2904 typedef enum _SE_ADT_PARAMETER_TYPE
{
2905 SeAdtParmTypeNone
= 0,
2906 SeAdtParmTypeString
,
2907 SeAdtParmTypeFileSpec
,
2910 SeAdtParmTypeLogonId
,
2911 SeAdtParmTypeNoLogonId
,
2912 SeAdtParmTypeAccessMask
,
2914 SeAdtParmTypeObjectTypes
,
2915 SeAdtParmTypeHexUlong
,
2920 SeAdtParmTypeHexInt64
,
2921 SeAdtParmTypeStringList
,
2922 SeAdtParmTypeSidList
,
2923 SeAdtParmTypeDuration
,
2924 SeAdtParmTypeUserAccountControl
,
2926 SeAdtParmTypeMessage
,
2927 SeAdtParmTypeDateTime
,
2928 SeAdtParmTypeSockAddr
,
2930 SeAdtParmTypeLogonHours
,
2931 SeAdtParmTypeLogonIdNoSid
,
2932 SeAdtParmTypeUlongNoConv
,
2933 SeAdtParmTypeSockAddrNoPort
,
2934 SeAdtParmTypeAccessReason
2935 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2937 typedef struct _SE_ADT_OBJECT_TYPE
{
2941 ACCESS_MASK AccessMask
;
2942 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2944 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2945 SE_ADT_PARAMETER_TYPE Type
;
2949 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2951 typedef struct _SE_ADT_ACCESS_REASON
{
2952 ACCESS_MASK AccessMask
;
2953 ULONG AccessReasons
[32];
2954 ULONG ObjectTypeIndex
;
2955 ULONG AccessGranted
;
2956 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2957 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2959 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2962 ULONG ParameterCount
;
2964 USHORT FlatSubCategoryId
;
2967 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2968 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2970 #endif /* !_NTLSA_AUDIT_ */
2971 #endif /* !_NTLSA_IFS_ */
2972 /******************************************************************************
2973 * Power Management Support Types *
2974 ******************************************************************************/
2979 #define PO_CB_SYSTEM_POWER_POLICY 0
2980 #define PO_CB_AC_STATUS 1
2981 #define PO_CB_BUTTON_COLLISION 2
2982 #define PO_CB_SYSTEM_STATE_LOCK 3
2983 #define PO_CB_LID_SWITCH_STATE 4
2984 #define PO_CB_PROCESSOR_POWER_POLICY 5
2986 /* Power States/Levels */
2987 typedef enum _SYSTEM_POWER_STATE
{
2988 PowerSystemUnspecified
= 0,
2990 PowerSystemSleeping1
,
2991 PowerSystemSleeping2
,
2992 PowerSystemSleeping3
,
2993 PowerSystemHibernate
,
2994 PowerSystemShutdown
,
2996 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2998 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
3000 typedef enum _POWER_INFORMATION_LEVEL
{
3001 SystemPowerPolicyAc
,
3002 SystemPowerPolicyDc
,
3003 VerifySystemPolicyAc
,
3004 VerifySystemPolicyDc
,
3005 SystemPowerCapabilities
,
3007 SystemPowerStateHandler
,
3008 ProcessorStateHandler
,
3009 SystemPowerPolicyCurrent
,
3010 AdministratorPowerPolicy
,
3011 SystemReserveHiberFile
,
3012 ProcessorInformation
,
3013 SystemPowerInformation
,
3014 ProcessorStateHandler2
,
3017 SystemExecutionState
,
3018 SystemPowerStateNotifyHandler
,
3019 ProcessorPowerPolicyAc
,
3020 ProcessorPowerPolicyDc
,
3021 VerifyProcessorPowerPolicyAc
,
3022 VerifyProcessorPowerPolicyDc
,
3023 ProcessorPowerPolicyCurrent
,
3024 SystemPowerStateLogging
,
3025 SystemPowerLoggingEntry
,
3026 SetPowerSettingValue
,
3027 NotifyUserPowerSetting
,
3028 PowerInformationLevelUnused0
,
3029 PowerInformationLevelUnused1
,
3031 TraceApplicationPowerMessage
,
3032 TraceApplicationPowerMessageEnd
,
3033 ProcessorPerfStates
,
3034 ProcessorIdleStates
,
3037 SystemHiberFileInformation
,
3038 TraceServicePowerMessage
,
3040 PowerShutdownNotification
,
3041 MonitorCapabilities
,
3043 SessionDisplayState
,
3046 GetPowerRequestList
,
3047 ProcessorInformationEx
,
3048 NotifyUserModeLegacyPowerEvent
,
3050 ProcessorIdleDomains
,
3052 SystemHiberFileSize
,
3053 PowerInformationLevelMaximum
3054 } POWER_INFORMATION_LEVEL
;
3057 PowerActionNone
= 0,
3058 PowerActionReserved
,
3060 PowerActionHibernate
,
3061 PowerActionShutdown
,
3062 PowerActionShutdownReset
,
3063 PowerActionShutdownOff
,
3064 PowerActionWarmEject
3065 } POWER_ACTION
, *PPOWER_ACTION
;
3067 typedef enum _DEVICE_POWER_STATE
{
3068 PowerDeviceUnspecified
= 0,
3074 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
3076 typedef enum _MONITOR_DISPLAY_STATE
{
3077 PowerMonitorOff
= 0,
3080 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
3082 typedef union _POWER_STATE
{
3083 SYSTEM_POWER_STATE SystemState
;
3084 DEVICE_POWER_STATE DeviceState
;
3085 } POWER_STATE
, *PPOWER_STATE
;
3087 typedef enum _POWER_STATE_TYPE
{
3088 SystemPowerState
= 0,
3090 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
3092 #if (NTDDI_VERSION >= NTDDI_VISTA)
3093 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
3094 _ANONYMOUS_UNION
union {
3095 _ANONYMOUS_STRUCT
struct {
3097 ULONG TargetSystemState
:4;
3098 ULONG EffectiveSystemState
:4;
3099 ULONG CurrentSystemState
:4;
3100 ULONG IgnoreHibernationPath
:1;
3101 ULONG PseudoTransition
:1;
3104 ULONG ContextAsUlong
;
3106 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
3109 #if (NTDDI_VERSION >= NTDDI_WIN7)
3110 typedef struct _COUNTED_REASON_CONTEXT
{
3113 _ANONYMOUS_UNION
union {
3114 _ANONYMOUS_STRUCT
struct {
3115 UNICODE_STRING ResourceFileName
;
3116 USHORT ResourceReasonId
;
3118 PUNICODE_STRING ReasonStrings
;
3120 UNICODE_STRING SimpleString
;
3122 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
3125 #define IOCTL_QUERY_DEVICE_POWER_STATE \
3126 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
3128 #define IOCTL_SET_DEVICE_WAKE \
3129 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
3131 #define IOCTL_CANCEL_DEVICE_WAKE \
3132 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
3134 #define ES_SYSTEM_REQUIRED 0x00000001
3135 #define ES_DISPLAY_REQUIRED 0x00000002
3136 #define ES_USER_PRESENT 0x00000004
3137 #define ES_CONTINUOUS 0x80000000
3139 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
3146 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
3147 #define DIAGNOSTIC_REASON_VERSION 0
3148 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
3149 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
3150 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
3151 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
3154 #define POWER_REQUEST_CONTEXT_VERSION 0
3155 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
3156 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
3158 #define PowerRequestMaximum 3
3160 typedef enum _POWER_REQUEST_TYPE
{
3161 PowerRequestDisplayRequired
,
3162 PowerRequestSystemRequired
,
3163 PowerRequestAwayModeRequired
3164 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
3166 #if (NTDDI_VERSION >= NTDDI_WINXP)
3168 #define PDCAP_D0_SUPPORTED 0x00000001
3169 #define PDCAP_D1_SUPPORTED 0x00000002
3170 #define PDCAP_D2_SUPPORTED 0x00000004
3171 #define PDCAP_D3_SUPPORTED 0x00000008
3172 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
3173 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
3174 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
3175 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
3176 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
3178 typedef struct CM_Power_Data_s
{
3180 DEVICE_POWER_STATE PD_MostRecentPowerState
;
3181 ULONG PD_Capabilities
;
3185 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
3186 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
3187 } CM_POWER_DATA
, *PCM_POWER_DATA
;
3189 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3191 typedef enum _SYSTEM_POWER_CONDITION
{
3196 } SYSTEM_POWER_CONDITION
;
3198 typedef struct _SET_POWER_SETTING_VALUE
{
3201 SYSTEM_POWER_CONDITION PowerCondition
;
3203 UCHAR Data
[ANYSIZE_ARRAY
];
3204 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
3206 #define POWER_SETTING_VALUE_VERSION (0x1)
3208 typedef struct _NOTIFY_USER_POWER_SETTING
{
3210 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
3212 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
3213 LARGE_INTEGER ActivationTime
;
3215 ULONG ButtonInstanceID
;
3216 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
3218 typedef enum _POWER_PLATFORM_ROLE
{
3219 PlatformRoleUnspecified
= 0,
3220 PlatformRoleDesktop
,
3222 PlatformRoleWorkstation
,
3223 PlatformRoleEnterpriseServer
,
3224 PlatformRoleSOHOServer
,
3225 PlatformRoleAppliancePC
,
3226 PlatformRolePerformanceServer
,
3228 } POWER_PLATFORM_ROLE
;
3230 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
3234 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
3235 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
3237 #endif /* !_PO_DDK_ */
3239 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
3240 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
3241 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
3242 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
3244 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
3245 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
3246 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
3247 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
3248 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
3249 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
3250 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
3251 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
3252 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
3253 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
3254 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
3255 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
3256 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
3257 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
3258 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
3259 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
3260 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
3261 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
3262 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
3263 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
3264 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
3265 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
3266 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
3267 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
3268 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
3269 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
3270 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
3271 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
3272 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
3273 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
3274 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
3275 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
3276 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
3277 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
3278 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
3279 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
3280 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
3281 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
3282 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
3283 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
3284 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
3285 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
3286 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
3287 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
3288 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
3289 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
3290 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
3291 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
3292 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
3293 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
3294 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
3295 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
3296 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
3297 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
3298 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
3299 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
3300 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
3301 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
3302 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
3303 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
3304 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
3305 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
3306 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
3307 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
3308 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
3309 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
3310 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
3311 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
3312 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
3313 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
3314 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
3315 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
3316 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
3317 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
3318 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
3319 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
3320 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
3321 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
3322 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
3323 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
3324 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
3325 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
3326 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
3327 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
3328 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
3329 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
3330 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
3331 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
3332 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
3333 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
3334 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
3335 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
3336 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
3337 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
3338 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
3339 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
3340 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
3341 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
3342 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
3343 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
3344 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
3345 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
3346 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
3347 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
3348 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
3349 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
3350 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
3351 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
3352 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
3354 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
3355 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
3356 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
3357 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
3359 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
3360 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
3362 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
3363 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
3365 _Function_class_(REQUEST_POWER_COMPLETE
)
3366 _IRQL_requires_same_
3368 (NTAPI REQUEST_POWER_COMPLETE
)(
3369 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
3370 _In_ UCHAR MinorFunction
,
3371 _In_ POWER_STATE PowerState
,
3372 _In_opt_ PVOID Context
,
3373 _In_
struct _IO_STATUS_BLOCK
*IoStatus
);
3374 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
3376 _Function_class_(POWER_SETTING_CALLBACK
)
3377 _IRQL_requires_same_
3379 (NTAPI POWER_SETTING_CALLBACK
)(
3380 _In_ LPCGUID SettingGuid
,
3381 _In_reads_bytes_(ValueLength
) PVOID Value
,
3382 _In_ ULONG ValueLength
,
3383 _Inout_opt_ PVOID Context
);
3384 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
3386 /******************************************************************************
3387 * Configuration Manager Types *
3388 ******************************************************************************/
3390 /* Resource list definitions */
3391 typedef int CM_RESOURCE_TYPE
;
3393 #define CmResourceTypeNull 0
3394 #define CmResourceTypePort 1
3395 #define CmResourceTypeInterrupt 2
3396 #define CmResourceTypeMemory 3
3397 #define CmResourceTypeDma 4
3398 #define CmResourceTypeDeviceSpecific 5
3399 #define CmResourceTypeBusNumber 6
3400 #define CmResourceTypeNonArbitrated 128
3401 #define CmResourceTypeConfigData 128
3402 #define CmResourceTypeDevicePrivate 129
3403 #define CmResourceTypePcCardConfig 130
3404 #define CmResourceTypeMfCardConfig 131
3406 /* KEY_VALUE_Xxx.Type */
3409 #define REG_EXPAND_SZ 2
3410 #define REG_BINARY 3
3412 #define REG_DWORD_LITTLE_ENDIAN 4
3413 #define REG_DWORD_BIG_ENDIAN 5
3415 #define REG_MULTI_SZ 7
3416 #define REG_RESOURCE_LIST 8
3417 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3418 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3419 #define REG_QWORD 11
3420 #define REG_QWORD_LITTLE_ENDIAN 11
3422 /* Registry Access Rights */
3423 #define KEY_QUERY_VALUE (0x0001)
3424 #define KEY_SET_VALUE (0x0002)
3425 #define KEY_CREATE_SUB_KEY (0x0004)
3426 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
3427 #define KEY_NOTIFY (0x0010)
3428 #define KEY_CREATE_LINK (0x0020)
3429 #define KEY_WOW64_32KEY (0x0200)
3430 #define KEY_WOW64_64KEY (0x0100)
3431 #define KEY_WOW64_RES (0x0300)
3433 #define KEY_READ ((STANDARD_RIGHTS_READ |\
3435 KEY_ENUMERATE_SUB_KEYS |\
3440 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
3442 KEY_CREATE_SUB_KEY) \
3446 #define KEY_EXECUTE ((KEY_READ) \
3450 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
3453 KEY_CREATE_SUB_KEY |\
3454 KEY_ENUMERATE_SUB_KEYS |\
3460 /* Registry Open/Create Options */
3461 #define REG_OPTION_RESERVED (0x00000000L)
3462 #define REG_OPTION_NON_VOLATILE (0x00000000L)
3463 #define REG_OPTION_VOLATILE (0x00000001L)
3464 #define REG_OPTION_CREATE_LINK (0x00000002L)
3465 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
3466 #define REG_OPTION_OPEN_LINK (0x00000008L)
3468 #define REG_LEGAL_OPTION \
3469 (REG_OPTION_RESERVED |\
3470 REG_OPTION_NON_VOLATILE |\
3471 REG_OPTION_VOLATILE |\
3472 REG_OPTION_CREATE_LINK |\
3473 REG_OPTION_BACKUP_RESTORE |\
3474 REG_OPTION_OPEN_LINK)
3476 #define REG_OPEN_LEGAL_OPTION \
3477 (REG_OPTION_RESERVED |\
3478 REG_OPTION_BACKUP_RESTORE |\
3479 REG_OPTION_OPEN_LINK)
3481 #define REG_STANDARD_FORMAT 1
3482 #define REG_LATEST_FORMAT 2
3483 #define REG_NO_COMPRESSION 4
3485 /* Key creation/open disposition */
3486 #define REG_CREATED_NEW_KEY (0x00000001L)
3487 #define REG_OPENED_EXISTING_KEY (0x00000002L)
3489 /* Key restore & hive load flags */
3490 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
3491 #define REG_REFRESH_HIVE (0x00000002L)
3492 #define REG_NO_LAZY_FLUSH (0x00000004L)
3493 #define REG_FORCE_RESTORE (0x00000008L)
3494 #define REG_APP_HIVE (0x00000010L)
3495 #define REG_PROCESS_PRIVATE (0x00000020L)
3496 #define REG_START_JOURNAL (0x00000040L)
3497 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
3498 #define REG_HIVE_NO_RM (0x00000100L)
3499 #define REG_HIVE_SINGLE_LOG (0x00000200L)
3500 #define REG_BOOT_HIVE (0x00000400L)
3503 #define REG_FORCE_UNLOAD 1
3505 /* Notify Filter Values */
3506 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
3507 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
3508 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
3509 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
3511 #define REG_LEGAL_CHANGE_FILTER \
3512 (REG_NOTIFY_CHANGE_NAME |\
3513 REG_NOTIFY_CHANGE_ATTRIBUTES |\
3514 REG_NOTIFY_CHANGE_LAST_SET |\
3515 REG_NOTIFY_CHANGE_SECURITY)
3517 #include <pshpack4.h>
3518 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
3520 UCHAR ShareDisposition
;
3524 PHYSICAL_ADDRESS Start
;
3528 PHYSICAL_ADDRESS Start
;
3532 #if defined(NT_PROCESSOR_GROUPS)
3541 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3543 _ANONYMOUS_UNION
union {
3545 #if defined(NT_PROCESSOR_GROUPS)
3550 USHORT MessageCount
;
3555 #if defined(NT_PROCESSOR_GROUPS)
3568 PHYSICAL_ADDRESS Start
;
3588 } DeviceSpecificData
;
3589 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3591 PHYSICAL_ADDRESS Start
;
3595 PHYSICAL_ADDRESS Start
;
3599 PHYSICAL_ADDRESS Start
;
3604 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
3605 #include <poppack.h>
3607 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
3608 #define CmResourceTypeNull 0
3609 #define CmResourceTypePort 1
3610 #define CmResourceTypeInterrupt 2
3611 #define CmResourceTypeMemory 3
3612 #define CmResourceTypeDma 4
3613 #define CmResourceTypeDeviceSpecific 5
3614 #define CmResourceTypeBusNumber 6
3615 #define CmResourceTypeMemoryLarge 7
3616 #define CmResourceTypeNonArbitrated 128
3617 #define CmResourceTypeConfigData 128
3618 #define CmResourceTypeDevicePrivate 129
3619 #define CmResourceTypePcCardConfig 130
3620 #define CmResourceTypeMfCardConfig 131
3622 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
3623 typedef enum _CM_SHARE_DISPOSITION
{
3624 CmResourceShareUndetermined
= 0,
3625 CmResourceShareDeviceExclusive
,
3626 CmResourceShareDriverExclusive
,
3627 CmResourceShareShared
3628 } CM_SHARE_DISPOSITION
;
3630 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
3631 #define CM_RESOURCE_PORT_MEMORY 0x0000
3632 #define CM_RESOURCE_PORT_IO 0x0001
3633 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
3634 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
3635 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
3636 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
3637 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
3638 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
3639 #define CM_RESOURCE_PORT_BAR 0x0100
3641 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
3642 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
3643 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
3644 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
3645 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
3647 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
3649 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
3651 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
3652 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
3653 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
3654 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
3655 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
3656 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
3657 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
3658 #define CM_RESOURCE_MEMORY_24 0x0010
3659 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
3660 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
3661 #define CM_RESOURCE_MEMORY_BAR 0x0080
3662 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
3664 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
3665 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
3666 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
3667 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
3669 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
3670 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
3671 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
3673 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
3674 #define CM_RESOURCE_DMA_8 0x0000
3675 #define CM_RESOURCE_DMA_16 0x0001
3676 #define CM_RESOURCE_DMA_32 0x0002
3677 #define CM_RESOURCE_DMA_8_AND_16 0x0004
3678 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
3679 #define CM_RESOURCE_DMA_TYPE_A 0x0010
3680 #define CM_RESOURCE_DMA_TYPE_B 0x0020
3681 #define CM_RESOURCE_DMA_TYPE_F 0x0040
3683 typedef struct _DEVICE_FLAGS
{
3691 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
3693 typedef enum _INTERFACE_TYPE
{
3694 InterfaceTypeUndefined
= -1,
3712 MaximumInterfaceType
3713 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
3715 typedef struct _CM_COMPONENT_INFORMATION
{
3719 KAFFINITY AffinityMask
;
3720 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
3722 typedef struct _CM_ROM_BLOCK
{
3725 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
3727 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
3731 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
3732 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
3734 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
3735 INTERFACE_TYPE InterfaceType
;
3737 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
3738 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
3740 typedef struct _CM_RESOURCE_LIST
{
3742 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
3743 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
3745 typedef struct _PNP_BUS_INFORMATION
{
3747 INTERFACE_TYPE LegacyBusType
;
3749 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
3751 #include <pshpack1.h>
3753 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3756 USHORT SectorsPerTrack
;
3758 USHORT NumberDrives
;
3759 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3761 typedef struct _CM_MCA_POS_DATA
{
3767 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3769 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3773 UCHAR DeviceType
[3];
3774 USHORT DeviceAttributes
;
3775 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3777 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3781 USHORT ControlField
;
3783 ULONG EventFlagAddress
;
3784 USHORT RealModeEntryOffset
;
3785 USHORT RealModeEntrySegment
;
3786 USHORT ProtectedModeEntryOffset
;
3787 ULONG ProtectedModeCodeBaseAddress
;
3789 USHORT RealModeDataBaseAddress
;
3790 ULONG ProtectedModeDataBaseAddress
;
3791 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3793 #include <poppack.h>
3795 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3796 ULONG BytesPerSector
;
3797 ULONG NumberOfCylinders
;
3798 ULONG SectorsPerTrack
;
3799 ULONG NumberOfHeads
;
3800 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3802 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3807 USHORT KeyboardFlags
;
3808 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3810 typedef struct _CM_SCSI_DEVICE_DATA
{
3813 UCHAR HostIdentifier
;
3814 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3816 typedef struct _CM_VIDEO_DEVICE_DATA
{
3820 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3822 typedef struct _CM_SONIC_DEVICE_DATA
{
3825 USHORT DataConfigurationRegister
;
3826 UCHAR EthernetAddress
[8];
3827 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3829 typedef struct _CM_SERIAL_DEVICE_DATA
{
3833 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3835 typedef struct _CM_MONITOR_DEVICE_DATA
{
3838 USHORT HorizontalScreenSize
;
3839 USHORT VerticalScreenSize
;
3840 USHORT HorizontalResolution
;
3841 USHORT VerticalResolution
;
3842 USHORT HorizontalDisplayTimeLow
;
3843 USHORT HorizontalDisplayTime
;
3844 USHORT HorizontalDisplayTimeHigh
;
3845 USHORT HorizontalBackPorchLow
;
3846 USHORT HorizontalBackPorch
;
3847 USHORT HorizontalBackPorchHigh
;
3848 USHORT HorizontalFrontPorchLow
;
3849 USHORT HorizontalFrontPorch
;
3850 USHORT HorizontalFrontPorchHigh
;
3851 USHORT HorizontalSyncLow
;
3852 USHORT HorizontalSync
;
3853 USHORT HorizontalSyncHigh
;
3854 USHORT VerticalBackPorchLow
;
3855 USHORT VerticalBackPorch
;
3856 USHORT VerticalBackPorchHigh
;
3857 USHORT VerticalFrontPorchLow
;
3858 USHORT VerticalFrontPorch
;
3859 USHORT VerticalFrontPorchHigh
;
3860 USHORT VerticalSyncLow
;
3861 USHORT VerticalSync
;
3862 USHORT VerticalSyncHigh
;
3863 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3865 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3871 UCHAR StepRateHeadUnloadTime
;
3874 UCHAR SectorLengthCode
;
3875 UCHAR SectorPerTrack
;
3876 UCHAR ReadWriteGapLength
;
3877 UCHAR DataTransferLength
;
3878 UCHAR FormatGapLength
;
3879 UCHAR FormatFillCharacter
;
3880 UCHAR HeadSettleTime
;
3881 UCHAR MotorSettleTime
;
3882 UCHAR MaximumTrackValue
;
3883 UCHAR DataTransferRate
;
3884 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3886 typedef enum _KEY_INFORMATION_CLASS
{
3887 KeyBasicInformation
,
3891 KeyCachedInformation
,
3892 KeyFlagsInformation
,
3893 KeyVirtualizationInformation
,
3894 KeyHandleTagsInformation
,
3896 } KEY_INFORMATION_CLASS
;
3898 typedef struct _KEY_BASIC_INFORMATION
{
3899 LARGE_INTEGER LastWriteTime
;
3903 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3905 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3907 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3909 typedef struct _KEY_FULL_INFORMATION
{
3910 LARGE_INTEGER LastWriteTime
;
3918 ULONG MaxValueNameLen
;
3919 ULONG MaxValueDataLen
;
3921 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3923 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3925 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3927 typedef struct _KEY_NODE_INFORMATION
{
3928 LARGE_INTEGER LastWriteTime
;
3934 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3936 typedef enum _KEY_SET_INFORMATION_CLASS
{
3937 KeyWriteTimeInformation
,
3938 KeyWow64FlagsInformation
,
3939 KeyControlFlagsInformation
,
3940 KeySetVirtualizationInformation
,
3941 KeySetDebugInformation
,
3942 KeySetHandleTagsInformation
,
3944 } KEY_SET_INFORMATION_CLASS
;
3946 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3947 ULONG VirtualTarget
:1;
3948 ULONG VirtualStore
:1;
3949 ULONG VirtualSource
:1;
3951 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3953 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3958 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3960 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3967 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3969 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3973 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3974 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3976 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3979 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3980 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3982 typedef struct _KEY_VALUE_ENTRY
{
3983 PUNICODE_STRING ValueName
;
3987 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3989 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3990 KeyValueBasicInformation
,
3991 KeyValueFullInformation
,
3992 KeyValuePartialInformation
,
3993 KeyValueFullInformationAlign64
,
3994 KeyValuePartialInformationAlign64
3995 } KEY_VALUE_INFORMATION_CLASS
;
3997 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3999 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
4001 typedef struct _KEY_WRITE_TIME_INFORMATION
{
4002 LARGE_INTEGER LastWriteTime
;
4003 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
4005 typedef enum _REG_NOTIFY_CLASS
{
4007 RegNtPreDeleteKey
= RegNtDeleteKey
,
4009 RegNtPreSetValueKey
= RegNtSetValueKey
,
4010 RegNtDeleteValueKey
,
4011 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
4012 RegNtSetInformationKey
,
4013 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
4015 RegNtPreRenameKey
= RegNtRenameKey
,
4017 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
4018 RegNtEnumerateValueKey
,
4019 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
4021 RegNtPreQueryKey
= RegNtQueryKey
,
4023 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
4024 RegNtQueryMultipleValueKey
,
4025 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
4030 RegNtKeyHandleClose
,
4031 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
4033 RegNtPostSetValueKey
,
4034 RegNtPostDeleteValueKey
,
4035 RegNtPostSetInformationKey
,
4037 RegNtPostEnumerateKey
,
4038 RegNtPostEnumerateValueKey
,
4040 RegNtPostQueryValueKey
,
4041 RegNtPostQueryMultipleValueKey
,
4042 RegNtPostKeyHandleClose
,
4043 RegNtPreCreateKeyEx
,
4044 RegNtPostCreateKeyEx
,
4053 RegNtPreQueryKeySecurity
,
4054 RegNtPostQueryKeySecurity
,
4055 RegNtPreSetKeySecurity
,
4056 RegNtPostSetKeySecurity
,
4057 RegNtCallbackObjectContextCleanup
,
4059 RegNtPostRestoreKey
,
4063 RegNtPostReplaceKey
,
4065 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
4067 _IRQL_requires_same_
4068 _Function_class_(EX_CALLBACK_FUNCTION
)
4070 (NTAPI EX_CALLBACK_FUNCTION
)(
4071 _In_ PVOID CallbackContext
,
4072 _In_opt_ PVOID Argument1
,
4073 _In_opt_ PVOID Argument2
);
4074 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
4076 typedef struct _REG_DELETE_KEY_INFORMATION
{
4079 PVOID ObjectContext
;
4081 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
4082 #if (NTDDI_VERSION >= NTDDI_VISTA)
4083 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
4087 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
4089 PUNICODE_STRING ValueName
;
4095 PVOID ObjectContext
;
4097 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
4099 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
4101 PUNICODE_STRING ValueName
;
4103 PVOID ObjectContext
;
4105 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
4107 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
4109 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
4110 PVOID KeySetInformation
;
4111 ULONG KeySetInformationLength
;
4113 PVOID ObjectContext
;
4115 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
4117 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
4120 KEY_INFORMATION_CLASS KeyInformationClass
;
4121 PVOID KeyInformation
;
4123 PULONG ResultLength
;
4125 PVOID ObjectContext
;
4127 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
4129 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
4132 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4133 PVOID KeyValueInformation
;
4135 PULONG ResultLength
;
4137 PVOID ObjectContext
;
4139 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
4141 typedef struct _REG_QUERY_KEY_INFORMATION
{
4143 KEY_INFORMATION_CLASS KeyInformationClass
;
4144 PVOID KeyInformation
;
4146 PULONG ResultLength
;
4148 PVOID ObjectContext
;
4150 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
4152 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
4154 PUNICODE_STRING ValueName
;
4155 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4156 PVOID KeyValueInformation
;
4158 PULONG ResultLength
;
4160 PVOID ObjectContext
;
4162 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
4164 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
4166 PKEY_VALUE_ENTRY ValueEntries
;
4169 PULONG BufferLength
;
4170 PULONG RequiredBufferLength
;
4172 PVOID ObjectContext
;
4174 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4176 typedef struct _REG_RENAME_KEY_INFORMATION
{
4178 PUNICODE_STRING NewName
;
4180 PVOID ObjectContext
;
4182 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
4184 typedef struct _REG_CREATE_KEY_INFORMATION
{
4185 PUNICODE_STRING CompleteName
;
4188 ULONG CreateOptions
;
4189 PUNICODE_STRING Class
;
4190 PVOID SecurityDescriptor
;
4191 PVOID SecurityQualityOfService
;
4192 ACCESS_MASK DesiredAccess
;
4193 ACCESS_MASK GrantedAccess
;
4195 PVOID
*ResultObject
;
4197 PVOID RootObjectContext
;
4200 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
4202 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
4203 PUNICODE_STRING CompleteName
;
4207 PUNICODE_STRING Class
;
4208 PVOID SecurityDescriptor
;
4209 PVOID SecurityQualityOfService
;
4210 ACCESS_MASK DesiredAccess
;
4211 ACCESS_MASK GrantedAccess
;
4213 PVOID
*ResultObject
;
4215 PVOID RootObjectContext
;
4218 PUNICODE_STRING RemainingName
;
4221 KPROCESSOR_MODE CheckAccessMode
;
4222 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
4224 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
4225 PUNICODE_STRING CompleteName
;
4226 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
4228 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
4229 PUNICODE_STRING CompleteName
;
4232 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4234 typedef struct _REG_POST_OPERATION_INFORMATION
{
4237 PVOID PreInformation
;
4238 NTSTATUS ReturnStatus
;
4240 PVOID ObjectContext
;
4242 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4244 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
4247 PVOID ObjectContext
;
4249 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4251 #if (NTDDI_VERSION >= NTDDI_VISTA)
4253 typedef struct _REG_LOAD_KEY_INFORMATION
{
4255 PUNICODE_STRING KeyName
;
4256 PUNICODE_STRING SourceFile
;
4258 PVOID TrustClassObject
;
4260 ACCESS_MASK DesiredAccess
;
4263 PVOID ObjectContext
;
4265 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
4267 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
4271 PVOID ObjectContext
;
4273 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
4275 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
4277 PVOID ObjectContext
;
4279 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
4281 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
4283 PSECURITY_INFORMATION SecurityInformation
;
4284 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4287 PVOID ObjectContext
;
4289 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
4291 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
4293 PSECURITY_INFORMATION SecurityInformation
;
4294 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4296 PVOID ObjectContext
;
4298 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
4300 typedef struct _REG_RESTORE_KEY_INFORMATION
{
4305 PVOID ObjectContext
;
4307 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
4309 typedef struct _REG_SAVE_KEY_INFORMATION
{
4314 PVOID ObjectContext
;
4316 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
4318 typedef struct _REG_REPLACE_KEY_INFORMATION
{
4320 PUNICODE_STRING OldFileName
;
4321 PUNICODE_STRING NewFileName
;
4323 PVOID ObjectContext
;
4325 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
4327 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
4329 #define SERVICE_KERNEL_DRIVER 0x00000001
4330 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
4331 #define SERVICE_ADAPTER 0x00000004
4332 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
4334 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
4335 SERVICE_FILE_SYSTEM_DRIVER | \
4336 SERVICE_RECOGNIZER_DRIVER)
4338 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
4339 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
4340 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
4341 SERVICE_WIN32_SHARE_PROCESS)
4343 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
4345 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
4348 SERVICE_INTERACTIVE_PROCESS)
4350 /* Service Start Types */
4351 #define SERVICE_BOOT_START 0x00000000
4352 #define SERVICE_SYSTEM_START 0x00000001
4353 #define SERVICE_AUTO_START 0x00000002
4354 #define SERVICE_DEMAND_START 0x00000003
4355 #define SERVICE_DISABLED 0x00000004
4357 #define SERVICE_ERROR_IGNORE 0x00000000
4358 #define SERVICE_ERROR_NORMAL 0x00000001
4359 #define SERVICE_ERROR_SEVERE 0x00000002
4360 #define SERVICE_ERROR_CRITICAL 0x00000003
4362 typedef enum _CM_SERVICE_NODE_TYPE
{
4363 DriverType
= SERVICE_KERNEL_DRIVER
,
4364 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
4365 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
4366 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
4367 AdapterType
= SERVICE_ADAPTER
,
4368 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
4369 } SERVICE_NODE_TYPE
;
4371 typedef enum _CM_SERVICE_LOAD_TYPE
{
4372 BootLoad
= SERVICE_BOOT_START
,
4373 SystemLoad
= SERVICE_SYSTEM_START
,
4374 AutoLoad
= SERVICE_AUTO_START
,
4375 DemandLoad
= SERVICE_DEMAND_START
,
4376 DisableLoad
= SERVICE_DISABLED
4377 } SERVICE_LOAD_TYPE
;
4379 typedef enum _CM_ERROR_CONTROL_TYPE
{
4380 IgnoreError
= SERVICE_ERROR_IGNORE
,
4381 NormalError
= SERVICE_ERROR_NORMAL
,
4382 SevereError
= SERVICE_ERROR_SEVERE
,
4383 CriticalError
= SERVICE_ERROR_CRITICAL
4384 } SERVICE_ERROR_TYPE
;
4386 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
4387 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
4388 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
4390 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
4391 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
4392 CM_SERVICE_USB_DISK_BOOT_LOAD)
4394 /******************************************************************************
4395 * I/O Manager Types *
4396 ******************************************************************************/
4399 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
4401 #define CONNECT_FULLY_SPECIFIED 0x1
4402 #define CONNECT_LINE_BASED 0x2
4403 #define CONNECT_MESSAGE_BASED 0x3
4404 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
4405 #define CONNECT_CURRENT_VERSION 0x4
4407 #define POOL_COLD_ALLOCATION 256
4408 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4409 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4411 #define IO_TYPE_ADAPTER 1
4412 #define IO_TYPE_CONTROLLER 2
4413 #define IO_TYPE_DEVICE 3
4414 #define IO_TYPE_DRIVER 4
4415 #define IO_TYPE_FILE 5
4416 #define IO_TYPE_IRP 6
4417 #define IO_TYPE_MASTER_ADAPTER 7
4418 #define IO_TYPE_OPEN_PACKET 8
4419 #define IO_TYPE_TIMER 9
4420 #define IO_TYPE_VPB 10
4421 #define IO_TYPE_ERROR_LOG 11
4422 #define IO_TYPE_ERROR_MESSAGE 12
4423 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
4425 #define IO_TYPE_CSQ_IRP_CONTEXT 1
4426 #define IO_TYPE_CSQ 2
4427 #define IO_TYPE_CSQ_EX 3
4429 /* IO_RESOURCE_DESCRIPTOR.Option */
4430 #define IO_RESOURCE_PREFERRED 0x01
4431 #define IO_RESOURCE_DEFAULT 0x02
4432 #define IO_RESOURCE_ALTERNATIVE 0x08
4434 #define FILE_DEVICE_BEEP 0x00000001
4435 #define FILE_DEVICE_CD_ROM 0x00000002
4436 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
4437 #define FILE_DEVICE_CONTROLLER 0x00000004
4438 #define FILE_DEVICE_DATALINK 0x00000005
4439 #define FILE_DEVICE_DFS 0x00000006
4440 #define FILE_DEVICE_DISK 0x00000007
4441 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
4442 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
4443 #define FILE_DEVICE_INPORT_PORT 0x0000000a
4444 #define FILE_DEVICE_KEYBOARD 0x0000000b
4445 #define FILE_DEVICE_MAILSLOT 0x0000000c
4446 #define FILE_DEVICE_MIDI_IN 0x0000000d
4447 #define FILE_DEVICE_MIDI_OUT 0x0000000e
4448 #define FILE_DEVICE_MOUSE 0x0000000f
4449 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
4450 #define FILE_DEVICE_NAMED_PIPE 0x00000011
4451 #define FILE_DEVICE_NETWORK 0x00000012
4452 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
4453 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
4454 #define FILE_DEVICE_NULL 0x00000015
4455 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
4456 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
4457 #define FILE_DEVICE_PRINTER 0x00000018
4458 #define FILE_DEVICE_SCANNER 0x00000019
4459 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
4460 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
4461 #define FILE_DEVICE_SCREEN 0x0000001c
4462 #define FILE_DEVICE_SOUND 0x0000001d
4463 #define FILE_DEVICE_STREAMS 0x0000001e
4464 #define FILE_DEVICE_TAPE 0x0000001f
4465 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
4466 #define FILE_DEVICE_TRANSPORT 0x00000021
4467 #define FILE_DEVICE_UNKNOWN 0x00000022
4468 #define FILE_DEVICE_VIDEO 0x00000023
4469 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
4470 #define FILE_DEVICE_WAVE_IN 0x00000025
4471 #define FILE_DEVICE_WAVE_OUT 0x00000026
4472 #define FILE_DEVICE_8042_PORT 0x00000027
4473 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
4474 #define FILE_DEVICE_BATTERY 0x00000029
4475 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
4476 #define FILE_DEVICE_MODEM 0x0000002b
4477 #define FILE_DEVICE_VDM 0x0000002c
4478 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
4479 #define FILE_DEVICE_SMB 0x0000002e
4480 #define FILE_DEVICE_KS 0x0000002f
4481 #define FILE_DEVICE_CHANGER 0x00000030
4482 #define FILE_DEVICE_SMARTCARD 0x00000031
4483 #define FILE_DEVICE_ACPI 0x00000032
4484 #define FILE_DEVICE_DVD 0x00000033
4485 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
4486 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
4487 #define FILE_DEVICE_DFS_VOLUME 0x00000036
4488 #define FILE_DEVICE_SERENUM 0x00000037
4489 #define FILE_DEVICE_TERMSRV 0x00000038
4490 #define FILE_DEVICE_KSEC 0x00000039
4491 #define FILE_DEVICE_FIPS 0x0000003A
4492 #define FILE_DEVICE_INFINIBAND 0x0000003B
4493 #define FILE_DEVICE_VMBUS 0x0000003E
4494 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
4495 #define FILE_DEVICE_WPD 0x00000040
4496 #define FILE_DEVICE_BLUETOOTH 0x00000041
4497 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
4498 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
4499 #define FILE_DEVICE_BIOMETRIC 0x00000044
4500 #define FILE_DEVICE_PMI 0x00000045
4502 #if defined(NT_PROCESSOR_GROUPS)
4504 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4506 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
4507 IrqPolicyMachineDefault
= 0,
4508 IrqPolicyAllCloseProcessors
= 1,
4509 IrqPolicyOneCloseProcessor
= 2,
4510 IrqPolicyAllProcessorsInMachine
= 3,
4511 IrqPolicyAllProcessorsInGroup
= 3,
4512 IrqPolicySpecifiedProcessors
= 4,
4513 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
4515 #else /* defined(NT_PROCESSOR_GROUPS) */
4517 typedef enum _IRQ_DEVICE_POLICY
{
4518 IrqPolicyMachineDefault
= 0,
4519 IrqPolicyAllCloseProcessors
,
4520 IrqPolicyOneCloseProcessor
,
4521 IrqPolicyAllProcessorsInMachine
,
4522 IrqPolicySpecifiedProcessors
,
4523 IrqPolicySpreadMessagesAcrossAllProcessors
4524 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4528 typedef enum _IRQ_PRIORITY
{
4529 IrqPriorityUndefined
= 0,
4533 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
4535 typedef enum _IRQ_GROUP_POLICY
{
4536 GroupAffinityAllGroupZero
= 0,
4537 GroupAffinityDontCare
4538 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
4540 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
4542 typedef struct _OBJECT_HANDLE_INFORMATION
{
4543 ULONG HandleAttributes
;
4544 ACCESS_MASK GrantedAccess
;
4545 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4547 typedef struct _CLIENT_ID
{
4548 HANDLE UniqueProcess
;
4549 HANDLE UniqueThread
;
4550 } CLIENT_ID
, *PCLIENT_ID
;
4552 typedef struct _VPB
{
4556 USHORT VolumeLabelLength
;
4557 struct _DEVICE_OBJECT
*DeviceObject
;
4558 struct _DEVICE_OBJECT
*RealDevice
;
4560 ULONG ReferenceCount
;
4561 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
4564 typedef enum _IO_ALLOCATION_ACTION
{
4567 DeallocateObjectKeepRegisters
4568 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
4570 _Function_class_(DRIVER_CONTROL
)
4571 _IRQL_requires_same_
4572 typedef IO_ALLOCATION_ACTION
4573 (NTAPI DRIVER_CONTROL
)(
4574 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
4575 _Inout_
struct _IRP
*Irp
,
4576 _In_ PVOID MapRegisterBase
,
4577 _In_ PVOID Context
);
4578 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
4580 typedef struct _WAIT_CONTEXT_BLOCK
{
4581 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
4582 PDRIVER_CONTROL DeviceRoutine
;
4583 PVOID DeviceContext
;
4584 ULONG NumberOfMapRegisters
;
4587 PKDPC BufferChainingDpc
;
4588 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
4590 /* DEVICE_OBJECT.Flags */
4591 #define DO_VERIFY_VOLUME 0x00000002
4592 #define DO_BUFFERED_IO 0x00000004
4593 #define DO_EXCLUSIVE 0x00000008
4594 #define DO_DIRECT_IO 0x00000010
4595 #define DO_MAP_IO_BUFFER 0x00000020
4596 #define DO_DEVICE_INITIALIZING 0x00000080
4597 #define DO_SHUTDOWN_REGISTERED 0x00000800
4598 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4599 #define DO_POWER_PAGABLE 0x00002000
4600 #define DO_POWER_INRUSH 0x00004000
4602 /* DEVICE_OBJECT.Characteristics */
4603 #define FILE_REMOVABLE_MEDIA 0x00000001
4604 #define FILE_READ_ONLY_DEVICE 0x00000002
4605 #define FILE_FLOPPY_DISKETTE 0x00000004
4606 #define FILE_WRITE_ONCE_MEDIA 0x00000008
4607 #define FILE_REMOTE_DEVICE 0x00000010
4608 #define FILE_DEVICE_IS_MOUNTED 0x00000020
4609 #define FILE_VIRTUAL_VOLUME 0x00000040
4610 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
4611 #define FILE_DEVICE_SECURE_OPEN 0x00000100
4612 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
4613 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
4614 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
4616 /* DEVICE_OBJECT.AlignmentRequirement */
4617 #define FILE_BYTE_ALIGNMENT 0x00000000
4618 #define FILE_WORD_ALIGNMENT 0x00000001
4619 #define FILE_LONG_ALIGNMENT 0x00000003
4620 #define FILE_QUAD_ALIGNMENT 0x00000007
4621 #define FILE_OCTA_ALIGNMENT 0x0000000f
4622 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
4623 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
4624 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
4625 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
4626 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
4628 /* DEVICE_OBJECT.DeviceType */
4629 #define DEVICE_TYPE ULONG
4631 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _DEVICE_OBJECT
{
4634 LONG ReferenceCount
;
4635 struct _DRIVER_OBJECT
*DriverObject
;
4636 struct _DEVICE_OBJECT
*NextDevice
;
4637 struct _DEVICE_OBJECT
*AttachedDevice
;
4638 struct _IRP
*CurrentIrp
;
4641 ULONG Characteristics
;
4643 PVOID DeviceExtension
;
4644 DEVICE_TYPE DeviceType
;
4647 LIST_ENTRY ListEntry
;
4648 WAIT_CONTEXT_BLOCK Wcb
;
4650 ULONG AlignmentRequirement
;
4651 KDEVICE_QUEUE DeviceQueue
;
4653 ULONG ActiveThreadCount
;
4654 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4658 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
4660 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
4662 typedef enum _IO_SESSION_STATE
{
4663 IoSessionStateCreated
= 1,
4664 IoSessionStateInitialized
,
4665 IoSessionStateConnected
,
4666 IoSessionStateDisconnected
,
4667 IoSessionStateDisconnectedLoggedOn
,
4668 IoSessionStateLoggedOn
,
4669 IoSessionStateLoggedOff
,
4670 IoSessionStateTerminated
,
4672 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
4674 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
4675 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
4676 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
4677 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
4679 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
4680 PHYSICAL_ADDRESS MessageAddress
;
4681 KAFFINITY TargetProcessorSet
;
4682 PKINTERRUPT InterruptObject
;
4686 KINTERRUPT_MODE Mode
;
4687 KINTERRUPT_POLARITY Polarity
;
4688 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
4690 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
4693 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
4694 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
4696 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
4697 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4698 _Out_ PKINTERRUPT
*InterruptObject
;
4699 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4700 _In_ PVOID ServiceContext
;
4701 _In_opt_ PKSPIN_LOCK SpinLock
;
4702 _In_ KIRQL SynchronizeIrql
;
4703 _In_ BOOLEAN FloatingSave
;
4704 _In_ BOOLEAN ShareVector
;
4707 _In_ KINTERRUPT_MODE InterruptMode
;
4708 _In_ KAFFINITY ProcessorEnableMask
;
4710 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
4712 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
4713 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4714 _Out_ PKINTERRUPT
*InterruptObject
;
4715 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4716 _In_ PVOID ServiceContext
;
4717 _In_opt_ PKSPIN_LOCK SpinLock
;
4718 _In_opt_ KIRQL SynchronizeIrql
;
4719 _In_ BOOLEAN FloatingSave
;
4720 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
4722 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
4723 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4725 _Out_ PVOID
*Generic
;
4726 _Out_ PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
4727 _Out_ PKINTERRUPT
*InterruptObject
;
4728 } ConnectionContext
;
4729 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
4730 _In_ PVOID ServiceContext
;
4731 _In_opt_ PKSPIN_LOCK SpinLock
;
4732 _In_opt_ KIRQL SynchronizeIrql
;
4733 _In_ BOOLEAN FloatingSave
;
4734 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine
;
4735 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
4737 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
4738 _Inout_ ULONG Version
;
4739 _ANONYMOUS_UNION
union {
4740 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
4741 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
4742 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4744 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4746 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4750 _In_ PKINTERRUPT InterruptObject
;
4751 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4752 } ConnectionContext
;
4753 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4755 typedef enum _IO_ACCESS_TYPE
{
4761 typedef enum _IO_ACCESS_MODE
{
4766 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4767 IoSessionStateNotification
,
4768 IoMaxContainerNotificationClass
4769 } IO_CONTAINER_NOTIFICATION_CLASS
;
4771 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4777 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4779 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4780 IoSessionStateInformation
,
4781 IoMaxContainerInformationClass
4782 } IO_CONTAINER_INFORMATION_CLASS
;
4784 typedef struct _IO_SESSION_STATE_INFORMATION
{
4786 IO_SESSION_STATE SessionState
;
4787 BOOLEAN LocalSession
;
4788 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4790 #if (NTDDI_VERSION >= NTDDI_WIN7)
4793 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4797 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4798 _In_ PVOID SessionObject
,
4799 _In_ PVOID IoObject
,
4802 _In_reads_bytes_opt_(PayloadLength
) PVOID NotificationPayload
,
4803 _In_ ULONG PayloadLength
);
4805 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4809 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4811 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4813 BOOLEAN Reserved
[3];
4814 volatile LONG IoCount
;
4816 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4818 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4821 LONGLONG MaxLockedTicks
;
4823 LIST_ENTRY LockList
;
4825 volatile LONG LowMemoryCount
;
4828 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4829 } IO_REMOVE_LOCK_DBG_BLOCK
;
4831 typedef struct _IO_REMOVE_LOCK
{
4832 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4834 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4836 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4838 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4840 _Function_class_(IO_WORKITEM_ROUTINE
)
4841 _IRQL_requires_(PASSIVE_LEVEL
)
4842 _IRQL_requires_same_
4844 (NTAPI IO_WORKITEM_ROUTINE
)(
4845 _In_ PDEVICE_OBJECT DeviceObject
,
4846 _In_opt_ PVOID Context
);
4847 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4850 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4851 _In_ PVOID IoObject
,
4852 _In_opt_ PVOID Context
,
4853 _In_ PIO_WORKITEM IoWorkItem
);
4854 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4856 typedef struct _SHARE_ACCESS
{
4864 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4866 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4867 inheritance, even from a struct renders the type non-POD. So we use
4869 #define PCI_COMMON_HEADER_LAYOUT \
4878 UCHAR CacheLineSize; \
4879 UCHAR LatencyTimer; \
4883 struct _PCI_HEADER_TYPE_0 { \
4884 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4886 USHORT SubVendorID; \
4887 USHORT SubSystemID; \
4888 ULONG ROMBaseAddress; \
4889 UCHAR CapabilitiesPtr; \
4890 UCHAR Reserved1[3]; \
4892 UCHAR InterruptLine; \
4893 UCHAR InterruptPin; \
4894 UCHAR MinimumGrant; \
4895 UCHAR MaximumLatency; \
4897 struct _PCI_HEADER_TYPE_1 { \
4898 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4900 UCHAR SecondaryBus; \
4901 UCHAR SubordinateBus; \
4902 UCHAR SecondaryLatency; \
4905 USHORT SecondaryStatus; \
4906 USHORT MemoryBase; \
4907 USHORT MemoryLimit; \
4908 USHORT PrefetchBase; \
4909 USHORT PrefetchLimit; \
4910 ULONG PrefetchBaseUpper32; \
4911 ULONG PrefetchLimitUpper32; \
4912 USHORT IOBaseUpper16; \
4913 USHORT IOLimitUpper16; \
4914 UCHAR CapabilitiesPtr; \
4915 UCHAR Reserved1[3]; \
4916 ULONG ROMBaseAddress; \
4917 UCHAR InterruptLine; \
4918 UCHAR InterruptPin; \
4919 USHORT BridgeControl; \
4921 struct _PCI_HEADER_TYPE_2 { \
4922 ULONG SocketRegistersBaseAddress; \
4923 UCHAR CapabilitiesPtr; \
4925 USHORT SecondaryStatus; \
4927 UCHAR SecondaryBus; \
4928 UCHAR SubordinateBus; \
4929 UCHAR SecondaryLatency; \
4933 } Range[PCI_TYPE2_ADDRESSES-1]; \
4934 UCHAR InterruptLine; \
4935 UCHAR InterruptPin; \
4936 USHORT BridgeControl; \
4940 typedef enum _CREATE_FILE_TYPE
{
4942 CreateFileTypeNamedPipe
,
4943 CreateFileTypeMailslot
4946 #define IO_FORCE_ACCESS_CHECK 0x001
4947 #define IO_NO_PARAMETER_CHECKING 0x100
4949 #define IO_REPARSE 0x0
4950 #define IO_REMOUNT 0x1
4952 typedef struct _IO_STATUS_BLOCK
{
4953 _ANONYMOUS_UNION
union {
4957 ULONG_PTR Information
;
4958 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4961 typedef struct _IO_STATUS_BLOCK32
{
4964 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4968 (NTAPI
*PIO_APC_ROUTINE
)(
4969 _In_ PVOID ApcContext
,
4970 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
4971 _In_ ULONG Reserved
);
4973 #define PIO_APC_ROUTINE_DEFINED
4975 typedef enum _IO_SESSION_EVENT
{
4976 IoSessionEventIgnore
= 0,
4977 IoSessionEventCreated
,
4978 IoSessionEventTerminated
,
4979 IoSessionEventConnected
,
4980 IoSessionEventDisconnected
,
4981 IoSessionEventLogon
,
4982 IoSessionEventLogoff
,
4984 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4986 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4987 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4988 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4989 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4990 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4991 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4992 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4994 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4996 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4998 typedef struct _IO_SESSION_CONNECT_INFO
{
5000 BOOLEAN LocalSession
;
5001 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
5003 #define EVENT_INCREMENT 1
5004 #define IO_NO_INCREMENT 0
5005 #define IO_CD_ROM_INCREMENT 1
5006 #define IO_DISK_INCREMENT 1
5007 #define IO_KEYBOARD_INCREMENT 6
5008 #define IO_MAILSLOT_INCREMENT 2
5009 #define IO_MOUSE_INCREMENT 6
5010 #define IO_NAMED_PIPE_INCREMENT 2
5011 #define IO_NETWORK_INCREMENT 2
5012 #define IO_PARALLEL_INCREMENT 1
5013 #define IO_SERIAL_INCREMENT 2
5014 #define IO_SOUND_INCREMENT 8
5015 #define IO_VIDEO_INCREMENT 1
5016 #define SEMAPHORE_INCREMENT 1
5018 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
5020 typedef struct _BOOTDISK_INFORMATION
{
5021 LONGLONG BootPartitionOffset
;
5022 LONGLONG SystemPartitionOffset
;
5023 ULONG BootDeviceSignature
;
5024 ULONG SystemDeviceSignature
;
5025 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
5027 typedef struct _BOOTDISK_INFORMATION_EX
{
5028 LONGLONG BootPartitionOffset
;
5029 LONGLONG SystemPartitionOffset
;
5030 ULONG BootDeviceSignature
;
5031 ULONG SystemDeviceSignature
;
5032 GUID BootDeviceGuid
;
5033 GUID SystemDeviceGuid
;
5034 BOOLEAN BootDeviceIsGpt
;
5035 BOOLEAN SystemDeviceIsGpt
;
5036 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
5038 #if (NTDDI_VERSION >= NTDDI_WIN7)
5040 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
5041 ULONG PartitionStyle
;
5042 ULONG PartitionNumber
;
5043 _ANONYMOUS_UNION
union {
5048 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
5050 typedef struct _BOOTDISK_INFORMATION_LITE
{
5051 ULONG NumberEntries
;
5052 LOADER_PARTITION_INFORMATION_EX Entries
[1];
5053 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
5057 #if (NTDDI_VERSION >= NTDDI_VISTA)
5058 typedef struct _BOOTDISK_INFORMATION_LITE
{
5059 ULONG BootDeviceSignature
;
5060 ULONG SystemDeviceSignature
;
5061 GUID BootDeviceGuid
;
5062 GUID SystemDeviceGuid
;
5063 BOOLEAN BootDeviceIsGpt
;
5064 BOOLEAN SystemDeviceIsGpt
;
5065 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
5066 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5068 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5070 #include <pshpack1.h>
5072 typedef struct _EISA_MEMORY_TYPE
{
5079 UCHAR MoreEntries
:1;
5080 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
5082 typedef struct _EISA_MEMORY_CONFIGURATION
{
5083 EISA_MEMORY_TYPE ConfigurationByte
;
5085 USHORT AddressLowWord
;
5086 UCHAR AddressHighByte
;
5088 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
5090 typedef struct _EISA_IRQ_DESCRIPTOR
{
5093 UCHAR LevelTriggered
:1;
5095 UCHAR MoreEntries
:1;
5096 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
5098 typedef struct _EISA_IRQ_CONFIGURATION
{
5099 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
5101 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
5103 typedef struct _DMA_CONFIGURATION_BYTE0
{
5107 UCHAR MoreEntries
:1;
5108 } DMA_CONFIGURATION_BYTE0
;
5110 typedef struct _DMA_CONFIGURATION_BYTE1
{
5112 UCHAR TransferSize
:2;
5115 } DMA_CONFIGURATION_BYTE1
;
5117 typedef struct _EISA_DMA_CONFIGURATION
{
5118 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
5119 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
5120 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
5122 typedef struct _EISA_PORT_DESCRIPTOR
{
5123 UCHAR NumberPorts
:5;
5126 UCHAR MoreEntries
:1;
5127 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
5129 typedef struct _EISA_PORT_CONFIGURATION
{
5130 EISA_PORT_DESCRIPTOR Configuration
;
5132 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
5134 typedef struct _CM_EISA_SLOT_INFORMATION
{
5137 UCHAR MajorRevision
;
5138 UCHAR MinorRevision
;
5140 UCHAR NumberFunctions
;
5141 UCHAR FunctionInformation
;
5143 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
5145 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
5149 UCHAR MinorRevision
;
5150 UCHAR MajorRevision
;
5151 UCHAR Selections
[26];
5152 UCHAR FunctionFlags
;
5153 UCHAR TypeString
[80];
5154 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
5155 EISA_IRQ_CONFIGURATION EisaIrq
[7];
5156 EISA_DMA_CONFIGURATION EisaDma
[4];
5157 EISA_PORT_CONFIGURATION EisaPort
[20];
5158 UCHAR InitializationData
[60];
5159 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
5161 #include <poppack.h>
5163 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
5165 #define EISA_FUNCTION_ENABLED 0x80
5166 #define EISA_FREE_FORM_DATA 0x40
5167 #define EISA_HAS_PORT_INIT_ENTRY 0x20
5168 #define EISA_HAS_PORT_RANGE 0x10
5169 #define EISA_HAS_DMA_ENTRY 0x08
5170 #define EISA_HAS_IRQ_ENTRY 0x04
5171 #define EISA_HAS_MEMORY_ENTRY 0x02
5172 #define EISA_HAS_TYPE_ENTRY 0x01
5173 #define EISA_HAS_INFORMATION \
5174 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
5175 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
5177 #define EISA_MORE_ENTRIES 0x80
5178 #define EISA_SYSTEM_MEMORY 0x00
5179 #define EISA_MEMORY_TYPE_RAM 0x01
5181 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
5183 #define EISA_INVALID_SLOT 0x80
5184 #define EISA_INVALID_FUNCTION 0x81
5185 #define EISA_INVALID_CONFIGURATION 0x82
5186 #define EISA_EMPTY_SLOT 0x83
5187 #define EISA_INVALID_BIOS_CALL 0x86
5190 ** Plug and Play structures
5194 (NTAPI
*PINTERFACE_REFERENCE
)(
5198 (NTAPI
*PINTERFACE_DEREFERENCE
)(
5201 _Function_class_(TRANSLATE_BUS_ADDRESS
)
5202 _IRQL_requires_same_
5204 (NTAPI TRANSLATE_BUS_ADDRESS
)(
5205 _Inout_opt_ PVOID Context
,
5206 _In_ PHYSICAL_ADDRESS BusAddress
,
5208 _Out_ PULONG AddressSpace
,
5209 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
5210 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
5212 _Function_class_(GET_DMA_ADAPTER
)
5213 _IRQL_requires_same_
5214 typedef struct _DMA_ADAPTER
*
5215 (NTAPI GET_DMA_ADAPTER
)(
5216 _Inout_opt_ PVOID Context
,
5217 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
5218 _Out_ PULONG NumberOfMapRegisters
);
5219 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
5221 _Function_class_(GET_SET_DEVICE_DATA
)
5222 _IRQL_requires_same_
5224 (NTAPI GET_SET_DEVICE_DATA
)(
5225 _Inout_opt_ PVOID Context
,
5226 _In_ ULONG DataType
,
5227 _Inout_updates_bytes_(Length
) PVOID Buffer
,
5230 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
5232 typedef enum _DEVICE_INSTALL_STATE
{
5233 InstallStateInstalled
,
5234 InstallStateNeedsReinstall
,
5235 InstallStateFailedInstall
,
5236 InstallStateFinishInstall
5237 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
5239 typedef struct _LEGACY_BUS_INFORMATION
{
5241 INTERFACE_TYPE LegacyBusType
;
5243 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
5245 typedef enum _DEVICE_REMOVAL_POLICY
{
5246 RemovalPolicyExpectNoRemoval
= 1,
5247 RemovalPolicyExpectOrderlyRemoval
= 2,
5248 RemovalPolicyExpectSurpriseRemoval
= 3
5249 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
5252 (NTAPI
*PREENUMERATE_SELF
)(
5253 _In_ PVOID Context
);
5255 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
5259 PINTERFACE_REFERENCE InterfaceReference
;
5260 PINTERFACE_DEREFERENCE InterfaceDereference
;
5261 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
5262 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
5265 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
5266 _In_ NTSTATUS Status
,
5267 _Inout_opt_ PVOID Context
);
5269 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
5271 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
5272 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
5273 #define PCI_USE_REVISION 0x00000002
5274 #define PCI_USE_VENDEV_IDS 0x00000004
5275 #define PCI_USE_CLASS_SUBCLASS 0x00000008
5276 #define PCI_USE_PROGIF 0x00000010
5277 #define PCI_USE_LOCAL_BUS 0x00000020
5278 #define PCI_USE_LOCAL_DEVICE 0x00000040
5280 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
5291 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
5293 _IRQL_requires_max_(PASSIVE_LEVEL
)
5294 _Must_inspect_result_
5296 (NTAPI PCI_IS_DEVICE_PRESENT
)(
5297 _In_ USHORT VendorID
,
5298 _In_ USHORT DeviceID
,
5299 _In_ UCHAR RevisionID
,
5300 _In_ USHORT SubVendorID
,
5301 _In_ USHORT SubSystemID
,
5303 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
5305 _IRQL_requires_max_(PASSIVE_LEVEL
)
5306 _Must_inspect_result_
5308 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
5310 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
5311 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
5313 typedef struct _BUS_INTERFACE_STANDARD
{
5317 PINTERFACE_REFERENCE InterfaceReference
;
5318 PINTERFACE_DEREFERENCE InterfaceDereference
;
5319 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
5320 PGET_DMA_ADAPTER GetDmaAdapter
;
5321 PGET_SET_DEVICE_DATA SetBusData
;
5322 PGET_SET_DEVICE_DATA GetBusData
;
5323 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
5325 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
5329 PINTERFACE_REFERENCE InterfaceReference
;
5330 PINTERFACE_DEREFERENCE InterfaceDereference
;
5331 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
5332 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
5333 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
5335 _Struct_size_bytes_(Size
)
5336 typedef struct _DEVICE_CAPABILITIES
{
5337 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES
)) USHORT Size
;
5341 ULONG LockSupported
:1;
5342 ULONG EjectSupported
:1;
5346 ULONG SilentInstall
:1;
5347 ULONG RawDeviceOK
:1;
5348 ULONG SurpriseRemovalOK
:1;
5353 ULONG HardwareDisabled
:1;
5355 ULONG WarmEjectSupported
:1;
5356 ULONG NoDisplayInUI
:1;
5360 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
5361 SYSTEM_POWER_STATE SystemWake
;
5362 DEVICE_POWER_STATE DeviceWake
;
5366 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
5368 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
5372 GUID InterfaceClassGuid
;
5373 PUNICODE_STRING SymbolicLinkName
;
5374 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
5376 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
5380 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
5384 typedef struct _INTERFACE
{
5388 PINTERFACE_REFERENCE InterfaceReference
;
5389 PINTERFACE_DEREFERENCE InterfaceDereference
;
5390 } INTERFACE
, *PINTERFACE
;
5392 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
5396 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
5398 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
5400 /* PNP_DEVICE_STATE */
5402 #define PNP_DEVICE_DISABLED 0x00000001
5403 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
5404 #define PNP_DEVICE_FAILED 0x00000004
5405 #define PNP_DEVICE_REMOVED 0x00000008
5406 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
5407 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
5409 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
5413 struct _FILE_OBJECT
*FileObject
;
5414 LONG NameBufferOffset
;
5415 UCHAR CustomDataBuffer
[1];
5416 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
5418 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
5422 struct _FILE_OBJECT
*FileObject
;
5423 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
5425 #if (NTDDI_VERSION >= NTDDI_VISTA)
5426 #include <devpropdef.h>
5427 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
5430 #define PNP_REPLACE_NO_MAP MAXLONGLONG
5432 _Must_inspect_result_
5434 (NTAPI
*PREPLACE_MAP_MEMORY
)(
5435 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress
,
5436 _In_ PHYSICAL_ADDRESS SparePhysicalAddress
,
5437 _Inout_ PLARGE_INTEGER NumberOfBytes
,
5438 _Outptr_ PVOID
*TargetAddress
,
5439 _Outptr_ PVOID
*SpareAddress
);
5441 typedef struct _PNP_REPLACE_MEMORY_LIST
{
5442 ULONG AllocatedCount
;
5444 ULONGLONG TotalLength
;
5446 PHYSICAL_ADDRESS Address
;
5448 } Ranges
[ANYSIZE_ARRAY
];
5449 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
5451 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
5452 PKAFFINITY Affinity
;
5453 _Field_range_(<=, MAXIMUM_GROUPS
) ULONG GroupCount
;
5454 ULONG AllocatedCount
;
5456 ULONG ApicIds
[ANYSIZE_ARRAY
];
5457 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
5459 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
5460 KAFFINITY AffinityMask
;
5461 ULONG AllocatedCount
;
5463 ULONG ApicIds
[ANYSIZE_ARRAY
];
5464 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
5466 #define PNP_REPLACE_PARAMETERS_VERSION 2
5468 typedef struct _PNP_REPLACE_PARAMETERS
{
5473 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
5474 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
5475 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
5476 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
5477 PREPLACE_MAP_MEMORY MapMemory
;
5478 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
5481 (NTAPI
*PREPLACE_UNLOAD
)(
5484 _Must_inspect_result_
5486 (NTAPI
*PREPLACE_BEGIN
)(
5487 _In_ PPNP_REPLACE_PARAMETERS Parameters
,
5488 _Outptr_ PVOID
*Context
);
5490 _Must_inspect_result_
5492 (NTAPI
*PREPLACE_END
)(
5493 _In_ PVOID Context
);
5495 _Must_inspect_result_
5497 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
5499 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
5500 _In_ LARGE_INTEGER ByteCount
);
5502 _Must_inspect_result_
5504 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
5507 _In_ BOOLEAN Target
);
5509 _Must_inspect_result_
5511 (NTAPI
*PREPLACE_SWAP
)(
5512 _In_ PVOID Context
);
5514 _Must_inspect_result_
5516 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
5517 _In_ PVOID Context
);
5519 _Must_inspect_result_
5521 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
5522 _In_ PVOID Context
);
5524 _Must_inspect_result_
5526 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
5528 _In_ PHYSICAL_ADDRESS SourceAddress
,
5529 _Out_ PPHYSICAL_ADDRESS DestinationAddress
);
5531 _Must_inspect_result_
5533 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
5535 _In_ BOOLEAN Enable
);
5537 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
5538 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
5539 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
5541 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
5542 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
5543 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
5544 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
5545 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
5547 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
5551 PREPLACE_UNLOAD Unload
;
5552 PREPLACE_BEGIN BeginReplace
;
5553 PREPLACE_END EndReplace
;
5554 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
5555 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
5557 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
5558 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
5559 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
5560 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
5561 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
5563 _Must_inspect_result_
5565 (NTAPI
*PREPLACE_DRIVER_INIT
)(
5566 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface
,
5569 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
5570 DeviceUsageTypeUndefined
,
5571 DeviceUsageTypePaging
,
5572 DeviceUsageTypeHibernation
,
5573 DeviceUsageTypeDumpFile
5574 } DEVICE_USAGE_NOTIFICATION_TYPE
;
5576 typedef struct _POWER_SEQUENCE
{
5580 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
5583 #define __string_type 0x1000
5584 #define __guid_type 0x2000
5585 #define __multiString_type 0x4000
5587 #define __string_type 0
5588 #define __guid_type 0
5589 #define __multiString_type 0
5593 DevicePropertyDeviceDescription
= 0x0 | __string_type
,
5594 DevicePropertyHardwareID
= 0x1 | __multiString_type
,
5595 DevicePropertyCompatibleIDs
= 0x2 | __multiString_type
,
5596 DevicePropertyBootConfiguration
= 0x3,
5597 DevicePropertyBootConfigurationTranslated
= 0x4,
5598 DevicePropertyClassName
= 0x5 | __string_type
,
5599 DevicePropertyClassGuid
= 0x6 | __string_type
,
5600 DevicePropertyDriverKeyName
= 0x7 | __string_type
,
5601 DevicePropertyManufacturer
= 0x8 | __string_type
,
5602 DevicePropertyFriendlyName
= 0x9 | __string_type
,
5603 DevicePropertyLocationInformation
= 0xa | __string_type
,
5604 DevicePropertyPhysicalDeviceObjectName
= 0xb | __string_type
,
5605 DevicePropertyBusTypeGuid
= 0xc | __guid_type
,
5606 DevicePropertyLegacyBusType
= 0xd,
5607 DevicePropertyBusNumber
= 0xe,
5608 DevicePropertyEnumeratorName
= 0xf | __string_type
,
5609 DevicePropertyAddress
= 0x10,
5610 DevicePropertyUINumber
= 0x11,
5611 DevicePropertyInstallState
= 0x12,
5612 DevicePropertyRemovalPolicy
= 0x13,
5613 DevicePropertyResourceRequirements
= 0x14,
5614 DevicePropertyAllocatedResources
= 0x15,
5615 DevicePropertyContainerID
= 0x16 | __string_type
5616 } DEVICE_REGISTRY_PROPERTY
;
5618 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
5619 EventCategoryReserved
,
5620 EventCategoryHardwareProfileChange
,
5621 EventCategoryDeviceInterfaceChange
,
5622 EventCategoryTargetDeviceChange
5623 } IO_NOTIFICATION_EVENT_CATEGORY
;
5625 typedef enum _IO_PRIORITY_HINT
{
5626 IoPriorityVeryLow
= 0,
5634 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
5636 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)
5637 _IRQL_requires_max_(PASSIVE_LEVEL
)
5639 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
5640 _In_ PVOID NotificationStructure
,
5641 _Inout_opt_ PVOID Context
);
5642 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
5644 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK
)
5645 _IRQL_requires_same_
5647 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
5648 _Inout_opt_ PVOID Context
);
5649 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
5651 typedef enum _FILE_INFORMATION_CLASS
{
5652 FileDirectoryInformation
= 1,
5653 FileFullDirectoryInformation
,
5654 FileBothDirectoryInformation
,
5655 FileBasicInformation
,
5656 FileStandardInformation
,
5657 FileInternalInformation
,
5659 FileAccessInformation
,
5660 FileNameInformation
,
5661 FileRenameInformation
,
5662 FileLinkInformation
,
5663 FileNamesInformation
,
5664 FileDispositionInformation
,
5665 FilePositionInformation
,
5666 FileFullEaInformation
,
5667 FileModeInformation
,
5668 FileAlignmentInformation
,
5670 FileAllocationInformation
,
5671 FileEndOfFileInformation
,
5672 FileAlternateNameInformation
,
5673 FileStreamInformation
,
5674 FilePipeInformation
,
5675 FilePipeLocalInformation
,
5676 FilePipeRemoteInformation
,
5677 FileMailslotQueryInformation
,
5678 FileMailslotSetInformation
,
5679 FileCompressionInformation
,
5680 FileObjectIdInformation
,
5681 FileCompletionInformation
,
5682 FileMoveClusterInformation
,
5683 FileQuotaInformation
,
5684 FileReparsePointInformation
,
5685 FileNetworkOpenInformation
,
5686 FileAttributeTagInformation
,
5687 FileTrackingInformation
,
5688 FileIdBothDirectoryInformation
,
5689 FileIdFullDirectoryInformation
,
5690 FileValidDataLengthInformation
,
5691 FileShortNameInformation
,
5692 #if (NTDDI_VERSION >= NTDDI_VISTA)
5693 FileIoCompletionNotificationInformation
,
5694 FileIoStatusBlockRangeInformation
,
5695 FileIoPriorityHintInformation
,
5696 FileSfioReserveInformation
,
5697 FileSfioVolumeInformation
,
5698 FileHardLinkInformation
,
5699 FileProcessIdsUsingFileInformation
,
5700 FileNormalizedNameInformation
,
5701 FileNetworkPhysicalNameInformation
,
5703 #if (NTDDI_VERSION >= NTDDI_WIN7)
5704 FileIdGlobalTxDirectoryInformation
,
5705 FileIsRemoteDeviceInformation
,
5706 FileAttributeCacheInformation
,
5707 FileNumaNodeInformation
,
5708 FileStandardLinkInformation
,
5709 FileRemoteProtocolInformation
,
5711 FileMaximumInformation
5712 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
5714 typedef struct _FILE_POSITION_INFORMATION
{
5715 LARGE_INTEGER CurrentByteOffset
;
5716 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
5718 typedef struct _FILE_BASIC_INFORMATION
{
5719 LARGE_INTEGER CreationTime
;
5720 LARGE_INTEGER LastAccessTime
;
5721 LARGE_INTEGER LastWriteTime
;
5722 LARGE_INTEGER ChangeTime
;
5723 ULONG FileAttributes
;
5724 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
5726 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
5727 IO_PRIORITY_HINT PriorityHint
;
5728 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
5730 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
5732 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
5734 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
5735 PUCHAR IoStatusBlockRange
;
5737 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
5739 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
5741 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
5743 typedef struct _FILE_NUMA_NODE_INFORMATION
{
5745 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
5747 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
5748 ULONG NumberOfProcessIdsInList
;
5749 ULONG_PTR ProcessIdList
[1];
5750 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
5752 typedef struct _FILE_STANDARD_INFORMATION
{
5753 LARGE_INTEGER AllocationSize
;
5754 LARGE_INTEGER EndOfFile
;
5755 ULONG NumberOfLinks
;
5756 BOOLEAN DeletePending
;
5758 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
5760 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
5761 LARGE_INTEGER CreationTime
;
5762 LARGE_INTEGER LastAccessTime
;
5763 LARGE_INTEGER LastWriteTime
;
5764 LARGE_INTEGER ChangeTime
;
5765 LARGE_INTEGER AllocationSize
;
5766 LARGE_INTEGER EndOfFile
;
5767 ULONG FileAttributes
;
5768 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
5770 typedef enum _FSINFOCLASS
{
5771 FileFsVolumeInformation
= 1,
5772 FileFsLabelInformation
,
5773 FileFsSizeInformation
,
5774 FileFsDeviceInformation
,
5775 FileFsAttributeInformation
,
5776 FileFsControlInformation
,
5777 FileFsFullSizeInformation
,
5778 FileFsObjectIdInformation
,
5779 FileFsDriverPathInformation
,
5780 FileFsVolumeFlagsInformation
,
5781 FileFsMaximumInformation
5782 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
5784 typedef struct _FILE_FS_DEVICE_INFORMATION
{
5785 DEVICE_TYPE DeviceType
;
5786 ULONG Characteristics
;
5787 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5789 typedef struct _FILE_FULL_EA_INFORMATION
{
5790 ULONG NextEntryOffset
;
5793 USHORT EaValueLength
;
5795 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5797 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5798 ULONG RequestsPerPeriod
;
5800 BOOLEAN RetryFailures
;
5801 BOOLEAN Discardable
;
5803 ULONG NumOutstandingRequests
;
5804 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5806 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5807 ULONG MaximumRequestsPerPeriod
;
5808 ULONG MinimumPeriod
;
5809 ULONG MinimumTransferSize
;
5810 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5812 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5813 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5814 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5816 #define FM_LOCK_BIT (0x1)
5817 #define FM_LOCK_BIT_V (0x0)
5818 #define FM_LOCK_WAITER_WOKEN (0x2)
5819 #define FM_LOCK_WAITER_INC (0x4)
5821 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE
)
5822 _IRQL_requires_same_
5824 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5825 _In_
struct _FILE_OBJECT
*FileObject
,
5826 _In_ PLARGE_INTEGER FileOffset
,
5830 _In_ BOOLEAN CheckForReadOperation
,
5831 _Out_ PIO_STATUS_BLOCK IoStatus
,
5832 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5833 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5835 _Function_class_(FAST_IO_READ
)
5836 _IRQL_requires_same_
5838 (NTAPI FAST_IO_READ
)(
5839 _In_
struct _FILE_OBJECT
*FileObject
,
5840 _In_ PLARGE_INTEGER FileOffset
,
5845 _Out_ PIO_STATUS_BLOCK IoStatus
,
5846 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5847 typedef FAST_IO_READ
*PFAST_IO_READ
;
5849 _Function_class_(FAST_IO_WRITE
)
5850 _IRQL_requires_same_
5852 (NTAPI FAST_IO_WRITE
)(
5853 _In_
struct _FILE_OBJECT
*FileObject
,
5854 _In_ PLARGE_INTEGER FileOffset
,
5859 _Out_ PIO_STATUS_BLOCK IoStatus
,
5860 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5861 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5863 _Function_class_(FAST_IO_QUERY_BASIC_INFO
)
5864 _IRQL_requires_same_
5866 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5867 _In_
struct _FILE_OBJECT
*FileObject
,
5869 _Out_ PFILE_BASIC_INFORMATION Buffer
,
5870 _Out_ PIO_STATUS_BLOCK IoStatus
,
5871 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5872 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5874 _Function_class_(FAST_IO_QUERY_STANDARD_INFO
)
5875 _IRQL_requires_same_
5877 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5878 _In_
struct _FILE_OBJECT
*FileObject
,
5880 _Out_ PFILE_STANDARD_INFORMATION Buffer
,
5881 _Out_ PIO_STATUS_BLOCK IoStatus
,
5882 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5883 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5885 _Function_class_(FAST_IO_LOCK
)
5886 _IRQL_requires_same_
5888 (NTAPI FAST_IO_LOCK
)(
5889 _In_
struct _FILE_OBJECT
*FileObject
,
5890 _In_ PLARGE_INTEGER FileOffset
,
5891 _In_ PLARGE_INTEGER Length
,
5892 _In_ PEPROCESS ProcessId
,
5894 _In_ BOOLEAN FailImmediately
,
5895 _In_ BOOLEAN ExclusiveLock
,
5896 _Out_ PIO_STATUS_BLOCK IoStatus
,
5897 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5898 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5900 _Function_class_(FAST_IO_UNLOCK_SINGLE
)
5901 _IRQL_requires_same_
5903 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5904 _In_
struct _FILE_OBJECT
*FileObject
,
5905 _In_ PLARGE_INTEGER FileOffset
,
5906 _In_ PLARGE_INTEGER Length
,
5907 _In_ PEPROCESS ProcessId
,
5909 _Out_ PIO_STATUS_BLOCK IoStatus
,
5910 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5911 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5913 _Function_class_(FAST_IO_UNLOCK_ALL
)
5914 _IRQL_requires_same_
5916 (NTAPI FAST_IO_UNLOCK_ALL
)(
5917 _In_
struct _FILE_OBJECT
*FileObject
,
5918 _In_ PEPROCESS ProcessId
,
5919 _Out_ PIO_STATUS_BLOCK IoStatus
,
5920 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5921 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5923 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY
)
5924 _IRQL_requires_same_
5926 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5927 _In_
struct _FILE_OBJECT
*FileObject
,
5928 _In_ PVOID ProcessId
,
5930 _Out_ PIO_STATUS_BLOCK IoStatus
,
5931 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5932 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5934 _Function_class_(FAST_IO_DEVICE_CONTROL
)
5935 _IRQL_requires_same_
5937 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5938 _In_
struct _FILE_OBJECT
*FileObject
,
5940 _In_opt_ PVOID InputBuffer
,
5941 _In_ ULONG InputBufferLength
,
5942 _Out_opt_ PVOID OutputBuffer
,
5943 _In_ ULONG OutputBufferLength
,
5944 _In_ ULONG IoControlCode
,
5945 _Out_ PIO_STATUS_BLOCK IoStatus
,
5946 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5947 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5949 _Function_class_(FAST_IO_ACQUIRE_FILE
)
5950 _IRQL_requires_same_
5952 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5953 _In_
struct _FILE_OBJECT
*FileObject
);
5954 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5956 _Function_class_(FAST_IO_RELEASE_FILE
)
5957 _IRQL_requires_same_
5959 (NTAPI FAST_IO_RELEASE_FILE
)(
5960 _In_
struct _FILE_OBJECT
*FileObject
);
5961 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5963 _Function_class_(FAST_IO_DETACH_DEVICE
)
5964 _IRQL_requires_same_
5966 (NTAPI FAST_IO_DETACH_DEVICE
)(
5967 _In_
struct _DEVICE_OBJECT
*SourceDevice
,
5968 _In_
struct _DEVICE_OBJECT
*TargetDevice
);
5969 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5971 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO
)
5972 _IRQL_requires_same_
5974 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5975 _In_
struct _FILE_OBJECT
*FileObject
,
5977 _Out_
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5978 _Out_
struct _IO_STATUS_BLOCK
*IoStatus
,
5979 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5980 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5982 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE
)
5983 _IRQL_requires_same_
5985 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5986 _In_
struct _FILE_OBJECT
*FileObject
,
5987 _In_ PLARGE_INTEGER EndingOffset
,
5988 _Out_
struct _ERESOURCE
**ResourceToRelease
,
5989 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5990 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5992 _Function_class_(FAST_IO_MDL_READ
)
5993 _IRQL_requires_same_
5995 (NTAPI FAST_IO_MDL_READ
)(
5996 _In_
struct _FILE_OBJECT
*FileObject
,
5997 _In_ PLARGE_INTEGER FileOffset
,
6000 _Out_ PMDL
*MdlChain
,
6001 _Out_ PIO_STATUS_BLOCK IoStatus
,
6002 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6003 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
6005 _Function_class_(FAST_IO_MDL_READ_COMPLETE
)
6006 _IRQL_requires_same_
6008 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
6009 _In_
struct _FILE_OBJECT
*FileObject
,
6011 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6012 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
6014 _Function_class_(FAST_IO_PREPARE_MDL_WRITE
)
6015 _IRQL_requires_same_
6017 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
6018 _In_
struct _FILE_OBJECT
*FileObject
,
6019 _In_ PLARGE_INTEGER FileOffset
,
6022 _Out_ PMDL
*MdlChain
,
6023 _Out_ PIO_STATUS_BLOCK IoStatus
,
6024 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6025 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
6027 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE
)
6028 _IRQL_requires_same_
6030 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
6031 _In_
struct _FILE_OBJECT
*FileObject
,
6032 _In_ PLARGE_INTEGER FileOffset
,
6034 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6035 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
6037 _Function_class_(FAST_IO_READ_COMPRESSED
)
6038 _IRQL_requires_same_
6040 (NTAPI FAST_IO_READ_COMPRESSED
)(
6041 _In_
struct _FILE_OBJECT
*FileObject
,
6042 _In_ PLARGE_INTEGER FileOffset
,
6046 _Out_ PMDL
*MdlChain
,
6047 _Out_ PIO_STATUS_BLOCK IoStatus
,
6048 _Out_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
6049 _In_ ULONG CompressedDataInfoLength
,
6050 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6051 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
6053 _Function_class_(FAST_IO_WRITE_COMPRESSED
)
6054 _IRQL_requires_same_
6056 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
6057 _In_
struct _FILE_OBJECT
*FileObject
,
6058 _In_ PLARGE_INTEGER FileOffset
,
6062 _Out_ PMDL
*MdlChain
,
6063 _Out_ PIO_STATUS_BLOCK IoStatus
,
6064 _In_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
6065 _In_ ULONG CompressedDataInfoLength
,
6066 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6067 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
6069 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)
6070 _IRQL_requires_same_
6072 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
6073 _In_
struct _FILE_OBJECT
*FileObject
,
6075 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6076 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
6078 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)
6079 _IRQL_requires_same_
6081 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
6082 _In_
struct _FILE_OBJECT
*FileObject
,
6083 _In_ PLARGE_INTEGER FileOffset
,
6085 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6086 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
6088 _Function_class_(FAST_IO_QUERY_OPEN
)
6089 _IRQL_requires_same_
6091 (NTAPI FAST_IO_QUERY_OPEN
)(
6092 _Inout_
struct _IRP
*Irp
,
6093 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
6094 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6095 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
6097 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE
)
6098 _IRQL_requires_same_
6100 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
6101 _In_
struct _FILE_OBJECT
*FileObject
,
6102 _In_
struct _ERESOURCE
*ResourceToRelease
,
6103 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6104 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
6106 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH
)
6107 _IRQL_requires_same_
6109 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
6110 _In_
struct _FILE_OBJECT
*FileObject
,
6111 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6112 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
6114 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH
)
6115 _IRQL_requires_same_
6117 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
6118 _In_
struct _FILE_OBJECT
*FileObject
,
6119 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
6120 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
6122 typedef struct _FAST_IO_DISPATCH
{
6123 ULONG SizeOfFastIoDispatch
;
6124 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
6125 PFAST_IO_READ FastIoRead
;
6126 PFAST_IO_WRITE FastIoWrite
;
6127 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
6128 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
6129 PFAST_IO_LOCK FastIoLock
;
6130 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
6131 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
6132 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
6133 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
6134 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
6135 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
6136 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
6137 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
6138 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
6139 PFAST_IO_MDL_READ MdlRead
;
6140 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
6141 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
6142 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
6143 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
6144 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
6145 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
6146 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
6147 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
6148 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
6149 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
6150 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
6151 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
6153 typedef struct _SECTION_OBJECT_POINTERS
{
6154 PVOID DataSectionObject
;
6155 PVOID SharedCacheMap
;
6156 PVOID ImageSectionObject
;
6157 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
6159 typedef struct _IO_COMPLETION_CONTEXT
{
6162 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
6164 /* FILE_OBJECT.Flags */
6165 #define FO_FILE_OPEN 0x00000001
6166 #define FO_SYNCHRONOUS_IO 0x00000002
6167 #define FO_ALERTABLE_IO 0x00000004
6168 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
6169 #define FO_WRITE_THROUGH 0x00000010
6170 #define FO_SEQUENTIAL_ONLY 0x00000020
6171 #define FO_CACHE_SUPPORTED 0x00000040
6172 #define FO_NAMED_PIPE 0x00000080
6173 #define FO_STREAM_FILE 0x00000100
6174 #define FO_MAILSLOT 0x00000200
6175 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
6176 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
6177 #define FO_DIRECT_DEVICE_OPEN 0x00000800
6178 #define FO_FILE_MODIFIED 0x00001000
6179 #define FO_FILE_SIZE_CHANGED 0x00002000
6180 #define FO_CLEANUP_COMPLETE 0x00004000
6181 #define FO_TEMPORARY_FILE 0x00008000
6182 #define FO_DELETE_ON_CLOSE 0x00010000
6183 #define FO_OPENED_CASE_SENSITIVE 0x00020000
6184 #define FO_HANDLE_CREATED 0x00040000
6185 #define FO_FILE_FAST_IO_READ 0x00080000
6186 #define FO_RANDOM_ACCESS 0x00100000
6187 #define FO_FILE_OPEN_CANCELLED 0x00200000
6188 #define FO_VOLUME_OPEN 0x00400000
6189 #define FO_REMOTE_ORIGIN 0x01000000
6190 #define FO_DISALLOW_EXCLUSIVE 0x02000000
6191 #define FO_SKIP_COMPLETION_PORT 0x02000000
6192 #define FO_SKIP_SET_EVENT 0x04000000
6193 #define FO_SKIP_SET_FAST_IO 0x08000000
6194 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
6197 #define VPB_MOUNTED 0x0001
6198 #define VPB_LOCKED 0x0002
6199 #define VPB_PERSISTENT 0x0004
6200 #define VPB_REMOVE_PENDING 0x0008
6201 #define VPB_RAW_MOUNT 0x0010
6202 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
6206 #define SL_FORCE_ACCESS_CHECK 0x01
6207 #define SL_OPEN_PAGING_FILE 0x02
6208 #define SL_OPEN_TARGET_DIRECTORY 0x04
6209 #define SL_STOP_ON_SYMLINK 0x08
6210 #define SL_CASE_SENSITIVE 0x80
6212 #define SL_KEY_SPECIFIED 0x01
6213 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
6214 #define SL_WRITE_THROUGH 0x04
6215 #define SL_FT_SEQUENTIAL_WRITE 0x08
6216 #define SL_FORCE_DIRECT_WRITE 0x10
6217 #define SL_REALTIME_STREAM 0x20
6219 #define SL_READ_ACCESS_GRANTED 0x01
6220 #define SL_WRITE_ACCESS_GRANTED 0x04
6222 #define SL_FAIL_IMMEDIATELY 0x01
6223 #define SL_EXCLUSIVE_LOCK 0x02
6225 #define SL_RESTART_SCAN 0x01
6226 #define SL_RETURN_SINGLE_ENTRY 0x02
6227 #define SL_INDEX_SPECIFIED 0x04
6229 #define SL_WATCH_TREE 0x01
6231 #define SL_ALLOW_RAW_MOUNT 0x01
6233 #define CTL_CODE(DeviceType, Function, Method, Access) \
6234 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
6236 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
6238 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
6240 #define IRP_NOCACHE 0x00000001
6241 #define IRP_PAGING_IO 0x00000002
6242 #define IRP_MOUNT_COMPLETION 0x00000002
6243 #define IRP_SYNCHRONOUS_API 0x00000004
6244 #define IRP_ASSOCIATED_IRP 0x00000008
6245 #define IRP_BUFFERED_IO 0x00000010
6246 #define IRP_DEALLOCATE_BUFFER 0x00000020
6247 #define IRP_INPUT_OPERATION 0x00000040
6248 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
6249 #define IRP_CREATE_OPERATION 0x00000080
6250 #define IRP_READ_OPERATION 0x00000100
6251 #define IRP_WRITE_OPERATION 0x00000200
6252 #define IRP_CLOSE_OPERATION 0x00000400
6253 #define IRP_DEFER_IO_COMPLETION 0x00000800
6254 #define IRP_OB_QUERY_NAME 0x00001000
6255 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
6256 /* The following 2 are missing in latest WDK */
6257 #define IRP_RETRY_IO_COMPLETION 0x00004000
6258 #define IRP_CLASS_CACHE_OPERATION 0x00008000
6260 #define IRP_QUOTA_CHARGED 0x01
6261 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
6262 #define IRP_ALLOCATED_FIXED_SIZE 0x04
6263 #define IRP_LOOKASIDE_ALLOCATION 0x08
6266 ** IRP function codes
6269 #define IRP_MJ_CREATE 0x00
6270 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
6271 #define IRP_MJ_CLOSE 0x02
6272 #define IRP_MJ_READ 0x03
6273 #define IRP_MJ_WRITE 0x04
6274 #define IRP_MJ_QUERY_INFORMATION 0x05
6275 #define IRP_MJ_SET_INFORMATION 0x06
6276 #define IRP_MJ_QUERY_EA 0x07
6277 #define IRP_MJ_SET_EA 0x08
6278 #define IRP_MJ_FLUSH_BUFFERS 0x09
6279 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
6280 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
6281 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
6282 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
6283 #define IRP_MJ_DEVICE_CONTROL 0x0e
6284 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
6285 #define IRP_MJ_SCSI 0x0f
6286 #define IRP_MJ_SHUTDOWN 0x10
6287 #define IRP_MJ_LOCK_CONTROL 0x11
6288 #define IRP_MJ_CLEANUP 0x12
6289 #define IRP_MJ_CREATE_MAILSLOT 0x13
6290 #define IRP_MJ_QUERY_SECURITY 0x14
6291 #define IRP_MJ_SET_SECURITY 0x15
6292 #define IRP_MJ_POWER 0x16
6293 #define IRP_MJ_SYSTEM_CONTROL 0x17
6294 #define IRP_MJ_DEVICE_CHANGE 0x18
6295 #define IRP_MJ_QUERY_QUOTA 0x19
6296 #define IRP_MJ_SET_QUOTA 0x1a
6297 #define IRP_MJ_PNP 0x1b
6298 #define IRP_MJ_PNP_POWER 0x1b
6299 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
6301 #define IRP_MN_SCSI_CLASS 0x01
6303 #define IRP_MN_START_DEVICE 0x00
6304 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
6305 #define IRP_MN_REMOVE_DEVICE 0x02
6306 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
6307 #define IRP_MN_STOP_DEVICE 0x04
6308 #define IRP_MN_QUERY_STOP_DEVICE 0x05
6309 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
6311 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
6312 #define IRP_MN_QUERY_INTERFACE 0x08
6313 #define IRP_MN_QUERY_CAPABILITIES 0x09
6314 #define IRP_MN_QUERY_RESOURCES 0x0A
6315 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
6316 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
6317 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
6319 #define IRP_MN_READ_CONFIG 0x0F
6320 #define IRP_MN_WRITE_CONFIG 0x10
6321 #define IRP_MN_EJECT 0x11
6322 #define IRP_MN_SET_LOCK 0x12
6323 #define IRP_MN_QUERY_ID 0x13
6324 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
6325 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
6326 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
6327 #define IRP_MN_SURPRISE_REMOVAL 0x17
6328 #if (NTDDI_VERSION >= NTDDI_WIN7)
6329 #define IRP_MN_DEVICE_ENUMERATED 0x19
6332 #define IRP_MN_WAIT_WAKE 0x00
6333 #define IRP_MN_POWER_SEQUENCE 0x01
6334 #define IRP_MN_SET_POWER 0x02
6335 #define IRP_MN_QUERY_POWER 0x03
6337 #define IRP_MN_QUERY_ALL_DATA 0x00
6338 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
6339 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
6340 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
6341 #define IRP_MN_ENABLE_EVENTS 0x04
6342 #define IRP_MN_DISABLE_EVENTS 0x05
6343 #define IRP_MN_ENABLE_COLLECTION 0x06
6344 #define IRP_MN_DISABLE_COLLECTION 0x07
6345 #define IRP_MN_REGINFO 0x08
6346 #define IRP_MN_EXECUTE_METHOD 0x09
6348 #define IRP_MN_REGINFO_EX 0x0b
6350 typedef struct _FILE_OBJECT
{
6353 PDEVICE_OBJECT DeviceObject
;
6357 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
6358 PVOID PrivateCacheMap
;
6359 NTSTATUS FinalStatus
;
6360 struct _FILE_OBJECT
*RelatedFileObject
;
6361 BOOLEAN LockOperation
;
6362 BOOLEAN DeletePending
;
6364 BOOLEAN WriteAccess
;
6365 BOOLEAN DeleteAccess
;
6367 BOOLEAN SharedWrite
;
6368 BOOLEAN SharedDelete
;
6370 UNICODE_STRING FileName
;
6371 LARGE_INTEGER CurrentByteOffset
;
6372 volatile ULONG Waiters
;
6373 volatile ULONG Busy
;
6377 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
6378 KSPIN_LOCK IrpListLock
;
6380 volatile PVOID FileObjectExtension
;
6381 } FILE_OBJECT
, *PFILE_OBJECT
;
6383 typedef struct _IO_ERROR_LOG_PACKET
{
6384 UCHAR MajorFunctionCode
;
6386 USHORT DumpDataSize
;
6387 USHORT NumberOfStrings
;
6388 USHORT StringOffset
;
6389 USHORT EventCategory
;
6391 ULONG UniqueErrorValue
;
6392 NTSTATUS FinalStatus
;
6393 ULONG SequenceNumber
;
6394 ULONG IoControlCode
;
6395 LARGE_INTEGER DeviceOffset
;
6397 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
6399 typedef struct _IO_ERROR_LOG_MESSAGE
{
6402 USHORT DriverNameLength
;
6403 LARGE_INTEGER TimeStamp
;
6404 ULONG DriverNameOffset
;
6405 IO_ERROR_LOG_PACKET EntryData
;
6406 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
6408 #define ERROR_LOG_LIMIT_SIZE 240
6409 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
6410 sizeof(IO_ERROR_LOG_PACKET) + \
6411 (sizeof(WCHAR) * 40))
6412 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
6413 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6414 #define IO_ERROR_LOG_MESSAGE_LENGTH \
6415 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
6416 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
6417 PORT_MAXIMUM_MESSAGE_LENGTH)
6418 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
6419 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6422 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
6424 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
6427 typedef enum _DMA_WIDTH
{
6432 } DMA_WIDTH
, *PDMA_WIDTH
;
6434 typedef enum _DMA_SPEED
{
6441 } DMA_SPEED
, *PDMA_SPEED
;
6443 /* DEVICE_DESCRIPTION.Version */
6445 #define DEVICE_DESCRIPTION_VERSION 0x0000
6446 #define DEVICE_DESCRIPTION_VERSION1 0x0001
6447 #define DEVICE_DESCRIPTION_VERSION2 0x0002
6449 typedef struct _DEVICE_DESCRIPTION
{
6452 BOOLEAN ScatterGather
;
6454 BOOLEAN AutoInitialize
;
6455 BOOLEAN Dma32BitAddresses
;
6456 BOOLEAN IgnoreCount
;
6458 BOOLEAN Dma64BitAddresses
;
6461 INTERFACE_TYPE InterfaceType
;
6464 ULONG MaximumLength
;
6466 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
6468 typedef enum _DEVICE_RELATION_TYPE
{
6473 TargetDeviceRelation
,
6476 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
6478 typedef struct _DEVICE_RELATIONS
{
6480 PDEVICE_OBJECT Objects
[1];
6481 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
6483 typedef struct _DEVOBJ_EXTENSION
{
6486 PDEVICE_OBJECT DeviceObject
;
6487 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
6489 typedef struct _SCATTER_GATHER_ELEMENT
{
6490 PHYSICAL_ADDRESS Address
;
6493 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
6495 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
6497 #if defined(_MSC_VER)
6498 #if _MSC_VER >= 1200
6499 #pragma warning(push)
6501 #pragma warning(disable:4200)
6502 #endif /* _MSC_VER */
6504 typedef struct _SCATTER_GATHER_LIST
{
6505 ULONG NumberOfElements
;
6507 SCATTER_GATHER_ELEMENT Elements
[1];
6508 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6510 #if defined(_MSC_VER)
6511 #if _MSC_VER >= 1200
6512 #pragma warning(pop)
6514 #pragma warning(default:4200)
6516 #endif /* _MSC_VER */
6518 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6520 struct _SCATTER_GATHER_LIST
;
6521 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6523 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6525 _Function_class_(DRIVER_ADD_DEVICE
)
6526 _IRQL_requires_(PASSIVE_LEVEL
)
6527 _IRQL_requires_same_
6528 _When_(return>=0, _Kernel_clear_do_init_(__yes
))
6530 (NTAPI DRIVER_ADD_DEVICE
)(
6531 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6532 _In_
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
6533 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
6535 typedef struct _DRIVER_EXTENSION
{
6536 struct _DRIVER_OBJECT
*DriverObject
;
6537 PDRIVER_ADD_DEVICE AddDevice
;
6539 UNICODE_STRING ServiceKeyName
;
6540 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
6542 #define DRVO_UNLOAD_INVOKED 0x00000001
6543 #define DRVO_LEGACY_DRIVER 0x00000002
6544 #define DRVO_BUILTIN_DRIVER 0x00000004
6546 _Function_class_(DRIVER_INITIALIZE
)
6547 _IRQL_requires_same_
6549 (NTAPI DRIVER_INITIALIZE
)(
6550 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6551 _In_ PUNICODE_STRING RegistryPath
);
6552 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
6554 _Function_class_(DRIVER_STARTIO
)
6555 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6556 _IRQL_requires_(DISPATCH_LEVEL
)
6557 _IRQL_requires_same_
6559 (NTAPI DRIVER_STARTIO
)(
6560 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6561 _Inout_
struct _IRP
*Irp
);
6562 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
6564 _Function_class_(DRIVER_UNLOAD
)
6565 _IRQL_requires_(PASSIVE_LEVEL
)
6566 _IRQL_requires_same_
6568 (NTAPI DRIVER_UNLOAD
)(
6569 _In_
struct _DRIVER_OBJECT
*DriverObject
);
6570 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
6572 _Function_class_(DRIVER_DISPATCH
)
6573 _IRQL_requires_(PASSIVE_LEVEL
)
6574 _IRQL_requires_same_
6576 (NTAPI DRIVER_DISPATCH
)(
6577 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6578 _Inout_
struct _IRP
*Irp
);
6579 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
6581 typedef struct _DRIVER_OBJECT
{
6584 PDEVICE_OBJECT DeviceObject
;
6588 PVOID DriverSection
;
6589 PDRIVER_EXTENSION DriverExtension
;
6590 UNICODE_STRING DriverName
;
6591 PUNICODE_STRING HardwareDatabase
;
6592 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
6593 PDRIVER_INITIALIZE DriverInit
;
6594 PDRIVER_STARTIO DriverStartIo
;
6595 PDRIVER_UNLOAD DriverUnload
;
6596 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
6597 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
6599 typedef struct _DMA_ADAPTER
{
6602 struct _DMA_OPERATIONS
* DmaOperations
;
6603 } DMA_ADAPTER
, *PDMA_ADAPTER
;
6606 (NTAPI
*PPUT_DMA_ADAPTER
)(
6607 PDMA_ADAPTER DmaAdapter
);
6610 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
6611 _In_ PDMA_ADAPTER DmaAdapter
,
6613 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
6614 _In_ BOOLEAN CacheEnabled
);
6617 (NTAPI
*PFREE_COMMON_BUFFER
)(
6618 _In_ PDMA_ADAPTER DmaAdapter
,
6620 _In_ PHYSICAL_ADDRESS LogicalAddress
,
6621 _In_ PVOID VirtualAddress
,
6622 _In_ BOOLEAN CacheEnabled
);
6625 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
6626 _In_ PDMA_ADAPTER DmaAdapter
,
6627 _In_ PDEVICE_OBJECT DeviceObject
,
6628 _In_ ULONG NumberOfMapRegisters
,
6629 _In_ PDRIVER_CONTROL ExecutionRoutine
,
6630 _In_ PVOID Context
);
6633 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
6634 _In_ PDMA_ADAPTER DmaAdapter
,
6636 _In_ PVOID MapRegisterBase
,
6637 _In_ PVOID CurrentVa
,
6639 _In_ BOOLEAN WriteToDevice
);
6642 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
6643 _In_ PDMA_ADAPTER DmaAdapter
);
6646 (NTAPI
*PFREE_MAP_REGISTERS
)(
6647 _In_ PDMA_ADAPTER DmaAdapter
,
6648 PVOID MapRegisterBase
,
6649 ULONG NumberOfMapRegisters
);
6651 typedef PHYSICAL_ADDRESS
6652 (NTAPI
*PMAP_TRANSFER
)(
6653 _In_ PDMA_ADAPTER DmaAdapter
,
6655 _In_ PVOID MapRegisterBase
,
6656 _In_ PVOID CurrentVa
,
6657 _Inout_ PULONG Length
,
6658 _In_ BOOLEAN WriteToDevice
);
6661 (NTAPI
*PGET_DMA_ALIGNMENT
)(
6662 _In_ PDMA_ADAPTER DmaAdapter
);
6665 (NTAPI
*PREAD_DMA_COUNTER
)(
6666 _In_ PDMA_ADAPTER DmaAdapter
);
6668 _Function_class_(DRIVER_LIST_CONTROL
)
6669 _IRQL_requires_same_
6671 (NTAPI DRIVER_LIST_CONTROL
)(
6672 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6673 _In_
struct _IRP
*Irp
,
6674 _In_
struct _SCATTER_GATHER_LIST
*ScatterGather
,
6675 _In_ PVOID Context
);
6676 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
6679 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
6680 _In_ PDMA_ADAPTER DmaAdapter
,
6681 _In_ PDEVICE_OBJECT DeviceObject
,
6683 _In_ PVOID CurrentVa
,
6685 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6687 _In_ BOOLEAN WriteToDevice
);
6690 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
6691 _In_ PDMA_ADAPTER DmaAdapter
,
6692 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6693 _In_ BOOLEAN WriteToDevice
);
6696 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
6697 _In_ PDMA_ADAPTER DmaAdapter
,
6698 _In_ PMDL Mdl OPTIONAL
,
6699 _In_ PVOID CurrentVa
,
6701 _Out_ PULONG ScatterGatherListSize
,
6702 _Out_ OPTIONAL PULONG pNumberOfMapRegisters
);
6705 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
6706 _In_ PDMA_ADAPTER DmaAdapter
,
6707 _In_ PDEVICE_OBJECT DeviceObject
,
6709 _In_ PVOID CurrentVa
,
6711 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6713 _In_ BOOLEAN WriteToDevice
,
6714 _In_ PVOID ScatterGatherBuffer
,
6715 _In_ ULONG ScatterGatherLength
);
6718 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
6719 _In_ PDMA_ADAPTER DmaAdapter
,
6720 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6721 _In_ PMDL OriginalMdl
,
6722 _Out_ PMDL
*TargetMdl
);
6724 typedef struct _DMA_OPERATIONS
{
6726 PPUT_DMA_ADAPTER PutDmaAdapter
;
6727 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
6728 PFREE_COMMON_BUFFER FreeCommonBuffer
;
6729 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
6730 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
6731 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
6732 PFREE_MAP_REGISTERS FreeMapRegisters
;
6733 PMAP_TRANSFER MapTransfer
;
6734 PGET_DMA_ALIGNMENT GetDmaAlignment
;
6735 PREAD_DMA_COUNTER ReadDmaCounter
;
6736 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
6737 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
6738 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
6739 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
6740 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
6741 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
6743 typedef struct _IO_RESOURCE_DESCRIPTOR
{
6746 UCHAR ShareDisposition
;
6754 PHYSICAL_ADDRESS MinimumAddress
;
6755 PHYSICAL_ADDRESS MaximumAddress
;
6760 PHYSICAL_ADDRESS MinimumAddress
;
6761 PHYSICAL_ADDRESS MaximumAddress
;
6764 ULONG MinimumVector
;
6765 ULONG MaximumVector
;
6768 ULONG MinimumChannel
;
6769 ULONG MaximumChannel
;
6774 PHYSICAL_ADDRESS MinimumAddress
;
6775 PHYSICAL_ADDRESS MaximumAddress
;
6792 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
6794 typedef struct _IO_RESOURCE_LIST
{
6798 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
6799 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
6801 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
6803 INTERFACE_TYPE InterfaceType
;
6807 ULONG AlternativeLists
;
6808 IO_RESOURCE_LIST List
[1];
6809 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
6811 _Function_class_(DRIVER_CANCEL
)
6812 _Requires_lock_held_(_Global_cancel_spin_lock_
)
6813 _Releases_lock_(_Global_cancel_spin_lock_
)
6814 _IRQL_requires_min_(DISPATCH_LEVEL
)
6815 _IRQL_requires_(DISPATCH_LEVEL
)
6817 (NTAPI DRIVER_CANCEL
)(
6818 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6819 _Inout_ _IRQL_uses_cancel_
struct _IRP
*Irp
);
6820 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
6822 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _IRP
{
6825 struct _MDL
*MdlAddress
;
6828 struct _IRP
*MasterIrp
;
6829 volatile LONG IrpCount
;
6832 LIST_ENTRY ThreadListEntry
;
6833 IO_STATUS_BLOCK IoStatus
;
6834 KPROCESSOR_MODE RequestorMode
;
6835 BOOLEAN PendingReturned
;
6837 CHAR CurrentLocation
;
6840 CCHAR ApcEnvironment
;
6841 UCHAR AllocationFlags
;
6842 PIO_STATUS_BLOCK UserIosb
;
6846 _ANONYMOUS_UNION
union {
6847 PIO_APC_ROUTINE UserApcRoutine
;
6848 PVOID IssuingProcess
;
6850 PVOID UserApcContext
;
6851 } AsynchronousParameters
;
6852 LARGE_INTEGER AllocationSize
;
6854 volatile PDRIVER_CANCEL CancelRoutine
;
6858 _ANONYMOUS_UNION
union {
6859 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
6860 _ANONYMOUS_STRUCT
struct {
6861 PVOID DriverContext
[4];
6865 PCHAR AuxiliaryBuffer
;
6866 _ANONYMOUS_STRUCT
struct {
6867 LIST_ENTRY ListEntry
;
6868 _ANONYMOUS_UNION
union {
6869 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6873 struct _FILE_OBJECT
*OriginalFileObject
;
6876 PVOID CompletionKey
;
6880 typedef enum _IO_PAGING_PRIORITY
{
6881 IoPagingPriorityInvalid
,
6882 IoPagingPriorityNormal
,
6883 IoPagingPriorityHigh
,
6884 IoPagingPriorityReserved1
,
6885 IoPagingPriorityReserved2
6886 } IO_PAGING_PRIORITY
;
6888 _Function_class_(IO_COMPLETION_ROUTINE
)
6889 _IRQL_requires_same_
6891 (NTAPI IO_COMPLETION_ROUTINE
)(
6892 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6893 _In_
struct _IRP
*Irp
,
6894 _In_opt_ PVOID Context
);
6895 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6897 _Function_class_(IO_DPC_ROUTINE
)
6898 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6899 _IRQL_requires_(DISPATCH_LEVEL
)
6900 _IRQL_requires_same_
6902 (NTAPI IO_DPC_ROUTINE
)(
6903 _In_
struct _KDPC
*Dpc
,
6904 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6905 _Inout_
struct _IRP
*Irp
,
6906 _In_opt_ PVOID Context
);
6907 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6910 (NTAPI
*PMM_DLL_INITIALIZE
)(
6911 _In_ PUNICODE_STRING RegistryPath
);
6914 (NTAPI
*PMM_DLL_UNLOAD
)(
6917 _Function_class_(IO_TIMER_ROUTINE
)
6918 _IRQL_requires_same_
6920 (NTAPI IO_TIMER_ROUTINE
)(
6921 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6922 _In_opt_ PVOID Context
);
6923 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6925 typedef struct _IO_SECURITY_CONTEXT
{
6926 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6927 PACCESS_STATE AccessState
;
6928 ACCESS_MASK DesiredAccess
;
6929 ULONG FullCreateOptions
;
6930 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6934 typedef struct _IO_CSQ_IRP_CONTEXT
{
6937 struct _IO_CSQ
*Csq
;
6938 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6941 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6942 _In_
struct _IO_CSQ
*Csq
,
6946 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6947 _In_
struct _IO_CSQ
*Csq
,
6949 _In_ PVOID InsertContext
);
6950 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6953 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6954 _In_
struct _IO_CSQ
*Csq
,
6958 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6959 _In_
struct _IO_CSQ
*Csq
,
6961 _In_ PVOID PeekContext
);
6964 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6965 _In_
struct _IO_CSQ
*Csq
,
6969 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6970 _In_
struct _IO_CSQ
*Csq
,
6974 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6975 _In_
struct _IO_CSQ
*Csq
,
6978 typedef struct _IO_CSQ
{
6980 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6981 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6982 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6983 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6984 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6985 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6986 PVOID ReservePointer
;
6989 typedef enum _BUS_QUERY_ID_TYPE
{
6991 BusQueryHardwareIDs
,
6992 BusQueryCompatibleIDs
,
6994 BusQueryDeviceSerialNumber
6995 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6997 typedef enum _DEVICE_TEXT_TYPE
{
6998 DeviceTextDescription
,
6999 DeviceTextLocationInformation
7000 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
7003 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
7007 _IRQL_requires_max_(DISPATCH_LEVEL
)
7008 _Must_inspect_result_
7010 (NTAPI
*PGPE_CONNECT_VECTOR
)(
7015 PGPE_SERVICE_ROUTINE
,
7019 _IRQL_requires_max_(DISPATCH_LEVEL
)
7020 _Must_inspect_result_
7022 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
7025 _IRQL_requires_max_(DISPATCH_LEVEL
)
7026 _Must_inspect_result_
7028 (NTAPI
*PGPE_ENABLE_EVENT
)(
7032 _IRQL_requires_max_(DISPATCH_LEVEL
)
7033 _Must_inspect_result_
7035 (NTAPI
*PGPE_DISABLE_EVENT
)(
7039 _IRQL_requires_max_(DISPATCH_LEVEL
)
7040 _Must_inspect_result_
7042 (NTAPI
*PGPE_CLEAR_STATUS
)(
7047 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
7051 _IRQL_requires_max_(DISPATCH_LEVEL
)
7052 _Must_inspect_result_
7054 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
7056 PDEVICE_NOTIFY_CALLBACK
,
7059 _IRQL_requires_max_(DISPATCH_LEVEL
)
7061 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
7063 PDEVICE_NOTIFY_CALLBACK
);
7065 typedef struct _ACPI_INTERFACE_STANDARD
{
7069 PINTERFACE_REFERENCE InterfaceReference
;
7070 PINTERFACE_DEREFERENCE InterfaceDereference
;
7071 PGPE_CONNECT_VECTOR GpeConnectVector
;
7072 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
7073 PGPE_ENABLE_EVENT GpeEnableEvent
;
7074 PGPE_DISABLE_EVENT GpeDisableEvent
;
7075 PGPE_CLEAR_STATUS GpeClearStatus
;
7076 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
7077 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
7078 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
7081 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
7082 PVOID ObjectContext
,
7083 PVOID ServiceContext
);
7085 _IRQL_requires_max_(DISPATCH_LEVEL
)
7086 _Must_inspect_result_
7088 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
7091 KINTERRUPT_MODE Mode
,
7093 PGPE_SERVICE_ROUTINE ServiceRoutine
,
7094 PVOID ServiceContext
,
7095 PVOID
*ObjectContext
);
7097 _IRQL_requires_max_(DISPATCH_LEVEL
)
7098 _Must_inspect_result_
7100 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
7102 PVOID ObjectContext
);
7104 _IRQL_requires_max_(DISPATCH_LEVEL
)
7105 _Must_inspect_result_
7107 (NTAPI
*PGPE_ENABLE_EVENT2
)(
7109 PVOID ObjectContext
);
7111 _IRQL_requires_max_(DISPATCH_LEVEL
)
7112 _Must_inspect_result_
7114 (NTAPI
*PGPE_DISABLE_EVENT2
)(
7116 PVOID ObjectContext
);
7118 _IRQL_requires_max_(DISPATCH_LEVEL
)
7119 _Must_inspect_result_
7121 (NTAPI
*PGPE_CLEAR_STATUS2
)(
7123 PVOID ObjectContext
);
7125 _IRQL_requires_max_(DISPATCH_LEVEL
)
7127 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
7128 PVOID NotificationContext
,
7131 _IRQL_requires_max_(DISPATCH_LEVEL
)
7132 _Must_inspect_result_
7134 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
7136 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
7137 PVOID NotificationContext
);
7139 _IRQL_requires_max_(DISPATCH_LEVEL
)
7141 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
7144 typedef struct _ACPI_INTERFACE_STANDARD2
{
7148 PINTERFACE_REFERENCE InterfaceReference
;
7149 PINTERFACE_DEREFERENCE InterfaceDereference
;
7150 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
7151 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
7152 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
7153 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
7154 PGPE_CLEAR_STATUS2 GpeClearStatus
;
7155 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
7156 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
7157 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
7159 #if !defined(_AMD64_) && !defined(_IA64_)
7160 #include <pshpack4.h>
7162 typedef struct _IO_STACK_LOCATION
{
7163 UCHAR MajorFunction
;
7164 UCHAR MinorFunction
;
7169 PIO_SECURITY_CONTEXT SecurityContext
;
7171 USHORT POINTER_ALIGNMENT FileAttributes
;
7173 ULONG POINTER_ALIGNMENT EaLength
;
7177 ULONG POINTER_ALIGNMENT Key
;
7178 LARGE_INTEGER ByteOffset
;
7182 ULONG POINTER_ALIGNMENT Key
;
7183 LARGE_INTEGER ByteOffset
;
7187 PUNICODE_STRING FileName
;
7188 FILE_INFORMATION_CLASS FileInformationClass
;
7193 ULONG CompletionFilter
;
7197 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7201 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7202 PFILE_OBJECT FileObject
;
7203 _ANONYMOUS_UNION
union {
7204 _ANONYMOUS_STRUCT
struct {
7205 BOOLEAN ReplaceIfExists
;
7206 BOOLEAN AdvanceOnly
;
7209 HANDLE DeleteHandle
;
7223 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
7227 FS_INFORMATION_CLASS FsInformationClass
;
7230 ULONG OutputBufferLength
;
7231 ULONG InputBufferLength
;
7232 ULONG FsControlCode
;
7233 PVOID Type3InputBuffer
;
7234 } FileSystemControl
;
7236 PLARGE_INTEGER Length
;
7238 LARGE_INTEGER ByteOffset
;
7241 ULONG OutputBufferLength
;
7242 ULONG POINTER_ALIGNMENT InputBufferLength
;
7243 ULONG POINTER_ALIGNMENT IoControlCode
;
7244 PVOID Type3InputBuffer
;
7247 SECURITY_INFORMATION SecurityInformation
;
7248 ULONG POINTER_ALIGNMENT Length
;
7251 SECURITY_INFORMATION SecurityInformation
;
7252 PSECURITY_DESCRIPTOR SecurityDescriptor
;
7256 PDEVICE_OBJECT DeviceObject
;
7260 PDEVICE_OBJECT DeviceObject
;
7263 struct _SCSI_REQUEST_BLOCK
*Srb
;
7268 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
7269 ULONG SidListLength
;
7275 DEVICE_RELATION_TYPE Type
;
7276 } QueryDeviceRelations
;
7278 CONST GUID
*InterfaceType
;
7281 PINTERFACE Interface
;
7282 PVOID InterfaceSpecificData
;
7285 PDEVICE_CAPABILITIES Capabilities
;
7286 } DeviceCapabilities
;
7288 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
7289 } FilterResourceRequirements
;
7294 ULONG POINTER_ALIGNMENT Length
;
7300 BUS_QUERY_ID_TYPE IdType
;
7303 DEVICE_TEXT_TYPE DeviceTextType
;
7304 LCID POINTER_ALIGNMENT LocaleId
;
7308 BOOLEAN Reserved
[3];
7309 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
7310 } UsageNotification
;
7312 SYSTEM_POWER_STATE PowerState
;
7315 PPOWER_SEQUENCE PowerSequence
;
7318 ULONG SystemContext
;
7319 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
7320 POWER_STATE POINTER_ALIGNMENT State
;
7321 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
7324 PCM_RESOURCE_LIST AllocatedResources
;
7325 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
7328 ULONG_PTR ProviderId
;
7340 PDEVICE_OBJECT DeviceObject
;
7341 PFILE_OBJECT FileObject
;
7342 PIO_COMPLETION_ROUTINE CompletionRoutine
;
7344 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
7345 #if !defined(_AMD64_) && !defined(_IA64_)
7346 #include <poppack.h>
7349 /* IO_STACK_LOCATION.Control */
7351 #define SL_PENDING_RETURNED 0x01
7352 #define SL_ERROR_RETURNED 0x02
7353 #define SL_INVOKE_ON_CANCEL 0x20
7354 #define SL_INVOKE_ON_SUCCESS 0x40
7355 #define SL_INVOKE_ON_ERROR 0x80
7357 #define METHOD_BUFFERED 0
7358 #define METHOD_IN_DIRECT 1
7359 #define METHOD_OUT_DIRECT 2
7360 #define METHOD_NEITHER 3
7362 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
7363 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
7365 #define FILE_SUPERSEDED 0x00000000
7366 #define FILE_OPENED 0x00000001
7367 #define FILE_CREATED 0x00000002
7368 #define FILE_OVERWRITTEN 0x00000003
7369 #define FILE_EXISTS 0x00000004
7370 #define FILE_DOES_NOT_EXIST 0x00000005
7372 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
7373 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
7375 /* also in winnt.h */
7376 #define FILE_LIST_DIRECTORY 0x00000001
7377 #define FILE_READ_DATA 0x00000001
7378 #define FILE_ADD_FILE 0x00000002
7379 #define FILE_WRITE_DATA 0x00000002
7380 #define FILE_ADD_SUBDIRECTORY 0x00000004
7381 #define FILE_APPEND_DATA 0x00000004
7382 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
7383 #define FILE_READ_EA 0x00000008
7384 #define FILE_WRITE_EA 0x00000010
7385 #define FILE_EXECUTE 0x00000020
7386 #define FILE_TRAVERSE 0x00000020
7387 #define FILE_DELETE_CHILD 0x00000040
7388 #define FILE_READ_ATTRIBUTES 0x00000080
7389 #define FILE_WRITE_ATTRIBUTES 0x00000100
7391 #define FILE_SHARE_READ 0x00000001
7392 #define FILE_SHARE_WRITE 0x00000002
7393 #define FILE_SHARE_DELETE 0x00000004
7394 #define FILE_SHARE_VALID_FLAGS 0x00000007
7396 #define FILE_ATTRIBUTE_READONLY 0x00000001
7397 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
7398 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
7399 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
7400 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
7401 #define FILE_ATTRIBUTE_DEVICE 0x00000040
7402 #define FILE_ATTRIBUTE_NORMAL 0x00000080
7403 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
7404 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
7405 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
7406 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
7407 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
7408 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
7409 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
7410 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
7412 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
7413 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
7415 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
7416 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
7417 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
7418 #define FILE_VALID_SET_FLAGS 0x00000036
7420 #define FILE_SUPERSEDE 0x00000000
7421 #define FILE_OPEN 0x00000001
7422 #define FILE_CREATE 0x00000002
7423 #define FILE_OPEN_IF 0x00000003
7424 #define FILE_OVERWRITE 0x00000004
7425 #define FILE_OVERWRITE_IF 0x00000005
7426 #define FILE_MAXIMUM_DISPOSITION 0x00000005
7428 #define FILE_DIRECTORY_FILE 0x00000001
7429 #define FILE_WRITE_THROUGH 0x00000002
7430 #define FILE_SEQUENTIAL_ONLY 0x00000004
7431 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
7432 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
7433 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
7434 #define FILE_NON_DIRECTORY_FILE 0x00000040
7435 #define FILE_CREATE_TREE_CONNECTION 0x00000080
7436 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
7437 #define FILE_NO_EA_KNOWLEDGE 0x00000200
7438 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
7439 #define FILE_RANDOM_ACCESS 0x00000800
7440 #define FILE_DELETE_ON_CLOSE 0x00001000
7441 #define FILE_OPEN_BY_FILE_ID 0x00002000
7442 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
7443 #define FILE_NO_COMPRESSION 0x00008000
7444 #if (NTDDI_VERSION >= NTDDI_WIN7)
7445 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
7446 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
7447 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7448 #define FILE_RESERVE_OPFILTER 0x00100000
7449 #define FILE_OPEN_REPARSE_POINT 0x00200000
7450 #define FILE_OPEN_NO_RECALL 0x00400000
7451 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
7453 #define FILE_ANY_ACCESS 0x00000000
7454 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
7455 #define FILE_READ_ACCESS 0x00000001
7456 #define FILE_WRITE_ACCESS 0x00000002
7458 #define FILE_ALL_ACCESS \
7459 (STANDARD_RIGHTS_REQUIRED | \
7463 #define FILE_GENERIC_EXECUTE \
7464 (STANDARD_RIGHTS_EXECUTE | \
7465 FILE_READ_ATTRIBUTES | \
7469 #define FILE_GENERIC_READ \
7470 (STANDARD_RIGHTS_READ | \
7472 FILE_READ_ATTRIBUTES | \
7476 #define FILE_GENERIC_WRITE \
7477 (STANDARD_RIGHTS_WRITE | \
7479 FILE_WRITE_ATTRIBUTES | \
7481 FILE_APPEND_DATA | \
7486 #define WMIREG_ACTION_REGISTER 1
7487 #define WMIREG_ACTION_DEREGISTER 2
7488 #define WMIREG_ACTION_REREGISTER 3
7489 #define WMIREG_ACTION_UPDATE_GUIDS 4
7490 #define WMIREG_ACTION_BLOCK_IRPS 5
7492 #define WMIREGISTER 0
7495 _Function_class_(WMI_NOTIFICATION_CALLBACK
)
7496 _IRQL_requires_same_
7498 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
7501 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
7506 typedef struct _PCI_SLOT_NUMBER
{
7509 ULONG DeviceNumber
:5;
7510 ULONG FunctionNumber
:3;
7515 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
7517 #define PCI_TYPE0_ADDRESSES 6
7518 #define PCI_TYPE1_ADDRESSES 2
7519 #define PCI_TYPE2_ADDRESSES 5
7521 typedef struct _PCI_COMMON_HEADER
{
7522 PCI_COMMON_HEADER_LAYOUT
7523 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
7526 typedef struct _PCI_COMMON_CONFIG
{
7527 PCI_COMMON_HEADER_LAYOUT
7528 UCHAR DeviceSpecific
[192];
7529 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7531 typedef struct _PCI_COMMON_CONFIG
{
7532 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
7533 UCHAR DeviceSpecific
[192];
7534 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7537 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
7539 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
7541 #define PCI_MAX_DEVICES 32
7542 #define PCI_MAX_FUNCTION 8
7543 #define PCI_MAX_BRIDGE_NUMBER 0xFF
7544 #define PCI_INVALID_VENDORID 0xFFFF
7546 /* PCI_COMMON_CONFIG.HeaderType */
7547 #define PCI_MULTIFUNCTION 0x80
7548 #define PCI_DEVICE_TYPE 0x00
7549 #define PCI_BRIDGE_TYPE 0x01
7550 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
7552 #define PCI_CONFIGURATION_TYPE(PciData) \
7553 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
7555 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
7556 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
7558 /* PCI_COMMON_CONFIG.Command */
7559 #define PCI_ENABLE_IO_SPACE 0x0001
7560 #define PCI_ENABLE_MEMORY_SPACE 0x0002
7561 #define PCI_ENABLE_BUS_MASTER 0x0004
7562 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
7563 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
7564 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
7565 #define PCI_ENABLE_PARITY 0x0040
7566 #define PCI_ENABLE_WAIT_CYCLE 0x0080
7567 #define PCI_ENABLE_SERR 0x0100
7568 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
7569 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
7571 /* PCI_COMMON_CONFIG.Status */
7572 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
7573 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
7574 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
7575 #define PCI_STATUS_UDF_SUPPORTED 0x0040
7576 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
7577 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
7578 #define PCI_STATUS_DEVSEL 0x0600
7579 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
7580 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
7581 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
7582 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
7583 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
7585 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
7587 #define PCI_WHICHSPACE_CONFIG 0x0
7588 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
7590 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
7591 #define PCI_CAPABILITY_ID_AGP 0x02
7592 #define PCI_CAPABILITY_ID_VPD 0x03
7593 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
7594 #define PCI_CAPABILITY_ID_MSI 0x05
7595 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
7596 #define PCI_CAPABILITY_ID_PCIX 0x07
7597 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
7598 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
7599 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
7600 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
7601 #define PCI_CAPABILITY_ID_SHPC 0x0C
7602 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
7603 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
7604 #define PCI_CAPABILITY_ID_SECURE 0x0F
7605 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
7606 #define PCI_CAPABILITY_ID_MSIX 0x11
7608 typedef struct _PCI_CAPABILITIES_HEADER
{
7611 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
7613 typedef struct _PCI_PMC
{
7617 UCHAR DeviceSpecificInitialization
:1;
7619 struct _PM_SUPPORT
{
7629 } PCI_PMC
, *PPCI_PMC
;
7631 typedef struct _PCI_PMCSR
{
7632 USHORT PowerState
:2;
7635 USHORT DataSelect
:4;
7638 } PCI_PMCSR
, *PPCI_PMCSR
;
7640 typedef struct _PCI_PMCSR_BSE
{
7642 UCHAR D3HotSupportsStopClock
:1;
7643 UCHAR BusPowerClockControlEnabled
:1;
7644 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
7646 typedef struct _PCI_PM_CAPABILITY
{
7647 PCI_CAPABILITIES_HEADER Header
;
7649 PCI_PMC Capabilities
;
7653 PCI_PMCSR ControlStatus
;
7657 PCI_PMCSR_BSE BridgeSupport
;
7661 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
7664 PCI_CAPABILITIES_HEADER Header
;
7667 USHORT DataParityErrorRecoveryEnable
:1;
7668 USHORT EnableRelaxedOrdering
:1;
7669 USHORT MaxMemoryReadByteCount
:2;
7670 USHORT MaxOutstandingSplitTransactions
:3;
7677 ULONG FunctionNumber
:3;
7678 ULONG DeviceNumber
:5;
7680 ULONG Device64Bit
:1;
7681 ULONG Capable133MHz
:1;
7682 ULONG SplitCompletionDiscarded
:1;
7683 ULONG UnexpectedSplitCompletion
:1;
7684 ULONG DeviceComplexity
:1;
7685 ULONG DesignedMaxMemoryReadByteCount
:2;
7686 ULONG DesignedMaxOutstandingSplitTransactions
:3;
7687 ULONG DesignedMaxCumulativeReadSize
:3;
7688 ULONG ReceivedSplitCompletionErrorMessage
:1;
7689 ULONG CapablePCIX266
:1;
7690 ULONG CapablePCIX533
:1;
7694 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
7696 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
7697 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
7698 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
7699 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
7700 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
7701 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
7702 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
7703 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
7704 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
7705 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
7706 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
7708 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
7709 USHORT CapabilityID
;
7712 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
7714 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
7715 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7716 ULONG LowSerialNumber
;
7717 ULONG HighSerialNumber
;
7718 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
7720 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
7721 _ANONYMOUS_STRUCT
struct {
7724 ULONG DataLinkProtocolError
:1;
7725 ULONG SurpriseDownError
:1;
7727 ULONG PoisonedTLP
:1;
7728 ULONG FlowControlProtocolError
:1;
7729 ULONG CompletionTimeout
:1;
7730 ULONG CompleterAbort
:1;
7731 ULONG UnexpectedCompletion
:1;
7732 ULONG ReceiverOverflow
:1;
7733 ULONG MalformedTLP
:1;
7735 ULONG UnsupportedRequestError
:1;
7739 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
7741 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
7742 _ANONYMOUS_STRUCT
struct {
7745 ULONG DataLinkProtocolError
:1;
7746 ULONG SurpriseDownError
:1;
7748 ULONG PoisonedTLP
:1;
7749 ULONG FlowControlProtocolError
:1;
7750 ULONG CompletionTimeout
:1;
7751 ULONG CompleterAbort
:1;
7752 ULONG UnexpectedCompletion
:1;
7753 ULONG ReceiverOverflow
:1;
7754 ULONG MalformedTLP
:1;
7756 ULONG UnsupportedRequestError
:1;
7760 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
7762 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
7763 _ANONYMOUS_STRUCT
struct {
7766 ULONG DataLinkProtocolError
:1;
7767 ULONG SurpriseDownError
:1;
7769 ULONG PoisonedTLP
:1;
7770 ULONG FlowControlProtocolError
:1;
7771 ULONG CompletionTimeout
:1;
7772 ULONG CompleterAbort
:1;
7773 ULONG UnexpectedCompletion
:1;
7774 ULONG ReceiverOverflow
:1;
7775 ULONG MalformedTLP
:1;
7777 ULONG UnsupportedRequestError
:1;
7781 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
7783 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
7784 _ANONYMOUS_STRUCT
struct {
7785 ULONG ReceiverError
:1;
7789 ULONG ReplayNumRollover
:1;
7791 ULONG ReplayTimerTimeout
:1;
7792 ULONG AdvisoryNonFatalError
:1;
7796 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
7798 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
7799 _ANONYMOUS_STRUCT
struct {
7800 ULONG ReceiverError
:1;
7804 ULONG ReplayNumRollover
:1;
7806 ULONG ReplayTimerTimeout
:1;
7807 ULONG AdvisoryNonFatalError
:1;
7811 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
7813 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
7814 _ANONYMOUS_STRUCT
struct {
7815 ULONG FirstErrorPointer
:5;
7816 ULONG ECRCGenerationCapable
:1;
7817 ULONG ECRCGenerationEnable
:1;
7818 ULONG ECRCCheckCapable
:1;
7819 ULONG ECRCCheckEnable
:1;
7823 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
7825 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
7826 _ANONYMOUS_STRUCT
struct {
7827 ULONG CorrectableErrorReportingEnable
:1;
7828 ULONG NonFatalErrorReportingEnable
:1;
7829 ULONG FatalErrorReportingEnable
:1;
7833 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
7835 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
7836 _ANONYMOUS_STRUCT
struct {
7837 ULONG CorrectableErrorReceived
:1;
7838 ULONG MultipleCorrectableErrorsReceived
:1;
7839 ULONG UncorrectableErrorReceived
:1;
7840 ULONG MultipleUncorrectableErrorsReceived
:1;
7841 ULONG FirstUncorrectableFatal
:1;
7842 ULONG NonFatalErrorMessagesReceived
:1;
7843 ULONG FatalErrorMessagesReceived
:1;
7845 ULONG AdvancedErrorInterruptMessageNumber
:5;
7848 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
7850 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
7851 _ANONYMOUS_STRUCT
struct {
7852 USHORT CorrectableSourceIdFun
:3;
7853 USHORT CorrectableSourceIdDev
:5;
7854 USHORT CorrectableSourceIdBus
:8;
7855 USHORT UncorrectableSourceIdFun
:3;
7856 USHORT UncorrectableSourceIdDev
:5;
7857 USHORT UncorrectableSourceIdBus
:8;
7860 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
7862 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
7863 _ANONYMOUS_STRUCT
struct {
7864 ULONG TargetAbortOnSplitCompletion
:1;
7865 ULONG MasterAbortOnSplitCompletion
:1;
7866 ULONG ReceivedTargetAbort
:1;
7867 ULONG ReceivedMasterAbort
:1;
7869 ULONG UnexpectedSplitCompletionError
:1;
7870 ULONG UncorrectableSplitCompletion
:1;
7871 ULONG UncorrectableDataError
:1;
7872 ULONG UncorrectableAttributeError
:1;
7873 ULONG UncorrectableAddressError
:1;
7874 ULONG DelayedTransactionDiscardTimerExpired
:1;
7875 ULONG PERRAsserted
:1;
7876 ULONG SERRAsserted
:1;
7877 ULONG InternalBridgeError
:1;
7881 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
7883 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
7884 _ANONYMOUS_STRUCT
struct {
7885 ULONG TargetAbortOnSplitCompletion
:1;
7886 ULONG MasterAbortOnSplitCompletion
:1;
7887 ULONG ReceivedTargetAbort
:1;
7888 ULONG ReceivedMasterAbort
:1;
7890 ULONG UnexpectedSplitCompletionError
:1;
7891 ULONG UncorrectableSplitCompletion
:1;
7892 ULONG UncorrectableDataError
:1;
7893 ULONG UncorrectableAttributeError
:1;
7894 ULONG UncorrectableAddressError
:1;
7895 ULONG DelayedTransactionDiscardTimerExpired
:1;
7896 ULONG PERRAsserted
:1;
7897 ULONG SERRAsserted
:1;
7898 ULONG InternalBridgeError
:1;
7902 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
7904 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
7905 _ANONYMOUS_STRUCT
struct {
7906 ULONG TargetAbortOnSplitCompletion
:1;
7907 ULONG MasterAbortOnSplitCompletion
:1;
7908 ULONG ReceivedTargetAbort
:1;
7909 ULONG ReceivedMasterAbort
:1;
7911 ULONG UnexpectedSplitCompletionError
:1;
7912 ULONG UncorrectableSplitCompletion
:1;
7913 ULONG UncorrectableDataError
:1;
7914 ULONG UncorrectableAttributeError
:1;
7915 ULONG UncorrectableAddressError
:1;
7916 ULONG DelayedTransactionDiscardTimerExpired
:1;
7917 ULONG PERRAsserted
:1;
7918 ULONG SERRAsserted
:1;
7919 ULONG InternalBridgeError
:1;
7923 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7925 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7926 _ANONYMOUS_STRUCT
struct {
7927 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7931 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7933 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7934 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7935 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7937 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7938 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7939 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7940 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7942 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7943 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7944 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7945 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7946 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7947 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7948 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7949 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7951 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7952 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7953 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7954 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7955 ULONG SecHeaderLog
[4];
7956 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7958 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7959 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7960 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7961 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7962 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7963 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7964 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7965 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7967 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7968 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7969 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7970 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7972 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7973 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7974 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7975 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7976 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7977 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7978 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7979 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7981 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7982 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7983 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7984 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7985 ULONG SecHeaderLog
[4];
7986 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7988 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7989 _ANONYMOUS_STRUCT
struct {
7990 ULONG VFMigrationCapable
:1;
7992 ULONG VFMigrationInterruptNumber
:11;
7995 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7997 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7998 _ANONYMOUS_STRUCT
struct {
8000 USHORT VFMigrationEnable
:1;
8001 USHORT VFMigrationInterruptEnable
:1;
8002 USHORT VFMemorySpaceEnable
:1;
8003 USHORT ARICapableHierarchy
:1;
8004 USHORT Reserved1
:11;
8007 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
8009 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
8010 _ANONYMOUS_STRUCT
struct {
8011 USHORT VFMigrationStatus
:1;
8012 USHORT Reserved1
:15;
8015 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
8017 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
8018 _ANONYMOUS_STRUCT
struct {
8019 ULONG VFMigrationStateBIR
:3;
8020 ULONG VFMigrationStateOffset
:29;
8023 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
8025 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
8026 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
8027 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
8028 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
8029 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
8033 UCHAR FunctionDependencyLink
;
8035 USHORT FirstVFOffset
;
8039 ULONG SupportedPageSizes
;
8040 ULONG SystemPageSize
;
8041 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
8042 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
8043 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
8045 /* PCI device classes */
8046 #define PCI_CLASS_PRE_20 0x00
8047 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
8048 #define PCI_CLASS_NETWORK_CTLR 0x02
8049 #define PCI_CLASS_DISPLAY_CTLR 0x03
8050 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
8051 #define PCI_CLASS_MEMORY_CTLR 0x05
8052 #define PCI_CLASS_BRIDGE_DEV 0x06
8053 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
8054 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
8055 #define PCI_CLASS_INPUT_DEV 0x09
8056 #define PCI_CLASS_DOCKING_STATION 0x0a
8057 #define PCI_CLASS_PROCESSOR 0x0b
8058 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
8059 #define PCI_CLASS_WIRELESS_CTLR 0x0d
8060 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
8061 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
8062 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
8063 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
8064 #define PCI_CLASS_NOT_DEFINED 0xff
8066 /* PCI device subclasses for class 0 */
8067 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
8068 #define PCI_SUBCLASS_PRE_20_VGA 0x01
8070 /* PCI device subclasses for class 1 (mass storage controllers)*/
8071 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
8072 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
8073 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
8074 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
8075 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
8076 #define PCI_SUBCLASS_MSC_OTHER 0x80
8078 /* PCI device subclasses for class 2 (network controllers)*/
8079 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
8080 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
8081 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
8082 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
8083 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
8084 #define PCI_SUBCLASS_NET_OTHER 0x80
8086 /* PCI device subclasses for class 3 (display controllers)*/
8087 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
8088 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
8089 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
8090 #define PCI_SUBCLASS_VID_OTHER 0x80
8092 /* PCI device subclasses for class 4 (multimedia device)*/
8093 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
8094 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
8095 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
8096 #define PCI_SUBCLASS_MM_OTHER 0x80
8098 /* PCI device subclasses for class 5 (memory controller)*/
8099 #define PCI_SUBCLASS_MEM_RAM 0x00
8100 #define PCI_SUBCLASS_MEM_FLASH 0x01
8101 #define PCI_SUBCLASS_MEM_OTHER 0x80
8103 /* PCI device subclasses for class 6 (bridge device)*/
8104 #define PCI_SUBCLASS_BR_HOST 0x00
8105 #define PCI_SUBCLASS_BR_ISA 0x01
8106 #define PCI_SUBCLASS_BR_EISA 0x02
8107 #define PCI_SUBCLASS_BR_MCA 0x03
8108 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
8109 #define PCI_SUBCLASS_BR_PCMCIA 0x05
8110 #define PCI_SUBCLASS_BR_NUBUS 0x06
8111 #define PCI_SUBCLASS_BR_CARDBUS 0x07
8112 #define PCI_SUBCLASS_BR_RACEWAY 0x08
8113 #define PCI_SUBCLASS_BR_OTHER 0x80
8115 #define PCI_SUBCLASS_COM_SERIAL 0x00
8116 #define PCI_SUBCLASS_COM_PARALLEL 0x01
8117 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
8118 #define PCI_SUBCLASS_COM_MODEM 0x03
8119 #define PCI_SUBCLASS_COM_OTHER 0x80
8121 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
8122 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
8123 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
8124 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
8125 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
8126 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
8127 #define PCI_SUBCLASS_SYS_OTHER 0x80
8129 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
8130 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
8131 #define PCI_SUBCLASS_INP_MOUSE 0x02
8132 #define PCI_SUBCLASS_INP_SCANNER 0x03
8133 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
8134 #define PCI_SUBCLASS_INP_OTHER 0x80
8136 #define PCI_SUBCLASS_DOC_GENERIC 0x00
8137 #define PCI_SUBCLASS_DOC_OTHER 0x80
8139 #define PCI_SUBCLASS_PROC_386 0x00
8140 #define PCI_SUBCLASS_PROC_486 0x01
8141 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
8142 #define PCI_SUBCLASS_PROC_ALPHA 0x10
8143 #define PCI_SUBCLASS_PROC_POWERPC 0x20
8144 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
8146 /* PCI device subclasses for class C (serial bus controller)*/
8147 #define PCI_SUBCLASS_SB_IEEE1394 0x00
8148 #define PCI_SUBCLASS_SB_ACCESS 0x01
8149 #define PCI_SUBCLASS_SB_SSA 0x02
8150 #define PCI_SUBCLASS_SB_USB 0x03
8151 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
8152 #define PCI_SUBCLASS_SB_SMBUS 0x05
8154 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
8155 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
8156 #define PCI_SUBCLASS_WIRELESS_RF 0x10
8157 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
8159 #define PCI_SUBCLASS_INTIO_I2O 0x00
8161 #define PCI_SUBCLASS_SAT_TV 0x01
8162 #define PCI_SUBCLASS_SAT_AUDIO 0x02
8163 #define PCI_SUBCLASS_SAT_VOICE 0x03
8164 #define PCI_SUBCLASS_SAT_DATA 0x04
8166 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
8167 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
8168 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
8170 #define PCI_SUBCLASS_DASP_DPIO 0x00
8171 #define PCI_SUBCLASS_DASP_OTHER 0x80
8173 #define PCI_ADDRESS_IO_SPACE 0x00000001
8174 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
8175 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
8176 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
8177 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
8178 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
8180 #define PCI_TYPE_32BIT 0
8181 #define PCI_TYPE_20BIT 2
8182 #define PCI_TYPE_64BIT 4
8184 #define PCI_ROMADDRESS_ENABLED 0x00000001
8186 #endif /* _PCI_X_ */
8188 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
8190 _IRQL_requires_max_(PASSIVE_LEVEL
)
8191 _Must_inspect_result_
8193 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
8194 _Inout_ PVOID Context
);
8195 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
8197 _IRQL_requires_max_(PASSIVE_LEVEL
)
8198 _Must_inspect_result_
8200 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
8201 _Inout_ PVOID Context
);
8202 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
8204 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
8208 PINTERFACE_REFERENCE InterfaceReference
;
8209 PINTERFACE_DEREFERENCE InterfaceDereference
;
8210 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
8211 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
8212 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
8214 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
8217 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
8219 _Out_writes_bytes_(Length
) PVOID Buffer
,
8224 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
8226 _In_reads_bytes_(Length
) PVOID Buffer
,
8230 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
8234 PINTERFACE_REFERENCE InterfaceReference
;
8235 PINTERFACE_DEREFERENCE InterfaceDereference
;
8236 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
8237 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
8238 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
8240 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
8242 _Must_inspect_result_
8244 (NTAPI PCI_MSIX_SET_ENTRY
)(
8246 _In_ ULONG TableEntry
,
8247 _In_ ULONG MessageNumber
);
8248 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
8250 _Must_inspect_result_
8252 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
8254 _In_ ULONG TableEntry
);
8255 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
8257 _Must_inspect_result_
8259 (NTAPI PCI_MSIX_GET_ENTRY
)(
8261 _In_ ULONG TableEntry
,
8262 _Out_ PULONG MessageNumber
,
8263 _Out_ PBOOLEAN Masked
);
8264 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
8266 _Must_inspect_result_
8268 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
8270 _Out_ PULONG TableSize
);
8271 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
8273 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
8277 PINTERFACE_REFERENCE InterfaceReference
;
8278 PINTERFACE_DEREFERENCE InterfaceDereference
;
8279 PPCI_MSIX_SET_ENTRY SetTableEntry
;
8280 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
8281 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
8282 PPCI_MSIX_GET_ENTRY GetTableEntry
;
8283 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
8284 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
8286 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
8287 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
8289 /******************************************************************************
8290 * Object Manager Types *
8291 ******************************************************************************/
8293 #define MAXIMUM_FILENAME_LENGTH 256
8294 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
8296 #define OBJECT_TYPE_CREATE 0x0001
8297 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8299 #define DIRECTORY_QUERY 0x0001
8300 #define DIRECTORY_TRAVERSE 0x0002
8301 #define DIRECTORY_CREATE_OBJECT 0x0004
8302 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
8303 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
8305 #define SYMBOLIC_LINK_QUERY 0x0001
8306 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8308 #define DUPLICATE_CLOSE_SOURCE 0x00000001
8309 #define DUPLICATE_SAME_ACCESS 0x00000002
8310 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
8312 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
8313 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
8315 typedef ULONG OB_OPERATION
;
8317 #define OB_OPERATION_HANDLE_CREATE 0x00000001
8318 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
8320 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
8321 _Inout_ ACCESS_MASK DesiredAccess
;
8322 _In_ ACCESS_MASK OriginalDesiredAccess
;
8323 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
8325 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
8326 _Inout_ ACCESS_MASK DesiredAccess
;
8327 _In_ ACCESS_MASK OriginalDesiredAccess
;
8328 _In_ PVOID SourceProcess
;
8329 _In_ PVOID TargetProcess
;
8330 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
8332 typedef union _OB_PRE_OPERATION_PARAMETERS
{
8333 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8334 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8335 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
8337 typedef struct _OB_PRE_OPERATION_INFORMATION
{
8338 _In_ OB_OPERATION Operation
;
8339 _ANONYMOUS_UNION
union {
8341 _ANONYMOUS_STRUCT
struct {
8342 _In_ ULONG KernelHandle
:1;
8343 _In_ ULONG Reserved
:31;
8347 _In_ POBJECT_TYPE ObjectType
;
8348 _Out_ PVOID CallContext
;
8349 _In_ POB_PRE_OPERATION_PARAMETERS Parameters
;
8350 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
8352 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
8353 _In_ ACCESS_MASK GrantedAccess
;
8354 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
8356 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
8357 _In_ ACCESS_MASK GrantedAccess
;
8358 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
8360 typedef union _OB_POST_OPERATION_PARAMETERS
{
8361 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8362 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8363 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
8365 typedef struct _OB_POST_OPERATION_INFORMATION
{
8366 _In_ OB_OPERATION Operation
;
8367 _ANONYMOUS_UNION
union {
8369 _ANONYMOUS_STRUCT
struct {
8370 _In_ ULONG KernelHandle
:1;
8371 _In_ ULONG Reserved
:31;
8375 _In_ POBJECT_TYPE ObjectType
;
8376 _In_ PVOID CallContext
;
8377 _In_ NTSTATUS ReturnStatus
;
8378 _In_ POB_POST_OPERATION_PARAMETERS Parameters
;
8379 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
8381 typedef enum _OB_PREOP_CALLBACK_STATUS
{
8383 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
8385 typedef OB_PREOP_CALLBACK_STATUS
8386 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
8387 _In_ PVOID RegistrationContext
,
8388 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
);
8391 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
8392 _In_ PVOID RegistrationContext
,
8393 _In_ POB_POST_OPERATION_INFORMATION OperationInformation
);
8395 typedef struct _OB_OPERATION_REGISTRATION
{
8396 _In_ POBJECT_TYPE
*ObjectType
;
8397 _In_ OB_OPERATION Operations
;
8398 _In_ POB_PRE_OPERATION_CALLBACK PreOperation
;
8399 _In_ POB_POST_OPERATION_CALLBACK PostOperation
;
8400 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
8402 typedef struct _OB_CALLBACK_REGISTRATION
{
8403 _In_ USHORT Version
;
8404 _In_ USHORT OperationRegistrationCount
;
8405 _In_ UNICODE_STRING Altitude
;
8406 _In_ PVOID RegistrationContext
;
8407 _In_ OB_OPERATION_REGISTRATION
*OperationRegistration
;
8408 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
8410 typedef struct _OBJECT_NAME_INFORMATION
{
8411 UNICODE_STRING Name
;
8412 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
8414 /* Exported object types */
8415 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
8416 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
8417 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
8418 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
8419 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
8420 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
8421 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
8424 /******************************************************************************
8425 * Process Manager Types *
8426 ******************************************************************************/
8428 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
8429 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
8430 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
8431 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
8432 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
8434 /* Thread Access Rights */
8435 #define THREAD_TERMINATE 0x0001
8436 #define THREAD_SUSPEND_RESUME 0x0002
8437 #define THREAD_ALERT 0x0004
8438 #define THREAD_GET_CONTEXT 0x0008
8439 #define THREAD_SET_CONTEXT 0x0010
8440 #define THREAD_SET_INFORMATION 0x0020
8441 #define THREAD_SET_LIMITED_INFORMATION 0x0400
8442 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
8444 #define PROCESS_DUP_HANDLE (0x0040)
8446 #if (NTDDI_VERSION >= NTDDI_VISTA)
8447 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8449 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
8452 #if (NTDDI_VERSION >= NTDDI_VISTA)
8453 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8455 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
8458 #define LOW_PRIORITY 0
8459 #define LOW_REALTIME_PRIORITY 16
8460 #define HIGH_PRIORITY 31
8461 #define MAXIMUM_PRIORITY 32
8464 /******************************************************************************
8465 * WMI Library Support Types *
8466 ******************************************************************************/
8469 #include <evntrace.h>
8473 #ifndef _TRACEHANDLE_DEFINED
8474 #define _TRACEHANDLE_DEFINED
8475 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
8478 #ifndef TRACE_INFORMATION_CLASS_DEFINE
8480 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
8483 ULONG MinimumBuffers
;
8484 ULONG MaximumBuffers
;
8487 ULONG FlushThreshold
;
8489 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
8491 typedef enum _TRACE_INFORMATION_CLASS
{
8494 TraceEnableFlagsClass
,
8495 TraceEnableLevelClass
,
8496 GlobalLoggerHandleClass
,
8497 EventLoggerHandleClass
,
8498 AllLoggerHandlesClass
,
8499 TraceHandleByNameClass
,
8500 LoggerEventsLostClass
,
8501 TraceSessionSettingsClass
,
8502 LoggerEventsLoggedClass
,
8503 MaxTraceInformationClass
8504 } TRACE_INFORMATION_CLASS
;
8506 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
8512 #include <evntprov.h>
8514 _IRQL_requires_same_
8516 (NTAPI
*PETWENABLECALLBACK
)(
8517 _In_ LPCGUID SourceId
,
8518 _In_ ULONG ControlCode
,
8520 _In_ ULONGLONG MatchAnyKeyword
,
8521 _In_ ULONGLONG MatchAllKeyword
,
8522 _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData
,
8523 _Inout_opt_ PVOID CallbackContext
);
8525 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
8528 /******************************************************************************
8529 * Runtime Library Functions *
8530 ******************************************************************************/
8533 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
8535 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
8540 _Out_ PLIST_ENTRY ListHead
)
8542 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
8545 _Must_inspect_result_
8549 _In_
const LIST_ENTRY
* ListHead
)
8551 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
8557 _In_ PLIST_ENTRY Entry
)
8559 PLIST_ENTRY OldFlink
;
8560 PLIST_ENTRY OldBlink
;
8562 OldFlink
= Entry
->Flink
;
8563 OldBlink
= Entry
->Blink
;
8564 OldFlink
->Blink
= OldBlink
;
8565 OldBlink
->Flink
= OldFlink
;
8566 return (BOOLEAN
)(OldFlink
== OldBlink
);
8572 _Inout_ PLIST_ENTRY ListHead
)
8577 Entry
= ListHead
->Flink
;
8578 Flink
= Entry
->Flink
;
8579 ListHead
->Flink
= Flink
;
8580 Flink
->Blink
= ListHead
;
8587 _Inout_ PLIST_ENTRY ListHead
)
8592 Entry
= ListHead
->Blink
;
8593 Blink
= Entry
->Blink
;
8594 ListHead
->Blink
= Blink
;
8595 Blink
->Flink
= ListHead
;
8602 _Inout_ PLIST_ENTRY ListHead
,
8603 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
8605 PLIST_ENTRY OldBlink
;
8606 OldBlink
= ListHead
->Blink
;
8607 Entry
->Flink
= ListHead
;
8608 Entry
->Blink
= OldBlink
;
8609 OldBlink
->Flink
= Entry
;
8610 ListHead
->Blink
= Entry
;
8616 _Inout_ PLIST_ENTRY ListHead
,
8617 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
8619 PLIST_ENTRY OldFlink
;
8620 OldFlink
= ListHead
->Flink
;
8621 Entry
->Flink
= OldFlink
;
8622 Entry
->Blink
= ListHead
;
8623 OldFlink
->Blink
= Entry
;
8624 ListHead
->Flink
= Entry
;
8630 _Inout_ PLIST_ENTRY ListHead
,
8631 _Inout_ PLIST_ENTRY ListToAppend
)
8633 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
8635 ListHead
->Blink
->Flink
= ListToAppend
;
8636 ListHead
->Blink
= ListToAppend
->Blink
;
8637 ListToAppend
->Blink
->Flink
= ListHead
;
8638 ListToAppend
->Blink
= ListEnd
;
8644 _Inout_ PSINGLE_LIST_ENTRY ListHead
)
8646 PSINGLE_LIST_ENTRY FirstEntry
;
8647 FirstEntry
= ListHead
->Next
;
8648 if (FirstEntry
!= NULL
) {
8649 ListHead
->Next
= FirstEntry
->Next
;
8657 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
8658 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry
)
8660 Entry
->Next
= ListHead
->Next
;
8661 ListHead
->Next
= Entry
;
8664 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
8671 _In_ PVOID FailedAssertion
,
8672 _In_ PVOID FileName
,
8673 _In_ ULONG LineNumber
,
8674 _In_opt_z_ PSTR Message
);
8678 * IN VOID UNALIGNED *Destination,
8679 * IN CONST VOID UNALIGNED *Source,
8682 #define RtlCopyMemory(Destination, Source, Length) \
8683 memcpy(Destination, Source, Length)
8685 #define RtlCopyBytes RtlCopyMemory
8687 #if defined(_M_AMD64)
8691 RtlCopyMemoryNonTemporal(
8692 _Out_writes_bytes_all_(Length
) VOID UNALIGNED
*Destination
,
8693 _In_reads_bytes_(Length
) const VOID UNALIGNED
*Source
,
8694 _In_ SIZE_T Length
);
8696 #define RtlCopyMemoryNonTemporal RtlCopyMemory
8704 #define RtlEqualLuid(Luid1, Luid2) \
8705 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
8709 * IN VOID UNALIGNED *Destination,
8710 * IN CONST VOID UNALIGNED *Source,
8713 #define RtlEqualMemory(Destination, Source, Length) \
8714 (!memcmp(Destination, Source, Length))
8718 * IN VOID UNALIGNED *Destination,
8722 #define RtlFillMemory(Destination, Length, Fill) \
8723 memset(Destination, Fill, Length)
8725 #define RtlFillBytes RtlFillMemory
8727 _IRQL_requires_max_(PASSIVE_LEVEL
)
8731 RtlFreeUnicodeString(
8732 _Inout_
_At_(UnicodeString
->Buffer
, __drv_freesMem(Mem
))
8733 PUNICODE_STRING UnicodeString
);
8735 _IRQL_requires_max_(PASSIVE_LEVEL
)
8736 _Must_inspect_result_
8741 _In_ PUNICODE_STRING GuidString
,
8744 _IRQL_requires_max_(DISPATCH_LEVEL
)
8745 _At_(DestinationString
->Buffer
, _Post_equal_to_(SourceString
))
8746 _When_(SourceString
!= NULL
,
8747 _At_(DestinationString
->Length
, _Post_equal_to_(_String_length_(SourceString
) * sizeof(WCHAR
)))
8748 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(DestinationString
->Length
+ sizeof(WCHAR
))))
8749 _When_(SourceString
== NULL
,
8750 _At_(DestinationString
->Length
, _Post_equal_to_(0))
8751 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(0)))
8755 RtlInitUnicodeString(
8756 _Out_ PUNICODE_STRING DestinationString
,
8757 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
);
8761 * IN VOID UNALIGNED *Destination,
8762 * IN CONST VOID UNALIGNED *Source,
8765 #define RtlMoveMemory(Destination, Source, Length) \
8766 memmove(Destination, Source, Length)
8768 _IRQL_requires_max_(PASSIVE_LEVEL
)
8769 _Must_inspect_result_
8775 _Out_
_At_(GuidString
->Buffer
, __drv_allocatesMem(Mem
))
8776 PUNICODE_STRING GuidString
);
8780 * IN VOID UNALIGNED *Destination,
8783 #define RtlZeroMemory(Destination, Length) \
8784 memset(Destination, 0, Length)
8786 #define RtlZeroBytes RtlZeroMemory
8788 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8790 _Must_inspect_result_
8795 _In_ PRTL_BITMAP BitMapHeader
,
8796 _In_ ULONG StartingIndex
,
8799 _Must_inspect_result_
8804 _In_ PRTL_BITMAP BitMapHeader
,
8805 _In_ ULONG StartingIndex
,
8808 _IRQL_requires_max_(PASSIVE_LEVEL
)
8809 _Must_inspect_result_
8813 RtlAnsiStringToUnicodeString(
8814 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
8815 _When_(!AllocateDestinationString
, _Inout_
)
8816 PUNICODE_STRING DestinationString
,
8817 _In_ PANSI_STRING SourceString
,
8818 _In_ BOOLEAN AllocateDestinationString
);
8820 _IRQL_requires_max_(PASSIVE_LEVEL
)
8824 RtlxAnsiStringToUnicodeSize(
8825 _In_ PCANSI_STRING AnsiString
);
8827 #define RtlAnsiStringToUnicodeSize(String) ( \
8828 NLS_MB_CODE_PAGE_TAG ? \
8829 RtlxAnsiStringToUnicodeSize(String) : \
8830 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
8834 _Unchanged_(Destination
->MaximumLength
)
8835 _Unchanged_(Destination
->Buffer
)
8836 _When_(_Old_(Destination
->Length
) + Source
->Length
<= Destination
->MaximumLength
,
8837 _At_(Destination
->Length
, _Post_equal_to_(_Old_(Destination
->Length
) + Source
->Length
))
8838 _At_(return, _Out_range_(==, 0)))
8839 _When_(_Old_(Destination
->Length
) + Source
->Length
> Destination
->MaximumLength
,
8840 _Unchanged_(Destination
->Length
)
8841 _At_(return, _Out_range_(<, 0)))
8845 RtlAppendUnicodeStringToString(
8846 _Inout_ PUNICODE_STRING Destination
,
8847 _In_ PCUNICODE_STRING Source
);
8850 _Unchanged_(Destination
->MaximumLength
)
8851 _Unchanged_(Destination
->Buffer
)
8852 /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
8853 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
8854 _At_(return, _Out_range_(==, 0)))
8855 _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
8856 _Unchanged_(Destination->Length)
8857 _At_(return, _Out_range_(<, 0))) */
8861 RtlAppendUnicodeToString(
8862 _Inout_ PUNICODE_STRING Destination
,
8863 _In_opt_z_ PCWSTR Source
);
8865 _IRQL_requires_max_(PASSIVE_LEVEL
)
8866 _Must_inspect_result_
8870 RtlCheckRegistryKey(
8871 _In_ ULONG RelativeTo
,
8878 _In_ PRTL_BITMAP BitMapHeader
);
8884 _In_ PRTL_BITMAP BitMapHeader
,
8885 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToClear
) ULONG StartingIndex
,
8886 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToClear
);
8888 _Must_inspect_result_
8893 _In_
const VOID
*Source1
,
8894 _In_
const VOID
*Source2
,
8895 _In_ SIZE_T Length
);
8897 _IRQL_requires_max_(PASSIVE_LEVEL
)
8898 _Must_inspect_result_
8902 RtlCompareUnicodeString(
8903 _In_ PCUNICODE_STRING String1
,
8904 _In_ PCUNICODE_STRING String2
,
8905 _In_ BOOLEAN CaseInSensitive
);
8907 _IRQL_requires_max_(PASSIVE_LEVEL
)
8908 _Must_inspect_result_
8912 RtlCompareUnicodeStrings(
8913 _In_reads_(String1Length
) PCWCH String1
,
8914 _In_ SIZE_T String1Length
,
8915 _In_reads_(String2Length
) PCWCH String2
,
8916 _In_ SIZE_T String2Length
,
8917 _In_ BOOLEAN CaseInSensitive
);
8919 _Unchanged_(DestinationString
->Buffer
)
8920 _Unchanged_(DestinationString
->MaximumLength
)
8921 _At_(DestinationString
->Length
,
8922 _When_(SourceString
->Length
> DestinationString
->MaximumLength
,
8923 _Post_equal_to_(DestinationString
->MaximumLength
))
8924 _When_(SourceString
->Length
<= DestinationString
->MaximumLength
,
8925 _Post_equal_to_(SourceString
->Length
)))
8929 RtlCopyUnicodeString(
8930 _Inout_ PUNICODE_STRING DestinationString
,
8931 _In_opt_ PCUNICODE_STRING SourceString
);
8933 _IRQL_requires_max_(PASSIVE_LEVEL
)
8937 RtlCreateRegistryKey(
8938 _In_ ULONG RelativeTo
,
8941 _IRQL_requires_max_(APC_LEVEL
)
8945 RtlCreateSecurityDescriptor(
8946 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
8947 _In_ ULONG Revision
);
8949 _IRQL_requires_max_(PASSIVE_LEVEL
)
8953 RtlDeleteRegistryValue(
8954 _In_ ULONG RelativeTo
,
8956 _In_z_ PCWSTR ValueName
);
8958 _IRQL_requires_max_(PASSIVE_LEVEL
)
8959 _Must_inspect_result_
8963 RtlEqualUnicodeString(
8964 _In_ CONST UNICODE_STRING
*String1
,
8965 _In_ CONST UNICODE_STRING
*String2
,
8966 _In_ BOOLEAN CaseInSensitive
);
8968 #if !defined(_AMD64_) && !defined(_IA64_)
8972 RtlExtendedIntegerMultiply(
8973 _In_ LARGE_INTEGER Multiplicand
,
8974 _In_ LONG Multiplier
);
8979 RtlExtendedLargeIntegerDivide(
8980 _In_ LARGE_INTEGER Dividend
,
8982 _Out_opt_ PULONG Remainder
);
8985 #if defined(_X86_) || defined(_IA64_)
8989 RtlExtendedMagicDivide(
8990 _In_ LARGE_INTEGER Dividend
,
8991 _In_ LARGE_INTEGER MagicDivisor
,
8992 _In_ CCHAR ShiftCount
);
8995 _IRQL_requires_max_(PASSIVE_LEVEL
)
9000 _Inout_
_At_(AnsiString
->Buffer
, __drv_freesMem(Mem
))
9001 PANSI_STRING AnsiString
);
9003 _Success_(return != -1)
9004 _Must_inspect_result_
9009 _In_ PRTL_BITMAP BitMapHeader
,
9010 _In_ ULONG NumberToFind
,
9011 _In_ ULONG HintIndex
);
9013 _Success_(return != -1)
9017 RtlFindClearBitsAndSet(
9018 _In_ PRTL_BITMAP BitMapHeader
,
9019 _In_ ULONG NumberToFind
,
9020 _In_ ULONG HintIndex
);
9025 RtlFindFirstRunClear(
9026 _In_ PRTL_BITMAP BitMapHeader
,
9027 _Out_ PULONG StartingIndex
);
9033 _In_ PRTL_BITMAP BitMapHeader
,
9034 _Out_writes_to_(SizeOfRunArray
, return) PRTL_BITMAP_RUN RunArray
,
9035 _In_range_(>, 0) ULONG SizeOfRunArray
,
9036 _In_ BOOLEAN LocateLongestRuns
);
9041 RtlFindLastBackwardRunClear(
9042 _In_ PRTL_BITMAP BitMapHeader
,
9043 _In_ ULONG FromIndex
,
9044 _Out_ PULONG StartingRunIndex
);
9046 _Success_(return != -1)
9047 _Must_inspect_result_
9051 RtlFindLeastSignificantBit(
9052 _In_ ULONGLONG Set
);
9057 RtlFindLongestRunClear(
9058 _In_ PRTL_BITMAP BitMapHeader
,
9059 _Out_ PULONG StartingIndex
);
9061 _Success_(return != -1)
9062 _Must_inspect_result_
9066 RtlFindMostSignificantBit(
9067 _In_ ULONGLONG Set
);
9072 RtlFindNextForwardRunClear(
9073 _In_ PRTL_BITMAP BitMapHeader
,
9074 _In_ ULONG FromIndex
,
9075 _Out_ PULONG StartingRunIndex
);
9077 _Success_(return != -1)
9078 _Must_inspect_result_
9083 _In_ PRTL_BITMAP BitMapHeader
,
9084 _In_ ULONG NumberToFind
,
9085 _In_ ULONG HintIndex
);
9087 _Success_(return != -1)
9091 RtlFindSetBitsAndClear(
9092 _In_ PRTL_BITMAP BitMapHeader
,
9093 _In_ ULONG NumberToFind
,
9094 _In_ ULONG HintIndex
);
9096 _IRQL_requires_max_(DISPATCH_LEVEL
)
9101 _Out_ PANSI_STRING DestinationString
,
9102 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
9104 _At_(BitMapHeader
->SizeOfBitMap
, _Post_equal_to_(SizeOfBitMap
))
9105 _At_(BitMapHeader
->Buffer
, _Post_equal_to_(BitMapBuffer
))
9109 RtlInitializeBitMap(
9110 _Out_ PRTL_BITMAP BitMapHeader
,
9111 _In_opt_ __drv_aliasesMem PULONG BitMapBuffer
,
9112 _In_opt_ ULONG SizeOfBitMap
);
9114 _IRQL_requires_max_(DISPATCH_LEVEL
)
9119 _Out_ PSTRING DestinationString
,
9120 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
9122 _IRQL_requires_max_(PASSIVE_LEVEL
)
9123 _At_(String
->MaximumLength
, _Const_
)
9127 RtlIntegerToUnicodeString(
9129 _In_opt_ ULONG Base
,
9130 _Inout_ PUNICODE_STRING String
);
9132 _IRQL_requires_max_(PASSIVE_LEVEL
)
9133 _At_(String
->MaximumLength
, _Const_
)
9137 RtlInt64ToUnicodeString(
9138 _In_ ULONGLONG Value
,
9139 _In_opt_ ULONG Base
,
9140 _Inout_ PUNICODE_STRING String
);
9143 #define RtlIntPtrToUnicodeString(Value, Base, String) \
9144 RtlInt64ToUnicodeString(Value, Base, String)
9146 #define RtlIntPtrToUnicodeString(Value, Base, String) \
9147 RtlIntegerToUnicodeString(Value, Base, String)
9154 #define RtlIsZeroLuid(_L1) \
9155 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
9157 _IRQL_requires_max_(APC_LEVEL
)
9161 RtlLengthSecurityDescriptor(
9162 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
9167 RtlNumberOfClearBits(
9168 _In_ PRTL_BITMAP BitMapHeader
);
9174 _In_ PRTL_BITMAP BitMapHeader
);
9176 _IRQL_requires_max_(PASSIVE_LEVEL
)
9180 RtlQueryRegistryValues(
9181 _In_ ULONG RelativeTo
,
9183 _Inout_
_At_(*(*QueryTable
).EntryContext
, _Pre_unknown_
)
9184 PRTL_QUERY_REGISTRY_TABLE QueryTable
,
9185 _In_opt_ PVOID Context
,
9186 _In_opt_ PVOID Environment
);
9188 #define SHORT_SIZE (sizeof(USHORT))
9189 #define SHORT_MASK (SHORT_SIZE - 1)
9190 #define LONG_SIZE (sizeof(LONG))
9191 #define LONGLONG_SIZE (sizeof(LONGLONG))
9192 #define LONG_MASK (LONG_SIZE - 1)
9193 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
9194 #define LOWBYTE_MASK 0x00FF
9196 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
9197 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
9198 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
9199 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
9205 _In_ PRTL_BITMAP BitMapHeader
);
9211 _In_ PRTL_BITMAP BitMapHeader
,
9212 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToSet
) ULONG StartingIndex
,
9213 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToSet
);
9215 _IRQL_requires_max_(APC_LEVEL
)
9219 RtlSetDaclSecurityDescriptor(
9220 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
9221 _In_ BOOLEAN DaclPresent
,
9223 _In_opt_ BOOLEAN DaclDefaulted
);
9225 #if defined(_AMD64_)
9229 * IN PULONG Address,
9232 #define RtlStoreUlong(Address,Value) \
9233 *(ULONG UNALIGNED *)(Address) = (Value)
9236 * RtlStoreUlonglong(
9237 * IN OUT PULONGLONG Address,
9240 #define RtlStoreUlonglong(Address,Value) \
9241 *(ULONGLONG UNALIGNED *)(Address) = (Value)
9245 * IN PUSHORT Address,
9248 #define RtlStoreUshort(Address,Value) \
9249 *(USHORT UNALIGNED *)(Address) = (Value)
9252 * RtlRetrieveUshort(
9253 * PUSHORT DestinationAddress,
9254 * PUSHORT SourceAddress);
9256 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
9257 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
9261 * PULONG DestinationAddress,
9262 * PULONG SourceAddress);
9264 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
9265 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
9269 #define RtlStoreUlong(Address,Value) \
9270 if ((ULONG_PTR)(Address) & LONG_MASK) { \
9271 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
9272 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
9273 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
9274 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
9277 *((PULONG)(Address)) = (ULONG) (Value); \
9280 #define RtlStoreUlonglong(Address,Value) \
9281 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
9282 RtlStoreUlong((ULONG_PTR)(Address), \
9283 (ULONGLONG)(Value) & 0xFFFFFFFF); \
9284 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
9285 (ULONGLONG)(Value) >> 32); \
9287 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
9290 #define RtlStoreUshort(Address,Value) \
9291 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
9292 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
9293 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
9296 *((PUSHORT) (Address)) = (USHORT)Value; \
9299 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
9300 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
9302 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
9303 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
9307 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
9310 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
9311 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
9313 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
9314 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
9315 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
9316 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
9320 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
9323 #endif /* defined(_AMD64_) */
9328 * IN OUT PULONG_PTR Address,
9329 * IN ULONG_PTR Value);
9331 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
9333 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
9336 _Success_(return!=FALSE
)
9337 _Must_inspect_result_
9341 RtlTimeFieldsToTime(
9342 _In_ PTIME_FIELDS TimeFields
,
9343 _Out_ PLARGE_INTEGER Time
);
9348 RtlTimeToTimeFields(
9349 _In_ PLARGE_INTEGER Time
,
9350 _Out_ PTIME_FIELDS TimeFields
);
9361 RtlUlonglongByteSwap(
9362 _In_ ULONGLONG Source
);
9364 _When_(AllocateDestinationString
,
9365 _At_(DestinationString
->MaximumLength
,
9366 _Out_range_(<=, (SourceString
->MaximumLength
/ sizeof(WCHAR
)))))
9367 _When_(!AllocateDestinationString
,
9368 _At_(DestinationString
->Buffer
, _Const_
)
9369 _At_(DestinationString
->MaximumLength
, _Const_
))
9370 _IRQL_requires_max_(PASSIVE_LEVEL
)
9371 _When_(AllocateDestinationString
, _Must_inspect_result_
)
9375 RtlUnicodeStringToAnsiString(
9376 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
9377 _When_(!AllocateDestinationString
, _Inout_
)
9378 PANSI_STRING DestinationString
,
9379 _In_ PCUNICODE_STRING SourceString
,
9380 _In_ BOOLEAN AllocateDestinationString
);
9382 _IRQL_requires_max_(PASSIVE_LEVEL
)
9386 RtlxUnicodeStringToAnsiSize(
9387 _In_ PCUNICODE_STRING UnicodeString
);
9389 #define RtlUnicodeStringToAnsiSize(String) ( \
9390 NLS_MB_CODE_PAGE_TAG ? \
9391 RtlxUnicodeStringToAnsiSize(String) : \
9392 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
9395 _IRQL_requires_max_(PASSIVE_LEVEL
)
9399 RtlUnicodeStringToInteger(
9400 _In_ PCUNICODE_STRING String
,
9401 _In_opt_ ULONG Base
,
9402 _Out_ PULONG Value
);
9404 _IRQL_requires_max_(PASSIVE_LEVEL
)
9408 RtlUpcaseUnicodeChar(
9409 _In_ WCHAR SourceCharacter
);
9415 _In_ USHORT Source
);
9417 _IRQL_requires_max_(APC_LEVEL
)
9418 _Must_inspect_result_
9422 RtlValidRelativeSecurityDescriptor(
9423 _In_reads_bytes_(SecurityDescriptorLength
) PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
9424 _In_ ULONG SecurityDescriptorLength
,
9425 _In_ SECURITY_INFORMATION RequiredInformation
);
9427 _IRQL_requires_max_(APC_LEVEL
)
9428 _Must_inspect_result_
9432 RtlValidSecurityDescriptor(
9433 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
9435 _IRQL_requires_max_(PASSIVE_LEVEL
)
9441 _At_(lpVersionInformation
->dwOSVersionInfoSize
, _Pre_ _Valid_
)
9442 _When_(lpVersionInformation
->dwOSVersionInfoSize
== sizeof(RTL_OSVERSIONINFOEXW
),
9443 _At_((PRTL_OSVERSIONINFOEXW
)lpVersionInformation
, _Out_
))
9444 PRTL_OSVERSIONINFOW lpVersionInformation
);
9446 _IRQL_requires_max_(PASSIVE_LEVEL
)
9447 _Must_inspect_result_
9451 RtlVerifyVersionInfo(
9452 _In_ PRTL_OSVERSIONINFOEXW VersionInfo
,
9453 _In_ ULONG TypeMask
,
9454 _In_ ULONGLONG ConditionMask
);
9456 _IRQL_requires_max_(PASSIVE_LEVEL
)
9460 RtlWriteRegistryValue(
9461 _In_ ULONG RelativeTo
,
9463 _In_z_ PCWSTR ValueName
,
9464 _In_ ULONG ValueType
,
9465 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
9466 _In_ ULONG ValueLength
);
9469 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9472 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
9476 RtlPrefetchMemoryNonTemporal(
9478 _In_ SIZE_T Length
);
9482 #if (NTDDI_VERSION >= NTDDI_WINXP)
9489 _In_ PRTL_BITMAP BitMapHeader
,
9490 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
9492 _IRQL_requires_max_(PASSIVE_LEVEL
)
9496 RtlDowncaseUnicodeChar(
9497 _In_ WCHAR SourceCharacter
);
9503 _In_ PRTL_BITMAP BitMapHeader
,
9504 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
9506 _Must_inspect_result_
9511 _In_ PRTL_BITMAP BitMapHeader
,
9512 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
9514 _IRQL_requires_max_(PASSIVE_LEVEL
)
9518 RtlHashUnicodeString(
9519 _In_ CONST UNICODE_STRING
*String
,
9520 _In_ BOOLEAN CaseInSensitive
,
9521 _In_ ULONG HashAlgorithm
,
9522 _Out_ PULONG HashValue
);
9526 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9529 #if (NTDDI_VERSION >= NTDDI_VISTA)
9534 RtlNumberOfSetBitsUlongPtr(
9535 _In_ ULONG_PTR Target
);
9540 RtlIoDecodeMemIoResource(
9541 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
9542 _Out_opt_ PULONGLONG Alignment
,
9543 _Out_opt_ PULONGLONG MinimumAddress
,
9544 _Out_opt_ PULONGLONG MaximumAddress
);
9549 RtlIoEncodeMemIoResource(
9550 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
9552 _In_ ULONGLONG Length
,
9553 _In_ ULONGLONG Alignment
,
9554 _In_ ULONGLONG MinimumAddress
,
9555 _In_ ULONGLONG MaximumAddress
);
9560 RtlCmDecodeMemIoResource(
9561 _In_
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
9562 _Out_opt_ PULONGLONG Start
);
9567 RtlFindClosestEncodableLength(
9568 _In_ ULONGLONG SourceLength
,
9569 _Out_ PULONGLONG TargetLength
);
9574 RtlCmEncodeMemIoResource(
9575 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
9577 _In_ ULONGLONG Length
,
9578 _In_ ULONGLONG Start
);
9581 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9583 #if (NTDDI_VERSION >= NTDDI_WIN7)
9585 _IRQL_requires_max_(PASSIVE_LEVEL
)
9586 _Must_inspect_result_
9591 _Out_writes_bytes_to_(UTF8StringMaxByteCount
, *UTF8StringActualByteCount
)
9592 PCHAR UTF8StringDestination
,
9593 _In_ ULONG UTF8StringMaxByteCount
,
9594 _Out_ PULONG UTF8StringActualByteCount
,
9595 _In_reads_bytes_(UnicodeStringByteCount
) PCWCH UnicodeStringSource
,
9596 _In_ ULONG UnicodeStringByteCount
);
9598 _IRQL_requires_max_(PASSIVE_LEVEL
)
9599 _Must_inspect_result_
9604 _Out_writes_bytes_to_(UnicodeStringMaxByteCount
, *UnicodeStringActualByteCount
)
9605 PWSTR UnicodeStringDestination
,
9606 _In_ ULONG UnicodeStringMaxByteCount
,
9607 _Out_ PULONG UnicodeStringActualByteCount
,
9608 _In_reads_bytes_(UTF8StringByteCount
) PCCH UTF8StringSource
,
9609 _In_ ULONG UTF8StringByteCount
);
9614 RtlGetEnabledExtendedFeatures(
9615 IN ULONG64 FeatureMask
);
9618 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9621 #if !defined(MIDL_PASS)
9622 /* inline funftions */
9623 //DECLSPEC_DEPRECATED_DDK_WINXP
9627 RtlConvertLongToLargeInteger(
9628 _In_ LONG SignedInteger
)
9631 ret
.QuadPart
= SignedInteger
;
9635 //DECLSPEC_DEPRECATED_DDK_WINXP
9639 RtlConvertUlongToLargeInteger(
9640 _In_ ULONG UnsignedInteger
)
9643 ret
.QuadPart
= UnsignedInteger
;
9647 //DECLSPEC_DEPRECATED_DDK_WINXP
9651 RtlLargeIntegerShiftLeft(
9652 _In_ LARGE_INTEGER LargeInteger
,
9653 _In_ CCHAR ShiftCount
)
9655 LARGE_INTEGER Result
;
9657 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
9661 //DECLSPEC_DEPRECATED_DDK_WINXP
9665 RtlLargeIntegerShiftRight(
9666 _In_ LARGE_INTEGER LargeInteger
,
9667 _In_ CCHAR ShiftCount
)
9669 LARGE_INTEGER Result
;
9671 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
9675 //DECLSPEC_DEPRECATED_DDK
9679 RtlEnlargedUnsignedDivide(
9680 _In_ ULARGE_INTEGER Dividend
,
9682 _Out_opt_ PULONG Remainder
)
9685 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9686 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
9689 //DECLSPEC_DEPRECATED_DDK
9693 RtlLargeIntegerNegate(
9694 _In_ LARGE_INTEGER Subtrahend
)
9696 LARGE_INTEGER Difference
;
9698 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
9702 //DECLSPEC_DEPRECATED_DDK
9706 RtlLargeIntegerSubtract(
9707 _In_ LARGE_INTEGER Minuend
,
9708 _In_ LARGE_INTEGER Subtrahend
)
9710 LARGE_INTEGER Difference
;
9712 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
9716 //DECLSPEC_DEPRECATED_DDK
9720 RtlEnlargedUnsignedMultiply(
9721 _In_ ULONG Multiplicand
,
9722 _In_ ULONG Multiplier
)
9725 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9729 //DECLSPEC_DEPRECATED_DDK
9733 RtlEnlargedIntegerMultiply(
9734 _In_ LONG Multiplicand
,
9735 _In_ LONG Multiplier
)
9738 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9742 _At_(AnsiString
->Buffer
, _Post_equal_to_(Buffer
))
9743 _At_(AnsiString
->Length
, _Post_equal_to_(0))
9744 _At_(AnsiString
->MaximumLength
, _Post_equal_to_(BufferSize
))
9747 RtlInitEmptyAnsiString(
9748 _Out_ PANSI_STRING AnsiString
,
9749 _Pre_maybenull_
_Pre_readable_size_(BufferSize
) __drv_aliasesMem PCHAR Buffer
,
9750 _In_ USHORT BufferSize
)
9752 AnsiString
->Length
= 0;
9753 AnsiString
->MaximumLength
= BufferSize
;
9754 AnsiString
->Buffer
= Buffer
;
9757 _At_(UnicodeString
->Buffer
, _Post_equal_to_(Buffer
))
9758 _At_(UnicodeString
->Length
, _Post_equal_to_(0))
9759 _At_(UnicodeString
->MaximumLength
, _Post_equal_to_(BufferSize
))
9762 RtlInitEmptyUnicodeString(
9763 _Out_ PUNICODE_STRING UnicodeString
,
9764 _Writable_bytes_(BufferSize
)
9765 _When_(BufferSize
!= 0, _Notnull_
)
9766 __drv_aliasesMem PWSTR Buffer
,
9767 _In_ USHORT BufferSize
)
9769 UnicodeString
->Length
= 0;
9770 UnicodeString
->MaximumLength
= BufferSize
;
9771 UnicodeString
->Buffer
= Buffer
;
9774 #if defined(_AMD64_) || defined(_IA64_)
9780 RtlExtendedIntegerMultiply(
9781 _In_ LARGE_INTEGER Multiplicand
,
9782 _In_ LONG Multiplier
)
9785 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
9792 RtlExtendedLargeIntegerDivide(
9793 _In_ LARGE_INTEGER Dividend
,
9795 _Out_opt_ PULONG Remainder
)
9798 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
9800 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9806 #endif /* defined(_AMD64_) || defined(_IA64_) */
9809 #if defined(_AMD64_)
9811 #define MultiplyHigh __mulh
9812 #define UnsignedMultiplyHigh __umulh
9814 //DECLSPEC_DEPRECATED_DDK
9818 RtlExtendedMagicDivide(
9819 _In_ LARGE_INTEGER Dividend
,
9820 _In_ LARGE_INTEGER MagicDivisor
,
9821 _In_ CCHAR ShiftCount
)
9826 Pos
= (Dividend
.QuadPart
>= 0);
9827 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
9828 MagicDivisor
.QuadPart
);
9829 ret64
>>= ShiftCount
;
9830 ret
.QuadPart
= Pos
? ret64
: -(LONG64
)ret64
;
9835 //DECLSPEC_DEPRECATED_DDK
9840 _In_ LARGE_INTEGER Addend1
,
9841 _In_ LARGE_INTEGER Addend2
)
9844 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
9849 * RtlLargeIntegerAnd(
9850 * IN OUT LARGE_INTEGER Result,
9851 * IN LARGE_INTEGER Source,
9852 * IN LARGE_INTEGER Mask);
9854 #define RtlLargeIntegerAnd(Result, Source, Mask) \
9855 Result.QuadPart = Source.QuadPart & Mask.QuadPart
9857 //DECLSPEC_DEPRECATED_DDK
9861 RtlLargeIntegerArithmeticShift(
9862 _In_ LARGE_INTEGER LargeInteger
,
9863 _In_ CCHAR ShiftCount
)
9866 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
9871 * RtlLargeIntegerEqualTo(
9872 * IN LARGE_INTEGER Operand1,
9873 * IN LARGE_INTEGER Operand2);
9875 #define RtlLargeIntegerEqualTo(X,Y) \
9876 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
9880 RtlSecureZeroMemory(
9881 _Out_writes_bytes_all_(Size
) PVOID Pointer
,
9884 volatile char* vptr
= (volatile char*)Pointer
;
9885 #if defined(_M_AMD64)
9886 __stosb((PUCHAR
)vptr
, 0, Size
);
9888 char * endptr
= (char *)vptr
+ Size
;
9889 while (vptr
< endptr
) {
9896 #if defined(_M_AMD64)
9897 _Must_inspect_result_
9901 _In_ PRTL_BITMAP BitMapHeader
,
9902 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitPosition
)
9904 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
9907 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
9908 #endif /* defined(_M_AMD64) */
9910 #define RtlLargeIntegerGreaterThan(X,Y) ( \
9911 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
9912 ((X).HighPart > (Y).HighPart) \
9915 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
9916 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
9917 ((X).HighPart > (Y).HighPart) \
9920 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
9921 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
9924 #define RtlLargeIntegerLessThan(X,Y) ( \
9925 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
9926 ((X).HighPart < (Y).HighPart) \
9929 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
9930 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
9931 ((X).HighPart < (Y).HighPart) \
9934 #define RtlLargeIntegerGreaterThanZero(X) ( \
9935 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
9936 ((X).HighPart > 0 ) \
9939 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
9941 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
9943 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
9945 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
9947 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
9949 #endif /* !defined(MIDL_PASS) */
9951 /* Byte Swap Functions */
9952 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
9953 ((defined(_M_AMD64) || defined(_M_IA64)) \
9954 && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
9956 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
9957 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
9958 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
9964 #define RTL_VERIFY(exp) \
9966 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
9968 #define RTL_VERIFYMSG(msg, exp) \
9970 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
9972 #define RTL_SOFT_VERIFY(exp) \
9974 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
9976 #define RTL_SOFT_VERIFYMSG(msg, exp) \
9978 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
9980 #define ASSERT(exp) ((void)RTL_VERIFY(exp))
9981 #define ASSERTMSG(msg, exp) ((void)RTL_VERIFYMSG(msg, exp))
9983 #define RTL_SOFT_ASSERT(exp) ((void)RTL_SOFT_VERIFY(exp))
9984 #define RTL_SOFT_ASSERTMSG(msg, exp) ((void)RTL_SOFT_VERIFYMSG(msg, exp))
9986 #if defined(_MSC_VER)
9987 # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
9988 # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
9990 # define __assert_annotationA(msg) \
9991 DbgPrint("Assertion %s(%d): %s", __FILE__, __LINE__, msg)
9992 # define __assert_annotationW(msg) \
9993 DbgPrint("Assertion %s(%d): %S", __FILE__, __LINE__, msg)
9996 #define NT_VERIFY(exp) \
9998 (__assert_annotationA(#exp), \
9999 DbgRaiseAssertionFailure(), FALSE) : TRUE)
10001 #define NT_VERIFYMSG(msg, exp) \
10003 (__assert_annotationA(msg), \
10004 DbgRaiseAssertionFailure(), FALSE) : TRUE)
10006 #define NT_VERIFYMSGW(msg, exp) \
10008 (__assert_annotationW(msg), \
10009 DbgRaiseAssertionFailure(), FALSE) : TRUE)
10011 #define NT_ASSERT(exp) ((void)NT_VERIFY(exp))
10012 #define NT_ASSERTMSG(msg, exp) ((void)NT_VERIFYMSG(msg, exp))
10013 #define NT_ASSERTMSGW(msg, exp) ((void)NT_VERIFYMSGW(msg, exp))
10017 #define ASSERT(exp) ((VOID) 0)
10018 #define ASSERTMSG(msg, exp) ((VOID) 0)
10020 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
10021 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
10023 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
10024 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
10026 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
10027 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
10029 #define NT_ASSERT(exp) ((VOID)0)
10030 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
10031 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
10033 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
10034 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
10035 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
10039 #define InitializeListHead32(ListHead) (\
10040 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
10042 #if !defined(_WINBASE_)
10044 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
10048 InitializeSListHead(
10049 _Out_ PSLIST_HEADER SListHead
);
10055 InitializeSListHead(
10056 _Out_ PSLIST_HEADER SListHead
)
10058 #if defined(_IA64_)
10059 ULONG64 FeatureBits
;
10062 #if defined(_WIN64)
10063 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
10064 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
10067 RtlZeroMemory(SListHead
, sizeof(SLIST_HEADER
));
10068 #if defined(_IA64_)
10069 FeatureBits
= __getReg(CV_IA64_CPUID4
);
10070 if ((FeatureBits
& KF_16BYTE_INSTR
) != 0) {
10071 SListHead
->Header16
.HeaderType
= 1;
10072 SListHead
->Header16
.Init
= 1;
10079 #if defined(_WIN64)
10081 #define InterlockedPopEntrySList(Head) \
10082 ExpInterlockedPopEntrySList(Head)
10084 #define InterlockedPushEntrySList(Head, Entry) \
10085 ExpInterlockedPushEntrySList(Head, Entry)
10087 #define InterlockedFlushSList(Head) \
10088 ExpInterlockedFlushSList(Head)
10090 #define QueryDepthSList(Head) \
10091 ExQueryDepthSList(Head)
10093 #else /* !defined(_WIN64) */
10098 InterlockedPopEntrySList(
10099 _Inout_ PSLIST_HEADER ListHead
);
10104 InterlockedPushEntrySList(
10105 _Inout_ PSLIST_HEADER ListHead
,
10106 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
10108 #define InterlockedFlushSList(ListHead) \
10109 ExInterlockedFlushSList(ListHead)
10111 #define QueryDepthSList(Head) \
10112 ExQueryDepthSList(Head)
10114 #endif /* !defined(_WIN64) */
10116 #endif /* !defined(_WINBASE_) */
10118 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
10119 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
10120 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
10121 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
10122 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
10123 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
10124 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
10125 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
10126 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
10127 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
10128 (PCONTEXT_EX)(Context + 1), \
10132 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
10133 _In_ ULONG Version
);
10136 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
10137 _In_ ULONG Version
);
10139 #ifndef RtlIsNtDdiVersionAvailable
10140 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
10143 #ifndef RtlIsServicePackVersionInstalled
10144 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
10147 #define RtlInterlockedSetBits(Flags, Flag) \
10148 InterlockedOr((PLONG)(Flags), Flag)
10150 #define RtlInterlockedAndBits(Flags, Flag) \
10151 InterlockedAnd((PLONG)(Flags), Flag)
10153 #define RtlInterlockedClearBits(Flags, Flag) \
10154 RtlInterlockedAndBits(Flags, ~(Flag))
10156 #define RtlInterlockedXorBits(Flags, Flag) \
10157 InterlockedXor(Flags, Flag)
10159 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
10160 (VOID) RtlInterlockedSetBits(Flags, Flag)
10162 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
10163 (VOID) RtlInterlockedAndBits(Flags, Flag)
10165 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
10166 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
10169 /******************************************************************************
10170 * Kernel Functions *
10171 ******************************************************************************/
10177 _Out_ PRKEVENT Event
,
10178 _In_ EVENT_TYPE Type
,
10179 _In_ BOOLEAN State
);
10181 _IRQL_requires_max_(DISPATCH_LEVEL
)
10186 _Inout_ PRKEVENT Event
);
10188 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10190 #if defined(_NTDDK_) || defined(_NTIFS_)
10191 _Maybe_raises_SEH_exception_
10192 _IRQL_requires_max_(APC_LEVEL
)
10197 __in_data_source(USER_MODE
) _In_reads_bytes_(Length
) CONST VOID
*Address
, /* CONST is added */
10198 _In_ SIZE_T Length
,
10199 _In_ ULONG Alignment
);
10200 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
10202 _Maybe_raises_SEH_exception_
10203 _IRQL_requires_max_(APC_LEVEL
)
10208 __in_data_source(USER_MODE
) _Out_writes_bytes_(Length
) PVOID Address
,
10209 _In_ SIZE_T Length
,
10210 _In_ ULONG Alignment
);
10212 #if defined(SINGLE_GROUP_LEGACY_API)
10214 _IRQL_requires_min_(PASSIVE_LEVEL
)
10215 _IRQL_requires_max_(APC_LEVEL
)
10219 KeRevertToUserAffinityThread(VOID
);
10221 _IRQL_requires_min_(PASSIVE_LEVEL
)
10222 _IRQL_requires_max_(APC_LEVEL
)
10226 KeSetSystemAffinityThread(
10227 _In_ KAFFINITY Affinity
);
10232 KeSetTargetProcessorDpc(
10233 _Inout_ PRKDPC Dpc
,
10234 _In_ CCHAR Number
);
10239 KeQueryActiveProcessors(VOID
);
10240 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
10242 #if !defined(_M_AMD64)
10246 KeQueryInterruptTime(VOID
);
10252 _Out_ PLARGE_INTEGER CurrentTime
);
10253 #endif /* !_M_AMD64 */
10255 #if !defined(_X86_) && !defined(_M_ARM)
10256 _Requires_lock_not_held_(*SpinLock
)
10257 _Acquires_lock_(*SpinLock
)
10258 _IRQL_requires_max_(DISPATCH_LEVEL
)
10260 _IRQL_raises_(DISPATCH_LEVEL
)
10264 KeAcquireSpinLockRaiseToDpc(
10265 _Inout_ PKSPIN_LOCK SpinLock
);
10267 #define KeAcquireSpinLock(SpinLock, OldIrql) \
10268 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
10270 _Requires_lock_not_held_(*SpinLock
)
10271 _Acquires_lock_(*SpinLock
)
10272 _IRQL_requires_min_(DISPATCH_LEVEL
)
10276 KeAcquireSpinLockAtDpcLevel(
10277 _Inout_ PKSPIN_LOCK SpinLock
);
10279 _Requires_lock_held_(*SpinLock
)
10280 _Releases_lock_(*SpinLock
)
10281 _IRQL_requires_(DISPATCH_LEVEL
)
10286 _Inout_ PKSPIN_LOCK SpinLock
,
10287 _In_ _IRQL_restores_ KIRQL NewIrql
);
10289 _Requires_lock_held_(*SpinLock
)
10290 _Releases_lock_(*SpinLock
)
10291 _IRQL_requires_min_(DISPATCH_LEVEL
)
10295 KeReleaseSpinLockFromDpcLevel(
10296 _Inout_ PKSPIN_LOCK SpinLock
);
10297 #endif /* !_X86_ */
10299 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
10303 KeInitializeSpinLock(
10304 _Out_ PKSPIN_LOCK SpinLock
);
10308 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock
)
10310 /* Clear the lock */
10320 _In_ ULONG BugCheckCode
,
10321 _In_ ULONG_PTR BugCheckParameter1
,
10322 _In_ ULONG_PTR BugCheckParameter2
,
10323 _In_ ULONG_PTR BugCheckParameter3
,
10324 _In_ ULONG_PTR BugCheckParameter4
);
10326 _IRQL_requires_max_(DISPATCH_LEVEL
)
10333 _IRQL_requires_min_(PASSIVE_LEVEL
)
10334 _IRQL_requires_max_(APC_LEVEL
)
10338 KeDelayExecutionThread(
10339 _In_ KPROCESSOR_MODE WaitMode
,
10340 _In_ BOOLEAN Alertable
,
10341 _In_ PLARGE_INTEGER Interval
);
10343 _Must_inspect_result_
10347 KeDeregisterBugCheckCallback(
10348 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
10350 _Acquires_lock_(_Global_critical_region_
)
10351 _IRQL_requires_max_(APC_LEVEL
)
10355 KeEnterCriticalRegion(VOID
);
10357 _IRQL_requires_max_(DISPATCH_LEVEL
)
10361 KeInitializeDeviceQueue(
10362 _Out_ PKDEVICE_QUEUE DeviceQueue
);
10368 _Out_ __drv_aliasesMem PRKDPC Dpc
,
10369 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
10370 _In_opt_ __drv_aliasesMem PVOID DeferredContext
);
10376 _Out_ PRKMUTEX Mutex
,
10379 _IRQL_requires_max_(PASSIVE_LEVEL
)
10383 KeInitializeSemaphore(
10384 _Out_ PRKSEMAPHORE Semaphore
,
10388 _IRQL_requires_max_(DISPATCH_LEVEL
)
10393 _Out_ PKTIMER Timer
);
10395 _IRQL_requires_max_(DISPATCH_LEVEL
)
10399 KeInitializeTimerEx(
10400 _Out_ PKTIMER Timer
,
10401 _In_ TIMER_TYPE Type
);
10403 _IRQL_requires_(DISPATCH_LEVEL
)
10407 KeInsertByKeyDeviceQueue(
10408 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
10409 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
10410 _In_ ULONG SortKey
);
10412 _IRQL_requires_(DISPATCH_LEVEL
)
10416 KeInsertDeviceQueue(
10417 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
10418 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
10424 _Inout_ PRKDPC Dpc
,
10425 _In_opt_ PVOID SystemArgument1
,
10426 _In_opt_ PVOID SystemArgument2
);
10428 _Releases_lock_(_Global_critical_region_
)
10429 _IRQL_requires_max_(APC_LEVEL
)
10433 KeLeaveCriticalRegion(VOID
);
10438 KeQueryPerformanceCounter(
10439 _Out_opt_ PLARGE_INTEGER PerformanceFrequency
);
10441 _IRQL_requires_max_(PASSIVE_LEVEL
)
10445 KeQueryPriorityThread(
10446 _In_ PRKTHREAD Thread
);
10451 KeQueryTimeIncrement(VOID
);
10453 _IRQL_requires_max_(DISPATCH_LEVEL
)
10458 _In_ PRKEVENT Event
);
10460 _IRQL_requires_max_(DISPATCH_LEVEL
)
10465 _In_ PRKMUTEX Mutex
);
10467 _IRQL_requires_max_(DISPATCH_LEVEL
)
10471 KeReadStateSemaphore(
10472 _In_ PRKSEMAPHORE Semaphore
);
10474 _IRQL_requires_max_(DISPATCH_LEVEL
)
10479 _In_ PKTIMER Timer
);
10481 _Must_inspect_result_
10485 KeRegisterBugCheckCallback(
10486 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
10487 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
10488 _In_reads_bytes_opt_(Length
) PVOID Buffer
,
10490 _In_ PUCHAR Component
);
10492 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
10493 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
10498 _Inout_ PRKMUTEX Mutex
,
10499 _In_ BOOLEAN Wait
);
10501 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
10502 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
10506 KeReleaseSemaphore(
10507 _Inout_ PRKSEMAPHORE Semaphore
,
10508 _In_ KPRIORITY Increment
,
10509 _In_ LONG Adjustment
,
10510 _In_ _Literal_ BOOLEAN Wait
);
10512 _IRQL_requires_(DISPATCH_LEVEL
)
10514 PKDEVICE_QUEUE_ENTRY
10516 KeRemoveByKeyDeviceQueue(
10517 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
10518 _In_ ULONG SortKey
);
10520 _IRQL_requires_(DISPATCH_LEVEL
)
10522 PKDEVICE_QUEUE_ENTRY
10524 KeRemoveDeviceQueue(
10525 _Inout_ PKDEVICE_QUEUE DeviceQueue
);
10527 _IRQL_requires_max_(DISPATCH_LEVEL
)
10531 KeRemoveEntryDeviceQueue(
10532 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
10533 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
10535 _IRQL_requires_max_(HIGH_LEVEL
)
10540 _Inout_ PRKDPC Dpc
);
10542 _IRQL_requires_max_(DISPATCH_LEVEL
)
10547 _Inout_ PRKEVENT Event
);
10549 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
10550 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
10555 _Inout_ PRKEVENT Event
,
10556 _In_ KPRIORITY Increment
,
10557 _In_ _Literal_ BOOLEAN Wait
);
10562 KeSetImportanceDpc(
10563 _Inout_ PRKDPC Dpc
,
10564 _In_ KDPC_IMPORTANCE Importance
);
10566 _IRQL_requires_min_(PASSIVE_LEVEL
)
10567 _IRQL_requires_max_(DISPATCH_LEVEL
)
10571 KeSetPriorityThread(
10572 _Inout_ PKTHREAD Thread
,
10573 _In_ KPRIORITY Priority
);
10575 _IRQL_requires_max_(DISPATCH_LEVEL
)
10580 _Inout_ PKTIMER Timer
,
10581 _In_ LARGE_INTEGER DueTime
,
10582 _In_opt_ PKDPC Dpc
);
10584 _IRQL_requires_max_(DISPATCH_LEVEL
)
10589 _Inout_ PKTIMER Timer
,
10590 _In_ LARGE_INTEGER DueTime
,
10591 _In_ LONG Period OPTIONAL
,
10592 _In_opt_ PKDPC Dpc
);
10597 KeStallExecutionProcessor(
10598 _In_ ULONG MicroSeconds
);
10600 _IRQL_requires_max_(HIGH_LEVEL
)
10604 KeSynchronizeExecution(
10605 _Inout_ PKINTERRUPT Interrupt
,
10606 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
10607 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
);
10609 _IRQL_requires_min_(PASSIVE_LEVEL
)
10610 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
10611 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
10615 KeWaitForMultipleObjects(
10617 _In_reads_(Count
) PVOID Object
[],
10618 _In_
__drv_strictTypeMatch(__drv_typeConst
) WAIT_TYPE WaitType
,
10619 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
10620 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
10621 _In_ BOOLEAN Alertable
,
10622 _In_opt_ PLARGE_INTEGER Timeout
,
10623 _Out_opt_ PKWAIT_BLOCK WaitBlockArray
);
10625 #define KeWaitForMutexObject KeWaitForSingleObject
10627 _IRQL_requires_min_(PASSIVE_LEVEL
)
10628 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
10629 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
10633 KeWaitForSingleObject(
10634 _In_ _Points_to_data_ PVOID Object
,
10635 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
10636 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
10637 _In_ BOOLEAN Alertable
,
10638 _In_opt_ PLARGE_INTEGER Timeout
);
10640 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10642 #if (NTDDI_VERSION >= NTDDI_WINXP)
10644 _Requires_lock_not_held_(*LockHandle
)
10645 _Acquires_lock_(*LockHandle
)
10646 _Post_same_lock_(*SpinLock
, *LockHandle
)
10647 _IRQL_requires_max_(DISPATCH_LEVEL
)
10648 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
10649 _IRQL_raises_(DISPATCH_LEVEL
)
10650 _DECL_HAL_KE_IMPORT
10653 KeAcquireInStackQueuedSpinLock(
10654 _Inout_ PKSPIN_LOCK SpinLock
,
10655 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
10657 _Requires_lock_not_held_(*LockHandle
)
10658 _Acquires_lock_(*LockHandle
)
10659 _Post_same_lock_(*SpinLock
, *LockHandle
)
10660 _IRQL_requires_min_(DISPATCH_LEVEL
)
10664 KeAcquireInStackQueuedSpinLockAtDpcLevel(
10665 _Inout_ PKSPIN_LOCK SpinLock
,
10666 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
10668 _Requires_lock_not_held_(*Interrupt
->ActualLock
)
10669 _Acquires_lock_(*Interrupt
->ActualLock
)
10670 _IRQL_requires_max_(HIGH_LEVEL
)
10672 _IRQL_raises_(HIGH_LEVEL
)
10676 KeAcquireInterruptSpinLock(
10677 _Inout_ PKINTERRUPT Interrupt
);
10679 _IRQL_requires_min_(PASSIVE_LEVEL
)
10680 _IRQL_requires_max_(DISPATCH_LEVEL
)
10684 KeAreApcsDisabled(VOID
);
10689 KeGetRecommendedSharedDataAlignment(VOID
);
10691 _IRQL_requires_max_(PASSIVE_LEVEL
)
10695 KeQueryRuntimeThread(
10696 _In_ PKTHREAD Thread
,
10697 _Out_ PULONG UserTime
);
10699 _Requires_lock_held_(*LockHandle
)
10700 _Releases_lock_(*LockHandle
)
10701 _IRQL_requires_(DISPATCH_LEVEL
)
10705 KeReleaseInStackQueuedSpinLockFromDpcLevel(
10706 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
10708 _Requires_lock_held_(*Interrupt
->ActualLock
)
10709 _Releases_lock_(*Interrupt
->ActualLock
)
10710 _IRQL_requires_(HIGH_LEVEL
)
10714 KeReleaseInterruptSpinLock(
10715 _Inout_ PKINTERRUPT Interrupt
,
10716 _In_ _IRQL_restores_ KIRQL OldIrql
);
10718 _IRQL_requires_(DISPATCH_LEVEL
)
10720 PKDEVICE_QUEUE_ENTRY
10722 KeRemoveByKeyDeviceQueueIfBusy(
10723 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
10724 _In_ ULONG SortKey
);
10726 _Requires_lock_held_(*LockHandle
)
10727 _Releases_lock_(*LockHandle
)
10728 _IRQL_requires_(DISPATCH_LEVEL
)
10729 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
10730 _DECL_HAL_KE_IMPORT
10733 KeReleaseInStackQueuedSpinLock(
10734 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
10736 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10738 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
10740 _Must_inspect_result_
10744 KeDeregisterBugCheckReasonCallback(
10745 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
10747 _Must_inspect_result_
10751 KeRegisterBugCheckReasonCallback(
10752 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
10753 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
10754 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
10755 _In_ PUCHAR Component
);
10757 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
10759 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
10760 _IRQL_requires_max_(APC_LEVEL
)
10764 KeFlushQueuedDpcs(VOID
);
10765 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
10766 #if (NTDDI_VERSION >= NTDDI_WS03)
10768 _IRQL_requires_max_(APC_LEVEL
)
10772 KeRegisterNmiCallback(
10773 _In_ PNMI_CALLBACK CallbackRoutine
,
10774 _In_opt_ PVOID Context
);
10776 _IRQL_requires_max_(APC_LEVEL
)
10780 KeDeregisterNmiCallback(
10781 _In_ PVOID Handle
);
10786 KeInitializeThreadedDpc(
10788 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
10789 _In_opt_ PVOID DeferredContext
);
10791 _IRQL_requires_min_(PASSIVE_LEVEL
)
10792 _IRQL_requires_max_(IPI_LEVEL
-1)
10797 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction
,
10798 _In_ ULONG_PTR Context
);
10800 _Requires_lock_not_held_(*SpinLock
)
10801 _Acquires_lock_(*SpinLock
)
10802 _IRQL_requires_max_(DISPATCH_LEVEL
)
10807 KeAcquireSpinLockForDpc(
10808 _Inout_ PKSPIN_LOCK SpinLock
);
10810 _Requires_lock_held_(*SpinLock
)
10811 _Releases_lock_(*SpinLock
)
10812 _IRQL_requires_(DISPATCH_LEVEL
)
10816 KeReleaseSpinLockForDpc(
10817 _Inout_ PKSPIN_LOCK SpinLock
,
10818 _In_ _IRQL_restores_ KIRQL OldIrql
);
10820 _Must_inspect_result_
10825 _In_ PKSPIN_LOCK SpinLock
);
10827 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
10828 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10830 _Must_inspect_result_
10831 _IRQL_requires_min_(DISPATCH_LEVEL
)
10832 _Post_satisfies_(return == 1 || return == 0)
10836 KeTryToAcquireSpinLockAtDpcLevel(
10837 _Inout_
_Requires_lock_not_held_(*_Curr_
)
10838 _When_(return!=0, _Acquires_lock_(*_Curr_
))
10839 PKSPIN_LOCK SpinLock
);
10841 _IRQL_requires_min_(PASSIVE_LEVEL
)
10842 _IRQL_requires_max_(DISPATCH_LEVEL
)
10846 KeAreAllApcsDisabled(VOID
);
10848 _Acquires_lock_(_Global_critical_region_
)
10849 _Requires_lock_not_held_(*Mutex
)
10850 _Acquires_lock_(*Mutex
)
10851 _IRQL_requires_max_(APC_LEVEL
)
10852 _IRQL_requires_min_(PASSIVE_LEVEL
)
10856 KeAcquireGuardedMutex(
10857 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
10859 _Requires_lock_not_held_(*FastMutex
)
10860 _Acquires_lock_(*FastMutex
)
10861 _IRQL_requires_max_(APC_LEVEL
)
10862 _IRQL_requires_min_(PASSIVE_LEVEL
)
10866 KeAcquireGuardedMutexUnsafe(
10867 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
10869 _Acquires_lock_(_Global_critical_region_
)
10870 _IRQL_requires_max_(APC_LEVEL
)
10874 KeEnterGuardedRegion(VOID
);
10876 _Releases_lock_(_Global_critical_region_
)
10877 _IRQL_requires_max_(APC_LEVEL
)
10881 KeLeaveGuardedRegion(VOID
);
10883 _IRQL_requires_max_(APC_LEVEL
)
10884 _IRQL_requires_min_(PASSIVE_LEVEL
)
10888 KeInitializeGuardedMutex(
10889 _Out_ PKGUARDED_MUTEX GuardedMutex
);
10891 _Requires_lock_held_(*FastMutex
)
10892 _Releases_lock_(*FastMutex
)
10893 _IRQL_requires_max_(APC_LEVEL
)
10897 KeReleaseGuardedMutexUnsafe(
10898 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
10900 _Releases_lock_(_Global_critical_region_
)
10901 _Requires_lock_held_(*Mutex
)
10902 _Releases_lock_(*Mutex
)
10903 _IRQL_requires_max_(APC_LEVEL
)
10907 KeReleaseGuardedMutex(
10908 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
10910 _Must_inspect_result_
10911 _Success_(return != FALSE
)
10912 _IRQL_requires_max_(APC_LEVEL
)
10913 _Post_satisfies_(return == 1 || return == 0)
10917 KeTryToAcquireGuardedMutex(
10918 _When_ (return, _Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)) _Acquires_lock_(_Global_critical_region_
)
10919 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
10920 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
10922 #if (NTDDI_VERSION >= NTDDI_VISTA)
10923 _Requires_lock_not_held_(*LockHandle
)
10924 _Acquires_lock_(*LockHandle
)
10925 _Post_same_lock_(*SpinLock
, *LockHandle
)
10926 _IRQL_requires_max_(DISPATCH_LEVEL
)
10927 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
10931 KeAcquireInStackQueuedSpinLockForDpc(
10932 _Inout_ PKSPIN_LOCK SpinLock
,
10933 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
10935 _Requires_lock_held_(*LockHandle
)
10936 _Releases_lock_(*LockHandle
)
10937 _IRQL_requires_(DISPATCH_LEVEL
)
10938 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
10942 KeReleaseInStackQueuedSpinLockForDpc(
10943 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
10945 _IRQL_requires_(DISPATCH_LEVEL
)
10949 KeQueryDpcWatchdogInformation(
10950 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
10951 #if defined(SINGLE_GROUP_LEGACY_API)
10953 _IRQL_requires_min_(PASSIVE_LEVEL
)
10954 _IRQL_requires_max_(APC_LEVEL
)
10958 KeSetSystemAffinityThreadEx(
10959 _In_ KAFFINITY Affinity
);
10961 _IRQL_requires_min_(PASSIVE_LEVEL
)
10962 _IRQL_requires_max_(APC_LEVEL
)
10966 KeRevertToUserAffinityThreadEx(
10967 _In_ KAFFINITY Affinity
);
10972 KeQueryActiveProcessorCount(
10973 _Out_opt_ PKAFFINITY ActiveProcessors
);
10978 KeQueryMaximumProcessorCount(VOID
);
10979 #endif /* SINGLE_GROUP_LEGACY_API */
10981 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10983 #if (NTDDI_VERSION >= NTDDI_WS08)
10985 _IRQL_requires_max_(APC_LEVEL
)
10988 KeRegisterProcessorChangeCallback(
10989 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
10990 _In_opt_ PVOID CallbackContext
,
10993 _IRQL_requires_max_(APC_LEVEL
)
10996 KeDeregisterProcessorChangeCallback(
10997 _In_ PVOID CallbackHandle
);
10999 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
11000 #if (NTDDI_VERSION >= NTDDI_WIN7)
11002 _IRQL_requires_max_(DISPATCH_LEVEL
)
11003 _IRQL_requires_min_(PASSIVE_LEVEL
)
11004 _IRQL_requires_same_
11007 KeQueryTotalCycleTimeProcess(
11008 _Inout_ PKPROCESS Process
,
11009 _Out_ PULONG64 CycleTimeStamp
);
11011 _IRQL_requires_max_(APC_LEVEL
)
11012 _IRQL_requires_min_(PASSIVE_LEVEL
)
11013 _IRQL_requires_same_
11016 KeQueryTotalCycleTimeThread(
11017 _Inout_ PKTHREAD Thread
,
11018 _Out_ PULONG64 CycleTimeStamp
);
11020 _Must_inspect_result_
11024 KeSetTargetProcessorDpcEx(
11026 _In_ PPROCESSOR_NUMBER ProcNumber
);
11028 _IRQL_requires_min_(PASSIVE_LEVEL
)
11029 _IRQL_requires_max_(APC_LEVEL
)
11033 KeSetSystemGroupAffinityThread(
11034 _In_ PGROUP_AFFINITY Affinity
,
11035 _Out_opt_ PGROUP_AFFINITY PreviousAffinity
);
11037 _IRQL_requires_min_(PASSIVE_LEVEL
)
11038 _IRQL_requires_max_(APC_LEVEL
)
11042 KeRevertToUserGroupAffinityThread(
11043 _In_ PGROUP_AFFINITY PreviousAffinity
);
11045 _IRQL_requires_max_(DISPATCH_LEVEL
)
11049 KeSetCoalescableTimer(
11050 _Inout_ PKTIMER Timer
,
11051 _In_ LARGE_INTEGER DueTime
,
11053 _In_ ULONG TolerableDelay
,
11054 _In_opt_ PKDPC Dpc
);
11059 KeQueryUnbiasedInterruptTime(VOID
);
11064 KeQueryActiveProcessorCountEx(
11065 _In_ USHORT GroupNumber
);
11070 KeQueryMaximumProcessorCountEx(
11071 _In_ USHORT GroupNumber
);
11076 KeQueryActiveGroupCount(VOID
);
11081 KeQueryMaximumGroupCount(VOID
);
11086 KeQueryGroupAffinity(
11087 _In_ USHORT GroupNumber
);
11092 KeGetCurrentProcessorNumberEx(
11093 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
11098 KeQueryNodeActiveAffinity(
11099 _In_ USHORT NodeNumber
,
11100 _Out_opt_ PGROUP_AFFINITY Affinity
,
11101 _Out_opt_ PUSHORT Count
);
11106 KeQueryNodeMaximumProcessorCount(
11107 _In_ USHORT NodeNumber
);
11112 KeQueryHighestNodeNumber(VOID
);
11117 KeGetCurrentNodeNumber(VOID
);
11119 _IRQL_requires_max_(DISPATCH_LEVEL
)
11123 KeQueryLogicalProcessorRelationship(
11124 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
11125 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
11126 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
11127 _Inout_ PULONG Length
);
11129 _Must_inspect_result_
11130 _IRQL_requires_max_(DISPATCH_LEVEL
)
11132 _When_(return==0, _Kernel_float_saved_
)
11136 KeSaveExtendedProcessorState(
11138 _Out_
_Requires_lock_not_held_(*_Curr_
)
11139 _When_(return==0, _Acquires_lock_(*_Curr_
))
11140 PXSTATE_SAVE XStateSave
);
11142 _Kernel_float_restored_
11146 KeRestoreExtendedProcessorState(
11147 _In_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
11148 PXSTATE_SAVE XStateSave
);
11152 KeGetProcessorNumberFromIndex(
11153 _In_ ULONG ProcIndex
,
11154 _Out_ PPROCESSOR_NUMBER ProcNumber
);
11158 KeGetProcessorIndexFromNumber(
11159 _In_ PPROCESSOR_NUMBER ProcNumber
);
11160 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
11161 #if !defined(_IA64_)
11165 KeFlushWriteBuffer(VOID
);
11169 * KeInitializeCallbackRecord(
11170 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
11172 #define KeInitializeCallbackRecord(CallbackRecord) \
11173 CallbackRecord->State = BufferEmpty;
11175 #if defined(_PREFAST_)
11177 void __PREfastPagedCode(void);
11178 void __PREfastPagedCodeLocked(void);
11179 #define PAGED_CODE() __PREfastPagedCode();
11180 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked();
11184 #if (NTDDI_VERSION >= NTDDI_VISTA)
11185 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
11187 #define PAGED_ASSERT( exp ) ASSERT( exp )
11190 #define PAGED_CODE() { \
11191 if (KeGetCurrentIrql() > APC_LEVEL) { \
11192 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
11193 PAGED_ASSERT(FALSE); \
11197 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
11201 #define PAGED_CODE() NOP_FUNCTION;
11202 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
11206 /******************************************************************************
11207 * Memory manager Functions *
11208 ******************************************************************************/
11209 /* Alignment Macros */
11210 #define ALIGN_DOWN_BY(size, align) \
11211 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
11213 #define ALIGN_UP_BY(size, align) \
11214 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
11216 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
11217 ((PVOID)ALIGN_DOWN_BY(ptr, align))
11219 #define ALIGN_UP_POINTER_BY(ptr, align) \
11220 ((PVOID)ALIGN_UP_BY(ptr, align))
11222 #define ALIGN_DOWN(size, type) \
11223 ALIGN_DOWN_BY(size, sizeof(type))
11225 #define ALIGN_UP(size, type) \
11226 ALIGN_UP_BY(size, sizeof(type))
11228 #define ALIGN_DOWN_POINTER(ptr, type) \
11229 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
11231 #define ALIGN_UP_POINTER(ptr, type) \
11232 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
11234 #ifndef FIELD_OFFSET
11235 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
11239 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
11242 #define POOL_TAGGING 1
11245 #define IF_DEBUG if (TRUE)
11247 #define IF_DEBUG if (FALSE)
11254 #define BYTE_OFFSET(Va) \
11255 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
11261 #define BYTES_TO_PAGES(Size) \
11262 (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
11268 #define PAGE_ALIGN(Va) \
11269 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
11273 * IN ULONG_PTR Size)
11275 #define ROUND_TO_PAGES(Size) \
11276 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
11279 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
11283 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
11284 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
11285 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
11287 #define COMPUTE_PAGES_SPANNED(Va, Size) \
11288 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
11292 * MmGetMdlByteCount(
11295 #define MmGetMdlByteCount(_Mdl) \
11296 ((_Mdl)->ByteCount)
11300 * MmGetMdlByteOffset(
11303 #define MmGetMdlByteOffset(_Mdl) \
11304 ((_Mdl)->ByteOffset)
11306 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
11310 * MmGetMdlPfnArray(
11313 #define MmGetMdlPfnArray(_Mdl) \
11314 ((PPFN_NUMBER) ((_Mdl) + 1))
11318 * MmGetMdlVirtualAddress(
11321 #define MmGetMdlVirtualAddress(_Mdl) \
11322 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
11324 #define MmGetProcedureAddress(Address) (Address)
11325 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
11327 /* PVOID MmGetSystemAddressForMdl(
11330 #define MmGetSystemAddressForMdl(Mdl) \
11331 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
11332 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11333 ((Mdl)->MappedSystemVa) : \
11334 (MmMapLockedPages((Mdl), KernelMode)))
11337 * MmGetSystemAddressForMdlSafe(
11339 * IN MM_PAGE_PRIORITY Priority)
11341 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
11342 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
11343 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11344 (_Mdl)->MappedSystemVa : \
11345 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
11346 KernelMode, MmCached, NULL, FALSE, (_Priority)))
11351 * IN PMDL MemoryDescriptorList,
11353 * IN SIZE_T Length)
11355 #define MmInitializeMdl(_MemoryDescriptorList, \
11359 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
11360 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
11361 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
11362 (_MemoryDescriptorList)->MdlFlags = 0; \
11363 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
11364 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
11365 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
11370 * MmPrepareMdlForReuse(
11373 #define MmPrepareMdlForReuse(_Mdl) \
11375 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
11376 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
11377 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
11378 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
11379 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
11383 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11384 _Must_inspect_result_
11385 _IRQL_requires_max_(DISPATCH_LEVEL
)
11386 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11390 MmAllocateContiguousMemory(
11391 _In_ SIZE_T NumberOfBytes
,
11392 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
);
11394 _Must_inspect_result_
11395 _IRQL_requires_max_(DISPATCH_LEVEL
)
11396 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11400 MmAllocateContiguousMemorySpecifyCache(
11401 _In_ SIZE_T NumberOfBytes
,
11402 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
11403 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
11404 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
11405 _In_ MEMORY_CACHING_TYPE CacheType
);
11407 _Must_inspect_result_
11408 _IRQL_requires_max_(DISPATCH_LEVEL
)
11412 MmAllocatePagesForMdl(
11413 _In_ PHYSICAL_ADDRESS LowAddress
,
11414 _In_ PHYSICAL_ADDRESS HighAddress
,
11415 _In_ PHYSICAL_ADDRESS SkipBytes
,
11416 _In_ SIZE_T TotalBytes
);
11418 _IRQL_requires_max_(DISPATCH_LEVEL
)
11422 MmBuildMdlForNonPagedPool(
11423 _Inout_ PMDLX MemoryDescriptorList
);
11425 //DECLSPEC_DEPRECATED_DDK
11430 _Out_writes_bytes_opt_ (sizeof (MDL
) + (sizeof (PFN_NUMBER
) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base
, Length
)))
11431 PMDL MemoryDescriptorList
,
11432 _In_reads_bytes_opt_ (Length
) PVOID Base
,
11433 _In_ SIZE_T Length
);
11435 _IRQL_requires_max_(DISPATCH_LEVEL
)
11439 MmFreeContiguousMemory(
11440 _In_ PVOID BaseAddress
);
11442 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11446 MmFreeContiguousMemorySpecifyCache(
11447 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
11448 _In_ SIZE_T NumberOfBytes
,
11449 _In_ MEMORY_CACHING_TYPE CacheType
);
11451 _IRQL_requires_max_(DISPATCH_LEVEL
)
11455 MmFreePagesFromMdl(
11456 _Inout_ PMDLX MemoryDescriptorList
);
11458 _IRQL_requires_max_(PASSIVE_LEVEL
)
11462 MmGetSystemRoutineAddress(
11463 _In_ PUNICODE_STRING SystemRoutineName
);
11468 MmIsDriverVerifying(
11469 _In_
struct _DRIVER_OBJECT
*DriverObject
);
11471 _Must_inspect_result_
11472 _IRQL_requires_max_(APC_LEVEL
)
11476 MmLockPagableDataSection(
11477 _In_ PVOID AddressWithinSection
);
11479 _Must_inspect_result_
11480 _IRQL_requires_max_(DISPATCH_LEVEL
)
11481 _Out_writes_bytes_opt_ (NumberOfBytes
)
11486 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
11487 _In_ SIZE_T NumberOfBytes
,
11488 _In_ MEMORY_CACHING_TYPE CacheType
);
11490 _Must_inspect_result_
11491 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
11492 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
))
11497 _Inout_ PMDL MemoryDescriptorList
,
11498 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
11499 KPROCESSOR_MODE AccessMode
);
11501 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
11502 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
11503 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
) _Post_notnull_
)
11504 _At_(MemoryDescriptorList
->MappedSystemVa
, _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
11505 _Must_inspect_result_
11506 _Success_(return != NULL
)
11510 MmMapLockedPagesSpecifyCache(
11511 _Inout_ PMDLX MemoryDescriptorList
,
11512 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
11513 KPROCESSOR_MODE AccessMode
,
11514 _In_
__drv_strictTypeMatch(__drv_typeCond
) MEMORY_CACHING_TYPE CacheType
,
11515 _In_opt_ PVOID BaseAddress
,
11516 _In_ ULONG BugCheckOnFailure
,
11517 _In_ MM_PAGE_PRIORITY Priority
);
11519 _IRQL_requires_max_(APC_LEVEL
)
11523 MmPageEntireDriver(
11524 _In_ PVOID AddressWithinSection
);
11526 _IRQL_requires_max_(DISPATCH_LEVEL
)
11527 _At_(MemoryDescriptorList
->StartVa
+ MemoryDescriptorList
->ByteOffset
,
11528 _Field_size_bytes_opt_(MemoryDescriptorList
->ByteCount
))
11532 MmProbeAndLockPages(
11533 _Inout_ PMDLX MemoryDescriptorList
,
11534 _In_ KPROCESSOR_MODE AccessMode
,
11535 _In_ LOCK_OPERATION Operation
);
11540 MmQuerySystemSize(VOID
);
11542 _IRQL_requires_max_(APC_LEVEL
)
11546 MmResetDriverPaging(
11547 _In_ PVOID AddressWithinSection
);
11553 _In_reads_bytes_opt_ (Length
) PVOID Base
,
11554 _In_ SIZE_T Length
);
11556 _IRQL_requires_max_(DISPATCH_LEVEL
)
11560 MmUnlockPagableImageSection(
11561 _In_ PVOID ImageSectionHandle
);
11563 _IRQL_requires_max_(DISPATCH_LEVEL
)
11568 _Inout_ PMDLX MemoryDescriptorList
);
11570 _IRQL_requires_max_(DISPATCH_LEVEL
)
11575 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
11576 _In_ SIZE_T NumberOfBytes
);
11578 _IRQL_requires_max_ (APC_LEVEL
)
11582 MmProbeAndLockProcessPages(
11583 _Inout_ PMDL MemoryDescriptorList
,
11584 _In_ PEPROCESS Process
,
11585 _In_ KPROCESSOR_MODE AccessMode
,
11586 _In_ LOCK_OPERATION Operation
);
11588 _IRQL_requires_max_(DISPATCH_LEVEL
)
11592 MmUnmapLockedPages(
11593 _In_ PVOID BaseAddress
,
11594 _Inout_ PMDL MemoryDescriptorList
);
11596 _Must_inspect_result_
11597 _IRQL_requires_max_(DISPATCH_LEVEL
)
11598 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11602 MmAllocateContiguousMemorySpecifyCacheNode(
11603 _In_ SIZE_T NumberOfBytes
,
11604 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
11605 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
11606 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
11607 _In_ MEMORY_CACHING_TYPE CacheType
,
11608 _In_ NODE_REQUIREMENT PreferredNode
);
11610 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11612 #if (NTDDI_VERSION >= NTDDI_WINXP)
11614 _IRQL_requires_max_(DISPATCH_LEVEL
)
11620 _In_ ULONG NumberOfBytes
);
11622 _Must_inspect_result_
11623 _IRQL_requires_max_(APC_LEVEL
)
11624 _When_ (return != NULL
, _Out_writes_bytes_opt_ (NumberOfBytes
))
11628 MmAllocateMappingAddress(
11629 _In_ SIZE_T NumberOfBytes
,
11630 _In_ ULONG PoolTag
);
11632 _IRQL_requires_max_(APC_LEVEL
)
11636 MmFreeMappingAddress(
11637 _In_ PVOID BaseAddress
,
11638 _In_ ULONG PoolTag
);
11640 _IRQL_requires_max_ (APC_LEVEL
)
11644 MmIsVerifierEnabled(
11645 _Out_ PULONG VerifierFlags
);
11647 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
11648 _IRQL_requires_max_(DISPATCH_LEVEL
)
11649 _At_(MemoryDescriptorList
->MappedSystemVa
+ MemoryDescriptorList
->ByteOffset
,
11650 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
11651 _Must_inspect_result_
11652 _Success_(return != NULL
)
11656 MmMapLockedPagesWithReservedMapping(
11657 _In_ PVOID MappingAddress
,
11658 _In_ ULONG PoolTag
,
11659 _Inout_ PMDLX MemoryDescriptorList
,
11660 _In_
__drv_strictTypeMatch(__drv_typeCond
)
11661 MEMORY_CACHING_TYPE CacheType
);
11663 _Must_inspect_result_
11664 _IRQL_requires_max_(DISPATCH_LEVEL
)
11668 MmProtectMdlSystemAddress(
11669 _In_ PMDLX MemoryDescriptorList
,
11670 _In_ ULONG NewProtect
);
11672 _IRQL_requires_max_(DISPATCH_LEVEL
)
11676 MmUnmapReservedMapping(
11677 _In_ PVOID BaseAddress
,
11678 _In_ ULONG PoolTag
,
11679 _Inout_ PMDLX MemoryDescriptorList
);
11681 _IRQL_requires_max_ (APC_LEVEL
)
11685 MmAddVerifierThunks(
11686 _In_reads_bytes_ (ThunkBufferSize
) PVOID ThunkBuffer
,
11687 _In_ ULONG ThunkBufferSize
);
11689 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
11690 #if (NTDDI_VERSION >= NTDDI_WS03)
11691 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11696 _In_ PHYSICAL_ADDRESS StartAddress
,
11697 _In_ SIZE_T NumberOfBytes
);
11699 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
11700 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
11701 _Must_inspect_result_
11702 _IRQL_requires_max_ (DISPATCH_LEVEL
)
11706 MmAllocatePagesForMdlEx(
11707 _In_ PHYSICAL_ADDRESS LowAddress
,
11708 _In_ PHYSICAL_ADDRESS HighAddress
,
11709 _In_ PHYSICAL_ADDRESS SkipBytes
,
11710 _In_ SIZE_T TotalBytes
,
11711 _In_ MEMORY_CACHING_TYPE CacheType
,
11715 #if (NTDDI_VERSION >= NTDDI_VISTA)
11716 _IRQL_requires_max_ (APC_LEVEL
)
11720 MmIsDriverVerifyingByAddress(
11721 _In_ PVOID AddressWithinSection
);
11722 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11724 /******************************************************************************
11725 * Security Manager Functions *
11726 ******************************************************************************/
11728 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11729 _IRQL_requires_max_(PASSIVE_LEVEL
)
11734 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11735 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
11736 _In_ BOOLEAN SubjectContextLocked
,
11737 _In_ ACCESS_MASK DesiredAccess
,
11738 _In_ ACCESS_MASK PreviouslyGrantedAccess
,
11739 _Outptr_opt_ PPRIVILEGE_SET
*Privileges
,
11740 _In_ PGENERIC_MAPPING GenericMapping
,
11741 _In_ KPROCESSOR_MODE AccessMode
,
11742 _Out_ PACCESS_MASK GrantedAccess
,
11743 _Out_ PNTSTATUS AccessStatus
);
11745 _IRQL_requires_max_(PASSIVE_LEVEL
)
11750 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
11751 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
11752 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
11753 _In_ BOOLEAN IsDirectoryObject
,
11754 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
11755 _In_ PGENERIC_MAPPING GenericMapping
,
11756 _In_ POOL_TYPE PoolType
);
11761 SeAssignSecurityEx(
11762 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
11763 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
11764 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
11765 _In_opt_ GUID
*ObjectType
,
11766 _In_ BOOLEAN IsDirectoryObject
,
11767 _In_ ULONG AutoInheritFlags
,
11768 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
11769 _In_ PGENERIC_MAPPING GenericMapping
,
11770 _In_ POOL_TYPE PoolType
);
11772 _IRQL_requires_max_(PASSIVE_LEVEL
)
11776 SeDeassignSecurity(
11777 _Inout_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
11779 _IRQL_requires_max_(PASSIVE_LEVEL
)
11783 SeValidSecurityDescriptor(
11785 _In_reads_bytes_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
);
11790 SeObjectCreateSaclAccessBits(
11791 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
11796 SeReleaseSubjectContext(
11797 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11802 SeUnlockSubjectContext(
11803 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11808 SeCaptureSubjectContext(
11809 _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11814 SeLockSubjectContext(
11815 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11818 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11820 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
11822 _At_(AuditParameters
->ParameterCount
, _Const_
)
11825 SeSetAuditParameter(
11826 _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters
,
11827 _In_ SE_ADT_PARAMETER_TYPE Type
,
11828 _In_range_(<,SE_MAX_AUDIT_PARAMETERS
) ULONG Index
,
11829 _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE"))
11834 SeReportSecurityEvent(
11836 _In_ PUNICODE_STRING SourceName
,
11837 _In_opt_ PSID UserSid
,
11838 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters
);
11840 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
11842 #if (NTDDI_VERSION >= NTDDI_VISTA)
11846 SeComputeAutoInheritByObjectType(
11847 _In_ PVOID ObjectType
,
11848 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11849 _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor
);
11851 #ifdef SE_NTFS_WORLD_CACHE
11855 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11856 _In_ PGENERIC_MAPPING GenericMapping
,
11857 _Out_ PACCESS_MASK GrantedAccess
);
11858 #endif /* SE_NTFS_WORLD_CACHE */
11859 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11860 /******************************************************************************
11861 * Configuration Manager Functions *
11862 ******************************************************************************/
11864 #if (NTDDI_VERSION >= NTDDI_WINXP)
11865 _IRQL_requires_max_(APC_LEVEL
)
11869 CmRegisterCallback(
11870 _In_ PEX_CALLBACK_FUNCTION Function
,
11871 _In_opt_ PVOID Context
,
11872 _Out_ PLARGE_INTEGER Cookie
);
11874 _IRQL_requires_max_(APC_LEVEL
)
11878 CmUnRegisterCallback(
11879 _In_ LARGE_INTEGER Cookie
);
11882 #if (NTDDI_VERSION >= NTDDI_VISTA)
11884 _IRQL_requires_max_(APC_LEVEL
)
11888 CmRegisterCallbackEx(
11889 _In_ PEX_CALLBACK_FUNCTION Function
,
11890 _In_ PCUNICODE_STRING Altitude
,
11892 _In_opt_ PVOID Context
,
11893 _Out_ PLARGE_INTEGER Cookie
,
11894 _Reserved_ PVOID Reserved
);
11896 _IRQL_requires_max_(APC_LEVEL
)
11900 CmGetCallbackVersion(
11901 _Out_opt_ PULONG Major
,
11902 _Out_opt_ PULONG Minor
);
11904 _IRQL_requires_max_(APC_LEVEL
)
11908 CmSetCallbackObjectContext(
11909 _Inout_ PVOID Object
,
11910 _In_ PLARGE_INTEGER Cookie
,
11911 _In_ PVOID NewContext
,
11912 _Out_opt_ PVOID
*OldContext
);
11914 _IRQL_requires_max_(APC_LEVEL
)
11918 CmCallbackGetKeyObjectID(
11919 _In_ PLARGE_INTEGER Cookie
,
11921 _Out_opt_ PULONG_PTR ObjectID
,
11922 _Outptr_opt_ PCUNICODE_STRING
*ObjectName
);
11924 _IRQL_requires_max_(APC_LEVEL
)
11928 CmGetBoundTransaction(
11929 _In_ PLARGE_INTEGER Cookie
,
11930 _In_ PVOID Object
);
11932 #endif // NTDDI_VERSION >= NTDDI_VISTA
11935 /******************************************************************************
11936 * I/O Manager Functions *
11937 ******************************************************************************/
11941 * IoAcquireRemoveLock(
11942 * IN PIO_REMOVE_LOCK RemoveLock,
11943 * IN OPTIONAL PVOID Tag)
11946 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11947 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
11949 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11950 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
11955 * IoAdjustPagingPathCount(
11957 * IN BOOLEAN Increment)
11959 #define IoAdjustPagingPathCount(_Count, \
11964 InterlockedIncrement(_Count); \
11968 InterlockedDecrement(_Count); \
11972 #if !defined(_M_AMD64)
11976 READ_PORT_BUFFER_UCHAR(
11984 READ_PORT_BUFFER_ULONG(
11992 READ_PORT_BUFFER_USHORT(
12018 READ_REGISTER_BUFFER_UCHAR(
12019 IN PUCHAR Register
,
12026 READ_REGISTER_BUFFER_ULONG(
12027 IN PULONG Register
,
12034 READ_REGISTER_BUFFER_USHORT(
12035 IN PUSHORT Register
,
12042 READ_REGISTER_UCHAR(
12043 IN PUCHAR Register
);
12048 READ_REGISTER_ULONG(
12049 IN PULONG Register
);
12054 READ_REGISTER_USHORT(
12055 IN PUSHORT Register
);
12060 WRITE_PORT_BUFFER_UCHAR(
12068 WRITE_PORT_BUFFER_ULONG(
12076 WRITE_PORT_BUFFER_USHORT(
12105 WRITE_REGISTER_BUFFER_UCHAR(
12106 IN PUCHAR Register
,
12113 WRITE_REGISTER_BUFFER_ULONG(
12114 IN PULONG Register
,
12121 WRITE_REGISTER_BUFFER_USHORT(
12122 IN PUSHORT Register
,
12129 WRITE_REGISTER_UCHAR(
12130 IN PUCHAR Register
,
12136 WRITE_REGISTER_ULONG(
12137 IN PULONG Register
,
12143 WRITE_REGISTER_USHORT(
12144 IN PUSHORT Register
,
12151 READ_PORT_BUFFER_UCHAR(
12156 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12161 READ_PORT_BUFFER_ULONG(
12166 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12171 READ_PORT_BUFFER_USHORT(
12176 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12184 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
12192 return __indword((USHORT
)(ULONG_PTR
)Port
);
12200 return __inword((USHORT
)(ULONG_PTR
)Port
);
12205 READ_REGISTER_BUFFER_UCHAR(
12206 IN PUCHAR Register
,
12210 __movsb(Register
, Buffer
, Count
);
12215 READ_REGISTER_BUFFER_ULONG(
12216 IN PULONG Register
,
12220 __movsd(Register
, Buffer
, Count
);
12225 READ_REGISTER_BUFFER_USHORT(
12226 IN PUSHORT Register
,
12230 __movsw(Register
, Buffer
, Count
);
12235 READ_REGISTER_UCHAR(
12236 IN
volatile UCHAR
*Register
)
12243 READ_REGISTER_ULONG(
12244 IN
volatile ULONG
*Register
)
12251 READ_REGISTER_USHORT(
12252 IN
volatile USHORT
*Register
)
12259 WRITE_PORT_BUFFER_UCHAR(
12264 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12269 WRITE_PORT_BUFFER_ULONG(
12274 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12279 WRITE_PORT_BUFFER_USHORT(
12284 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12293 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
12302 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
12311 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
12316 WRITE_REGISTER_BUFFER_UCHAR(
12317 IN PUCHAR Register
,
12322 __movsb(Register
, Buffer
, Count
);
12323 InterlockedOr(&Synch
, 1);
12328 WRITE_REGISTER_BUFFER_ULONG(
12329 IN PULONG Register
,
12334 __movsd(Register
, Buffer
, Count
);
12335 InterlockedOr(&Synch
, 1);
12340 WRITE_REGISTER_BUFFER_USHORT(
12341 IN PUSHORT Register
,
12346 __movsw(Register
, Buffer
, Count
);
12347 InterlockedOr(&Synch
, 1);
12352 WRITE_REGISTER_UCHAR(
12353 IN
volatile UCHAR
*Register
,
12358 InterlockedOr(&Synch
, 1);
12363 WRITE_REGISTER_ULONG(
12364 IN
volatile ULONG
*Register
,
12369 InterlockedOr(&Synch
, 1);
12374 WRITE_REGISTER_USHORT(
12375 IN
volatile USHORT
*Register
,
12380 InterlockedOr(&Sync
, 1);
12384 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
12385 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
12387 #define DMA_MACROS_DEFINED
12389 _IRQL_requires_max_(DISPATCH_LEVEL
)
12390 _IRQL_requires_min_(DISPATCH_LEVEL
)
12393 IoAllocateAdapterChannel(
12394 _In_ PDMA_ADAPTER DmaAdapter
,
12395 _In_ PDEVICE_OBJECT DeviceObject
,
12396 _In_ ULONG NumberOfMapRegisters
,
12397 _In_ PDRIVER_CONTROL ExecutionRoutine
,
12398 _In_ PVOID Context
)
12400 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
12401 AllocateAdapterChannel
=
12402 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
12403 ASSERT(AllocateAdapterChannel
);
12404 return AllocateAdapterChannel(DmaAdapter
,
12406 NumberOfMapRegisters
,
12414 IoFlushAdapterBuffers(
12415 _In_ PDMA_ADAPTER DmaAdapter
,
12417 _In_ PVOID MapRegisterBase
,
12418 _In_ PVOID CurrentVa
,
12420 _In_ BOOLEAN WriteToDevice
)
12422 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
12423 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
12424 ASSERT(FlushAdapterBuffers
);
12425 return FlushAdapterBuffers(DmaAdapter
,
12436 IoFreeAdapterChannel(
12437 _In_ PDMA_ADAPTER DmaAdapter
)
12439 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
12440 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
12441 ASSERT(FreeAdapterChannel
);
12442 FreeAdapterChannel(DmaAdapter
);
12448 IoFreeMapRegisters(
12449 _In_ PDMA_ADAPTER DmaAdapter
,
12450 _In_ PVOID MapRegisterBase
,
12451 _In_ ULONG NumberOfMapRegisters
)
12453 PFREE_MAP_REGISTERS FreeMapRegisters
;
12454 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
12455 ASSERT(FreeMapRegisters
);
12456 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
12463 _In_ PDMA_ADAPTER DmaAdapter
,
12465 _In_ PVOID MapRegisterBase
,
12466 _In_ PVOID CurrentVa
,
12467 _Inout_ PULONG Length
,
12468 _In_ BOOLEAN WriteToDevice
)
12470 PMAP_TRANSFER MapTransfer
;
12472 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
12473 ASSERT(MapTransfer
);
12474 return MapTransfer(DmaAdapter
,
12483 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12485 _Acquires_lock_(_Global_cancel_spin_lock_
)
12486 _Requires_lock_not_held_(_Global_cancel_spin_lock_
)
12487 _IRQL_requires_max_(DISPATCH_LEVEL
)
12488 _IRQL_raises_(DISPATCH_LEVEL
)
12492 IoAcquireCancelSpinLock(
12493 _Out_
_At_(*Irql
, _IRQL_saves_
) PKIRQL Irql
);
12495 _IRQL_requires_max_(DISPATCH_LEVEL
)
12499 IoAcquireRemoveLockEx(
12500 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
12501 _In_opt_ PVOID Tag
,
12504 _In_ ULONG RemlockSize
);
12506 _IRQL_requires_max_(DISPATCH_LEVEL
)
12511 IoAllocateDriverObjectExtension(
12512 _In_ PDRIVER_OBJECT DriverObject
,
12513 _In_ PVOID ClientIdentificationAddress
,
12514 _In_ ULONG DriverObjectExtensionSize
,
12515 _Post_
_At_(*DriverObjectExtension
, _When_(return==0,
12516 __drv_aliasesMem
__drv_allocatesMem(Mem
) _Post_notnull_
))
12517 _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize
))
12518 PVOID
*DriverObjectExtension
);
12520 _IRQL_requires_max_(DISPATCH_LEVEL
)
12524 IoAllocateErrorLogEntry(
12525 _In_ PVOID IoObject
,
12526 _In_ UCHAR EntrySize
);
12528 _Must_inspect_result_
12529 _IRQL_requires_max_(DISPATCH_LEVEL
)
12534 _In_ CCHAR StackSize
,
12535 _In_ BOOLEAN ChargeQuota
);
12537 _IRQL_requires_max_(DISPATCH_LEVEL
)
12542 _In_opt_ __drv_aliasesMem PVOID VirtualAddress
,
12544 _In_ BOOLEAN SecondaryBuffer
,
12545 _In_ BOOLEAN ChargeQuota
,
12546 _Inout_opt_ PIRP Irp
);
12548 __drv_allocatesMem(Mem
)
12549 _IRQL_requires_max_(DISPATCH_LEVEL
)
12553 IoAllocateWorkItem(
12554 _In_ PDEVICE_OBJECT DeviceObject
);
12556 _IRQL_requires_max_(APC_LEVEL
)
12562 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return==0, __drv_aliasesMem
)
12563 PDEVICE_OBJECT SourceDevice
,
12564 _In_ PUNICODE_STRING TargetDevice
,
12565 _Out_ PDEVICE_OBJECT
*AttachedDevice
);
12567 _Must_inspect_result_
12568 _IRQL_requires_max_(DISPATCH_LEVEL
)
12572 IoAttachDeviceToDeviceStack(
12573 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return!=0, __drv_aliasesMem
)
12574 PDEVICE_OBJECT SourceDevice
,
12575 _In_ PDEVICE_OBJECT TargetDevice
);
12577 _Must_inspect_result_
12579 _IRQL_requires_max_(DISPATCH_LEVEL
)
12583 IoBuildAsynchronousFsdRequest(
12584 _In_ ULONG MajorFunction
,
12585 _In_ PDEVICE_OBJECT DeviceObject
,
12586 _Inout_opt_ PVOID Buffer
,
12587 _In_opt_ ULONG Length
,
12588 _In_opt_ PLARGE_INTEGER StartingOffset
,
12589 _In_opt_ PIO_STATUS_BLOCK IoStatusBlock
);
12591 _Must_inspect_result_
12593 _IRQL_requires_max_(PASSIVE_LEVEL
)
12597 IoBuildDeviceIoControlRequest(
12598 _In_ ULONG IoControlCode
,
12599 _In_ PDEVICE_OBJECT DeviceObject
,
12600 _In_opt_ PVOID InputBuffer
,
12601 _In_ ULONG InputBufferLength
,
12602 _Out_opt_ PVOID OutputBuffer
,
12603 _In_ ULONG OutputBufferLength
,
12604 _In_ BOOLEAN InternalDeviceIoControl
,
12605 _In_ PKEVENT Event
,
12606 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
12608 _IRQL_requires_max_(DISPATCH_LEVEL
)
12613 _In_ PMDL SourceMdl
,
12614 _Inout_ PMDL TargetMdl
,
12615 _In_ PVOID VirtualAddress
,
12616 _In_ ULONG Length
);
12618 _Must_inspect_result_
12620 _IRQL_requires_max_(PASSIVE_LEVEL
)
12624 IoBuildSynchronousFsdRequest(
12625 _In_ ULONG MajorFunction
,
12626 _In_ PDEVICE_OBJECT DeviceObject
,
12627 _Inout_opt_ PVOID Buffer
,
12628 _In_opt_ ULONG Length
,
12629 _In_opt_ PLARGE_INTEGER StartingOffset
,
12630 _In_ PKEVENT Event
,
12631 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
12633 _IRQL_requires_max_(DISPATCH_LEVEL
)
12639 _In_ PDEVICE_OBJECT DeviceObject
,
12640 _Inout_ __drv_aliasesMem PIRP Irp
);
12641 #define IoCallDriver IofCallDriver
12643 _IRQL_requires_max_(DISPATCH_LEVEL
)
12647 IofCompleteRequest(
12649 _In_ CCHAR PriorityBoost
);
12650 #define IoCompleteRequest IofCompleteRequest
12652 _IRQL_requires_max_(DISPATCH_LEVEL
)
12659 _IRQL_requires_max_(PASSIVE_LEVEL
)
12663 IoCheckShareAccess(
12664 _In_ ACCESS_MASK DesiredAccess
,
12665 _In_ ULONG DesiredShareAccess
,
12666 _Inout_ PFILE_OBJECT FileObject
,
12667 _Inout_ PSHARE_ACCESS ShareAccess
,
12668 _In_ BOOLEAN Update
);
12670 _IRQL_requires_max_(DISPATCH_LEVEL
)
12674 IofCompleteRequest(
12676 _In_ CCHAR PriorityBoost
);
12678 _IRQL_requires_max_(PASSIVE_LEVEL
)
12682 IoConnectInterrupt(
12683 _Out_ PKINTERRUPT
*InterruptObject
,
12684 _In_ PKSERVICE_ROUTINE ServiceRoutine
,
12685 _In_opt_ PVOID ServiceContext
,
12686 _In_opt_ PKSPIN_LOCK SpinLock
,
12689 _In_ KIRQL SynchronizeIrql
,
12690 _In_ KINTERRUPT_MODE InterruptMode
,
12691 _In_ BOOLEAN ShareVector
,
12692 _In_ KAFFINITY ProcessorEnableMask
,
12693 _In_ BOOLEAN FloatingSave
);
12695 _IRQL_requires_max_(APC_LEVEL
)
12701 _In_ PDRIVER_OBJECT DriverObject
,
12702 _In_ ULONG DeviceExtensionSize
,
12703 _In_opt_ PUNICODE_STRING DeviceName
,
12704 _In_ DEVICE_TYPE DeviceType
,
12705 _In_ ULONG DeviceCharacteristics
,
12706 _In_ BOOLEAN Exclusive
,
12707 _Outptr_result_nullonfailure_
12708 _At_(*DeviceObject
,
12709 __drv_allocatesMem(Mem
)
12710 _When_(((_In_function_class_(DRIVER_INITIALIZE
))
12711 ||(_In_function_class_(DRIVER_DISPATCH
))),
12713 PDEVICE_OBJECT
*DeviceObject
);
12715 _IRQL_requires_max_(PASSIVE_LEVEL
)
12720 _Out_ PHANDLE FileHandle
,
12721 _In_ ACCESS_MASK DesiredAccess
,
12722 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
12723 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
12724 _In_opt_ PLARGE_INTEGER AllocationSize
,
12725 _In_ ULONG FileAttributes
,
12726 _In_ ULONG ShareAccess
,
12727 _In_ ULONG Disposition
,
12728 _In_ ULONG CreateOptions
,
12729 _In_opt_ PVOID EaBuffer
,
12730 _In_ ULONG EaLength
,
12731 _In_ CREATE_FILE_TYPE CreateFileType
,
12732 _In_opt_ PVOID InternalParameters
,
12733 _In_ ULONG Options
);
12735 _IRQL_requires_max_(PASSIVE_LEVEL
)
12739 IoCreateNotificationEvent(
12740 _In_ PUNICODE_STRING EventName
,
12741 _Out_ PHANDLE EventHandle
);
12743 _IRQL_requires_max_(PASSIVE_LEVEL
)
12747 IoCreateSymbolicLink(
12748 _In_ PUNICODE_STRING SymbolicLinkName
,
12749 _In_ PUNICODE_STRING DeviceName
);
12751 _IRQL_requires_max_(PASSIVE_LEVEL
)
12755 IoCreateSynchronizationEvent(
12756 _In_ PUNICODE_STRING EventName
,
12757 _Out_ PHANDLE EventHandle
);
12759 _IRQL_requires_max_(PASSIVE_LEVEL
)
12763 IoCreateUnprotectedSymbolicLink(
12764 _In_ PUNICODE_STRING SymbolicLinkName
,
12765 _In_ PUNICODE_STRING DeviceName
);
12767 _IRQL_requires_max_(APC_LEVEL
)
12768 _Kernel_clear_do_init_(__yes
)
12773 _In_
_Kernel_requires_resource_held_(Memory
) __drv_freesMem(Mem
)
12774 PDEVICE_OBJECT DeviceObject
);
12776 _IRQL_requires_max_(PASSIVE_LEVEL
)
12780 IoDeleteSymbolicLink(
12781 _In_ PUNICODE_STRING SymbolicLinkName
);
12783 _IRQL_requires_max_(PASSIVE_LEVEL
)
12788 _Inout_ PDEVICE_OBJECT TargetDevice
);
12790 _IRQL_requires_max_(PASSIVE_LEVEL
)
12794 IoDisconnectInterrupt(
12795 _In_ PKINTERRUPT InterruptObject
);
12797 __drv_freesMem(Mem
)
12798 _IRQL_requires_max_(DISPATCH_LEVEL
)
12805 _IRQL_requires_max_(DISPATCH_LEVEL
)
12812 _IRQL_requires_max_(DISPATCH_LEVEL
)
12817 _In_
__drv_freesMem(Mem
) PIO_WORKITEM IoWorkItem
);
12822 IoGetAttachedDevice(
12823 IN PDEVICE_OBJECT DeviceObject
);
12825 _IRQL_requires_max_(DISPATCH_LEVEL
)
12829 IoGetAttachedDeviceReference(
12830 _In_ PDEVICE_OBJECT DeviceObject
);
12835 IoGetBootDiskInformation(
12836 _Inout_ PBOOTDISK_INFORMATION BootDiskInformation
,
12839 _IRQL_requires_max_(PASSIVE_LEVEL
)
12840 _Must_inspect_result_
12844 IoGetDeviceInterfaceAlias(
12845 _In_ PUNICODE_STRING SymbolicLinkName
,
12846 _In_ CONST GUID
*AliasInterfaceClassGuid
,
12848 _When_(return==0, _At_(AliasSymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
12849 PUNICODE_STRING AliasSymbolicLinkName
);
12854 IoGetCurrentProcess(VOID
);
12856 _IRQL_requires_max_(PASSIVE_LEVEL
)
12857 _Must_inspect_result_
12861 IoGetDeviceInterfaces(
12862 _In_ CONST GUID
*InterfaceClassGuid
,
12863 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
12865 _Outptr_result_nullonfailure_
12866 _At_(*SymbolicLinkList
, _When_(return==0, __drv_allocatesMem(Mem
)))
12867 PZZWSTR
*SymbolicLinkList
);
12869 _IRQL_requires_max_(PASSIVE_LEVEL
)
12873 IoGetDeviceObjectPointer(
12874 _In_ PUNICODE_STRING ObjectName
,
12875 _In_ ACCESS_MASK DesiredAccess
,
12876 _Out_ PFILE_OBJECT
*FileObject
,
12877 _Out_ PDEVICE_OBJECT
*DeviceObject
);
12879 _IRQL_requires_max_(PASSIVE_LEVEL
)
12880 _When_((DeviceProperty
& __string_type
),
12881 _At_(PropertyBuffer
, _Post_z_
))
12882 _When_((DeviceProperty
& __multiString_type
),
12883 _At_(PropertyBuffer
, _Post_ _NullNull_terminated_
))
12887 IoGetDeviceProperty(
12888 _In_ PDEVICE_OBJECT DeviceObject
,
12889 _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty
,
12890 _In_ ULONG BufferLength
,
12891 _Out_writes_bytes_opt_(BufferLength
) PVOID PropertyBuffer
,
12892 _Deref_out_range_(<=, BufferLength
) PULONG ResultLength
);
12894 _Must_inspect_result_
12895 _IRQL_requires_max_(PASSIVE_LEVEL
)
12900 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
12901 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
12902 _Out_
_When_(return!=0, _Kernel_IoGetDmaAdapter_
_At_(*NumberOfMapRegisters
, _Must_inspect_result_
))
12903 PULONG NumberOfMapRegisters
);
12906 _IRQL_requires_max_(DISPATCH_LEVEL
)
12910 IoGetDriverObjectExtension(
12911 _In_ PDRIVER_OBJECT DriverObject
,
12912 _In_ PVOID ClientIdentificationAddress
);
12914 _IRQL_requires_max_(APC_LEVEL
)
12918 IoGetInitialStack(VOID
);
12923 IoGetRelatedDeviceObject(
12924 _In_ PFILE_OBJECT FileObject
);
12926 _IRQL_requires_max_(DISPATCH_LEVEL
)
12931 _Inout_ PIO_WORKITEM IoWorkItem
,
12932 _In_ PIO_WORKITEM_ROUTINE WorkerRoutine
,
12933 _In_ WORK_QUEUE_TYPE QueueType
,
12934 _In_opt_ __drv_aliasesMem PVOID Context
);
12936 _IRQL_requires_max_(DISPATCH_LEVEL
)
12942 _In_ USHORT PacketSize
,
12943 _In_ CCHAR StackSize
);
12945 _IRQL_requires_max_(PASSIVE_LEVEL
)
12949 IoInitializeRemoveLockEx(
12950 _Out_ PIO_REMOVE_LOCK Lock
,
12951 _In_ ULONG AllocateTag
,
12952 _In_ ULONG MaxLockedMinutes
,
12953 _In_ ULONG HighWatermark
,
12954 _In_ ULONG RemlockSize
);
12956 _IRQL_requires_max_(PASSIVE_LEVEL
)
12961 _In_ PDEVICE_OBJECT DeviceObject
,
12962 _In_ PIO_TIMER_ROUTINE TimerRoutine
,
12963 _In_opt_ __drv_aliasesMem PVOID Context
);
12965 _IRQL_requires_max_(DISPATCH_LEVEL
)
12969 IoInvalidateDeviceRelations(
12970 _In_ PDEVICE_OBJECT DeviceObject
,
12971 _In_ DEVICE_RELATION_TYPE Type
);
12973 _IRQL_requires_max_(DISPATCH_LEVEL
)
12977 IoInvalidateDeviceState(
12978 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
12980 _IRQL_requires_max_(PASSIVE_LEVEL
)
12984 IoIsWdmVersionAvailable(
12985 _When_(MajorVersion
!=1&&MajorVersion
!=6, _In_
__drv_reportError("MajorVersion must be 1 or 6"))
12986 UCHAR MajorVersion
,
12987 _In_
_When_(MinorVersion
!=0 && MinorVersion
!=5 &&
12988 MinorVersion
!=16 && MinorVersion
!=32 &&
12989 MinorVersion
!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30"))
12990 UCHAR MinorVersion
);
12992 _IRQL_requires_max_(PASSIVE_LEVEL
)
12993 _Must_inspect_result_
12997 IoOpenDeviceInterfaceRegistryKey(
12998 _In_ PUNICODE_STRING SymbolicLinkName
,
12999 _In_ ACCESS_MASK DesiredAccess
,
13000 _Out_ PHANDLE DeviceInterfaceKey
);
13002 _IRQL_requires_max_(PASSIVE_LEVEL
)
13003 _Must_inspect_result_
13007 IoOpenDeviceRegistryKey(
13008 _In_ PDEVICE_OBJECT DeviceObject
,
13009 _In_ ULONG DevInstKeyType
,
13010 _In_ ACCESS_MASK DesiredAccess
,
13011 _Out_ PHANDLE DevInstRegKey
);
13013 _IRQL_requires_max_(PASSIVE_LEVEL
)
13014 _Must_inspect_result_
13018 IoRegisterDeviceInterface(
13019 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13020 _In_ CONST GUID
*InterfaceClassGuid
,
13021 _In_opt_ PUNICODE_STRING ReferenceString
,
13022 _Out_
_When_(return==0, _At_(SymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13023 PUNICODE_STRING SymbolicLinkName
);
13025 _IRQL_requires_max_(PASSIVE_LEVEL
)
13026 _Must_inspect_result_
13030 IoRegisterPlugPlayNotification(
13031 _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
13032 _In_ ULONG EventCategoryFlags
,
13033 _In_opt_ PVOID EventCategoryData
,
13034 _In_ PDRIVER_OBJECT DriverObject
,
13035 _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
13036 _Inout_opt_ __drv_aliasesMem PVOID Context
,
13037 _Outptr_result_nullonfailure_
13038 _At_(*NotificationEntry
, _When_(return==0, __drv_allocatesMem(Mem
)))
13039 PVOID
*NotificationEntry
);
13041 _IRQL_requires_max_(PASSIVE_LEVEL
)
13045 IoRegisterShutdownNotification(
13046 _In_ PDEVICE_OBJECT DeviceObject
);
13048 _Requires_lock_held_(_Global_cancel_spin_lock_
)
13049 _Releases_lock_(_Global_cancel_spin_lock_
)
13050 _IRQL_requires_max_(DISPATCH_LEVEL
)
13051 _IRQL_requires_min_(DISPATCH_LEVEL
)
13055 IoReleaseCancelSpinLock(
13056 _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql
);
13058 _IRQL_requires_max_(PASSIVE_LEVEL
)
13062 IoReleaseRemoveLockAndWaitEx(
13063 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13064 _In_opt_ PVOID Tag
,
13065 _In_ ULONG RemlockSize
);
13070 IoReleaseRemoveLockEx(
13071 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13072 _In_opt_ PVOID Tag
,
13073 _In_ ULONG RemlockSize
);
13075 _IRQL_requires_max_(PASSIVE_LEVEL
)
13079 IoRemoveShareAccess(
13080 _In_ PFILE_OBJECT FileObject
,
13081 _Inout_ PSHARE_ACCESS ShareAccess
);
13083 _IRQL_requires_max_(PASSIVE_LEVEL
)
13087 IoReportTargetDeviceChange(
13088 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13089 _In_ PVOID NotificationStructure
);
13091 _IRQL_requires_max_(DISPATCH_LEVEL
)
13095 IoReportTargetDeviceChangeAsynchronous(
13096 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13097 _In_ PVOID NotificationStructure
,
13098 _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback
,
13099 _In_opt_ PVOID Context
);
13101 _IRQL_requires_max_(DISPATCH_LEVEL
)
13105 IoRequestDeviceEject(
13106 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13108 _IRQL_requires_max_(DISPATCH_LEVEL
)
13114 _In_ NTSTATUS Status
);
13116 _IRQL_requires_max_(PASSIVE_LEVEL
)
13117 _Must_inspect_result_
13121 IoSetDeviceInterfaceState(
13122 _In_ PUNICODE_STRING SymbolicLinkName
,
13123 _In_ BOOLEAN Enable
);
13129 _In_ ACCESS_MASK DesiredAccess
,
13130 _In_ ULONG DesiredShareAccess
,
13131 _Inout_ PFILE_OBJECT FileObject
,
13132 _Out_ PSHARE_ACCESS ShareAccess
);
13134 _IRQL_requires_max_(DISPATCH_LEVEL
)
13135 _IRQL_requires_min_(DISPATCH_LEVEL
)
13140 _In_ PDEVICE_OBJECT DeviceObject
,
13141 _In_ BOOLEAN Cancelable
);
13143 _IRQL_requires_max_(DISPATCH_LEVEL
)
13147 IoStartNextPacketByKey(
13148 _In_ PDEVICE_OBJECT DeviceObject
,
13149 _In_ BOOLEAN Cancelable
,
13152 _IRQL_requires_max_(DISPATCH_LEVEL
)
13157 _In_ PDEVICE_OBJECT DeviceObject
,
13159 _In_opt_ PULONG Key
,
13160 _In_opt_ PDRIVER_CANCEL CancelFunction
);
13162 _IRQL_requires_max_(DISPATCH_LEVEL
)
13167 _In_ PDEVICE_OBJECT DeviceObject
);
13169 _IRQL_requires_max_(DISPATCH_LEVEL
)
13174 _In_ PDEVICE_OBJECT DeviceObject
);
13176 _IRQL_requires_max_(PASSIVE_LEVEL
)
13177 __drv_freesMem(Pool
)
13181 IoUnregisterPlugPlayNotification(
13182 _In_ PVOID NotificationEntry
);
13184 _IRQL_requires_max_(PASSIVE_LEVEL
)
13188 IoUnregisterShutdownNotification(
13189 _In_ PDEVICE_OBJECT DeviceObject
);
13191 _IRQL_requires_max_(PASSIVE_LEVEL
)
13195 IoUpdateShareAccess(
13196 _In_ PFILE_OBJECT FileObject
,
13197 _Inout_ PSHARE_ACCESS ShareAccess
);
13199 _IRQL_requires_max_(PASSIVE_LEVEL
)
13203 IoWMIAllocateInstanceIds(
13205 _In_ ULONG InstanceCount
,
13206 _Out_ ULONG
*FirstInstanceId
);
13211 IoWMIQuerySingleInstanceMultiple(
13212 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13213 _In_reads_(ObjectCount
) PUNICODE_STRING InstanceNames
,
13214 _In_ ULONG ObjectCount
,
13215 _Inout_ ULONG
*InOutBufferSize
,
13216 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13218 _IRQL_requires_max_(PASSIVE_LEVEL
)
13222 IoWMIRegistrationControl(
13223 _In_ PDEVICE_OBJECT DeviceObject
,
13224 _In_ ULONG Action
);
13229 IoWMISuggestInstanceName(
13230 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13231 _In_opt_ PUNICODE_STRING SymbolicLinkName
,
13232 _In_ BOOLEAN CombineNames
,
13233 _Out_ PUNICODE_STRING SuggestedInstanceName
);
13235 _Must_inspect_result_
13236 _IRQL_requires_max_(DISPATCH_LEVEL
)
13242 _Inout_
_When_(return==0, __drv_aliasesMem
) PVOID WnodeEventItem
);
13244 _IRQL_requires_max_(DISPATCH_LEVEL
)
13248 IoWriteErrorLogEntry(
13249 _In_ PVOID ElEntry
);
13254 IoGetTopLevelIrp(VOID
);
13256 _IRQL_requires_max_(PASSIVE_LEVEL
)
13260 IoRegisterLastChanceShutdownNotification(
13261 _In_ PDEVICE_OBJECT DeviceObject
);
13267 _In_opt_ PIRP Irp
);
13270 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13273 #if (NTDDI_VERSION >= NTDDI_WINXP)
13280 _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp
,
13281 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
13282 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
13283 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
13284 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
13285 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
13291 _Inout_ PIO_CSQ Csq
,
13293 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
);
13299 _Inout_ PIO_CSQ Csq
,
13300 _Inout_ PIO_CSQ_IRP_CONTEXT Context
);
13305 IoCsqRemoveNextIrp(
13306 _Inout_ PIO_CSQ Csq
,
13307 _In_opt_ PVOID PeekContext
);
13312 IoForwardIrpSynchronously(
13313 _In_ PDEVICE_OBJECT DeviceObject
,
13316 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
13321 IoFreeErrorLogEntry(
13322 _In_ PVOID ElEntry
);
13324 _IRQL_requires_max_(DISPATCH_LEVEL
)
13325 _Must_inspect_result_
13329 IoSetCompletionRoutineEx(
13330 _In_ PDEVICE_OBJECT DeviceObject
,
13332 _In_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
13333 _In_opt_ PVOID Context
,
13334 _In_ BOOLEAN InvokeOnSuccess
,
13335 _In_ BOOLEAN InvokeOnError
,
13336 _In_ BOOLEAN InvokeOnCancel
);
13340 IoSetStartIoAttributes(
13341 _In_ PDEVICE_OBJECT DeviceObject
,
13342 _In_ BOOLEAN DeferredStartIo
,
13343 _In_ BOOLEAN NonCancelable
);
13348 IoWMIDeviceObjectToInstanceName(
13349 _In_ PVOID DataBlockObject
,
13350 _In_ PDEVICE_OBJECT DeviceObject
,
13351 _Out_ PUNICODE_STRING InstanceName
);
13356 IoWMIExecuteMethod(
13357 _In_ PVOID DataBlockObject
,
13358 _In_ PUNICODE_STRING InstanceName
,
13359 _In_ ULONG MethodId
,
13360 _In_ ULONG InBufferSize
,
13361 _Inout_ PULONG OutBufferSize
,
13362 _Inout_updates_bytes_to_opt_(*OutBufferSize
, InBufferSize
) PUCHAR InOutBuffer
);
13367 IoWMIHandleToInstanceName(
13368 _In_ PVOID DataBlockObject
,
13369 _In_ HANDLE FileHandle
,
13370 _Out_ PUNICODE_STRING InstanceName
);
13376 _In_ GUID
*DataBlockGuid
,
13377 _In_ ULONG DesiredAccess
,
13378 _Out_ PVOID
*DataBlockObject
);
13384 _In_ PVOID DataBlockObject
,
13385 _Inout_ ULONG
*InOutBufferSize
,
13386 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13391 IoWMIQueryAllDataMultiple(
13392 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13393 _In_ ULONG ObjectCount
,
13394 _Inout_ ULONG
*InOutBufferSize
,
13395 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13400 IoWMIQuerySingleInstance(
13401 _In_ PVOID DataBlockObject
,
13402 _In_ PUNICODE_STRING InstanceName
,
13403 _Inout_ ULONG
*InOutBufferSize
,
13404 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13409 IoWMISetNotificationCallback(
13410 _Inout_ PVOID Object
,
13411 _In_ WMI_NOTIFICATION_CALLBACK Callback
,
13412 _In_opt_ PVOID Context
);
13417 IoWMISetSingleInstance(
13418 _In_ PVOID DataBlockObject
,
13419 _In_ PUNICODE_STRING InstanceName
,
13420 _In_ ULONG Version
,
13421 _In_ ULONG ValueBufferSize
,
13422 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
13427 IoWMISetSingleItem(
13428 _In_ PVOID DataBlockObject
,
13429 _In_ PUNICODE_STRING InstanceName
,
13430 _In_ ULONG DataItemId
,
13431 _In_ ULONG Version
,
13432 _In_ ULONG ValueBufferSize
,
13433 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
13435 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
13437 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
13441 IoValidateDeviceIoControlAccess(
13443 _In_ ULONG RequiredAccess
);
13446 #if (NTDDI_VERSION >= NTDDI_WS03)
13452 _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
13453 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
13454 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
13455 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
13456 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
13457 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
13463 _Inout_ PIO_CSQ Csq
,
13465 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
,
13466 _In_opt_ PVOID InsertContext
);
13467 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
13470 #if (NTDDI_VERSION >= NTDDI_VISTA)
13474 IoGetBootDiskInformationLite(
13475 _Outptr_ PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
13480 IoCheckShareAccessEx(
13481 _In_ ACCESS_MASK DesiredAccess
,
13482 _In_ ULONG DesiredShareAccess
,
13483 _Inout_ PFILE_OBJECT FileObject
,
13484 _Inout_ PSHARE_ACCESS ShareAccess
,
13485 _In_ BOOLEAN Update
,
13486 _In_ PBOOLEAN WritePermission
);
13491 IoConnectInterruptEx(
13492 _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
13497 IoDisconnectInterruptEx(
13498 _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
13502 IoWithinStackLimits(
13503 _In_ ULONG_PTR RegionStart
,
13504 _In_ SIZE_T RegionSize
);
13509 IoSetShareAccessEx(
13510 _In_ ACCESS_MASK DesiredAccess
,
13511 _In_ ULONG DesiredShareAccess
,
13512 _Inout_ PFILE_OBJECT FileObject
,
13513 _Out_ PSHARE_ACCESS ShareAccess
,
13514 _In_ PBOOLEAN WritePermission
);
13518 IoSizeofWorkItem(VOID
);
13522 IoInitializeWorkItem(
13523 _In_ PVOID IoObject
,
13524 _Out_ PIO_WORKITEM IoWorkItem
);
13528 IoUninitializeWorkItem(
13529 _Inout_ PIO_WORKITEM IoWorkItem
);
13531 _IRQL_requires_max_(DISPATCH_LEVEL
)
13535 _Inout_ PIO_WORKITEM IoWorkItem
,
13536 _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
13537 _In_ WORK_QUEUE_TYPE QueueType
,
13538 _In_opt_ __drv_aliasesMem PVOID Context
);
13542 IoGetIoPriorityHint(
13547 IoSetIoPriorityHint(
13549 _In_ IO_PRIORITY_HINT PriorityHint
);
13553 IoAllocateSfioStreamIdentifier(
13554 _In_ PFILE_OBJECT FileObject
,
13556 _In_ PVOID Signature
,
13557 _Out_ PVOID
*StreamIdentifier
);
13561 IoGetSfioStreamIdentifier(
13562 _In_ PFILE_OBJECT FileObject
,
13563 _In_ PVOID Signature
);
13567 IoFreeSfioStreamIdentifier(
13568 _In_ PFILE_OBJECT FileObject
,
13569 _In_ PVOID Signature
);
13571 _IRQL_requires_max_(DISPATCH_LEVEL
)
13572 _Must_inspect_result_
13576 IoRequestDeviceEjectEx(
13577 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13578 _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback
,
13579 _In_opt_ PVOID Context
,
13580 _In_opt_ PDRIVER_OBJECT DriverObject
);
13582 _IRQL_requires_max_(PASSIVE_LEVEL
)
13583 _Must_inspect_result_
13587 IoSetDevicePropertyData(
13588 _In_ PDEVICE_OBJECT Pdo
,
13589 _In_ CONST DEVPROPKEY
*PropertyKey
,
13592 _In_ DEVPROPTYPE Type
,
13594 _In_opt_ PVOID Data
);
13596 _IRQL_requires_max_(PASSIVE_LEVEL
)
13597 _Must_inspect_result_
13601 IoGetDevicePropertyData(
13602 _In_ PDEVICE_OBJECT Pdo
,
13603 _In_ CONST DEVPROPKEY
*PropertyKey
,
13605 _Reserved_ ULONG Flags
,
13608 _Out_ PULONG RequiredSize
,
13609 _Out_ PDEVPROPTYPE Type
);
13611 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
13613 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
13615 #if (NTDDI_VERSION >= NTDDI_WS08)
13616 _IRQL_requires_max_(PASSIVE_LEVEL
)
13617 _Must_inspect_result_
13621 IoReplacePartitionUnit(
13622 _In_ PDEVICE_OBJECT TargetPdo
,
13623 _In_ PDEVICE_OBJECT SparePdo
,
13627 #if (NTDDI_VERSION >= NTDDI_WIN7)
13632 IoGetAffinityInterrupt(
13633 _In_ PKINTERRUPT InterruptObject
,
13634 _Out_ PGROUP_AFFINITY GroupAffinity
);
13638 IoGetContainerInformation(
13639 _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass
,
13640 _In_opt_ PVOID ContainerObject
,
13641 _Inout_updates_bytes_opt_(BufferLength
) PVOID Buffer
,
13642 _In_ ULONG BufferLength
);
13646 IoRegisterContainerNotification(
13647 _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
13648 _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
13649 _In_reads_bytes_opt_(NotificationInformationLength
) PVOID NotificationInformation
,
13650 _In_ ULONG NotificationInformationLength
,
13651 _Out_ PVOID CallbackRegistration
);
13655 IoUnregisterContainerNotification(
13656 _In_ PVOID CallbackRegistration
);
13658 _IRQL_requires_max_(PASSIVE_LEVEL
)
13659 __drv_freesMem(Pool
)
13663 IoUnregisterPlugPlayNotificationEx(
13664 _In_ PVOID NotificationEntry
);
13666 _IRQL_requires_max_(PASSIVE_LEVEL
)
13667 _Must_inspect_result_
13671 IoGetDeviceNumaNode(
13672 _In_ PDEVICE_OBJECT Pdo
,
13673 _Out_ PUSHORT NodeNumber
);
13675 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13677 #if defined(_WIN64)
13681 IoWMIDeviceObjectToProviderId(
13682 _In_ PDEVICE_OBJECT DeviceObject
);
13684 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
13690 * IN CCHAR StackSize)
13692 #define IoSizeOfIrp(_StackSize) \
13693 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
13697 IoSkipCurrentIrpStackLocation(
13700 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
13701 Irp
->CurrentLocation
++;
13702 #ifdef NONAMELESSUNION
13703 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
++;
13705 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
13711 IoSetNextIrpStackLocation(
13714 ASSERT(Irp
->CurrentLocation
> 0);
13715 Irp
->CurrentLocation
--;
13716 #ifdef NONAMELESSUNION
13717 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
--;
13719 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
13726 IoGetNextIrpStackLocation(
13729 ASSERT(Irp
->CurrentLocation
> 0);
13730 #ifdef NONAMELESSUNION
13731 return ((Irp
)->Tail
.Overlay
.s
.u
.CurrentStackLocation
- 1 );
13733 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
13737 _IRQL_requires_max_(DISPATCH_LEVEL
)
13740 IoSetCompletionRoutine(
13742 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
13743 _In_opt_ __drv_aliasesMem PVOID Context
,
13744 _In_ BOOLEAN InvokeOnSuccess
,
13745 _In_ BOOLEAN InvokeOnError
,
13746 _In_ BOOLEAN InvokeOnCancel
)
13748 PIO_STACK_LOCATION irpSp
;
13749 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
13750 irpSp
= IoGetNextIrpStackLocation(Irp
);
13751 irpSp
->CompletionRoutine
= CompletionRoutine
;
13752 irpSp
->Context
= Context
;
13753 irpSp
->Control
= 0;
13755 if (InvokeOnSuccess
) {
13756 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
13759 if (InvokeOnError
) {
13760 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
13763 if (InvokeOnCancel
) {
13764 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
13768 _IRQL_requires_max_(DISPATCH_LEVEL
)
13772 IoSetCancelRoutine(
13774 _In_opt_ PDRIVER_CANCEL CancelRoutine
)
13776 return (PDRIVER_CANCEL
)(ULONG_PTR
) InterlockedExchangePointer((PVOID
*)&(Irp
)->CancelRoutine
, (PVOID
)(ULONG_PTR
)(CancelRoutine
));
13782 _Inout_ PDEVICE_OBJECT DeviceObject
,
13784 _In_opt_ __drv_aliasesMem PVOID Context
)
13786 KeInsertQueueDpc(&DeviceObject
->Dpc
, Irp
, Context
);
13791 * IoReleaseRemoveLock(
13792 * IN PIO_REMOVE_LOCK RemoveLock,
13795 #define IoReleaseRemoveLock(_RemoveLock, \
13797 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
13801 * IoReleaseRemoveLockAndWait(
13802 * IN PIO_REMOVE_LOCK RemoveLock,
13805 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
13807 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
13809 #if defined(_WIN64)
13810 _IRQL_requires_max_(DISPATCH_LEVEL
)
13814 _In_opt_ PIRP Irp
);
13817 #define PLUGPLAY_REGKEY_DEVICE 1
13818 #define PLUGPLAY_REGKEY_DRIVER 2
13819 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
13824 IoGetCurrentIrpStackLocation(
13827 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
13828 #ifdef NONAMELESSUNION
13829 return Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
;
13831 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
13840 IoGetCurrentIrpStackLocation((Irp
))->Control
|= SL_PENDING_RETURNED
;
13845 * IoIsErrorUserInduced(
13846 * IN NTSTATUS Status);
13848 #define IoIsErrorUserInduced(Status) \
13849 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
13850 ((Status) == STATUS_IO_TIMEOUT) || \
13851 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
13852 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
13853 ((Status) == STATUS_VERIFY_REQUIRED) || \
13854 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
13855 ((Status) == STATUS_WRONG_VOLUME)))
13858 * IoInitializeRemoveLock(
13859 * IN PIO_REMOVE_LOCK Lock,
13860 * IN ULONG AllocateTag,
13861 * IN ULONG MaxLockedMinutes,
13862 * IN ULONG HighWatermark)
13864 #define IoInitializeRemoveLock( \
13865 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
13866 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
13867 HighWatermark, sizeof(IO_REMOVE_LOCK))
13871 IoInitializeDpcRequest(
13872 _In_ PDEVICE_OBJECT DeviceObject
,
13873 _In_ PIO_DPC_ROUTINE DpcRoutine
)
13876 #pragma warning(push)
13877 #pragma warning(disable:28024)
13879 KeInitializeDpc(&DeviceObject
->Dpc
,
13880 (PKDEFERRED_ROUTINE
) DpcRoutine
,
13883 #pragma warning(pop)
13887 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
13891 * IoGetFunctionCodeFromCtlCode(
13892 * IN ULONG ControlCode)
13894 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
13895 (((_ControlCode) >> 2) & 0x00000FFF)
13899 IoCopyCurrentIrpStackLocationToNext(
13902 PIO_STACK_LOCATION irpSp
;
13903 PIO_STACK_LOCATION nextIrpSp
;
13904 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
13905 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
13906 RtlCopyMemory(nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
13907 nextIrpSp
->Control
= 0;
13910 _IRQL_requires_max_(APC_LEVEL
)
13915 _Out_ PULONG_PTR LowLimit
,
13916 _Out_ PULONG_PTR HighLimit
);
13918 _IRQL_requires_max_(APC_LEVEL
)
13921 IoGetRemainingStackSize(VOID
)
13923 ULONG_PTR End
, Begin
;
13926 IoGetStackLimits(&Begin
, &End
);
13927 Result
= (ULONG_PTR
)(&End
) - Begin
;
13931 #if (NTDDI_VERSION >= NTDDI_WS03)
13934 IoInitializeThreadedDpcRequest(
13935 _In_ PDEVICE_OBJECT DeviceObject
,
13936 _In_ PIO_DPC_ROUTINE DpcRoutine
)
13939 #pragma warning(push)
13940 #pragma warning(disable:28024)
13941 #pragma warning(disable:28128)
13943 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
13944 (PKDEFERRED_ROUTINE
) DpcRoutine
,
13947 #pragma warning(pop)
13952 /******************************************************************************
13953 * Power Management Support Functions *
13954 ******************************************************************************/
13956 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
13958 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13960 _IRQL_requires_max_(DISPATCH_LEVEL
)
13965 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
13966 _Inout_ __drv_aliasesMem
struct _IRP
*Irp
);
13968 _IRQL_requires_max_(APC_LEVEL
)
13972 PoRegisterDeviceForIdleDetection(
13973 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
13974 _In_ ULONG ConservationIdleTime
,
13975 _In_ ULONG PerformanceIdleTime
,
13976 _In_ DEVICE_POWER_STATE State
);
13978 _IRQL_requires_max_(APC_LEVEL
)
13982 PoRegisterSystemState(
13983 _Inout_opt_ PVOID StateHandle
,
13984 _In_ EXECUTION_STATE Flags
);
13986 _IRQL_requires_max_(DISPATCH_LEVEL
)
13991 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
13992 _In_ UCHAR MinorFunction
,
13993 _In_ POWER_STATE PowerState
,
13994 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
,
13995 _In_opt_ __drv_aliasesMem PVOID Context
,
13996 _Outptr_opt_
struct _IRP
**Irp
);
13998 _IRQL_requires_max_(DISPATCH_LEVEL
)
14003 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14004 _In_ POWER_STATE_TYPE Type
,
14005 _In_ POWER_STATE State
);
14007 _IRQL_requires_max_(DISPATCH_LEVEL
)
14012 _In_ EXECUTION_STATE Flags
);
14014 _IRQL_requires_max_(DISPATCH_LEVEL
)
14018 PoStartNextPowerIrp(
14019 _Inout_
struct _IRP
*Irp
);
14021 _IRQL_requires_max_(APC_LEVEL
)
14025 PoUnregisterSystemState(
14026 _Inout_ PVOID StateHandle
);
14031 PoRequestShutdownEvent(
14034 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14036 #if (NTDDI_VERSION >= NTDDI_VISTA)
14038 _IRQL_requires_max_(DISPATCH_LEVEL
)
14043 _Inout_
struct _IRP
*Irp
);
14045 _IRQL_requires_max_(DISPATCH_LEVEL
)
14050 _In_
struct _IRP
*Irp
);
14052 _IRQL_requires_max_(APC_LEVEL
)
14056 PoRegisterPowerSettingCallback(
14057 _In_opt_ PDEVICE_OBJECT DeviceObject
,
14058 _In_ LPCGUID SettingGuid
,
14059 _In_ PPOWER_SETTING_CALLBACK Callback
,
14060 _In_opt_ PVOID Context
,
14061 _Outptr_opt_ PVOID
*Handle
);
14063 _IRQL_requires_max_(APC_LEVEL
)
14067 PoUnregisterPowerSettingCallback(
14068 _Inout_ PVOID Handle
);
14070 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14072 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14077 _Inout_ PULONG IdlePointer
);
14078 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14080 #if (NTDDI_VERSION >= NTDDI_WIN7)
14086 _Inout_ PULONG IdlePointer
);
14092 _Inout_ PULONG IdlePointer
);
14094 _IRQL_requires_max_(DISPATCH_LEVEL
)
14098 PoQueryWatchdogTime(
14099 _In_ PDEVICE_OBJECT Pdo
,
14100 _Out_ PULONG SecondsRemaining
);
14102 _IRQL_requires_max_(APC_LEVEL
)
14106 PoDeletePowerRequest(
14107 _Inout_ PVOID PowerRequest
);
14109 _IRQL_requires_max_(DISPATCH_LEVEL
)
14114 _Inout_ PVOID PowerRequest
,
14115 _In_ POWER_REQUEST_TYPE Type
);
14117 _IRQL_requires_max_(DISPATCH_LEVEL
)
14121 PoClearPowerRequest(
14122 _Inout_ PVOID PowerRequest
,
14123 _In_ POWER_REQUEST_TYPE Type
);
14125 _IRQL_requires_max_(APC_LEVEL
)
14129 PoCreatePowerRequest(
14130 _Outptr_ PVOID
*PowerRequest
,
14131 _In_ PDEVICE_OBJECT DeviceObject
,
14132 _In_opt_ PCOUNTED_REASON_CONTEXT Context
);
14134 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14136 /******************************************************************************
14137 * Executive Functions *
14138 ******************************************************************************/
14140 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
14141 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
14142 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
14144 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
14145 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
14146 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
14147 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
14149 #define ExInitializeSListHead InitializeSListHead
14151 #if defined(_NTHAL_) && defined(_X86_)
14156 ExiAcquireFastMutex(
14157 IN OUT PFAST_MUTEX FastMutex
);
14162 ExiReleaseFastMutex(
14163 IN OUT PFAST_MUTEX FastMutex
);
14168 ExiTryToAcquireFastMutex(
14169 IN OUT PFAST_MUTEX FastMutex
);
14171 #define ExAcquireFastMutex ExiAcquireFastMutex
14172 #define ExReleaseFastMutex ExiReleaseFastMutex
14173 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
14177 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14179 _IRQL_raises_(APC_LEVEL
)
14180 _IRQL_saves_global_(OldIrql
, FastMutex
)
14184 ExAcquireFastMutex(
14185 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14186 PFAST_MUTEX FastMutex
);
14188 _IRQL_requires_(APC_LEVEL
)
14189 _IRQL_restores_global_(OldIrql
, FastMutex
)
14193 ExReleaseFastMutex(
14194 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14195 PFAST_MUTEX FastMutex
);
14197 _Must_inspect_result_
14198 _Success_(return!=FALSE
)
14199 _IRQL_raises_(APC_LEVEL
)
14200 _IRQL_saves_global_(OldIrql
, FastMutex
)
14204 ExTryToAcquireFastMutex(
14205 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14206 PFAST_MUTEX FastMutex
);
14208 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14210 #endif /* defined(_NTHAL_) && defined(_X86_) */
14213 #define ExInterlockedAddUlong ExfInterlockedAddUlong
14214 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
14215 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
14216 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
14217 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
14218 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
14219 #endif /* defined(_X86_) */
14221 #if defined(_WIN64)
14223 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
14224 defined(_NTHAL_) || defined(_NTOSP_)
14227 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
);
14231 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
)
14233 return (USHORT
)(ListHead
->Alignment
& 0xffff);
14239 ExpInterlockedFlushSList(
14240 PSLIST_HEADER ListHead
);
14244 ExpInterlockedPopEntrySList(
14245 _Inout_ PSLIST_HEADER ListHead
);
14249 ExpInterlockedPushEntrySList(
14250 _Inout_ PSLIST_HEADER ListHead
,
14251 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
14253 #define ExInterlockedFlushSList(Head) \
14254 ExpInterlockedFlushSList(Head)
14255 #define ExInterlockedPopEntrySList(Head, Lock) \
14256 ExpInterlockedPopEntrySList(Head)
14257 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
14258 ExpInterlockedPushEntrySList(Head, Entry)
14260 #else /* !defined(_WIN64) */
14262 #ifdef NONAMELESSUNION
14263 #define ExQueryDepthSList(listhead) (listhead)->s.Depth
14265 #define ExQueryDepthSList(listhead) (listhead)->Depth
14271 ExInterlockedFlushSList(
14272 _Inout_ PSLIST_HEADER ListHead
);
14274 #endif /* !defined(_WIN64) */
14276 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
14281 ExInterlockedPopEntrySList(
14282 _Inout_ PSLIST_HEADER ListHead
,
14283 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14288 ExInterlockedPushEntrySList(
14289 _Inout_ PSLIST_HEADER ListHead
,
14290 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
14291 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14293 _IRQL_requires_max_(APC_LEVEL
)
14297 ExAllocateFromPagedLookasideList(
14298 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
14300 _IRQL_requires_max_(APC_LEVEL
)
14304 ExFreeToPagedLookasideList(
14305 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14308 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
14310 #if !defined(_WIN64)
14311 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
14312 InterlockedPopEntrySList(_ListHead)
14313 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
14314 InterlockedPushEntrySList(_ListHead, _ListEntry)
14317 _IRQL_requires_max_(APC_LEVEL
)
14320 ExAllocateFromPagedLookasideList(
14321 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
)
14325 Lookaside
->L
.TotalAllocates
++;
14326 #ifdef NONAMELESSUNION
14327 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
14328 if (Entry
== NULL
) {
14329 Lookaside
->L
.u2
.AllocateMisses
++;
14330 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
14334 #else /* NONAMELESSUNION */
14335 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
14336 if (Entry
== NULL
) {
14337 Lookaside
->L
.AllocateMisses
++;
14338 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
14342 #endif /* NONAMELESSUNION */
14346 _IRQL_requires_max_(APC_LEVEL
)
14349 ExFreeToPagedLookasideList(
14350 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14353 Lookaside
->L
.TotalFrees
++;
14354 #ifdef NONAMELESSUNION
14355 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
14356 Lookaside
->L
.u3
.FreeMisses
++;
14357 (Lookaside
->L
.u5
.Free
)(Entry
);
14359 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
14361 #else /* NONAMELESSUNION */
14362 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
14363 Lookaside
->L
.FreeMisses
++;
14364 (Lookaside
->L
.Free
)(Entry
);
14366 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
14368 #endif /* NONAMELESSUNION */
14371 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
14374 /* ERESOURCE_THREAD
14375 * ExGetCurrentResourceThread(
14378 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
14380 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
14383 * ExInitializeWorkItem(
14384 * IN PWORK_QUEUE_ITEM Item,
14385 * IN PWORKER_THREAD_ROUTINE Routine,
14386 * IN PVOID Context)
14388 #define ExInitializeWorkItem(Item, Routine, Context) \
14390 (Item)->WorkerRoutine = Routine; \
14391 (Item)->Parameter = Context; \
14392 (Item)->List.Flink = NULL; \
14397 ExInitializeFastMutex(
14398 _Out_ PFAST_MUTEX FastMutex
)
14400 FastMutex
->Count
= FM_LOCK_BIT
;
14401 FastMutex
->Owner
= NULL
;
14402 FastMutex
->Contention
= 0;
14403 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
14408 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14409 _IRQL_requires_max_(APC_LEVEL
)
14410 _Requires_lock_held_(_Global_critical_region_
)
14414 ExAcquireFastMutexUnsafe(
14415 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14416 PFAST_MUTEX FastMutex
);
14418 _IRQL_requires_max_(APC_LEVEL
)
14419 _Requires_lock_held_(_Global_critical_region_
)
14423 ExReleaseFastMutexUnsafe(
14424 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14425 PFAST_MUTEX FastMutex
);
14427 _Requires_lock_held_(_Global_critical_region_
)
14428 _Requires_lock_not_held_(*Resource
)
14429 _When_(Wait
!=0, _Acquires_exclusive_lock_(*Resource
))
14430 _IRQL_requires_max_(APC_LEVEL
)
14431 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14432 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14436 ExAcquireResourceExclusiveLite(
14437 _Inout_ PERESOURCE Resource
,
14438 _In_ _Literal_ BOOLEAN Wait
);
14440 _IRQL_requires_max_(APC_LEVEL
)
14441 _Requires_lock_held_(_Global_critical_region_
)
14442 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14443 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14447 ExAcquireResourceSharedLite(
14448 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14449 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
14450 PERESOURCE Resource
,
14451 _In_ BOOLEAN Wait
);
14453 _IRQL_requires_max_(APC_LEVEL
)
14454 _Requires_lock_held_(_Global_critical_region_
)
14455 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14456 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14460 ExAcquireSharedStarveExclusive(
14461 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14462 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
14463 PERESOURCE Resource
,
14464 _In_ BOOLEAN Wait
);
14466 _IRQL_requires_max_(APC_LEVEL
)
14467 _Requires_lock_held_(_Global_critical_region_
)
14468 _When_(Wait
!=0, _Post_satisfies_(return == 1))
14469 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
14473 ExAcquireSharedWaitForExclusive(
14474 _Inout_
_Requires_lock_not_held_(*_Curr_
)
14475 _When_(return!=0, _Acquires_lock_(*_Curr_
))
14476 PERESOURCE Resource
,
14477 _In_ BOOLEAN Wait
);
14479 __drv_preferredFunction("ExAllocatePoolWithTag",
14480 "No tag interferes with debugging.")
14481 __drv_allocatesMem(Mem
)
14482 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14483 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14484 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14485 __drv_reportError("Must succeed pool allocations are forbidden. "
14486 "Allocation failures cause a system crash"))
14487 _When_((PoolType
& (NonPagedPoolMustSucceed
|
14488 POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14489 _Post_maybenull_ _Must_inspect_result_
)
14490 _When_((PoolType
& (NonPagedPoolMustSucceed
|
14491 POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14493 _Post_writable_byte_size_(NumberOfBytes
)
14498 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
14499 _In_ SIZE_T NumberOfBytes
);
14501 __drv_preferredFunction("ExAllocatePoolWithQuotaTag",
14502 "No tag interferes with debugging.")
14503 __drv_allocatesMem(Mem
)
14504 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14505 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14506 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14507 __drv_reportError("Must succeed pool allocations are forbidden. "
14508 "Allocation failures cause a system crash"))
14509 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
14510 _Post_maybenull_ _Must_inspect_result_
)
14511 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
14512 _Post_writable_byte_size_(NumberOfBytes
)
14516 ExAllocatePoolWithQuota(
14517 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
14518 _In_ SIZE_T NumberOfBytes
);
14520 __drv_allocatesMem(Mem
)
14521 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14522 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14523 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14524 __drv_reportError("Must succeed pool allocations are forbidden. "
14525 "Allocation failures cause a system crash"))
14526 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
14527 _Post_maybenull_ _Must_inspect_result_
)
14528 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
14529 _Post_writable_byte_size_(NumberOfBytes
)
14533 ExAllocatePoolWithQuotaTag(
14534 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
14535 _In_ SIZE_T NumberOfBytes
,
14538 #ifndef POOL_TAGGING
14539 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
14542 __drv_allocatesMem(Mem
)
14543 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14544 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14545 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14546 __drv_reportError("Must succeed pool allocations are forbidden. "
14547 "Allocation failures cause a system crash"))
14548 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14549 _Post_maybenull_ _Must_inspect_result_
)
14550 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14552 _Post_writable_byte_size_(NumberOfBytes
)
14553 _Function_class_(ALLOCATE_FUNCTION
)
14557 ExAllocatePoolWithTag(
14558 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
14559 _In_ SIZE_T NumberOfBytes
,
14562 #ifndef POOL_TAGGING
14563 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
14566 __drv_allocatesMem(Mem
)
14567 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
14568 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
14569 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
14570 __drv_reportError("Must succeed pool allocations are forbidden. "
14571 "Allocation failures cause a system crash"))
14572 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
14573 _Post_maybenull_ _Must_inspect_result_
)
14574 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
14576 _Post_writable_byte_size_(NumberOfBytes
)
14580 ExAllocatePoolWithTagPriority(
14581 _In_
__drv_strictTypeMatch(__drv_typeCond
) POOL_TYPE PoolType
,
14582 _In_ SIZE_T NumberOfBytes
,
14584 _In_
__drv_strictTypeMatch(__drv_typeExpr
) EX_POOL_PRIORITY Priority
);
14586 _IRQL_requires_max_(DISPATCH_LEVEL
)
14590 ExConvertExclusiveToSharedLite(
14591 _Inout_
_Requires_lock_held_(*_Curr_
) PERESOURCE Resource
);
14593 _IRQL_requires_max_(APC_LEVEL
)
14598 _Outptr_ PCALLBACK_OBJECT
*CallbackObject
,
14599 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
14600 _In_ BOOLEAN Create
,
14601 _In_ BOOLEAN AllowMultipleCallbacks
);
14606 ExDeleteNPagedLookasideList(
14607 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
);
14609 _IRQL_requires_max_(APC_LEVEL
)
14613 ExDeletePagedLookasideList(
14614 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
14616 _IRQL_requires_max_(DISPATCH_LEVEL
)
14620 ExDeleteResourceLite(
14621 _Inout_ PERESOURCE Resource
);
14623 _IRQL_requires_max_(DISPATCH_LEVEL
)
14624 _Function_class_(FREE_FUNCTION
)
14629 _In_
__drv_freesMem(Mem
) PVOID P
);
14631 _IRQL_requires_max_(DISPATCH_LEVEL
)
14636 _In_
__drv_freesMem(Mem
) PVOID P
,
14639 _IRQL_requires_max_(DISPATCH_LEVEL
)
14643 ExGetExclusiveWaiterCount(
14644 _In_ PERESOURCE Resource
);
14646 _IRQL_requires_max_(DISPATCH_LEVEL
)
14650 ExGetPreviousMode(VOID
);
14652 _IRQL_requires_max_(DISPATCH_LEVEL
)
14656 ExGetSharedWaiterCount(
14657 _In_ PERESOURCE Resource
);
14659 _IRQL_requires_max_(DISPATCH_LEVEL
)
14663 ExInitializeNPagedLookasideList(
14664 _Out_ PNPAGED_LOOKASIDE_LIST Lookaside
,
14665 _In_opt_ PALLOCATE_FUNCTION Allocate
,
14666 _In_opt_ PFREE_FUNCTION Free
,
14670 _In_ USHORT Depth
);
14672 _IRQL_requires_max_(APC_LEVEL
)
14676 ExInitializePagedLookasideList(
14677 _Out_ PPAGED_LOOKASIDE_LIST Lookaside
,
14678 _In_opt_ PALLOCATE_FUNCTION Allocate
,
14679 _In_opt_ PFREE_FUNCTION Free
,
14683 _In_ USHORT Depth
);
14685 _IRQL_requires_max_(DISPATCH_LEVEL
)
14689 ExInitializeResourceLite(
14690 _Out_ PERESOURCE Resource
);
14695 ExInterlockedAddLargeInteger(
14696 _Inout_ PLARGE_INTEGER Addend
,
14697 _In_ LARGE_INTEGER Increment
,
14698 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14700 #if defined(_WIN64)
14701 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
14702 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
14704 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
14705 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
14711 ExInterlockedAddUlong(
14712 _Inout_ PULONG Addend
,
14713 _In_ ULONG Increment
,
14714 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14716 #if defined(_AMD64_) || defined(_IA64_)
14718 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
14719 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
14721 #elif defined(_X86_)
14726 ExfInterlockedCompareExchange64(
14727 _Inout_ _Interlocked_operand_ LONGLONG
volatile *Destination
,
14728 _In_ PLONGLONG Exchange
,
14729 _In_ PLONGLONG Comperand
);
14731 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
14732 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
14739 ExInterlockedCompareExchange64(
14740 IN OUT LONGLONG
volatile *Destination
,
14741 IN PLONGLONG Exchange
,
14742 IN PLONGLONG Comparand
,
14743 IN PKSPIN_LOCK Lock
);
14745 #endif /* defined(_AMD64_) || defined(_IA64_) */
14750 ExInterlockedInsertHeadList(
14751 _Inout_ PLIST_ENTRY ListHead
,
14752 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
14753 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14758 ExInterlockedInsertTailList(
14759 _Inout_ PLIST_ENTRY ListHead
,
14760 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
14761 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14766 ExInterlockedPopEntryList(
14767 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
14768 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14773 ExInterlockedPushEntryList(
14774 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
14775 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
14776 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14781 ExInterlockedRemoveHeadList(
14782 _Inout_ PLIST_ENTRY ListHead
,
14783 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14785 _IRQL_requires_max_(PASSIVE_LEVEL
)
14789 ExIsProcessorFeaturePresent(
14790 _In_ ULONG ProcessorFeature
);
14792 _IRQL_requires_max_(DISPATCH_LEVEL
)
14796 ExIsResourceAcquiredExclusiveLite(
14797 _In_ PERESOURCE Resource
);
14799 _IRQL_requires_max_(DISPATCH_LEVEL
)
14803 ExIsResourceAcquiredSharedLite(
14804 _In_ PERESOURCE Resource
);
14806 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
14811 ExLocalTimeToSystemTime(
14812 _In_ PLARGE_INTEGER LocalTime
,
14813 _Out_ PLARGE_INTEGER SystemTime
);
14815 _IRQL_requires_max_(DISPATCH_LEVEL
)
14820 _In_ PCALLBACK_OBJECT CallbackObject
,
14821 _In_opt_ PVOID Argument1
,
14822 _In_opt_ PVOID Argument2
);
14824 _IRQL_requires_max_(DISPATCH_LEVEL
)
14829 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
,
14830 __drv_strictTypeMatch(__drv_typeExpr
) _In_ WORK_QUEUE_TYPE QueueType
);
14832 _IRQL_requires_max_(APC_LEVEL
)
14838 _In_ NTSTATUS Status
);
14840 _IRQL_requires_max_(APC_LEVEL
)
14844 ExRegisterCallback(
14845 _Inout_ PCALLBACK_OBJECT CallbackObject
,
14846 _In_ PCALLBACK_FUNCTION CallbackFunction
,
14847 _In_opt_ PVOID CallbackContext
);
14849 _IRQL_requires_max_(DISPATCH_LEVEL
)
14853 ExReinitializeResourceLite(
14854 _Inout_ PERESOURCE Resource
);
14856 _IRQL_requires_max_(DISPATCH_LEVEL
)
14857 _Requires_lock_held_(_Global_critical_region_
)
14861 ExReleaseResourceForThreadLite(
14862 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14863 PERESOURCE Resource
,
14864 _In_ ERESOURCE_THREAD ResourceThreadId
);
14866 _Requires_lock_held_(_Global_critical_region_
)
14867 _Requires_lock_held_(*Resource
)
14868 _Releases_lock_(*Resource
)
14869 _IRQL_requires_max_(DISPATCH_LEVEL
)
14873 ExReleaseResourceLite(
14874 _Inout_ PERESOURCE Resource
);
14876 _IRQL_requires_max_(DISPATCH_LEVEL
)
14880 ExSetResourceOwnerPointer(
14881 _Inout_ PERESOURCE Resource
,
14882 _In_ PVOID OwnerPointer
);
14884 _IRQL_requires_max_(APC_LEVEL
)
14888 ExSetTimerResolution(
14889 _In_ ULONG DesiredTime
,
14890 _In_ BOOLEAN SetResolution
);
14895 ExSystemTimeToLocalTime(
14896 _In_ PLARGE_INTEGER SystemTime
,
14897 _Out_ PLARGE_INTEGER LocalTime
);
14899 _IRQL_requires_max_(APC_LEVEL
)
14903 ExUnregisterCallback(
14904 _Inout_ PVOID CbRegistration
);
14906 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14908 #if (NTDDI_VERSION >= NTDDI_WINXP)
14910 _Must_inspect_result_
14911 _Post_satisfies_(return == 0 || return == 1)
14915 ExAcquireRundownProtection(
14916 _Inout_ PEX_RUNDOWN_REF RunRef
);
14921 ExInitializeRundownProtection(
14922 _Out_ PEX_RUNDOWN_REF RunRef
);
14927 ExReInitializeRundownProtection(
14928 _Inout_ PEX_RUNDOWN_REF RunRef
);
14933 ExReleaseRundownProtection(
14934 _Inout_ PEX_RUNDOWN_REF RunRef
);
14939 ExRundownCompleted(
14940 _Out_ PEX_RUNDOWN_REF RunRef
);
14946 __drv_strictTypeMatch(__drv_typeExpr
) _In_ SUITE_TYPE SuiteType
);
14951 ExWaitForRundownProtectionRelease(
14952 _Inout_ PEX_RUNDOWN_REF RunRef
);
14953 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14955 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
14957 _Must_inspect_result_
14958 _Post_satisfies_(return == 0 || return == 1)
14962 ExAcquireRundownProtectionEx(
14963 _Inout_ PEX_RUNDOWN_REF RunRef
,
14969 ExReleaseRundownProtectionEx(
14970 _Inout_ PEX_RUNDOWN_REF RunRef
,
14973 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
14975 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
14977 _Must_inspect_result_
14978 _IRQL_requires_max_(APC_LEVEL
)
14980 PEX_RUNDOWN_REF_CACHE_AWARE
14982 ExAllocateCacheAwareRundownProtection(
14983 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
14984 _In_ ULONG PoolTag
);
14986 _IRQL_requires_max_(APC_LEVEL
)
14990 ExSizeOfRundownProtectionCacheAware(VOID
);
14992 _IRQL_requires_max_(APC_LEVEL
)
14993 _Acquires_lock_(_Global_critical_region_
)
14997 ExEnterCriticalRegionAndAcquireResourceShared(
14998 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_shared_lock_(*_Curr_
)
14999 PERESOURCE Resource
);
15001 _IRQL_requires_max_(APC_LEVEL
)
15002 _Acquires_lock_(_Global_critical_region_
)
15006 ExEnterCriticalRegionAndAcquireResourceExclusive(
15007 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)
15008 PERESOURCE Resource
);
15010 _IRQL_requires_max_(APC_LEVEL
)
15011 _Acquires_lock_(_Global_critical_region_
)
15015 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
15016 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15017 PERESOURCE Resource
);
15019 _IRQL_requires_max_(DISPATCH_LEVEL
)
15020 _Releases_lock_(_Global_critical_region_
)
15024 ExReleaseResourceAndLeaveCriticalRegion(
15025 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15026 PERESOURCE Resource
);
15028 _IRQL_requires_max_(APC_LEVEL
)
15032 ExInitializeRundownProtectionCacheAware(
15033 _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15034 _In_ SIZE_T RunRefSize
);
15036 _IRQL_requires_max_(APC_LEVEL
)
15040 ExFreeCacheAwareRundownProtection(
15041 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15043 _Must_inspect_result_
15044 _Post_satisfies_(return == 0 || return == 1)
15048 ExAcquireRundownProtectionCacheAware(
15049 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15054 ExReleaseRundownProtectionCacheAware(
15055 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15057 _Must_inspect_result_
15058 _Post_satisfies_(return == 0 || return == 1)
15062 ExAcquireRundownProtectionCacheAwareEx(
15063 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15069 ExReleaseRundownProtectionCacheAwareEx(
15070 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
15076 ExWaitForRundownProtectionReleaseCacheAware(
15077 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
15082 ExReInitializeRundownProtectionCacheAware(
15083 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15088 ExRundownCompletedCacheAware(
15089 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15091 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
15093 #if (NTDDI_VERSION >= NTDDI_VISTA)
15095 _IRQL_requires_max_(DISPATCH_LEVEL
)
15099 ExInitializeLookasideListEx(
15100 _Out_ PLOOKASIDE_LIST_EX Lookaside
,
15101 _In_opt_ PALLOCATE_FUNCTION_EX Allocate
,
15102 _In_opt_ PFREE_FUNCTION_EX Free
,
15103 _In_ POOL_TYPE PoolType
,
15107 _In_ USHORT Depth
);
15109 _IRQL_requires_max_(DISPATCH_LEVEL
)
15113 ExDeleteLookasideListEx(
15114 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15116 _IRQL_requires_max_(DISPATCH_LEVEL
)
15120 ExFlushLookasideListEx(
15121 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15123 _Must_inspect_result_
15124 _IRQL_requires_max_(DISPATCH_LEVEL
)
15127 ExAllocateFromLookasideListEx(
15128 _Inout_ PLOOKASIDE_LIST_EX Lookaside
)
15132 Lookaside
->L
.TotalAllocates
+= 1;
15133 #ifdef NONAMELESSUNION
15134 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15135 if (Entry
== NULL
) {
15136 Lookaside
->L
.u2
.AllocateMisses
+= 1;
15137 Entry
= (Lookaside
->L
.u4
.AllocateEx
)(Lookaside
->L
.Type
,
15142 #else /* NONAMELESSUNION */
15143 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15144 if (Entry
== NULL
) {
15145 Lookaside
->L
.AllocateMisses
+= 1;
15146 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
15151 #endif /* NONAMELESSUNION */
15155 _IRQL_requires_max_(DISPATCH_LEVEL
)
15158 ExFreeToLookasideListEx(
15159 _Inout_ PLOOKASIDE_LIST_EX Lookaside
,
15162 Lookaside
->L
.TotalFrees
+= 1;
15163 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15164 Lookaside
->L
.FreeMisses
+= 1;
15165 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
15167 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15172 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15174 #if (NTDDI_VERSION >= NTDDI_WIN7)
15176 _IRQL_requires_max_(DISPATCH_LEVEL
)
15180 ExSetResourceOwnerPointerEx(
15181 _Inout_ PERESOURCE Resource
,
15182 _In_ PVOID OwnerPointer
,
15185 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
15187 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15189 _IRQL_requires_max_(DISPATCH_LEVEL
)
15190 static __inline PVOID
15191 ExAllocateFromNPagedLookasideList(
15192 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
)
15196 Lookaside
->L
.TotalAllocates
++;
15197 #ifdef NONAMELESSUNION
15198 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15199 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
,
15200 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15202 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15204 if (Entry
== NULL
) {
15205 Lookaside
->L
.u2
.AllocateMisses
++;
15206 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
15210 #else /* NONAMELESSUNION */
15211 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15212 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
15213 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15215 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15217 if (Entry
== NULL
) {
15218 Lookaside
->L
.AllocateMisses
++;
15219 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
15223 #endif /* NONAMELESSUNION */
15227 _IRQL_requires_max_(DISPATCH_LEVEL
)
15228 static __inline VOID
15229 ExFreeToNPagedLookasideList(
15230 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
,
15233 Lookaside
->L
.TotalFrees
++;
15234 #ifdef NONAMELESSUNION
15235 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
15236 Lookaside
->L
.u3
.FreeMisses
++;
15237 (Lookaside
->L
.u5
.Free
)(Entry
);
15239 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15240 ExInterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
,
15241 (PSLIST_ENTRY
)Entry
,
15242 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15244 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
15247 #else /* NONAMELESSUNION */
15248 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15249 Lookaside
->L
.FreeMisses
++;
15250 (Lookaside
->L
.Free
)(Entry
);
15252 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15253 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
15254 (PSLIST_ENTRY
)Entry
,
15255 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15257 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15260 #endif /* NONAMELESSUNION */
15263 /******************************************************************************
15264 * Object Manager Functions *
15265 ******************************************************************************/
15267 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15268 _IRQL_requires_max_(DISPATCH_LEVEL
)
15272 ObfDereferenceObject(
15273 _In_ PVOID Object
);
15274 #define ObDereferenceObject ObfDereferenceObject
15276 _IRQL_requires_max_(APC_LEVEL
)
15280 ObGetObjectSecurity(
15282 _Out_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
15283 _Out_ PBOOLEAN MemoryAllocated
);
15285 _IRQL_requires_max_(DISPATCH_LEVEL
)
15289 ObfReferenceObject(
15290 _In_ PVOID Object
);
15291 #define ObReferenceObject ObfReferenceObject
15293 _IRQL_requires_max_(APC_LEVEL
)
15297 ObReferenceObjectByHandle(
15298 _In_ HANDLE Handle
,
15299 _In_ ACCESS_MASK DesiredAccess
,
15300 _In_opt_ POBJECT_TYPE ObjectType
,
15301 _In_ KPROCESSOR_MODE AccessMode
,
15302 _Out_ PVOID
*Object
,
15303 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15305 _IRQL_requires_max_(DISPATCH_LEVEL
)
15309 ObReferenceObjectByPointer(
15311 _In_ ACCESS_MASK DesiredAccess
,
15312 _In_opt_ POBJECT_TYPE ObjectType
,
15313 _In_ KPROCESSOR_MODE AccessMode
);
15315 _IRQL_requires_max_(APC_LEVEL
)
15319 ObReleaseObjectSecurity(
15320 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
15321 _In_ BOOLEAN MemoryAllocated
);
15322 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15324 #if (NTDDI_VERSION >= NTDDI_VISTA)
15328 ObDereferenceObjectDeferDelete(
15329 _In_ PVOID Object
);
15332 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
15336 ObRegisterCallbacks(
15337 _In_ POB_CALLBACK_REGISTRATION CallbackRegistration
,
15338 _Outptr_ PVOID
*RegistrationHandle
);
15343 ObUnRegisterCallbacks(
15344 _In_ PVOID RegistrationHandle
);
15349 ObGetFilterVersion(VOID
);
15351 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
15353 #if (NTDDI_VERSION >= NTDDI_WIN7)
15354 _IRQL_requires_max_(APC_LEVEL
)
15358 ObReferenceObjectByHandleWithTag(
15359 _In_ HANDLE Handle
,
15360 _In_ ACCESS_MASK DesiredAccess
,
15361 _In_opt_ POBJECT_TYPE ObjectType
,
15362 _In_ KPROCESSOR_MODE AccessMode
,
15364 _Out_ PVOID
*Object
,
15365 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15367 _IRQL_requires_max_(DISPATCH_LEVEL
)
15371 ObfReferenceObjectWithTag(
15375 _IRQL_requires_max_(DISPATCH_LEVEL
)
15379 ObReferenceObjectByPointerWithTag(
15381 _In_ ACCESS_MASK DesiredAccess
,
15382 _In_opt_ POBJECT_TYPE ObjectType
,
15383 _In_ KPROCESSOR_MODE AccessMode
,
15386 _IRQL_requires_max_(DISPATCH_LEVEL
)
15390 ObfDereferenceObjectWithTag(
15397 ObDereferenceObjectDeferDeleteWithTag(
15401 #define ObDereferenceObject ObfDereferenceObject
15402 #define ObReferenceObject ObfReferenceObject
15403 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
15404 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
15405 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15407 /******************************************************************************
15408 * Process Manager Functions *
15409 ******************************************************************************/
15414 PsWrapApcWow64Thread(
15415 _Inout_ PVOID
*ApcContext
,
15416 _Inout_ PVOID
*ApcRoutine
);
15420 * PsGetCurrentProcess(VOID)
15422 #define PsGetCurrentProcess IoGetCurrentProcess
15424 #if !defined(_PSGETCURRENTTHREAD_)
15425 #define _PSGETCURRENTTHREAD_
15426 _IRQL_requires_max_(DISPATCH_LEVEL
)
15430 PsGetCurrentThread(VOID
)
15432 return (PETHREAD
)KeGetCurrentThread();
15434 #endif /* !_PSGETCURRENTTHREAD_ */
15437 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15439 _IRQL_requires_max_(APC_LEVEL
)
15440 _Post_satisfies_(return <= 0)
15441 _Must_inspect_result_
15445 PsCreateSystemThread(
15446 _Out_ PHANDLE ThreadHandle
,
15447 _In_ ULONG DesiredAccess
,
15448 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
15449 _In_opt_ HANDLE ProcessHandle
,
15450 _Out_opt_ PCLIENT_ID ClientId
,
15451 _In_ PKSTART_ROUTINE StartRoutine
,
15452 _In_opt_
_When_(return==0, __drv_aliasesMem
) PVOID StartContext
);
15454 _IRQL_requires_max_(PASSIVE_LEVEL
)
15458 PsTerminateSystemThread(
15459 _In_ NTSTATUS ExitStatus
);
15461 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15464 /******************************************************************************
15465 * WMI Library Support Functions *
15466 ******************************************************************************/
15469 #if (NTDDI_VERSION >= NTDDI_WINXP)
15470 _IRQL_requires_max_(HIGH_LEVEL
)
15475 _In_ TRACEHANDLE LoggerHandle
,
15476 _In_ ULONG MessageFlags
,
15477 _In_ LPGUID MessageGuid
,
15478 _In_ USHORT MessageNumber
,
15481 #endif /* RUN_WPP */
15483 #if (NTDDI_VERSION >= NTDDI_WINXP)
15485 _IRQL_requires_max_(APC_LEVEL
)
15489 WmiQueryTraceInformation(
15490 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
15491 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
15492 _In_ ULONG TraceInformationLength
,
15493 _Out_opt_ PULONG RequiredLength
,
15494 _In_opt_ PVOID Buffer
);
15497 /* FIXME: Get va_list from where? */
15498 _IRQL_requires_max_(HIGH_LEVEL
)
15503 _In_ TRACEHANDLE LoggerHandle
,
15504 _In_ ULONG MessageFlags
,
15505 _In_ LPGUID MessageGuid
,
15506 _In_ USHORT MessageNumber
,
15507 _In_
va_list MessageArgList
);
15510 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15512 #ifndef TRACE_INFORMATION_CLASS_DEFINE
15514 #if (NTDDI_VERSION >= NTDDI_WINXP)
15515 _IRQL_requires_max_(APC_LEVEL
)
15519 WmiQueryTraceInformation(
15520 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
15521 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
15522 _In_ ULONG TraceInformationLength
,
15523 _Out_opt_ PULONG RequiredLength
,
15524 _In_opt_ PVOID Buffer
);
15527 #define TRACE_INFORMATION_CLASS_DEFINE
15529 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
15531 #if (NTDDI_VERSION >= NTDDI_VISTA)
15533 _IRQL_requires_max_(PASSIVE_LEVEL
)
15538 _In_ LPCGUID ProviderId
,
15539 _In_opt_ PETWENABLECALLBACK EnableCallback
,
15540 _In_opt_ PVOID CallbackContext
,
15541 _Out_ PREGHANDLE RegHandle
);
15543 _IRQL_requires_max_(PASSIVE_LEVEL
)
15548 _In_ REGHANDLE RegHandle
);
15550 _IRQL_requires_max_(HIGH_LEVEL
)
15555 _In_ REGHANDLE RegHandle
,
15556 _In_ PCEVENT_DESCRIPTOR EventDescriptor
);
15558 _IRQL_requires_max_(HIGH_LEVEL
)
15562 EtwProviderEnabled(
15563 _In_ REGHANDLE RegHandle
,
15565 _In_ ULONGLONG Keyword
);
15567 _When_(ControlCode
==EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(HIGH_LEVEL
))
15568 _When_(ControlCode
!=EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(APC_LEVEL
))
15572 EtwActivityIdControl(
15573 _In_ ULONG ControlCode
,
15574 _Inout_updates_bytes_(sizeof(GUID
)) LPGUID ActivityId
);
15576 _IRQL_requires_max_(HIGH_LEVEL
)
15581 _In_ REGHANDLE RegHandle
,
15582 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15583 _In_opt_ LPCGUID ActivityId
,
15584 _In_ ULONG UserDataCount
,
15585 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15587 _IRQL_requires_max_(HIGH_LEVEL
)
15592 _In_ REGHANDLE RegHandle
,
15593 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15594 _In_opt_ LPCGUID ActivityId
,
15595 _In_opt_ LPCGUID RelatedActivityId
,
15596 _In_ ULONG UserDataCount
,
15597 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15599 _IRQL_requires_max_(HIGH_LEVEL
)
15604 _In_ REGHANDLE RegHandle
,
15606 _In_ ULONGLONG Keyword
,
15607 _In_opt_ LPCGUID ActivityId
,
15608 _In_ PCWSTR String
);
15610 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15612 #if (NTDDI_VERSION >= NTDDI_WIN7)
15613 _IRQL_requires_max_(HIGH_LEVEL
)
15618 _In_ REGHANDLE RegHandle
,
15619 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
15620 _In_ ULONG64 Filter
,
15622 _In_opt_ LPCGUID ActivityId
,
15623 _In_opt_ LPCGUID RelatedActivityId
,
15624 _In_ ULONG UserDataCount
,
15625 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
15630 /******************************************************************************
15631 * Kernel Debugger Functions *
15632 ******************************************************************************/
15639 _In_z_ _Printf_format_string_ PCSTR Format
,
15642 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15646 DbgPrintReturnControlC(
15647 _In_z_ _Printf_format_string_ PCCH Format
,
15651 #if (NTDDI_VERSION >= NTDDI_WINXP)
15657 _In_ ULONG ComponentId
,
15659 _In_z_ _Printf_format_string_ PCSTR Format
,
15662 #ifdef _VA_LIST_DEFINED
15668 _In_ ULONG ComponentId
,
15670 _In_z_ PCCH Format
,
15676 vDbgPrintExWithPrefix(
15677 _In_z_ PCCH Prefix
,
15678 _In_ ULONG ComponentId
,
15680 _In_z_ PCCH Format
,
15683 #endif /* _VA_LIST_DEFINED */
15688 DbgQueryDebugFilterState(
15689 _In_ ULONG ComponentId
,
15695 DbgSetDebugFilterState(
15696 _In_ ULONG ComponentId
,
15698 _In_ BOOLEAN State
);
15700 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15702 #if (NTDDI_VERSION >= NTDDI_VISTA)
15705 (*PDEBUG_PRINT_CALLBACK
)(
15706 _In_ PSTRING Output
,
15707 _In_ ULONG ComponentId
,
15713 DbgSetDebugPrintCallback(
15714 _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
15715 _In_ BOOLEAN Enable
);
15717 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15719 #endif /* _DBGNT_ */
15723 #define KdPrint(_x_) DbgPrint _x_
15724 #define KdPrintEx(_x_) DbgPrintEx _x_
15725 #define vKdPrintEx(_x_) vDbgPrintEx _x_
15726 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
15727 #define KdBreakPoint() DbgBreakPoint()
15728 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
15732 #define KdPrint(_x_)
15733 #define KdPrintEx(_x_)
15734 #define vKdPrintEx(_x_)
15735 #define vKdPrintExWithPrefix(_x_)
15736 #define KdBreakPoint()
15737 #define KdBreakPointWithStatus(s)
15741 #if defined(__GNUC__)
15743 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
15744 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
15745 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
15746 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
15748 #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
15750 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
15751 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
15752 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
15753 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
15757 extern BOOLEAN KdDebuggerNotPresent
;
15758 extern BOOLEAN KdDebuggerEnabled
;
15759 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
15760 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
15764 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15769 KdDisableDebugger(VOID
);
15774 KdEnableDebugger(VOID
);
15776 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
15777 #define DbgBreakPoint __debugbreak
15779 __analysis_noreturn
15782 DbgBreakPoint(VOID
);
15785 __analysis_noreturn
15789 DbgBreakPointWithStatus(
15790 _In_ ULONG Status
);
15792 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15794 #if (NTDDI_VERSION >= NTDDI_WS03)
15798 KdRefreshDebuggerNotPresent(VOID
);
15801 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
15806 _In_ KD_OPTION Option
,
15807 _In_opt_ ULONG InBufferBytes
,
15808 _In_ PVOID InBuffer
,
15809 _In_opt_ ULONG OutBufferBytes
,
15810 _Out_ PVOID OutBuffer
,
15811 _Out_opt_ PULONG OutBufferNeeded
);
15813 /* Hardware Abstraction Layer Functions */
15815 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15817 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
15819 __drv_preferredFunction("AllocateCommonBuffer","Obsolete")
15823 HalAllocateCommonBuffer(
15824 _In_ PDMA_ADAPTER DmaAdapter
,
15826 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
15827 _In_ BOOLEAN CacheEnabled
)
15829 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
15830 PVOID commonBuffer
;
15832 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
15833 ASSERT( allocateCommonBuffer
!= NULL
);
15834 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
15835 return commonBuffer
;
15838 __drv_preferredFunction("FreeCommonBuffer","Obsolete")
15842 HalFreeCommonBuffer(
15843 _In_ PDMA_ADAPTER DmaAdapter
,
15845 _In_ PHYSICAL_ADDRESS LogicalAddress
,
15846 _In_ PVOID VirtualAddress
,
15847 _In_ BOOLEAN CacheEnabled
)
15849 PFREE_COMMON_BUFFER freeCommonBuffer
;
15851 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
15852 ASSERT( freeCommonBuffer
!= NULL
);
15853 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
15856 __drv_preferredFunction("ReadDmaCounter","Obsolete")
15861 _In_ PDMA_ADAPTER DmaAdapter
)
15863 PREAD_DMA_COUNTER readDmaCounter
;
15866 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
15867 ASSERT( readDmaCounter
!= NULL
);
15868 counter
= readDmaCounter( DmaAdapter
);
15874 HalGetDmaAlignment(
15875 _In_ PDMA_ADAPTER DmaAdapter
)
15877 PGET_DMA_ALIGNMENT getDmaAlignment
;
15880 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
15881 ASSERT( getDmaAlignment
!= NULL
);
15882 alignment
= getDmaAlignment( DmaAdapter
);
15886 #endif /* USE_DMA_MACROS ... */
15888 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15893 #include <ktmtypes.h>
15895 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
15896 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
15897 #define TRANSACTIONMANAGER_RECOVER (0x0004)
15898 #define TRANSACTIONMANAGER_RENAME (0x0008)
15899 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
15900 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
15902 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
15903 TRANSACTIONMANAGER_QUERY_INFORMATION)
15905 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
15906 TRANSACTIONMANAGER_SET_INFORMATION |\
15907 TRANSACTIONMANAGER_RECOVER |\
15908 TRANSACTIONMANAGER_RENAME |\
15909 TRANSACTIONMANAGER_CREATE_RM)
15911 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
15913 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
15914 TRANSACTIONMANAGER_GENERIC_READ |\
15915 TRANSACTIONMANAGER_GENERIC_WRITE |\
15916 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
15917 TRANSACTIONMANAGER_BIND_TRANSACTION)
15919 #define TRANSACTION_QUERY_INFORMATION (0x0001)
15920 #define TRANSACTION_SET_INFORMATION (0x0002)
15921 #define TRANSACTION_ENLIST (0x0004)
15922 #define TRANSACTION_COMMIT (0x0008)
15923 #define TRANSACTION_ROLLBACK (0x0010)
15924 #define TRANSACTION_PROPAGATE (0x0020)
15925 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
15927 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
15928 TRANSACTION_QUERY_INFORMATION |\
15931 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
15932 TRANSACTION_SET_INFORMATION |\
15933 TRANSACTION_COMMIT |\
15934 TRANSACTION_ENLIST |\
15935 TRANSACTION_ROLLBACK |\
15936 TRANSACTION_PROPAGATE |\
15939 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
15940 TRANSACTION_COMMIT |\
15941 TRANSACTION_ROLLBACK |\
15944 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
15945 TRANSACTION_GENERIC_READ |\
15946 TRANSACTION_GENERIC_WRITE |\
15947 TRANSACTION_GENERIC_EXECUTE)
15949 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
15950 STANDARD_RIGHTS_WRITE |\
15951 TRANSACTION_SET_INFORMATION |\
15952 TRANSACTION_ENLIST |\
15953 TRANSACTION_ROLLBACK |\
15954 TRANSACTION_PROPAGATE |\
15957 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
15958 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
15959 #define RESOURCEMANAGER_RECOVER (0x0004)
15960 #define RESOURCEMANAGER_ENLIST (0x0008)
15961 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
15962 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
15963 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
15965 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
15966 RESOURCEMANAGER_QUERY_INFORMATION |\
15969 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
15970 RESOURCEMANAGER_SET_INFORMATION |\
15971 RESOURCEMANAGER_RECOVER |\
15972 RESOURCEMANAGER_ENLIST |\
15973 RESOURCEMANAGER_GET_NOTIFICATION |\
15974 RESOURCEMANAGER_REGISTER_PROTOCOL |\
15975 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
15978 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
15979 RESOURCEMANAGER_RECOVER |\
15980 RESOURCEMANAGER_ENLIST |\
15981 RESOURCEMANAGER_GET_NOTIFICATION |\
15982 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
15985 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
15986 RESOURCEMANAGER_GENERIC_READ |\
15987 RESOURCEMANAGER_GENERIC_WRITE |\
15988 RESOURCEMANAGER_GENERIC_EXECUTE)
15990 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
15991 #define ENLISTMENT_SET_INFORMATION (0x0002)
15992 #define ENLISTMENT_RECOVER (0x0004)
15993 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
15994 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
15996 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
15997 ENLISTMENT_QUERY_INFORMATION)
15999 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16000 ENLISTMENT_SET_INFORMATION |\
16001 ENLISTMENT_RECOVER |\
16002 ENLISTMENT_SUBORDINATE_RIGHTS |\
16003 ENLISTMENT_SUPERIOR_RIGHTS)
16005 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16006 ENLISTMENT_RECOVER |\
16007 ENLISTMENT_SUBORDINATE_RIGHTS |\
16008 ENLISTMENT_SUPERIOR_RIGHTS)
16010 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16011 ENLISTMENT_GENERIC_READ |\
16012 ENLISTMENT_GENERIC_WRITE |\
16013 ENLISTMENT_GENERIC_EXECUTE)
16015 typedef enum _TRANSACTION_OUTCOME
{
16016 TransactionOutcomeUndetermined
= 1,
16017 TransactionOutcomeCommitted
,
16018 TransactionOutcomeAborted
,
16019 } TRANSACTION_OUTCOME
;
16022 typedef enum _TRANSACTION_STATE
{
16023 TransactionStateNormal
= 1,
16024 TransactionStateIndoubt
,
16025 TransactionStateCommittedNotify
,
16026 } TRANSACTION_STATE
;
16029 typedef struct _TRANSACTION_BASIC_INFORMATION
{
16030 GUID TransactionId
;
16033 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
16035 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
16037 LARGE_INTEGER VirtualClock
;
16038 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
16040 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
16042 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
16044 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
16045 ULONG LogPathLength
;
16046 _Field_size_(LogPathLength
) WCHAR LogPath
[1];
16047 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
16049 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
16050 ULONGLONG LastRecoveredLsn
;
16051 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
16053 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
16054 ULONG IsolationLevel
;
16055 ULONG IsolationFlags
;
16056 LARGE_INTEGER Timeout
;
16058 ULONG DescriptionLength
;
16059 WCHAR Description
[1];
16060 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
16062 typedef struct _TRANSACTION_BIND_INFORMATION
{
16064 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
16066 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
16068 GUID ResourceManagerId
;
16069 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
16071 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
16072 ULONG NumberOfEnlistments
;
16073 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
16074 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
16076 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
16077 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
16078 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
16080 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
16081 GUID ResourceManagerId
;
16082 ULONG DescriptionLength
;
16083 WCHAR Description
[1];
16084 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
16086 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
16087 HANDLE IoCompletionPortHandle
;
16088 ULONG_PTR CompletionKey
;
16089 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
16091 typedef enum _KTMOBJECT_TYPE
{
16092 KTMOBJECT_TRANSACTION
,
16093 KTMOBJECT_TRANSACTION_MANAGER
,
16094 KTMOBJECT_RESOURCE_MANAGER
,
16095 KTMOBJECT_ENLISTMENT
,
16097 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
16099 typedef struct _KTMOBJECT_CURSOR
{
16101 ULONG ObjectIdCount
;
16103 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
16105 typedef enum _TRANSACTION_INFORMATION_CLASS
{
16106 TransactionBasicInformation
,
16107 TransactionPropertiesInformation
,
16108 TransactionEnlistmentInformation
,
16109 TransactionSuperiorEnlistmentInformation
16110 } TRANSACTION_INFORMATION_CLASS
;
16112 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
16113 TransactionManagerBasicInformation
,
16114 TransactionManagerLogInformation
,
16115 TransactionManagerLogPathInformation
,
16116 TransactionManagerRecoveryInformation
= 4
16117 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
16119 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
16120 ResourceManagerBasicInformation
,
16121 ResourceManagerCompletionInformation
,
16122 } RESOURCEMANAGER_INFORMATION_CLASS
;
16124 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
16126 GUID TransactionId
;
16127 GUID ResourceManagerId
;
16128 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
16130 typedef struct _ENLISTMENT_CRM_INFORMATION
{
16131 GUID CrmTransactionManagerId
;
16132 GUID CrmResourceManagerId
;
16133 GUID CrmEnlistmentId
;
16134 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
16136 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
16137 EnlistmentBasicInformation
,
16138 EnlistmentRecoveryInformation
,
16139 EnlistmentCrmInformation
16140 } ENLISTMENT_INFORMATION_CLASS
;
16142 typedef struct _TRANSACTION_LIST_ENTRY
{
16143 #if defined(__cplusplus)
16148 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
16150 typedef struct _TRANSACTION_LIST_INFORMATION
{
16151 ULONG NumberOfTransactions
;
16152 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
16153 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
16156 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
16157 _Out_ PHANDLE TransactionHandle
,
16158 _In_ ACCESS_MASK DesiredAccess
,
16159 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16160 _In_opt_ LPGUID Uow
,
16161 _In_opt_ HANDLE TmHandle
,
16162 _In_opt_ ULONG CreateOptions
,
16163 _In_opt_ ULONG IsolationLevel
,
16164 _In_opt_ ULONG IsolationFlags
,
16165 _In_opt_ PLARGE_INTEGER Timeout
,
16166 _In_opt_ PUNICODE_STRING Description
);
16169 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
16170 _Out_ PHANDLE TransactionHandle
,
16171 _In_ ACCESS_MASK DesiredAccess
,
16172 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16173 _In_opt_ LPGUID Uow
,
16174 _In_opt_ HANDLE TmHandle
);
16177 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
16178 _In_ HANDLE TransactionHandle
,
16179 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16180 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16181 _In_ ULONG TransactionInformationLength
,
16182 _Out_opt_ PULONG ReturnLength
);
16185 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
16186 _In_ HANDLE TransactionHandle
,
16187 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16188 _In_ PVOID TransactionInformation
,
16189 _In_ ULONG TransactionInformationLength
);
16192 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
16193 _In_ HANDLE TransactionHandle
,
16194 _In_ BOOLEAN Wait
);
16197 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
16198 _In_ HANDLE TransactionHandle
,
16199 _In_ BOOLEAN Wait
);
16201 #if (NTDDI_VERSION >= NTDDI_VISTA)
16203 _Must_inspect_result_
16204 _IRQL_requires_max_ (APC_LEVEL
)
16209 NtCreateTransactionManager(
16210 _Out_ PHANDLE TmHandle
,
16211 _In_ ACCESS_MASK DesiredAccess
,
16212 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16213 _In_opt_ PUNICODE_STRING LogFileName
,
16214 _In_opt_ ULONG CreateOptions
,
16215 _In_opt_ ULONG CommitStrength
);
16217 _Must_inspect_result_
16218 _IRQL_requires_max_ (APC_LEVEL
)
16223 NtOpenTransactionManager(
16224 _Out_ PHANDLE TmHandle
,
16225 _In_ ACCESS_MASK DesiredAccess
,
16226 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16227 _In_opt_ PUNICODE_STRING LogFileName
,
16228 _In_opt_ LPGUID TmIdentity
,
16229 _In_opt_ ULONG OpenOptions
);
16231 _Must_inspect_result_
16232 _IRQL_requires_max_ (APC_LEVEL
)
16237 NtRenameTransactionManager(
16238 _In_ PUNICODE_STRING LogFileName
,
16239 _In_ LPGUID ExistingTransactionManagerGuid
);
16241 _Must_inspect_result_
16242 _IRQL_requires_max_ (APC_LEVEL
)
16247 NtRollforwardTransactionManager(
16248 _In_ HANDLE TransactionManagerHandle
,
16249 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16251 _Must_inspect_result_
16252 _IRQL_requires_max_ (APC_LEVEL
)
16257 NtRecoverTransactionManager(
16258 _In_ HANDLE TransactionManagerHandle
);
16260 _Must_inspect_result_
16261 _IRQL_requires_max_ (APC_LEVEL
)
16266 NtQueryInformationTransactionManager(
16267 _In_ HANDLE TransactionManagerHandle
,
16268 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16269 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16270 _In_ ULONG TransactionManagerInformationLength
,
16271 _Out_ PULONG ReturnLength
);
16273 _Must_inspect_result_
16274 _IRQL_requires_max_ (APC_LEVEL
)
16279 NtSetInformationTransactionManager(
16280 _In_opt_ HANDLE TmHandle
,
16281 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16282 _In_reads_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16283 _In_ ULONG TransactionManagerInformationLength
);
16285 _Must_inspect_result_
16286 _IRQL_requires_max_ (APC_LEVEL
)
16291 NtEnumerateTransactionObject(
16292 _In_opt_ HANDLE RootObjectHandle
,
16293 _In_ KTMOBJECT_TYPE QueryType
,
16294 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
16295 _In_ ULONG ObjectCursorLength
,
16296 _Out_ PULONG ReturnLength
);
16298 _Must_inspect_result_
16299 _IRQL_requires_max_ (APC_LEVEL
)
16304 NtCreateTransaction(
16305 _Out_ PHANDLE TransactionHandle
,
16306 _In_ ACCESS_MASK DesiredAccess
,
16307 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16308 _In_opt_ LPGUID Uow
,
16309 _In_opt_ HANDLE TmHandle
,
16310 _In_opt_ ULONG CreateOptions
,
16311 _In_opt_ ULONG IsolationLevel
,
16312 _In_opt_ ULONG IsolationFlags
,
16313 _In_opt_ PLARGE_INTEGER Timeout
,
16314 _In_opt_ PUNICODE_STRING Description
);
16316 _Must_inspect_result_
16317 _IRQL_requires_max_ (APC_LEVEL
)
16323 _Out_ PHANDLE TransactionHandle
,
16324 _In_ ACCESS_MASK DesiredAccess
,
16325 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16327 _In_opt_ HANDLE TmHandle
);
16329 _Must_inspect_result_
16330 _IRQL_requires_max_ (APC_LEVEL
)
16335 NtQueryInformationTransaction(
16336 _In_ HANDLE TransactionHandle
,
16337 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16338 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16339 _In_ ULONG TransactionInformationLength
,
16340 _Out_opt_ PULONG ReturnLength
);
16342 _Must_inspect_result_
16343 _IRQL_requires_max_ (APC_LEVEL
)
16348 NtSetInformationTransaction(
16349 _In_ HANDLE TransactionHandle
,
16350 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16351 _In_reads_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16352 _In_ ULONG TransactionInformationLength
);
16354 _IRQL_requires_max_ (APC_LEVEL
)
16359 NtCommitTransaction(
16360 _In_ HANDLE TransactionHandle
,
16361 _In_ BOOLEAN Wait
);
16363 _IRQL_requires_max_ (APC_LEVEL
)
16368 NtRollbackTransaction(
16369 _In_ HANDLE TransactionHandle
,
16370 _In_ BOOLEAN Wait
);
16372 _Must_inspect_result_
16373 _IRQL_requires_max_ (APC_LEVEL
)
16378 NtCreateEnlistment(
16379 _Out_ PHANDLE EnlistmentHandle
,
16380 _In_ ACCESS_MASK DesiredAccess
,
16381 _In_ HANDLE ResourceManagerHandle
,
16382 _In_ HANDLE TransactionHandle
,
16383 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16384 _In_opt_ ULONG CreateOptions
,
16385 _In_ NOTIFICATION_MASK NotificationMask
,
16386 _In_opt_ PVOID EnlistmentKey
);
16388 _Must_inspect_result_
16389 _IRQL_requires_max_ (APC_LEVEL
)
16395 _Out_ PHANDLE EnlistmentHandle
,
16396 _In_ ACCESS_MASK DesiredAccess
,
16397 _In_ HANDLE ResourceManagerHandle
,
16398 _In_ LPGUID EnlistmentGuid
,
16399 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
16401 _Must_inspect_result_
16402 _IRQL_requires_max_ (APC_LEVEL
)
16407 NtQueryInformationEnlistment(
16408 _In_ HANDLE EnlistmentHandle
,
16409 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16410 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16411 _In_ ULONG EnlistmentInformationLength
,
16412 _Out_ PULONG ReturnLength
);
16414 _Must_inspect_result_
16415 _IRQL_requires_max_ (APC_LEVEL
)
16420 NtSetInformationEnlistment(
16421 _In_opt_ HANDLE EnlistmentHandle
,
16422 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16423 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16424 _In_ ULONG EnlistmentInformationLength
);
16426 _Must_inspect_result_
16427 _IRQL_requires_max_ (APC_LEVEL
)
16432 NtRecoverEnlistment(
16433 _In_ HANDLE EnlistmentHandle
,
16434 _In_opt_ PVOID EnlistmentKey
);
16436 _Must_inspect_result_
16437 _IRQL_requires_max_ (APC_LEVEL
)
16442 NtPrePrepareEnlistment(
16443 _In_ HANDLE EnlistmentHandle
,
16444 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16446 _Must_inspect_result_
16447 _IRQL_requires_max_ (APC_LEVEL
)
16452 NtPrepareEnlistment(
16453 _In_ HANDLE EnlistmentHandle
,
16454 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16456 _Must_inspect_result_
16457 _IRQL_requires_max_ (APC_LEVEL
)
16462 NtCommitEnlistment(
16463 _In_ HANDLE EnlistmentHandle
,
16464 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16466 _IRQL_requires_max_ (APC_LEVEL
)
16471 NtRollbackEnlistment(
16472 _In_ HANDLE EnlistmentHandle
,
16473 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16475 _IRQL_requires_max_ (APC_LEVEL
)
16480 NtPrePrepareComplete(
16481 _In_ HANDLE EnlistmentHandle
,
16482 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16484 _IRQL_requires_max_ (APC_LEVEL
)
16490 _In_ HANDLE EnlistmentHandle
,
16491 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16493 _IRQL_requires_max_ (APC_LEVEL
)
16499 _In_ HANDLE EnlistmentHandle
,
16500 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16502 _IRQL_requires_max_ (APC_LEVEL
)
16507 NtReadOnlyEnlistment(
16508 _In_ HANDLE EnlistmentHandle
,
16509 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16511 _IRQL_requires_max_ (APC_LEVEL
)
16516 NtRollbackComplete(
16517 _In_ HANDLE EnlistmentHandle
,
16518 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16520 _IRQL_requires_max_ (APC_LEVEL
)
16525 NtSinglePhaseReject(
16526 _In_ HANDLE EnlistmentHandle
,
16527 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16529 _Must_inspect_result_
16530 _IRQL_requires_max_ (APC_LEVEL
)
16535 NtCreateResourceManager(
16536 _Out_ PHANDLE ResourceManagerHandle
,
16537 _In_ ACCESS_MASK DesiredAccess
,
16538 _In_ HANDLE TmHandle
,
16539 _In_ LPGUID RmGuid
,
16540 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16541 _In_opt_ ULONG CreateOptions
,
16542 _In_opt_ PUNICODE_STRING Description
);
16544 _Must_inspect_result_
16545 _IRQL_requires_max_ (APC_LEVEL
)
16550 NtOpenResourceManager(
16551 _Out_ PHANDLE ResourceManagerHandle
,
16552 _In_ ACCESS_MASK DesiredAccess
,
16553 _In_ HANDLE TmHandle
,
16554 _In_opt_ LPGUID ResourceManagerGuid
,
16555 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
16557 _Must_inspect_result_
16558 _IRQL_requires_max_ (APC_LEVEL
)
16563 NtRecoverResourceManager(
16564 _In_ HANDLE ResourceManagerHandle
);
16566 _Must_inspect_result_
16567 _IRQL_requires_max_ (APC_LEVEL
)
16572 NtGetNotificationResourceManager(
16573 _In_ HANDLE ResourceManagerHandle
,
16574 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
16575 _In_ ULONG NotificationLength
,
16576 _In_opt_ PLARGE_INTEGER Timeout
,
16577 _Out_opt_ PULONG ReturnLength
,
16578 _In_ ULONG Asynchronous
,
16579 _In_opt_ ULONG_PTR AsynchronousContext
);
16581 _Must_inspect_result_
16582 _IRQL_requires_max_ (APC_LEVEL
)
16587 NtQueryInformationResourceManager(
16588 _In_ HANDLE ResourceManagerHandle
,
16589 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
16590 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
16591 _In_ ULONG ResourceManagerInformationLength
,
16592 _Out_opt_ PULONG ReturnLength
);
16594 _Must_inspect_result_
16595 _IRQL_requires_max_ (APC_LEVEL
)
16600 NtSetInformationResourceManager(
16601 _In_ HANDLE ResourceManagerHandle
,
16602 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
16603 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
16604 _In_ ULONG ResourceManagerInformationLength
);
16606 _Must_inspect_result_
16607 _IRQL_requires_max_ (APC_LEVEL
)
16612 NtRegisterProtocolAddressInformation(
16613 _In_ HANDLE ResourceManager
,
16614 _In_ PCRM_PROTOCOL_ID ProtocolId
,
16615 _In_ ULONG ProtocolInformationSize
,
16616 _In_ PVOID ProtocolInformation
,
16617 _In_opt_ ULONG CreateOptions
);
16619 _IRQL_requires_max_ (APC_LEVEL
)
16624 NtPropagationComplete(
16625 _In_ HANDLE ResourceManagerHandle
,
16626 _In_ ULONG RequestCookie
,
16627 _In_ ULONG BufferLength
,
16628 _In_ PVOID Buffer
);
16630 _IRQL_requires_max_ (APC_LEVEL
)
16635 NtPropagationFailed(
16636 _In_ HANDLE ResourceManagerHandle
,
16637 _In_ ULONG RequestCookie
,
16638 _In_ NTSTATUS PropStatus
);
16640 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
16642 #endif /* !_NTTMAPI_ */
16643 /******************************************************************************
16644 * ZwXxx Functions *
16645 ******************************************************************************/
16649 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
16650 #define ZwCurrentProcess() NtCurrentProcess()
16651 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
16652 #define ZwCurrentThread() NtCurrentThread()
16655 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16657 _IRQL_requires_max_(PASSIVE_LEVEL
)
16662 _In_ HANDLE Handle
);
16664 _IRQL_requires_max_(PASSIVE_LEVEL
)
16668 ZwCreateDirectoryObject(
16669 _Out_ PHANDLE DirectoryHandle
,
16670 _In_ ACCESS_MASK DesiredAccess
,
16671 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16673 _IRQL_requires_max_(PASSIVE_LEVEL
)
16678 _Out_ PHANDLE FileHandle
,
16679 _In_ ACCESS_MASK DesiredAccess
,
16680 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16681 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16682 _In_opt_ PLARGE_INTEGER AllocationSize
,
16683 _In_ ULONG FileAttributes
,
16684 _In_ ULONG ShareAccess
,
16685 _In_ ULONG CreateDisposition
,
16686 _In_ ULONG CreateOptions
,
16687 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
16688 _In_ ULONG EaLength
16691 _IRQL_requires_max_(PASSIVE_LEVEL
)
16696 _Out_ PHANDLE KeyHandle
,
16697 _In_ ACCESS_MASK DesiredAccess
,
16698 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16699 _Reserved_ ULONG TitleIndex
,
16700 _In_opt_ PUNICODE_STRING Class
,
16701 _In_ ULONG CreateOptions
,
16702 _Out_opt_ PULONG Disposition
);
16704 _IRQL_requires_max_(APC_LEVEL
)
16709 _Out_ PHANDLE SectionHandle
,
16710 _In_ ACCESS_MASK DesiredAccess
,
16711 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16712 _In_opt_ PLARGE_INTEGER MaximumSize
,
16713 _In_ ULONG SectionPageProtection
,
16714 _In_ ULONG AllocationAttributes
,
16715 _In_opt_ HANDLE FileHandle
);
16717 _IRQL_requires_max_(PASSIVE_LEVEL
)
16722 _In_ HANDLE KeyHandle
);
16724 _IRQL_requires_max_(PASSIVE_LEVEL
)
16729 _In_ HANDLE KeyHandle
,
16730 _In_ PUNICODE_STRING ValueName
);
16732 _IRQL_requires_max_(PASSIVE_LEVEL
)
16733 _When_(Length
== 0, _Post_satisfies_(return < 0))
16734 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16739 _In_ HANDLE KeyHandle
,
16741 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
16742 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
16744 _Out_ PULONG ResultLength
);
16746 _IRQL_requires_max_(PASSIVE_LEVEL
)
16747 _When_(Length
== 0, _Post_satisfies_(return < 0))
16748 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16752 ZwEnumerateValueKey(
16753 _In_ HANDLE KeyHandle
,
16755 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
16756 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
16758 _Out_ PULONG ResultLength
);
16760 _IRQL_requires_max_(PASSIVE_LEVEL
)
16765 _In_ HANDLE KeyHandle
);
16767 _IRQL_requires_max_(PASSIVE_LEVEL
)
16772 _In_ PUNICODE_STRING DriverServiceName
);
16774 _IRQL_requires_max_(PASSIVE_LEVEL
)
16778 ZwMakeTemporaryObject(
16779 _In_ HANDLE Handle
);
16781 _IRQL_requires_max_(PASSIVE_LEVEL
)
16785 ZwMapViewOfSection(
16786 _In_ HANDLE SectionHandle
,
16787 _In_ HANDLE ProcessHandle
,
16788 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
16789 _In_ ULONG_PTR ZeroBits
,
16790 _In_ SIZE_T CommitSize
,
16791 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
16792 _Inout_ PSIZE_T ViewSize
,
16793 _In_ SECTION_INHERIT InheritDisposition
,
16794 _In_ ULONG AllocationType
,
16795 _In_ ULONG Protect
);
16797 _IRQL_requires_max_(PASSIVE_LEVEL
)
16802 _Out_ PHANDLE FileHandle
,
16803 _In_ ACCESS_MASK DesiredAccess
,
16804 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16805 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16806 _In_ ULONG ShareAccess
,
16807 _In_ ULONG OpenOptions
);
16809 _IRQL_requires_max_(PASSIVE_LEVEL
)
16814 _Out_ PHANDLE KeyHandle
,
16815 _In_ ACCESS_MASK DesiredAccess
,
16816 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16818 _IRQL_requires_max_(PASSIVE_LEVEL
)
16823 _Out_ PHANDLE SectionHandle
,
16824 _In_ ACCESS_MASK DesiredAccess
,
16825 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16827 _IRQL_requires_max_(PASSIVE_LEVEL
)
16831 ZwOpenSymbolicLinkObject(
16832 _Out_ PHANDLE LinkHandle
,
16833 _In_ ACCESS_MASK DesiredAccess
,
16834 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16836 _IRQL_requires_max_(PASSIVE_LEVEL
)
16840 ZwQueryInformationFile(
16841 _In_ HANDLE FileHandle
,
16842 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16843 _Out_writes_bytes_(Length
) PVOID FileInformation
,
16845 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
16847 _IRQL_requires_max_(PASSIVE_LEVEL
)
16848 _When_(Length
== 0, _Post_satisfies_(return < 0))
16849 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16854 _In_ HANDLE KeyHandle
,
16855 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
16856 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
16858 _Out_ PULONG ResultLength
);
16860 _IRQL_requires_max_(PASSIVE_LEVEL
)
16864 ZwQuerySymbolicLinkObject(
16865 _In_ HANDLE LinkHandle
,
16866 _Inout_ PUNICODE_STRING LinkTarget
,
16867 _Out_opt_ PULONG ReturnedLength
);
16869 _IRQL_requires_max_(PASSIVE_LEVEL
)
16870 _When_(Length
== 0, _Post_satisfies_(return < 0))
16871 _When_(Length
> 0, _Post_satisfies_(return <= 0))
16876 _In_ HANDLE KeyHandle
,
16877 _In_ PUNICODE_STRING ValueName
,
16878 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
16879 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
16881 _Out_ PULONG ResultLength
);
16883 _IRQL_requires_max_(PASSIVE_LEVEL
)
16888 _In_ HANDLE FileHandle
,
16889 _In_opt_ HANDLE Event
,
16890 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
16891 _In_opt_ PVOID ApcContext
,
16892 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16893 _Out_writes_bytes_(Length
) PVOID Buffer
,
16895 _In_opt_ PLARGE_INTEGER ByteOffset
,
16896 _In_opt_ PULONG Key
);
16898 _IRQL_requires_max_(PASSIVE_LEVEL
)
16902 ZwSetInformationFile(
16903 _In_ HANDLE FileHandle
,
16904 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16905 _In_reads_bytes_(Length
) PVOID FileInformation
,
16907 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
16909 _IRQL_requires_max_(PASSIVE_LEVEL
)
16914 _In_ HANDLE KeyHandle
,
16915 _In_ PUNICODE_STRING ValueName
,
16916 _In_opt_ ULONG TitleIndex
,
16918 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
16919 _In_ ULONG DataSize
);
16921 _IRQL_requires_max_(PASSIVE_LEVEL
)
16926 _In_ PUNICODE_STRING DriverServiceName
);
16928 _IRQL_requires_max_(PASSIVE_LEVEL
)
16932 ZwUnmapViewOfSection(
16933 _In_ HANDLE ProcessHandle
,
16934 _In_opt_ PVOID BaseAddress
);
16936 _IRQL_requires_max_(PASSIVE_LEVEL
)
16941 _In_ HANDLE FileHandle
,
16942 _In_opt_ HANDLE Event
,
16943 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
16944 _In_opt_ PVOID ApcContext
,
16945 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
16946 _In_reads_bytes_(Length
) PVOID Buffer
,
16948 _In_opt_ PLARGE_INTEGER ByteOffset
,
16949 _In_opt_ PULONG Key
);
16951 _IRQL_requires_max_(PASSIVE_LEVEL
)
16955 ZwQueryFullAttributesFile(
16956 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16957 _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
16959 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16962 #if (NTDDI_VERSION >= NTDDI_WS03)
16963 _IRQL_requires_max_(PASSIVE_LEVEL
)
16968 _Out_ PHANDLE EventHandle
,
16969 _In_ ACCESS_MASK DesiredAccess
,
16970 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
16973 #if (NTDDI_VERSION >= NTDDI_VISTA)
16975 _IRQL_requires_max_(PASSIVE_LEVEL
)
16978 ZwCreateKeyTransacted(
16979 _Out_ PHANDLE KeyHandle
,
16980 _In_ ACCESS_MASK DesiredAccess
,
16981 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16982 _Reserved_ ULONG TitleIndex
,
16983 _In_opt_ PUNICODE_STRING Class
,
16984 _In_ ULONG CreateOptions
,
16985 _In_ HANDLE TransactionHandle
,
16986 _Out_opt_ PULONG Disposition
);
16988 _IRQL_requires_max_(PASSIVE_LEVEL
)
16992 ZwOpenKeyTransacted(
16993 _Out_ PHANDLE KeyHandle
,
16994 _In_ ACCESS_MASK DesiredAccess
,
16995 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16996 _In_ HANDLE TransactionHandle
);
16998 _IRQL_requires_max_(PASSIVE_LEVEL
)
17002 ZwCreateTransactionManager(
17003 _Out_ PHANDLE TmHandle
,
17004 _In_ ACCESS_MASK DesiredAccess
,
17005 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17006 _In_opt_ PUNICODE_STRING LogFileName
,
17007 _In_opt_ ULONG CreateOptions
,
17008 _In_opt_ ULONG CommitStrength
);
17010 _IRQL_requires_max_(PASSIVE_LEVEL
)
17014 ZwOpenTransactionManager(
17015 _Out_ PHANDLE TmHandle
,
17016 _In_ ACCESS_MASK DesiredAccess
,
17017 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17018 _In_opt_ PUNICODE_STRING LogFileName
,
17019 _In_opt_ LPGUID TmIdentity
,
17020 _In_opt_ ULONG OpenOptions
);
17022 _IRQL_requires_max_(PASSIVE_LEVEL
)
17026 ZwRollforwardTransactionManager(
17027 _In_ HANDLE TransactionManagerHandle
,
17028 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17030 _IRQL_requires_max_(PASSIVE_LEVEL
)
17034 ZwRecoverTransactionManager(
17035 _In_ HANDLE TransactionManagerHandle
);
17037 _IRQL_requires_max_(PASSIVE_LEVEL
)
17041 ZwQueryInformationTransactionManager(
17042 _In_ HANDLE TransactionManagerHandle
,
17043 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17044 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17045 _In_ ULONG TransactionManagerInformationLength
,
17046 _Out_opt_ PULONG ReturnLength
);
17048 _IRQL_requires_max_(PASSIVE_LEVEL
)
17052 ZwSetInformationTransactionManager(
17053 _In_ HANDLE TmHandle
,
17054 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17055 _In_ PVOID TransactionManagerInformation
,
17056 _In_ ULONG TransactionManagerInformationLength
);
17058 _IRQL_requires_max_(PASSIVE_LEVEL
)
17062 ZwEnumerateTransactionObject(
17063 _In_opt_ HANDLE RootObjectHandle
,
17064 _In_ KTMOBJECT_TYPE QueryType
,
17065 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
17066 _In_ ULONG ObjectCursorLength
,
17067 _Out_ PULONG ReturnLength
);
17069 _IRQL_requires_max_(PASSIVE_LEVEL
)
17073 ZwCreateTransaction(
17074 _Out_ PHANDLE TransactionHandle
,
17075 _In_ ACCESS_MASK DesiredAccess
,
17076 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17077 _In_opt_ LPGUID Uow
,
17078 _In_opt_ HANDLE TmHandle
,
17079 _In_opt_ ULONG CreateOptions
,
17080 _In_opt_ ULONG IsolationLevel
,
17081 _In_opt_ ULONG IsolationFlags
,
17082 _In_opt_ PLARGE_INTEGER Timeout
,
17083 _In_opt_ PUNICODE_STRING Description
);
17085 _IRQL_requires_max_(PASSIVE_LEVEL
)
17090 _Out_ PHANDLE TransactionHandle
,
17091 _In_ ACCESS_MASK DesiredAccess
,
17092 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17094 _In_opt_ HANDLE TmHandle
);
17096 _IRQL_requires_max_(PASSIVE_LEVEL
)
17100 ZwQueryInformationTransaction(
17101 _In_ HANDLE TransactionHandle
,
17102 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17103 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17104 _In_ ULONG TransactionInformationLength
,
17105 _Out_opt_ PULONG ReturnLength
);
17107 _IRQL_requires_max_(PASSIVE_LEVEL
)
17111 ZwSetInformationTransaction(
17112 _In_ HANDLE TransactionHandle
,
17113 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17114 _In_ PVOID TransactionInformation
,
17115 _In_ ULONG TransactionInformationLength
);
17117 _IRQL_requires_max_(PASSIVE_LEVEL
)
17121 ZwCommitTransaction(
17122 _In_ HANDLE TransactionHandle
,
17123 _In_ BOOLEAN Wait
);
17125 _IRQL_requires_max_(PASSIVE_LEVEL
)
17129 ZwRollbackTransaction(
17130 _In_ HANDLE TransactionHandle
,
17131 _In_ BOOLEAN Wait
);
17133 _IRQL_requires_max_(PASSIVE_LEVEL
)
17137 ZwCreateResourceManager(
17138 _Out_ PHANDLE ResourceManagerHandle
,
17139 _In_ ACCESS_MASK DesiredAccess
,
17140 _In_ HANDLE TmHandle
,
17141 _In_opt_ LPGUID ResourceManagerGuid
,
17142 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17143 _In_opt_ ULONG CreateOptions
,
17144 _In_opt_ PUNICODE_STRING Description
);
17146 _IRQL_requires_max_(PASSIVE_LEVEL
)
17150 ZwOpenResourceManager(
17151 _Out_ PHANDLE ResourceManagerHandle
,
17152 _In_ ACCESS_MASK DesiredAccess
,
17153 _In_ HANDLE TmHandle
,
17154 _In_ LPGUID ResourceManagerGuid
,
17155 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17157 _IRQL_requires_max_(PASSIVE_LEVEL
)
17161 ZwRecoverResourceManager(
17162 _In_ HANDLE ResourceManagerHandle
);
17164 _IRQL_requires_max_(PASSIVE_LEVEL
)
17168 ZwGetNotificationResourceManager(
17169 _In_ HANDLE ResourceManagerHandle
,
17170 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17171 _In_ ULONG NotificationLength
,
17172 _In_ PLARGE_INTEGER Timeout
,
17173 _Out_opt_ PULONG ReturnLength
,
17174 _In_ ULONG Asynchronous
,
17175 _In_opt_ ULONG_PTR AsynchronousContext
);
17177 _IRQL_requires_max_(PASSIVE_LEVEL
)
17181 ZwQueryInformationResourceManager(
17182 _In_ HANDLE ResourceManagerHandle
,
17183 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17184 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17185 _In_ ULONG ResourceManagerInformationLength
,
17186 _Out_opt_ PULONG ReturnLength
);
17188 _IRQL_requires_max_(PASSIVE_LEVEL
)
17192 ZwSetInformationResourceManager(
17193 _In_ HANDLE ResourceManagerHandle
,
17194 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17195 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17196 _In_ ULONG ResourceManagerInformationLength
);
17198 _IRQL_requires_max_(PASSIVE_LEVEL
)
17202 ZwCreateEnlistment(
17203 _Out_ PHANDLE EnlistmentHandle
,
17204 _In_ ACCESS_MASK DesiredAccess
,
17205 _In_ HANDLE ResourceManagerHandle
,
17206 _In_ HANDLE TransactionHandle
,
17207 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17208 _In_opt_ ULONG CreateOptions
,
17209 _In_ NOTIFICATION_MASK NotificationMask
,
17210 _In_opt_ PVOID EnlistmentKey
);
17212 _IRQL_requires_max_(PASSIVE_LEVEL
)
17217 _Out_ PHANDLE EnlistmentHandle
,
17218 _In_ ACCESS_MASK DesiredAccess
,
17219 _In_ HANDLE RmHandle
,
17220 _In_ LPGUID EnlistmentGuid
,
17221 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17223 _IRQL_requires_max_(PASSIVE_LEVEL
)
17227 ZwQueryInformationEnlistment(
17228 _In_ HANDLE EnlistmentHandle
,
17229 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17230 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17231 _In_ ULONG EnlistmentInformationLength
,
17232 _Out_opt_ PULONG ReturnLength
);
17234 _IRQL_requires_max_(PASSIVE_LEVEL
)
17238 ZwSetInformationEnlistment(
17239 _In_ HANDLE EnlistmentHandle
,
17240 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17241 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17242 _In_ ULONG EnlistmentInformationLength
);
17244 _IRQL_requires_max_(PASSIVE_LEVEL
)
17248 ZwRecoverEnlistment(
17249 _In_ HANDLE EnlistmentHandle
,
17250 _In_opt_ PVOID EnlistmentKey
);
17252 _IRQL_requires_max_(PASSIVE_LEVEL
)
17256 ZwPrePrepareEnlistment(
17257 _In_ HANDLE EnlistmentHandle
,
17258 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17260 _IRQL_requires_max_(PASSIVE_LEVEL
)
17264 ZwPrepareEnlistment(
17265 _In_ HANDLE EnlistmentHandle
,
17266 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17268 _IRQL_requires_max_(PASSIVE_LEVEL
)
17272 ZwCommitEnlistment(
17273 _In_ HANDLE EnlistmentHandle
,
17274 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17276 _IRQL_requires_max_(PASSIVE_LEVEL
)
17280 ZwRollbackEnlistment(
17281 _In_ HANDLE EnlistmentHandle
,
17282 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17284 _IRQL_requires_max_(PASSIVE_LEVEL
)
17288 ZwPrePrepareComplete(
17289 _In_ HANDLE EnlistmentHandle
,
17290 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17292 _IRQL_requires_max_(PASSIVE_LEVEL
)
17297 _In_ HANDLE EnlistmentHandle
,
17298 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17300 _IRQL_requires_max_(PASSIVE_LEVEL
)
17305 _In_ HANDLE EnlistmentHandle
,
17306 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17308 _IRQL_requires_max_(PASSIVE_LEVEL
)
17312 ZwReadOnlyEnlistment(
17313 _In_ HANDLE EnlistmentHandle
,
17314 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17319 ZwRollbackComplete(
17320 _In_ HANDLE EnlistmentHandle
,
17321 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17326 ZwSinglePhaseReject(
17327 _In_ HANDLE EnlistmentHandle
,
17328 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17329 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
17330 #if (NTDDI_VERSION >= NTDDI_WIN7)
17332 _IRQL_requires_max_(PASSIVE_LEVEL
)
17337 _Out_ PHANDLE KeyHandle
,
17338 _In_ ACCESS_MASK DesiredAccess
,
17339 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17340 _In_ ULONG OpenOptions
);
17342 _IRQL_requires_max_(PASSIVE_LEVEL
)
17346 ZwOpenKeyTransactedEx(
17347 _Out_ PHANDLE KeyHandle
,
17348 _In_ ACCESS_MASK DesiredAccess
,
17349 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17350 _In_ ULONG OpenOptions
,
17351 _In_ HANDLE TransactionHandle
);
17356 ZwNotifyChangeMultipleKeys(
17357 _In_ HANDLE MasterKeyHandle
,
17358 _In_opt_ ULONG Count
,
17359 _In_opt_ OBJECT_ATTRIBUTES SubordinateObjects
[],
17360 _In_opt_ HANDLE Event
,
17361 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17362 _In_opt_ PVOID ApcContext
,
17363 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17364 _In_ ULONG CompletionFilter
,
17365 _In_ BOOLEAN WatchTree
,
17366 _Out_opt_ PVOID Buffer
,
17367 _In_ ULONG BufferSize
,
17368 _In_ BOOLEAN Asynchronous
);
17373 ZwQueryMultipleValueKey(
17374 _In_ HANDLE KeyHandle
,
17375 _Inout_ PKEY_VALUE_ENTRY ValueEntries
,
17376 _In_ ULONG EntryCount
,
17377 _Out_ PVOID ValueBuffer
,
17378 _Inout_ PULONG BufferLength
,
17379 _Out_opt_ PULONG RequiredBufferLength
);
17381 _IRQL_requires_max_(PASSIVE_LEVEL
)
17386 _In_ HANDLE KeyHandle
,
17387 _In_ PUNICODE_STRING NewName
);
17389 _IRQL_requires_max_(PASSIVE_LEVEL
)
17393 ZwSetInformationKey(
17394 _In_ HANDLE KeyHandle
,
17395 _In_
__drv_strictTypeMatch(__drv_typeConst
) KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
17396 _In_reads_bytes_(KeySetInformationLength
) PVOID KeySetInformation
,
17397 _In_ ULONG KeySetInformationLength
);
17399 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
17406 #endif /* !_WDMDDK_ */