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_) && !defined(_NTSYSTEM_)
86 #define NTKERNELAPI DECLSPEC_IMPORT
94 #if defined(_X86_) && !defined(_NTHAL_)
95 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
97 #define _DECL_HAL_KE_IMPORT
99 #define _DECL_HAL_KE_IMPORT NTKERNELAPI
103 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
105 #define POINTER_ALIGNMENT
108 /* Helper macro to enable gcc's extension. */
109 #ifndef __GNU_EXTENSION
111 #define __GNU_EXTENSION __extension__
113 #define __GNU_EXTENSION
117 #if defined(_MSC_VER)
119 /* Disable some warnings */
120 #pragma warning(disable:4115) /* Named type definition in parentheses */
121 #pragma warning(disable:4201) /* Nameless unions and structs */
122 #pragma warning(disable:4214) /* Bit fields of other types than int */
123 #pragma warning(disable:4820) /* Padding added, due to alignment requirement */
125 /* Indicate if #pragma alloc_text() is supported */
126 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
127 #define ALLOC_PRAGMA 1
130 /* Indicate if #pragma data_seg() is supported */
131 #if defined(_M_IX86) || defined(_M_AMD64)
132 #define ALLOC_DATA_PRAGMA 1
135 #endif /* _MSC_VER */
137 /* These macros are used to create aliases for imported data. We need to do
138 this to have declarations that are compatible with MS DDK */
140 #define __SYMBOL(_Name) "_"#_Name
141 #define __IMPORTSYMBOL(_Name) "__imp__"#_Name
142 #define __IMPORTNAME(_Name) __imp__##_Name
144 #define __SYMBOL(_Name) #_Name
145 #define __IMPORTSYMBOL(_Name) "__imp_"#_Name
146 #define __IMPORTNAME(_Name) __imp_##_Name
149 #define __CREATE_NTOS_DATA_IMPORT_ALIAS(_Name) \
150 __pragma(comment(linker, "/alternatename:"__SYMBOL(_Name) "=" __IMPORTSYMBOL(_Name)))
151 #else /* !_MSC_VER */
153 #define __STRINGIFY(_exp) #_exp
155 #define _Pragma_redefine_extname(_Name, _Target) _Pragma(__STRINGIFY(redefine_extname _Name _Target))
156 #define __CREATE_NTOS_DATA_IMPORT_ALIAS(_Name) \
157 _Pragma_redefine_extname(_Name,__IMPORTNAME(_Name))
161 #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_)
162 #define USE_DMA_MACROS
164 #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__)
165 #define NO_LEGACY_DRIVERS
167 #endif /* defined(_WIN64) */
169 /* Forward declarations */
176 struct _DEVICE_OBJECT
;
177 struct _DRIVER_OBJECT
;
178 struct _IO_STATUS_BLOCK
;
179 struct _DEVICE_DESCRIPTION
;
180 struct _SCATTER_GATHER_LIST
;
181 struct _DRIVE_LAYOUT_INFORMATION
;
182 struct _COMPRESSED_DATA_INFO
;
183 struct _IO_RESOURCE_DESCRIPTOR
;
185 /* Structures not exposed to drivers */
186 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
187 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
188 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
189 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
190 typedef struct _EPROCESS
*PEPROCESS
;
191 typedef struct _ETHREAD
*PETHREAD
;
192 typedef struct _IO_TIMER
*PIO_TIMER
;
193 typedef struct _KINTERRUPT
*PKINTERRUPT
;
194 typedef struct _KPROCESS
*PKPROCESS
;
195 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
196 typedef struct _CONTEXT
*PCONTEXT
;
198 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_)
199 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
200 #elif defined(_WDM_INCLUDED_)
201 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
203 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
206 #ifndef DEFINE_GUIDEX
208 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
210 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
212 #endif /* DEFINE_GUIDEX */
215 #define STATICGUIDOF(guid) STATIC_##guid
218 /* GUID Comparison */
219 #ifndef __IID_ALIGNED__
220 #define __IID_ALIGNED__
222 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
224 return ( (*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) &&
225 (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)) );
228 #define IsEqualGUIDAligned(guid1, guid2) \
229 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
230 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
231 #endif /* __cplusplus */
232 #endif /* !__IID_ALIGNED__ */
235 /******************************************************************************
236 * INTERLOCKED Functions *
237 ******************************************************************************/
239 #define BitScanForward _BitScanForward
240 #define BitScanReverse _BitScanReverse
241 #define BitTest _bittest
242 #define BitTestAndComplement _bittestandcomplement
243 #define BitTestAndSet _bittestandset
244 #define BitTestAndReset _bittestandreset
246 #define BitScanForward64 _BitScanForward64
247 #define BitScanReverse64 _BitScanReverse64
248 #define BitTest64 _bittest64
249 #define BitTestAndComplement64 _bittestandcomplement64
250 #define BitTestAndSet64 _bittestandset64
251 #define BitTestAndReset64 _bittestandreset64
254 #if defined(_M_ARM) || defined(_M_IA64)
255 #define __ACQ_(x) x##_acq
256 #define __REL_(x) x##_rel
257 #define __NF_(x) x##_nf
264 #define InterlockedBitTestAndSet _interlockedbittestandset
265 #define InterlockedBitTestAndSetAcquire __ACQ_(_interlockedbittestandset)
266 #define InterlockedBitTestAndSetRelease __REL_(_interlockedbittestandset)
267 #define InterlockedBitTestAndSetNoFence __NF_(_interlockedbittestandset)
269 #define InterlockedBitTestAndReset _interlockedbittestandreset
270 #define InterlockedBitTestAndResetAcquire __ACQ_(_interlockedbittestandreset)
271 #define InterlockedBitTestAndResetRelease __REL_(_interlockedbittestandreset)
272 #define InterlockedBitTestAndResetNoFence __NF_(_interlockedbittestandreset)
275 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
276 #define InterlockedBitTestAndSet64Acquire __ACQ_(_interlockedbittestandset64)
277 #define InterlockedBitTestAndSet64Release __REL_(_interlockedbittestandset64)
278 #define InterlockedBitTestAndSet64NoFence __NF_(_interlockedbittestandset64)
280 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
281 #define InterlockedBitTestAndReset64Acquire __ACQ_(_interlockedbittestandreset64)
282 #define InterlockedBitTestAndReset64Release __REL_(_interlockedbittestandreset64)
283 #define InterlockedBitTestAndReset64NoFence __NF_(_interlockedbittestandreset64)
286 #define InterlockedAdd _InterlockedAdd
287 #define InterlockedAddAcquire __ACQ_(_InterlockedAdd)
288 #define InterlockedAddRelease __REL_(_InterlockedAdd)
289 #define InterlockedAddNoFence __NF_(_InterlockedAdd)
291 #define InterlockedAdd64 _InterlockedAdd64
292 #define InterlockedAddAcquire64 __ACQ_(_InterlockedAdd64)
293 #define InterlockedAddRelease64 __REL_(_InterlockedAdd64)
294 #define InterlockedAddNoFence64 __NF_(_InterlockedAdd64)
296 #define InterlockedAnd _InterlockedAnd
297 #define InterlockedAndAcquire __ACQ_(_InterlockedAnd)
298 #define InterlockedAndRelease __REL_(_InterlockedAnd)
299 #define InterlockedAndNoFence __NF_(_InterlockedAnd)
301 #define InterlockedAnd8 _InterlockedAnd8
303 #define InterlockedAndAcquire8 _InterlockedAnd8_acq
304 #define InterlockedAndRelease8 _InterlockedAnd8_rel
305 #define InterlockedAndNoFence8 _InterlockedAnd8_nf
306 #elif defined(_M_IA64)
307 #define InterlockedAnd8Acquire _InterlockedAnd8_acq
308 #define InterlockedAnd8Release _InterlockedAnd8_rel
311 #define InterlockedAnd16 _InterlockedAnd16
313 #define InterlockedAndAcquire16 _InterlockedAnd16_acq
314 #define InterlockedAndRelease16 _InterlockedAnd16_rel
315 #define InterlockedAndNoFence16 _InterlockedAnd16_nf
316 #elif defined(_M_IA64)
317 #define InterlockedAnd16Acquire _InterlockedAnd16_acq
318 #define InterlockedAnd16Release _InterlockedAnd16_rel
321 #define InterlockedAnd64 _InterlockedAnd64
323 #define InterlockedAndAcquire64 __ACQ_(_InterlockedAnd64)
324 #define InterlockedAndRelease64 __REL_(_InterlockedAnd64)
325 #define InterlockedAndNoFence64 __NF_(_InterlockedAnd64)
327 #define InterlockedAnd64Acquire __ACQ_(_InterlockedAnd64)
328 #define InterlockedAnd64Release __REL_(_InterlockedAnd64)
329 #define InterlockedAnd64NoFence __NF_(_InterlockedAnd64)
333 #define InterlockedAndAffinity InterlockedAnd64
335 #define InterlockedAndAffinity InterlockedAnd
338 #define InterlockedCompareExchange _InterlockedCompareExchange
339 #define InterlockedCompareExchangeAcquire __ACQ_(_InterlockedCompareExchange)
340 #define InterlockedCompareExchangeRelease __REL_(_InterlockedCompareExchange)
341 #define InterlockedCompareExchangeNoFence __NF_(_InterlockedCompareExchange)
343 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
344 #define InterlockedCompareExchangeAcquire16 __ACQ_(_InterlockedCompareExchange16)
345 #define InterlockedCompareExchangeRelease16 __REL_(_InterlockedCompareExchange16)
346 #define InterlockedCompareExchangeNoFence16 __NF_(_InterlockedCompareExchange16)
348 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
349 #define InterlockedCompareExchangeAcquire64 __ACQ_(_InterlockedCompareExchange64)
350 #define InterlockedCompareExchangeRelease64 __REL_(_InterlockedCompareExchange64)
351 #define InterlockedCompareExchangeNoFence64 __NF_(_InterlockedCompareExchange64)
354 #define InterlockedCompareExchange128 _InterlockedCompareExchange128
358 #define InterlockedCompare64Exchange128 _InterlockedCompare64Exchange128
359 #define InterlockedCompare64ExchangeAcquire128 _InterlockedCompare64Exchange128_acq
360 #define InterlockedCompare64ExchangeRelease128 _InterlockedCompare64Exchange128_rel
363 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
364 #define InterlockedCompareExchangePointerAcquire __ACQ_(_InterlockedCompareExchangePointer)
365 #define InterlockedCompareExchangePointerRelease __REL_(_InterlockedCompareExchangePointer)
366 #define InterlockedCompareExchangePointerNoFence __NF_(_InterlockedCompareExchangePointer)
368 #define InterlockedDecrement _InterlockedDecrement
369 #define InterlockedDecrementAcquire __ACQ_(_InterlockedDecrement)
370 #define InterlockedDecrementRelease __REL_(_InterlockedDecrement)
371 #define InterlockedDecrementNoFence __NF_(_InterlockedDecrement)
373 #define InterlockedDecrement16 _InterlockedDecrement16
374 #define InterlockedDecrementAcquire16 __ACQ_(_InterlockedDecrement16)
375 #define InterlockedDecrementRelease16 __REL_(_InterlockedDecrement16)
376 #define InterlockedDecrementNoFence16 __NF_(_InterlockedDecrement16)
378 #define InterlockedDecrement64 _InterlockedDecrement64
379 #define InterlockedDecrementAcquire64 __ACQ_(_InterlockedDecrement64)
380 #define InterlockedDecrementRelease64 __REL_(_InterlockedDecrement64)
381 #define InterlockedDecrementNoFence64 __NF_(_InterlockedDecrement64)
384 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
385 #define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence64((LONG64 *)a)
387 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
388 #define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence((LONG *)a)
391 #define InterlockedExchange _InterlockedExchange
392 #define InterlockedExchangeAcquire __ACQ_(_InterlockedExchange)
393 /* No release here */
394 #define InterlockedExchangeNoFence __NF_(_InterlockedExchange)
396 #if (_MSC_VER >= 1600)
397 #define InterlockedExchange8 _InterlockedExchange8
398 #endif // (_MSC_VER >= 1600)
400 #define InterlockedExchange16 _InterlockedExchange16
401 /* No release here */
402 #define InterlockedExchangeAcquire16 __ACQ_(_InterlockedExchange16)
403 #define InterlockedExchangeNoFence16 __NF_(_InterlockedExchange16)
405 #define InterlockedExchange64 _InterlockedExchange64
406 #define InterlockedExchangeAcquire64 __ACQ_(_InterlockedExchange64)
407 /* No release here */
408 #define InterlockedExchangeNoFence64 __NF_(_InterlockedExchange64)
410 #define InterlockedExchangePointer _InterlockedExchangePointer
411 #define InterlockedExchangePointerAcquire __ACQ_(_InterlockedExchangePointer)
412 /* No release here */
413 #define InterlockedExchangePointerNoFence __NF_(_InterlockedExchangePointer)
415 #define InterlockedExchangeAdd _InterlockedExchangeAdd
416 #define InterlockedExchangeAddAcquire __ACQ_(_InterlockedExchangeAdd)
417 #define InterlockedExchangeAddRelease __REL_(_InterlockedExchangeAdd)
418 #define InterlockedExchangeAddNoFence __NF_(_InterlockedExchangeAdd)
420 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
421 #define InterlockedExchangeAddAcquire64 __ACQ_(_InterlockedExchangeAdd64)
422 #define InterlockedExchangeAddRelease64 __REL_(_InterlockedExchangeAdd64)
423 #define InterlockedExchangeAddNoFence64 __NF_(_InterlockedExchangeAdd64)
426 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
427 #define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire64((LONG64 *)a, b)
428 #define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence64((LONG64 *)a, b)
430 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
431 #define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire((LONG *)a, b)
432 #define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence((LONG *)a, b)
435 #define InterlockedIncrement _InterlockedIncrement
436 #define InterlockedIncrementAcquire __ACQ_(_InterlockedIncrement)
437 #define InterlockedIncrementRelease __REL_(_InterlockedIncrement)
438 #define InterlockedIncrementNoFence __NF_(_InterlockedIncrement)
440 #define InterlockedIncrement16 _InterlockedIncrement16
441 #define InterlockedIncrementAcquire16 __ACQ_(_InterlockedIncrement16)
442 #define InterlockedIncrementRelease16 __REL_(_InterlockedIncrement16)
443 #define InterlockedIncrementNoFence16 __NF_(_InterlockedIncrement16)
445 #define InterlockedIncrement64 _InterlockedIncrement64
446 #define InterlockedIncrementAcquire64 __ACQ_(_InterlockedIncrement64)
447 #define InterlockedIncrementRelease64 __REL_(_InterlockedIncrement64)
448 #define InterlockedIncrementNoFence64 __NF_(_InterlockedIncrement64)
451 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
452 #define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence64((LONG64 *)a)
454 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
455 #define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence((LONG *)a)
458 #define InterlockedOr _InterlockedOr
459 #define InterlockedOrAcquire __ACQ_(_InterlockedOr)
460 #define InterlockedOrRelease __REL_(_InterlockedOr)
461 #define InterlockedOrNoFence __NF_(_InterlockedOr)
463 #define InterlockedOr8 _InterlockedOr8
465 #define InterlockedOrAcquire8 _InterlockedOr8_acq
466 #define InterlockedOrRelease8 _InterlockedOr8_rel
467 #define InterlockedOrNoFence8 _InterlockedOr8_nf
468 #elif defined(_M_IA64)
469 #define InterlockedOr8Acquire _InterlockedOr8_acq
470 #define InterlockedOr8Release _InterlockedOr8_rel
473 #define InterlockedOr16 _InterlockedOr16
475 #define InterlockedOrAcquire16 _InterlockedOr16_acq
476 #define InterlockedOrRelease16 _InterlockedOr16_rel
477 #define InterlockedOrNoFence16 _InterlockedOr16_nf
478 #elif defined(_M_IA64)
479 #define InterlockedOr16Acquire _InterlockedOr16_acq
480 #define InterlockedOr16Release _InterlockedOr16_rel
483 #define InterlockedOr64 _InterlockedOr64
485 #define InterlockedOrAcquire64 _InterlockedOr64_acq
486 #define InterlockedOrRelease64 _InterlockedOr64_rel
487 #define InterlockedOrNoFence64 _InterlockedOr64_nf
488 #elif defined(_M_IA64) || defined(_M_AMD64)
489 #define InterlockedOr64Acquire __ACQ_(_InterlockedOr64)
490 #define InterlockedOr64Release __REL_(_InterlockedOr64)
491 #define InterlockedOr64NoFence __NF_(_InterlockedOr64)
495 #define InterlockedOrAffinity InterlockedOr64
497 #define InterlockedOrAffinity InterlockedOr
500 #define InterlockedXor _InterlockedXor
501 #define InterlockedXorAcquire __ACQ_(_InterlockedXor)
502 #define InterlockedXorRelease __REL_(_InterlockedXor)
503 #define InterlockedXorNoFence __NF_(_InterlockedXor)
505 #define InterlockedXor8 _InterlockedXor8
507 #define InterlockedXorAcquire8 _InterlockedXor8_acq
508 #define InterlockedXorRelease8 _InterlockedXor8_rel
509 #define InterlockedXorNoFence8 _InterlockedXor8_nf
510 #elif defined(_M_IA64)
511 #define InterlockedXor8Acquire _InterlockedXor8_acq
512 #define InterlockedXor8Release _InterlockedXor8_rel
515 #define InterlockedXor16 _InterlockedXor16
517 #define InterlockedXorAcquire16 _InterlockedXor16_acq
518 #define InterlockedXorRelease16 _InterlockedXor16_rel
519 #define InterlockedXorNoFence16 _InterlockedXor16_nf
520 #elif defined(_M_IA64)
521 #define InterlockedXor16Acquire _InterlockedXor16_acq
522 #define InterlockedXor16Release _InterlockedXor16_rel
525 #define InterlockedXor64 _InterlockedXor64
527 #define InterlockedXorAcquire64 _InterlockedXor64_acq
528 #define InterlockedXorRelease64 _InterlockedXor64_rel
529 #define InterlockedXorNoFence64 _InterlockedXor64_nf
530 #elif defined(_M_IA64) || defined(_M_AMD64)
531 #define InterlockedXor64Acquire __ACQ_(_InterlockedXor64)
532 #define InterlockedXor64Release __REL_(_InterlockedXor64)
533 #define InterlockedXor64NoFence __NF_(_InterlockedXor64)
540 _InterlockedExchange64(
541 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
545 for (Old
= *Target
; ; Old
= Prev
)
547 Prev
= _InterlockedCompareExchange64(Target
, Value
, Old
);
556 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
559 LONG64 Old
, Prev
, New
;
560 for (Old
= *Target
; ; Old
= Prev
)
563 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
571 _InterlockedExchangeAdd64 (
572 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
576 LONG64 Old
, Prev
, New
;
577 for (Old
= *Target
; ; Old
= Prev
)
580 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
589 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
592 LONG64 Old
, Prev
, New
;
593 for (Old
= *Target
; ; Old
= Prev
)
596 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
605 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
608 LONG64 Old
, Prev
, New
;
609 for (Old
= *Target
; ; Old
= Prev
)
612 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
621 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
624 LONG64 Old
, Prev
, New
;
625 for (Old
= *Target
; ; Old
= Prev
)
628 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
636 _InterlockedIncrement64(
637 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
)
639 return _InterlockedAdd64(Target
, 1);
644 _InterlockedDecrement64(
645 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
)
647 return _InterlockedAdd64(Target
, -1);
650 #undef _InterlockedExchangePointer
651 #define _InterlockedExchangePointer _InlineInterlockedExchangePointer
653 _Ret_writes_(_Inexpressible_(Unknown
))
655 _InterlockedExchangePointer(
656 _Inout_
_At_(*Destination
, _Pre_writable_byte_size_(_Inexpressible_(Unknown
))
657 _Post_writable_byte_size_(_Inexpressible_(Unknown
)))
658 _Interlocked_operand_
volatile PVOID
*Destination
,
659 _In_opt_ PVOID Value
)
661 return (PVOID
)InterlockedExchange((volatile long *)Destination
, (long)Value
);
664 #undef _InterlockedCompareExchangePointer
665 #define _InterlockedCompareExchangePointer _InlineInterlockedCompareExchangePointer
667 _Ret_writes_(_Inexpressible_(Unknown
))
669 _InterlockedCompareExchangePointer(
670 _Inout_
_At_(*Destination
, _Pre_writable_byte_size_(_Inexpressible_(Unknown
))
671 _Post_writable_byte_size_(_Inexpressible_(Unknown
)))
672 _Interlocked_operand_
volatile PVOID
*Destination
,
673 _In_opt_ PVOID ExChange
,
674 _In_opt_ PVOID Comperand
)
676 return (PVOID
)InterlockedCompareExchange((volatile long *)Destination
,
688 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
692 return _InterlockedExchangeAdd64(Target
, Value
) + Value
;
695 #endif /* _M_AMD64 */
699 #undef _InterlockedBitTestAndSet
700 #define _InterlockedBitTestAndSet InterlockedBitTestAndSet_Inline
703 _InterlockedBitTestAndSet(
704 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
707 ULONG Mask
= 1 << (Bit
& 31);
708 return (BOOLEAN
)((InterlockedOr(&Target
[Bit
/ 32], Mask
) & Mask
) != 0);
711 #undef _InterlockedBitTestAndReset
712 #define _InterlockedBitTestAndReset InterlockedBitTestAndReset_Inline
715 _InterlockedBitTestAndReset(
716 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
719 ULONG Mask
= 1 << (Bit
& 31);
720 return (BOOLEAN
)((InterlockedAnd(&Target
[Bit
/ 32], ~Mask
) & Mask
) != 0);
723 #undef _InterlockedBitTestAndSet64
724 #define _InterlockedBitTestAndSet64 InterlockedBitTestAndSet64_Inline
727 _InterlockedBitTestAndSet64(
728 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
731 ULONG64 Mask
= 1LL << (Bit
& 63);
732 return (BOOLEAN
)((InterlockedOr64(&Target
[Bit
/ 64], Mask
) & Mask
) != 0);
735 #undef _InterlockedBitTestAndReset64
736 #define _InterlockedBitTestAndReset64 InterlockedBitTestAndReset64_Inline
739 _InterlockedBitTestAndReset64(
740 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
743 ULONG64 Mask
= 1LL << (Bit
& 63);
744 return (BOOLEAN
)((InterlockedAnd64(&Target
[Bit
/ 64], ~Mask
) & Mask
) != 0);
747 #undef _InterlockedBitTestAndComplement
748 #define _InterlockedBitTestAndComplement InterlockedBitTestAndComplement_Inline
751 _InterlockedBitTestAndComplement(
752 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
755 ULONG Mask
= 1 << (Bit
& 31);
756 return (BOOLEAN
)((InterlockedXor(&Target
[Bit
/ 32], Mask
) & Mask
) != 0);
759 #undef _InterlockedBitTestAndComplement64
760 #define _InterlockedBitTestAndComplement64 InterlockedBitTestAndComplement64_Inline
763 _InterlockedBitTestAndComplement64(
764 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
767 ULONG64 Mask
= 1LL << (Bit
& 63);
768 return (BOOLEAN
)((InterlockedXor64(&Target
[Bit
/ 64], Mask
) & Mask
) != 0);
773 /******************************************************************************
774 * Runtime Library Types *
775 ******************************************************************************/
777 #define RTL_REGISTRY_ABSOLUTE 0
778 #define RTL_REGISTRY_SERVICES 1
779 #define RTL_REGISTRY_CONTROL 2
780 #define RTL_REGISTRY_WINDOWS_NT 3
781 #define RTL_REGISTRY_DEVICEMAP 4
782 #define RTL_REGISTRY_USER 5
783 #define RTL_REGISTRY_MAXIMUM 6
784 #define RTL_REGISTRY_HANDLE 0x40000000
785 #define RTL_REGISTRY_OPTIONAL 0x80000000
787 /* RTL_QUERY_REGISTRY_TABLE.Flags */
788 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
789 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
790 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
791 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
792 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
793 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
794 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
796 #define HASH_STRING_ALGORITHM_DEFAULT 0
797 #define HASH_STRING_ALGORITHM_X65599 1
798 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
800 typedef struct _RTL_BITMAP
{
803 } RTL_BITMAP
, *PRTL_BITMAP
;
805 typedef struct _RTL_BITMAP_RUN
{
808 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
810 _Function_class_(RTL_QUERY_REGISTRY_ROUTINE
)
811 _IRQL_requires_max_(PASSIVE_LEVEL
)
814 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
815 _In_z_ PWSTR ValueName
,
816 _In_ ULONG ValueType
,
817 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
818 _In_ ULONG ValueLength
,
819 _In_opt_ PVOID Context
,
820 _In_opt_ PVOID EntryContext
);
822 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
823 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
830 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
832 typedef struct _TIME_FIELDS
{
841 } TIME_FIELDS
, *PTIME_FIELDS
;
844 #ifndef _SLIST_HEADER_
845 #define _SLIST_HEADER_
849 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
850 struct _SLIST_ENTRY
*Next
;
851 } SLIST_ENTRY
, *PSLIST_ENTRY
;
853 typedef struct _SLIST_ENTRY32
{
855 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
857 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
858 _ANONYMOUS_STRUCT
struct {
864 ULONGLONG Sequence
:9;
865 ULONGLONG NextEntry
:39;
866 ULONGLONG HeaderType
:1;
868 ULONGLONG Reserved
:59;
873 ULONGLONG Sequence
:48;
874 ULONGLONG HeaderType
:1;
876 ULONGLONG Reserved
:2;
877 ULONGLONG NextEntry
:60;
881 ULONGLONG Sequence
:48;
882 ULONGLONG HeaderType
:1;
883 ULONGLONG Reserved
:3;
884 ULONGLONG NextEntry
:60;
886 } SLIST_HEADER
, *PSLIST_HEADER
;
888 typedef union _SLIST_HEADER32
{
890 _ANONYMOUS_STRUCT
struct {
895 } SLIST_HEADER32
, *PSLIST_HEADER32
;
899 #define SLIST_ENTRY SINGLE_LIST_ENTRY
900 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
901 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
903 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
905 typedef union _SLIST_HEADER
{
907 _ANONYMOUS_STRUCT
struct {
912 } SLIST_HEADER
, *PSLIST_HEADER
;
914 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
916 #endif /* defined(_WIN64) */
918 #endif /* _SLIST_HEADER_ */
920 /* Exception record flags */
921 #define EXCEPTION_NONCONTINUABLE 0x01
922 #define EXCEPTION_UNWINDING 0x02
923 #define EXCEPTION_EXIT_UNWIND 0x04
924 #define EXCEPTION_STACK_INVALID 0x08
925 #define EXCEPTION_NESTED_CALL 0x10
926 #define EXCEPTION_TARGET_UNWIND 0x20
927 #define EXCEPTION_COLLIDED_UNWIND 0x40
928 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | \
929 EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND)
931 #define IS_UNWINDING(Flag) ((Flag & EXCEPTION_UNWIND) != 0)
932 #define IS_DISPATCHING(Flag) ((Flag & EXCEPTION_UNWIND) == 0)
933 #define IS_TARGET_UNWIND(Flag) (Flag & EXCEPTION_TARGET_UNWIND)
935 #define EXCEPTION_MAXIMUM_PARAMETERS 15
937 /* Exception records */
938 typedef struct _EXCEPTION_RECORD
{
939 NTSTATUS ExceptionCode
;
940 ULONG ExceptionFlags
;
941 struct _EXCEPTION_RECORD
*ExceptionRecord
;
942 PVOID ExceptionAddress
;
943 ULONG NumberParameters
;
944 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
945 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
947 typedef struct _EXCEPTION_RECORD32
{
948 NTSTATUS ExceptionCode
;
949 ULONG ExceptionFlags
;
950 ULONG ExceptionRecord
;
951 ULONG ExceptionAddress
;
952 ULONG NumberParameters
;
953 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
954 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
956 typedef struct _EXCEPTION_RECORD64
{
957 NTSTATUS ExceptionCode
;
958 ULONG ExceptionFlags
;
959 ULONG64 ExceptionRecord
;
960 ULONG64 ExceptionAddress
;
961 ULONG NumberParameters
;
962 ULONG __unusedAlignment
;
963 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
964 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
966 typedef struct _EXCEPTION_POINTERS
{
967 PEXCEPTION_RECORD ExceptionRecord
;
968 PCONTEXT ContextRecord
;
969 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
972 extern BOOLEAN NlsMbCodePageTag
;
973 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
974 extern BOOLEAN NlsMbOemCodePageTag
;
975 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
977 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsMbCodePageTag
)
978 extern BOOLEAN
*NlsMbCodePageTag
;
979 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
980 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsMbOemCodePageTag
)
981 extern BOOLEAN
*NlsMbOemCodePageTag
;
982 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
985 #define SHORT_LEAST_SIGNIFICANT_BIT 0
986 #define SHORT_MOST_SIGNIFICANT_BIT 1
988 #define LONG_LEAST_SIGNIFICANT_BIT 0
989 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
990 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
991 #define LONG_MOST_SIGNIFICANT_BIT 3
993 #define RTLVERLIB_DDI(x) Wdmlib##x
996 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
1000 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
1001 _In_ ULONG Version
);
1003 typedef struct _OSVERSIONINFOA
{
1004 ULONG dwOSVersionInfoSize
;
1005 ULONG dwMajorVersion
;
1006 ULONG dwMinorVersion
;
1007 ULONG dwBuildNumber
;
1009 CHAR szCSDVersion
[128];
1010 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1012 typedef struct _OSVERSIONINFOW
{
1013 ULONG dwOSVersionInfoSize
;
1014 ULONG dwMajorVersion
;
1015 ULONG dwMinorVersion
;
1016 ULONG dwBuildNumber
;
1018 WCHAR szCSDVersion
[128];
1019 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1021 typedef struct _OSVERSIONINFOEXA
{
1022 ULONG dwOSVersionInfoSize
;
1023 ULONG dwMajorVersion
;
1024 ULONG dwMinorVersion
;
1025 ULONG dwBuildNumber
;
1027 CHAR szCSDVersion
[128];
1028 USHORT wServicePackMajor
;
1029 USHORT wServicePackMinor
;
1033 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1035 typedef struct _OSVERSIONINFOEXW
{
1036 ULONG dwOSVersionInfoSize
;
1037 ULONG dwMajorVersion
;
1038 ULONG dwMinorVersion
;
1039 ULONG dwBuildNumber
;
1041 WCHAR szCSDVersion
[128];
1042 USHORT wServicePackMajor
;
1043 USHORT wServicePackMinor
;
1047 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1050 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1051 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1052 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1053 typedef OSVERSIONINFOW OSVERSIONINFO
;
1054 typedef POSVERSIONINFOW POSVERSIONINFO
;
1055 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1057 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1058 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1059 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1060 typedef OSVERSIONINFOA OSVERSIONINFO
;
1061 typedef POSVERSIONINFOA POSVERSIONINFO
;
1062 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1063 #endif /* UNICODE */
1065 /******************************************************************************
1067 ******************************************************************************/
1069 typedef UCHAR KIRQL
, *PKIRQL
;
1070 typedef CCHAR KPROCESSOR_MODE
;
1071 typedef LONG KPRIORITY
;
1073 typedef enum _MODE
{
1079 #define CACHE_FULLY_ASSOCIATIVE 0xFF
1080 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
1082 #define EVENT_QUERY_STATE (0x0001)
1083 #define EVENT_MODIFY_STATE (0x0002)
1084 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
1086 #define LTP_PC_SMT 0x1
1088 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
1089 #define SINGLE_GROUP_LEGACY_API 1
1092 #define SEMAPHORE_QUERY_STATE (0x0001)
1093 #define SEMAPHORE_MODIFY_STATE (0x0002)
1094 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
1096 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
1097 RelationProcessorCore
,
1100 RelationProcessorPackage
,
1102 RelationAll
= 0xffff
1103 } LOGICAL_PROCESSOR_RELATIONSHIP
;
1105 typedef enum _PROCESSOR_CACHE_TYPE
{
1110 } PROCESSOR_CACHE_TYPE
;
1112 typedef struct _CACHE_DESCRIPTOR
{
1114 UCHAR Associativity
;
1117 PROCESSOR_CACHE_TYPE Type
;
1118 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
1120 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
1121 ULONG_PTR ProcessorMask
;
1122 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
1123 _ANONYMOUS_UNION
union {
1130 CACHE_DESCRIPTOR Cache
;
1131 ULONGLONG Reserved
[2];
1133 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
1135 typedef struct _PROCESSOR_RELATIONSHIP
{
1139 _Field_size_(GroupCount
) GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
1140 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
1142 typedef struct _NUMA_NODE_RELATIONSHIP
{
1145 GROUP_AFFINITY GroupMask
;
1146 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
1148 typedef struct _CACHE_RELATIONSHIP
{
1150 UCHAR Associativity
;
1153 PROCESSOR_CACHE_TYPE Type
;
1155 GROUP_AFFINITY GroupMask
;
1156 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
1158 typedef struct _PROCESSOR_GROUP_INFO
{
1159 UCHAR MaximumProcessorCount
;
1160 UCHAR ActiveProcessorCount
;
1162 KAFFINITY ActiveProcessorMask
;
1163 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
1165 typedef struct _GROUP_RELATIONSHIP
{
1166 USHORT MaximumGroupCount
;
1167 USHORT ActiveGroupCount
;
1169 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
1170 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
1172 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
1173 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
1175 _ANONYMOUS_UNION
union {
1176 PROCESSOR_RELATIONSHIP Processor
;
1177 NUMA_NODE_RELATIONSHIP NumaNode
;
1178 CACHE_RELATIONSHIP Cache
;
1179 GROUP_RELATIONSHIP Group
;
1181 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;;
1183 /* Processor features */
1184 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
1185 #define PF_FLOATING_POINT_EMULATED 1
1186 #define PF_COMPARE_EXCHANGE_DOUBLE 2
1187 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
1188 #define PF_PPC_MOVEMEM_64BIT_OK 4
1189 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
1190 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
1191 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
1192 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
1193 #define PF_PAE_ENABLED 9
1194 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
1195 #define PF_SSE_DAZ_MODE_AVAILABLE 11
1196 #define PF_NX_ENABLED 12
1197 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
1198 #define PF_COMPARE_EXCHANGE128 14
1199 #define PF_COMPARE64_EXCHANGE128 15
1200 #define PF_CHANNELS_ENABLED 16
1201 #define PF_XSAVE_ENABLED 17
1203 #define MAXIMUM_WAIT_OBJECTS 64
1205 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
1207 #define ASSERT_DPC(Object) \
1208 ASSERT(((Object)->Type == 0) || \
1209 ((Object)->Type == DpcObject) || \
1210 ((Object)->Type == ThreadedDpcObject))
1212 #define ASSERT_GATE(object) \
1213 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1214 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1216 #define ASSERT_DEVICE_QUEUE(Object) \
1217 NT_ASSERT((Object)->Type == DeviceQueueObject)
1219 #define ASSERT_TIMER(E) \
1220 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1221 ((E)->Header.Type == TimerSynchronizationObject))
1223 #define ASSERT_MUTANT(E) \
1224 NT_ASSERT((E)->Header.Type == MutantObject)
1226 #define ASSERT_SEMAPHORE(E) \
1227 NT_ASSERT((E)->Header.Type == SemaphoreObject)
1229 #define ASSERT_EVENT(E) \
1230 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
1231 ((E)->Header.Type == SynchronizationEvent))
1233 #define DPC_NORMAL 0
1234 #define DPC_THREADED 1
1236 #define GM_LOCK_BIT 0x1
1237 #define GM_LOCK_BIT_V 0x0
1238 #define GM_LOCK_WAITER_WOKEN 0x2
1239 #define GM_LOCK_WAITER_INC 0x4
1241 #define LOCK_QUEUE_WAIT_BIT 0
1242 #define LOCK_QUEUE_OWNER_BIT 1
1244 #define LOCK_QUEUE_WAIT 1
1245 #define LOCK_QUEUE_OWNER 2
1246 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1247 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1249 #define PROCESSOR_FEATURE_MAX 64
1251 #define DBG_STATUS_CONTROL_C 1
1252 #define DBG_STATUS_SYSRQ 2
1253 #define DBG_STATUS_BUGCHECK_FIRST 3
1254 #define DBG_STATUS_BUGCHECK_SECOND 4
1255 #define DBG_STATUS_FATAL 5
1256 #define DBG_STATUS_DEBUG_CONTROL 6
1257 #define DBG_STATUS_WORKER 7
1260 #define MAXIMUM_PROC_PER_GROUP 64
1262 #define MAXIMUM_PROC_PER_GROUP 32
1264 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
1266 #define EXCEPTION_DIVIDED_BY_ZERO 0
1267 #define EXCEPTION_DEBUG 1
1268 #define EXCEPTION_NMI 2
1269 #define EXCEPTION_INT3 3
1270 #define EXCEPTION_BOUND_CHECK 5
1271 #define EXCEPTION_INVALID_OPCODE 6
1272 #define EXCEPTION_NPX_NOT_AVAILABLE 7
1273 #define EXCEPTION_DOUBLE_FAULT 8
1274 #define EXCEPTION_NPX_OVERRUN 9
1275 #define EXCEPTION_INVALID_TSS 0x0A
1276 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
1277 #define EXCEPTION_STACK_FAULT 0x0C
1278 #define EXCEPTION_GP_FAULT 0x0D
1279 #define EXCEPTION_RESERVED_TRAP 0x0F
1280 #define EXCEPTION_NPX_ERROR 0x010
1281 #define EXCEPTION_ALIGNMENT_CHECK 0x011
1283 typedef enum _KBUGCHECK_CALLBACK_REASON
{
1285 KbCallbackReserved1
,
1286 KbCallbackSecondaryDumpData
,
1289 } KBUGCHECK_CALLBACK_REASON
;
1291 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
1293 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE
)
1294 _IRQL_requires_same_
1296 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
1297 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
1298 _In_
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
1299 _Inout_ PVOID ReasonSpecificData
,
1300 _In_ ULONG ReasonSpecificDataLength
);
1301 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
1303 typedef struct _KBUGCHECK_ADD_PAGES
{
1304 _Inout_ PVOID Context
;
1305 _Inout_ ULONG Flags
;
1306 _In_ ULONG BugCheckCode
;
1307 _Out_ ULONG_PTR Address
;
1308 _Out_ ULONG_PTR Count
;
1309 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
1311 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
1312 _In_ PVOID InBuffer
;
1313 _In_ ULONG InBufferLength
;
1314 _In_ ULONG MaximumAllowed
;
1316 _Out_ PVOID OutBuffer
;
1317 _Out_ ULONG OutBufferLength
;
1318 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
1320 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
1324 KbDumpIoSecondaryData
,
1326 } KBUGCHECK_DUMP_IO_TYPE
;
1328 typedef struct _KBUGCHECK_DUMP_IO
{
1329 _In_ ULONG64 Offset
;
1331 _In_ ULONG BufferLength
;
1332 _In_ KBUGCHECK_DUMP_IO_TYPE Type
;
1333 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
1335 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
1336 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
1337 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
1339 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
1341 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
1344 KBUGCHECK_CALLBACK_REASON Reason
;
1346 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
1348 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
1354 } KBUGCHECK_BUFFER_DUMP_STATE
;
1356 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE
)
1357 _IRQL_requires_same_
1359 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
1362 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
1364 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
1366 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
1367 _Field_size_bytes_opt_(Length
) PVOID Buffer
;
1372 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
1374 _Function_class_(NMI_CALLBACK
)
1375 _IRQL_requires_same_
1377 (NTAPI NMI_CALLBACK
)(
1378 _In_opt_ PVOID Context
,
1379 _In_ BOOLEAN Handled
);
1380 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
1382 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
1383 KeProcessorAddStartNotify
= 0,
1384 KeProcessorAddCompleteNotify
,
1385 KeProcessorAddFailureNotify
1386 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
1388 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
1389 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
1392 #if (NTDDI_VERSION >= NTDDI_WIN7)
1393 PROCESSOR_NUMBER ProcNumber
;
1395 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
1397 _IRQL_requires_same_
1398 _Function_class_(PROCESSOR_CALLBACK_FUNCTION
)
1400 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
1401 _In_ PVOID CallbackContext
,
1402 _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
1403 _Inout_ PNTSTATUS OperationStatus
);
1404 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
1406 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
1408 #define INVALID_PROCESSOR_INDEX 0xffffffff
1410 typedef enum _KINTERRUPT_POLARITY
{
1411 InterruptPolarityUnknown
,
1412 InterruptActiveHigh
,
1414 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1416 typedef enum _KPROFILE_SOURCE
{
1418 ProfileAlignmentFixup
,
1421 ProfileLoadInstructions
,
1422 ProfilePipelineFrozen
,
1423 ProfileBranchInstructions
,
1424 ProfileTotalNonissues
,
1425 ProfileDcacheMisses
,
1426 ProfileIcacheMisses
,
1428 ProfileBranchMispredictions
,
1429 ProfileStoreInstructions
,
1430 ProfileFpInstructions
,
1431 ProfileIntegerInstructions
,
1435 ProfileSpecialInstructions
,
1437 ProfileIcacheIssues
,
1438 ProfileDcacheAccesses
,
1439 ProfileMemoryBarrierCycles
,
1440 ProfileLoadLinkedIssues
,
1444 typedef enum _KWAIT_REASON
{
1485 typedef struct _KWAIT_BLOCK
{
1486 LIST_ENTRY WaitListEntry
;
1487 struct _KTHREAD
*Thread
;
1489 struct _KWAIT_BLOCK
*NextWaitBlock
;
1492 #if (NTDDI_VERSION >= NTDDI_WIN7)
1493 volatile UCHAR BlockState
;
1500 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
1502 typedef enum _KINTERRUPT_MODE
{
1507 #define THREAD_WAIT_OBJECTS 3
1509 _IRQL_requires_same_
1510 _Function_class_(KSTART_ROUTINE
)
1512 (NTAPI KSTART_ROUTINE
)(
1513 _In_ PVOID StartContext
);
1514 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
1517 (NTAPI
*PKINTERRUPT_ROUTINE
)(
1520 _Function_class_(KSERVICE_ROUTINE
)
1521 _IRQL_requires_(HIGH_LEVEL
)
1522 _IRQL_requires_same_
1524 (NTAPI KSERVICE_ROUTINE
)(
1525 _In_
struct _KINTERRUPT
*Interrupt
,
1526 _In_ PVOID ServiceContext
);
1527 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
1529 _Function_class_(KMESSAGE_SERVICE_ROUTINE
)
1530 _IRQL_requires_same_
1532 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
1533 _In_
struct _KINTERRUPT
*Interrupt
,
1534 _In_ PVOID ServiceContext
,
1535 _In_ ULONG MessageID
);
1536 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
1538 typedef enum _KD_OPTION
{
1539 KD_OPTION_SET_BLOCK_ENABLE
,
1544 (NTAPI
*PKNORMAL_ROUTINE
)(
1545 IN PVOID NormalContext OPTIONAL
,
1546 IN PVOID SystemArgument1 OPTIONAL
,
1547 IN PVOID SystemArgument2 OPTIONAL
);
1550 (NTAPI
*PKRUNDOWN_ROUTINE
)(
1551 IN
struct _KAPC
*Apc
);
1554 (NTAPI
*PKKERNEL_ROUTINE
)(
1555 IN
struct _KAPC
*Apc
,
1556 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
1557 IN OUT PVOID
*NormalContext OPTIONAL
,
1558 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
1559 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
1562 typedef struct _KAPC
{
1568 struct _KTHREAD
*Thread
;
1569 LIST_ENTRY ApcListEntry
;
1571 PKKERNEL_ROUTINE KernelRoutine
;
1572 PKRUNDOWN_ROUTINE RundownRoutine
;
1573 PKNORMAL_ROUTINE NormalRoutine
;
1577 PVOID NormalContext
;
1578 PVOID SystemArgument1
;
1579 PVOID SystemArgument2
;
1580 CCHAR ApcStateIndex
;
1581 KPROCESSOR_MODE ApcMode
;
1583 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1585 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
1586 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
1587 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
1588 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
1589 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
1590 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
1591 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
1593 typedef struct _KDEVICE_QUEUE_ENTRY
{
1594 LIST_ENTRY DeviceListEntry
;
1597 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1598 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1600 typedef PVOID PKIPI_CONTEXT
;
1603 (NTAPI
*PKIPI_WORKER
)(
1604 IN OUT PKIPI_CONTEXT PacketContext
,
1605 IN PVOID Parameter1 OPTIONAL
,
1606 IN PVOID Parameter2 OPTIONAL
,
1607 IN PVOID Parameter3 OPTIONAL
);
1609 typedef struct _KIPI_COUNTS
{
1614 ULONG FlushSingleTb
;
1615 ULONG FlushMultipleTb
;
1616 ULONG FlushEntireTb
;
1621 ULONG SweepIcacheRange
;
1622 ULONG FlushIoBuffers
;
1623 ULONG GratuitousDPC
;
1624 } KIPI_COUNTS
, *PKIPI_COUNTS
;
1626 _IRQL_requires_same_
1627 _Function_class_(KIPI_BROADCAST_WORKER
)
1628 _IRQL_requires_(IPI_LEVEL
)
1630 (NTAPI KIPI_BROADCAST_WORKER
)(
1631 _In_ ULONG_PTR Argument
);
1632 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
1634 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
1636 typedef struct _KSPIN_LOCK_QUEUE
{
1637 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1638 PKSPIN_LOCK
volatile Lock
;
1639 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1641 typedef struct _KLOCK_QUEUE_HANDLE
{
1642 KSPIN_LOCK_QUEUE LockQueue
;
1644 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1646 #if defined(_AMD64_)
1648 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
1650 #define LockQueueDispatcherLock 0
1651 #define LockQueueExpansionLock 1
1652 #define LockQueuePfnLock 2
1653 #define LockQueueSystemSpaceLock 3
1654 #define LockQueueVacbLock 4
1655 #define LockQueueMasterLock 5
1656 #define LockQueueNonPagedPoolLock 6
1657 #define LockQueueIoCancelLock 7
1658 #define LockQueueWorkQueueLock 8
1659 #define LockQueueIoVpbLock 9
1660 #define LockQueueIoDatabaseLock 10
1661 #define LockQueueIoCompletionLock 11
1662 #define LockQueueNtfsStructLock 12
1663 #define LockQueueAfdWorkQueueLock 13
1664 #define LockQueueBcbLock 14
1665 #define LockQueueMmNonPagedPoolLock 15
1666 #define LockQueueUnusedSpare16 16
1667 #define LockQueueTimerTableLock 17
1668 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
1672 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
1673 LockQueueDispatcherLock
,
1674 LockQueueExpansionLock
,
1676 LockQueueSystemSpaceLock
,
1678 LockQueueMasterLock
,
1679 LockQueueNonPagedPoolLock
,
1680 LockQueueIoCancelLock
,
1681 LockQueueWorkQueueLock
,
1683 LockQueueIoDatabaseLock
,
1684 LockQueueIoCompletionLock
,
1685 LockQueueNtfsStructLock
,
1686 LockQueueAfdWorkQueueLock
,
1688 LockQueueMmNonPagedPoolLock
,
1689 LockQueueUnusedSpare16
,
1690 LockQueueTimerTableLock
,
1691 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1692 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1694 #endif /* defined(_AMD64_) */
1696 _Function_class_(KDEFERRED_ROUTINE
)
1697 _IRQL_requires_(DISPATCH_LEVEL
)
1698 _IRQL_requires_same_
1700 (NTAPI KDEFERRED_ROUTINE
)(
1701 _In_
struct _KDPC
*Dpc
,
1702 _In_opt_ PVOID DeferredContext
,
1703 _In_opt_ PVOID SystemArgument1
,
1704 _In_opt_ PVOID SystemArgument2
);
1705 typedef KDEFERRED_ROUTINE
*PKDEFERRED_ROUTINE
;
1707 typedef enum _KDPC_IMPORTANCE
{
1711 MediumHighImportance
1714 typedef struct _KDPC
{
1717 volatile USHORT Number
;
1718 LIST_ENTRY DpcListEntry
;
1719 PKDEFERRED_ROUTINE DeferredRoutine
;
1720 PVOID DeferredContext
;
1721 PVOID SystemArgument1
;
1722 PVOID SystemArgument2
;
1723 volatile PVOID DpcData
;
1724 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1726 typedef struct _KDPC_WATCHDOG_INFORMATION
{
1729 ULONG DpcWatchdogLimit
;
1730 ULONG DpcWatchdogCount
;
1732 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
1734 typedef struct _KDEVICE_QUEUE
{
1737 LIST_ENTRY DeviceListHead
;
1739 # if defined(_AMD64_)
1740 _ANONYMOUS_UNION
union {
1742 _ANONYMOUS_STRUCT
struct {
1750 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1752 #define TIMER_EXPIRED_INDEX_BITS 6
1753 #define TIMER_PROCESSOR_INDEX_BITS 5
1755 typedef struct _DISPATCHER_HEADER
{
1756 _ANONYMOUS_UNION
union {
1757 _ANONYMOUS_STRUCT
struct {
1759 _ANONYMOUS_UNION
union {
1760 _ANONYMOUS_UNION
union {
1761 UCHAR TimerControlFlags
;
1762 _ANONYMOUS_STRUCT
struct {
1764 UCHAR Coalescable
:1;
1765 UCHAR KeepShifting
:1;
1766 UCHAR EncodedTolerableDelay
:5;
1770 #if (NTDDI_VERSION < NTDDI_WIN7)
1775 _ANONYMOUS_UNION
union {
1776 _ANONYMOUS_UNION
union {
1777 UCHAR ThreadControlFlags
;
1778 _ANONYMOUS_STRUCT
struct {
1779 UCHAR CpuThrottled
:1;
1780 UCHAR CycleProfiling
:1;
1781 UCHAR CounterProfiling
:1;
1788 _ANONYMOUS_UNION
union {
1789 #if (NTDDI_VERSION >= NTDDI_WIN7)
1790 _ANONYMOUS_UNION
union {
1791 UCHAR TimerMiscFlags
;
1792 _ANONYMOUS_STRUCT
struct {
1794 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
1797 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
1800 volatile UCHAR Expired
:1;
1804 /* Pre Win7 compatibility fix to latest WDK */
1807 _ANONYMOUS_UNION
union {
1808 BOOLEAN DebugActive
;
1809 _ANONYMOUS_STRUCT
struct {
1810 BOOLEAN ActiveDR7
:1;
1811 BOOLEAN Instrumented
:1;
1812 BOOLEAN Reserved2
:4;
1813 BOOLEAN UmsScheduled
:1;
1814 BOOLEAN UmsPrimary
:1;
1816 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
1823 LIST_ENTRY WaitListHead
;
1824 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1826 typedef struct _KEVENT
{
1827 DISPATCHER_HEADER Header
;
1828 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1830 typedef struct _KSEMAPHORE
{
1831 DISPATCHER_HEADER Header
;
1833 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1835 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
1837 typedef struct _KGATE
{
1838 DISPATCHER_HEADER Header
;
1839 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1841 typedef struct _KGUARDED_MUTEX
{
1842 volatile LONG Count
;
1846 _ANONYMOUS_UNION
union {
1847 _ANONYMOUS_STRUCT
struct {
1848 SHORT KernelApcDisable
;
1849 SHORT SpecialApcDisable
;
1851 ULONG CombinedApcDisable
;
1853 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1855 typedef struct _KMUTANT
{
1856 DISPATCHER_HEADER Header
;
1857 LIST_ENTRY MutantListEntry
;
1858 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1861 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1863 #define TIMER_TABLE_SIZE 512
1864 #define TIMER_TABLE_SHIFT 9
1866 typedef struct _KTIMER
{
1867 DISPATCHER_HEADER Header
;
1868 ULARGE_INTEGER DueTime
;
1869 LIST_ENTRY TimerListEntry
;
1871 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_)
1875 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1877 typedef enum _LOCK_OPERATION
{
1883 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
1885 _Function_class_(KSYNCHRONIZE_ROUTINE
)
1886 _IRQL_requires_same_
1888 (NTAPI KSYNCHRONIZE_ROUTINE
)(
1889 _In_ PVOID SynchronizeContext
);
1890 typedef KSYNCHRONIZE_ROUTINE
*PKSYNCHRONIZE_ROUTINE
;
1892 typedef enum _POOL_TYPE
{
1895 NonPagedPoolMustSucceed
,
1897 NonPagedPoolCacheAligned
,
1898 PagedPoolCacheAligned
,
1899 NonPagedPoolCacheAlignedMustS
,
1901 NonPagedPoolSession
= 32,
1903 NonPagedPoolMustSucceedSession
,
1904 DontUseThisTypeSession
,
1905 NonPagedPoolCacheAlignedSession
,
1906 PagedPoolCacheAlignedSession
,
1907 NonPagedPoolCacheAlignedMustSSession
1910 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
1914 } ALTERNATIVE_ARCHITECTURE_TYPE
;
1919 #define IsNEC_98 (FALSE)
1923 #define IsNotNEC_98 (TRUE)
1930 #ifndef SetNotNEC_98
1931 #define SetNotNEC_98
1936 typedef struct _KSYSTEM_TIME
{
1940 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
1942 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1947 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
1954 USHORT ErrorSelector
;
1957 USHORT DataSelector
;
1961 M128A FloatRegisters
[8];
1963 M128A XmmRegisters
[16];
1964 UCHAR Reserved4
[96];
1966 M128A XmmRegisters
[8];
1967 UCHAR Reserved4
[192];
1968 ULONG StackControl
[7];
1971 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1973 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
1975 ULONG64 Reserved
[7];
1976 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1978 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
1979 XSAVE_FORMAT LegacyState
;
1980 XSAVE_AREA_HEADER Header
;
1981 } XSAVE_AREA
, *PXSAVE_AREA
;
1983 typedef struct _XSTATE_CONTEXT
{
1987 _Field_size_bytes_opt_(Length
) PXSAVE_AREA Area
;
1995 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
1997 typedef struct _XSTATE_SAVE
{
1998 #if defined(_AMD64_)
1999 struct _XSTATE_SAVE
* Prev
;
2000 struct _KTHREAD
* Thread
;
2002 XSTATE_CONTEXT XStateContext
;
2003 #elif defined(_IA64_) || defined(_ARM_)
2005 #elif defined(_X86_)
2006 _ANONYMOUS_UNION
union {
2007 _ANONYMOUS_STRUCT
struct {
2010 struct _XSTATE_SAVE
* Prev
;
2011 PXSAVE_AREA Reserved3
;
2012 struct _KTHREAD
* Thread
;
2016 XSTATE_CONTEXT XStateContext
;
2019 } XSTATE_SAVE
, *PXSTATE_SAVE
;
2023 #define MAXIMUM_SUPPORTED_EXTENSION 512
2025 #if !defined(__midl) && !defined(MIDL_PASS)
2026 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
2031 #define XSAVE_ALIGN 64
2032 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
2034 #if !defined(__midl) && !defined(MIDL_PASS)
2035 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
2036 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
2037 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
2040 typedef struct _CONTEXT_CHUNK
{
2043 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
2045 typedef struct _CONTEXT_EX
{
2047 CONTEXT_CHUNK Legacy
;
2048 CONTEXT_CHUNK XState
;
2049 } CONTEXT_EX
, *PCONTEXT_EX
;
2051 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
2053 #if (NTDDI_VERSION >= NTDDI_VISTA)
2054 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
2055 #elif (NTDDI_VERSION >= NTDDI_WINXP)
2056 extern NTSYSAPI CCHAR KeNumberProcessors
;
2058 __CREATE_NTOS_DATA_IMPORT_ALIAS(KeNumberProcessors
)
2059 extern PCCHAR KeNumberProcessors
;
2063 /******************************************************************************
2064 * Memory manager Types *
2065 ******************************************************************************/
2067 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2068 typedef ULONG NODE_REQUIREMENT
;
2069 #define MM_ANY_NODE_OK 0x80000000
2072 #define MM_DONT_ZERO_ALLOCATION 0x00000001
2073 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
2074 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
2075 #define MM_ALLOCATE_NO_WAIT 0x00000008
2076 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
2077 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
2079 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2080 #define MDL_PAGES_LOCKED 0x0002
2081 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2082 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2083 #define MDL_PARTIAL 0x0010
2084 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2085 #define MDL_IO_PAGE_READ 0x0040
2086 #define MDL_WRITE_OPERATION 0x0080
2087 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2088 #define MDL_FREE_EXTRA_PTES 0x0200
2089 #define MDL_DESCRIBES_AWE 0x0400
2090 #define MDL_IO_SPACE 0x0800
2091 #define MDL_NETWORK_HEADER 0x1000
2092 #define MDL_MAPPING_CAN_FAIL 0x2000
2093 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2094 #define MDL_INTERNAL 0x8000
2096 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
2097 MDL_PAGES_LOCKED | \
2098 MDL_SOURCE_IS_NONPAGED_POOL | \
2099 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2100 MDL_PARENT_MAPPED_SYSTEM_VA | \
2104 #define FLUSH_MULTIPLE_MAXIMUM 32
2106 /* Section access rights */
2107 #define SECTION_QUERY 0x0001
2108 #define SECTION_MAP_WRITE 0x0002
2109 #define SECTION_MAP_READ 0x0004
2110 #define SECTION_MAP_EXECUTE 0x0008
2111 #define SECTION_EXTEND_SIZE 0x0010
2112 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
2114 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
2115 SECTION_MAP_WRITE | \
2116 SECTION_MAP_READ | \
2117 SECTION_MAP_EXECUTE | \
2118 SECTION_EXTEND_SIZE)
2120 #define SESSION_QUERY_ACCESS 0x0001
2121 #define SESSION_MODIFY_ACCESS 0x0002
2123 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
2124 SESSION_QUERY_ACCESS | \
2125 SESSION_MODIFY_ACCESS)
2127 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
2129 #define PAGE_NOACCESS 0x01
2130 #define PAGE_READONLY 0x02
2131 #define PAGE_READWRITE 0x04
2132 #define PAGE_WRITECOPY 0x08
2133 #define PAGE_EXECUTE 0x10
2134 #define PAGE_EXECUTE_READ 0x20
2135 #define PAGE_EXECUTE_READWRITE 0x40
2136 #define PAGE_EXECUTE_WRITECOPY 0x80
2137 #define PAGE_GUARD 0x100
2138 #define PAGE_NOCACHE 0x200
2139 #define PAGE_WRITECOMBINE 0x400
2141 #define MEM_COMMIT 0x1000
2142 #define MEM_RESERVE 0x2000
2143 #define MEM_DECOMMIT 0x4000
2144 #define MEM_RELEASE 0x8000
2145 #define MEM_FREE 0x10000
2146 #define MEM_PRIVATE 0x20000
2147 #define MEM_MAPPED 0x40000
2148 #define MEM_RESET 0x80000
2149 #define MEM_TOP_DOWN 0x100000
2150 #define MEM_LARGE_PAGES 0x20000000
2151 #define MEM_4MB_PAGES 0x80000000
2153 #define SEC_RESERVE 0x4000000
2154 #define SEC_COMMIT 0x8000000
2155 #define SEC_LARGE_PAGES 0x80000000
2157 /* Section map options */
2158 typedef enum _SECTION_INHERIT
{
2163 typedef ULONG PFN_COUNT
;
2164 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
2165 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
2167 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL
) +
2168 (ByteOffset
+ ByteCount
+ PAGE_SIZE
-1) / PAGE_SIZE
* sizeof(PFN_NUMBER
)))
2169 typedef struct _MDL
{
2173 struct _EPROCESS
*Process
;
2174 PVOID MappedSystemVa
;
2179 #if (_MSC_VER >= 1600)
2180 typedef _Readable_bytes_(_Inexpressible_(polymorphism
)) MDL
*PMDLX
;
2185 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
2186 MmFrameBufferCached
= 2
2187 } MEMORY_CACHING_TYPE_ORIG
;
2189 typedef enum _MEMORY_CACHING_TYPE
{
2190 MmNonCached
= FALSE
,
2192 MmWriteCombined
= MmFrameBufferCached
,
2193 MmHardwareCoherentCached
,
2194 MmNonCachedUnordered
,
2197 } MEMORY_CACHING_TYPE
;
2199 typedef enum _MM_PAGE_PRIORITY
{
2201 NormalPagePriority
= 16,
2202 HighPagePriority
= 32
2205 typedef enum _MM_SYSTEM_SIZE
{
2212 __CREATE_NTOS_DATA_IMPORT_ALIAS(Mm64BitPhysicalAddress
)
2213 extern PBOOLEAN Mm64BitPhysicalAddress
;
2215 extern NTKERNELAPI PVOID MmBadPointer
;
2218 /******************************************************************************
2220 ******************************************************************************/
2221 #define EX_RUNDOWN_ACTIVE 0x1
2222 #define EX_RUNDOWN_COUNT_SHIFT 0x1
2223 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
2225 typedef struct _FAST_MUTEX
{
2226 volatile LONG Count
;
2231 } FAST_MUTEX
, *PFAST_MUTEX
;
2233 typedef enum _SUITE_TYPE
{
2237 CommunicationServer
,
2239 SmallBusinessRestricted
,
2253 typedef enum _EX_POOL_PRIORITY
{
2255 LowPoolPrioritySpecialPoolOverrun
= 8,
2256 LowPoolPrioritySpecialPoolUnderrun
= 9,
2257 NormalPoolPriority
= 16,
2258 NormalPoolPrioritySpecialPoolOverrun
= 24,
2259 NormalPoolPrioritySpecialPoolUnderrun
= 25,
2260 HighPoolPriority
= 32,
2261 HighPoolPrioritySpecialPoolOverrun
= 40,
2262 HighPoolPrioritySpecialPoolUnderrun
= 41
2265 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
2266 #define LOOKASIDE_ALIGN
2268 #define LOOKASIDE_ALIGN DECLSPEC_CACHEALIGN
2271 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
2273 _IRQL_requires_same_
2274 _Function_class_(ALLOCATE_FUNCTION
)
2276 (NTAPI
*PALLOCATE_FUNCTION
)(
2277 _In_ POOL_TYPE PoolType
,
2278 _In_ SIZE_T NumberOfBytes
,
2281 _IRQL_requires_same_
2282 _Function_class_(ALLOCATE_FUNCTION_EX
)
2284 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
2285 _In_ POOL_TYPE PoolType
,
2286 _In_ SIZE_T NumberOfBytes
,
2288 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2290 _IRQL_requires_same_
2291 _Function_class_(FREE_FUNCTION
)
2293 (NTAPI
*PFREE_FUNCTION
)(
2296 _IRQL_requires_same_
2297 _Function_class_(FREE_FUNCTION_EX
)
2299 (NTAPI
*PFREE_FUNCTION_EX
)(
2301 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2303 _IRQL_requires_same_
2304 _Function_class_(CALLBACK_FUNCTION
)
2306 (NTAPI CALLBACK_FUNCTION
)(
2307 _In_opt_ PVOID CallbackContext
,
2308 _In_opt_ PVOID Argument1
,
2309 _In_opt_ PVOID Argument2
);
2310 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
2312 #define GENERAL_LOOKASIDE_LAYOUT \
2313 _ANONYMOUS_UNION union { \
2314 SLIST_HEADER ListHead; \
2315 SINGLE_LIST_ENTRY SingleListHead; \
2318 USHORT MaximumDepth; \
2319 ULONG TotalAllocates; \
2320 _ANONYMOUS_UNION union { \
2321 ULONG AllocateMisses; \
2322 ULONG AllocateHits; \
2323 } DUMMYUNIONNAME2; \
2325 _ANONYMOUS_UNION union { \
2328 } DUMMYUNIONNAME3; \
2332 _ANONYMOUS_UNION union { \
2333 PALLOCATE_FUNCTION_EX AllocateEx; \
2334 PALLOCATE_FUNCTION Allocate; \
2335 } DUMMYUNIONNAME4; \
2336 _ANONYMOUS_UNION union { \
2337 PFREE_FUNCTION_EX FreeEx; \
2338 PFREE_FUNCTION Free; \
2339 } DUMMYUNIONNAME5; \
2340 LIST_ENTRY ListEntry; \
2341 ULONG LastTotalAllocates; \
2342 _ANONYMOUS_UNION union { \
2343 ULONG LastAllocateMisses; \
2344 ULONG LastAllocateHits; \
2345 } DUMMYUNIONNAME6; \
2348 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
2349 GENERAL_LOOKASIDE_LAYOUT
2350 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
2352 typedef struct _GENERAL_LOOKASIDE_POOL
{
2353 GENERAL_LOOKASIDE_LAYOUT
2354 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
2356 #define LOOKASIDE_CHECK(f) \
2357 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
2359 LOOKASIDE_CHECK(TotalFrees
);
2360 LOOKASIDE_CHECK(Tag
);
2361 LOOKASIDE_CHECK(Future
);
2363 typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST
{
2364 GENERAL_LOOKASIDE L
;
2365 #if !defined(_AMD64_) && !defined(_IA64_)
2366 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
2368 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
2370 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
2371 GENERAL_LOOKASIDE L
;
2372 #if !defined(_AMD64_) && !defined(_IA64_)
2373 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
2375 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
2377 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
2379 typedef struct _LOOKASIDE_LIST_EX
{
2380 GENERAL_LOOKASIDE_POOL L
;
2381 } LOOKASIDE_LIST_EX
;
2383 #if (NTDDI_VERSION >= NTDDI_VISTA)
2385 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
2386 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
2388 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
2389 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
2391 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2393 typedef struct _EX_RUNDOWN_REF
{
2394 _ANONYMOUS_UNION
union {
2395 volatile ULONG_PTR Count
;
2398 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
2400 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
2402 typedef enum _WORK_QUEUE_TYPE
{
2405 HyperCriticalWorkQueue
,
2409 _IRQL_requires_same_
2410 _Function_class_(WORKER_THREAD_ROUTINE
)
2412 (NTAPI WORKER_THREAD_ROUTINE
)(
2413 _In_ PVOID Parameter
);
2414 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
2416 typedef struct _WORK_QUEUE_ITEM
{
2418 PWORKER_THREAD_ROUTINE WorkerRoutine
;
2419 volatile PVOID Parameter
;
2420 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
2422 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
2424 typedef struct _OWNER_ENTRY
{
2425 ERESOURCE_THREAD OwnerThread
;
2426 _ANONYMOUS_UNION
union {
2427 _ANONYMOUS_STRUCT
struct {
2428 ULONG IoPriorityBoosted
:1;
2429 ULONG OwnerReferenced
:1;
2430 ULONG OwnerCount
:30;
2434 } OWNER_ENTRY
, *POWNER_ENTRY
;
2436 typedef struct _ERESOURCE
{
2437 LIST_ENTRY SystemResourcesList
;
2438 POWNER_ENTRY OwnerTable
;
2441 volatile PKSEMAPHORE SharedWaiters
;
2442 volatile PKEVENT ExclusiveWaiters
;
2443 OWNER_ENTRY OwnerEntry
;
2444 ULONG ActiveEntries
;
2445 ULONG ContentionCount
;
2446 ULONG NumberOfSharedWaiters
;
2447 ULONG NumberOfExclusiveWaiters
;
2451 _ANONYMOUS_UNION
union {
2453 ULONG_PTR CreatorBackTraceIndex
;
2455 KSPIN_LOCK SpinLock
;
2456 } ERESOURCE
, *PERESOURCE
;
2458 /* ERESOURCE.Flag */
2459 #define ResourceNeverExclusive 0x0010
2460 #define ResourceReleaseByOtherThread 0x0020
2461 #define ResourceOwnedExclusive 0x0080
2463 #define RESOURCE_HASH_TABLE_SIZE 64
2465 typedef struct _RESOURCE_HASH_ENTRY
{
2466 LIST_ENTRY ListEntry
;
2468 ULONG ContentionCount
;
2470 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
2472 typedef struct _RESOURCE_PERFORMANCE_DATA
{
2473 ULONG ActiveResourceCount
;
2474 ULONG TotalResourceCount
;
2475 ULONG ExclusiveAcquire
;
2476 ULONG SharedFirstLevel
;
2477 ULONG SharedSecondLevel
;
2478 ULONG StarveFirstLevel
;
2479 ULONG StarveSecondLevel
;
2480 ULONG WaitForExclusive
;
2481 ULONG OwnerTableExpands
;
2482 ULONG MaximumTableExpand
;
2483 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
2484 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
2486 /* Global debug flag */
2488 extern NTKERNELAPI ULONG NtGlobalFlag
;
2489 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
2491 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
2494 /******************************************************************************
2495 * Security Manager Types *
2496 ******************************************************************************/
2499 typedef PVOID PSECURITY_DESCRIPTOR
;
2500 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
2501 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
2502 typedef PVOID PACCESS_TOKEN
;
2505 #define DELETE 0x00010000L
2506 #define READ_CONTROL 0x00020000L
2507 #define WRITE_DAC 0x00040000L
2508 #define WRITE_OWNER 0x00080000L
2509 #define SYNCHRONIZE 0x00100000L
2510 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
2511 #define STANDARD_RIGHTS_READ READ_CONTROL
2512 #define STANDARD_RIGHTS_WRITE READ_CONTROL
2513 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
2514 #define STANDARD_RIGHTS_ALL 0x001F0000L
2515 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
2516 #define ACCESS_SYSTEM_SECURITY 0x01000000L
2517 #define MAXIMUM_ALLOWED 0x02000000L
2518 #define GENERIC_READ 0x80000000L
2519 #define GENERIC_WRITE 0x40000000L
2520 #define GENERIC_EXECUTE 0x20000000L
2521 #define GENERIC_ALL 0x10000000L
2523 typedef struct _GENERIC_MAPPING
{
2524 ACCESS_MASK GenericRead
;
2525 ACCESS_MASK GenericWrite
;
2526 ACCESS_MASK GenericExecute
;
2527 ACCESS_MASK GenericAll
;
2528 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
2530 #define ACL_REVISION 2
2531 #define ACL_REVISION_DS 4
2533 #define ACL_REVISION1 1
2534 #define ACL_REVISION2 2
2535 #define ACL_REVISION3 3
2536 #define ACL_REVISION4 4
2537 #define MIN_ACL_REVISION ACL_REVISION2
2538 #define MAX_ACL_REVISION ACL_REVISION4
2540 typedef struct _ACL
{
2548 /* Current security descriptor revision value */
2549 #define SECURITY_DESCRIPTOR_REVISION (1)
2550 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2552 /* Privilege attributes */
2553 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2554 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2555 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2556 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2558 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
2559 SE_PRIVILEGE_ENABLED | \
2560 SE_PRIVILEGE_REMOVED | \
2561 SE_PRIVILEGE_USED_FOR_ACCESS)
2563 #include <pshpack4.h>
2564 typedef struct _LUID_AND_ATTRIBUTES
{
2567 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
2568 #include <poppack.h>
2570 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2571 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2573 /* Privilege sets */
2574 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2576 typedef struct _PRIVILEGE_SET
{
2577 ULONG PrivilegeCount
;
2579 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2580 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2582 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2584 SecurityIdentification
,
2585 SecurityImpersonation
,
2587 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2589 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2590 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2591 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2592 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2594 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2595 #define SECURITY_STATIC_TRACKING (FALSE)
2597 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2599 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2601 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2602 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2603 BOOLEAN EffectiveOnly
;
2604 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2606 typedef struct _SE_IMPERSONATION_STATE
{
2607 PACCESS_TOKEN Token
;
2609 BOOLEAN EffectiveOnly
;
2610 SECURITY_IMPERSONATION_LEVEL Level
;
2611 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2613 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2614 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2615 #define DACL_SECURITY_INFORMATION (0x00000004L)
2616 #define SACL_SECURITY_INFORMATION (0x00000008L)
2617 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2619 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2620 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2621 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2622 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2624 typedef enum _SECURITY_OPERATION_CODE
{
2625 SetSecurityDescriptor
,
2626 QuerySecurityDescriptor
,
2627 DeleteSecurityDescriptor
,
2628 AssignSecurityDescriptor
2629 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2631 #define INITIAL_PRIVILEGE_COUNT 3
2633 typedef struct _INITIAL_PRIVILEGE_SET
{
2634 ULONG PrivilegeCount
;
2636 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2637 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2639 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2640 #define SE_CREATE_TOKEN_PRIVILEGE 2
2641 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2642 #define SE_LOCK_MEMORY_PRIVILEGE 4
2643 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2644 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2645 #define SE_TCB_PRIVILEGE 7
2646 #define SE_SECURITY_PRIVILEGE 8
2647 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2648 #define SE_LOAD_DRIVER_PRIVILEGE 10
2649 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2650 #define SE_SYSTEMTIME_PRIVILEGE 12
2651 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2652 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2653 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2654 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2655 #define SE_BACKUP_PRIVILEGE 17
2656 #define SE_RESTORE_PRIVILEGE 18
2657 #define SE_SHUTDOWN_PRIVILEGE 19
2658 #define SE_DEBUG_PRIVILEGE 20
2659 #define SE_AUDIT_PRIVILEGE 21
2660 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2661 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2662 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2663 #define SE_UNDOCK_PRIVILEGE 25
2664 #define SE_SYNC_AGENT_PRIVILEGE 26
2665 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2666 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2667 #define SE_IMPERSONATE_PRIVILEGE 29
2668 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2669 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2670 #define SE_RELABEL_PRIVILEGE 32
2671 #define SE_INC_WORKING_SET_PRIVILEGE 33
2672 #define SE_TIME_ZONE_PRIVILEGE 34
2673 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2674 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2676 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2677 PACCESS_TOKEN ClientToken
;
2678 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2679 PACCESS_TOKEN PrimaryToken
;
2680 PVOID ProcessAuditId
;
2681 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2683 typedef struct _ACCESS_STATE
{
2685 BOOLEAN SecurityEvaluated
;
2686 BOOLEAN GenerateAudit
;
2687 BOOLEAN GenerateOnClose
;
2688 BOOLEAN PrivilegesAllocated
;
2690 ACCESS_MASK RemainingDesiredAccess
;
2691 ACCESS_MASK PreviouslyGrantedAccess
;
2692 ACCESS_MASK OriginalDesiredAccess
;
2693 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2694 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2697 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2698 PRIVILEGE_SET PrivilegeSet
;
2700 BOOLEAN AuditPrivileges
;
2701 UNICODE_STRING ObjectName
;
2702 UNICODE_STRING ObjectTypeName
;
2703 } ACCESS_STATE
, *PACCESS_STATE
;
2706 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2708 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
2712 #ifndef _NTLSA_AUDIT_
2713 #define _NTLSA_AUDIT_
2715 #define SE_MAX_AUDIT_PARAMETERS 32
2716 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2718 #define SE_ADT_OBJECT_ONLY 0x1
2720 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2721 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2722 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2723 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2724 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2726 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2727 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2728 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2730 typedef enum _SE_ADT_PARAMETER_TYPE
{
2731 SeAdtParmTypeNone
= 0,
2732 SeAdtParmTypeString
,
2733 SeAdtParmTypeFileSpec
,
2736 SeAdtParmTypeLogonId
,
2737 SeAdtParmTypeNoLogonId
,
2738 SeAdtParmTypeAccessMask
,
2740 SeAdtParmTypeObjectTypes
,
2741 SeAdtParmTypeHexUlong
,
2746 SeAdtParmTypeHexInt64
,
2747 SeAdtParmTypeStringList
,
2748 SeAdtParmTypeSidList
,
2749 SeAdtParmTypeDuration
,
2750 SeAdtParmTypeUserAccountControl
,
2752 SeAdtParmTypeMessage
,
2753 SeAdtParmTypeDateTime
,
2754 SeAdtParmTypeSockAddr
,
2756 SeAdtParmTypeLogonHours
,
2757 SeAdtParmTypeLogonIdNoSid
,
2758 SeAdtParmTypeUlongNoConv
,
2759 SeAdtParmTypeSockAddrNoPort
,
2760 SeAdtParmTypeAccessReason
2761 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2763 typedef struct _SE_ADT_OBJECT_TYPE
{
2767 ACCESS_MASK AccessMask
;
2768 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2770 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2771 SE_ADT_PARAMETER_TYPE Type
;
2775 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2777 typedef struct _SE_ADT_ACCESS_REASON
{
2778 ACCESS_MASK AccessMask
;
2779 ULONG AccessReasons
[32];
2780 ULONG ObjectTypeIndex
;
2781 ULONG AccessGranted
;
2782 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2783 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2785 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2788 ULONG ParameterCount
;
2790 USHORT FlatSubCategoryId
;
2793 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2794 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2796 #endif /* !_NTLSA_AUDIT_ */
2797 #endif /* !_NTLSA_IFS_ */
2798 /******************************************************************************
2799 * Power Management Support Types *
2800 ******************************************************************************/
2805 #define PO_CB_SYSTEM_POWER_POLICY 0
2806 #define PO_CB_AC_STATUS 1
2807 #define PO_CB_BUTTON_COLLISION 2
2808 #define PO_CB_SYSTEM_STATE_LOCK 3
2809 #define PO_CB_LID_SWITCH_STATE 4
2810 #define PO_CB_PROCESSOR_POWER_POLICY 5
2812 /* Power States/Levels */
2813 typedef enum _SYSTEM_POWER_STATE
{
2814 PowerSystemUnspecified
= 0,
2816 PowerSystemSleeping1
,
2817 PowerSystemSleeping2
,
2818 PowerSystemSleeping3
,
2819 PowerSystemHibernate
,
2820 PowerSystemShutdown
,
2822 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2824 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
2826 typedef enum _POWER_INFORMATION_LEVEL
{
2827 SystemPowerPolicyAc
,
2828 SystemPowerPolicyDc
,
2829 VerifySystemPolicyAc
,
2830 VerifySystemPolicyDc
,
2831 SystemPowerCapabilities
,
2833 SystemPowerStateHandler
,
2834 ProcessorStateHandler
,
2835 SystemPowerPolicyCurrent
,
2836 AdministratorPowerPolicy
,
2837 SystemReserveHiberFile
,
2838 ProcessorInformation
,
2839 SystemPowerInformation
,
2840 ProcessorStateHandler2
,
2843 SystemExecutionState
,
2844 SystemPowerStateNotifyHandler
,
2845 ProcessorPowerPolicyAc
,
2846 ProcessorPowerPolicyDc
,
2847 VerifyProcessorPowerPolicyAc
,
2848 VerifyProcessorPowerPolicyDc
,
2849 ProcessorPowerPolicyCurrent
,
2850 SystemPowerStateLogging
,
2851 SystemPowerLoggingEntry
,
2852 SetPowerSettingValue
,
2853 NotifyUserPowerSetting
,
2854 PowerInformationLevelUnused0
,
2855 PowerInformationLevelUnused1
,
2857 TraceApplicationPowerMessage
,
2858 TraceApplicationPowerMessageEnd
,
2859 ProcessorPerfStates
,
2860 ProcessorIdleStates
,
2863 SystemHiberFileInformation
,
2864 TraceServicePowerMessage
,
2866 PowerShutdownNotification
,
2867 MonitorCapabilities
,
2869 SessionDisplayState
,
2872 GetPowerRequestList
,
2873 ProcessorInformationEx
,
2874 NotifyUserModeLegacyPowerEvent
,
2876 ProcessorIdleDomains
,
2878 SystemHiberFileSize
,
2879 PowerInformationLevelMaximum
2880 } POWER_INFORMATION_LEVEL
;
2883 PowerActionNone
= 0,
2884 PowerActionReserved
,
2886 PowerActionHibernate
,
2887 PowerActionShutdown
,
2888 PowerActionShutdownReset
,
2889 PowerActionShutdownOff
,
2890 PowerActionWarmEject
2891 } POWER_ACTION
, *PPOWER_ACTION
;
2893 typedef enum _DEVICE_POWER_STATE
{
2894 PowerDeviceUnspecified
= 0,
2900 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
2902 typedef enum _MONITOR_DISPLAY_STATE
{
2903 PowerMonitorOff
= 0,
2906 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
2908 typedef union _POWER_STATE
{
2909 SYSTEM_POWER_STATE SystemState
;
2910 DEVICE_POWER_STATE DeviceState
;
2911 } POWER_STATE
, *PPOWER_STATE
;
2913 typedef enum _POWER_STATE_TYPE
{
2914 SystemPowerState
= 0,
2916 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
2918 #if (NTDDI_VERSION >= NTDDI_VISTA)
2919 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
2920 _ANONYMOUS_UNION
union {
2921 _ANONYMOUS_STRUCT
struct {
2923 ULONG TargetSystemState
:4;
2924 ULONG EffectiveSystemState
:4;
2925 ULONG CurrentSystemState
:4;
2926 ULONG IgnoreHibernationPath
:1;
2927 ULONG PseudoTransition
:1;
2930 ULONG ContextAsUlong
;
2932 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
2935 #if (NTDDI_VERSION >= NTDDI_WIN7)
2936 typedef struct _COUNTED_REASON_CONTEXT
{
2939 _ANONYMOUS_UNION
union {
2940 _ANONYMOUS_STRUCT
struct {
2941 UNICODE_STRING ResourceFileName
;
2942 USHORT ResourceReasonId
;
2944 PUNICODE_STRING ReasonStrings
;
2946 UNICODE_STRING SimpleString
;
2948 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
2951 #define IOCTL_QUERY_DEVICE_POWER_STATE \
2952 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
2954 #define IOCTL_SET_DEVICE_WAKE \
2955 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2957 #define IOCTL_CANCEL_DEVICE_WAKE \
2958 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2960 #define ES_SYSTEM_REQUIRED 0x00000001
2961 #define ES_DISPLAY_REQUIRED 0x00000002
2962 #define ES_USER_PRESENT 0x00000004
2963 #define ES_CONTINUOUS 0x80000000
2965 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
2972 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
2973 #define DIAGNOSTIC_REASON_VERSION 0
2974 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
2975 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
2976 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
2977 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
2980 #define POWER_REQUEST_CONTEXT_VERSION 0
2981 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
2982 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
2984 #define PowerRequestMaximum 3
2986 typedef enum _POWER_REQUEST_TYPE
{
2987 PowerRequestDisplayRequired
,
2988 PowerRequestSystemRequired
,
2989 PowerRequestAwayModeRequired
2990 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
2992 #if (NTDDI_VERSION >= NTDDI_WINXP)
2994 #define PDCAP_D0_SUPPORTED 0x00000001
2995 #define PDCAP_D1_SUPPORTED 0x00000002
2996 #define PDCAP_D2_SUPPORTED 0x00000004
2997 #define PDCAP_D3_SUPPORTED 0x00000008
2998 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
2999 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
3000 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
3001 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
3002 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
3004 typedef struct CM_Power_Data_s
{
3006 DEVICE_POWER_STATE PD_MostRecentPowerState
;
3007 ULONG PD_Capabilities
;
3011 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
3012 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
3013 } CM_POWER_DATA
, *PCM_POWER_DATA
;
3015 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3017 typedef enum _SYSTEM_POWER_CONDITION
{
3022 } SYSTEM_POWER_CONDITION
;
3024 typedef struct _SET_POWER_SETTING_VALUE
{
3027 SYSTEM_POWER_CONDITION PowerCondition
;
3029 UCHAR Data
[ANYSIZE_ARRAY
];
3030 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
3032 #define POWER_SETTING_VALUE_VERSION (0x1)
3034 typedef struct _NOTIFY_USER_POWER_SETTING
{
3036 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
3038 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
3039 LARGE_INTEGER ActivationTime
;
3041 ULONG ButtonInstanceID
;
3042 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
3044 typedef enum _POWER_PLATFORM_ROLE
{
3045 PlatformRoleUnspecified
= 0,
3046 PlatformRoleDesktop
,
3048 PlatformRoleWorkstation
,
3049 PlatformRoleEnterpriseServer
,
3050 PlatformRoleSOHOServer
,
3051 PlatformRoleAppliancePC
,
3052 PlatformRolePerformanceServer
,
3054 } POWER_PLATFORM_ROLE
;
3056 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
3060 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
3061 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
3063 #endif /* !_PO_DDK_ */
3065 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
3066 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
3067 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
3068 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
3070 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
3071 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
3072 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
3073 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
3074 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
3075 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
3076 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
3077 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
3078 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
3079 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
3080 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
3081 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
3082 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
3083 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
3084 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
3085 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
3086 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
3087 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
3088 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
3089 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
3090 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
3091 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
3092 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
3093 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
3094 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
3095 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
3096 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
3097 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
3098 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
3099 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
3100 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
3101 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
3102 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
3103 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
3104 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
3105 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
3106 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
3107 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
3108 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
3109 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
3110 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
3111 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
3112 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
3113 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
3114 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
3115 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
3116 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
3117 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
3118 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
3119 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
3120 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
3121 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
3122 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
3123 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
3124 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
3125 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
3126 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
3127 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
3128 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
3129 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
3130 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
3131 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
3132 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
3133 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
3134 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
3135 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
3136 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
3137 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
3138 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
3139 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
3140 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
3141 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
3142 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
3143 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
3144 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
3145 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
3146 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
3147 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
3148 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
3149 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
3150 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
3151 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
3152 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
3153 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
3154 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
3155 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
3156 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
3157 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
3158 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
3159 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
3160 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
3161 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
3162 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
3163 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
3164 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
3165 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
3166 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
3167 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
3168 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
3169 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
3170 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
3171 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
3172 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
3173 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
3174 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
3175 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
3176 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
3177 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
3178 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
3180 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
3181 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
3182 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
3183 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
3185 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
3186 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
3188 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
3189 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
3191 _Function_class_(REQUEST_POWER_COMPLETE
)
3192 _IRQL_requires_same_
3194 (NTAPI REQUEST_POWER_COMPLETE
)(
3195 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
3196 _In_ UCHAR MinorFunction
,
3197 _In_ POWER_STATE PowerState
,
3198 _In_opt_ PVOID Context
,
3199 _In_
struct _IO_STATUS_BLOCK
*IoStatus
);
3200 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
3202 _Function_class_(POWER_SETTING_CALLBACK
)
3203 _IRQL_requires_same_
3205 (NTAPI POWER_SETTING_CALLBACK
)(
3206 _In_ LPCGUID SettingGuid
,
3207 _In_reads_bytes_(ValueLength
) PVOID Value
,
3208 _In_ ULONG ValueLength
,
3209 _Inout_opt_ PVOID Context
);
3210 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
3212 /******************************************************************************
3213 * Configuration Manager Types *
3214 ******************************************************************************/
3216 /* Resource list definitions */
3217 typedef int CM_RESOURCE_TYPE
;
3219 #define CmResourceTypeNull 0
3220 #define CmResourceTypePort 1
3221 #define CmResourceTypeInterrupt 2
3222 #define CmResourceTypeMemory 3
3223 #define CmResourceTypeDma 4
3224 #define CmResourceTypeDeviceSpecific 5
3225 #define CmResourceTypeBusNumber 6
3226 #define CmResourceTypeNonArbitrated 128
3227 #define CmResourceTypeConfigData 128
3228 #define CmResourceTypeDevicePrivate 129
3229 #define CmResourceTypePcCardConfig 130
3230 #define CmResourceTypeMfCardConfig 131
3232 /* KEY_VALUE_Xxx.Type */
3235 #define REG_EXPAND_SZ 2
3236 #define REG_BINARY 3
3238 #define REG_DWORD_LITTLE_ENDIAN 4
3239 #define REG_DWORD_BIG_ENDIAN 5
3241 #define REG_MULTI_SZ 7
3242 #define REG_RESOURCE_LIST 8
3243 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3244 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3245 #define REG_QWORD 11
3246 #define REG_QWORD_LITTLE_ENDIAN 11
3248 /* Registry Access Rights */
3249 #define KEY_QUERY_VALUE (0x0001)
3250 #define KEY_SET_VALUE (0x0002)
3251 #define KEY_CREATE_SUB_KEY (0x0004)
3252 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
3253 #define KEY_NOTIFY (0x0010)
3254 #define KEY_CREATE_LINK (0x0020)
3255 #define KEY_WOW64_32KEY (0x0200)
3256 #define KEY_WOW64_64KEY (0x0100)
3257 #define KEY_WOW64_RES (0x0300)
3259 #define KEY_READ ((STANDARD_RIGHTS_READ |\
3261 KEY_ENUMERATE_SUB_KEYS |\
3266 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
3268 KEY_CREATE_SUB_KEY) \
3272 #define KEY_EXECUTE ((KEY_READ) \
3276 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
3279 KEY_CREATE_SUB_KEY |\
3280 KEY_ENUMERATE_SUB_KEYS |\
3286 /* Registry Open/Create Options */
3287 #define REG_OPTION_RESERVED (0x00000000L)
3288 #define REG_OPTION_NON_VOLATILE (0x00000000L)
3289 #define REG_OPTION_VOLATILE (0x00000001L)
3290 #define REG_OPTION_CREATE_LINK (0x00000002L)
3291 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
3292 #define REG_OPTION_OPEN_LINK (0x00000008L)
3294 #define REG_LEGAL_OPTION \
3295 (REG_OPTION_RESERVED |\
3296 REG_OPTION_NON_VOLATILE |\
3297 REG_OPTION_VOLATILE |\
3298 REG_OPTION_CREATE_LINK |\
3299 REG_OPTION_BACKUP_RESTORE |\
3300 REG_OPTION_OPEN_LINK)
3302 #define REG_OPEN_LEGAL_OPTION \
3303 (REG_OPTION_RESERVED |\
3304 REG_OPTION_BACKUP_RESTORE |\
3305 REG_OPTION_OPEN_LINK)
3307 #define REG_STANDARD_FORMAT 1
3308 #define REG_LATEST_FORMAT 2
3309 #define REG_NO_COMPRESSION 4
3311 /* Key creation/open disposition */
3312 #define REG_CREATED_NEW_KEY (0x00000001L)
3313 #define REG_OPENED_EXISTING_KEY (0x00000002L)
3315 /* Key restore & hive load flags */
3316 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
3317 #define REG_REFRESH_HIVE (0x00000002L)
3318 #define REG_NO_LAZY_FLUSH (0x00000004L)
3319 #define REG_FORCE_RESTORE (0x00000008L)
3320 #define REG_APP_HIVE (0x00000010L)
3321 #define REG_PROCESS_PRIVATE (0x00000020L)
3322 #define REG_START_JOURNAL (0x00000040L)
3323 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
3324 #define REG_HIVE_NO_RM (0x00000100L)
3325 #define REG_HIVE_SINGLE_LOG (0x00000200L)
3326 #define REG_BOOT_HIVE (0x00000400L)
3329 #define REG_FORCE_UNLOAD 1
3331 /* Notify Filter Values */
3332 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
3333 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
3334 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
3335 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
3337 #define REG_LEGAL_CHANGE_FILTER \
3338 (REG_NOTIFY_CHANGE_NAME |\
3339 REG_NOTIFY_CHANGE_ATTRIBUTES |\
3340 REG_NOTIFY_CHANGE_LAST_SET |\
3341 REG_NOTIFY_CHANGE_SECURITY)
3343 #include <pshpack4.h>
3344 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
3346 UCHAR ShareDisposition
;
3350 PHYSICAL_ADDRESS Start
;
3354 PHYSICAL_ADDRESS Start
;
3358 #if defined(NT_PROCESSOR_GROUPS)
3367 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3369 _ANONYMOUS_UNION
union {
3371 #if defined(NT_PROCESSOR_GROUPS)
3376 USHORT MessageCount
;
3381 #if defined(NT_PROCESSOR_GROUPS)
3394 PHYSICAL_ADDRESS Start
;
3414 } DeviceSpecificData
;
3415 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3417 PHYSICAL_ADDRESS Start
;
3421 PHYSICAL_ADDRESS Start
;
3425 PHYSICAL_ADDRESS Start
;
3430 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
3431 #include <poppack.h>
3433 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
3434 #define CmResourceTypeNull 0
3435 #define CmResourceTypePort 1
3436 #define CmResourceTypeInterrupt 2
3437 #define CmResourceTypeMemory 3
3438 #define CmResourceTypeDma 4
3439 #define CmResourceTypeDeviceSpecific 5
3440 #define CmResourceTypeBusNumber 6
3441 #define CmResourceTypeMemoryLarge 7
3442 #define CmResourceTypeNonArbitrated 128
3443 #define CmResourceTypeConfigData 128
3444 #define CmResourceTypeDevicePrivate 129
3445 #define CmResourceTypePcCardConfig 130
3446 #define CmResourceTypeMfCardConfig 131
3448 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
3449 typedef enum _CM_SHARE_DISPOSITION
{
3450 CmResourceShareUndetermined
= 0,
3451 CmResourceShareDeviceExclusive
,
3452 CmResourceShareDriverExclusive
,
3453 CmResourceShareShared
3454 } CM_SHARE_DISPOSITION
;
3456 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
3457 #define CM_RESOURCE_PORT_MEMORY 0x0000
3458 #define CM_RESOURCE_PORT_IO 0x0001
3459 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
3460 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
3461 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
3462 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
3463 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
3464 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
3465 #define CM_RESOURCE_PORT_BAR 0x0100
3467 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
3468 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
3469 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
3470 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
3471 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
3473 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
3475 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
3477 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
3478 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
3479 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
3480 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
3481 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
3482 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
3483 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
3484 #define CM_RESOURCE_MEMORY_24 0x0010
3485 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
3486 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
3487 #define CM_RESOURCE_MEMORY_BAR 0x0080
3488 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
3490 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
3491 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
3492 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
3493 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
3495 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
3496 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
3497 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
3499 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
3500 #define CM_RESOURCE_DMA_8 0x0000
3501 #define CM_RESOURCE_DMA_16 0x0001
3502 #define CM_RESOURCE_DMA_32 0x0002
3503 #define CM_RESOURCE_DMA_8_AND_16 0x0004
3504 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
3505 #define CM_RESOURCE_DMA_TYPE_A 0x0010
3506 #define CM_RESOURCE_DMA_TYPE_B 0x0020
3507 #define CM_RESOURCE_DMA_TYPE_F 0x0040
3509 typedef struct _DEVICE_FLAGS
{
3517 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
3519 typedef enum _INTERFACE_TYPE
{
3520 InterfaceTypeUndefined
= -1,
3538 MaximumInterfaceType
3539 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
3541 typedef struct _CM_COMPONENT_INFORMATION
{
3545 KAFFINITY AffinityMask
;
3546 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
3548 typedef struct _CM_ROM_BLOCK
{
3551 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
3553 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
3557 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
3558 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
3560 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
3561 INTERFACE_TYPE InterfaceType
;
3563 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
3564 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
3566 typedef struct _CM_RESOURCE_LIST
{
3568 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
3569 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
3571 typedef struct _PNP_BUS_INFORMATION
{
3573 INTERFACE_TYPE LegacyBusType
;
3575 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
3577 #include <pshpack1.h>
3579 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3582 USHORT SectorsPerTrack
;
3584 USHORT NumberDrives
;
3585 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3587 typedef struct _CM_MCA_POS_DATA
{
3593 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3595 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3599 UCHAR DeviceType
[3];
3600 USHORT DeviceAttributes
;
3601 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3603 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3607 USHORT ControlField
;
3609 ULONG EventFlagAddress
;
3610 USHORT RealModeEntryOffset
;
3611 USHORT RealModeEntrySegment
;
3612 USHORT ProtectedModeEntryOffset
;
3613 ULONG ProtectedModeCodeBaseAddress
;
3615 USHORT RealModeDataBaseAddress
;
3616 ULONG ProtectedModeDataBaseAddress
;
3617 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3619 #include <poppack.h>
3621 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3622 ULONG BytesPerSector
;
3623 ULONG NumberOfCylinders
;
3624 ULONG SectorsPerTrack
;
3625 ULONG NumberOfHeads
;
3626 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3628 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3633 USHORT KeyboardFlags
;
3634 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3636 typedef struct _CM_SCSI_DEVICE_DATA
{
3639 UCHAR HostIdentifier
;
3640 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3642 typedef struct _CM_VIDEO_DEVICE_DATA
{
3646 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3648 typedef struct _CM_SONIC_DEVICE_DATA
{
3651 USHORT DataConfigurationRegister
;
3652 UCHAR EthernetAddress
[8];
3653 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3655 typedef struct _CM_SERIAL_DEVICE_DATA
{
3659 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3661 typedef struct _CM_MONITOR_DEVICE_DATA
{
3664 USHORT HorizontalScreenSize
;
3665 USHORT VerticalScreenSize
;
3666 USHORT HorizontalResolution
;
3667 USHORT VerticalResolution
;
3668 USHORT HorizontalDisplayTimeLow
;
3669 USHORT HorizontalDisplayTime
;
3670 USHORT HorizontalDisplayTimeHigh
;
3671 USHORT HorizontalBackPorchLow
;
3672 USHORT HorizontalBackPorch
;
3673 USHORT HorizontalBackPorchHigh
;
3674 USHORT HorizontalFrontPorchLow
;
3675 USHORT HorizontalFrontPorch
;
3676 USHORT HorizontalFrontPorchHigh
;
3677 USHORT HorizontalSyncLow
;
3678 USHORT HorizontalSync
;
3679 USHORT HorizontalSyncHigh
;
3680 USHORT VerticalBackPorchLow
;
3681 USHORT VerticalBackPorch
;
3682 USHORT VerticalBackPorchHigh
;
3683 USHORT VerticalFrontPorchLow
;
3684 USHORT VerticalFrontPorch
;
3685 USHORT VerticalFrontPorchHigh
;
3686 USHORT VerticalSyncLow
;
3687 USHORT VerticalSync
;
3688 USHORT VerticalSyncHigh
;
3689 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3691 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3697 UCHAR StepRateHeadUnloadTime
;
3700 UCHAR SectorLengthCode
;
3701 UCHAR SectorPerTrack
;
3702 UCHAR ReadWriteGapLength
;
3703 UCHAR DataTransferLength
;
3704 UCHAR FormatGapLength
;
3705 UCHAR FormatFillCharacter
;
3706 UCHAR HeadSettleTime
;
3707 UCHAR MotorSettleTime
;
3708 UCHAR MaximumTrackValue
;
3709 UCHAR DataTransferRate
;
3710 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3712 typedef enum _KEY_INFORMATION_CLASS
{
3713 KeyBasicInformation
,
3717 KeyCachedInformation
,
3718 KeyFlagsInformation
,
3719 KeyVirtualizationInformation
,
3720 KeyHandleTagsInformation
,
3722 } KEY_INFORMATION_CLASS
;
3724 typedef struct _KEY_BASIC_INFORMATION
{
3725 LARGE_INTEGER LastWriteTime
;
3729 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3731 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3733 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3735 typedef struct _KEY_FULL_INFORMATION
{
3736 LARGE_INTEGER LastWriteTime
;
3744 ULONG MaxValueNameLen
;
3745 ULONG MaxValueDataLen
;
3747 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3749 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3751 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3753 typedef struct _KEY_NODE_INFORMATION
{
3754 LARGE_INTEGER LastWriteTime
;
3760 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3762 typedef enum _KEY_SET_INFORMATION_CLASS
{
3763 KeyWriteTimeInformation
,
3764 KeyWow64FlagsInformation
,
3765 KeyControlFlagsInformation
,
3766 KeySetVirtualizationInformation
,
3767 KeySetDebugInformation
,
3768 KeySetHandleTagsInformation
,
3770 } KEY_SET_INFORMATION_CLASS
;
3772 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3773 ULONG VirtualTarget
:1;
3774 ULONG VirtualStore
:1;
3775 ULONG VirtualSource
:1;
3777 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3779 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3784 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3786 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3793 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3795 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3799 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3800 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3802 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3805 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3806 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3808 typedef struct _KEY_VALUE_ENTRY
{
3809 PUNICODE_STRING ValueName
;
3813 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3815 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3816 KeyValueBasicInformation
,
3817 KeyValueFullInformation
,
3818 KeyValuePartialInformation
,
3819 KeyValueFullInformationAlign64
,
3820 KeyValuePartialInformationAlign64
3821 } KEY_VALUE_INFORMATION_CLASS
;
3823 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3825 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
3827 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3828 LARGE_INTEGER LastWriteTime
;
3829 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3831 #if (NTDDI_VERSION < NTDDI_VISTA)
3832 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3834 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3837 typedef enum _REG_NOTIFY_CLASS
{
3839 RegNtPreDeleteKey
= RegNtDeleteKey
,
3841 RegNtPreSetValueKey
= RegNtSetValueKey
,
3842 RegNtDeleteValueKey
,
3843 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3844 RegNtSetInformationKey
,
3845 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3847 RegNtPreRenameKey
= RegNtRenameKey
,
3849 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3850 RegNtEnumerateValueKey
,
3851 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3853 RegNtPreQueryKey
= RegNtQueryKey
,
3855 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3856 RegNtQueryMultipleValueKey
,
3857 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3862 RegNtKeyHandleClose
,
3863 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3865 RegNtPostSetValueKey
,
3866 RegNtPostDeleteValueKey
,
3867 RegNtPostSetInformationKey
,
3869 RegNtPostEnumerateKey
,
3870 RegNtPostEnumerateValueKey
,
3872 RegNtPostQueryValueKey
,
3873 RegNtPostQueryMultipleValueKey
,
3874 RegNtPostKeyHandleClose
,
3875 RegNtPreCreateKeyEx
,
3876 RegNtPostCreateKeyEx
,
3885 RegNtPreQueryKeySecurity
,
3886 RegNtPostQueryKeySecurity
,
3887 RegNtPreSetKeySecurity
,
3888 RegNtPostSetKeySecurity
,
3889 RegNtCallbackObjectContextCleanup
,
3891 RegNtPostRestoreKey
,
3895 RegNtPostReplaceKey
,
3897 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3899 _IRQL_requires_same_
3900 _Function_class_(EX_CALLBACK_FUNCTION
)
3902 (NTAPI EX_CALLBACK_FUNCTION
)(
3903 _In_ PVOID CallbackContext
,
3904 _In_opt_ PVOID Argument1
,
3905 _In_opt_ PVOID Argument2
);
3906 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
3908 typedef struct _REG_DELETE_KEY_INFORMATION
{
3911 PVOID ObjectContext
;
3913 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
3914 #if (NTDDI_VERSION >= NTDDI_VISTA)
3915 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
3919 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
3921 PUNICODE_STRING ValueName
;
3927 PVOID ObjectContext
;
3929 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3931 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
3933 PUNICODE_STRING ValueName
;
3935 PVOID ObjectContext
;
3937 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3939 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
3941 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3942 PVOID KeySetInformation
;
3943 ULONG KeySetInformationLength
;
3945 PVOID ObjectContext
;
3947 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3949 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
3952 KEY_INFORMATION_CLASS KeyInformationClass
;
3953 PVOID KeyInformation
;
3955 PULONG ResultLength
;
3957 PVOID ObjectContext
;
3959 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3961 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
3964 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3965 PVOID KeyValueInformation
;
3967 PULONG ResultLength
;
3969 PVOID ObjectContext
;
3971 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3973 typedef struct _REG_QUERY_KEY_INFORMATION
{
3975 KEY_INFORMATION_CLASS KeyInformationClass
;
3976 PVOID KeyInformation
;
3978 PULONG ResultLength
;
3980 PVOID ObjectContext
;
3982 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3984 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
3986 PUNICODE_STRING ValueName
;
3987 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3988 PVOID KeyValueInformation
;
3990 PULONG ResultLength
;
3992 PVOID ObjectContext
;
3994 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3996 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
3998 PKEY_VALUE_ENTRY ValueEntries
;
4001 PULONG BufferLength
;
4002 PULONG RequiredBufferLength
;
4004 PVOID ObjectContext
;
4006 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4008 typedef struct _REG_RENAME_KEY_INFORMATION
{
4010 PUNICODE_STRING NewName
;
4012 PVOID ObjectContext
;
4014 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
4016 typedef struct _REG_CREATE_KEY_INFORMATION
{
4017 PUNICODE_STRING CompleteName
;
4020 ULONG CreateOptions
;
4021 PUNICODE_STRING Class
;
4022 PVOID SecurityDescriptor
;
4023 PVOID SecurityQualityOfService
;
4024 ACCESS_MASK DesiredAccess
;
4025 ACCESS_MASK GrantedAccess
;
4027 PVOID
*ResultObject
;
4029 PVOID RootObjectContext
;
4032 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
4034 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
4035 PUNICODE_STRING CompleteName
;
4039 PUNICODE_STRING Class
;
4040 PVOID SecurityDescriptor
;
4041 PVOID SecurityQualityOfService
;
4042 ACCESS_MASK DesiredAccess
;
4043 ACCESS_MASK GrantedAccess
;
4045 PVOID
*ResultObject
;
4047 PVOID RootObjectContext
;
4050 PUNICODE_STRING RemainingName
;
4053 KPROCESSOR_MODE CheckAccessMode
;
4054 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
4056 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
4057 PUNICODE_STRING CompleteName
;
4058 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
4060 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
4061 PUNICODE_STRING CompleteName
;
4064 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4066 typedef struct _REG_POST_OPERATION_INFORMATION
{
4069 PVOID PreInformation
;
4070 NTSTATUS ReturnStatus
;
4072 PVOID ObjectContext
;
4074 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4076 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
4079 PVOID ObjectContext
;
4081 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4083 #if (NTDDI_VERSION >= NTDDI_VISTA)
4085 typedef struct _REG_LOAD_KEY_INFORMATION
{
4087 PUNICODE_STRING KeyName
;
4088 PUNICODE_STRING SourceFile
;
4090 PVOID TrustClassObject
;
4092 ACCESS_MASK DesiredAccess
;
4095 PVOID ObjectContext
;
4097 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
4099 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
4103 PVOID ObjectContext
;
4105 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
4107 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
4109 PVOID ObjectContext
;
4111 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
4113 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
4115 PSECURITY_INFORMATION SecurityInformation
;
4116 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4119 PVOID ObjectContext
;
4121 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
4123 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
4125 PSECURITY_INFORMATION SecurityInformation
;
4126 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4128 PVOID ObjectContext
;
4130 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
4132 typedef struct _REG_RESTORE_KEY_INFORMATION
{
4137 PVOID ObjectContext
;
4139 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
4141 typedef struct _REG_SAVE_KEY_INFORMATION
{
4146 PVOID ObjectContext
;
4148 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
4150 typedef struct _REG_REPLACE_KEY_INFORMATION
{
4152 PUNICODE_STRING OldFileName
;
4153 PUNICODE_STRING NewFileName
;
4155 PVOID ObjectContext
;
4157 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
4159 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
4161 #define SERVICE_KERNEL_DRIVER 0x00000001
4162 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
4163 #define SERVICE_ADAPTER 0x00000004
4164 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
4166 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
4167 SERVICE_FILE_SYSTEM_DRIVER | \
4168 SERVICE_RECOGNIZER_DRIVER)
4170 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
4171 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
4172 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
4173 SERVICE_WIN32_SHARE_PROCESS)
4175 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
4177 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
4180 SERVICE_INTERACTIVE_PROCESS)
4182 /* Service Start Types */
4183 #define SERVICE_BOOT_START 0x00000000
4184 #define SERVICE_SYSTEM_START 0x00000001
4185 #define SERVICE_AUTO_START 0x00000002
4186 #define SERVICE_DEMAND_START 0x00000003
4187 #define SERVICE_DISABLED 0x00000004
4189 #define SERVICE_ERROR_IGNORE 0x00000000
4190 #define SERVICE_ERROR_NORMAL 0x00000001
4191 #define SERVICE_ERROR_SEVERE 0x00000002
4192 #define SERVICE_ERROR_CRITICAL 0x00000003
4194 typedef enum _CM_SERVICE_NODE_TYPE
{
4195 DriverType
= SERVICE_KERNEL_DRIVER
,
4196 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
4197 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
4198 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
4199 AdapterType
= SERVICE_ADAPTER
,
4200 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
4201 } SERVICE_NODE_TYPE
;
4203 typedef enum _CM_SERVICE_LOAD_TYPE
{
4204 BootLoad
= SERVICE_BOOT_START
,
4205 SystemLoad
= SERVICE_SYSTEM_START
,
4206 AutoLoad
= SERVICE_AUTO_START
,
4207 DemandLoad
= SERVICE_DEMAND_START
,
4208 DisableLoad
= SERVICE_DISABLED
4209 } SERVICE_LOAD_TYPE
;
4211 typedef enum _CM_ERROR_CONTROL_TYPE
{
4212 IgnoreError
= SERVICE_ERROR_IGNORE
,
4213 NormalError
= SERVICE_ERROR_NORMAL
,
4214 SevereError
= SERVICE_ERROR_SEVERE
,
4215 CriticalError
= SERVICE_ERROR_CRITICAL
4216 } SERVICE_ERROR_TYPE
;
4218 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
4219 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
4220 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
4222 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
4223 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
4224 CM_SERVICE_USB_DISK_BOOT_LOAD)
4226 /******************************************************************************
4227 * I/O Manager Types *
4228 ******************************************************************************/
4231 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
4233 #define CONNECT_FULLY_SPECIFIED 0x1
4234 #define CONNECT_LINE_BASED 0x2
4235 #define CONNECT_MESSAGE_BASED 0x3
4236 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
4237 #define CONNECT_CURRENT_VERSION 0x4
4239 #define POOL_COLD_ALLOCATION 256
4240 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4241 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4243 #define IO_TYPE_ADAPTER 1
4244 #define IO_TYPE_CONTROLLER 2
4245 #define IO_TYPE_DEVICE 3
4246 #define IO_TYPE_DRIVER 4
4247 #define IO_TYPE_FILE 5
4248 #define IO_TYPE_IRP 6
4249 #define IO_TYPE_MASTER_ADAPTER 7
4250 #define IO_TYPE_OPEN_PACKET 8
4251 #define IO_TYPE_TIMER 9
4252 #define IO_TYPE_VPB 10
4253 #define IO_TYPE_ERROR_LOG 11
4254 #define IO_TYPE_ERROR_MESSAGE 12
4255 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
4257 #define IO_TYPE_CSQ_IRP_CONTEXT 1
4258 #define IO_TYPE_CSQ 2
4259 #define IO_TYPE_CSQ_EX 3
4261 /* IO_RESOURCE_DESCRIPTOR.Option */
4262 #define IO_RESOURCE_PREFERRED 0x01
4263 #define IO_RESOURCE_DEFAULT 0x02
4264 #define IO_RESOURCE_ALTERNATIVE 0x08
4266 #define FILE_DEVICE_BEEP 0x00000001
4267 #define FILE_DEVICE_CD_ROM 0x00000002
4268 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
4269 #define FILE_DEVICE_CONTROLLER 0x00000004
4270 #define FILE_DEVICE_DATALINK 0x00000005
4271 #define FILE_DEVICE_DFS 0x00000006
4272 #define FILE_DEVICE_DISK 0x00000007
4273 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
4274 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
4275 #define FILE_DEVICE_INPORT_PORT 0x0000000a
4276 #define FILE_DEVICE_KEYBOARD 0x0000000b
4277 #define FILE_DEVICE_MAILSLOT 0x0000000c
4278 #define FILE_DEVICE_MIDI_IN 0x0000000d
4279 #define FILE_DEVICE_MIDI_OUT 0x0000000e
4280 #define FILE_DEVICE_MOUSE 0x0000000f
4281 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
4282 #define FILE_DEVICE_NAMED_PIPE 0x00000011
4283 #define FILE_DEVICE_NETWORK 0x00000012
4284 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
4285 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
4286 #define FILE_DEVICE_NULL 0x00000015
4287 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
4288 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
4289 #define FILE_DEVICE_PRINTER 0x00000018
4290 #define FILE_DEVICE_SCANNER 0x00000019
4291 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
4292 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
4293 #define FILE_DEVICE_SCREEN 0x0000001c
4294 #define FILE_DEVICE_SOUND 0x0000001d
4295 #define FILE_DEVICE_STREAMS 0x0000001e
4296 #define FILE_DEVICE_TAPE 0x0000001f
4297 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
4298 #define FILE_DEVICE_TRANSPORT 0x00000021
4299 #define FILE_DEVICE_UNKNOWN 0x00000022
4300 #define FILE_DEVICE_VIDEO 0x00000023
4301 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
4302 #define FILE_DEVICE_WAVE_IN 0x00000025
4303 #define FILE_DEVICE_WAVE_OUT 0x00000026
4304 #define FILE_DEVICE_8042_PORT 0x00000027
4305 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
4306 #define FILE_DEVICE_BATTERY 0x00000029
4307 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
4308 #define FILE_DEVICE_MODEM 0x0000002b
4309 #define FILE_DEVICE_VDM 0x0000002c
4310 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
4311 #define FILE_DEVICE_SMB 0x0000002e
4312 #define FILE_DEVICE_KS 0x0000002f
4313 #define FILE_DEVICE_CHANGER 0x00000030
4314 #define FILE_DEVICE_SMARTCARD 0x00000031
4315 #define FILE_DEVICE_ACPI 0x00000032
4316 #define FILE_DEVICE_DVD 0x00000033
4317 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
4318 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
4319 #define FILE_DEVICE_DFS_VOLUME 0x00000036
4320 #define FILE_DEVICE_SERENUM 0x00000037
4321 #define FILE_DEVICE_TERMSRV 0x00000038
4322 #define FILE_DEVICE_KSEC 0x00000039
4323 #define FILE_DEVICE_FIPS 0x0000003A
4324 #define FILE_DEVICE_INFINIBAND 0x0000003B
4325 #define FILE_DEVICE_VMBUS 0x0000003E
4326 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
4327 #define FILE_DEVICE_WPD 0x00000040
4328 #define FILE_DEVICE_BLUETOOTH 0x00000041
4329 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
4330 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
4331 #define FILE_DEVICE_BIOMETRIC 0x00000044
4332 #define FILE_DEVICE_PMI 0x00000045
4334 #if defined(NT_PROCESSOR_GROUPS)
4336 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4338 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
4339 IrqPolicyMachineDefault
= 0,
4340 IrqPolicyAllCloseProcessors
= 1,
4341 IrqPolicyOneCloseProcessor
= 2,
4342 IrqPolicyAllProcessorsInMachine
= 3,
4343 IrqPolicyAllProcessorsInGroup
= 3,
4344 IrqPolicySpecifiedProcessors
= 4,
4345 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
4347 #else /* defined(NT_PROCESSOR_GROUPS) */
4349 typedef enum _IRQ_DEVICE_POLICY
{
4350 IrqPolicyMachineDefault
= 0,
4351 IrqPolicyAllCloseProcessors
,
4352 IrqPolicyOneCloseProcessor
,
4353 IrqPolicyAllProcessorsInMachine
,
4354 IrqPolicySpecifiedProcessors
,
4355 IrqPolicySpreadMessagesAcrossAllProcessors
4356 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4360 typedef enum _IRQ_PRIORITY
{
4361 IrqPriorityUndefined
= 0,
4365 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
4367 typedef enum _IRQ_GROUP_POLICY
{
4368 GroupAffinityAllGroupZero
= 0,
4369 GroupAffinityDontCare
4370 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
4372 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
4374 typedef struct _OBJECT_HANDLE_INFORMATION
{
4375 ULONG HandleAttributes
;
4376 ACCESS_MASK GrantedAccess
;
4377 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4379 typedef struct _CLIENT_ID
{
4380 HANDLE UniqueProcess
;
4381 HANDLE UniqueThread
;
4382 } CLIENT_ID
, *PCLIENT_ID
;
4384 typedef struct _VPB
{
4388 USHORT VolumeLabelLength
;
4389 struct _DEVICE_OBJECT
*DeviceObject
;
4390 struct _DEVICE_OBJECT
*RealDevice
;
4392 ULONG ReferenceCount
;
4393 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
4396 typedef enum _IO_ALLOCATION_ACTION
{
4399 DeallocateObjectKeepRegisters
4400 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
4402 _Function_class_(DRIVER_CONTROL
)
4403 _IRQL_requires_same_
4404 typedef IO_ALLOCATION_ACTION
4405 (NTAPI DRIVER_CONTROL
)(
4406 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
4407 _Inout_
struct _IRP
*Irp
,
4408 _In_ PVOID MapRegisterBase
,
4409 _In_ PVOID Context
);
4410 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
4412 typedef struct _WAIT_CONTEXT_BLOCK
{
4413 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
4414 PDRIVER_CONTROL DeviceRoutine
;
4415 PVOID DeviceContext
;
4416 ULONG NumberOfMapRegisters
;
4419 PKDPC BufferChainingDpc
;
4420 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
4422 /* DEVICE_OBJECT.Flags */
4423 #define DO_VERIFY_VOLUME 0x00000002
4424 #define DO_BUFFERED_IO 0x00000004
4425 #define DO_EXCLUSIVE 0x00000008
4426 #define DO_DIRECT_IO 0x00000010
4427 #define DO_MAP_IO_BUFFER 0x00000020
4428 #define DO_DEVICE_INITIALIZING 0x00000080
4429 #define DO_SHUTDOWN_REGISTERED 0x00000800
4430 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4431 #define DO_POWER_PAGABLE 0x00002000
4432 #define DO_POWER_INRUSH 0x00004000
4434 /* DEVICE_OBJECT.Characteristics */
4435 #define FILE_REMOVABLE_MEDIA 0x00000001
4436 #define FILE_READ_ONLY_DEVICE 0x00000002
4437 #define FILE_FLOPPY_DISKETTE 0x00000004
4438 #define FILE_WRITE_ONCE_MEDIA 0x00000008
4439 #define FILE_REMOTE_DEVICE 0x00000010
4440 #define FILE_DEVICE_IS_MOUNTED 0x00000020
4441 #define FILE_VIRTUAL_VOLUME 0x00000040
4442 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
4443 #define FILE_DEVICE_SECURE_OPEN 0x00000100
4444 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
4445 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
4446 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
4448 /* DEVICE_OBJECT.AlignmentRequirement */
4449 #define FILE_BYTE_ALIGNMENT 0x00000000
4450 #define FILE_WORD_ALIGNMENT 0x00000001
4451 #define FILE_LONG_ALIGNMENT 0x00000003
4452 #define FILE_QUAD_ALIGNMENT 0x00000007
4453 #define FILE_OCTA_ALIGNMENT 0x0000000f
4454 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
4455 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
4456 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
4457 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
4458 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
4460 /* DEVICE_OBJECT.DeviceType */
4461 #define DEVICE_TYPE ULONG
4463 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _DEVICE_OBJECT
{
4466 LONG ReferenceCount
;
4467 struct _DRIVER_OBJECT
*DriverObject
;
4468 struct _DEVICE_OBJECT
*NextDevice
;
4469 struct _DEVICE_OBJECT
*AttachedDevice
;
4470 struct _IRP
*CurrentIrp
;
4473 ULONG Characteristics
;
4475 PVOID DeviceExtension
;
4476 DEVICE_TYPE DeviceType
;
4479 LIST_ENTRY ListEntry
;
4480 WAIT_CONTEXT_BLOCK Wcb
;
4482 ULONG AlignmentRequirement
;
4483 KDEVICE_QUEUE DeviceQueue
;
4485 ULONG ActiveThreadCount
;
4486 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4490 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
4492 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
4494 typedef enum _IO_SESSION_STATE
{
4495 IoSessionStateCreated
= 1,
4496 IoSessionStateInitialized
,
4497 IoSessionStateConnected
,
4498 IoSessionStateDisconnected
,
4499 IoSessionStateDisconnectedLoggedOn
,
4500 IoSessionStateLoggedOn
,
4501 IoSessionStateLoggedOff
,
4502 IoSessionStateTerminated
,
4504 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
4506 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
4507 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
4508 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
4509 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
4511 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
4512 PHYSICAL_ADDRESS MessageAddress
;
4513 KAFFINITY TargetProcessorSet
;
4514 PKINTERRUPT InterruptObject
;
4518 KINTERRUPT_MODE Mode
;
4519 KINTERRUPT_POLARITY Polarity
;
4520 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
4522 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
4525 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
4526 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
4528 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
4529 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4530 _Out_ PKINTERRUPT
*InterruptObject
;
4531 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4532 _In_ PVOID ServiceContext
;
4533 _In_opt_ PKSPIN_LOCK SpinLock
;
4534 _In_ KIRQL SynchronizeIrql
;
4535 _In_ BOOLEAN FloatingSave
;
4536 _In_ BOOLEAN ShareVector
;
4539 _In_ KINTERRUPT_MODE InterruptMode
;
4540 _In_ KAFFINITY ProcessorEnableMask
;
4542 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
4544 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
4545 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4546 _Out_ PKINTERRUPT
*InterruptObject
;
4547 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4548 _In_ PVOID ServiceContext
;
4549 _In_opt_ PKSPIN_LOCK SpinLock
;
4550 _In_opt_ KIRQL SynchronizeIrql
;
4551 _In_ BOOLEAN FloatingSave
;
4552 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
4554 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
4555 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4557 _Out_ PVOID
*Generic
;
4558 _Out_ PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
4559 _Out_ PKINTERRUPT
*InterruptObject
;
4560 } ConnectionContext
;
4561 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
4562 _In_ PVOID ServiceContext
;
4563 _In_opt_ PKSPIN_LOCK SpinLock
;
4564 _In_opt_ KIRQL SynchronizeIrql
;
4565 _In_ BOOLEAN FloatingSave
;
4566 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine
;
4567 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
4569 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
4570 _Inout_ ULONG Version
;
4571 _ANONYMOUS_UNION
union {
4572 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
4573 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
4574 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4576 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4578 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4582 _In_ PKINTERRUPT InterruptObject
;
4583 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4584 } ConnectionContext
;
4585 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4587 typedef enum _IO_ACCESS_TYPE
{
4593 typedef enum _IO_ACCESS_MODE
{
4598 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4599 IoSessionStateNotification
,
4600 IoMaxContainerNotificationClass
4601 } IO_CONTAINER_NOTIFICATION_CLASS
;
4603 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4609 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4611 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4612 IoSessionStateInformation
,
4613 IoMaxContainerInformationClass
4614 } IO_CONTAINER_INFORMATION_CLASS
;
4616 typedef struct _IO_SESSION_STATE_INFORMATION
{
4618 IO_SESSION_STATE SessionState
;
4619 BOOLEAN LocalSession
;
4620 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4622 #if (NTDDI_VERSION >= NTDDI_WIN7)
4625 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4629 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4630 _In_ PVOID SessionObject
,
4631 _In_ PVOID IoObject
,
4634 _In_reads_bytes_opt_(PayloadLength
) PVOID NotificationPayload
,
4635 _In_ ULONG PayloadLength
);
4637 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4641 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4643 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4645 BOOLEAN Reserved
[3];
4646 volatile LONG IoCount
;
4648 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4650 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4653 LONGLONG MaxLockedTicks
;
4655 LIST_ENTRY LockList
;
4657 volatile LONG LowMemoryCount
;
4660 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4661 } IO_REMOVE_LOCK_DBG_BLOCK
;
4663 typedef struct _IO_REMOVE_LOCK
{
4664 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4666 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4668 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4670 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4672 _Function_class_(IO_WORKITEM_ROUTINE
)
4673 _IRQL_requires_(PASSIVE_LEVEL
)
4674 _IRQL_requires_same_
4676 (NTAPI IO_WORKITEM_ROUTINE
)(
4677 _In_ PDEVICE_OBJECT DeviceObject
,
4678 _In_opt_ PVOID Context
);
4679 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4682 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4683 _In_ PVOID IoObject
,
4684 _In_opt_ PVOID Context
,
4685 _In_ PIO_WORKITEM IoWorkItem
);
4686 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4688 typedef struct _SHARE_ACCESS
{
4696 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4698 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4699 inheritance, even from a struct renders the type non-POD. So we use
4701 #define PCI_COMMON_HEADER_LAYOUT \
4710 UCHAR CacheLineSize; \
4711 UCHAR LatencyTimer; \
4715 struct _PCI_HEADER_TYPE_0 { \
4716 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4718 USHORT SubVendorID; \
4719 USHORT SubSystemID; \
4720 ULONG ROMBaseAddress; \
4721 UCHAR CapabilitiesPtr; \
4722 UCHAR Reserved1[3]; \
4724 UCHAR InterruptLine; \
4725 UCHAR InterruptPin; \
4726 UCHAR MinimumGrant; \
4727 UCHAR MaximumLatency; \
4729 struct _PCI_HEADER_TYPE_1 { \
4730 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4732 UCHAR SecondaryBus; \
4733 UCHAR SubordinateBus; \
4734 UCHAR SecondaryLatency; \
4737 USHORT SecondaryStatus; \
4738 USHORT MemoryBase; \
4739 USHORT MemoryLimit; \
4740 USHORT PrefetchBase; \
4741 USHORT PrefetchLimit; \
4742 ULONG PrefetchBaseUpper32; \
4743 ULONG PrefetchLimitUpper32; \
4744 USHORT IOBaseUpper16; \
4745 USHORT IOLimitUpper16; \
4746 UCHAR CapabilitiesPtr; \
4747 UCHAR Reserved1[3]; \
4748 ULONG ROMBaseAddress; \
4749 UCHAR InterruptLine; \
4750 UCHAR InterruptPin; \
4751 USHORT BridgeControl; \
4753 struct _PCI_HEADER_TYPE_2 { \
4754 ULONG SocketRegistersBaseAddress; \
4755 UCHAR CapabilitiesPtr; \
4757 USHORT SecondaryStatus; \
4759 UCHAR SecondaryBus; \
4760 UCHAR SubordinateBus; \
4761 UCHAR SecondaryLatency; \
4765 } Range[PCI_TYPE2_ADDRESSES-1]; \
4766 UCHAR InterruptLine; \
4767 UCHAR InterruptPin; \
4768 USHORT BridgeControl; \
4772 typedef enum _CREATE_FILE_TYPE
{
4774 CreateFileTypeNamedPipe
,
4775 CreateFileTypeMailslot
4778 #define IO_FORCE_ACCESS_CHECK 0x001
4779 #define IO_NO_PARAMETER_CHECKING 0x100
4781 #define IO_REPARSE 0x0
4782 #define IO_REMOUNT 0x1
4784 typedef struct _IO_STATUS_BLOCK
{
4785 _ANONYMOUS_UNION
union {
4789 ULONG_PTR Information
;
4790 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4793 typedef struct _IO_STATUS_BLOCK32
{
4796 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4800 (NTAPI
*PIO_APC_ROUTINE
)(
4801 _In_ PVOID ApcContext
,
4802 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
4803 _In_ ULONG Reserved
);
4805 #define PIO_APC_ROUTINE_DEFINED
4807 typedef enum _IO_SESSION_EVENT
{
4808 IoSessionEventIgnore
= 0,
4809 IoSessionEventCreated
,
4810 IoSessionEventTerminated
,
4811 IoSessionEventConnected
,
4812 IoSessionEventDisconnected
,
4813 IoSessionEventLogon
,
4814 IoSessionEventLogoff
,
4816 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4818 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4819 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4820 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4821 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4822 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4823 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4824 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4826 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4828 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4830 typedef struct _IO_SESSION_CONNECT_INFO
{
4832 BOOLEAN LocalSession
;
4833 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
4835 #define EVENT_INCREMENT 1
4836 #define IO_NO_INCREMENT 0
4837 #define IO_CD_ROM_INCREMENT 1
4838 #define IO_DISK_INCREMENT 1
4839 #define IO_KEYBOARD_INCREMENT 6
4840 #define IO_MAILSLOT_INCREMENT 2
4841 #define IO_MOUSE_INCREMENT 6
4842 #define IO_NAMED_PIPE_INCREMENT 2
4843 #define IO_NETWORK_INCREMENT 2
4844 #define IO_PARALLEL_INCREMENT 1
4845 #define IO_SERIAL_INCREMENT 2
4846 #define IO_SOUND_INCREMENT 8
4847 #define IO_VIDEO_INCREMENT 1
4848 #define SEMAPHORE_INCREMENT 1
4850 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
4852 typedef struct _BOOTDISK_INFORMATION
{
4853 LONGLONG BootPartitionOffset
;
4854 LONGLONG SystemPartitionOffset
;
4855 ULONG BootDeviceSignature
;
4856 ULONG SystemDeviceSignature
;
4857 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
4859 typedef struct _BOOTDISK_INFORMATION_EX
{
4860 LONGLONG BootPartitionOffset
;
4861 LONGLONG SystemPartitionOffset
;
4862 ULONG BootDeviceSignature
;
4863 ULONG SystemDeviceSignature
;
4864 GUID BootDeviceGuid
;
4865 GUID SystemDeviceGuid
;
4866 BOOLEAN BootDeviceIsGpt
;
4867 BOOLEAN SystemDeviceIsGpt
;
4868 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
4870 #if (NTDDI_VERSION >= NTDDI_WIN7)
4872 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
4873 ULONG PartitionStyle
;
4874 ULONG PartitionNumber
;
4875 _ANONYMOUS_UNION
union {
4880 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
4882 typedef struct _BOOTDISK_INFORMATION_LITE
{
4883 ULONG NumberEntries
;
4884 LOADER_PARTITION_INFORMATION_EX Entries
[1];
4885 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4889 #if (NTDDI_VERSION >= NTDDI_VISTA)
4890 typedef struct _BOOTDISK_INFORMATION_LITE
{
4891 ULONG BootDeviceSignature
;
4892 ULONG SystemDeviceSignature
;
4893 GUID BootDeviceGuid
;
4894 GUID SystemDeviceGuid
;
4895 BOOLEAN BootDeviceIsGpt
;
4896 BOOLEAN SystemDeviceIsGpt
;
4897 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4898 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4900 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4902 #include <pshpack1.h>
4904 typedef struct _EISA_MEMORY_TYPE
{
4911 UCHAR MoreEntries
:1;
4912 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
4914 typedef struct _EISA_MEMORY_CONFIGURATION
{
4915 EISA_MEMORY_TYPE ConfigurationByte
;
4917 USHORT AddressLowWord
;
4918 UCHAR AddressHighByte
;
4920 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
4922 typedef struct _EISA_IRQ_DESCRIPTOR
{
4925 UCHAR LevelTriggered
:1;
4927 UCHAR MoreEntries
:1;
4928 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
4930 typedef struct _EISA_IRQ_CONFIGURATION
{
4931 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
4933 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
4935 typedef struct _DMA_CONFIGURATION_BYTE0
{
4939 UCHAR MoreEntries
:1;
4940 } DMA_CONFIGURATION_BYTE0
;
4942 typedef struct _DMA_CONFIGURATION_BYTE1
{
4944 UCHAR TransferSize
:2;
4947 } DMA_CONFIGURATION_BYTE1
;
4949 typedef struct _EISA_DMA_CONFIGURATION
{
4950 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
4951 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
4952 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
4954 typedef struct _EISA_PORT_DESCRIPTOR
{
4955 UCHAR NumberPorts
:5;
4958 UCHAR MoreEntries
:1;
4959 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
4961 typedef struct _EISA_PORT_CONFIGURATION
{
4962 EISA_PORT_DESCRIPTOR Configuration
;
4964 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
4966 typedef struct _CM_EISA_SLOT_INFORMATION
{
4969 UCHAR MajorRevision
;
4970 UCHAR MinorRevision
;
4972 UCHAR NumberFunctions
;
4973 UCHAR FunctionInformation
;
4975 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
4977 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
4981 UCHAR MinorRevision
;
4982 UCHAR MajorRevision
;
4983 UCHAR Selections
[26];
4984 UCHAR FunctionFlags
;
4985 UCHAR TypeString
[80];
4986 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
4987 EISA_IRQ_CONFIGURATION EisaIrq
[7];
4988 EISA_DMA_CONFIGURATION EisaDma
[4];
4989 EISA_PORT_CONFIGURATION EisaPort
[20];
4990 UCHAR InitializationData
[60];
4991 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
4993 #include <poppack.h>
4995 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
4997 #define EISA_FUNCTION_ENABLED 0x80
4998 #define EISA_FREE_FORM_DATA 0x40
4999 #define EISA_HAS_PORT_INIT_ENTRY 0x20
5000 #define EISA_HAS_PORT_RANGE 0x10
5001 #define EISA_HAS_DMA_ENTRY 0x08
5002 #define EISA_HAS_IRQ_ENTRY 0x04
5003 #define EISA_HAS_MEMORY_ENTRY 0x02
5004 #define EISA_HAS_TYPE_ENTRY 0x01
5005 #define EISA_HAS_INFORMATION \
5006 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
5007 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
5009 #define EISA_MORE_ENTRIES 0x80
5010 #define EISA_SYSTEM_MEMORY 0x00
5011 #define EISA_MEMORY_TYPE_RAM 0x01
5013 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
5015 #define EISA_INVALID_SLOT 0x80
5016 #define EISA_INVALID_FUNCTION 0x81
5017 #define EISA_INVALID_CONFIGURATION 0x82
5018 #define EISA_EMPTY_SLOT 0x83
5019 #define EISA_INVALID_BIOS_CALL 0x86
5022 ** Plug and Play structures
5026 (NTAPI
*PINTERFACE_REFERENCE
)(
5030 (NTAPI
*PINTERFACE_DEREFERENCE
)(
5033 _Function_class_(TRANSLATE_BUS_ADDRESS
)
5034 _IRQL_requires_same_
5036 (NTAPI TRANSLATE_BUS_ADDRESS
)(
5037 _Inout_opt_ PVOID Context
,
5038 _In_ PHYSICAL_ADDRESS BusAddress
,
5040 _Out_ PULONG AddressSpace
,
5041 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
5042 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
5044 _Function_class_(GET_DMA_ADAPTER
)
5045 _IRQL_requires_same_
5046 typedef struct _DMA_ADAPTER
*
5047 (NTAPI GET_DMA_ADAPTER
)(
5048 _Inout_opt_ PVOID Context
,
5049 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
5050 _Out_ PULONG NumberOfMapRegisters
);
5051 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
5053 _Function_class_(GET_SET_DEVICE_DATA
)
5054 _IRQL_requires_same_
5056 (NTAPI GET_SET_DEVICE_DATA
)(
5057 _Inout_opt_ PVOID Context
,
5058 _In_ ULONG DataType
,
5059 _Inout_updates_bytes_(Length
) PVOID Buffer
,
5062 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
5064 typedef enum _DEVICE_INSTALL_STATE
{
5065 InstallStateInstalled
,
5066 InstallStateNeedsReinstall
,
5067 InstallStateFailedInstall
,
5068 InstallStateFinishInstall
5069 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
5071 typedef struct _LEGACY_BUS_INFORMATION
{
5073 INTERFACE_TYPE LegacyBusType
;
5075 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
5077 typedef enum _DEVICE_REMOVAL_POLICY
{
5078 RemovalPolicyExpectNoRemoval
= 1,
5079 RemovalPolicyExpectOrderlyRemoval
= 2,
5080 RemovalPolicyExpectSurpriseRemoval
= 3
5081 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
5084 (NTAPI
*PREENUMERATE_SELF
)(
5085 _In_ PVOID Context
);
5087 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
5091 PINTERFACE_REFERENCE InterfaceReference
;
5092 PINTERFACE_DEREFERENCE InterfaceDereference
;
5093 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
5094 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
5097 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
5098 _In_ NTSTATUS Status
,
5099 _Inout_opt_ PVOID Context
);
5101 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
5103 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
5104 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
5105 #define PCI_USE_REVISION 0x00000002
5106 #define PCI_USE_VENDEV_IDS 0x00000004
5107 #define PCI_USE_CLASS_SUBCLASS 0x00000008
5108 #define PCI_USE_PROGIF 0x00000010
5109 #define PCI_USE_LOCAL_BUS 0x00000020
5110 #define PCI_USE_LOCAL_DEVICE 0x00000040
5112 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
5123 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
5125 _IRQL_requires_max_(PASSIVE_LEVEL
)
5126 _Must_inspect_result_
5128 (NTAPI PCI_IS_DEVICE_PRESENT
)(
5129 _In_ USHORT VendorID
,
5130 _In_ USHORT DeviceID
,
5131 _In_ UCHAR RevisionID
,
5132 _In_ USHORT SubVendorID
,
5133 _In_ USHORT SubSystemID
,
5135 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
5137 _IRQL_requires_max_(PASSIVE_LEVEL
)
5138 _Must_inspect_result_
5140 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
5142 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
5143 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
5145 typedef struct _BUS_INTERFACE_STANDARD
{
5149 PINTERFACE_REFERENCE InterfaceReference
;
5150 PINTERFACE_DEREFERENCE InterfaceDereference
;
5151 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
5152 PGET_DMA_ADAPTER GetDmaAdapter
;
5153 PGET_SET_DEVICE_DATA SetBusData
;
5154 PGET_SET_DEVICE_DATA GetBusData
;
5155 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
5157 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
5161 PINTERFACE_REFERENCE InterfaceReference
;
5162 PINTERFACE_DEREFERENCE InterfaceDereference
;
5163 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
5164 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
5165 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
5167 _Struct_size_bytes_(Size
)
5168 typedef struct _DEVICE_CAPABILITIES
{
5169 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES
)) USHORT Size
;
5173 ULONG LockSupported
:1;
5174 ULONG EjectSupported
:1;
5178 ULONG SilentInstall
:1;
5179 ULONG RawDeviceOK
:1;
5180 ULONG SurpriseRemovalOK
:1;
5185 ULONG HardwareDisabled
:1;
5187 ULONG WarmEjectSupported
:1;
5188 ULONG NoDisplayInUI
:1;
5192 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
5193 SYSTEM_POWER_STATE SystemWake
;
5194 DEVICE_POWER_STATE DeviceWake
;
5198 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
5200 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
5204 GUID InterfaceClassGuid
;
5205 PUNICODE_STRING SymbolicLinkName
;
5206 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
5208 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
5212 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
5216 typedef struct _INTERFACE
{
5220 PINTERFACE_REFERENCE InterfaceReference
;
5221 PINTERFACE_DEREFERENCE InterfaceDereference
;
5222 } INTERFACE
, *PINTERFACE
;
5224 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
5228 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
5230 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
5232 /* PNP_DEVICE_STATE */
5234 #define PNP_DEVICE_DISABLED 0x00000001
5235 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
5236 #define PNP_DEVICE_FAILED 0x00000004
5237 #define PNP_DEVICE_REMOVED 0x00000008
5238 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
5239 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
5241 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
5245 struct _FILE_OBJECT
*FileObject
;
5246 LONG NameBufferOffset
;
5247 UCHAR CustomDataBuffer
[1];
5248 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
5250 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
5254 struct _FILE_OBJECT
*FileObject
;
5255 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
5257 #if (NTDDI_VERSION >= NTDDI_VISTA)
5258 #include <devpropdef.h>
5259 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
5262 #define PNP_REPLACE_NO_MAP MAXLONGLONG
5264 _Must_inspect_result_
5266 (NTAPI
*PREPLACE_MAP_MEMORY
)(
5267 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress
,
5268 _In_ PHYSICAL_ADDRESS SparePhysicalAddress
,
5269 _Inout_ PLARGE_INTEGER NumberOfBytes
,
5270 _Outptr_ PVOID
*TargetAddress
,
5271 _Outptr_ PVOID
*SpareAddress
);
5273 typedef struct _PNP_REPLACE_MEMORY_LIST
{
5274 ULONG AllocatedCount
;
5276 ULONGLONG TotalLength
;
5278 PHYSICAL_ADDRESS Address
;
5280 } Ranges
[ANYSIZE_ARRAY
];
5281 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
5283 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
5284 PKAFFINITY Affinity
;
5285 _Field_range_(<=, MAXIMUM_GROUPS
) ULONG GroupCount
;
5286 ULONG AllocatedCount
;
5288 ULONG ApicIds
[ANYSIZE_ARRAY
];
5289 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
5291 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
5292 KAFFINITY AffinityMask
;
5293 ULONG AllocatedCount
;
5295 ULONG ApicIds
[ANYSIZE_ARRAY
];
5296 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
5298 #define PNP_REPLACE_PARAMETERS_VERSION 2
5300 typedef struct _PNP_REPLACE_PARAMETERS
{
5305 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
5306 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
5307 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
5308 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
5309 PREPLACE_MAP_MEMORY MapMemory
;
5310 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
5313 (NTAPI
*PREPLACE_UNLOAD
)(
5316 _Must_inspect_result_
5318 (NTAPI
*PREPLACE_BEGIN
)(
5319 _In_ PPNP_REPLACE_PARAMETERS Parameters
,
5320 _Outptr_ PVOID
*Context
);
5322 _Must_inspect_result_
5324 (NTAPI
*PREPLACE_END
)(
5325 _In_ PVOID Context
);
5327 _Must_inspect_result_
5329 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
5331 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
5332 _In_ LARGE_INTEGER ByteCount
);
5334 _Must_inspect_result_
5336 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
5339 _In_ BOOLEAN Target
);
5341 _Must_inspect_result_
5343 (NTAPI
*PREPLACE_SWAP
)(
5344 _In_ PVOID Context
);
5346 _Must_inspect_result_
5348 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
5349 _In_ PVOID Context
);
5351 _Must_inspect_result_
5353 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
5354 _In_ PVOID Context
);
5356 _Must_inspect_result_
5358 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
5360 _In_ PHYSICAL_ADDRESS SourceAddress
,
5361 _Out_ PPHYSICAL_ADDRESS DestinationAddress
);
5363 _Must_inspect_result_
5365 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
5367 _In_ BOOLEAN Enable
);
5369 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
5370 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
5371 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
5373 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
5374 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
5375 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
5376 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
5377 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
5379 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
5383 PREPLACE_UNLOAD Unload
;
5384 PREPLACE_BEGIN BeginReplace
;
5385 PREPLACE_END EndReplace
;
5386 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
5387 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
5389 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
5390 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
5391 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
5392 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
5393 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
5395 _Must_inspect_result_
5397 (NTAPI
*PREPLACE_DRIVER_INIT
)(
5398 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface
,
5401 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
5402 DeviceUsageTypeUndefined
,
5403 DeviceUsageTypePaging
,
5404 DeviceUsageTypeHibernation
,
5405 DeviceUsageTypeDumpFile
5406 } DEVICE_USAGE_NOTIFICATION_TYPE
;
5408 typedef struct _POWER_SEQUENCE
{
5412 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
5415 #define __string_type 0x1000
5416 #define __guid_type 0x2000
5417 #define __multiString_type 0x4000
5419 #define __string_type 0
5420 #define __guid_type 0
5421 #define __multiString_type 0
5425 DevicePropertyDeviceDescription
= 0x0 | __string_type
,
5426 DevicePropertyHardwareID
= 0x1 | __multiString_type
,
5427 DevicePropertyCompatibleIDs
= 0x2 | __multiString_type
,
5428 DevicePropertyBootConfiguration
= 0x3,
5429 DevicePropertyBootConfigurationTranslated
= 0x4,
5430 DevicePropertyClassName
= 0x5 | __string_type
,
5431 DevicePropertyClassGuid
= 0x6 | __string_type
,
5432 DevicePropertyDriverKeyName
= 0x7 | __string_type
,
5433 DevicePropertyManufacturer
= 0x8 | __string_type
,
5434 DevicePropertyFriendlyName
= 0x9 | __string_type
,
5435 DevicePropertyLocationInformation
= 0xa | __string_type
,
5436 DevicePropertyPhysicalDeviceObjectName
= 0xb | __string_type
,
5437 DevicePropertyBusTypeGuid
= 0xc | __guid_type
,
5438 DevicePropertyLegacyBusType
= 0xd,
5439 DevicePropertyBusNumber
= 0xe,
5440 DevicePropertyEnumeratorName
= 0xf | __string_type
,
5441 DevicePropertyAddress
= 0x10,
5442 DevicePropertyUINumber
= 0x11,
5443 DevicePropertyInstallState
= 0x12,
5444 DevicePropertyRemovalPolicy
= 0x13,
5445 DevicePropertyResourceRequirements
= 0x14,
5446 DevicePropertyAllocatedResources
= 0x15,
5447 DevicePropertyContainerID
= 0x16 | __string_type
5448 } DEVICE_REGISTRY_PROPERTY
;
5450 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
5451 EventCategoryReserved
,
5452 EventCategoryHardwareProfileChange
,
5453 EventCategoryDeviceInterfaceChange
,
5454 EventCategoryTargetDeviceChange
5455 } IO_NOTIFICATION_EVENT_CATEGORY
;
5457 typedef enum _IO_PRIORITY_HINT
{
5458 IoPriorityVeryLow
= 0,
5466 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
5468 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)
5469 _IRQL_requires_max_(PASSIVE_LEVEL
)
5471 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
5472 _In_ PVOID NotificationStructure
,
5473 _Inout_opt_ PVOID Context
);
5474 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
5476 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK
)
5477 _IRQL_requires_same_
5479 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
5480 _Inout_opt_ PVOID Context
);
5481 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
5483 typedef enum _FILE_INFORMATION_CLASS
{
5484 FileDirectoryInformation
= 1,
5485 FileFullDirectoryInformation
,
5486 FileBothDirectoryInformation
,
5487 FileBasicInformation
,
5488 FileStandardInformation
,
5489 FileInternalInformation
,
5491 FileAccessInformation
,
5492 FileNameInformation
,
5493 FileRenameInformation
,
5494 FileLinkInformation
,
5495 FileNamesInformation
,
5496 FileDispositionInformation
,
5497 FilePositionInformation
,
5498 FileFullEaInformation
,
5499 FileModeInformation
,
5500 FileAlignmentInformation
,
5502 FileAllocationInformation
,
5503 FileEndOfFileInformation
,
5504 FileAlternateNameInformation
,
5505 FileStreamInformation
,
5506 FilePipeInformation
,
5507 FilePipeLocalInformation
,
5508 FilePipeRemoteInformation
,
5509 FileMailslotQueryInformation
,
5510 FileMailslotSetInformation
,
5511 FileCompressionInformation
,
5512 FileObjectIdInformation
,
5513 FileCompletionInformation
,
5514 FileMoveClusterInformation
,
5515 FileQuotaInformation
,
5516 FileReparsePointInformation
,
5517 FileNetworkOpenInformation
,
5518 FileAttributeTagInformation
,
5519 FileTrackingInformation
,
5520 FileIdBothDirectoryInformation
,
5521 FileIdFullDirectoryInformation
,
5522 FileValidDataLengthInformation
,
5523 FileShortNameInformation
,
5524 #if (NTDDI_VERSION >= NTDDI_VISTA)
5525 FileIoCompletionNotificationInformation
,
5526 FileIoStatusBlockRangeInformation
,
5527 FileIoPriorityHintInformation
,
5528 FileSfioReserveInformation
,
5529 FileSfioVolumeInformation
,
5530 FileHardLinkInformation
,
5531 FileProcessIdsUsingFileInformation
,
5532 FileNormalizedNameInformation
,
5533 FileNetworkPhysicalNameInformation
,
5535 #if (NTDDI_VERSION >= NTDDI_WIN7)
5536 FileIdGlobalTxDirectoryInformation
,
5537 FileIsRemoteDeviceInformation
,
5538 FileAttributeCacheInformation
,
5539 FileNumaNodeInformation
,
5540 FileStandardLinkInformation
,
5541 FileRemoteProtocolInformation
,
5543 FileMaximumInformation
5544 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
5546 typedef struct _FILE_POSITION_INFORMATION
{
5547 LARGE_INTEGER CurrentByteOffset
;
5548 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
5550 typedef struct _FILE_BASIC_INFORMATION
{
5551 LARGE_INTEGER CreationTime
;
5552 LARGE_INTEGER LastAccessTime
;
5553 LARGE_INTEGER LastWriteTime
;
5554 LARGE_INTEGER ChangeTime
;
5555 ULONG FileAttributes
;
5556 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
5558 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
5559 IO_PRIORITY_HINT PriorityHint
;
5560 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
5562 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
5564 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
5566 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
5567 PUCHAR IoStatusBlockRange
;
5569 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
5571 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
5573 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
5575 typedef struct _FILE_NUMA_NODE_INFORMATION
{
5577 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
5579 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
5580 ULONG NumberOfProcessIdsInList
;
5581 ULONG_PTR ProcessIdList
[1];
5582 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
5584 typedef struct _FILE_STANDARD_INFORMATION
{
5585 LARGE_INTEGER AllocationSize
;
5586 LARGE_INTEGER EndOfFile
;
5587 ULONG NumberOfLinks
;
5588 BOOLEAN DeletePending
;
5590 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
5592 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
5593 LARGE_INTEGER CreationTime
;
5594 LARGE_INTEGER LastAccessTime
;
5595 LARGE_INTEGER LastWriteTime
;
5596 LARGE_INTEGER ChangeTime
;
5597 LARGE_INTEGER AllocationSize
;
5598 LARGE_INTEGER EndOfFile
;
5599 ULONG FileAttributes
;
5600 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
5602 typedef enum _FSINFOCLASS
{
5603 FileFsVolumeInformation
= 1,
5604 FileFsLabelInformation
,
5605 FileFsSizeInformation
,
5606 FileFsDeviceInformation
,
5607 FileFsAttributeInformation
,
5608 FileFsControlInformation
,
5609 FileFsFullSizeInformation
,
5610 FileFsObjectIdInformation
,
5611 FileFsDriverPathInformation
,
5612 FileFsVolumeFlagsInformation
,
5613 FileFsMaximumInformation
5614 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
5616 typedef struct _FILE_FS_DEVICE_INFORMATION
{
5617 DEVICE_TYPE DeviceType
;
5618 ULONG Characteristics
;
5619 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5621 typedef struct _FILE_FULL_EA_INFORMATION
{
5622 ULONG NextEntryOffset
;
5625 USHORT EaValueLength
;
5627 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5629 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5630 ULONG RequestsPerPeriod
;
5632 BOOLEAN RetryFailures
;
5633 BOOLEAN Discardable
;
5635 ULONG NumOutstandingRequests
;
5636 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5638 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5639 ULONG MaximumRequestsPerPeriod
;
5640 ULONG MinimumPeriod
;
5641 ULONG MinimumTransferSize
;
5642 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5644 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5645 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5646 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5648 #define FM_LOCK_BIT (0x1)
5649 #define FM_LOCK_BIT_V (0x0)
5650 #define FM_LOCK_WAITER_WOKEN (0x2)
5651 #define FM_LOCK_WAITER_INC (0x4)
5653 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE
)
5654 _IRQL_requires_same_
5656 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5657 _In_
struct _FILE_OBJECT
*FileObject
,
5658 _In_ PLARGE_INTEGER FileOffset
,
5662 _In_ BOOLEAN CheckForReadOperation
,
5663 _Out_ PIO_STATUS_BLOCK IoStatus
,
5664 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5665 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5667 _Function_class_(FAST_IO_READ
)
5668 _IRQL_requires_same_
5670 (NTAPI FAST_IO_READ
)(
5671 _In_
struct _FILE_OBJECT
*FileObject
,
5672 _In_ PLARGE_INTEGER FileOffset
,
5677 _Out_ PIO_STATUS_BLOCK IoStatus
,
5678 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5679 typedef FAST_IO_READ
*PFAST_IO_READ
;
5681 _Function_class_(FAST_IO_WRITE
)
5682 _IRQL_requires_same_
5684 (NTAPI FAST_IO_WRITE
)(
5685 _In_
struct _FILE_OBJECT
*FileObject
,
5686 _In_ PLARGE_INTEGER FileOffset
,
5691 _Out_ PIO_STATUS_BLOCK IoStatus
,
5692 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5693 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5695 _Function_class_(FAST_IO_QUERY_BASIC_INFO
)
5696 _IRQL_requires_same_
5698 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5699 _In_
struct _FILE_OBJECT
*FileObject
,
5701 _Out_ PFILE_BASIC_INFORMATION Buffer
,
5702 _Out_ PIO_STATUS_BLOCK IoStatus
,
5703 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5704 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5706 _Function_class_(FAST_IO_QUERY_STANDARD_INFO
)
5707 _IRQL_requires_same_
5709 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5710 _In_
struct _FILE_OBJECT
*FileObject
,
5712 _Out_ PFILE_STANDARD_INFORMATION Buffer
,
5713 _Out_ PIO_STATUS_BLOCK IoStatus
,
5714 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5715 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5717 _Function_class_(FAST_IO_LOCK
)
5718 _IRQL_requires_same_
5720 (NTAPI FAST_IO_LOCK
)(
5721 _In_
struct _FILE_OBJECT
*FileObject
,
5722 _In_ PLARGE_INTEGER FileOffset
,
5723 _In_ PLARGE_INTEGER Length
,
5724 _In_ PEPROCESS ProcessId
,
5726 _In_ BOOLEAN FailImmediately
,
5727 _In_ BOOLEAN ExclusiveLock
,
5728 _Out_ PIO_STATUS_BLOCK IoStatus
,
5729 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5730 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5732 _Function_class_(FAST_IO_UNLOCK_SINGLE
)
5733 _IRQL_requires_same_
5735 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5736 _In_
struct _FILE_OBJECT
*FileObject
,
5737 _In_ PLARGE_INTEGER FileOffset
,
5738 _In_ PLARGE_INTEGER Length
,
5739 _In_ PEPROCESS ProcessId
,
5741 _Out_ PIO_STATUS_BLOCK IoStatus
,
5742 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5743 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5745 _Function_class_(FAST_IO_UNLOCK_ALL
)
5746 _IRQL_requires_same_
5748 (NTAPI FAST_IO_UNLOCK_ALL
)(
5749 _In_
struct _FILE_OBJECT
*FileObject
,
5750 _In_ PEPROCESS ProcessId
,
5751 _Out_ PIO_STATUS_BLOCK IoStatus
,
5752 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5753 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5755 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY
)
5756 _IRQL_requires_same_
5758 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5759 _In_
struct _FILE_OBJECT
*FileObject
,
5760 _In_ PVOID ProcessId
,
5762 _Out_ PIO_STATUS_BLOCK IoStatus
,
5763 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5764 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5766 _Function_class_(FAST_IO_DEVICE_CONTROL
)
5767 _IRQL_requires_same_
5769 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5770 _In_
struct _FILE_OBJECT
*FileObject
,
5772 _In_opt_ PVOID InputBuffer
,
5773 _In_ ULONG InputBufferLength
,
5774 _Out_opt_ PVOID OutputBuffer
,
5775 _In_ ULONG OutputBufferLength
,
5776 _In_ ULONG IoControlCode
,
5777 _Out_ PIO_STATUS_BLOCK IoStatus
,
5778 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5779 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5781 _Function_class_(FAST_IO_ACQUIRE_FILE
)
5782 _IRQL_requires_same_
5784 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5785 _In_
struct _FILE_OBJECT
*FileObject
);
5786 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5788 _Function_class_(FAST_IO_RELEASE_FILE
)
5789 _IRQL_requires_same_
5791 (NTAPI FAST_IO_RELEASE_FILE
)(
5792 _In_
struct _FILE_OBJECT
*FileObject
);
5793 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5795 _Function_class_(FAST_IO_DETACH_DEVICE
)
5796 _IRQL_requires_same_
5798 (NTAPI FAST_IO_DETACH_DEVICE
)(
5799 _In_
struct _DEVICE_OBJECT
*SourceDevice
,
5800 _In_
struct _DEVICE_OBJECT
*TargetDevice
);
5801 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5803 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO
)
5804 _IRQL_requires_same_
5806 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5807 _In_
struct _FILE_OBJECT
*FileObject
,
5809 _Out_
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5810 _Out_
struct _IO_STATUS_BLOCK
*IoStatus
,
5811 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5812 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5814 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE
)
5815 _IRQL_requires_same_
5817 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5818 _In_
struct _FILE_OBJECT
*FileObject
,
5819 _In_ PLARGE_INTEGER EndingOffset
,
5820 _Out_
struct _ERESOURCE
**ResourceToRelease
,
5821 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5822 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5824 _Function_class_(FAST_IO_MDL_READ
)
5825 _IRQL_requires_same_
5827 (NTAPI FAST_IO_MDL_READ
)(
5828 _In_
struct _FILE_OBJECT
*FileObject
,
5829 _In_ PLARGE_INTEGER FileOffset
,
5832 _Out_ PMDL
*MdlChain
,
5833 _Out_ PIO_STATUS_BLOCK IoStatus
,
5834 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5835 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
5837 _Function_class_(FAST_IO_MDL_READ_COMPLETE
)
5838 _IRQL_requires_same_
5840 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
5841 _In_
struct _FILE_OBJECT
*FileObject
,
5843 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5844 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
5846 _Function_class_(FAST_IO_PREPARE_MDL_WRITE
)
5847 _IRQL_requires_same_
5849 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
5850 _In_
struct _FILE_OBJECT
*FileObject
,
5851 _In_ PLARGE_INTEGER FileOffset
,
5854 _Out_ PMDL
*MdlChain
,
5855 _Out_ PIO_STATUS_BLOCK IoStatus
,
5856 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5857 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
5859 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE
)
5860 _IRQL_requires_same_
5862 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
5863 _In_
struct _FILE_OBJECT
*FileObject
,
5864 _In_ PLARGE_INTEGER FileOffset
,
5866 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5867 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
5869 _Function_class_(FAST_IO_READ_COMPRESSED
)
5870 _IRQL_requires_same_
5872 (NTAPI FAST_IO_READ_COMPRESSED
)(
5873 _In_
struct _FILE_OBJECT
*FileObject
,
5874 _In_ PLARGE_INTEGER FileOffset
,
5878 _Out_ PMDL
*MdlChain
,
5879 _Out_ PIO_STATUS_BLOCK IoStatus
,
5880 _Out_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5881 _In_ ULONG CompressedDataInfoLength
,
5882 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5883 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
5885 _Function_class_(FAST_IO_WRITE_COMPRESSED
)
5886 _IRQL_requires_same_
5888 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
5889 _In_
struct _FILE_OBJECT
*FileObject
,
5890 _In_ PLARGE_INTEGER FileOffset
,
5894 _Out_ PMDL
*MdlChain
,
5895 _Out_ PIO_STATUS_BLOCK IoStatus
,
5896 _In_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5897 _In_ ULONG CompressedDataInfoLength
,
5898 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5899 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
5901 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)
5902 _IRQL_requires_same_
5904 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
5905 _In_
struct _FILE_OBJECT
*FileObject
,
5907 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5908 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
5910 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)
5911 _IRQL_requires_same_
5913 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
5914 _In_
struct _FILE_OBJECT
*FileObject
,
5915 _In_ PLARGE_INTEGER FileOffset
,
5917 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5918 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
5920 _Function_class_(FAST_IO_QUERY_OPEN
)
5921 _IRQL_requires_same_
5923 (NTAPI FAST_IO_QUERY_OPEN
)(
5924 _Inout_
struct _IRP
*Irp
,
5925 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
5926 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5927 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
5929 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE
)
5930 _IRQL_requires_same_
5932 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
5933 _In_
struct _FILE_OBJECT
*FileObject
,
5934 _In_
struct _ERESOURCE
*ResourceToRelease
,
5935 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5936 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
5938 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH
)
5939 _IRQL_requires_same_
5941 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
5942 _In_
struct _FILE_OBJECT
*FileObject
,
5943 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5944 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
5946 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH
)
5947 _IRQL_requires_same_
5949 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
5950 _In_
struct _FILE_OBJECT
*FileObject
,
5951 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5952 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
5954 typedef struct _FAST_IO_DISPATCH
{
5955 ULONG SizeOfFastIoDispatch
;
5956 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
5957 PFAST_IO_READ FastIoRead
;
5958 PFAST_IO_WRITE FastIoWrite
;
5959 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
5960 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
5961 PFAST_IO_LOCK FastIoLock
;
5962 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
5963 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
5964 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
5965 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
5966 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
5967 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
5968 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
5969 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
5970 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
5971 PFAST_IO_MDL_READ MdlRead
;
5972 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
5973 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
5974 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
5975 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
5976 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
5977 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
5978 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
5979 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
5980 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
5981 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
5982 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
5983 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
5985 typedef struct _SECTION_OBJECT_POINTERS
{
5986 PVOID DataSectionObject
;
5987 PVOID SharedCacheMap
;
5988 PVOID ImageSectionObject
;
5989 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
5991 typedef struct _IO_COMPLETION_CONTEXT
{
5994 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
5996 /* FILE_OBJECT.Flags */
5997 #define FO_FILE_OPEN 0x00000001
5998 #define FO_SYNCHRONOUS_IO 0x00000002
5999 #define FO_ALERTABLE_IO 0x00000004
6000 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
6001 #define FO_WRITE_THROUGH 0x00000010
6002 #define FO_SEQUENTIAL_ONLY 0x00000020
6003 #define FO_CACHE_SUPPORTED 0x00000040
6004 #define FO_NAMED_PIPE 0x00000080
6005 #define FO_STREAM_FILE 0x00000100
6006 #define FO_MAILSLOT 0x00000200
6007 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
6008 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
6009 #define FO_DIRECT_DEVICE_OPEN 0x00000800
6010 #define FO_FILE_MODIFIED 0x00001000
6011 #define FO_FILE_SIZE_CHANGED 0x00002000
6012 #define FO_CLEANUP_COMPLETE 0x00004000
6013 #define FO_TEMPORARY_FILE 0x00008000
6014 #define FO_DELETE_ON_CLOSE 0x00010000
6015 #define FO_OPENED_CASE_SENSITIVE 0x00020000
6016 #define FO_HANDLE_CREATED 0x00040000
6017 #define FO_FILE_FAST_IO_READ 0x00080000
6018 #define FO_RANDOM_ACCESS 0x00100000
6019 #define FO_FILE_OPEN_CANCELLED 0x00200000
6020 #define FO_VOLUME_OPEN 0x00400000
6021 #define FO_REMOTE_ORIGIN 0x01000000
6022 #define FO_DISALLOW_EXCLUSIVE 0x02000000
6023 #define FO_SKIP_COMPLETION_PORT 0x02000000
6024 #define FO_SKIP_SET_EVENT 0x04000000
6025 #define FO_SKIP_SET_FAST_IO 0x08000000
6026 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
6029 #define VPB_MOUNTED 0x0001
6030 #define VPB_LOCKED 0x0002
6031 #define VPB_PERSISTENT 0x0004
6032 #define VPB_REMOVE_PENDING 0x0008
6033 #define VPB_RAW_MOUNT 0x0010
6034 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
6038 #define SL_FORCE_ACCESS_CHECK 0x01
6039 #define SL_OPEN_PAGING_FILE 0x02
6040 #define SL_OPEN_TARGET_DIRECTORY 0x04
6041 #define SL_STOP_ON_SYMLINK 0x08
6042 #define SL_CASE_SENSITIVE 0x80
6044 #define SL_KEY_SPECIFIED 0x01
6045 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
6046 #define SL_WRITE_THROUGH 0x04
6047 #define SL_FT_SEQUENTIAL_WRITE 0x08
6048 #define SL_FORCE_DIRECT_WRITE 0x10
6049 #define SL_REALTIME_STREAM 0x20
6051 #define SL_READ_ACCESS_GRANTED 0x01
6052 #define SL_WRITE_ACCESS_GRANTED 0x04
6054 #define SL_FAIL_IMMEDIATELY 0x01
6055 #define SL_EXCLUSIVE_LOCK 0x02
6057 #define SL_RESTART_SCAN 0x01
6058 #define SL_RETURN_SINGLE_ENTRY 0x02
6059 #define SL_INDEX_SPECIFIED 0x04
6061 #define SL_WATCH_TREE 0x01
6063 #define SL_ALLOW_RAW_MOUNT 0x01
6065 #define CTL_CODE(DeviceType, Function, Method, Access) \
6066 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
6068 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
6070 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
6072 #define IRP_NOCACHE 0x00000001
6073 #define IRP_PAGING_IO 0x00000002
6074 #define IRP_MOUNT_COMPLETION 0x00000002
6075 #define IRP_SYNCHRONOUS_API 0x00000004
6076 #define IRP_ASSOCIATED_IRP 0x00000008
6077 #define IRP_BUFFERED_IO 0x00000010
6078 #define IRP_DEALLOCATE_BUFFER 0x00000020
6079 #define IRP_INPUT_OPERATION 0x00000040
6080 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
6081 #define IRP_CREATE_OPERATION 0x00000080
6082 #define IRP_READ_OPERATION 0x00000100
6083 #define IRP_WRITE_OPERATION 0x00000200
6084 #define IRP_CLOSE_OPERATION 0x00000400
6085 #define IRP_DEFER_IO_COMPLETION 0x00000800
6086 #define IRP_OB_QUERY_NAME 0x00001000
6087 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
6088 /* The following 2 are missing in latest WDK */
6089 #define IRP_RETRY_IO_COMPLETION 0x00004000
6090 #define IRP_CLASS_CACHE_OPERATION 0x00008000
6092 #define IRP_QUOTA_CHARGED 0x01
6093 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
6094 #define IRP_ALLOCATED_FIXED_SIZE 0x04
6095 #define IRP_LOOKASIDE_ALLOCATION 0x08
6098 ** IRP function codes
6101 #define IRP_MJ_CREATE 0x00
6102 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
6103 #define IRP_MJ_CLOSE 0x02
6104 #define IRP_MJ_READ 0x03
6105 #define IRP_MJ_WRITE 0x04
6106 #define IRP_MJ_QUERY_INFORMATION 0x05
6107 #define IRP_MJ_SET_INFORMATION 0x06
6108 #define IRP_MJ_QUERY_EA 0x07
6109 #define IRP_MJ_SET_EA 0x08
6110 #define IRP_MJ_FLUSH_BUFFERS 0x09
6111 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
6112 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
6113 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
6114 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
6115 #define IRP_MJ_DEVICE_CONTROL 0x0e
6116 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
6117 #define IRP_MJ_SCSI 0x0f
6118 #define IRP_MJ_SHUTDOWN 0x10
6119 #define IRP_MJ_LOCK_CONTROL 0x11
6120 #define IRP_MJ_CLEANUP 0x12
6121 #define IRP_MJ_CREATE_MAILSLOT 0x13
6122 #define IRP_MJ_QUERY_SECURITY 0x14
6123 #define IRP_MJ_SET_SECURITY 0x15
6124 #define IRP_MJ_POWER 0x16
6125 #define IRP_MJ_SYSTEM_CONTROL 0x17
6126 #define IRP_MJ_DEVICE_CHANGE 0x18
6127 #define IRP_MJ_QUERY_QUOTA 0x19
6128 #define IRP_MJ_SET_QUOTA 0x1a
6129 #define IRP_MJ_PNP 0x1b
6130 #define IRP_MJ_PNP_POWER 0x1b
6131 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
6133 #define IRP_MN_SCSI_CLASS 0x01
6135 #define IRP_MN_START_DEVICE 0x00
6136 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
6137 #define IRP_MN_REMOVE_DEVICE 0x02
6138 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
6139 #define IRP_MN_STOP_DEVICE 0x04
6140 #define IRP_MN_QUERY_STOP_DEVICE 0x05
6141 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
6143 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
6144 #define IRP_MN_QUERY_INTERFACE 0x08
6145 #define IRP_MN_QUERY_CAPABILITIES 0x09
6146 #define IRP_MN_QUERY_RESOURCES 0x0A
6147 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
6148 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
6149 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
6151 #define IRP_MN_READ_CONFIG 0x0F
6152 #define IRP_MN_WRITE_CONFIG 0x10
6153 #define IRP_MN_EJECT 0x11
6154 #define IRP_MN_SET_LOCK 0x12
6155 #define IRP_MN_QUERY_ID 0x13
6156 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
6157 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
6158 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
6159 #define IRP_MN_SURPRISE_REMOVAL 0x17
6160 #if (NTDDI_VERSION >= NTDDI_WIN7)
6161 #define IRP_MN_DEVICE_ENUMERATED 0x19
6164 #define IRP_MN_WAIT_WAKE 0x00
6165 #define IRP_MN_POWER_SEQUENCE 0x01
6166 #define IRP_MN_SET_POWER 0x02
6167 #define IRP_MN_QUERY_POWER 0x03
6169 #define IRP_MN_QUERY_ALL_DATA 0x00
6170 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
6171 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
6172 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
6173 #define IRP_MN_ENABLE_EVENTS 0x04
6174 #define IRP_MN_DISABLE_EVENTS 0x05
6175 #define IRP_MN_ENABLE_COLLECTION 0x06
6176 #define IRP_MN_DISABLE_COLLECTION 0x07
6177 #define IRP_MN_REGINFO 0x08
6178 #define IRP_MN_EXECUTE_METHOD 0x09
6180 #define IRP_MN_REGINFO_EX 0x0b
6182 typedef struct _FILE_OBJECT
{
6185 PDEVICE_OBJECT DeviceObject
;
6189 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
6190 PVOID PrivateCacheMap
;
6191 NTSTATUS FinalStatus
;
6192 struct _FILE_OBJECT
*RelatedFileObject
;
6193 BOOLEAN LockOperation
;
6194 BOOLEAN DeletePending
;
6196 BOOLEAN WriteAccess
;
6197 BOOLEAN DeleteAccess
;
6199 BOOLEAN SharedWrite
;
6200 BOOLEAN SharedDelete
;
6202 UNICODE_STRING FileName
;
6203 LARGE_INTEGER CurrentByteOffset
;
6204 volatile ULONG Waiters
;
6205 volatile ULONG Busy
;
6209 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
6210 KSPIN_LOCK IrpListLock
;
6212 volatile PVOID FileObjectExtension
;
6213 } FILE_OBJECT
, *PFILE_OBJECT
;
6215 typedef struct _IO_ERROR_LOG_PACKET
{
6216 UCHAR MajorFunctionCode
;
6218 USHORT DumpDataSize
;
6219 USHORT NumberOfStrings
;
6220 USHORT StringOffset
;
6221 USHORT EventCategory
;
6223 ULONG UniqueErrorValue
;
6224 NTSTATUS FinalStatus
;
6225 ULONG SequenceNumber
;
6226 ULONG IoControlCode
;
6227 LARGE_INTEGER DeviceOffset
;
6229 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
6231 typedef struct _IO_ERROR_LOG_MESSAGE
{
6234 USHORT DriverNameLength
;
6235 LARGE_INTEGER TimeStamp
;
6236 ULONG DriverNameOffset
;
6237 IO_ERROR_LOG_PACKET EntryData
;
6238 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
6240 #define ERROR_LOG_LIMIT_SIZE 240
6241 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
6242 sizeof(IO_ERROR_LOG_PACKET) + \
6243 (sizeof(WCHAR) * 40))
6244 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
6245 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6246 #define IO_ERROR_LOG_MESSAGE_LENGTH \
6247 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
6248 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
6249 PORT_MAXIMUM_MESSAGE_LENGTH)
6250 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
6251 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6254 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
6256 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
6259 typedef enum _DMA_WIDTH
{
6264 } DMA_WIDTH
, *PDMA_WIDTH
;
6266 typedef enum _DMA_SPEED
{
6273 } DMA_SPEED
, *PDMA_SPEED
;
6275 /* DEVICE_DESCRIPTION.Version */
6277 #define DEVICE_DESCRIPTION_VERSION 0x0000
6278 #define DEVICE_DESCRIPTION_VERSION1 0x0001
6279 #define DEVICE_DESCRIPTION_VERSION2 0x0002
6281 typedef struct _DEVICE_DESCRIPTION
{
6284 BOOLEAN ScatterGather
;
6286 BOOLEAN AutoInitialize
;
6287 BOOLEAN Dma32BitAddresses
;
6288 BOOLEAN IgnoreCount
;
6290 BOOLEAN Dma64BitAddresses
;
6293 INTERFACE_TYPE InterfaceType
;
6296 ULONG MaximumLength
;
6298 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
6300 typedef enum _DEVICE_RELATION_TYPE
{
6305 TargetDeviceRelation
,
6308 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
6310 typedef struct _DEVICE_RELATIONS
{
6312 PDEVICE_OBJECT Objects
[1];
6313 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
6315 typedef struct _DEVOBJ_EXTENSION
{
6318 PDEVICE_OBJECT DeviceObject
;
6319 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
6321 typedef struct _SCATTER_GATHER_ELEMENT
{
6322 PHYSICAL_ADDRESS Address
;
6325 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
6327 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
6329 #if defined(_MSC_VER)
6330 #if _MSC_VER >= 1200
6331 #pragma warning(push)
6333 #pragma warning(disable:4200)
6334 #endif /* _MSC_VER */
6336 typedef struct _SCATTER_GATHER_LIST
{
6337 ULONG NumberOfElements
;
6339 SCATTER_GATHER_ELEMENT Elements
[1];
6340 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6342 #if defined(_MSC_VER)
6343 #if _MSC_VER >= 1200
6344 #pragma warning(pop)
6346 #pragma warning(default:4200)
6348 #endif /* _MSC_VER */
6350 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6352 struct _SCATTER_GATHER_LIST
;
6353 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6355 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6357 _Function_class_(DRIVER_ADD_DEVICE
)
6358 _IRQL_requires_(PASSIVE_LEVEL
)
6359 _IRQL_requires_same_
6360 _When_(return>=0, _Kernel_clear_do_init_(__yes
))
6362 (NTAPI DRIVER_ADD_DEVICE
)(
6363 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6364 _In_
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
6365 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
6367 typedef struct _DRIVER_EXTENSION
{
6368 struct _DRIVER_OBJECT
*DriverObject
;
6369 PDRIVER_ADD_DEVICE AddDevice
;
6371 UNICODE_STRING ServiceKeyName
;
6372 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
6374 #define DRVO_UNLOAD_INVOKED 0x00000001
6375 #define DRVO_LEGACY_DRIVER 0x00000002
6376 #define DRVO_BUILTIN_DRIVER 0x00000004
6378 _Function_class_(DRIVER_INITIALIZE
)
6379 _IRQL_requires_same_
6381 (NTAPI DRIVER_INITIALIZE
)(
6382 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6383 _In_ PUNICODE_STRING RegistryPath
);
6384 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
6386 _Function_class_(DRIVER_STARTIO
)
6387 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6388 _IRQL_requires_(DISPATCH_LEVEL
)
6389 _IRQL_requires_same_
6391 (NTAPI DRIVER_STARTIO
)(
6392 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6393 _Inout_
struct _IRP
*Irp
);
6394 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
6396 _Function_class_(DRIVER_UNLOAD
)
6397 _IRQL_requires_(PASSIVE_LEVEL
)
6398 _IRQL_requires_same_
6400 (NTAPI DRIVER_UNLOAD
)(
6401 _In_
struct _DRIVER_OBJECT
*DriverObject
);
6402 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
6404 _Function_class_(DRIVER_DISPATCH
)
6405 _IRQL_requires_(PASSIVE_LEVEL
)
6406 _IRQL_requires_same_
6408 (NTAPI DRIVER_DISPATCH
)(
6409 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6410 _Inout_
struct _IRP
*Irp
);
6411 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
6413 typedef struct _DRIVER_OBJECT
{
6416 PDEVICE_OBJECT DeviceObject
;
6420 PVOID DriverSection
;
6421 PDRIVER_EXTENSION DriverExtension
;
6422 UNICODE_STRING DriverName
;
6423 PUNICODE_STRING HardwareDatabase
;
6424 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
6425 PDRIVER_INITIALIZE DriverInit
;
6426 PDRIVER_STARTIO DriverStartIo
;
6427 PDRIVER_UNLOAD DriverUnload
;
6428 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
6429 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
6431 typedef struct _DMA_ADAPTER
{
6434 struct _DMA_OPERATIONS
* DmaOperations
;
6435 } DMA_ADAPTER
, *PDMA_ADAPTER
;
6438 (NTAPI
*PPUT_DMA_ADAPTER
)(
6439 PDMA_ADAPTER DmaAdapter
);
6442 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
6443 _In_ PDMA_ADAPTER DmaAdapter
,
6445 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
6446 _In_ BOOLEAN CacheEnabled
);
6449 (NTAPI
*PFREE_COMMON_BUFFER
)(
6450 _In_ PDMA_ADAPTER DmaAdapter
,
6452 _In_ PHYSICAL_ADDRESS LogicalAddress
,
6453 _In_ PVOID VirtualAddress
,
6454 _In_ BOOLEAN CacheEnabled
);
6457 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
6458 _In_ PDMA_ADAPTER DmaAdapter
,
6459 _In_ PDEVICE_OBJECT DeviceObject
,
6460 _In_ ULONG NumberOfMapRegisters
,
6461 _In_ PDRIVER_CONTROL ExecutionRoutine
,
6462 _In_ PVOID Context
);
6465 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
6466 _In_ PDMA_ADAPTER DmaAdapter
,
6468 _In_ PVOID MapRegisterBase
,
6469 _In_ PVOID CurrentVa
,
6471 _In_ BOOLEAN WriteToDevice
);
6474 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
6475 _In_ PDMA_ADAPTER DmaAdapter
);
6478 (NTAPI
*PFREE_MAP_REGISTERS
)(
6479 _In_ PDMA_ADAPTER DmaAdapter
,
6480 PVOID MapRegisterBase
,
6481 ULONG NumberOfMapRegisters
);
6483 typedef PHYSICAL_ADDRESS
6484 (NTAPI
*PMAP_TRANSFER
)(
6485 _In_ PDMA_ADAPTER DmaAdapter
,
6487 _In_ PVOID MapRegisterBase
,
6488 _In_ PVOID CurrentVa
,
6489 _Inout_ PULONG Length
,
6490 _In_ BOOLEAN WriteToDevice
);
6493 (NTAPI
*PGET_DMA_ALIGNMENT
)(
6494 _In_ PDMA_ADAPTER DmaAdapter
);
6497 (NTAPI
*PREAD_DMA_COUNTER
)(
6498 _In_ PDMA_ADAPTER DmaAdapter
);
6500 _Function_class_(DRIVER_LIST_CONTROL
)
6501 _IRQL_requires_same_
6503 (NTAPI DRIVER_LIST_CONTROL
)(
6504 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6505 _In_
struct _IRP
*Irp
,
6506 _In_
struct _SCATTER_GATHER_LIST
*ScatterGather
,
6507 _In_ PVOID Context
);
6508 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
6511 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
6512 _In_ PDMA_ADAPTER DmaAdapter
,
6513 _In_ PDEVICE_OBJECT DeviceObject
,
6515 _In_ PVOID CurrentVa
,
6517 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6519 _In_ BOOLEAN WriteToDevice
);
6522 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
6523 _In_ PDMA_ADAPTER DmaAdapter
,
6524 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6525 _In_ BOOLEAN WriteToDevice
);
6528 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
6529 _In_ PDMA_ADAPTER DmaAdapter
,
6530 _In_ PMDL Mdl OPTIONAL
,
6531 _In_ PVOID CurrentVa
,
6533 _Out_ PULONG ScatterGatherListSize
,
6534 _Out_ OPTIONAL PULONG pNumberOfMapRegisters
);
6537 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
6538 _In_ PDMA_ADAPTER DmaAdapter
,
6539 _In_ PDEVICE_OBJECT DeviceObject
,
6541 _In_ PVOID CurrentVa
,
6543 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6545 _In_ BOOLEAN WriteToDevice
,
6546 _In_ PVOID ScatterGatherBuffer
,
6547 _In_ ULONG ScatterGatherLength
);
6550 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
6551 _In_ PDMA_ADAPTER DmaAdapter
,
6552 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6553 _In_ PMDL OriginalMdl
,
6554 _Out_ PMDL
*TargetMdl
);
6556 typedef struct _DMA_OPERATIONS
{
6558 PPUT_DMA_ADAPTER PutDmaAdapter
;
6559 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
6560 PFREE_COMMON_BUFFER FreeCommonBuffer
;
6561 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
6562 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
6563 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
6564 PFREE_MAP_REGISTERS FreeMapRegisters
;
6565 PMAP_TRANSFER MapTransfer
;
6566 PGET_DMA_ALIGNMENT GetDmaAlignment
;
6567 PREAD_DMA_COUNTER ReadDmaCounter
;
6568 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
6569 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
6570 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
6571 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
6572 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
6573 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
6575 typedef struct _IO_RESOURCE_DESCRIPTOR
{
6578 UCHAR ShareDisposition
;
6586 PHYSICAL_ADDRESS MinimumAddress
;
6587 PHYSICAL_ADDRESS MaximumAddress
;
6592 PHYSICAL_ADDRESS MinimumAddress
;
6593 PHYSICAL_ADDRESS MaximumAddress
;
6596 ULONG MinimumVector
;
6597 ULONG MaximumVector
;
6600 ULONG MinimumChannel
;
6601 ULONG MaximumChannel
;
6606 PHYSICAL_ADDRESS MinimumAddress
;
6607 PHYSICAL_ADDRESS MaximumAddress
;
6624 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
6626 typedef struct _IO_RESOURCE_LIST
{
6630 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
6631 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
6633 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
6635 INTERFACE_TYPE InterfaceType
;
6639 ULONG AlternativeLists
;
6640 IO_RESOURCE_LIST List
[1];
6641 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
6643 _Function_class_(DRIVER_CANCEL
)
6644 _Requires_lock_held_(_Global_cancel_spin_lock_
)
6645 _Releases_lock_(_Global_cancel_spin_lock_
)
6646 _IRQL_requires_min_(DISPATCH_LEVEL
)
6647 _IRQL_requires_(DISPATCH_LEVEL
)
6649 (NTAPI DRIVER_CANCEL
)(
6650 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6651 _Inout_ _IRQL_uses_cancel_
struct _IRP
*Irp
);
6652 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
6654 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _IRP
{
6657 struct _MDL
*MdlAddress
;
6660 struct _IRP
*MasterIrp
;
6661 volatile LONG IrpCount
;
6664 LIST_ENTRY ThreadListEntry
;
6665 IO_STATUS_BLOCK IoStatus
;
6666 KPROCESSOR_MODE RequestorMode
;
6667 BOOLEAN PendingReturned
;
6669 CHAR CurrentLocation
;
6672 CCHAR ApcEnvironment
;
6673 UCHAR AllocationFlags
;
6674 PIO_STATUS_BLOCK UserIosb
;
6678 _ANONYMOUS_UNION
union {
6679 PIO_APC_ROUTINE UserApcRoutine
;
6680 PVOID IssuingProcess
;
6682 PVOID UserApcContext
;
6683 } AsynchronousParameters
;
6684 LARGE_INTEGER AllocationSize
;
6686 volatile PDRIVER_CANCEL CancelRoutine
;
6690 _ANONYMOUS_UNION
union {
6691 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
6692 _ANONYMOUS_STRUCT
struct {
6693 PVOID DriverContext
[4];
6697 PCHAR AuxiliaryBuffer
;
6698 _ANONYMOUS_STRUCT
struct {
6699 LIST_ENTRY ListEntry
;
6700 _ANONYMOUS_UNION
union {
6701 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6705 struct _FILE_OBJECT
*OriginalFileObject
;
6708 PVOID CompletionKey
;
6712 typedef enum _IO_PAGING_PRIORITY
{
6713 IoPagingPriorityInvalid
,
6714 IoPagingPriorityNormal
,
6715 IoPagingPriorityHigh
,
6716 IoPagingPriorityReserved1
,
6717 IoPagingPriorityReserved2
6718 } IO_PAGING_PRIORITY
;
6720 _Function_class_(IO_COMPLETION_ROUTINE
)
6721 _IRQL_requires_same_
6723 (NTAPI IO_COMPLETION_ROUTINE
)(
6724 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6725 _In_
struct _IRP
*Irp
,
6726 _In_opt_ PVOID Context
);
6727 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6729 _Function_class_(IO_DPC_ROUTINE
)
6730 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6731 _IRQL_requires_(DISPATCH_LEVEL
)
6732 _IRQL_requires_same_
6734 (NTAPI IO_DPC_ROUTINE
)(
6735 _In_
struct _KDPC
*Dpc
,
6736 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6737 _Inout_
struct _IRP
*Irp
,
6738 _In_opt_ PVOID Context
);
6739 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6742 (NTAPI
*PMM_DLL_INITIALIZE
)(
6743 _In_ PUNICODE_STRING RegistryPath
);
6746 (NTAPI
*PMM_DLL_UNLOAD
)(
6749 _Function_class_(IO_TIMER_ROUTINE
)
6750 _IRQL_requires_same_
6752 (NTAPI IO_TIMER_ROUTINE
)(
6753 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6754 _In_opt_ PVOID Context
);
6755 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6757 typedef struct _IO_SECURITY_CONTEXT
{
6758 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6759 PACCESS_STATE AccessState
;
6760 ACCESS_MASK DesiredAccess
;
6761 ULONG FullCreateOptions
;
6762 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6766 typedef struct _IO_CSQ_IRP_CONTEXT
{
6769 struct _IO_CSQ
*Csq
;
6770 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6773 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6774 _In_
struct _IO_CSQ
*Csq
,
6778 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6779 _In_
struct _IO_CSQ
*Csq
,
6781 _In_ PVOID InsertContext
);
6782 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6785 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6786 _In_
struct _IO_CSQ
*Csq
,
6790 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6791 _In_
struct _IO_CSQ
*Csq
,
6793 _In_ PVOID PeekContext
);
6796 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6797 _In_
struct _IO_CSQ
*Csq
,
6801 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6802 _In_
struct _IO_CSQ
*Csq
,
6806 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6807 _In_
struct _IO_CSQ
*Csq
,
6810 typedef struct _IO_CSQ
{
6812 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6813 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6814 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6815 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6816 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6817 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6818 PVOID ReservePointer
;
6821 typedef enum _BUS_QUERY_ID_TYPE
{
6823 BusQueryHardwareIDs
,
6824 BusQueryCompatibleIDs
,
6826 BusQueryDeviceSerialNumber
6827 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6829 typedef enum _DEVICE_TEXT_TYPE
{
6830 DeviceTextDescription
,
6831 DeviceTextLocationInformation
6832 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
6835 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
6839 _IRQL_requires_max_(DISPATCH_LEVEL
)
6840 _Must_inspect_result_
6842 (NTAPI
*PGPE_CONNECT_VECTOR
)(
6847 PGPE_SERVICE_ROUTINE
,
6851 _IRQL_requires_max_(DISPATCH_LEVEL
)
6852 _Must_inspect_result_
6854 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
6857 _IRQL_requires_max_(DISPATCH_LEVEL
)
6858 _Must_inspect_result_
6860 (NTAPI
*PGPE_ENABLE_EVENT
)(
6864 _IRQL_requires_max_(DISPATCH_LEVEL
)
6865 _Must_inspect_result_
6867 (NTAPI
*PGPE_DISABLE_EVENT
)(
6871 _IRQL_requires_max_(DISPATCH_LEVEL
)
6872 _Must_inspect_result_
6874 (NTAPI
*PGPE_CLEAR_STATUS
)(
6879 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
6883 _IRQL_requires_max_(DISPATCH_LEVEL
)
6884 _Must_inspect_result_
6886 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6888 PDEVICE_NOTIFY_CALLBACK
,
6891 _IRQL_requires_max_(DISPATCH_LEVEL
)
6893 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6895 PDEVICE_NOTIFY_CALLBACK
);
6897 typedef struct _ACPI_INTERFACE_STANDARD
{
6901 PINTERFACE_REFERENCE InterfaceReference
;
6902 PINTERFACE_DEREFERENCE InterfaceDereference
;
6903 PGPE_CONNECT_VECTOR GpeConnectVector
;
6904 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
6905 PGPE_ENABLE_EVENT GpeEnableEvent
;
6906 PGPE_DISABLE_EVENT GpeDisableEvent
;
6907 PGPE_CLEAR_STATUS GpeClearStatus
;
6908 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
6909 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
6910 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
6913 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
6914 PVOID ObjectContext
,
6915 PVOID ServiceContext
);
6917 _IRQL_requires_max_(DISPATCH_LEVEL
)
6918 _Must_inspect_result_
6920 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
6923 KINTERRUPT_MODE Mode
,
6925 PGPE_SERVICE_ROUTINE ServiceRoutine
,
6926 PVOID ServiceContext
,
6927 PVOID
*ObjectContext
);
6929 _IRQL_requires_max_(DISPATCH_LEVEL
)
6930 _Must_inspect_result_
6932 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
6934 PVOID ObjectContext
);
6936 _IRQL_requires_max_(DISPATCH_LEVEL
)
6937 _Must_inspect_result_
6939 (NTAPI
*PGPE_ENABLE_EVENT2
)(
6941 PVOID ObjectContext
);
6943 _IRQL_requires_max_(DISPATCH_LEVEL
)
6944 _Must_inspect_result_
6946 (NTAPI
*PGPE_DISABLE_EVENT2
)(
6948 PVOID ObjectContext
);
6950 _IRQL_requires_max_(DISPATCH_LEVEL
)
6951 _Must_inspect_result_
6953 (NTAPI
*PGPE_CLEAR_STATUS2
)(
6955 PVOID ObjectContext
);
6957 _IRQL_requires_max_(DISPATCH_LEVEL
)
6959 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
6960 PVOID NotificationContext
,
6963 _IRQL_requires_max_(DISPATCH_LEVEL
)
6964 _Must_inspect_result_
6966 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6968 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
6969 PVOID NotificationContext
);
6971 _IRQL_requires_max_(DISPATCH_LEVEL
)
6973 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6976 typedef struct _ACPI_INTERFACE_STANDARD2
{
6980 PINTERFACE_REFERENCE InterfaceReference
;
6981 PINTERFACE_DEREFERENCE InterfaceDereference
;
6982 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
6983 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
6984 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
6985 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
6986 PGPE_CLEAR_STATUS2 GpeClearStatus
;
6987 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
6988 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
6989 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
6991 #if !defined(_AMD64_) && !defined(_IA64_)
6992 #include <pshpack4.h>
6994 typedef struct _IO_STACK_LOCATION
{
6995 UCHAR MajorFunction
;
6996 UCHAR MinorFunction
;
7001 PIO_SECURITY_CONTEXT SecurityContext
;
7003 USHORT POINTER_ALIGNMENT FileAttributes
;
7005 ULONG POINTER_ALIGNMENT EaLength
;
7009 ULONG POINTER_ALIGNMENT Key
;
7010 LARGE_INTEGER ByteOffset
;
7014 ULONG POINTER_ALIGNMENT Key
;
7015 LARGE_INTEGER ByteOffset
;
7019 PUNICODE_STRING FileName
;
7020 FILE_INFORMATION_CLASS FileInformationClass
;
7025 ULONG CompletionFilter
;
7029 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7033 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7034 PFILE_OBJECT FileObject
;
7035 _ANONYMOUS_UNION
union {
7036 _ANONYMOUS_STRUCT
struct {
7037 BOOLEAN ReplaceIfExists
;
7038 BOOLEAN AdvanceOnly
;
7041 HANDLE DeleteHandle
;
7055 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
7059 FS_INFORMATION_CLASS FsInformationClass
;
7062 ULONG OutputBufferLength
;
7063 ULONG InputBufferLength
;
7064 ULONG FsControlCode
;
7065 PVOID Type3InputBuffer
;
7066 } FileSystemControl
;
7068 PLARGE_INTEGER Length
;
7070 LARGE_INTEGER ByteOffset
;
7073 ULONG OutputBufferLength
;
7074 ULONG POINTER_ALIGNMENT InputBufferLength
;
7075 ULONG POINTER_ALIGNMENT IoControlCode
;
7076 PVOID Type3InputBuffer
;
7079 SECURITY_INFORMATION SecurityInformation
;
7080 ULONG POINTER_ALIGNMENT Length
;
7083 SECURITY_INFORMATION SecurityInformation
;
7084 PSECURITY_DESCRIPTOR SecurityDescriptor
;
7088 PDEVICE_OBJECT DeviceObject
;
7092 PDEVICE_OBJECT DeviceObject
;
7095 struct _SCSI_REQUEST_BLOCK
*Srb
;
7100 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
7101 ULONG SidListLength
;
7107 DEVICE_RELATION_TYPE Type
;
7108 } QueryDeviceRelations
;
7110 CONST GUID
*InterfaceType
;
7113 PINTERFACE Interface
;
7114 PVOID InterfaceSpecificData
;
7117 PDEVICE_CAPABILITIES Capabilities
;
7118 } DeviceCapabilities
;
7120 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
7121 } FilterResourceRequirements
;
7126 ULONG POINTER_ALIGNMENT Length
;
7132 BUS_QUERY_ID_TYPE IdType
;
7135 DEVICE_TEXT_TYPE DeviceTextType
;
7136 LCID POINTER_ALIGNMENT LocaleId
;
7140 BOOLEAN Reserved
[3];
7141 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
7142 } UsageNotification
;
7144 SYSTEM_POWER_STATE PowerState
;
7147 PPOWER_SEQUENCE PowerSequence
;
7150 ULONG SystemContext
;
7151 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
7152 POWER_STATE POINTER_ALIGNMENT State
;
7153 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
7156 PCM_RESOURCE_LIST AllocatedResources
;
7157 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
7160 ULONG_PTR ProviderId
;
7172 PDEVICE_OBJECT DeviceObject
;
7173 PFILE_OBJECT FileObject
;
7174 PIO_COMPLETION_ROUTINE CompletionRoutine
;
7176 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
7177 #if !defined(_AMD64_) && !defined(_IA64_)
7178 #include <poppack.h>
7181 /* IO_STACK_LOCATION.Control */
7183 #define SL_PENDING_RETURNED 0x01
7184 #define SL_ERROR_RETURNED 0x02
7185 #define SL_INVOKE_ON_CANCEL 0x20
7186 #define SL_INVOKE_ON_SUCCESS 0x40
7187 #define SL_INVOKE_ON_ERROR 0x80
7189 #define METHOD_BUFFERED 0
7190 #define METHOD_IN_DIRECT 1
7191 #define METHOD_OUT_DIRECT 2
7192 #define METHOD_NEITHER 3
7194 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
7195 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
7197 #define FILE_SUPERSEDED 0x00000000
7198 #define FILE_OPENED 0x00000001
7199 #define FILE_CREATED 0x00000002
7200 #define FILE_OVERWRITTEN 0x00000003
7201 #define FILE_EXISTS 0x00000004
7202 #define FILE_DOES_NOT_EXIST 0x00000005
7204 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
7205 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
7207 /* also in winnt.h */
7208 #define FILE_LIST_DIRECTORY 0x00000001
7209 #define FILE_READ_DATA 0x00000001
7210 #define FILE_ADD_FILE 0x00000002
7211 #define FILE_WRITE_DATA 0x00000002
7212 #define FILE_ADD_SUBDIRECTORY 0x00000004
7213 #define FILE_APPEND_DATA 0x00000004
7214 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
7215 #define FILE_READ_EA 0x00000008
7216 #define FILE_WRITE_EA 0x00000010
7217 #define FILE_EXECUTE 0x00000020
7218 #define FILE_TRAVERSE 0x00000020
7219 #define FILE_DELETE_CHILD 0x00000040
7220 #define FILE_READ_ATTRIBUTES 0x00000080
7221 #define FILE_WRITE_ATTRIBUTES 0x00000100
7223 #define FILE_SHARE_READ 0x00000001
7224 #define FILE_SHARE_WRITE 0x00000002
7225 #define FILE_SHARE_DELETE 0x00000004
7226 #define FILE_SHARE_VALID_FLAGS 0x00000007
7228 #define FILE_ATTRIBUTE_READONLY 0x00000001
7229 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
7230 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
7231 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
7232 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
7233 #define FILE_ATTRIBUTE_DEVICE 0x00000040
7234 #define FILE_ATTRIBUTE_NORMAL 0x00000080
7235 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
7236 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
7237 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
7238 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
7239 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
7240 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
7241 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
7242 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
7244 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
7245 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
7247 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
7248 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
7249 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
7250 #define FILE_VALID_SET_FLAGS 0x00000036
7252 #define FILE_SUPERSEDE 0x00000000
7253 #define FILE_OPEN 0x00000001
7254 #define FILE_CREATE 0x00000002
7255 #define FILE_OPEN_IF 0x00000003
7256 #define FILE_OVERWRITE 0x00000004
7257 #define FILE_OVERWRITE_IF 0x00000005
7258 #define FILE_MAXIMUM_DISPOSITION 0x00000005
7260 #define FILE_DIRECTORY_FILE 0x00000001
7261 #define FILE_WRITE_THROUGH 0x00000002
7262 #define FILE_SEQUENTIAL_ONLY 0x00000004
7263 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
7264 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
7265 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
7266 #define FILE_NON_DIRECTORY_FILE 0x00000040
7267 #define FILE_CREATE_TREE_CONNECTION 0x00000080
7268 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
7269 #define FILE_NO_EA_KNOWLEDGE 0x00000200
7270 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
7271 #define FILE_RANDOM_ACCESS 0x00000800
7272 #define FILE_DELETE_ON_CLOSE 0x00001000
7273 #define FILE_OPEN_BY_FILE_ID 0x00002000
7274 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
7275 #define FILE_NO_COMPRESSION 0x00008000
7276 #if (NTDDI_VERSION >= NTDDI_WIN7)
7277 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
7278 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
7279 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7280 #define FILE_RESERVE_OPFILTER 0x00100000
7281 #define FILE_OPEN_REPARSE_POINT 0x00200000
7282 #define FILE_OPEN_NO_RECALL 0x00400000
7283 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
7285 #define FILE_ANY_ACCESS 0x00000000
7286 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
7287 #define FILE_READ_ACCESS 0x00000001
7288 #define FILE_WRITE_ACCESS 0x00000002
7290 #define FILE_ALL_ACCESS \
7291 (STANDARD_RIGHTS_REQUIRED | \
7295 #define FILE_GENERIC_EXECUTE \
7296 (STANDARD_RIGHTS_EXECUTE | \
7297 FILE_READ_ATTRIBUTES | \
7301 #define FILE_GENERIC_READ \
7302 (STANDARD_RIGHTS_READ | \
7304 FILE_READ_ATTRIBUTES | \
7308 #define FILE_GENERIC_WRITE \
7309 (STANDARD_RIGHTS_WRITE | \
7311 FILE_WRITE_ATTRIBUTES | \
7313 FILE_APPEND_DATA | \
7318 #define WMIREG_ACTION_REGISTER 1
7319 #define WMIREG_ACTION_DEREGISTER 2
7320 #define WMIREG_ACTION_REREGISTER 3
7321 #define WMIREG_ACTION_UPDATE_GUIDS 4
7322 #define WMIREG_ACTION_BLOCK_IRPS 5
7324 #define WMIREGISTER 0
7327 _Function_class_(WMI_NOTIFICATION_CALLBACK
)
7328 _IRQL_requires_same_
7330 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
7333 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
7338 typedef struct _PCI_SLOT_NUMBER
{
7341 ULONG DeviceNumber
:5;
7342 ULONG FunctionNumber
:3;
7347 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
7349 #define PCI_TYPE0_ADDRESSES 6
7350 #define PCI_TYPE1_ADDRESSES 2
7351 #define PCI_TYPE2_ADDRESSES 5
7353 typedef struct _PCI_COMMON_HEADER
{
7354 PCI_COMMON_HEADER_LAYOUT
7355 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
7358 typedef struct _PCI_COMMON_CONFIG
{
7359 PCI_COMMON_HEADER_LAYOUT
7360 UCHAR DeviceSpecific
[192];
7361 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7363 typedef struct _PCI_COMMON_CONFIG
{
7364 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
7365 UCHAR DeviceSpecific
[192];
7366 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7369 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
7371 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
7373 #define PCI_MAX_DEVICES 32
7374 #define PCI_MAX_FUNCTION 8
7375 #define PCI_MAX_BRIDGE_NUMBER 0xFF
7376 #define PCI_INVALID_VENDORID 0xFFFF
7378 /* PCI_COMMON_CONFIG.HeaderType */
7379 #define PCI_MULTIFUNCTION 0x80
7380 #define PCI_DEVICE_TYPE 0x00
7381 #define PCI_BRIDGE_TYPE 0x01
7382 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
7384 #define PCI_CONFIGURATION_TYPE(PciData) \
7385 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
7387 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
7388 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
7390 /* PCI_COMMON_CONFIG.Command */
7391 #define PCI_ENABLE_IO_SPACE 0x0001
7392 #define PCI_ENABLE_MEMORY_SPACE 0x0002
7393 #define PCI_ENABLE_BUS_MASTER 0x0004
7394 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
7395 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
7396 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
7397 #define PCI_ENABLE_PARITY 0x0040
7398 #define PCI_ENABLE_WAIT_CYCLE 0x0080
7399 #define PCI_ENABLE_SERR 0x0100
7400 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
7401 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
7403 /* PCI_COMMON_CONFIG.Status */
7404 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
7405 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
7406 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
7407 #define PCI_STATUS_UDF_SUPPORTED 0x0040
7408 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
7409 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
7410 #define PCI_STATUS_DEVSEL 0x0600
7411 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
7412 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
7413 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
7414 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
7415 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
7417 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
7419 #define PCI_WHICHSPACE_CONFIG 0x0
7420 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
7422 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
7423 #define PCI_CAPABILITY_ID_AGP 0x02
7424 #define PCI_CAPABILITY_ID_VPD 0x03
7425 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
7426 #define PCI_CAPABILITY_ID_MSI 0x05
7427 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
7428 #define PCI_CAPABILITY_ID_PCIX 0x07
7429 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
7430 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
7431 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
7432 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
7433 #define PCI_CAPABILITY_ID_SHPC 0x0C
7434 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
7435 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
7436 #define PCI_CAPABILITY_ID_SECURE 0x0F
7437 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
7438 #define PCI_CAPABILITY_ID_MSIX 0x11
7440 typedef struct _PCI_CAPABILITIES_HEADER
{
7443 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
7445 typedef struct _PCI_PMC
{
7449 UCHAR DeviceSpecificInitialization
:1;
7451 struct _PM_SUPPORT
{
7461 } PCI_PMC
, *PPCI_PMC
;
7463 typedef struct _PCI_PMCSR
{
7464 USHORT PowerState
:2;
7467 USHORT DataSelect
:4;
7470 } PCI_PMCSR
, *PPCI_PMCSR
;
7472 typedef struct _PCI_PMCSR_BSE
{
7474 UCHAR D3HotSupportsStopClock
:1;
7475 UCHAR BusPowerClockControlEnabled
:1;
7476 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
7478 typedef struct _PCI_PM_CAPABILITY
{
7479 PCI_CAPABILITIES_HEADER Header
;
7481 PCI_PMC Capabilities
;
7485 PCI_PMCSR ControlStatus
;
7489 PCI_PMCSR_BSE BridgeSupport
;
7493 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
7496 PCI_CAPABILITIES_HEADER Header
;
7499 USHORT DataParityErrorRecoveryEnable
:1;
7500 USHORT EnableRelaxedOrdering
:1;
7501 USHORT MaxMemoryReadByteCount
:2;
7502 USHORT MaxOutstandingSplitTransactions
:3;
7509 ULONG FunctionNumber
:3;
7510 ULONG DeviceNumber
:5;
7512 ULONG Device64Bit
:1;
7513 ULONG Capable133MHz
:1;
7514 ULONG SplitCompletionDiscarded
:1;
7515 ULONG UnexpectedSplitCompletion
:1;
7516 ULONG DeviceComplexity
:1;
7517 ULONG DesignedMaxMemoryReadByteCount
:2;
7518 ULONG DesignedMaxOutstandingSplitTransactions
:3;
7519 ULONG DesignedMaxCumulativeReadSize
:3;
7520 ULONG ReceivedSplitCompletionErrorMessage
:1;
7521 ULONG CapablePCIX266
:1;
7522 ULONG CapablePCIX533
:1;
7526 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
7528 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
7529 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
7530 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
7531 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
7532 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
7533 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
7534 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
7535 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
7536 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
7537 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
7538 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
7540 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
7541 USHORT CapabilityID
;
7544 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
7546 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
7547 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7548 ULONG LowSerialNumber
;
7549 ULONG HighSerialNumber
;
7550 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
7552 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
7553 _ANONYMOUS_STRUCT
struct {
7556 ULONG DataLinkProtocolError
:1;
7557 ULONG SurpriseDownError
:1;
7559 ULONG PoisonedTLP
:1;
7560 ULONG FlowControlProtocolError
:1;
7561 ULONG CompletionTimeout
:1;
7562 ULONG CompleterAbort
:1;
7563 ULONG UnexpectedCompletion
:1;
7564 ULONG ReceiverOverflow
:1;
7565 ULONG MalformedTLP
:1;
7567 ULONG UnsupportedRequestError
:1;
7571 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
7573 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
7574 _ANONYMOUS_STRUCT
struct {
7577 ULONG DataLinkProtocolError
:1;
7578 ULONG SurpriseDownError
:1;
7580 ULONG PoisonedTLP
:1;
7581 ULONG FlowControlProtocolError
:1;
7582 ULONG CompletionTimeout
:1;
7583 ULONG CompleterAbort
:1;
7584 ULONG UnexpectedCompletion
:1;
7585 ULONG ReceiverOverflow
:1;
7586 ULONG MalformedTLP
:1;
7588 ULONG UnsupportedRequestError
:1;
7592 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
7594 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
7595 _ANONYMOUS_STRUCT
struct {
7598 ULONG DataLinkProtocolError
:1;
7599 ULONG SurpriseDownError
:1;
7601 ULONG PoisonedTLP
:1;
7602 ULONG FlowControlProtocolError
:1;
7603 ULONG CompletionTimeout
:1;
7604 ULONG CompleterAbort
:1;
7605 ULONG UnexpectedCompletion
:1;
7606 ULONG ReceiverOverflow
:1;
7607 ULONG MalformedTLP
:1;
7609 ULONG UnsupportedRequestError
:1;
7613 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
7615 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
7616 _ANONYMOUS_STRUCT
struct {
7617 ULONG ReceiverError
:1;
7621 ULONG ReplayNumRollover
:1;
7623 ULONG ReplayTimerTimeout
:1;
7624 ULONG AdvisoryNonFatalError
:1;
7628 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
7630 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
7631 _ANONYMOUS_STRUCT
struct {
7632 ULONG ReceiverError
:1;
7636 ULONG ReplayNumRollover
:1;
7638 ULONG ReplayTimerTimeout
:1;
7639 ULONG AdvisoryNonFatalError
:1;
7643 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
7645 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
7646 _ANONYMOUS_STRUCT
struct {
7647 ULONG FirstErrorPointer
:5;
7648 ULONG ECRCGenerationCapable
:1;
7649 ULONG ECRCGenerationEnable
:1;
7650 ULONG ECRCCheckCapable
:1;
7651 ULONG ECRCCheckEnable
:1;
7655 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
7657 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
7658 _ANONYMOUS_STRUCT
struct {
7659 ULONG CorrectableErrorReportingEnable
:1;
7660 ULONG NonFatalErrorReportingEnable
:1;
7661 ULONG FatalErrorReportingEnable
:1;
7665 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
7667 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
7668 _ANONYMOUS_STRUCT
struct {
7669 ULONG CorrectableErrorReceived
:1;
7670 ULONG MultipleCorrectableErrorsReceived
:1;
7671 ULONG UncorrectableErrorReceived
:1;
7672 ULONG MultipleUncorrectableErrorsReceived
:1;
7673 ULONG FirstUncorrectableFatal
:1;
7674 ULONG NonFatalErrorMessagesReceived
:1;
7675 ULONG FatalErrorMessagesReceived
:1;
7677 ULONG AdvancedErrorInterruptMessageNumber
:5;
7680 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
7682 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
7683 _ANONYMOUS_STRUCT
struct {
7684 USHORT CorrectableSourceIdFun
:3;
7685 USHORT CorrectableSourceIdDev
:5;
7686 USHORT CorrectableSourceIdBus
:8;
7687 USHORT UncorrectableSourceIdFun
:3;
7688 USHORT UncorrectableSourceIdDev
:5;
7689 USHORT UncorrectableSourceIdBus
:8;
7692 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
7694 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
7695 _ANONYMOUS_STRUCT
struct {
7696 ULONG TargetAbortOnSplitCompletion
:1;
7697 ULONG MasterAbortOnSplitCompletion
:1;
7698 ULONG ReceivedTargetAbort
:1;
7699 ULONG ReceivedMasterAbort
:1;
7701 ULONG UnexpectedSplitCompletionError
:1;
7702 ULONG UncorrectableSplitCompletion
:1;
7703 ULONG UncorrectableDataError
:1;
7704 ULONG UncorrectableAttributeError
:1;
7705 ULONG UncorrectableAddressError
:1;
7706 ULONG DelayedTransactionDiscardTimerExpired
:1;
7707 ULONG PERRAsserted
:1;
7708 ULONG SERRAsserted
:1;
7709 ULONG InternalBridgeError
:1;
7713 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
7715 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
7716 _ANONYMOUS_STRUCT
struct {
7717 ULONG TargetAbortOnSplitCompletion
:1;
7718 ULONG MasterAbortOnSplitCompletion
:1;
7719 ULONG ReceivedTargetAbort
:1;
7720 ULONG ReceivedMasterAbort
:1;
7722 ULONG UnexpectedSplitCompletionError
:1;
7723 ULONG UncorrectableSplitCompletion
:1;
7724 ULONG UncorrectableDataError
:1;
7725 ULONG UncorrectableAttributeError
:1;
7726 ULONG UncorrectableAddressError
:1;
7727 ULONG DelayedTransactionDiscardTimerExpired
:1;
7728 ULONG PERRAsserted
:1;
7729 ULONG SERRAsserted
:1;
7730 ULONG InternalBridgeError
:1;
7734 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
7736 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
7737 _ANONYMOUS_STRUCT
struct {
7738 ULONG TargetAbortOnSplitCompletion
:1;
7739 ULONG MasterAbortOnSplitCompletion
:1;
7740 ULONG ReceivedTargetAbort
:1;
7741 ULONG ReceivedMasterAbort
:1;
7743 ULONG UnexpectedSplitCompletionError
:1;
7744 ULONG UncorrectableSplitCompletion
:1;
7745 ULONG UncorrectableDataError
:1;
7746 ULONG UncorrectableAttributeError
:1;
7747 ULONG UncorrectableAddressError
:1;
7748 ULONG DelayedTransactionDiscardTimerExpired
:1;
7749 ULONG PERRAsserted
:1;
7750 ULONG SERRAsserted
:1;
7751 ULONG InternalBridgeError
:1;
7755 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7757 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7758 _ANONYMOUS_STRUCT
struct {
7759 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7763 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7765 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7766 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7767 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7769 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7770 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7771 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7772 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7774 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7775 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7776 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7777 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7778 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7779 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7780 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7781 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7783 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7784 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7785 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7786 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7787 ULONG SecHeaderLog
[4];
7788 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7790 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7791 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7792 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7793 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7794 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7795 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7796 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7797 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7799 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7800 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7801 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7802 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7804 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7805 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7806 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7807 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7808 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7809 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7810 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7811 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7813 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7814 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7815 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7816 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7817 ULONG SecHeaderLog
[4];
7818 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7820 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7821 _ANONYMOUS_STRUCT
struct {
7822 ULONG VFMigrationCapable
:1;
7824 ULONG VFMigrationInterruptNumber
:11;
7827 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7829 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7830 _ANONYMOUS_STRUCT
struct {
7832 USHORT VFMigrationEnable
:1;
7833 USHORT VFMigrationInterruptEnable
:1;
7834 USHORT VFMemorySpaceEnable
:1;
7835 USHORT ARICapableHierarchy
:1;
7836 USHORT Reserved1
:11;
7839 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
7841 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
7842 _ANONYMOUS_STRUCT
struct {
7843 USHORT VFMigrationStatus
:1;
7844 USHORT Reserved1
:15;
7847 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
7849 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
7850 _ANONYMOUS_STRUCT
struct {
7851 ULONG VFMigrationStateBIR
:3;
7852 ULONG VFMigrationStateOffset
:29;
7855 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
7857 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
7858 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7859 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
7860 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
7861 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
7865 UCHAR FunctionDependencyLink
;
7867 USHORT FirstVFOffset
;
7871 ULONG SupportedPageSizes
;
7872 ULONG SystemPageSize
;
7873 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
7874 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
7875 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
7877 /* PCI device classes */
7878 #define PCI_CLASS_PRE_20 0x00
7879 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
7880 #define PCI_CLASS_NETWORK_CTLR 0x02
7881 #define PCI_CLASS_DISPLAY_CTLR 0x03
7882 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
7883 #define PCI_CLASS_MEMORY_CTLR 0x05
7884 #define PCI_CLASS_BRIDGE_DEV 0x06
7885 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
7886 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
7887 #define PCI_CLASS_INPUT_DEV 0x09
7888 #define PCI_CLASS_DOCKING_STATION 0x0a
7889 #define PCI_CLASS_PROCESSOR 0x0b
7890 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
7891 #define PCI_CLASS_WIRELESS_CTLR 0x0d
7892 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
7893 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
7894 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
7895 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
7896 #define PCI_CLASS_NOT_DEFINED 0xff
7898 /* PCI device subclasses for class 0 */
7899 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
7900 #define PCI_SUBCLASS_PRE_20_VGA 0x01
7902 /* PCI device subclasses for class 1 (mass storage controllers)*/
7903 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
7904 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
7905 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
7906 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
7907 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
7908 #define PCI_SUBCLASS_MSC_OTHER 0x80
7910 /* PCI device subclasses for class 2 (network controllers)*/
7911 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
7912 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
7913 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
7914 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
7915 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
7916 #define PCI_SUBCLASS_NET_OTHER 0x80
7918 /* PCI device subclasses for class 3 (display controllers)*/
7919 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
7920 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
7921 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
7922 #define PCI_SUBCLASS_VID_OTHER 0x80
7924 /* PCI device subclasses for class 4 (multimedia device)*/
7925 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
7926 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
7927 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
7928 #define PCI_SUBCLASS_MM_OTHER 0x80
7930 /* PCI device subclasses for class 5 (memory controller)*/
7931 #define PCI_SUBCLASS_MEM_RAM 0x00
7932 #define PCI_SUBCLASS_MEM_FLASH 0x01
7933 #define PCI_SUBCLASS_MEM_OTHER 0x80
7935 /* PCI device subclasses for class 6 (bridge device)*/
7936 #define PCI_SUBCLASS_BR_HOST 0x00
7937 #define PCI_SUBCLASS_BR_ISA 0x01
7938 #define PCI_SUBCLASS_BR_EISA 0x02
7939 #define PCI_SUBCLASS_BR_MCA 0x03
7940 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
7941 #define PCI_SUBCLASS_BR_PCMCIA 0x05
7942 #define PCI_SUBCLASS_BR_NUBUS 0x06
7943 #define PCI_SUBCLASS_BR_CARDBUS 0x07
7944 #define PCI_SUBCLASS_BR_RACEWAY 0x08
7945 #define PCI_SUBCLASS_BR_OTHER 0x80
7947 #define PCI_SUBCLASS_COM_SERIAL 0x00
7948 #define PCI_SUBCLASS_COM_PARALLEL 0x01
7949 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
7950 #define PCI_SUBCLASS_COM_MODEM 0x03
7951 #define PCI_SUBCLASS_COM_OTHER 0x80
7953 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
7954 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
7955 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
7956 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
7957 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
7958 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
7959 #define PCI_SUBCLASS_SYS_OTHER 0x80
7961 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
7962 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
7963 #define PCI_SUBCLASS_INP_MOUSE 0x02
7964 #define PCI_SUBCLASS_INP_SCANNER 0x03
7965 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
7966 #define PCI_SUBCLASS_INP_OTHER 0x80
7968 #define PCI_SUBCLASS_DOC_GENERIC 0x00
7969 #define PCI_SUBCLASS_DOC_OTHER 0x80
7971 #define PCI_SUBCLASS_PROC_386 0x00
7972 #define PCI_SUBCLASS_PROC_486 0x01
7973 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
7974 #define PCI_SUBCLASS_PROC_ALPHA 0x10
7975 #define PCI_SUBCLASS_PROC_POWERPC 0x20
7976 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
7978 /* PCI device subclasses for class C (serial bus controller)*/
7979 #define PCI_SUBCLASS_SB_IEEE1394 0x00
7980 #define PCI_SUBCLASS_SB_ACCESS 0x01
7981 #define PCI_SUBCLASS_SB_SSA 0x02
7982 #define PCI_SUBCLASS_SB_USB 0x03
7983 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
7984 #define PCI_SUBCLASS_SB_SMBUS 0x05
7986 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
7987 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
7988 #define PCI_SUBCLASS_WIRELESS_RF 0x10
7989 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
7991 #define PCI_SUBCLASS_INTIO_I2O 0x00
7993 #define PCI_SUBCLASS_SAT_TV 0x01
7994 #define PCI_SUBCLASS_SAT_AUDIO 0x02
7995 #define PCI_SUBCLASS_SAT_VOICE 0x03
7996 #define PCI_SUBCLASS_SAT_DATA 0x04
7998 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
7999 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
8000 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
8002 #define PCI_SUBCLASS_DASP_DPIO 0x00
8003 #define PCI_SUBCLASS_DASP_OTHER 0x80
8005 #define PCI_ADDRESS_IO_SPACE 0x00000001
8006 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
8007 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
8008 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
8009 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
8010 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
8012 #define PCI_TYPE_32BIT 0
8013 #define PCI_TYPE_20BIT 2
8014 #define PCI_TYPE_64BIT 4
8016 #define PCI_ROMADDRESS_ENABLED 0x00000001
8018 #endif /* _PCI_X_ */
8020 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
8022 _IRQL_requires_max_(PASSIVE_LEVEL
)
8023 _Must_inspect_result_
8025 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
8026 _Inout_ PVOID Context
);
8027 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
8029 _IRQL_requires_max_(PASSIVE_LEVEL
)
8030 _Must_inspect_result_
8032 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
8033 _Inout_ PVOID Context
);
8034 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
8036 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
8040 PINTERFACE_REFERENCE InterfaceReference
;
8041 PINTERFACE_DEREFERENCE InterfaceDereference
;
8042 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
8043 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
8044 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
8046 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
8049 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
8051 _Out_writes_bytes_(Length
) PVOID Buffer
,
8056 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
8058 _In_reads_bytes_(Length
) PVOID Buffer
,
8062 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
8066 PINTERFACE_REFERENCE InterfaceReference
;
8067 PINTERFACE_DEREFERENCE InterfaceDereference
;
8068 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
8069 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
8070 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
8072 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
8074 _Must_inspect_result_
8076 (NTAPI PCI_MSIX_SET_ENTRY
)(
8078 _In_ ULONG TableEntry
,
8079 _In_ ULONG MessageNumber
);
8080 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
8082 _Must_inspect_result_
8084 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
8086 _In_ ULONG TableEntry
);
8087 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
8089 _Must_inspect_result_
8091 (NTAPI PCI_MSIX_GET_ENTRY
)(
8093 _In_ ULONG TableEntry
,
8094 _Out_ PULONG MessageNumber
,
8095 _Out_ PBOOLEAN Masked
);
8096 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
8098 _Must_inspect_result_
8100 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
8102 _Out_ PULONG TableSize
);
8103 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
8105 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
8109 PINTERFACE_REFERENCE InterfaceReference
;
8110 PINTERFACE_DEREFERENCE InterfaceDereference
;
8111 PPCI_MSIX_SET_ENTRY SetTableEntry
;
8112 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
8113 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
8114 PPCI_MSIX_GET_ENTRY GetTableEntry
;
8115 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
8116 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
8118 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
8119 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
8121 /******************************************************************************
8122 * Object Manager Types *
8123 ******************************************************************************/
8125 #define MAXIMUM_FILENAME_LENGTH 256
8126 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
8128 #define OBJECT_TYPE_CREATE 0x0001
8129 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8131 #define DIRECTORY_QUERY 0x0001
8132 #define DIRECTORY_TRAVERSE 0x0002
8133 #define DIRECTORY_CREATE_OBJECT 0x0004
8134 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
8135 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
8137 #define SYMBOLIC_LINK_QUERY 0x0001
8138 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8140 #define DUPLICATE_CLOSE_SOURCE 0x00000001
8141 #define DUPLICATE_SAME_ACCESS 0x00000002
8142 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
8144 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
8145 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
8147 typedef ULONG OB_OPERATION
;
8149 #define OB_OPERATION_HANDLE_CREATE 0x00000001
8150 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
8152 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
8153 _Inout_ ACCESS_MASK DesiredAccess
;
8154 _In_ ACCESS_MASK OriginalDesiredAccess
;
8155 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
8157 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
8158 _Inout_ ACCESS_MASK DesiredAccess
;
8159 _In_ ACCESS_MASK OriginalDesiredAccess
;
8160 _In_ PVOID SourceProcess
;
8161 _In_ PVOID TargetProcess
;
8162 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
8164 typedef union _OB_PRE_OPERATION_PARAMETERS
{
8165 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8166 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8167 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
8169 typedef struct _OB_PRE_OPERATION_INFORMATION
{
8170 _In_ OB_OPERATION Operation
;
8171 _ANONYMOUS_UNION
union {
8173 _ANONYMOUS_STRUCT
struct {
8174 _In_ ULONG KernelHandle
:1;
8175 _In_ ULONG Reserved
:31;
8179 _In_ POBJECT_TYPE ObjectType
;
8180 _Out_ PVOID CallContext
;
8181 _In_ POB_PRE_OPERATION_PARAMETERS Parameters
;
8182 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
8184 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
8185 _In_ ACCESS_MASK GrantedAccess
;
8186 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
8188 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
8189 _In_ ACCESS_MASK GrantedAccess
;
8190 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
8192 typedef union _OB_POST_OPERATION_PARAMETERS
{
8193 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8194 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8195 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
8197 typedef struct _OB_POST_OPERATION_INFORMATION
{
8198 _In_ OB_OPERATION Operation
;
8199 _ANONYMOUS_UNION
union {
8201 _ANONYMOUS_STRUCT
struct {
8202 _In_ ULONG KernelHandle
:1;
8203 _In_ ULONG Reserved
:31;
8207 _In_ POBJECT_TYPE ObjectType
;
8208 _In_ PVOID CallContext
;
8209 _In_ NTSTATUS ReturnStatus
;
8210 _In_ POB_POST_OPERATION_PARAMETERS Parameters
;
8211 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
8213 typedef enum _OB_PREOP_CALLBACK_STATUS
{
8215 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
8217 typedef OB_PREOP_CALLBACK_STATUS
8218 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
8219 _In_ PVOID RegistrationContext
,
8220 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
);
8223 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
8224 _In_ PVOID RegistrationContext
,
8225 _In_ POB_POST_OPERATION_INFORMATION OperationInformation
);
8227 typedef struct _OB_OPERATION_REGISTRATION
{
8228 _In_ POBJECT_TYPE
*ObjectType
;
8229 _In_ OB_OPERATION Operations
;
8230 _In_ POB_PRE_OPERATION_CALLBACK PreOperation
;
8231 _In_ POB_POST_OPERATION_CALLBACK PostOperation
;
8232 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
8234 typedef struct _OB_CALLBACK_REGISTRATION
{
8235 _In_ USHORT Version
;
8236 _In_ USHORT OperationRegistrationCount
;
8237 _In_ UNICODE_STRING Altitude
;
8238 _In_ PVOID RegistrationContext
;
8239 _In_ OB_OPERATION_REGISTRATION
*OperationRegistration
;
8240 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
8242 typedef struct _OBJECT_NAME_INFORMATION
{
8243 UNICODE_STRING Name
;
8244 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
8246 /* Exported object types */
8248 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
8249 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
8250 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
8251 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
8252 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
8253 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
8254 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
8256 __CREATE_NTOS_DATA_IMPORT_ALIAS(CmKeyObjectType
)
8257 __CREATE_NTOS_DATA_IMPORT_ALIAS(IoFileObjectType
)
8258 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExEventObjectType
)
8259 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExSemaphoreObjectType
)
8260 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionManagerObjectType
)
8261 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmResourceManagerObjectType
)
8262 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmEnlistmentObjectType
)
8263 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionObjectType
)
8264 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsProcessType
)
8265 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsThreadType
)
8266 __CREATE_NTOS_DATA_IMPORT_ALIAS(SeTokenObjectType
)
8267 extern POBJECT_TYPE
*CmKeyObjectType
;
8268 extern POBJECT_TYPE
*IoFileObjectType
;
8269 extern POBJECT_TYPE
*ExEventObjectType
;
8270 extern POBJECT_TYPE
*ExSemaphoreObjectType
;
8271 extern POBJECT_TYPE
*TmTransactionManagerObjectType
;
8272 extern POBJECT_TYPE
*TmResourceManagerObjectType
;
8273 extern POBJECT_TYPE
*TmEnlistmentObjectType
;
8274 extern POBJECT_TYPE
*TmTransactionObjectType
;
8275 extern POBJECT_TYPE
*PsProcessType
;
8276 extern POBJECT_TYPE
*PsThreadType
;
8277 extern POBJECT_TYPE
*SeTokenObjectType
;
8281 /******************************************************************************
8282 * Process Manager Types *
8283 ******************************************************************************/
8285 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
8286 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
8287 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
8288 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
8289 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
8291 /* Thread Access Rights */
8292 #define THREAD_TERMINATE 0x0001
8293 #define THREAD_SUSPEND_RESUME 0x0002
8294 #define THREAD_ALERT 0x0004
8295 #define THREAD_GET_CONTEXT 0x0008
8296 #define THREAD_SET_CONTEXT 0x0010
8297 #define THREAD_SET_INFORMATION 0x0020
8298 #define THREAD_SET_LIMITED_INFORMATION 0x0400
8299 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
8301 #define PROCESS_DUP_HANDLE (0x0040)
8303 #if (NTDDI_VERSION >= NTDDI_VISTA)
8304 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8306 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
8309 #if (NTDDI_VERSION >= NTDDI_VISTA)
8310 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8312 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
8315 #define LOW_PRIORITY 0
8316 #define LOW_REALTIME_PRIORITY 16
8317 #define HIGH_PRIORITY 31
8318 #define MAXIMUM_PRIORITY 32
8321 /******************************************************************************
8322 * WMI Library Support Types *
8323 ******************************************************************************/
8326 #include <evntrace.h>
8330 #ifndef _TRACEHANDLE_DEFINED
8331 #define _TRACEHANDLE_DEFINED
8332 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
8335 #ifndef TRACE_INFORMATION_CLASS_DEFINE
8337 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
8340 ULONG MinimumBuffers
;
8341 ULONG MaximumBuffers
;
8344 ULONG FlushThreshold
;
8346 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
8348 typedef enum _TRACE_INFORMATION_CLASS
{
8351 TraceEnableFlagsClass
,
8352 TraceEnableLevelClass
,
8353 GlobalLoggerHandleClass
,
8354 EventLoggerHandleClass
,
8355 AllLoggerHandlesClass
,
8356 TraceHandleByNameClass
,
8357 LoggerEventsLostClass
,
8358 TraceSessionSettingsClass
,
8359 LoggerEventsLoggedClass
,
8360 MaxTraceInformationClass
8361 } TRACE_INFORMATION_CLASS
;
8363 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
8369 #include <evntprov.h>
8371 _IRQL_requires_same_
8373 (NTAPI
*PETWENABLECALLBACK
)(
8374 _In_ LPCGUID SourceId
,
8375 _In_ ULONG ControlCode
,
8377 _In_ ULONGLONG MatchAnyKeyword
,
8378 _In_ ULONGLONG MatchAllKeyword
,
8379 _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData
,
8380 _Inout_opt_ PVOID CallbackContext
);
8382 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
8385 /******************************************************************************
8386 * Kernel Functions *
8387 ******************************************************************************/
8388 #if defined(_M_IX86)
8389 /** Kernel definitions for x86 **/
8391 /* Interrupt request levels */
8392 #define PASSIVE_LEVEL 0
8395 #define DISPATCH_LEVEL 2
8396 #define CMCI_LEVEL 5
8397 #define PROFILE_LEVEL 27
8398 #define CLOCK1_LEVEL 28
8399 #define CLOCK2_LEVEL 28
8400 #define IPI_LEVEL 29
8401 #define POWER_LEVEL 30
8402 #define HIGH_LEVEL 31
8403 #define CLOCK_LEVEL CLOCK2_LEVEL
8405 #define KIP0PCRADDRESS 0xffdff000
8406 #define KI_USER_SHARED_DATA 0xffdf0000
8407 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
8409 #define PAGE_SIZE 0x1000
8410 #define PAGE_SHIFT 12L
8411 #define KeGetDcacheFillSize() 1L
8413 #define EFLAG_SIGN 0x8000
8414 #define EFLAG_ZERO 0x4000
8415 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8417 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8418 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
8419 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8422 typedef struct _KFLOATING_SAVE
{
8426 ULONG ErrorSelector
;
8431 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8433 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
8435 #define YieldProcessor _mm_pause
8439 KeMemoryBarrier(VOID
)
8441 LONG Barrier
, *Dummy
= &Barrier
;
8442 UNREFERENCED_LOCAL_VARIABLE(Dummy
);
8444 #if defined(__GNUC__)
8445 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8446 #elif defined(_MSC_VER)
8447 __asm xchg
[Barrier
], eax
8451 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8453 _IRQL_requires_max_(HIGH_LEVEL
)
8458 KeGetCurrentIrql(VOID
);
8460 _IRQL_requires_max_(HIGH_LEVEL
)
8465 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
);
8466 #define KeLowerIrql(a) KfLowerIrql(a)
8468 _IRQL_requires_max_(HIGH_LEVEL
)
8469 _IRQL_raises_(NewIrql
)
8475 _In_ KIRQL NewIrql
);
8476 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8478 _IRQL_requires_max_(DISPATCH_LEVEL
)
8480 _IRQL_raises_(DISPATCH_LEVEL
)
8484 KeRaiseIrqlToDpcLevel(VOID
);
8489 KeRaiseIrqlToSynchLevel(VOID
);
8491 _Requires_lock_not_held_(*SpinLock
)
8492 _Acquires_lock_(*SpinLock
)
8493 _IRQL_requires_max_(DISPATCH_LEVEL
)
8495 _IRQL_raises_(DISPATCH_LEVEL
)
8500 _Inout_ PKSPIN_LOCK SpinLock
);
8501 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
8503 _Requires_lock_held_(*SpinLock
)
8504 _Releases_lock_(*SpinLock
)
8505 _IRQL_requires_(DISPATCH_LEVEL
)
8510 _Inout_ PKSPIN_LOCK SpinLock
,
8511 _In_ _IRQL_restores_ KIRQL NewIrql
);
8512 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
8514 _Requires_lock_not_held_(*SpinLock
)
8515 _Acquires_lock_(*SpinLock
)
8516 _IRQL_requires_min_(DISPATCH_LEVEL
)
8520 KefAcquireSpinLockAtDpcLevel(
8521 _Inout_ PKSPIN_LOCK SpinLock
);
8522 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
8524 _Requires_lock_held_(*SpinLock
)
8525 _Releases_lock_(*SpinLock
)
8526 _IRQL_requires_min_(DISPATCH_LEVEL
)
8530 KefReleaseSpinLockFromDpcLevel(
8531 _Inout_ PKSPIN_LOCK SpinLock
);
8532 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
8537 KeGetCurrentThread(VOID
);
8539 _Always_(_Post_satisfies_(return<=0))
8540 _Must_inspect_result_
8541 _IRQL_requires_max_(DISPATCH_LEVEL
)
8542 _Kernel_float_saved_
8543 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
8547 KeSaveFloatingPointState(
8548 _Out_ PKFLOATING_SAVE FloatSave
);
8551 _Kernel_float_restored_
8552 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
8556 KeRestoreFloatingPointState(
8557 _In_ PKFLOATING_SAVE FloatSave
);
8562 * IN BOOLEAN ReadOperation,
8563 * IN BOOLEAN DmaOperation)
8565 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8567 /* x86 and x64 performs a 0x2C interrupt */
8568 #define DbgRaiseAssertionFailure __int2c
8573 OUT PLARGE_INTEGER CurrentCount
)
8576 #ifdef NONAMELESSUNION
8577 CurrentCount
->s
.HighPart
= KeTickCount
.High1Time
;
8578 CurrentCount
->s
.LowPart
= KeTickCount
.LowPart
;
8579 if (CurrentCount
->s
.HighPart
== KeTickCount
.High2Time
) break;
8581 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
8582 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
8583 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
8588 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
8594 #elif defined(_M_AMD64)
8595 /** Kernel definitions for AMD64 **/
8597 /* Interrupt request levels */
8598 #define PASSIVE_LEVEL 0
8601 #define DISPATCH_LEVEL 2
8602 #define CMCI_LEVEL 5
8603 #define CLOCK_LEVEL 13
8604 #define IPI_LEVEL 14
8605 #define DRS_LEVEL 14
8606 #define POWER_LEVEL 14
8607 #define PROFILE_LEVEL 15
8608 #define HIGH_LEVEL 15
8610 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
8611 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
8612 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
8613 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
8614 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
8616 #define PAGE_SIZE 0x1000
8617 #define PAGE_SHIFT 12L
8619 #define EFLAG_SIGN 0x8000
8620 #define EFLAG_ZERO 0x4000
8621 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8623 typedef struct _KFLOATING_SAVE
{
8625 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8627 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
8629 #define KeQueryInterruptTime() \
8630 (*(volatile ULONG64*)SharedInterruptTime)
8632 #define KeQuerySystemTime(CurrentCount) \
8633 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
8635 #define KeQueryTickCount(CurrentCount) \
8636 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
8638 #define KeGetDcacheFillSize() 1L
8640 #define YieldProcessor _mm_pause
8641 #define MemoryBarrier __faststorefence
8642 #define FastFence __faststorefence
8643 #define LoadFence _mm_lfence
8644 #define MemoryFence _mm_mfence
8645 #define StoreFence _mm_sfence
8646 #define LFENCE_ACQUIRE() LoadFence()
8650 KeMemoryBarrier(VOID
)
8652 // FIXME: Do we really need lfence after the __faststorefence ?
8657 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8661 KeGetCurrentIrql(VOID
)
8663 return (KIRQL
)__readcr8();
8668 KeLowerIrql(IN KIRQL NewIrql
)
8670 //ASSERT((KIRQL)__readcr8() >= NewIrql);
8671 __writecr8(NewIrql
);
8676 KfRaiseIrql(IN KIRQL NewIrql
)
8680 OldIrql
= (KIRQL
)__readcr8();
8681 //ASSERT(OldIrql <= NewIrql);
8682 __writecr8(NewIrql
);
8685 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8689 KeRaiseIrqlToDpcLevel(VOID
)
8691 return KfRaiseIrql(DISPATCH_LEVEL
);
8696 KeRaiseIrqlToSynchLevel(VOID
)
8698 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8703 KeGetCurrentThread(VOID
)
8705 return (struct _KTHREAD
*)__readgsqword(0x188);
8710 KeSaveFloatingPointState(PVOID FloatingState
)
8712 UNREFERENCED_PARAMETER(FloatingState
);
8713 return STATUS_SUCCESS
;
8718 KeRestoreFloatingPointState(PVOID FloatingState
)
8720 UNREFERENCED_PARAMETER(FloatingState
);
8721 return STATUS_SUCCESS
;
8727 * IN BOOLEAN ReadOperation,
8728 * IN BOOLEAN DmaOperation)
8730 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8732 /* x86 and x64 performs a 0x2C interrupt */
8733 #define DbgRaiseAssertionFailure __int2c
8735 #elif defined(_M_IA64)
8736 /** Kernel definitions for IA64 **/
8738 /* Interrupt request levels */
8739 #define PASSIVE_LEVEL 0
8742 #define DISPATCH_LEVEL 2
8744 #define DEVICE_LEVEL_BASE 4
8746 #define IPI_LEVEL 14
8747 #define DRS_LEVEL 14
8748 #define CLOCK_LEVEL 13
8749 #define POWER_LEVEL 15
8750 #define PROFILE_LEVEL 15
8751 #define HIGH_LEVEL 15
8753 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
8754 extern NTKERNELAPI
volatile LARGE_INTEGER KeTickCount
;
8756 #define PAUSE_PROCESSOR __yield();
8760 KeFlushWriteBuffer(VOID
)
8769 KeGetCurrentThread(VOID
);
8772 #elif defined(_M_PPC)
8774 /* Interrupt request levels */
8775 #define PASSIVE_LEVEL 0
8778 #define DISPATCH_LEVEL 2
8779 #define PROFILE_LEVEL 27
8780 #define CLOCK1_LEVEL 28
8781 #define CLOCK2_LEVEL 28
8782 #define IPI_LEVEL 29
8783 #define POWER_LEVEL 30
8784 #define HIGH_LEVEL 31
8787 // Used to contain PFNs and PFN counts
8789 typedef ULONG PFN_COUNT
;
8790 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8791 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8794 typedef struct _KFLOATING_SAVE
{
8796 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8798 typedef struct _KPCR_TIB
{
8799 PVOID ExceptionList
; /* 00 */
8800 PVOID StackBase
; /* 04 */
8801 PVOID StackLimit
; /* 08 */
8802 PVOID SubSystemTib
; /* 0C */
8803 _ANONYMOUS_UNION
union {
8804 PVOID FiberData
; /* 10 */
8805 ULONG Version
; /* 10 */
8807 PVOID ArbitraryUserPointer
; /* 14 */
8808 struct _KPCR_TIB
*Self
; /* 18 */
8809 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
8811 #define PCR_MINOR_VERSION 1
8812 #define PCR_MAJOR_VERSION 1
8814 typedef struct _KPCR
{
8815 KPCR_TIB Tib
; /* 00 */
8816 struct _KPCR
*Self
; /* 1C */
8817 struct _KPRCB
*Prcb
; /* 20 */
8818 KIRQL Irql
; /* 24 */
8820 ULONG IrrActive
; /* 2C */
8822 PVOID KdVersionBlock
; /* 34 */
8823 PUSHORT IDT
; /* 38 */
8824 PUSHORT GDT
; /* 3C */
8825 struct _KTSS
*TSS
; /* 40 */
8826 USHORT MajorVersion
; /* 44 */
8827 USHORT MinorVersion
; /* 46 */
8828 KAFFINITY SetMember
; /* 48 */
8829 ULONG StallScaleFactor
; /* 4C */
8830 UCHAR SpareUnused
; /* 50 */
8831 UCHAR Number
; /* 51 */
8832 } KPCR
, *PKPCR
; /* 54 */
8834 #define KeGetPcr() PCR
8836 #define YieldProcessor() __asm__ __volatile__("nop");
8841 KeGetCurrentProcessorNumber(VOID
)
8844 __asm__
__volatile__ (
8847 : "i" (FIELD_OFFSET(KPCR
, Number
))
8857 #define KeLowerIrql(a) KfLowerIrql(a)
8864 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8869 KeRaiseIrqlToDpcLevel(VOID
);
8874 KeRaiseIrqlToSynchLevel(VOID
);
8878 #elif defined(_M_MIPS)
8879 #error MIPS Headers are totally incorrect
8882 // Used to contain PFNs and PFN counts
8884 typedef ULONG PFN_COUNT
;
8885 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8886 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8888 #define PASSIVE_LEVEL 0
8890 #define DISPATCH_LEVEL 2
8891 #define PROFILE_LEVEL 27
8892 #define IPI_LEVEL 29
8893 #define HIGH_LEVEL 31
8895 typedef struct _KPCR
{
8896 struct _KPRCB
*Prcb
; /* 20 */
8897 KIRQL Irql
; /* 24 */
8902 #define KeGetPcr() PCR
8904 typedef struct _KFLOATING_SAVE
{
8905 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8910 KeGetCurrentProcessorNumber(VOID
)
8915 #define YieldProcessor() __asm__ __volatile__("nop");
8917 #define KeLowerIrql(a) KfLowerIrql(a)
8918 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8935 KeRaiseIrqlToDpcLevel(VOID
);
8940 KeRaiseIrqlToSynchLevel(VOID
);
8943 #elif defined(_M_ARM)
8946 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8948 #error Unknown Architecture
8955 _Out_ PRKEVENT Event
,
8956 _In_ EVENT_TYPE Type
,
8957 _In_ BOOLEAN State
);
8959 _IRQL_requires_max_(DISPATCH_LEVEL
)
8964 _Inout_ PRKEVENT Event
);
8966 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8968 #if defined(_NTDDK_) || defined(_NTIFS_)
8969 _Maybe_raises_SEH_exception_
8970 _IRQL_requires_max_(APC_LEVEL
)
8975 __in_data_source(USER_MODE
) _In_reads_bytes_(Length
) CONST VOID
*Address
, /* CONST is added */
8977 _In_ ULONG Alignment
);
8978 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
8980 _Maybe_raises_SEH_exception_
8981 _IRQL_requires_max_(APC_LEVEL
)
8986 __in_data_source(USER_MODE
) _Out_writes_bytes_(Length
) PVOID Address
,
8988 _In_ ULONG Alignment
);
8990 #if defined(SINGLE_GROUP_LEGACY_API)
8992 _IRQL_requires_min_(PASSIVE_LEVEL
)
8993 _IRQL_requires_max_(APC_LEVEL
)
8997 KeRevertToUserAffinityThread(VOID
);
8999 _IRQL_requires_min_(PASSIVE_LEVEL
)
9000 _IRQL_requires_max_(APC_LEVEL
)
9004 KeSetSystemAffinityThread(
9005 _In_ KAFFINITY Affinity
);
9010 KeSetTargetProcessorDpc(
9017 KeQueryActiveProcessors(VOID
);
9018 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
9020 #if !defined(_M_AMD64)
9024 KeQueryInterruptTime(VOID
);
9030 _Out_ PLARGE_INTEGER CurrentTime
);
9031 #endif /* !_M_AMD64 */
9033 #if !defined(_X86_) && !defined(_M_ARM)
9034 _Requires_lock_not_held_(*SpinLock
)
9035 _Acquires_lock_(*SpinLock
)
9036 _IRQL_requires_max_(DISPATCH_LEVEL
)
9038 _IRQL_raises_(DISPATCH_LEVEL
)
9042 KeAcquireSpinLockRaiseToDpc(
9043 _Inout_ PKSPIN_LOCK SpinLock
);
9045 #define KeAcquireSpinLock(SpinLock, OldIrql) \
9046 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
9048 _Requires_lock_not_held_(*SpinLock
)
9049 _Acquires_lock_(*SpinLock
)
9050 _IRQL_requires_min_(DISPATCH_LEVEL
)
9054 KeAcquireSpinLockAtDpcLevel(
9055 _Inout_ PKSPIN_LOCK SpinLock
);
9057 _Requires_lock_held_(*SpinLock
)
9058 _Releases_lock_(*SpinLock
)
9059 _IRQL_requires_(DISPATCH_LEVEL
)
9064 _Inout_ PKSPIN_LOCK SpinLock
,
9065 _In_ _IRQL_restores_ KIRQL NewIrql
);
9067 _Requires_lock_held_(*SpinLock
)
9068 _Releases_lock_(*SpinLock
)
9069 _IRQL_requires_min_(DISPATCH_LEVEL
)
9073 KeReleaseSpinLockFromDpcLevel(
9074 _Inout_ PKSPIN_LOCK SpinLock
);
9077 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
9081 KeInitializeSpinLock(
9082 _Out_ PKSPIN_LOCK SpinLock
);
9086 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock
)
9088 /* Clear the lock */
9098 _In_ ULONG BugCheckCode
,
9099 _In_ ULONG_PTR BugCheckParameter1
,
9100 _In_ ULONG_PTR BugCheckParameter2
,
9101 _In_ ULONG_PTR BugCheckParameter3
,
9102 _In_ ULONG_PTR BugCheckParameter4
);
9104 _IRQL_requires_max_(DISPATCH_LEVEL
)
9111 _IRQL_requires_min_(PASSIVE_LEVEL
)
9112 _IRQL_requires_max_(APC_LEVEL
)
9116 KeDelayExecutionThread(
9117 _In_ KPROCESSOR_MODE WaitMode
,
9118 _In_ BOOLEAN Alertable
,
9119 _In_ PLARGE_INTEGER Interval
);
9121 _Must_inspect_result_
9125 KeDeregisterBugCheckCallback(
9126 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
9128 _Acquires_lock_(_Global_critical_region_
)
9129 _IRQL_requires_max_(APC_LEVEL
)
9133 KeEnterCriticalRegion(VOID
);
9135 _IRQL_requires_max_(DISPATCH_LEVEL
)
9139 KeInitializeDeviceQueue(
9140 _Out_ PKDEVICE_QUEUE DeviceQueue
);
9146 _Out_ __drv_aliasesMem PRKDPC Dpc
,
9147 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
9148 _In_opt_ __drv_aliasesMem PVOID DeferredContext
);
9154 _Out_ PRKMUTEX Mutex
,
9157 _IRQL_requires_max_(PASSIVE_LEVEL
)
9161 KeInitializeSemaphore(
9162 _Out_ PRKSEMAPHORE Semaphore
,
9166 _IRQL_requires_max_(DISPATCH_LEVEL
)
9171 _Out_ PKTIMER Timer
);
9173 _IRQL_requires_max_(DISPATCH_LEVEL
)
9177 KeInitializeTimerEx(
9178 _Out_ PKTIMER Timer
,
9179 _In_ TIMER_TYPE Type
);
9181 _IRQL_requires_(DISPATCH_LEVEL
)
9185 KeInsertByKeyDeviceQueue(
9186 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9187 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
9188 _In_ ULONG SortKey
);
9190 _IRQL_requires_(DISPATCH_LEVEL
)
9194 KeInsertDeviceQueue(
9195 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9196 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9203 _In_opt_ PVOID SystemArgument1
,
9204 _In_opt_ PVOID SystemArgument2
);
9206 _Releases_lock_(_Global_critical_region_
)
9207 _IRQL_requires_max_(APC_LEVEL
)
9211 KeLeaveCriticalRegion(VOID
);
9216 KeQueryPerformanceCounter(
9217 _Out_opt_ PLARGE_INTEGER PerformanceFrequency
);
9219 _IRQL_requires_max_(PASSIVE_LEVEL
)
9223 KeQueryPriorityThread(
9224 _In_ PRKTHREAD Thread
);
9229 KeQueryTimeIncrement(VOID
);
9231 _IRQL_requires_max_(DISPATCH_LEVEL
)
9236 _In_ PRKEVENT Event
);
9238 _IRQL_requires_max_(DISPATCH_LEVEL
)
9243 _In_ PRKMUTEX Mutex
);
9245 _IRQL_requires_max_(DISPATCH_LEVEL
)
9249 KeReadStateSemaphore(
9250 _In_ PRKSEMAPHORE Semaphore
);
9252 _IRQL_requires_max_(DISPATCH_LEVEL
)
9257 _In_ PKTIMER Timer
);
9259 _Must_inspect_result_
9263 KeRegisterBugCheckCallback(
9264 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
9265 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
9266 _In_reads_bytes_opt_(Length
) PVOID Buffer
,
9268 _In_ PUCHAR Component
);
9270 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9271 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9276 _Inout_ PRKMUTEX Mutex
,
9279 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9280 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9285 _Inout_ PRKSEMAPHORE Semaphore
,
9286 _In_ KPRIORITY Increment
,
9287 _In_ LONG Adjustment
,
9288 _In_ _Literal_ BOOLEAN Wait
);
9290 _IRQL_requires_(DISPATCH_LEVEL
)
9292 PKDEVICE_QUEUE_ENTRY
9294 KeRemoveByKeyDeviceQueue(
9295 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9296 _In_ ULONG SortKey
);
9298 _IRQL_requires_(DISPATCH_LEVEL
)
9300 PKDEVICE_QUEUE_ENTRY
9302 KeRemoveDeviceQueue(
9303 _Inout_ PKDEVICE_QUEUE DeviceQueue
);
9305 _IRQL_requires_max_(DISPATCH_LEVEL
)
9309 KeRemoveEntryDeviceQueue(
9310 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9311 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9313 _IRQL_requires_max_(HIGH_LEVEL
)
9318 _Inout_ PRKDPC Dpc
);
9320 _IRQL_requires_max_(DISPATCH_LEVEL
)
9325 _Inout_ PRKEVENT Event
);
9327 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9328 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9333 _Inout_ PRKEVENT Event
,
9334 _In_ KPRIORITY Increment
,
9335 _In_ _Literal_ BOOLEAN Wait
);
9342 _In_ KDPC_IMPORTANCE Importance
);
9344 _IRQL_requires_min_(PASSIVE_LEVEL
)
9345 _IRQL_requires_max_(DISPATCH_LEVEL
)
9349 KeSetPriorityThread(
9350 _Inout_ PKTHREAD Thread
,
9351 _In_ KPRIORITY Priority
);
9353 _IRQL_requires_max_(DISPATCH_LEVEL
)
9358 _Inout_ PKTIMER Timer
,
9359 _In_ LARGE_INTEGER DueTime
,
9360 _In_opt_ PKDPC Dpc
);
9362 _IRQL_requires_max_(DISPATCH_LEVEL
)
9367 _Inout_ PKTIMER Timer
,
9368 _In_ LARGE_INTEGER DueTime
,
9369 _In_ LONG Period OPTIONAL
,
9370 _In_opt_ PKDPC Dpc
);
9375 KeStallExecutionProcessor(
9376 _In_ ULONG MicroSeconds
);
9378 _IRQL_requires_max_(HIGH_LEVEL
)
9382 KeSynchronizeExecution(
9383 _Inout_ PKINTERRUPT Interrupt
,
9384 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
9385 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
);
9387 _IRQL_requires_min_(PASSIVE_LEVEL
)
9388 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
9389 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
9393 KeWaitForMultipleObjects(
9395 _In_reads_(Count
) PVOID Object
[],
9396 _In_
__drv_strictTypeMatch(__drv_typeConst
) WAIT_TYPE WaitType
,
9397 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
9398 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
9399 _In_ BOOLEAN Alertable
,
9400 _In_opt_ PLARGE_INTEGER Timeout
,
9401 _Out_opt_ PKWAIT_BLOCK WaitBlockArray
);
9403 #define KeWaitForMutexObject KeWaitForSingleObject
9405 _IRQL_requires_min_(PASSIVE_LEVEL
)
9406 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
9407 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
9411 KeWaitForSingleObject(
9412 _In_ _Points_to_data_ PVOID Object
,
9413 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
9414 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
9415 _In_ BOOLEAN Alertable
,
9416 _In_opt_ PLARGE_INTEGER Timeout
);
9418 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9420 #if (NTDDI_VERSION >= NTDDI_WINXP)
9422 _Requires_lock_not_held_(*LockHandle
)
9423 _Acquires_lock_(*LockHandle
)
9424 _Post_same_lock_(*SpinLock
, *LockHandle
)
9425 _IRQL_requires_max_(DISPATCH_LEVEL
)
9426 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9427 _IRQL_raises_(DISPATCH_LEVEL
)
9431 KeAcquireInStackQueuedSpinLock(
9432 _Inout_ PKSPIN_LOCK SpinLock
,
9433 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9435 _Requires_lock_not_held_(*LockHandle
)
9436 _Acquires_lock_(*LockHandle
)
9437 _Post_same_lock_(*SpinLock
, *LockHandle
)
9438 _IRQL_requires_min_(DISPATCH_LEVEL
)
9442 KeAcquireInStackQueuedSpinLockAtDpcLevel(
9443 _Inout_ PKSPIN_LOCK SpinLock
,
9444 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9446 _Requires_lock_not_held_(*Interrupt
->ActualLock
)
9447 _Acquires_lock_(*Interrupt
->ActualLock
)
9448 _IRQL_requires_max_(HIGH_LEVEL
)
9450 _IRQL_raises_(HIGH_LEVEL
)
9454 KeAcquireInterruptSpinLock(
9455 _Inout_ PKINTERRUPT Interrupt
);
9457 _IRQL_requires_min_(PASSIVE_LEVEL
)
9458 _IRQL_requires_max_(DISPATCH_LEVEL
)
9462 KeAreApcsDisabled(VOID
);
9467 KeGetRecommendedSharedDataAlignment(VOID
);
9469 _IRQL_requires_max_(PASSIVE_LEVEL
)
9473 KeQueryRuntimeThread(
9474 _In_ PKTHREAD Thread
,
9475 _Out_ PULONG UserTime
);
9477 _Requires_lock_held_(*LockHandle
)
9478 _Releases_lock_(*LockHandle
)
9479 _IRQL_requires_(DISPATCH_LEVEL
)
9483 KeReleaseInStackQueuedSpinLockFromDpcLevel(
9484 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9486 _Requires_lock_held_(*Interrupt
->ActualLock
)
9487 _Releases_lock_(*Interrupt
->ActualLock
)
9488 _IRQL_requires_(HIGH_LEVEL
)
9492 KeReleaseInterruptSpinLock(
9493 _Inout_ PKINTERRUPT Interrupt
,
9494 _In_ _IRQL_restores_ KIRQL OldIrql
);
9496 _IRQL_requires_(DISPATCH_LEVEL
)
9498 PKDEVICE_QUEUE_ENTRY
9500 KeRemoveByKeyDeviceQueueIfBusy(
9501 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9502 _In_ ULONG SortKey
);
9504 _Requires_lock_held_(*LockHandle
)
9505 _Releases_lock_(*LockHandle
)
9506 _IRQL_requires_(DISPATCH_LEVEL
)
9507 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9511 KeReleaseInStackQueuedSpinLock(
9512 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9514 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9516 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
9518 _Must_inspect_result_
9522 KeDeregisterBugCheckReasonCallback(
9523 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
9525 _Must_inspect_result_
9529 KeRegisterBugCheckReasonCallback(
9530 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
9531 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
9532 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
9533 _In_ PUCHAR Component
);
9535 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
9537 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
9538 _IRQL_requires_max_(APC_LEVEL
)
9542 KeFlushQueuedDpcs(VOID
);
9543 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
9544 #if (NTDDI_VERSION >= NTDDI_WS03)
9546 _IRQL_requires_max_(APC_LEVEL
)
9550 KeRegisterNmiCallback(
9551 _In_ PNMI_CALLBACK CallbackRoutine
,
9552 _In_opt_ PVOID Context
);
9554 _IRQL_requires_max_(APC_LEVEL
)
9558 KeDeregisterNmiCallback(
9564 KeInitializeThreadedDpc(
9566 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
9567 _In_opt_ PVOID DeferredContext
);
9569 _IRQL_requires_min_(PASSIVE_LEVEL
)
9570 _IRQL_requires_max_(IPI_LEVEL
-1)
9575 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction
,
9576 _In_ ULONG_PTR Context
);
9578 _Requires_lock_not_held_(*SpinLock
)
9579 _Acquires_lock_(*SpinLock
)
9580 _IRQL_requires_max_(DISPATCH_LEVEL
)
9585 KeAcquireSpinLockForDpc(
9586 _Inout_ PKSPIN_LOCK SpinLock
);
9588 _Requires_lock_held_(*SpinLock
)
9589 _Releases_lock_(*SpinLock
)
9590 _IRQL_requires_(DISPATCH_LEVEL
)
9594 KeReleaseSpinLockForDpc(
9595 _Inout_ PKSPIN_LOCK SpinLock
,
9596 _In_ _IRQL_restores_ KIRQL OldIrql
);
9598 _Must_inspect_result_
9603 _In_ PKSPIN_LOCK SpinLock
);
9605 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
9606 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
9608 _Must_inspect_result_
9609 _IRQL_requires_min_(DISPATCH_LEVEL
)
9610 _Post_satisfies_(return == 1 || return == 0)
9614 KeTryToAcquireSpinLockAtDpcLevel(
9615 _Inout_
_Requires_lock_not_held_(*_Curr_
)
9616 _When_(return!=0, _Acquires_lock_(*_Curr_
))
9617 PKSPIN_LOCK SpinLock
);
9619 _IRQL_requires_min_(PASSIVE_LEVEL
)
9620 _IRQL_requires_max_(DISPATCH_LEVEL
)
9624 KeAreAllApcsDisabled(VOID
);
9626 _Acquires_lock_(_Global_critical_region_
)
9627 _Requires_lock_not_held_(*Mutex
)
9628 _Acquires_lock_(*Mutex
)
9629 _IRQL_requires_max_(APC_LEVEL
)
9630 _IRQL_requires_min_(PASSIVE_LEVEL
)
9634 KeAcquireGuardedMutex(
9635 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9637 _Requires_lock_not_held_(*FastMutex
)
9638 _Acquires_lock_(*FastMutex
)
9639 _IRQL_requires_max_(APC_LEVEL
)
9640 _IRQL_requires_min_(PASSIVE_LEVEL
)
9644 KeAcquireGuardedMutexUnsafe(
9645 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9647 _Acquires_lock_(_Global_critical_region_
)
9648 _IRQL_requires_max_(APC_LEVEL
)
9652 KeEnterGuardedRegion(VOID
);
9654 _Releases_lock_(_Global_critical_region_
)
9655 _IRQL_requires_max_(APC_LEVEL
)
9659 KeLeaveGuardedRegion(VOID
);
9661 _IRQL_requires_max_(APC_LEVEL
)
9662 _IRQL_requires_min_(PASSIVE_LEVEL
)
9666 KeInitializeGuardedMutex(
9667 _Out_ PKGUARDED_MUTEX GuardedMutex
);
9669 _Requires_lock_held_(*FastMutex
)
9670 _Releases_lock_(*FastMutex
)
9671 _IRQL_requires_max_(APC_LEVEL
)
9675 KeReleaseGuardedMutexUnsafe(
9676 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9678 _Releases_lock_(_Global_critical_region_
)
9679 _Requires_lock_held_(*Mutex
)
9680 _Releases_lock_(*Mutex
)
9681 _IRQL_requires_max_(APC_LEVEL
)
9685 KeReleaseGuardedMutex(
9686 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9688 _Must_inspect_result_
9689 _Success_(return != FALSE
)
9690 _IRQL_requires_max_(APC_LEVEL
)
9691 _Post_satisfies_(return == 1 || return == 0)
9695 KeTryToAcquireGuardedMutex(
9696 _When_ (return, _Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)) _Acquires_lock_(_Global_critical_region_
)
9697 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9698 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
9700 #if (NTDDI_VERSION >= NTDDI_VISTA)
9701 _Requires_lock_not_held_(*LockHandle
)
9702 _Acquires_lock_(*LockHandle
)
9703 _Post_same_lock_(*SpinLock
, *LockHandle
)
9704 _IRQL_requires_max_(DISPATCH_LEVEL
)
9705 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9709 KeAcquireInStackQueuedSpinLockForDpc(
9710 _Inout_ PKSPIN_LOCK SpinLock
,
9711 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9713 _Requires_lock_held_(*LockHandle
)
9714 _Releases_lock_(*LockHandle
)
9715 _IRQL_requires_(DISPATCH_LEVEL
)
9716 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9720 KeReleaseInStackQueuedSpinLockForDpc(
9721 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9723 _IRQL_requires_(DISPATCH_LEVEL
)
9727 KeQueryDpcWatchdogInformation(
9728 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
9729 #if defined(SINGLE_GROUP_LEGACY_API)
9731 _IRQL_requires_min_(PASSIVE_LEVEL
)
9732 _IRQL_requires_max_(APC_LEVEL
)
9736 KeSetSystemAffinityThreadEx(
9737 _In_ KAFFINITY Affinity
);
9739 _IRQL_requires_min_(PASSIVE_LEVEL
)
9740 _IRQL_requires_max_(APC_LEVEL
)
9744 KeRevertToUserAffinityThreadEx(
9745 _In_ KAFFINITY Affinity
);
9750 KeQueryActiveProcessorCount(
9751 _Out_opt_ PKAFFINITY ActiveProcessors
);
9756 KeQueryMaximumProcessorCount(VOID
);
9757 #endif /* SINGLE_GROUP_LEGACY_API */
9759 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9761 #if (NTDDI_VERSION >= NTDDI_WS08)
9763 _IRQL_requires_max_(APC_LEVEL
)
9766 KeRegisterProcessorChangeCallback(
9767 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
9768 _In_opt_ PVOID CallbackContext
,
9771 _IRQL_requires_max_(APC_LEVEL
)
9774 KeDeregisterProcessorChangeCallback(
9775 _In_ PVOID CallbackHandle
);
9777 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
9778 #if (NTDDI_VERSION >= NTDDI_WIN7)
9780 _IRQL_requires_max_(DISPATCH_LEVEL
)
9781 _IRQL_requires_min_(PASSIVE_LEVEL
)
9782 _IRQL_requires_same_
9785 KeQueryTotalCycleTimeProcess(
9786 _Inout_ PKPROCESS Process
,
9787 _Out_ PULONG64 CycleTimeStamp
);
9789 _IRQL_requires_max_(APC_LEVEL
)
9790 _IRQL_requires_min_(PASSIVE_LEVEL
)
9791 _IRQL_requires_same_
9794 KeQueryTotalCycleTimeThread(
9795 _Inout_ PKTHREAD Thread
,
9796 _Out_ PULONG64 CycleTimeStamp
);
9798 _Must_inspect_result_
9802 KeSetTargetProcessorDpcEx(
9804 _In_ PPROCESSOR_NUMBER ProcNumber
);
9806 _IRQL_requires_min_(PASSIVE_LEVEL
)
9807 _IRQL_requires_max_(APC_LEVEL
)
9811 KeSetSystemGroupAffinityThread(
9812 _In_ PGROUP_AFFINITY Affinity
,
9813 _Out_opt_ PGROUP_AFFINITY PreviousAffinity
);
9815 _IRQL_requires_min_(PASSIVE_LEVEL
)
9816 _IRQL_requires_max_(APC_LEVEL
)
9820 KeRevertToUserGroupAffinityThread(
9821 _In_ PGROUP_AFFINITY PreviousAffinity
);
9823 _IRQL_requires_max_(DISPATCH_LEVEL
)
9827 KeSetCoalescableTimer(
9828 _Inout_ PKTIMER Timer
,
9829 _In_ LARGE_INTEGER DueTime
,
9831 _In_ ULONG TolerableDelay
,
9832 _In_opt_ PKDPC Dpc
);
9837 KeQueryUnbiasedInterruptTime(VOID
);
9842 KeQueryActiveProcessorCountEx(
9843 _In_ USHORT GroupNumber
);
9848 KeQueryMaximumProcessorCountEx(
9849 _In_ USHORT GroupNumber
);
9854 KeQueryActiveGroupCount(VOID
);
9859 KeQueryMaximumGroupCount(VOID
);
9864 KeQueryGroupAffinity(
9865 _In_ USHORT GroupNumber
);
9870 KeGetCurrentProcessorNumberEx(
9871 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
9876 KeQueryNodeActiveAffinity(
9877 _In_ USHORT NodeNumber
,
9878 _Out_opt_ PGROUP_AFFINITY Affinity
,
9879 _Out_opt_ PUSHORT Count
);
9884 KeQueryNodeMaximumProcessorCount(
9885 _In_ USHORT NodeNumber
);
9890 KeQueryHighestNodeNumber(VOID
);
9895 KeGetCurrentNodeNumber(VOID
);
9897 _IRQL_requires_max_(DISPATCH_LEVEL
)
9901 KeQueryLogicalProcessorRelationship(
9902 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
9903 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
9904 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
9905 _Inout_ PULONG Length
);
9907 _Must_inspect_result_
9908 _IRQL_requires_max_(DISPATCH_LEVEL
)
9910 _When_(return==0, _Kernel_float_saved_
)
9914 KeSaveExtendedProcessorState(
9916 _Out_
_Requires_lock_not_held_(*_Curr_
)
9917 _When_(return==0, _Acquires_lock_(*_Curr_
))
9918 PXSTATE_SAVE XStateSave
);
9920 _Kernel_float_restored_
9924 KeRestoreExtendedProcessorState(
9925 _In_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
9926 PXSTATE_SAVE XStateSave
);
9930 KeGetProcessorNumberFromIndex(
9931 _In_ ULONG ProcIndex
,
9932 _Out_ PPROCESSOR_NUMBER ProcNumber
);
9936 KeGetProcessorIndexFromNumber(
9937 _In_ PPROCESSOR_NUMBER ProcNumber
);
9938 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9939 #if !defined(_IA64_)
9943 KeFlushWriteBuffer(VOID
);
9947 * KeInitializeCallbackRecord(
9948 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
9950 #define KeInitializeCallbackRecord(CallbackRecord) \
9951 CallbackRecord->State = BufferEmpty;
9953 #if defined(_PREFAST_)
9955 void __PREfastPagedCode(void);
9956 void __PREfastPagedCodeLocked(void);
9957 #define PAGED_CODE() __PREfastPagedCode();
9958 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked();
9962 #if (NTDDI_VERSION >= NTDDI_VISTA)
9963 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
9965 #define PAGED_ASSERT( exp ) ASSERT( exp )
9968 #define PAGED_CODE() { \
9969 if (KeGetCurrentIrql() > APC_LEVEL) { \
9970 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
9971 PAGED_ASSERT(FALSE); \
9975 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
9979 #define PAGED_CODE() NOP_FUNCTION;
9980 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
9984 /******************************************************************************
9985 * Runtime Library Functions *
9986 ******************************************************************************/
9988 #define FAST_FAIL_LEGACY_GS_VIOLATION 0
9989 #define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
9990 #define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
9991 #define FAST_FAIL_CORRUPT_LIST_ENTRY 3
9992 #define FAST_FAIL_INCORRECT_STACK 4
9993 #define FAST_FAIL_INVALID_ARG 5
9994 #define FAST_FAIL_GS_COOKIE_INIT 6
9995 #define FAST_FAIL_FATAL_APP_EXIT 7
9996 #define FAST_FAIL_RANGE_CHECK_FAILURE 8
9997 #define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
9998 #define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
9999 #define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
10000 #define FAST_FAIL_INVALID_FIBER_SWITCH 12
10001 #define FAST_FAIL_INVALID_SET_OF_CONTEXT 13
10002 #define FAST_FAIL_INVALID_REFERENCE_COUNT 14
10003 #define FAST_FAIL_INVALID_JUMP_BUFFER 18
10004 #define FAST_FAIL_MRDATA_MODIFIED 19
10005 #define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
10016 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && (defined(_M_CEE_PURE) || defined(_M_CEE_SAFE))
10017 #define NO_KERNEL_LIST_ENTRY_CHECKS
10020 #if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__)
10021 #define EXTRA_KERNEL_LIST_ENTRY_CHECKS
10024 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
10026 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
10030 InitializeListHead(
10031 _Out_ PLIST_ENTRY ListHead
)
10033 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
10036 _Must_inspect_result_
10040 _In_
const LIST_ENTRY
* ListHead
)
10042 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
10047 RemoveEntryListUnsafe(
10048 _In_ PLIST_ENTRY Entry
)
10050 PLIST_ENTRY OldFlink
;
10051 PLIST_ENTRY OldBlink
;
10053 OldFlink
= Entry
->Flink
;
10054 OldBlink
= Entry
->Blink
;
10055 OldFlink
->Blink
= OldBlink
;
10056 OldBlink
->Flink
= OldFlink
;
10057 return (BOOLEAN
)(OldFlink
== OldBlink
);
10060 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10063 FatalListEntryError(
10068 UNREFERENCED_PARAMETER(P1
);
10069 UNREFERENCED_PARAMETER(P2
);
10070 UNREFERENCED_PARAMETER(P3
);
10072 RtlFailFast(FAST_FAIL_CORRUPT_LIST_ENTRY
);
10077 RtlpCheckListEntry(
10078 _In_ PLIST_ENTRY Entry
)
10080 if (Entry
->Flink
->Blink
!= Entry
|| Entry
->Blink
->Flink
!= Entry
)
10081 FatalListEntryError(Entry
->Blink
, Entry
, Entry
->Flink
);
10088 _In_ PLIST_ENTRY Entry
)
10090 PLIST_ENTRY OldFlink
;
10091 PLIST_ENTRY OldBlink
;
10093 OldFlink
= Entry
->Flink
;
10094 OldBlink
= Entry
->Blink
;
10095 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10096 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10097 if (OldFlink
== Entry
|| OldBlink
== Entry
)
10098 FatalListEntryError(OldBlink
, Entry
, OldFlink
);
10100 if (OldFlink
->Blink
!= Entry
|| OldBlink
->Flink
!= Entry
)
10101 FatalListEntryError(OldBlink
, Entry
, OldFlink
);
10103 OldFlink
->Blink
= OldBlink
;
10104 OldBlink
->Flink
= OldFlink
;
10105 return (BOOLEAN
)(OldFlink
== OldBlink
);
10111 _Inout_ PLIST_ENTRY ListHead
)
10116 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10117 RtlpCheckListEntry(ListHead
);
10118 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10119 if (ListHead
->Flink
== ListHead
|| ListHead
->Blink
== ListHead
)
10120 FatalListEntryError(ListHead
->Blink
, ListHead
, ListHead
->Flink
);
10123 Entry
= ListHead
->Flink
;
10124 Flink
= Entry
->Flink
;
10125 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10126 if (Entry
->Blink
!= ListHead
|| Flink
->Blink
!= Entry
)
10127 FatalListEntryError(ListHead
, Entry
, Flink
);
10129 ListHead
->Flink
= Flink
;
10130 Flink
->Blink
= ListHead
;
10137 _Inout_ PLIST_ENTRY ListHead
)
10142 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10143 RtlpCheckListEntry(ListHead
);
10144 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10145 if (ListHead
->Flink
== ListHead
|| ListHead
->Blink
== ListHead
)
10146 FatalListEntryError(ListHead
->Blink
, ListHead
, ListHead
->Flink
);
10149 Entry
= ListHead
->Blink
;
10150 Blink
= Entry
->Blink
;
10151 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10152 if (Blink
->Flink
!= Entry
|| Entry
->Flink
!= ListHead
)
10153 FatalListEntryError(Blink
, Entry
, ListHead
);
10155 ListHead
->Blink
= Blink
;
10156 Blink
->Flink
= ListHead
;
10163 _Inout_ PLIST_ENTRY ListHead
,
10164 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
10166 PLIST_ENTRY OldBlink
;
10167 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10168 RtlpCheckListEntry(ListHead
);
10170 OldBlink
= ListHead
->Blink
;
10171 Entry
->Flink
= ListHead
;
10172 Entry
->Blink
= OldBlink
;
10173 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10174 if (OldBlink
->Flink
!= ListHead
)
10175 FatalListEntryError(OldBlink
->Blink
, OldBlink
, ListHead
);
10177 OldBlink
->Flink
= Entry
;
10178 ListHead
->Blink
= Entry
;
10184 _Inout_ PLIST_ENTRY ListHead
,
10185 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
10187 PLIST_ENTRY OldFlink
;
10188 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10189 RtlpCheckListEntry(ListHead
);
10191 OldFlink
= ListHead
->Flink
;
10192 Entry
->Flink
= OldFlink
;
10193 Entry
->Blink
= ListHead
;
10194 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10195 if (OldFlink
->Blink
!= ListHead
)
10196 FatalListEntryError(ListHead
, OldFlink
, OldFlink
->Flink
);
10198 OldFlink
->Blink
= Entry
;
10199 ListHead
->Flink
= Entry
;
10205 _Inout_ PLIST_ENTRY ListHead
,
10206 _Inout_ PLIST_ENTRY ListToAppend
)
10208 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
10210 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10211 RtlpCheckListEntry(ListHead
);
10212 RtlpCheckListEntry(ListToAppend
);
10214 ListHead
->Blink
->Flink
= ListToAppend
;
10215 ListHead
->Blink
= ListToAppend
->Blink
;
10216 ListToAppend
->Blink
->Flink
= ListHead
;
10217 ListToAppend
->Blink
= ListEnd
;
10223 _Inout_ PSINGLE_LIST_ENTRY ListHead
)
10225 PSINGLE_LIST_ENTRY FirstEntry
;
10226 FirstEntry
= ListHead
->Next
;
10227 if (FirstEntry
!= NULL
) {
10228 ListHead
->Next
= FirstEntry
->Next
;
10236 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
10237 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry
)
10239 Entry
->Next
= ListHead
->Next
;
10240 ListHead
->Next
= Entry
;
10243 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
10245 __analysis_noreturn
10250 _In_ PVOID FailedAssertion
,
10251 _In_ PVOID FileName
,
10252 _In_ ULONG LineNumber
,
10253 _In_opt_z_ PSTR Message
);
10257 * IN VOID UNALIGNED *Destination,
10258 * IN CONST VOID UNALIGNED *Source,
10259 * IN SIZE_T Length)
10261 #define RtlCopyMemory(Destination, Source, Length) \
10262 memcpy(Destination, Source, Length)
10264 #define RtlCopyBytes RtlCopyMemory
10266 #if defined(_M_AMD64)
10270 RtlCopyMemoryNonTemporal(
10271 _Out_writes_bytes_all_(Length
) VOID UNALIGNED
*Destination
,
10272 _In_reads_bytes_(Length
) const VOID UNALIGNED
*Source
,
10273 _In_ SIZE_T Length
);
10275 #define RtlCopyMemoryNonTemporal RtlCopyMemory
10283 #define RtlEqualLuid(Luid1, Luid2) \
10284 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
10288 * IN VOID UNALIGNED *Destination,
10289 * IN CONST VOID UNALIGNED *Source,
10290 * IN SIZE_T Length)
10292 #define RtlEqualMemory(Destination, Source, Length) \
10293 (!memcmp(Destination, Source, Length))
10297 * IN VOID UNALIGNED *Destination,
10298 * IN SIZE_T Length,
10301 #define RtlFillMemory(Destination, Length, Fill) \
10302 memset(Destination, Fill, Length)
10304 #define RtlFillBytes RtlFillMemory
10306 _IRQL_requires_max_(PASSIVE_LEVEL
)
10310 RtlFreeUnicodeString(
10311 _Inout_
_At_(UnicodeString
->Buffer
, __drv_freesMem(Mem
))
10312 PUNICODE_STRING UnicodeString
);
10314 _IRQL_requires_max_(PASSIVE_LEVEL
)
10315 _Must_inspect_result_
10320 _In_ PUNICODE_STRING GuidString
,
10323 _IRQL_requires_max_(DISPATCH_LEVEL
)
10324 _At_(DestinationString
->Buffer
, _Post_equal_to_(SourceString
))
10325 _When_(SourceString
!= NULL
,
10326 _At_(DestinationString
->Length
, _Post_equal_to_(_String_length_(SourceString
) * sizeof(WCHAR
)))
10327 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(DestinationString
->Length
+ sizeof(WCHAR
))))
10328 _When_(SourceString
== NULL
,
10329 _At_(DestinationString
->Length
, _Post_equal_to_(0))
10330 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(0)))
10334 RtlInitUnicodeString(
10335 _Out_ PUNICODE_STRING DestinationString
,
10336 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
);
10340 * IN VOID UNALIGNED *Destination,
10341 * IN CONST VOID UNALIGNED *Source,
10342 * IN SIZE_T Length)
10344 #define RtlMoveMemory(Destination, Source, Length) \
10345 memmove(Destination, Source, Length)
10347 _IRQL_requires_max_(PASSIVE_LEVEL
)
10348 _Must_inspect_result_
10354 _Out_
_At_(GuidString
->Buffer
, __drv_allocatesMem(Mem
))
10355 PUNICODE_STRING GuidString
);
10359 * IN VOID UNALIGNED *Destination,
10360 * IN SIZE_T Length)
10362 #define RtlZeroMemory(Destination, Length) \
10363 memset(Destination, 0, Length)
10365 #define RtlZeroBytes RtlZeroMemory
10367 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10369 _Must_inspect_result_
10374 _In_ PRTL_BITMAP BitMapHeader
,
10375 _In_ ULONG StartingIndex
,
10376 _In_ ULONG Length
);
10378 _Must_inspect_result_
10383 _In_ PRTL_BITMAP BitMapHeader
,
10384 _In_ ULONG StartingIndex
,
10385 _In_ ULONG Length
);
10387 _IRQL_requires_max_(PASSIVE_LEVEL
)
10388 _Must_inspect_result_
10392 RtlAnsiStringToUnicodeString(
10393 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
10394 _When_(!AllocateDestinationString
, _Inout_
)
10395 PUNICODE_STRING DestinationString
,
10396 _In_ PANSI_STRING SourceString
,
10397 _In_ BOOLEAN AllocateDestinationString
);
10399 _IRQL_requires_max_(PASSIVE_LEVEL
)
10403 RtlxAnsiStringToUnicodeSize(
10404 _In_ PCANSI_STRING AnsiString
);
10406 #define RtlAnsiStringToUnicodeSize(String) ( \
10407 NLS_MB_CODE_PAGE_TAG ? \
10408 RtlxAnsiStringToUnicodeSize(String) : \
10409 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
10413 _Unchanged_(Destination
->MaximumLength
)
10414 _Unchanged_(Destination
->Buffer
)
10415 _When_(_Old_(Destination
->Length
) + Source
->Length
<= Destination
->MaximumLength
,
10416 _At_(Destination
->Length
, _Post_equal_to_(_Old_(Destination
->Length
) + Source
->Length
))
10417 _At_(return, _Out_range_(==, 0)))
10418 _When_(_Old_(Destination
->Length
) + Source
->Length
> Destination
->MaximumLength
,
10419 _Unchanged_(Destination
->Length
)
10420 _At_(return, _Out_range_(<, 0)))
10424 RtlAppendUnicodeStringToString(
10425 _Inout_ PUNICODE_STRING Destination
,
10426 _In_ PCUNICODE_STRING Source
);
10429 _Unchanged_(Destination
->MaximumLength
)
10430 _Unchanged_(Destination
->Buffer
)
10431 /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
10432 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
10433 _At_(return, _Out_range_(==, 0)))
10434 _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
10435 _Unchanged_(Destination->Length)
10436 _At_(return, _Out_range_(<, 0))) */
10440 RtlAppendUnicodeToString(
10441 _Inout_ PUNICODE_STRING Destination
,
10442 _In_opt_z_ PCWSTR Source
);
10444 _IRQL_requires_max_(PASSIVE_LEVEL
)
10445 _Must_inspect_result_
10449 RtlCheckRegistryKey(
10450 _In_ ULONG RelativeTo
,
10457 _In_ PRTL_BITMAP BitMapHeader
);
10463 _In_ PRTL_BITMAP BitMapHeader
,
10464 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToClear
) ULONG StartingIndex
,
10465 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToClear
);
10467 _Must_inspect_result_
10472 _In_
const VOID
*Source1
,
10473 _In_
const VOID
*Source2
,
10474 _In_ SIZE_T Length
);
10476 _IRQL_requires_max_(PASSIVE_LEVEL
)
10477 _Must_inspect_result_
10481 RtlCompareUnicodeString(
10482 _In_ PCUNICODE_STRING String1
,
10483 _In_ PCUNICODE_STRING String2
,
10484 _In_ BOOLEAN CaseInSensitive
);
10486 _IRQL_requires_max_(PASSIVE_LEVEL
)
10487 _Must_inspect_result_
10491 RtlCompareUnicodeStrings(
10492 _In_reads_(String1Length
) PCWCH String1
,
10493 _In_ SIZE_T String1Length
,
10494 _In_reads_(String2Length
) PCWCH String2
,
10495 _In_ SIZE_T String2Length
,
10496 _In_ BOOLEAN CaseInSensitive
);
10498 _Unchanged_(DestinationString
->Buffer
)
10499 _Unchanged_(DestinationString
->MaximumLength
)
10500 _At_(DestinationString
->Length
,
10501 _When_(SourceString
->Length
> DestinationString
->MaximumLength
,
10502 _Post_equal_to_(DestinationString
->MaximumLength
))
10503 _When_(SourceString
->Length
<= DestinationString
->MaximumLength
,
10504 _Post_equal_to_(SourceString
->Length
)))
10508 RtlCopyUnicodeString(
10509 _Inout_ PUNICODE_STRING DestinationString
,
10510 _In_opt_ PCUNICODE_STRING SourceString
);
10512 _IRQL_requires_max_(PASSIVE_LEVEL
)
10516 RtlCreateRegistryKey(
10517 _In_ ULONG RelativeTo
,
10520 _IRQL_requires_max_(APC_LEVEL
)
10524 RtlCreateSecurityDescriptor(
10525 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
10526 _In_ ULONG Revision
);
10528 _IRQL_requires_max_(PASSIVE_LEVEL
)
10532 RtlDeleteRegistryValue(
10533 _In_ ULONG RelativeTo
,
10535 _In_z_ PCWSTR ValueName
);
10537 _IRQL_requires_max_(PASSIVE_LEVEL
)
10538 _Must_inspect_result_
10542 RtlEqualUnicodeString(
10543 _In_ CONST UNICODE_STRING
*String1
,
10544 _In_ CONST UNICODE_STRING
*String2
,
10545 _In_ BOOLEAN CaseInSensitive
);
10547 #if !defined(_AMD64_) && !defined(_IA64_)
10551 RtlExtendedIntegerMultiply(
10552 _In_ LARGE_INTEGER Multiplicand
,
10553 _In_ LONG Multiplier
);
10558 RtlExtendedLargeIntegerDivide(
10559 _In_ LARGE_INTEGER Dividend
,
10560 _In_ ULONG Divisor
,
10561 _Out_opt_ PULONG Remainder
);
10564 #if defined(_X86_) || defined(_IA64_)
10568 RtlExtendedMagicDivide(
10569 _In_ LARGE_INTEGER Dividend
,
10570 _In_ LARGE_INTEGER MagicDivisor
,
10571 _In_ CCHAR ShiftCount
);
10574 _IRQL_requires_max_(PASSIVE_LEVEL
)
10579 _Inout_
_At_(AnsiString
->Buffer
, __drv_freesMem(Mem
))
10580 PANSI_STRING AnsiString
);
10582 _Success_(return != -1)
10583 _Must_inspect_result_
10588 _In_ PRTL_BITMAP BitMapHeader
,
10589 _In_ ULONG NumberToFind
,
10590 _In_ ULONG HintIndex
);
10592 _Success_(return != -1)
10596 RtlFindClearBitsAndSet(
10597 _In_ PRTL_BITMAP BitMapHeader
,
10598 _In_ ULONG NumberToFind
,
10599 _In_ ULONG HintIndex
);
10604 RtlFindFirstRunClear(
10605 _In_ PRTL_BITMAP BitMapHeader
,
10606 _Out_ PULONG StartingIndex
);
10612 _In_ PRTL_BITMAP BitMapHeader
,
10613 _Out_writes_to_(SizeOfRunArray
, return) PRTL_BITMAP_RUN RunArray
,
10614 _In_range_(>, 0) ULONG SizeOfRunArray
,
10615 _In_ BOOLEAN LocateLongestRuns
);
10620 RtlFindLastBackwardRunClear(
10621 _In_ PRTL_BITMAP BitMapHeader
,
10622 _In_ ULONG FromIndex
,
10623 _Out_ PULONG StartingRunIndex
);
10625 _Success_(return != -1)
10626 _Must_inspect_result_
10630 RtlFindLeastSignificantBit(
10631 _In_ ULONGLONG Set
);
10636 RtlFindLongestRunClear(
10637 _In_ PRTL_BITMAP BitMapHeader
,
10638 _Out_ PULONG StartingIndex
);
10640 _Success_(return != -1)
10641 _Must_inspect_result_
10645 RtlFindMostSignificantBit(
10646 _In_ ULONGLONG Set
);
10651 RtlFindNextForwardRunClear(
10652 _In_ PRTL_BITMAP BitMapHeader
,
10653 _In_ ULONG FromIndex
,
10654 _Out_ PULONG StartingRunIndex
);
10656 _Success_(return != -1)
10657 _Must_inspect_result_
10662 _In_ PRTL_BITMAP BitMapHeader
,
10663 _In_ ULONG NumberToFind
,
10664 _In_ ULONG HintIndex
);
10666 _Success_(return != -1)
10670 RtlFindSetBitsAndClear(
10671 _In_ PRTL_BITMAP BitMapHeader
,
10672 _In_ ULONG NumberToFind
,
10673 _In_ ULONG HintIndex
);
10675 _IRQL_requires_max_(DISPATCH_LEVEL
)
10680 _Out_ PANSI_STRING DestinationString
,
10681 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10683 _At_(BitMapHeader
->SizeOfBitMap
, _Post_equal_to_(SizeOfBitMap
))
10684 _At_(BitMapHeader
->Buffer
, _Post_equal_to_(BitMapBuffer
))
10688 RtlInitializeBitMap(
10689 _Out_ PRTL_BITMAP BitMapHeader
,
10690 _In_opt_ __drv_aliasesMem PULONG BitMapBuffer
,
10691 _In_opt_ ULONG SizeOfBitMap
);
10693 _IRQL_requires_max_(DISPATCH_LEVEL
)
10698 _Out_ PSTRING DestinationString
,
10699 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10701 _IRQL_requires_max_(PASSIVE_LEVEL
)
10702 _At_(String
->MaximumLength
, _Const_
)
10706 RtlIntegerToUnicodeString(
10708 _In_opt_ ULONG Base
,
10709 _Inout_ PUNICODE_STRING String
);
10711 _IRQL_requires_max_(PASSIVE_LEVEL
)
10712 _At_(String
->MaximumLength
, _Const_
)
10716 RtlInt64ToUnicodeString(
10717 _In_ ULONGLONG Value
,
10718 _In_opt_ ULONG Base
,
10719 _Inout_ PUNICODE_STRING String
);
10722 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10723 RtlInt64ToUnicodeString(Value, Base, String)
10725 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10726 RtlIntegerToUnicodeString(Value, Base, String)
10733 #define RtlIsZeroLuid(_L1) \
10734 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
10736 _IRQL_requires_max_(APC_LEVEL
)
10740 RtlLengthSecurityDescriptor(
10741 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
10746 RtlNumberOfClearBits(
10747 _In_ PRTL_BITMAP BitMapHeader
);
10752 RtlNumberOfSetBits(
10753 _In_ PRTL_BITMAP BitMapHeader
);
10755 _IRQL_requires_max_(PASSIVE_LEVEL
)
10759 RtlQueryRegistryValues(
10760 _In_ ULONG RelativeTo
,
10762 _Inout_
_At_(*(*QueryTable
).EntryContext
, _Pre_unknown_
)
10763 PRTL_QUERY_REGISTRY_TABLE QueryTable
,
10764 _In_opt_ PVOID Context
,
10765 _In_opt_ PVOID Environment
);
10767 #define SHORT_SIZE (sizeof(USHORT))
10768 #define SHORT_MASK (SHORT_SIZE - 1)
10769 #define LONG_SIZE (sizeof(LONG))
10770 #define LONGLONG_SIZE (sizeof(LONGLONG))
10771 #define LONG_MASK (LONG_SIZE - 1)
10772 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
10773 #define LOWBYTE_MASK 0x00FF
10775 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
10776 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
10777 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
10778 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
10784 _In_ PRTL_BITMAP BitMapHeader
);
10790 _In_ PRTL_BITMAP BitMapHeader
,
10791 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToSet
) ULONG StartingIndex
,
10792 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToSet
);
10794 _IRQL_requires_max_(APC_LEVEL
)
10798 RtlSetDaclSecurityDescriptor(
10799 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
10800 _In_ BOOLEAN DaclPresent
,
10801 _In_opt_ PACL Dacl
,
10802 _In_opt_ BOOLEAN DaclDefaulted
);
10804 #if defined(_AMD64_)
10808 * IN PULONG Address,
10811 #define RtlStoreUlong(Address,Value) \
10812 *(ULONG UNALIGNED *)(Address) = (Value)
10815 * RtlStoreUlonglong(
10816 * IN OUT PULONGLONG Address,
10817 * ULONGLONG Value);
10819 #define RtlStoreUlonglong(Address,Value) \
10820 *(ULONGLONG UNALIGNED *)(Address) = (Value)
10824 * IN PUSHORT Address,
10825 * IN USHORT Value);
10827 #define RtlStoreUshort(Address,Value) \
10828 *(USHORT UNALIGNED *)(Address) = (Value)
10831 * RtlRetrieveUshort(
10832 * PUSHORT DestinationAddress,
10833 * PUSHORT SourceAddress);
10835 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
10836 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
10839 * RtlRetrieveUlong(
10840 * PULONG DestinationAddress,
10841 * PULONG SourceAddress);
10843 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
10844 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
10848 #define RtlStoreUlong(Address,Value) \
10849 if ((ULONG_PTR)(Address) & LONG_MASK) { \
10850 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
10851 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
10852 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
10853 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
10856 *((PULONG)(Address)) = (ULONG) (Value); \
10859 #define RtlStoreUlonglong(Address,Value) \
10860 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
10861 RtlStoreUlong((ULONG_PTR)(Address), \
10862 (ULONGLONG)(Value) & 0xFFFFFFFF); \
10863 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
10864 (ULONGLONG)(Value) >> 32); \
10866 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
10869 #define RtlStoreUshort(Address,Value) \
10870 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
10871 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
10872 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
10875 *((PUSHORT) (Address)) = (USHORT)Value; \
10878 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
10879 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
10881 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
10882 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
10886 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
10889 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
10890 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
10892 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
10893 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
10894 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
10895 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
10899 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
10902 #endif /* defined(_AMD64_) */
10906 * RtlStoreUlongPtr(
10907 * IN OUT PULONG_PTR Address,
10908 * IN ULONG_PTR Value);
10910 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
10912 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
10913 #endif /* _WIN64 */
10915 _Success_(return!=FALSE
)
10916 _Must_inspect_result_
10920 RtlTimeFieldsToTime(
10921 _In_ PTIME_FIELDS TimeFields
,
10922 _Out_ PLARGE_INTEGER Time
);
10927 RtlTimeToTimeFields(
10928 _In_ PLARGE_INTEGER Time
,
10929 _Out_ PTIME_FIELDS TimeFields
);
10935 _In_ ULONG Source
);
10940 RtlUlonglongByteSwap(
10941 _In_ ULONGLONG Source
);
10943 _When_(AllocateDestinationString
,
10944 _At_(DestinationString
->MaximumLength
,
10945 _Out_range_(<=, (SourceString
->MaximumLength
/ sizeof(WCHAR
)))))
10946 _When_(!AllocateDestinationString
,
10947 _At_(DestinationString
->Buffer
, _Const_
)
10948 _At_(DestinationString
->MaximumLength
, _Const_
))
10949 _IRQL_requires_max_(PASSIVE_LEVEL
)
10950 _When_(AllocateDestinationString
, _Must_inspect_result_
)
10954 RtlUnicodeStringToAnsiString(
10955 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
10956 _When_(!AllocateDestinationString
, _Inout_
)
10957 PANSI_STRING DestinationString
,
10958 _In_ PCUNICODE_STRING SourceString
,
10959 _In_ BOOLEAN AllocateDestinationString
);
10961 _IRQL_requires_max_(PASSIVE_LEVEL
)
10965 RtlxUnicodeStringToAnsiSize(
10966 _In_ PCUNICODE_STRING UnicodeString
);
10968 #define RtlUnicodeStringToAnsiSize(String) ( \
10969 NLS_MB_CODE_PAGE_TAG ? \
10970 RtlxUnicodeStringToAnsiSize(String) : \
10971 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
10974 _IRQL_requires_max_(PASSIVE_LEVEL
)
10978 RtlUnicodeStringToInteger(
10979 _In_ PCUNICODE_STRING String
,
10980 _In_opt_ ULONG Base
,
10981 _Out_ PULONG Value
);
10983 _IRQL_requires_max_(PASSIVE_LEVEL
)
10987 RtlUpcaseUnicodeChar(
10988 _In_ WCHAR SourceCharacter
);
10994 _In_ USHORT Source
);
10996 _IRQL_requires_max_(APC_LEVEL
)
10997 _Must_inspect_result_
11001 RtlValidRelativeSecurityDescriptor(
11002 _In_reads_bytes_(SecurityDescriptorLength
) PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
11003 _In_ ULONG SecurityDescriptorLength
,
11004 _In_ SECURITY_INFORMATION RequiredInformation
);
11006 _IRQL_requires_max_(APC_LEVEL
)
11007 _Must_inspect_result_
11011 RtlValidSecurityDescriptor(
11012 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
11014 _IRQL_requires_max_(PASSIVE_LEVEL
)
11020 _At_(lpVersionInformation
->dwOSVersionInfoSize
, _Pre_ _Valid_
)
11021 _When_(lpVersionInformation
->dwOSVersionInfoSize
== sizeof(RTL_OSVERSIONINFOEXW
),
11022 _At_((PRTL_OSVERSIONINFOEXW
)lpVersionInformation
, _Out_
))
11023 PRTL_OSVERSIONINFOW lpVersionInformation
);
11025 _IRQL_requires_max_(PASSIVE_LEVEL
)
11026 _Must_inspect_result_
11030 RtlVerifyVersionInfo(
11031 _In_ PRTL_OSVERSIONINFOEXW VersionInfo
,
11032 _In_ ULONG TypeMask
,
11033 _In_ ULONGLONG ConditionMask
);
11035 _IRQL_requires_max_(PASSIVE_LEVEL
)
11039 RtlWriteRegistryValue(
11040 _In_ ULONG RelativeTo
,
11042 _In_z_ PCWSTR ValueName
,
11043 _In_ ULONG ValueType
,
11044 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
11045 _In_ ULONG ValueLength
);
11048 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11051 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
11055 RtlPrefetchMemoryNonTemporal(
11057 _In_ SIZE_T Length
);
11061 #if (NTDDI_VERSION >= NTDDI_WINXP)
11068 _In_ PRTL_BITMAP BitMapHeader
,
11069 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11071 _IRQL_requires_max_(PASSIVE_LEVEL
)
11075 RtlDowncaseUnicodeChar(
11076 _In_ WCHAR SourceCharacter
);
11082 _In_ PRTL_BITMAP BitMapHeader
,
11083 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11085 _Must_inspect_result_
11090 _In_ PRTL_BITMAP BitMapHeader
,
11091 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11093 _IRQL_requires_max_(PASSIVE_LEVEL
)
11097 RtlHashUnicodeString(
11098 _In_ CONST UNICODE_STRING
*String
,
11099 _In_ BOOLEAN CaseInSensitive
,
11100 _In_ ULONG HashAlgorithm
,
11101 _Out_ PULONG HashValue
);
11105 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
11108 #if (NTDDI_VERSION >= NTDDI_VISTA)
11113 RtlNumberOfSetBitsUlongPtr(
11114 _In_ ULONG_PTR Target
);
11119 RtlIoDecodeMemIoResource(
11120 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
11121 _Out_opt_ PULONGLONG Alignment
,
11122 _Out_opt_ PULONGLONG MinimumAddress
,
11123 _Out_opt_ PULONGLONG MaximumAddress
);
11128 RtlIoEncodeMemIoResource(
11129 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
11131 _In_ ULONGLONG Length
,
11132 _In_ ULONGLONG Alignment
,
11133 _In_ ULONGLONG MinimumAddress
,
11134 _In_ ULONGLONG MaximumAddress
);
11139 RtlCmDecodeMemIoResource(
11140 _In_
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
11141 _Out_opt_ PULONGLONG Start
);
11146 RtlFindClosestEncodableLength(
11147 _In_ ULONGLONG SourceLength
,
11148 _Out_ PULONGLONG TargetLength
);
11153 RtlCmEncodeMemIoResource(
11154 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
11156 _In_ ULONGLONG Length
,
11157 _In_ ULONGLONG Start
);
11160 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11162 #if (NTDDI_VERSION >= NTDDI_WIN7)
11164 _IRQL_requires_max_(PASSIVE_LEVEL
)
11165 _Must_inspect_result_
11170 _Out_writes_bytes_to_(UTF8StringMaxByteCount
, *UTF8StringActualByteCount
)
11171 PCHAR UTF8StringDestination
,
11172 _In_ ULONG UTF8StringMaxByteCount
,
11173 _Out_ PULONG UTF8StringActualByteCount
,
11174 _In_reads_bytes_(UnicodeStringByteCount
) PCWCH UnicodeStringSource
,
11175 _In_ ULONG UnicodeStringByteCount
);
11177 _IRQL_requires_max_(PASSIVE_LEVEL
)
11178 _Must_inspect_result_
11183 _Out_writes_bytes_to_(UnicodeStringMaxByteCount
, *UnicodeStringActualByteCount
)
11184 PWSTR UnicodeStringDestination
,
11185 _In_ ULONG UnicodeStringMaxByteCount
,
11186 _Out_ PULONG UnicodeStringActualByteCount
,
11187 _In_reads_bytes_(UTF8StringByteCount
) PCCH UTF8StringSource
,
11188 _In_ ULONG UTF8StringByteCount
);
11193 RtlGetEnabledExtendedFeatures(
11194 IN ULONG64 FeatureMask
);
11197 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
11200 #if !defined(MIDL_PASS)
11201 /* inline funftions */
11202 //DECLSPEC_DEPRECATED_DDK_WINXP
11206 RtlConvertLongToLargeInteger(
11207 _In_ LONG SignedInteger
)
11210 ret
.QuadPart
= SignedInteger
;
11214 //DECLSPEC_DEPRECATED_DDK_WINXP
11218 RtlConvertUlongToLargeInteger(
11219 _In_ ULONG UnsignedInteger
)
11222 ret
.QuadPart
= UnsignedInteger
;
11226 //DECLSPEC_DEPRECATED_DDK_WINXP
11230 RtlLargeIntegerShiftLeft(
11231 _In_ LARGE_INTEGER LargeInteger
,
11232 _In_ CCHAR ShiftCount
)
11234 LARGE_INTEGER Result
;
11236 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
11240 //DECLSPEC_DEPRECATED_DDK_WINXP
11244 RtlLargeIntegerShiftRight(
11245 _In_ LARGE_INTEGER LargeInteger
,
11246 _In_ CCHAR ShiftCount
)
11248 LARGE_INTEGER Result
;
11250 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
11254 //DECLSPEC_DEPRECATED_DDK
11258 RtlEnlargedUnsignedDivide(
11259 _In_ ULARGE_INTEGER Dividend
,
11260 _In_ ULONG Divisor
,
11261 _Out_opt_ PULONG Remainder
)
11264 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
11265 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
11268 //DECLSPEC_DEPRECATED_DDK
11272 RtlLargeIntegerNegate(
11273 _In_ LARGE_INTEGER Subtrahend
)
11275 LARGE_INTEGER Difference
;
11277 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
11281 //DECLSPEC_DEPRECATED_DDK
11285 RtlLargeIntegerSubtract(
11286 _In_ LARGE_INTEGER Minuend
,
11287 _In_ LARGE_INTEGER Subtrahend
)
11289 LARGE_INTEGER Difference
;
11291 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
11295 //DECLSPEC_DEPRECATED_DDK
11299 RtlEnlargedUnsignedMultiply(
11300 _In_ ULONG Multiplicand
,
11301 _In_ ULONG Multiplier
)
11304 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
11308 //DECLSPEC_DEPRECATED_DDK
11312 RtlEnlargedIntegerMultiply(
11313 _In_ LONG Multiplicand
,
11314 _In_ LONG Multiplier
)
11317 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
11321 _At_(AnsiString
->Buffer
, _Post_equal_to_(Buffer
))
11322 _At_(AnsiString
->Length
, _Post_equal_to_(0))
11323 _At_(AnsiString
->MaximumLength
, _Post_equal_to_(BufferSize
))
11326 RtlInitEmptyAnsiString(
11327 _Out_ PANSI_STRING AnsiString
,
11328 _Pre_maybenull_
_Pre_readable_size_(BufferSize
) __drv_aliasesMem PCHAR Buffer
,
11329 _In_ USHORT BufferSize
)
11331 AnsiString
->Length
= 0;
11332 AnsiString
->MaximumLength
= BufferSize
;
11333 AnsiString
->Buffer
= Buffer
;
11336 _At_(UnicodeString
->Buffer
, _Post_equal_to_(Buffer
))
11337 _At_(UnicodeString
->Length
, _Post_equal_to_(0))
11338 _At_(UnicodeString
->MaximumLength
, _Post_equal_to_(BufferSize
))
11341 RtlInitEmptyUnicodeString(
11342 _Out_ PUNICODE_STRING UnicodeString
,
11343 _Writable_bytes_(BufferSize
)
11344 _When_(BufferSize
!= 0, _Notnull_
)
11345 __drv_aliasesMem PWSTR Buffer
,
11346 _In_ USHORT BufferSize
)
11348 UnicodeString
->Length
= 0;
11349 UnicodeString
->MaximumLength
= BufferSize
;
11350 UnicodeString
->Buffer
= Buffer
;
11353 #if defined(_AMD64_) || defined(_IA64_)
11359 RtlExtendedIntegerMultiply(
11360 _In_ LARGE_INTEGER Multiplicand
,
11361 _In_ LONG Multiplier
)
11364 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
11371 RtlExtendedLargeIntegerDivide(
11372 _In_ LARGE_INTEGER Dividend
,
11373 _In_ ULONG Divisor
,
11374 _Out_opt_ PULONG Remainder
)
11377 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
11379 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
11385 #endif /* defined(_AMD64_) || defined(_IA64_) */
11388 #if defined(_AMD64_)
11390 #define MultiplyHigh __mulh
11391 #define UnsignedMultiplyHigh __umulh
11393 //DECLSPEC_DEPRECATED_DDK
11397 RtlExtendedMagicDivide(
11398 _In_ LARGE_INTEGER Dividend
,
11399 _In_ LARGE_INTEGER MagicDivisor
,
11400 _In_ CCHAR ShiftCount
)
11405 Pos
= (Dividend
.QuadPart
>= 0);
11406 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
11407 MagicDivisor
.QuadPart
);
11408 ret64
>>= ShiftCount
;
11409 ret
.QuadPart
= Pos
? ret64
: -(LONG64
)ret64
;
11414 //DECLSPEC_DEPRECATED_DDK
11418 RtlLargeIntegerAdd(
11419 _In_ LARGE_INTEGER Addend1
,
11420 _In_ LARGE_INTEGER Addend2
)
11423 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
11428 * RtlLargeIntegerAnd(
11429 * IN OUT LARGE_INTEGER Result,
11430 * IN LARGE_INTEGER Source,
11431 * IN LARGE_INTEGER Mask);
11433 #define RtlLargeIntegerAnd(Result, Source, Mask) \
11434 Result.QuadPart = Source.QuadPart & Mask.QuadPart
11436 //DECLSPEC_DEPRECATED_DDK
11440 RtlLargeIntegerArithmeticShift(
11441 _In_ LARGE_INTEGER LargeInteger
,
11442 _In_ CCHAR ShiftCount
)
11445 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
11450 * RtlLargeIntegerEqualTo(
11451 * IN LARGE_INTEGER Operand1,
11452 * IN LARGE_INTEGER Operand2);
11454 #define RtlLargeIntegerEqualTo(X,Y) \
11455 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
11459 RtlSecureZeroMemory(
11460 _Out_writes_bytes_all_(Size
) PVOID Pointer
,
11463 volatile char* vptr
= (volatile char*)Pointer
;
11464 #if defined(_M_AMD64)
11465 __stosb((PUCHAR
)vptr
, 0, Size
);
11467 char * endptr
= (char *)vptr
+ Size
;
11468 while (vptr
< endptr
) {
11475 #if defined(_M_AMD64)
11476 _Must_inspect_result_
11480 _In_ PRTL_BITMAP BitMapHeader
,
11481 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitPosition
)
11483 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
11486 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
11487 #endif /* defined(_M_AMD64) */
11489 #define RtlLargeIntegerGreaterThan(X,Y) ( \
11490 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
11491 ((X).HighPart > (Y).HighPart) \
11494 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
11495 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
11496 ((X).HighPart > (Y).HighPart) \
11499 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
11500 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
11503 #define RtlLargeIntegerLessThan(X,Y) ( \
11504 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
11505 ((X).HighPart < (Y).HighPart) \
11508 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
11509 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
11510 ((X).HighPart < (Y).HighPart) \
11513 #define RtlLargeIntegerGreaterThanZero(X) ( \
11514 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
11515 ((X).HighPart > 0 ) \
11518 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
11520 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
11522 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
11524 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
11526 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
11528 #endif /* !defined(MIDL_PASS) */
11530 /* Byte Swap Functions */
11531 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
11532 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
11533 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
11537 #define RTL_VERIFY(exp) \
11539 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
11541 #define RTL_VERIFYMSG(msg, exp) \
11543 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
11545 #define RTL_SOFT_VERIFY(exp) \
11547 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
11549 #define RTL_SOFT_VERIFYMSG(msg, exp) \
11551 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
11553 /* The ASSERTs must be cast to void to avoid warnings about unused results.
11554 * We also cannot invoke the VERIFY versions because the indirection messes
11555 * with stringify. */
11556 #define ASSERT(exp) \
11557 ((VOID)((!(exp)) ? \
11558 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE))
11560 #define ASSERTMSG(msg, exp) \
11561 ((VOID)((!(exp)) ? \
11562 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE))
11564 #define RTL_SOFT_ASSERT(exp) \
11565 ((VOID)((!(exp)) ? \
11566 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE))
11568 #define RTL_SOFT_ASSERTMSG(msg, exp) \
11569 ((VOID)((!(exp)) ? \
11570 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE))
11572 #if defined(_MSC_VER)
11573 # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
11574 # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
11576 # define __assert_annotationA(msg) \
11577 DbgPrint("Assertion failed at %s(%d): %s\n", __FILE__, __LINE__, msg)
11578 # define __assert_annotationW(msg) \
11579 DbgPrint("Assertion failed at %s(%d): %S\n", __FILE__, __LINE__, msg)
11583 #define __analysis_unreachable() __assume(0)
11585 #define __analysis_unreachable() ((void)0)
11588 #define NT_VERIFY(exp) \
11590 (__assert_annotationA(#exp), \
11591 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11593 #define NT_VERIFYMSG(msg, exp) \
11595 (__assert_annotationA(msg), \
11596 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11598 #define NT_VERIFYMSGW(msg, exp) \
11600 (__assert_annotationW(msg), \
11601 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11603 /* Can't reuse verify, see above */
11604 #define NT_ASSERT(exp) \
11605 ((VOID)((!(exp)) ? \
11606 (__assert_annotationA(#exp), \
11607 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11609 #define NT_ASSERTMSG(msg, exp) \
11610 ((VOID)((!(exp)) ? \
11611 (__assert_annotationA(msg), \
11612 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11614 #define NT_ASSERTMSGW(msg, exp) \
11615 ((VOID)((!(exp)) ? \
11616 (__assert_annotationW(msg), \
11617 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11621 #define ASSERT(exp) ((VOID) 0)
11622 #define ASSERTMSG(msg, exp) ((VOID) 0)
11624 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
11625 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
11627 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
11628 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11630 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
11631 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11633 #define NT_ASSERT(exp) ((VOID)0)
11634 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
11635 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
11637 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
11638 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
11639 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
11643 #define InitializeListHead32(ListHead) (\
11644 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
11646 #if !defined(_WINBASE_)
11648 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
11652 InitializeSListHead(
11653 _Out_ PSLIST_HEADER SListHead
);
11659 InitializeSListHead(
11660 _Out_ PSLIST_HEADER SListHead
)
11662 #if defined(_IA64_)
11663 ULONG64 FeatureBits
;
11666 #if defined(_WIN64)
11667 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
11668 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
11671 RtlZeroMemory(SListHead
, sizeof(SLIST_HEADER
));
11672 #if defined(_IA64_)
11673 FeatureBits
= __getReg(CV_IA64_CPUID4
);
11674 if ((FeatureBits
& KF_16BYTE_INSTR
) != 0) {
11675 SListHead
->Header16
.HeaderType
= 1;
11676 SListHead
->Header16
.Init
= 1;
11683 #if defined(_WIN64)
11685 #define InterlockedPopEntrySList(Head) \
11686 ExpInterlockedPopEntrySList(Head)
11688 #define InterlockedPushEntrySList(Head, Entry) \
11689 ExpInterlockedPushEntrySList(Head, Entry)
11691 #define InterlockedFlushSList(Head) \
11692 ExpInterlockedFlushSList(Head)
11694 #define QueryDepthSList(Head) \
11695 ExQueryDepthSList(Head)
11697 #else /* !defined(_WIN64) */
11702 InterlockedPopEntrySList(
11703 _Inout_ PSLIST_HEADER ListHead
);
11708 InterlockedPushEntrySList(
11709 _Inout_ PSLIST_HEADER ListHead
,
11710 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
11712 #define InterlockedFlushSList(ListHead) \
11713 ExInterlockedFlushSList(ListHead)
11715 #define QueryDepthSList(Head) \
11716 ExQueryDepthSList(Head)
11718 #endif /* !defined(_WIN64) */
11720 #endif /* !defined(_WINBASE_) */
11722 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
11723 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
11724 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
11725 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
11726 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
11727 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
11728 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
11729 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
11730 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
11731 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
11732 (PCONTEXT_EX)(Context + 1), \
11736 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
11737 _In_ ULONG Version
);
11740 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
11741 _In_ ULONG Version
);
11743 #ifndef RtlIsNtDdiVersionAvailable
11744 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
11747 #ifndef RtlIsServicePackVersionInstalled
11748 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
11751 #define RtlInterlockedSetBits(Flags, Flag) \
11752 InterlockedOr((PLONG)(Flags), Flag)
11754 #define RtlInterlockedAndBits(Flags, Flag) \
11755 InterlockedAnd((PLONG)(Flags), Flag)
11757 #define RtlInterlockedClearBits(Flags, Flag) \
11758 RtlInterlockedAndBits(Flags, ~(Flag))
11760 #define RtlInterlockedXorBits(Flags, Flag) \
11761 InterlockedXor(Flags, Flag)
11763 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
11764 (VOID) RtlInterlockedSetBits(Flags, Flag)
11766 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
11767 (VOID) RtlInterlockedAndBits(Flags, Flag)
11769 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
11770 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
11773 /******************************************************************************
11774 * Memory manager Functions *
11775 ******************************************************************************/
11776 /* Alignment Macros */
11777 #define ALIGN_DOWN_BY(size, align) \
11778 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
11780 #define ALIGN_UP_BY(size, align) \
11781 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
11783 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
11784 ((PVOID)ALIGN_DOWN_BY(ptr, align))
11786 #define ALIGN_UP_POINTER_BY(ptr, align) \
11787 ((PVOID)ALIGN_UP_BY(ptr, align))
11789 #define ALIGN_DOWN(size, type) \
11790 ALIGN_DOWN_BY(size, sizeof(type))
11792 #define ALIGN_UP(size, type) \
11793 ALIGN_UP_BY(size, sizeof(type))
11795 #define ALIGN_DOWN_POINTER(ptr, type) \
11796 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
11798 #define ALIGN_UP_POINTER(ptr, type) \
11799 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
11801 #ifndef FIELD_OFFSET
11802 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
11806 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
11809 #define POOL_TAGGING 1
11812 #define IF_DEBUG if (TRUE)
11814 #define IF_DEBUG if (FALSE)
11821 #define BYTE_OFFSET(Va) \
11822 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
11828 * Note: This needs to be like this to avoid overflows!
11830 #define BYTES_TO_PAGES(Size) \
11831 (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
11837 #define PAGE_ALIGN(Va) \
11838 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
11842 * _In_ ULONG_PTR Size)
11844 #define ROUND_TO_PAGES(Size) \
11845 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
11848 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
11852 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
11853 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
11854 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
11856 #define COMPUTE_PAGES_SPANNED(Va, Size) \
11857 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
11861 * MmGetMdlByteCount(
11864 #define MmGetMdlByteCount(_Mdl) \
11865 ((_Mdl)->ByteCount)
11869 * MmGetMdlByteOffset(
11872 #define MmGetMdlByteOffset(_Mdl) \
11873 ((_Mdl)->ByteOffset)
11875 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
11879 * MmGetMdlPfnArray(
11882 #define MmGetMdlPfnArray(_Mdl) \
11883 ((PPFN_NUMBER) ((_Mdl) + 1))
11887 * MmGetMdlVirtualAddress(
11890 #define MmGetMdlVirtualAddress(_Mdl) \
11891 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
11893 #define MmGetProcedureAddress(Address) (Address)
11894 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
11896 /* PVOID MmGetSystemAddressForMdl(
11899 #define MmGetSystemAddressForMdl(Mdl) \
11900 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
11901 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11902 ((Mdl)->MappedSystemVa) : \
11903 (MmMapLockedPages((Mdl), KernelMode)))
11906 * MmGetSystemAddressForMdlSafe(
11908 * _In_ MM_PAGE_PRIORITY Priority)
11910 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
11911 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
11912 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
11913 (_Mdl)->MappedSystemVa : \
11914 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
11915 KernelMode, MmCached, NULL, FALSE, (_Priority)))
11920 * _In_ PMDL MemoryDescriptorList,
11921 * _In_ PVOID BaseVa,
11922 * _In_ SIZE_T Length)
11924 #define MmInitializeMdl(_MemoryDescriptorList, \
11928 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
11929 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
11930 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
11931 (_MemoryDescriptorList)->MdlFlags = 0; \
11932 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
11933 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
11934 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
11939 * MmPrepareMdlForReuse(
11942 #define MmPrepareMdlForReuse(_Mdl) \
11944 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
11945 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
11946 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
11947 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
11948 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
11952 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11953 _Must_inspect_result_
11954 _IRQL_requires_max_(DISPATCH_LEVEL
)
11955 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11959 MmAllocateContiguousMemory(
11960 _In_ SIZE_T NumberOfBytes
,
11961 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
);
11963 _Must_inspect_result_
11964 _IRQL_requires_max_(DISPATCH_LEVEL
)
11965 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
11969 MmAllocateContiguousMemorySpecifyCache(
11970 _In_ SIZE_T NumberOfBytes
,
11971 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
11972 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
11973 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
11974 _In_ MEMORY_CACHING_TYPE CacheType
);
11976 _Must_inspect_result_
11977 _IRQL_requires_max_(DISPATCH_LEVEL
)
11981 MmAllocatePagesForMdl(
11982 _In_ PHYSICAL_ADDRESS LowAddress
,
11983 _In_ PHYSICAL_ADDRESS HighAddress
,
11984 _In_ PHYSICAL_ADDRESS SkipBytes
,
11985 _In_ SIZE_T TotalBytes
);
11987 _IRQL_requires_max_(DISPATCH_LEVEL
)
11991 MmBuildMdlForNonPagedPool(
11992 _Inout_ PMDL MemoryDescriptorList
);
11994 //DECLSPEC_DEPRECATED_DDK
11999 _Out_writes_bytes_opt_ (sizeof (MDL
) + (sizeof (PFN_NUMBER
) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base
, Length
)))
12000 PMDL MemoryDescriptorList
,
12001 _In_reads_bytes_opt_ (Length
) PVOID Base
,
12002 _In_ SIZE_T Length
);
12004 _IRQL_requires_max_(DISPATCH_LEVEL
)
12008 MmFreeContiguousMemory(
12009 _In_ PVOID BaseAddress
);
12011 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12015 MmFreeContiguousMemorySpecifyCache(
12016 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
12017 _In_ SIZE_T NumberOfBytes
,
12018 _In_ MEMORY_CACHING_TYPE CacheType
);
12020 _IRQL_requires_max_(DISPATCH_LEVEL
)
12024 MmFreePagesFromMdl(
12025 _Inout_ PMDL MemoryDescriptorList
);
12027 _IRQL_requires_max_(PASSIVE_LEVEL
)
12031 MmGetSystemRoutineAddress(
12032 _In_ PUNICODE_STRING SystemRoutineName
);
12037 MmIsDriverVerifying(
12038 _In_
struct _DRIVER_OBJECT
*DriverObject
);
12040 _Must_inspect_result_
12041 _IRQL_requires_max_(APC_LEVEL
)
12045 MmLockPagableDataSection(
12046 _In_ PVOID AddressWithinSection
);
12048 _Must_inspect_result_
12049 _IRQL_requires_max_(DISPATCH_LEVEL
)
12050 _Out_writes_bytes_opt_ (NumberOfBytes
)
12055 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
12056 _In_ SIZE_T NumberOfBytes
,
12057 _In_ MEMORY_CACHING_TYPE CacheType
);
12059 _Must_inspect_result_
12060 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
12061 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
))
12066 _Inout_ PMDL MemoryDescriptorList
,
12067 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
12068 KPROCESSOR_MODE AccessMode
);
12070 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
12071 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
12072 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
) _Post_notnull_
)
12073 _At_(MemoryDescriptorList
->MappedSystemVa
, _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
12074 _Must_inspect_result_
12075 _Success_(return != NULL
)
12079 MmMapLockedPagesSpecifyCache(
12080 _Inout_ PMDL MemoryDescriptorList
,
12081 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
12082 KPROCESSOR_MODE AccessMode
,
12083 _In_
__drv_strictTypeMatch(__drv_typeCond
) MEMORY_CACHING_TYPE CacheType
,
12084 _In_opt_ PVOID BaseAddress
,
12085 _In_ ULONG BugCheckOnFailure
,
12086 _In_ MM_PAGE_PRIORITY Priority
);
12088 _IRQL_requires_max_(APC_LEVEL
)
12092 MmPageEntireDriver(
12093 _In_ PVOID AddressWithinSection
);
12095 _IRQL_requires_max_(DISPATCH_LEVEL
)
12096 _At_(MemoryDescriptorList
->StartVa
+ MemoryDescriptorList
->ByteOffset
,
12097 _Field_size_bytes_opt_(MemoryDescriptorList
->ByteCount
))
12101 MmProbeAndLockPages(
12102 _Inout_ PMDL MemoryDescriptorList
,
12103 _In_ KPROCESSOR_MODE AccessMode
,
12104 _In_ LOCK_OPERATION Operation
);
12109 MmQuerySystemSize(VOID
);
12111 _IRQL_requires_max_(APC_LEVEL
)
12115 MmResetDriverPaging(
12116 _In_ PVOID AddressWithinSection
);
12122 _In_reads_bytes_opt_ (Length
) PVOID Base
,
12123 _In_ SIZE_T Length
);
12125 _IRQL_requires_max_(DISPATCH_LEVEL
)
12129 MmUnlockPagableImageSection(
12130 _In_ PVOID ImageSectionHandle
);
12132 _IRQL_requires_max_(DISPATCH_LEVEL
)
12137 _Inout_ PMDL MemoryDescriptorList
);
12139 _IRQL_requires_max_(DISPATCH_LEVEL
)
12144 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
12145 _In_ SIZE_T NumberOfBytes
);
12147 _IRQL_requires_max_ (APC_LEVEL
)
12151 MmProbeAndLockProcessPages(
12152 _Inout_ PMDL MemoryDescriptorList
,
12153 _In_ PEPROCESS Process
,
12154 _In_ KPROCESSOR_MODE AccessMode
,
12155 _In_ LOCK_OPERATION Operation
);
12157 _IRQL_requires_max_(DISPATCH_LEVEL
)
12161 MmUnmapLockedPages(
12162 _In_ PVOID BaseAddress
,
12163 _Inout_ PMDL MemoryDescriptorList
);
12165 _Must_inspect_result_
12166 _IRQL_requires_max_(DISPATCH_LEVEL
)
12167 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
12171 MmAllocateContiguousMemorySpecifyCacheNode(
12172 _In_ SIZE_T NumberOfBytes
,
12173 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
12174 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
12175 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
12176 _In_ MEMORY_CACHING_TYPE CacheType
,
12177 _In_ NODE_REQUIREMENT PreferredNode
);
12179 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12181 #if (NTDDI_VERSION >= NTDDI_WINXP)
12183 _IRQL_requires_max_(DISPATCH_LEVEL
)
12189 _In_ ULONG NumberOfBytes
);
12191 _Must_inspect_result_
12192 _IRQL_requires_max_(APC_LEVEL
)
12193 _When_ (return != NULL
, _Out_writes_bytes_opt_ (NumberOfBytes
))
12197 MmAllocateMappingAddress(
12198 _In_ SIZE_T NumberOfBytes
,
12199 _In_ ULONG PoolTag
);
12201 _IRQL_requires_max_(APC_LEVEL
)
12205 MmFreeMappingAddress(
12206 _In_ PVOID BaseAddress
,
12207 _In_ ULONG PoolTag
);
12209 _IRQL_requires_max_ (APC_LEVEL
)
12213 MmIsVerifierEnabled(
12214 _Out_ PULONG VerifierFlags
);
12216 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
12217 _IRQL_requires_max_(DISPATCH_LEVEL
)
12218 _At_(MemoryDescriptorList
->MappedSystemVa
+ MemoryDescriptorList
->ByteOffset
,
12219 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
12220 _Must_inspect_result_
12221 _Success_(return != NULL
)
12225 MmMapLockedPagesWithReservedMapping(
12226 _In_ PVOID MappingAddress
,
12227 _In_ ULONG PoolTag
,
12228 _Inout_ PMDL MemoryDescriptorList
,
12229 _In_
__drv_strictTypeMatch(__drv_typeCond
)
12230 MEMORY_CACHING_TYPE CacheType
);
12232 _Must_inspect_result_
12233 _IRQL_requires_max_(DISPATCH_LEVEL
)
12237 MmProtectMdlSystemAddress(
12238 _In_ PMDL MemoryDescriptorList
,
12239 _In_ ULONG NewProtect
);
12241 _IRQL_requires_max_(DISPATCH_LEVEL
)
12245 MmUnmapReservedMapping(
12246 _In_ PVOID BaseAddress
,
12247 _In_ ULONG PoolTag
,
12248 _Inout_ PMDL MemoryDescriptorList
);
12250 _IRQL_requires_max_ (APC_LEVEL
)
12254 MmAddVerifierThunks(
12255 _In_reads_bytes_ (ThunkBufferSize
) PVOID ThunkBuffer
,
12256 _In_ ULONG ThunkBufferSize
);
12258 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
12259 #if (NTDDI_VERSION >= NTDDI_WS03)
12260 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12265 _In_ PHYSICAL_ADDRESS StartAddress
,
12266 _In_ SIZE_T NumberOfBytes
);
12268 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
12269 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
12270 _Must_inspect_result_
12271 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12275 MmAllocatePagesForMdlEx(
12276 _In_ PHYSICAL_ADDRESS LowAddress
,
12277 _In_ PHYSICAL_ADDRESS HighAddress
,
12278 _In_ PHYSICAL_ADDRESS SkipBytes
,
12279 _In_ SIZE_T TotalBytes
,
12280 _In_ MEMORY_CACHING_TYPE CacheType
,
12284 #if (NTDDI_VERSION >= NTDDI_VISTA)
12285 _IRQL_requires_max_ (APC_LEVEL
)
12289 MmIsDriverVerifyingByAddress(
12290 _In_ PVOID AddressWithinSection
);
12291 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12293 /******************************************************************************
12294 * Security Manager Functions *
12295 ******************************************************************************/
12297 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12298 _IRQL_requires_max_(PASSIVE_LEVEL
)
12303 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12304 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
12305 _In_ BOOLEAN SubjectContextLocked
,
12306 _In_ ACCESS_MASK DesiredAccess
,
12307 _In_ ACCESS_MASK PreviouslyGrantedAccess
,
12308 _Outptr_opt_ PPRIVILEGE_SET
*Privileges
,
12309 _In_ PGENERIC_MAPPING GenericMapping
,
12310 _In_ KPROCESSOR_MODE AccessMode
,
12311 _Out_ PACCESS_MASK GrantedAccess
,
12312 _Out_ PNTSTATUS AccessStatus
);
12314 _IRQL_requires_max_(PASSIVE_LEVEL
)
12319 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
12320 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
12321 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
12322 _In_ BOOLEAN IsDirectoryObject
,
12323 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
12324 _In_ PGENERIC_MAPPING GenericMapping
,
12325 _In_ POOL_TYPE PoolType
);
12330 SeAssignSecurityEx(
12331 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
12332 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
12333 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
12334 _In_opt_ GUID
*ObjectType
,
12335 _In_ BOOLEAN IsDirectoryObject
,
12336 _In_ ULONG AutoInheritFlags
,
12337 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
12338 _In_ PGENERIC_MAPPING GenericMapping
,
12339 _In_ POOL_TYPE PoolType
);
12341 _IRQL_requires_max_(PASSIVE_LEVEL
)
12345 SeDeassignSecurity(
12346 _Inout_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
12348 _IRQL_requires_max_(PASSIVE_LEVEL
)
12352 SeValidSecurityDescriptor(
12354 _In_reads_bytes_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
);
12359 SeObjectCreateSaclAccessBits(
12360 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
12365 SeReleaseSubjectContext(
12366 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12371 SeUnlockSubjectContext(
12372 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12377 SeCaptureSubjectContext(
12378 _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12383 SeLockSubjectContext(
12384 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12387 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12389 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
12391 _At_(AuditParameters
->ParameterCount
, _Const_
)
12394 SeSetAuditParameter(
12395 _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters
,
12396 _In_ SE_ADT_PARAMETER_TYPE Type
,
12397 _In_range_(<,SE_MAX_AUDIT_PARAMETERS
) ULONG Index
,
12398 _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE"))
12403 SeReportSecurityEvent(
12405 _In_ PUNICODE_STRING SourceName
,
12406 _In_opt_ PSID UserSid
,
12407 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters
);
12409 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
12411 #if (NTDDI_VERSION >= NTDDI_VISTA)
12415 SeComputeAutoInheritByObjectType(
12416 _In_ PVOID ObjectType
,
12417 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12418 _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor
);
12420 #ifdef SE_NTFS_WORLD_CACHE
12424 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12425 _In_ PGENERIC_MAPPING GenericMapping
,
12426 _Out_ PACCESS_MASK GrantedAccess
);
12427 #endif /* SE_NTFS_WORLD_CACHE */
12428 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12429 /******************************************************************************
12430 * Configuration Manager Functions *
12431 ******************************************************************************/
12433 #if (NTDDI_VERSION >= NTDDI_WINXP)
12434 _IRQL_requires_max_(APC_LEVEL
)
12438 CmRegisterCallback(
12439 _In_ PEX_CALLBACK_FUNCTION Function
,
12440 _In_opt_ PVOID Context
,
12441 _Out_ PLARGE_INTEGER Cookie
);
12443 _IRQL_requires_max_(APC_LEVEL
)
12447 CmUnRegisterCallback(
12448 _In_ LARGE_INTEGER Cookie
);
12451 #if (NTDDI_VERSION >= NTDDI_VISTA)
12453 _IRQL_requires_max_(APC_LEVEL
)
12457 CmRegisterCallbackEx(
12458 _In_ PEX_CALLBACK_FUNCTION Function
,
12459 _In_ PCUNICODE_STRING Altitude
,
12461 _In_opt_ PVOID Context
,
12462 _Out_ PLARGE_INTEGER Cookie
,
12463 _Reserved_ PVOID Reserved
);
12465 _IRQL_requires_max_(APC_LEVEL
)
12469 CmGetCallbackVersion(
12470 _Out_opt_ PULONG Major
,
12471 _Out_opt_ PULONG Minor
);
12473 _IRQL_requires_max_(APC_LEVEL
)
12477 CmSetCallbackObjectContext(
12478 _Inout_ PVOID Object
,
12479 _In_ PLARGE_INTEGER Cookie
,
12480 _In_ PVOID NewContext
,
12481 _Out_opt_ PVOID
*OldContext
);
12483 _IRQL_requires_max_(APC_LEVEL
)
12487 CmCallbackGetKeyObjectID(
12488 _In_ PLARGE_INTEGER Cookie
,
12490 _Out_opt_ PULONG_PTR ObjectID
,
12491 _Outptr_opt_ PCUNICODE_STRING
*ObjectName
);
12493 _IRQL_requires_max_(APC_LEVEL
)
12497 CmGetBoundTransaction(
12498 _In_ PLARGE_INTEGER Cookie
,
12499 _In_ PVOID Object
);
12501 #endif // NTDDI_VERSION >= NTDDI_VISTA
12504 /******************************************************************************
12505 * I/O Manager Functions *
12506 ******************************************************************************/
12510 * IoAcquireRemoveLock(
12511 * IN PIO_REMOVE_LOCK RemoveLock,
12512 * IN OPTIONAL PVOID Tag)
12515 #define IoAcquireRemoveLock(RemoveLock, Tag) \
12516 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
12518 #define IoAcquireRemoveLock(RemoveLock, Tag) \
12519 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
12524 * IoAdjustPagingPathCount(
12526 * IN BOOLEAN Increment)
12528 #define IoAdjustPagingPathCount(_Count, \
12533 InterlockedIncrement(_Count); \
12537 InterlockedDecrement(_Count); \
12541 #if !defined(_M_AMD64)
12545 READ_PORT_BUFFER_UCHAR(
12553 READ_PORT_BUFFER_ULONG(
12561 READ_PORT_BUFFER_USHORT(
12587 READ_REGISTER_BUFFER_UCHAR(
12588 IN PUCHAR Register
,
12595 READ_REGISTER_BUFFER_ULONG(
12596 IN PULONG Register
,
12603 READ_REGISTER_BUFFER_USHORT(
12604 IN PUSHORT Register
,
12611 READ_REGISTER_UCHAR(
12612 IN PUCHAR Register
);
12617 READ_REGISTER_ULONG(
12618 IN PULONG Register
);
12623 READ_REGISTER_USHORT(
12624 IN PUSHORT Register
);
12629 WRITE_PORT_BUFFER_UCHAR(
12637 WRITE_PORT_BUFFER_ULONG(
12645 WRITE_PORT_BUFFER_USHORT(
12674 WRITE_REGISTER_BUFFER_UCHAR(
12675 IN PUCHAR Register
,
12682 WRITE_REGISTER_BUFFER_ULONG(
12683 IN PULONG Register
,
12690 WRITE_REGISTER_BUFFER_USHORT(
12691 IN PUSHORT Register
,
12698 WRITE_REGISTER_UCHAR(
12699 IN PUCHAR Register
,
12705 WRITE_REGISTER_ULONG(
12706 IN PULONG Register
,
12712 WRITE_REGISTER_USHORT(
12713 IN PUSHORT Register
,
12720 READ_PORT_BUFFER_UCHAR(
12725 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12730 READ_PORT_BUFFER_ULONG(
12735 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12740 READ_PORT_BUFFER_USHORT(
12745 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12753 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
12761 return __indword((USHORT
)(ULONG_PTR
)Port
);
12769 return __inword((USHORT
)(ULONG_PTR
)Port
);
12774 READ_REGISTER_BUFFER_UCHAR(
12775 IN PUCHAR Register
,
12779 __movsb(Register
, Buffer
, Count
);
12784 READ_REGISTER_BUFFER_ULONG(
12785 IN PULONG Register
,
12789 __movsd(Register
, Buffer
, Count
);
12794 READ_REGISTER_BUFFER_USHORT(
12795 IN PUSHORT Register
,
12799 __movsw(Register
, Buffer
, Count
);
12804 READ_REGISTER_UCHAR(
12805 IN
volatile UCHAR
*Register
)
12812 READ_REGISTER_ULONG(
12813 IN
volatile ULONG
*Register
)
12820 READ_REGISTER_USHORT(
12821 IN
volatile USHORT
*Register
)
12828 WRITE_PORT_BUFFER_UCHAR(
12833 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12838 WRITE_PORT_BUFFER_ULONG(
12843 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12848 WRITE_PORT_BUFFER_USHORT(
12853 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12862 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
12871 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
12880 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
12885 WRITE_REGISTER_BUFFER_UCHAR(
12886 IN PUCHAR Register
,
12891 __movsb(Register
, Buffer
, Count
);
12892 InterlockedOr(&Synch
, 1);
12897 WRITE_REGISTER_BUFFER_ULONG(
12898 IN PULONG Register
,
12903 __movsd(Register
, Buffer
, Count
);
12904 InterlockedOr(&Synch
, 1);
12909 WRITE_REGISTER_BUFFER_USHORT(
12910 IN PUSHORT Register
,
12915 __movsw(Register
, Buffer
, Count
);
12916 InterlockedOr(&Synch
, 1);
12921 WRITE_REGISTER_UCHAR(
12922 IN
volatile UCHAR
*Register
,
12927 InterlockedOr(&Synch
, 1);
12932 WRITE_REGISTER_ULONG(
12933 IN
volatile ULONG
*Register
,
12938 InterlockedOr(&Synch
, 1);
12943 WRITE_REGISTER_USHORT(
12944 IN
volatile USHORT
*Register
,
12949 InterlockedOr(&Sync
, 1);
12953 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
12954 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
12956 #define DMA_MACROS_DEFINED
12958 _IRQL_requires_max_(DISPATCH_LEVEL
)
12959 _IRQL_requires_min_(DISPATCH_LEVEL
)
12962 IoAllocateAdapterChannel(
12963 _In_ PDMA_ADAPTER DmaAdapter
,
12964 _In_ PDEVICE_OBJECT DeviceObject
,
12965 _In_ ULONG NumberOfMapRegisters
,
12966 _In_ PDRIVER_CONTROL ExecutionRoutine
,
12967 _In_ PVOID Context
)
12969 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
12970 AllocateAdapterChannel
=
12971 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
12972 ASSERT(AllocateAdapterChannel
);
12973 return AllocateAdapterChannel(DmaAdapter
,
12975 NumberOfMapRegisters
,
12983 IoFlushAdapterBuffers(
12984 _In_ PDMA_ADAPTER DmaAdapter
,
12986 _In_ PVOID MapRegisterBase
,
12987 _In_ PVOID CurrentVa
,
12989 _In_ BOOLEAN WriteToDevice
)
12991 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
12992 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
12993 ASSERT(FlushAdapterBuffers
);
12994 return FlushAdapterBuffers(DmaAdapter
,
13005 IoFreeAdapterChannel(
13006 _In_ PDMA_ADAPTER DmaAdapter
)
13008 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
13009 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
13010 ASSERT(FreeAdapterChannel
);
13011 FreeAdapterChannel(DmaAdapter
);
13017 IoFreeMapRegisters(
13018 _In_ PDMA_ADAPTER DmaAdapter
,
13019 _In_ PVOID MapRegisterBase
,
13020 _In_ ULONG NumberOfMapRegisters
)
13022 PFREE_MAP_REGISTERS FreeMapRegisters
;
13023 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
13024 ASSERT(FreeMapRegisters
);
13025 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
13032 _In_ PDMA_ADAPTER DmaAdapter
,
13034 _In_ PVOID MapRegisterBase
,
13035 _In_ PVOID CurrentVa
,
13036 _Inout_ PULONG Length
,
13037 _In_ BOOLEAN WriteToDevice
)
13039 PMAP_TRANSFER MapTransfer
;
13041 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
13042 ASSERT(MapTransfer
);
13043 return MapTransfer(DmaAdapter
,
13052 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13054 _Acquires_lock_(_Global_cancel_spin_lock_
)
13055 _Requires_lock_not_held_(_Global_cancel_spin_lock_
)
13056 _IRQL_requires_max_(DISPATCH_LEVEL
)
13057 _IRQL_raises_(DISPATCH_LEVEL
)
13061 IoAcquireCancelSpinLock(
13062 _Out_
_At_(*Irql
, _IRQL_saves_
) PKIRQL Irql
);
13064 _IRQL_requires_max_(DISPATCH_LEVEL
)
13068 IoAcquireRemoveLockEx(
13069 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13070 _In_opt_ PVOID Tag
,
13073 _In_ ULONG RemlockSize
);
13075 _IRQL_requires_max_(DISPATCH_LEVEL
)
13080 IoAllocateDriverObjectExtension(
13081 _In_ PDRIVER_OBJECT DriverObject
,
13082 _In_ PVOID ClientIdentificationAddress
,
13083 _In_ ULONG DriverObjectExtensionSize
,
13084 _Post_
_At_(*DriverObjectExtension
, _When_(return==0,
13085 __drv_aliasesMem
__drv_allocatesMem(Mem
) _Post_notnull_
))
13086 _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize
))
13087 PVOID
*DriverObjectExtension
);
13089 _IRQL_requires_max_(DISPATCH_LEVEL
)
13093 IoAllocateErrorLogEntry(
13094 _In_ PVOID IoObject
,
13095 _In_ UCHAR EntrySize
);
13097 _Must_inspect_result_
13098 _IRQL_requires_max_(DISPATCH_LEVEL
)
13103 _In_ CCHAR StackSize
,
13104 _In_ BOOLEAN ChargeQuota
);
13106 _IRQL_requires_max_(DISPATCH_LEVEL
)
13111 _In_opt_ __drv_aliasesMem PVOID VirtualAddress
,
13113 _In_ BOOLEAN SecondaryBuffer
,
13114 _In_ BOOLEAN ChargeQuota
,
13115 _Inout_opt_ PIRP Irp
);
13117 __drv_allocatesMem(Mem
)
13118 _IRQL_requires_max_(DISPATCH_LEVEL
)
13122 IoAllocateWorkItem(
13123 _In_ PDEVICE_OBJECT DeviceObject
);
13125 _IRQL_requires_max_(APC_LEVEL
)
13131 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return==0, __drv_aliasesMem
)
13132 PDEVICE_OBJECT SourceDevice
,
13133 _In_ PUNICODE_STRING TargetDevice
,
13134 _Out_ PDEVICE_OBJECT
*AttachedDevice
);
13136 _Must_inspect_result_
13137 _IRQL_requires_max_(DISPATCH_LEVEL
)
13141 IoAttachDeviceToDeviceStack(
13142 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return!=0, __drv_aliasesMem
)
13143 PDEVICE_OBJECT SourceDevice
,
13144 _In_ PDEVICE_OBJECT TargetDevice
);
13146 _Must_inspect_result_
13148 _IRQL_requires_max_(DISPATCH_LEVEL
)
13152 IoBuildAsynchronousFsdRequest(
13153 _In_ ULONG MajorFunction
,
13154 _In_ PDEVICE_OBJECT DeviceObject
,
13155 _Inout_opt_ PVOID Buffer
,
13156 _In_opt_ ULONG Length
,
13157 _In_opt_ PLARGE_INTEGER StartingOffset
,
13158 _In_opt_ PIO_STATUS_BLOCK IoStatusBlock
);
13160 _Must_inspect_result_
13162 _IRQL_requires_max_(PASSIVE_LEVEL
)
13166 IoBuildDeviceIoControlRequest(
13167 _In_ ULONG IoControlCode
,
13168 _In_ PDEVICE_OBJECT DeviceObject
,
13169 _In_opt_ PVOID InputBuffer
,
13170 _In_ ULONG InputBufferLength
,
13171 _Out_opt_ PVOID OutputBuffer
,
13172 _In_ ULONG OutputBufferLength
,
13173 _In_ BOOLEAN InternalDeviceIoControl
,
13174 _In_opt_ PKEVENT Event
,
13175 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
13177 _IRQL_requires_max_(DISPATCH_LEVEL
)
13182 _In_ PMDL SourceMdl
,
13183 _Inout_ PMDL TargetMdl
,
13184 _In_ PVOID VirtualAddress
,
13185 _In_ ULONG Length
);
13187 _Must_inspect_result_
13189 _IRQL_requires_max_(PASSIVE_LEVEL
)
13193 IoBuildSynchronousFsdRequest(
13194 _In_ ULONG MajorFunction
,
13195 _In_ PDEVICE_OBJECT DeviceObject
,
13196 _Inout_opt_ PVOID Buffer
,
13197 _In_opt_ ULONG Length
,
13198 _In_opt_ PLARGE_INTEGER StartingOffset
,
13199 _In_ PKEVENT Event
,
13200 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
13202 _IRQL_requires_max_(DISPATCH_LEVEL
)
13208 _In_ PDEVICE_OBJECT DeviceObject
,
13209 _Inout_ __drv_aliasesMem PIRP Irp
);
13210 #define IoCallDriver IofCallDriver
13212 _IRQL_requires_max_(DISPATCH_LEVEL
)
13216 IofCompleteRequest(
13218 _In_ CCHAR PriorityBoost
);
13219 #define IoCompleteRequest IofCompleteRequest
13221 _IRQL_requires_max_(DISPATCH_LEVEL
)
13228 _IRQL_requires_max_(PASSIVE_LEVEL
)
13232 IoCheckShareAccess(
13233 _In_ ACCESS_MASK DesiredAccess
,
13234 _In_ ULONG DesiredShareAccess
,
13235 _Inout_ PFILE_OBJECT FileObject
,
13236 _Inout_ PSHARE_ACCESS ShareAccess
,
13237 _In_ BOOLEAN Update
);
13239 _IRQL_requires_max_(DISPATCH_LEVEL
)
13243 IofCompleteRequest(
13245 _In_ CCHAR PriorityBoost
);
13247 _IRQL_requires_max_(PASSIVE_LEVEL
)
13251 IoConnectInterrupt(
13252 _Out_ PKINTERRUPT
*InterruptObject
,
13253 _In_ PKSERVICE_ROUTINE ServiceRoutine
,
13254 _In_opt_ PVOID ServiceContext
,
13255 _In_opt_ PKSPIN_LOCK SpinLock
,
13258 _In_ KIRQL SynchronizeIrql
,
13259 _In_ KINTERRUPT_MODE InterruptMode
,
13260 _In_ BOOLEAN ShareVector
,
13261 _In_ KAFFINITY ProcessorEnableMask
,
13262 _In_ BOOLEAN FloatingSave
);
13264 _IRQL_requires_max_(APC_LEVEL
)
13270 _In_ PDRIVER_OBJECT DriverObject
,
13271 _In_ ULONG DeviceExtensionSize
,
13272 _In_opt_ PUNICODE_STRING DeviceName
,
13273 _In_ DEVICE_TYPE DeviceType
,
13274 _In_ ULONG DeviceCharacteristics
,
13275 _In_ BOOLEAN Exclusive
,
13276 _Outptr_result_nullonfailure_
13277 _At_(*DeviceObject
,
13278 __drv_allocatesMem(Mem
)
13279 _When_(((_In_function_class_(DRIVER_INITIALIZE
))
13280 ||(_In_function_class_(DRIVER_DISPATCH
))),
13282 PDEVICE_OBJECT
*DeviceObject
);
13284 _IRQL_requires_max_(PASSIVE_LEVEL
)
13289 _Out_ PHANDLE FileHandle
,
13290 _In_ ACCESS_MASK DesiredAccess
,
13291 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
13292 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
13293 _In_opt_ PLARGE_INTEGER AllocationSize
,
13294 _In_ ULONG FileAttributes
,
13295 _In_ ULONG ShareAccess
,
13296 _In_ ULONG Disposition
,
13297 _In_ ULONG CreateOptions
,
13298 _In_opt_ PVOID EaBuffer
,
13299 _In_ ULONG EaLength
,
13300 _In_ CREATE_FILE_TYPE CreateFileType
,
13301 _In_opt_ PVOID InternalParameters
,
13302 _In_ ULONG Options
);
13304 _IRQL_requires_max_(PASSIVE_LEVEL
)
13308 IoCreateNotificationEvent(
13309 _In_ PUNICODE_STRING EventName
,
13310 _Out_ PHANDLE EventHandle
);
13312 _IRQL_requires_max_(PASSIVE_LEVEL
)
13316 IoCreateSymbolicLink(
13317 _In_ PUNICODE_STRING SymbolicLinkName
,
13318 _In_ PUNICODE_STRING DeviceName
);
13320 _IRQL_requires_max_(PASSIVE_LEVEL
)
13324 IoCreateSynchronizationEvent(
13325 _In_ PUNICODE_STRING EventName
,
13326 _Out_ PHANDLE EventHandle
);
13328 _IRQL_requires_max_(PASSIVE_LEVEL
)
13332 IoCreateUnprotectedSymbolicLink(
13333 _In_ PUNICODE_STRING SymbolicLinkName
,
13334 _In_ PUNICODE_STRING DeviceName
);
13336 _IRQL_requires_max_(APC_LEVEL
)
13337 _Kernel_clear_do_init_(__yes
)
13342 _In_
_Kernel_requires_resource_held_(Memory
) __drv_freesMem(Mem
)
13343 PDEVICE_OBJECT DeviceObject
);
13345 _IRQL_requires_max_(PASSIVE_LEVEL
)
13349 IoDeleteSymbolicLink(
13350 _In_ PUNICODE_STRING SymbolicLinkName
);
13352 _IRQL_requires_max_(PASSIVE_LEVEL
)
13357 _Inout_ PDEVICE_OBJECT TargetDevice
);
13359 _IRQL_requires_max_(PASSIVE_LEVEL
)
13363 IoDisconnectInterrupt(
13364 _In_ PKINTERRUPT InterruptObject
);
13366 __drv_freesMem(Mem
)
13367 _IRQL_requires_max_(DISPATCH_LEVEL
)
13374 _IRQL_requires_max_(DISPATCH_LEVEL
)
13381 _IRQL_requires_max_(DISPATCH_LEVEL
)
13386 _In_
__drv_freesMem(Mem
) PIO_WORKITEM IoWorkItem
);
13391 IoGetAttachedDevice(
13392 IN PDEVICE_OBJECT DeviceObject
);
13394 _IRQL_requires_max_(DISPATCH_LEVEL
)
13398 IoGetAttachedDeviceReference(
13399 _In_ PDEVICE_OBJECT DeviceObject
);
13404 IoGetBootDiskInformation(
13405 _Inout_ PBOOTDISK_INFORMATION BootDiskInformation
,
13408 _IRQL_requires_max_(PASSIVE_LEVEL
)
13409 _Must_inspect_result_
13413 IoGetDeviceInterfaceAlias(
13414 _In_ PUNICODE_STRING SymbolicLinkName
,
13415 _In_ CONST GUID
*AliasInterfaceClassGuid
,
13417 _When_(return==0, _At_(AliasSymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13418 PUNICODE_STRING AliasSymbolicLinkName
);
13423 IoGetCurrentProcess(VOID
);
13425 _IRQL_requires_max_(PASSIVE_LEVEL
)
13426 _Must_inspect_result_
13430 IoGetDeviceInterfaces(
13431 _In_ CONST GUID
*InterfaceClassGuid
,
13432 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13434 _Outptr_result_nullonfailure_
13435 _At_(*SymbolicLinkList
, _When_(return==0, __drv_allocatesMem(Mem
)))
13436 PZZWSTR
*SymbolicLinkList
);
13438 _IRQL_requires_max_(PASSIVE_LEVEL
)
13442 IoGetDeviceObjectPointer(
13443 _In_ PUNICODE_STRING ObjectName
,
13444 _In_ ACCESS_MASK DesiredAccess
,
13445 _Out_ PFILE_OBJECT
*FileObject
,
13446 _Out_ PDEVICE_OBJECT
*DeviceObject
);
13448 _IRQL_requires_max_(PASSIVE_LEVEL
)
13449 _When_((DeviceProperty
& __string_type
),
13450 _At_(PropertyBuffer
, _Post_z_
))
13451 _When_((DeviceProperty
& __multiString_type
),
13452 _At_(PropertyBuffer
, _Post_ _NullNull_terminated_
))
13456 IoGetDeviceProperty(
13457 _In_ PDEVICE_OBJECT DeviceObject
,
13458 _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty
,
13459 _In_ ULONG BufferLength
,
13460 _Out_writes_bytes_opt_(BufferLength
) PVOID PropertyBuffer
,
13461 _Deref_out_range_(<=, BufferLength
) PULONG ResultLength
);
13463 _Must_inspect_result_
13464 _IRQL_requires_max_(PASSIVE_LEVEL
)
13469 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13470 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
13471 _Out_
_When_(return!=0, _Kernel_IoGetDmaAdapter_
_At_(*NumberOfMapRegisters
, _Must_inspect_result_
))
13472 PULONG NumberOfMapRegisters
);
13475 _IRQL_requires_max_(DISPATCH_LEVEL
)
13479 IoGetDriverObjectExtension(
13480 _In_ PDRIVER_OBJECT DriverObject
,
13481 _In_ PVOID ClientIdentificationAddress
);
13483 _IRQL_requires_max_(APC_LEVEL
)
13487 IoGetInitialStack(VOID
);
13492 IoGetRelatedDeviceObject(
13493 _In_ PFILE_OBJECT FileObject
);
13495 _IRQL_requires_max_(DISPATCH_LEVEL
)
13500 _Inout_ PIO_WORKITEM IoWorkItem
,
13501 _In_ PIO_WORKITEM_ROUTINE WorkerRoutine
,
13502 _In_ WORK_QUEUE_TYPE QueueType
,
13503 _In_opt_ __drv_aliasesMem PVOID Context
);
13505 _IRQL_requires_max_(DISPATCH_LEVEL
)
13511 _In_ USHORT PacketSize
,
13512 _In_ CCHAR StackSize
);
13514 _IRQL_requires_max_(PASSIVE_LEVEL
)
13518 IoInitializeRemoveLockEx(
13519 _Out_ PIO_REMOVE_LOCK Lock
,
13520 _In_ ULONG AllocateTag
,
13521 _In_ ULONG MaxLockedMinutes
,
13522 _In_ ULONG HighWatermark
,
13523 _In_ ULONG RemlockSize
);
13525 _IRQL_requires_max_(PASSIVE_LEVEL
)
13530 _In_ PDEVICE_OBJECT DeviceObject
,
13531 _In_ PIO_TIMER_ROUTINE TimerRoutine
,
13532 _In_opt_ __drv_aliasesMem PVOID Context
);
13534 _IRQL_requires_max_(DISPATCH_LEVEL
)
13538 IoInvalidateDeviceRelations(
13539 _In_ PDEVICE_OBJECT DeviceObject
,
13540 _In_ DEVICE_RELATION_TYPE Type
);
13542 _IRQL_requires_max_(DISPATCH_LEVEL
)
13546 IoInvalidateDeviceState(
13547 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13549 _IRQL_requires_max_(PASSIVE_LEVEL
)
13553 IoIsWdmVersionAvailable(
13554 _When_(MajorVersion
!=1&&MajorVersion
!=6, _In_
__drv_reportError("MajorVersion must be 1 or 6"))
13555 UCHAR MajorVersion
,
13556 _In_
_When_(MinorVersion
!=0 && MinorVersion
!=5 &&
13557 MinorVersion
!=16 && MinorVersion
!=32 &&
13558 MinorVersion
!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30"))
13559 UCHAR MinorVersion
);
13561 _IRQL_requires_max_(PASSIVE_LEVEL
)
13562 _Must_inspect_result_
13566 IoOpenDeviceInterfaceRegistryKey(
13567 _In_ PUNICODE_STRING SymbolicLinkName
,
13568 _In_ ACCESS_MASK DesiredAccess
,
13569 _Out_ PHANDLE DeviceInterfaceKey
);
13571 _IRQL_requires_max_(PASSIVE_LEVEL
)
13572 _Must_inspect_result_
13576 IoOpenDeviceRegistryKey(
13577 _In_ PDEVICE_OBJECT DeviceObject
,
13578 _In_ ULONG DevInstKeyType
,
13579 _In_ ACCESS_MASK DesiredAccess
,
13580 _Out_ PHANDLE DevInstRegKey
);
13582 _IRQL_requires_max_(PASSIVE_LEVEL
)
13583 _Must_inspect_result_
13587 IoRegisterDeviceInterface(
13588 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13589 _In_ CONST GUID
*InterfaceClassGuid
,
13590 _In_opt_ PUNICODE_STRING ReferenceString
,
13591 _Out_
_When_(return==0, _At_(SymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13592 PUNICODE_STRING SymbolicLinkName
);
13594 _IRQL_requires_max_(PASSIVE_LEVEL
)
13595 _Must_inspect_result_
13599 IoRegisterPlugPlayNotification(
13600 _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
13601 _In_ ULONG EventCategoryFlags
,
13602 _In_opt_ PVOID EventCategoryData
,
13603 _In_ PDRIVER_OBJECT DriverObject
,
13604 _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
13605 _Inout_opt_ __drv_aliasesMem PVOID Context
,
13606 _Outptr_result_nullonfailure_
13607 _At_(*NotificationEntry
, _When_(return==0, __drv_allocatesMem(Mem
)))
13608 PVOID
*NotificationEntry
);
13610 _IRQL_requires_max_(PASSIVE_LEVEL
)
13614 IoRegisterShutdownNotification(
13615 _In_ PDEVICE_OBJECT DeviceObject
);
13617 _Requires_lock_held_(_Global_cancel_spin_lock_
)
13618 _Releases_lock_(_Global_cancel_spin_lock_
)
13619 _IRQL_requires_max_(DISPATCH_LEVEL
)
13620 _IRQL_requires_min_(DISPATCH_LEVEL
)
13624 IoReleaseCancelSpinLock(
13625 _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql
);
13627 _IRQL_requires_max_(PASSIVE_LEVEL
)
13631 IoReleaseRemoveLockAndWaitEx(
13632 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13633 _In_opt_ PVOID Tag
,
13634 _In_ ULONG RemlockSize
);
13639 IoReleaseRemoveLockEx(
13640 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13641 _In_opt_ PVOID Tag
,
13642 _In_ ULONG RemlockSize
);
13644 _IRQL_requires_max_(PASSIVE_LEVEL
)
13648 IoRemoveShareAccess(
13649 _In_ PFILE_OBJECT FileObject
,
13650 _Inout_ PSHARE_ACCESS ShareAccess
);
13652 _IRQL_requires_max_(PASSIVE_LEVEL
)
13656 IoReportTargetDeviceChange(
13657 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13658 _In_ PVOID NotificationStructure
);
13660 _IRQL_requires_max_(DISPATCH_LEVEL
)
13664 IoReportTargetDeviceChangeAsynchronous(
13665 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13666 _In_ PVOID NotificationStructure
,
13667 _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback
,
13668 _In_opt_ PVOID Context
);
13670 _IRQL_requires_max_(DISPATCH_LEVEL
)
13674 IoRequestDeviceEject(
13675 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13677 _IRQL_requires_max_(DISPATCH_LEVEL
)
13683 _In_ NTSTATUS Status
);
13685 _IRQL_requires_max_(PASSIVE_LEVEL
)
13686 _Must_inspect_result_
13690 IoSetDeviceInterfaceState(
13691 _In_ PUNICODE_STRING SymbolicLinkName
,
13692 _In_ BOOLEAN Enable
);
13698 _In_ ACCESS_MASK DesiredAccess
,
13699 _In_ ULONG DesiredShareAccess
,
13700 _Inout_ PFILE_OBJECT FileObject
,
13701 _Out_ PSHARE_ACCESS ShareAccess
);
13703 _IRQL_requires_max_(DISPATCH_LEVEL
)
13704 _IRQL_requires_min_(DISPATCH_LEVEL
)
13709 _In_ PDEVICE_OBJECT DeviceObject
,
13710 _In_ BOOLEAN Cancelable
);
13712 _IRQL_requires_max_(DISPATCH_LEVEL
)
13716 IoStartNextPacketByKey(
13717 _In_ PDEVICE_OBJECT DeviceObject
,
13718 _In_ BOOLEAN Cancelable
,
13721 _IRQL_requires_max_(DISPATCH_LEVEL
)
13726 _In_ PDEVICE_OBJECT DeviceObject
,
13728 _In_opt_ PULONG Key
,
13729 _In_opt_ PDRIVER_CANCEL CancelFunction
);
13731 _IRQL_requires_max_(DISPATCH_LEVEL
)
13736 _In_ PDEVICE_OBJECT DeviceObject
);
13738 _IRQL_requires_max_(DISPATCH_LEVEL
)
13743 _In_ PDEVICE_OBJECT DeviceObject
);
13745 _IRQL_requires_max_(PASSIVE_LEVEL
)
13746 __drv_freesMem(Pool
)
13750 IoUnregisterPlugPlayNotification(
13751 _In_ PVOID NotificationEntry
);
13753 _IRQL_requires_max_(PASSIVE_LEVEL
)
13757 IoUnregisterShutdownNotification(
13758 _In_ PDEVICE_OBJECT DeviceObject
);
13760 _IRQL_requires_max_(PASSIVE_LEVEL
)
13764 IoUpdateShareAccess(
13765 _In_ PFILE_OBJECT FileObject
,
13766 _Inout_ PSHARE_ACCESS ShareAccess
);
13768 _IRQL_requires_max_(PASSIVE_LEVEL
)
13772 IoWMIAllocateInstanceIds(
13774 _In_ ULONG InstanceCount
,
13775 _Out_ ULONG
*FirstInstanceId
);
13780 IoWMIQuerySingleInstanceMultiple(
13781 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13782 _In_reads_(ObjectCount
) PUNICODE_STRING InstanceNames
,
13783 _In_ ULONG ObjectCount
,
13784 _Inout_ ULONG
*InOutBufferSize
,
13785 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13787 _IRQL_requires_max_(PASSIVE_LEVEL
)
13791 IoWMIRegistrationControl(
13792 _In_ PDEVICE_OBJECT DeviceObject
,
13793 _In_ ULONG Action
);
13798 IoWMISuggestInstanceName(
13799 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13800 _In_opt_ PUNICODE_STRING SymbolicLinkName
,
13801 _In_ BOOLEAN CombineNames
,
13802 _Out_ PUNICODE_STRING SuggestedInstanceName
);
13804 _Must_inspect_result_
13805 _IRQL_requires_max_(DISPATCH_LEVEL
)
13811 _Inout_
_When_(return==0, __drv_aliasesMem
) PVOID WnodeEventItem
);
13813 _IRQL_requires_max_(DISPATCH_LEVEL
)
13817 IoWriteErrorLogEntry(
13818 _In_ PVOID ElEntry
);
13823 IoGetTopLevelIrp(VOID
);
13825 _IRQL_requires_max_(PASSIVE_LEVEL
)
13829 IoRegisterLastChanceShutdownNotification(
13830 _In_ PDEVICE_OBJECT DeviceObject
);
13836 _In_opt_ PIRP Irp
);
13839 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13842 #if (NTDDI_VERSION >= NTDDI_WINXP)
13849 _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp
,
13850 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
13851 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
13852 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
13853 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
13854 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
13860 _Inout_ PIO_CSQ Csq
,
13862 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
);
13868 _Inout_ PIO_CSQ Csq
,
13869 _Inout_ PIO_CSQ_IRP_CONTEXT Context
);
13874 IoCsqRemoveNextIrp(
13875 _Inout_ PIO_CSQ Csq
,
13876 _In_opt_ PVOID PeekContext
);
13881 IoForwardIrpSynchronously(
13882 _In_ PDEVICE_OBJECT DeviceObject
,
13885 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
13890 IoFreeErrorLogEntry(
13891 _In_ PVOID ElEntry
);
13893 _IRQL_requires_max_(DISPATCH_LEVEL
)
13894 _Must_inspect_result_
13898 IoSetCompletionRoutineEx(
13899 _In_ PDEVICE_OBJECT DeviceObject
,
13901 _In_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
13902 _In_opt_ PVOID Context
,
13903 _In_ BOOLEAN InvokeOnSuccess
,
13904 _In_ BOOLEAN InvokeOnError
,
13905 _In_ BOOLEAN InvokeOnCancel
);
13909 IoSetStartIoAttributes(
13910 _In_ PDEVICE_OBJECT DeviceObject
,
13911 _In_ BOOLEAN DeferredStartIo
,
13912 _In_ BOOLEAN NonCancelable
);
13917 IoWMIDeviceObjectToInstanceName(
13918 _In_ PVOID DataBlockObject
,
13919 _In_ PDEVICE_OBJECT DeviceObject
,
13920 _Out_ PUNICODE_STRING InstanceName
);
13925 IoWMIExecuteMethod(
13926 _In_ PVOID DataBlockObject
,
13927 _In_ PUNICODE_STRING InstanceName
,
13928 _In_ ULONG MethodId
,
13929 _In_ ULONG InBufferSize
,
13930 _Inout_ PULONG OutBufferSize
,
13931 _Inout_updates_bytes_to_opt_(*OutBufferSize
, InBufferSize
) PUCHAR InOutBuffer
);
13936 IoWMIHandleToInstanceName(
13937 _In_ PVOID DataBlockObject
,
13938 _In_ HANDLE FileHandle
,
13939 _Out_ PUNICODE_STRING InstanceName
);
13945 _In_ LPCGUID DataBlockGuid
,
13946 _In_ ULONG DesiredAccess
,
13947 _Out_ PVOID
*DataBlockObject
);
13953 _In_ PVOID DataBlockObject
,
13954 _Inout_ ULONG
*InOutBufferSize
,
13955 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13960 IoWMIQueryAllDataMultiple(
13961 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
13962 _In_ ULONG ObjectCount
,
13963 _Inout_ ULONG
*InOutBufferSize
,
13964 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13969 IoWMIQuerySingleInstance(
13970 _In_ PVOID DataBlockObject
,
13971 _In_ PUNICODE_STRING InstanceName
,
13972 _Inout_ ULONG
*InOutBufferSize
,
13973 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
13978 IoWMISetNotificationCallback(
13979 _Inout_ PVOID Object
,
13980 _In_ WMI_NOTIFICATION_CALLBACK Callback
,
13981 _In_opt_ PVOID Context
);
13986 IoWMISetSingleInstance(
13987 _In_ PVOID DataBlockObject
,
13988 _In_ PUNICODE_STRING InstanceName
,
13989 _In_ ULONG Version
,
13990 _In_ ULONG ValueBufferSize
,
13991 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
13996 IoWMISetSingleItem(
13997 _In_ PVOID DataBlockObject
,
13998 _In_ PUNICODE_STRING InstanceName
,
13999 _In_ ULONG DataItemId
,
14000 _In_ ULONG Version
,
14001 _In_ ULONG ValueBufferSize
,
14002 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
14004 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14006 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
14010 IoValidateDeviceIoControlAccess(
14012 _In_ ULONG RequiredAccess
);
14015 #if (NTDDI_VERSION >= NTDDI_WS03)
14021 _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
14022 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
14023 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
14024 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
14025 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
14026 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
14032 _Inout_ PIO_CSQ Csq
,
14034 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
,
14035 _In_opt_ PVOID InsertContext
);
14036 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
14039 #if (NTDDI_VERSION >= NTDDI_VISTA)
14043 IoGetBootDiskInformationLite(
14044 _Outptr_ PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
14049 IoCheckShareAccessEx(
14050 _In_ ACCESS_MASK DesiredAccess
,
14051 _In_ ULONG DesiredShareAccess
,
14052 _Inout_ PFILE_OBJECT FileObject
,
14053 _Inout_ PSHARE_ACCESS ShareAccess
,
14054 _In_ BOOLEAN Update
,
14055 _In_ PBOOLEAN WritePermission
);
14060 IoConnectInterruptEx(
14061 _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
14066 IoDisconnectInterruptEx(
14067 _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
14071 IoWithinStackLimits(
14072 _In_ ULONG_PTR RegionStart
,
14073 _In_ SIZE_T RegionSize
);
14078 IoSetShareAccessEx(
14079 _In_ ACCESS_MASK DesiredAccess
,
14080 _In_ ULONG DesiredShareAccess
,
14081 _Inout_ PFILE_OBJECT FileObject
,
14082 _Out_ PSHARE_ACCESS ShareAccess
,
14083 _In_ PBOOLEAN WritePermission
);
14087 IoSizeofWorkItem(VOID
);
14091 IoInitializeWorkItem(
14092 _In_ PVOID IoObject
,
14093 _Out_ PIO_WORKITEM IoWorkItem
);
14097 IoUninitializeWorkItem(
14098 _Inout_ PIO_WORKITEM IoWorkItem
);
14100 _IRQL_requires_max_(DISPATCH_LEVEL
)
14104 _Inout_ PIO_WORKITEM IoWorkItem
,
14105 _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
14106 _In_ WORK_QUEUE_TYPE QueueType
,
14107 _In_opt_ __drv_aliasesMem PVOID Context
);
14111 IoGetIoPriorityHint(
14116 IoSetIoPriorityHint(
14118 _In_ IO_PRIORITY_HINT PriorityHint
);
14122 IoAllocateSfioStreamIdentifier(
14123 _In_ PFILE_OBJECT FileObject
,
14125 _In_ PVOID Signature
,
14126 _Out_ PVOID
*StreamIdentifier
);
14130 IoGetSfioStreamIdentifier(
14131 _In_ PFILE_OBJECT FileObject
,
14132 _In_ PVOID Signature
);
14136 IoFreeSfioStreamIdentifier(
14137 _In_ PFILE_OBJECT FileObject
,
14138 _In_ PVOID Signature
);
14140 _IRQL_requires_max_(DISPATCH_LEVEL
)
14141 _Must_inspect_result_
14145 IoRequestDeviceEjectEx(
14146 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
14147 _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback
,
14148 _In_opt_ PVOID Context
,
14149 _In_opt_ PDRIVER_OBJECT DriverObject
);
14151 _IRQL_requires_max_(PASSIVE_LEVEL
)
14152 _Must_inspect_result_
14156 IoSetDevicePropertyData(
14157 _In_ PDEVICE_OBJECT Pdo
,
14158 _In_ CONST DEVPROPKEY
*PropertyKey
,
14161 _In_ DEVPROPTYPE Type
,
14163 _In_opt_ PVOID Data
);
14165 _IRQL_requires_max_(PASSIVE_LEVEL
)
14166 _Must_inspect_result_
14170 IoGetDevicePropertyData(
14171 _In_ PDEVICE_OBJECT Pdo
,
14172 _In_ CONST DEVPROPKEY
*PropertyKey
,
14174 _Reserved_ ULONG Flags
,
14177 _Out_ PULONG RequiredSize
,
14178 _Out_ PDEVPROPTYPE Type
);
14180 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14182 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
14184 #if (NTDDI_VERSION >= NTDDI_WS08)
14185 _IRQL_requires_max_(PASSIVE_LEVEL
)
14186 _Must_inspect_result_
14190 IoReplacePartitionUnit(
14191 _In_ PDEVICE_OBJECT TargetPdo
,
14192 _In_ PDEVICE_OBJECT SparePdo
,
14196 #if (NTDDI_VERSION >= NTDDI_WIN7)
14201 IoGetAffinityInterrupt(
14202 _In_ PKINTERRUPT InterruptObject
,
14203 _Out_ PGROUP_AFFINITY GroupAffinity
);
14207 IoGetContainerInformation(
14208 _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass
,
14209 _In_opt_ PVOID ContainerObject
,
14210 _Inout_updates_bytes_opt_(BufferLength
) PVOID Buffer
,
14211 _In_ ULONG BufferLength
);
14215 IoRegisterContainerNotification(
14216 _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
14217 _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
14218 _In_reads_bytes_opt_(NotificationInformationLength
) PVOID NotificationInformation
,
14219 _In_ ULONG NotificationInformationLength
,
14220 _Out_ PVOID CallbackRegistration
);
14224 IoUnregisterContainerNotification(
14225 _In_ PVOID CallbackRegistration
);
14227 _IRQL_requires_max_(PASSIVE_LEVEL
)
14228 __drv_freesMem(Pool
)
14232 IoUnregisterPlugPlayNotificationEx(
14233 _In_ PVOID NotificationEntry
);
14235 _IRQL_requires_max_(PASSIVE_LEVEL
)
14236 _Must_inspect_result_
14240 IoGetDeviceNumaNode(
14241 _In_ PDEVICE_OBJECT Pdo
,
14242 _Out_ PUSHORT NodeNumber
);
14244 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14246 #if defined(_WIN64)
14250 IoWMIDeviceObjectToProviderId(
14251 _In_ PDEVICE_OBJECT DeviceObject
);
14253 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
14259 * IN CCHAR StackSize)
14261 #define IoSizeOfIrp(_StackSize) \
14262 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
14266 IoSkipCurrentIrpStackLocation(
14269 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
14270 Irp
->CurrentLocation
++;
14271 #ifdef NONAMELESSUNION
14272 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
++;
14274 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
14280 IoSetNextIrpStackLocation(
14283 ASSERT(Irp
->CurrentLocation
> 0);
14284 Irp
->CurrentLocation
--;
14285 #ifdef NONAMELESSUNION
14286 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
--;
14288 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
14295 IoGetNextIrpStackLocation(
14298 ASSERT(Irp
->CurrentLocation
> 0);
14299 #ifdef NONAMELESSUNION
14300 return ((Irp
)->Tail
.Overlay
.s
.u
.CurrentStackLocation
- 1 );
14302 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
14306 _IRQL_requires_max_(DISPATCH_LEVEL
)
14309 IoSetCompletionRoutine(
14311 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
14312 _In_opt_ __drv_aliasesMem PVOID Context
,
14313 _In_ BOOLEAN InvokeOnSuccess
,
14314 _In_ BOOLEAN InvokeOnError
,
14315 _In_ BOOLEAN InvokeOnCancel
)
14317 PIO_STACK_LOCATION irpSp
;
14318 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
14319 irpSp
= IoGetNextIrpStackLocation(Irp
);
14320 irpSp
->CompletionRoutine
= CompletionRoutine
;
14321 irpSp
->Context
= Context
;
14322 irpSp
->Control
= 0;
14324 if (InvokeOnSuccess
) {
14325 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
14328 if (InvokeOnError
) {
14329 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
14332 if (InvokeOnCancel
) {
14333 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
14337 _IRQL_requires_max_(DISPATCH_LEVEL
)
14341 IoSetCancelRoutine(
14343 _In_opt_ PDRIVER_CANCEL CancelRoutine
)
14345 return (PDRIVER_CANCEL
)(ULONG_PTR
) InterlockedExchangePointer((PVOID
*)&(Irp
)->CancelRoutine
, (PVOID
)(ULONG_PTR
)(CancelRoutine
));
14351 _Inout_ PDEVICE_OBJECT DeviceObject
,
14353 _In_opt_ __drv_aliasesMem PVOID Context
)
14355 KeInsertQueueDpc(&DeviceObject
->Dpc
, Irp
, Context
);
14360 * IoReleaseRemoveLock(
14361 * IN PIO_REMOVE_LOCK RemoveLock,
14364 #define IoReleaseRemoveLock(_RemoveLock, \
14366 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
14370 * IoReleaseRemoveLockAndWait(
14371 * IN PIO_REMOVE_LOCK RemoveLock,
14374 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
14376 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
14378 #if defined(_WIN64)
14379 _IRQL_requires_max_(DISPATCH_LEVEL
)
14383 _In_opt_ PIRP Irp
);
14386 #define PLUGPLAY_REGKEY_DEVICE 1
14387 #define PLUGPLAY_REGKEY_DRIVER 2
14388 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
14393 IoGetCurrentIrpStackLocation(
14396 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
14397 #ifdef NONAMELESSUNION
14398 return Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
;
14400 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
14409 IoGetCurrentIrpStackLocation((Irp
))->Control
|= SL_PENDING_RETURNED
;
14414 * IoIsErrorUserInduced(
14415 * IN NTSTATUS Status);
14417 #define IoIsErrorUserInduced(Status) \
14418 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
14419 ((Status) == STATUS_IO_TIMEOUT) || \
14420 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
14421 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
14422 ((Status) == STATUS_VERIFY_REQUIRED) || \
14423 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
14424 ((Status) == STATUS_WRONG_VOLUME)))
14427 * IoInitializeRemoveLock(
14428 * IN PIO_REMOVE_LOCK Lock,
14429 * IN ULONG AllocateTag,
14430 * IN ULONG MaxLockedMinutes,
14431 * IN ULONG HighWatermark)
14433 #define IoInitializeRemoveLock( \
14434 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
14435 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
14436 HighWatermark, sizeof(IO_REMOVE_LOCK))
14440 IoInitializeDpcRequest(
14441 _In_ PDEVICE_OBJECT DeviceObject
,
14442 _In_ PIO_DPC_ROUTINE DpcRoutine
)
14445 #pragma warning(push)
14446 #pragma warning(disable:28024)
14448 KeInitializeDpc(&DeviceObject
->Dpc
,
14449 (PKDEFERRED_ROUTINE
) DpcRoutine
,
14452 #pragma warning(pop)
14456 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
14460 * IoGetFunctionCodeFromCtlCode(
14461 * IN ULONG ControlCode)
14463 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
14464 (((_ControlCode) >> 2) & 0x00000FFF)
14468 IoCopyCurrentIrpStackLocationToNext(
14471 PIO_STACK_LOCATION irpSp
;
14472 PIO_STACK_LOCATION nextIrpSp
;
14473 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
14474 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
14475 RtlCopyMemory(nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
14476 nextIrpSp
->Control
= 0;
14479 _IRQL_requires_max_(APC_LEVEL
)
14484 _Out_ PULONG_PTR LowLimit
,
14485 _Out_ PULONG_PTR HighLimit
);
14487 _IRQL_requires_max_(APC_LEVEL
)
14490 IoGetRemainingStackSize(VOID
)
14492 ULONG_PTR End
, Begin
;
14495 IoGetStackLimits(&Begin
, &End
);
14496 Result
= (ULONG_PTR
)(&End
) - Begin
;
14500 #if (NTDDI_VERSION >= NTDDI_WS03)
14503 IoInitializeThreadedDpcRequest(
14504 _In_ PDEVICE_OBJECT DeviceObject
,
14505 _In_ PIO_DPC_ROUTINE DpcRoutine
)
14508 #pragma warning(push)
14509 #pragma warning(disable:28024)
14510 #pragma warning(disable:28128)
14512 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
14513 (PKDEFERRED_ROUTINE
) DpcRoutine
,
14516 #pragma warning(pop)
14521 /******************************************************************************
14522 * Power Management Support Functions *
14523 ******************************************************************************/
14525 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
14527 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14529 _IRQL_requires_max_(DISPATCH_LEVEL
)
14534 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14535 _Inout_ __drv_aliasesMem
struct _IRP
*Irp
);
14537 _IRQL_requires_max_(APC_LEVEL
)
14541 PoRegisterDeviceForIdleDetection(
14542 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14543 _In_ ULONG ConservationIdleTime
,
14544 _In_ ULONG PerformanceIdleTime
,
14545 _In_ DEVICE_POWER_STATE State
);
14547 _IRQL_requires_max_(APC_LEVEL
)
14551 PoRegisterSystemState(
14552 _Inout_opt_ PVOID StateHandle
,
14553 _In_ EXECUTION_STATE Flags
);
14555 _IRQL_requires_max_(DISPATCH_LEVEL
)
14560 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14561 _In_ UCHAR MinorFunction
,
14562 _In_ POWER_STATE PowerState
,
14563 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
,
14564 _In_opt_ __drv_aliasesMem PVOID Context
,
14565 _Outptr_opt_
struct _IRP
**Irp
);
14567 _IRQL_requires_max_(DISPATCH_LEVEL
)
14572 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14573 _In_ POWER_STATE_TYPE Type
,
14574 _In_ POWER_STATE State
);
14576 _IRQL_requires_max_(DISPATCH_LEVEL
)
14581 _In_ EXECUTION_STATE Flags
);
14583 _IRQL_requires_max_(DISPATCH_LEVEL
)
14587 PoStartNextPowerIrp(
14588 _Inout_
struct _IRP
*Irp
);
14590 _IRQL_requires_max_(APC_LEVEL
)
14594 PoUnregisterSystemState(
14595 _Inout_ PVOID StateHandle
);
14600 PoRequestShutdownEvent(
14603 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14605 #if (NTDDI_VERSION >= NTDDI_VISTA)
14607 _IRQL_requires_max_(DISPATCH_LEVEL
)
14612 _Inout_
struct _IRP
*Irp
);
14614 _IRQL_requires_max_(DISPATCH_LEVEL
)
14619 _In_
struct _IRP
*Irp
);
14621 _IRQL_requires_max_(APC_LEVEL
)
14625 PoRegisterPowerSettingCallback(
14626 _In_opt_ PDEVICE_OBJECT DeviceObject
,
14627 _In_ LPCGUID SettingGuid
,
14628 _In_ PPOWER_SETTING_CALLBACK Callback
,
14629 _In_opt_ PVOID Context
,
14630 _Outptr_opt_ PVOID
*Handle
);
14632 _IRQL_requires_max_(APC_LEVEL
)
14636 PoUnregisterPowerSettingCallback(
14637 _Inout_ PVOID Handle
);
14639 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14641 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14646 _Inout_ PULONG IdlePointer
);
14647 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14649 #if (NTDDI_VERSION >= NTDDI_WIN7)
14655 _Inout_ PULONG IdlePointer
);
14661 _Inout_ PULONG IdlePointer
);
14663 _IRQL_requires_max_(DISPATCH_LEVEL
)
14667 PoQueryWatchdogTime(
14668 _In_ PDEVICE_OBJECT Pdo
,
14669 _Out_ PULONG SecondsRemaining
);
14671 _IRQL_requires_max_(APC_LEVEL
)
14675 PoDeletePowerRequest(
14676 _Inout_ PVOID PowerRequest
);
14678 _IRQL_requires_max_(DISPATCH_LEVEL
)
14683 _Inout_ PVOID PowerRequest
,
14684 _In_ POWER_REQUEST_TYPE Type
);
14686 _IRQL_requires_max_(DISPATCH_LEVEL
)
14690 PoClearPowerRequest(
14691 _Inout_ PVOID PowerRequest
,
14692 _In_ POWER_REQUEST_TYPE Type
);
14694 _IRQL_requires_max_(APC_LEVEL
)
14698 PoCreatePowerRequest(
14699 _Outptr_ PVOID
*PowerRequest
,
14700 _In_ PDEVICE_OBJECT DeviceObject
,
14701 _In_opt_ PCOUNTED_REASON_CONTEXT Context
);
14703 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14705 /******************************************************************************
14706 * Executive Functions *
14707 ******************************************************************************/
14709 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
14710 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
14711 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
14713 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
14714 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
14715 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
14716 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
14718 #define ExInitializeSListHead InitializeSListHead
14720 #if defined(_NTHAL_) && defined(_X86_)
14725 ExiAcquireFastMutex(
14726 IN OUT PFAST_MUTEX FastMutex
);
14731 ExiReleaseFastMutex(
14732 IN OUT PFAST_MUTEX FastMutex
);
14737 ExiTryToAcquireFastMutex(
14738 IN OUT PFAST_MUTEX FastMutex
);
14740 #define ExAcquireFastMutex ExiAcquireFastMutex
14741 #define ExReleaseFastMutex ExiReleaseFastMutex
14742 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
14746 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14748 _IRQL_raises_(APC_LEVEL
)
14749 _IRQL_saves_global_(OldIrql
, FastMutex
)
14753 ExAcquireFastMutex(
14754 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14755 PFAST_MUTEX FastMutex
);
14757 _IRQL_requires_(APC_LEVEL
)
14758 _IRQL_restores_global_(OldIrql
, FastMutex
)
14762 ExReleaseFastMutex(
14763 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14764 PFAST_MUTEX FastMutex
);
14766 _Must_inspect_result_
14767 _Success_(return!=FALSE
)
14768 _IRQL_raises_(APC_LEVEL
)
14769 _IRQL_saves_global_(OldIrql
, FastMutex
)
14773 ExTryToAcquireFastMutex(
14774 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14775 PFAST_MUTEX FastMutex
);
14777 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14779 #endif /* defined(_NTHAL_) && defined(_X86_) */
14782 #define ExInterlockedAddUlong ExfInterlockedAddUlong
14783 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
14784 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
14785 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
14786 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
14787 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
14788 #endif /* defined(_X86_) */
14790 #if defined(_WIN64)
14792 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
14793 defined(_NTHAL_) || defined(_NTOSP_)
14796 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
);
14800 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead
)
14802 return (USHORT
)(ListHead
->Alignment
& 0xffff);
14808 ExpInterlockedFlushSList(
14809 PSLIST_HEADER ListHead
);
14813 ExpInterlockedPopEntrySList(
14814 _Inout_ PSLIST_HEADER ListHead
);
14818 ExpInterlockedPushEntrySList(
14819 _Inout_ PSLIST_HEADER ListHead
,
14820 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
14822 #define ExInterlockedFlushSList(Head) \
14823 ExpInterlockedFlushSList(Head)
14824 #define ExInterlockedPopEntrySList(Head, Lock) \
14825 ExpInterlockedPopEntrySList(Head)
14826 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
14827 ExpInterlockedPushEntrySList(Head, Entry)
14829 #else /* !defined(_WIN64) */
14831 #ifdef NONAMELESSUNION
14832 #define ExQueryDepthSList(listhead) (listhead)->s.Depth
14834 #define ExQueryDepthSList(listhead) (listhead)->Depth
14840 ExInterlockedFlushSList(
14841 _Inout_ PSLIST_HEADER ListHead
);
14843 #endif /* !defined(_WIN64) */
14845 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
14850 ExInterlockedPopEntrySList(
14851 _Inout_ PSLIST_HEADER ListHead
,
14852 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14857 ExInterlockedPushEntrySList(
14858 _Inout_ PSLIST_HEADER ListHead
,
14859 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
14860 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
14862 _IRQL_requires_max_(APC_LEVEL
)
14866 ExAllocateFromPagedLookasideList(
14867 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
14869 _IRQL_requires_max_(APC_LEVEL
)
14873 ExFreeToPagedLookasideList(
14874 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14877 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
14879 #if !defined(_WIN64)
14880 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
14881 InterlockedPopEntrySList(_ListHead)
14882 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
14883 InterlockedPushEntrySList(_ListHead, _ListEntry)
14886 _IRQL_requires_max_(APC_LEVEL
)
14889 ExAllocateFromPagedLookasideList(
14890 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
)
14894 Lookaside
->L
.TotalAllocates
++;
14895 #ifdef NONAMELESSUNION
14896 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
14897 if (Entry
== NULL
) {
14898 Lookaside
->L
.u2
.AllocateMisses
++;
14899 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
14903 #else /* NONAMELESSUNION */
14904 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
14905 if (Entry
== NULL
) {
14906 Lookaside
->L
.AllocateMisses
++;
14907 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
14911 #endif /* NONAMELESSUNION */
14915 _IRQL_requires_max_(APC_LEVEL
)
14918 ExFreeToPagedLookasideList(
14919 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
14922 Lookaside
->L
.TotalFrees
++;
14923 #ifdef NONAMELESSUNION
14924 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
14925 Lookaside
->L
.u3
.FreeMisses
++;
14926 (Lookaside
->L
.u5
.Free
)(Entry
);
14928 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
14930 #else /* NONAMELESSUNION */
14931 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
14932 Lookaside
->L
.FreeMisses
++;
14933 (Lookaside
->L
.Free
)(Entry
);
14935 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
14937 #endif /* NONAMELESSUNION */
14940 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
14943 /* ERESOURCE_THREAD
14944 * ExGetCurrentResourceThread(
14947 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
14949 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
14952 * ExInitializeWorkItem(
14953 * IN PWORK_QUEUE_ITEM Item,
14954 * IN PWORKER_THREAD_ROUTINE Routine,
14955 * IN PVOID Context)
14957 #define ExInitializeWorkItem(Item, Routine, Context) \
14959 (Item)->WorkerRoutine = Routine; \
14960 (Item)->Parameter = Context; \
14961 (Item)->List.Flink = NULL; \
14966 ExInitializeFastMutex(
14967 _Out_ PFAST_MUTEX FastMutex
)
14969 FastMutex
->Count
= FM_LOCK_BIT
;
14970 FastMutex
->Owner
= NULL
;
14971 FastMutex
->Contention
= 0;
14972 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
14977 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14978 _IRQL_requires_max_(APC_LEVEL
)
14979 _Requires_lock_held_(_Global_critical_region_
)
14983 ExAcquireFastMutexUnsafe(
14984 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14985 PFAST_MUTEX FastMutex
);
14987 _IRQL_requires_max_(APC_LEVEL
)
14988 _Requires_lock_held_(_Global_critical_region_
)
14992 ExReleaseFastMutexUnsafe(
14993 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
14994 PFAST_MUTEX FastMutex
);
14996 _Requires_lock_held_(_Global_critical_region_
)
14997 _Requires_lock_not_held_(*Resource
)
14998 _When_(Wait
!=0, _Acquires_exclusive_lock_(*Resource
))
14999 _IRQL_requires_max_(APC_LEVEL
)
15000 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15001 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15005 ExAcquireResourceExclusiveLite(
15006 _Inout_ PERESOURCE Resource
,
15007 _In_ _Literal_ BOOLEAN Wait
);
15009 _IRQL_requires_max_(APC_LEVEL
)
15010 _Requires_lock_held_(_Global_critical_region_
)
15011 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15012 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15016 ExAcquireResourceSharedLite(
15017 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15018 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
15019 PERESOURCE Resource
,
15020 _In_ BOOLEAN Wait
);
15022 _IRQL_requires_max_(APC_LEVEL
)
15023 _Requires_lock_held_(_Global_critical_region_
)
15024 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15025 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15029 ExAcquireSharedStarveExclusive(
15030 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15031 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
15032 PERESOURCE Resource
,
15033 _In_ BOOLEAN Wait
);
15035 _IRQL_requires_max_(APC_LEVEL
)
15036 _Requires_lock_held_(_Global_critical_region_
)
15037 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15038 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15042 ExAcquireSharedWaitForExclusive(
15043 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15044 _When_(return!=0, _Acquires_lock_(*_Curr_
))
15045 PERESOURCE Resource
,
15046 _In_ BOOLEAN Wait
);
15048 __drv_preferredFunction("ExAllocatePoolWithTag",
15049 "No tag interferes with debugging.")
15050 __drv_allocatesMem(Mem
)
15051 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15052 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15053 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15054 __drv_reportError("Must succeed pool allocations are forbidden. "
15055 "Allocation failures cause a system crash"))
15056 _When_((PoolType
& (NonPagedPoolMustSucceed
|
15057 POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15058 _Post_maybenull_ _Must_inspect_result_
)
15059 _When_((PoolType
& (NonPagedPoolMustSucceed
|
15060 POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15062 _Post_writable_byte_size_(NumberOfBytes
)
15067 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15068 _In_ SIZE_T NumberOfBytes
);
15070 __drv_preferredFunction("ExAllocatePoolWithQuotaTag",
15071 "No tag interferes with debugging.")
15072 __drv_allocatesMem(Mem
)
15073 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15074 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15075 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15076 __drv_reportError("Must succeed pool allocations are forbidden. "
15077 "Allocation failures cause a system crash"))
15078 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
15079 _Post_maybenull_ _Must_inspect_result_
)
15080 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
15081 _Post_writable_byte_size_(NumberOfBytes
)
15085 ExAllocatePoolWithQuota(
15086 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15087 _In_ SIZE_T NumberOfBytes
);
15089 __drv_allocatesMem(Mem
)
15090 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15091 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15092 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15093 __drv_reportError("Must succeed pool allocations are forbidden. "
15094 "Allocation failures cause a system crash"))
15095 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
15096 _Post_maybenull_ _Must_inspect_result_
)
15097 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
15098 _Post_writable_byte_size_(NumberOfBytes
)
15102 ExAllocatePoolWithQuotaTag(
15103 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
15104 _In_ SIZE_T NumberOfBytes
,
15107 #ifndef POOL_TAGGING
15108 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
15111 __drv_allocatesMem(Mem
)
15112 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15113 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15114 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15115 __drv_reportError("Must succeed pool allocations are forbidden. "
15116 "Allocation failures cause a system crash"))
15117 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15118 _Post_maybenull_ _Must_inspect_result_
)
15119 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15121 _Post_writable_byte_size_(NumberOfBytes
)
15122 _Function_class_(ALLOCATE_FUNCTION
)
15126 ExAllocatePoolWithTag(
15127 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
15128 _In_ SIZE_T NumberOfBytes
,
15131 #ifndef POOL_TAGGING
15132 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
15135 __drv_allocatesMem(Mem
)
15136 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15137 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15138 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15139 __drv_reportError("Must succeed pool allocations are forbidden. "
15140 "Allocation failures cause a system crash"))
15141 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15142 _Post_maybenull_ _Must_inspect_result_
)
15143 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15145 _Post_writable_byte_size_(NumberOfBytes
)
15149 ExAllocatePoolWithTagPriority(
15150 _In_
__drv_strictTypeMatch(__drv_typeCond
) POOL_TYPE PoolType
,
15151 _In_ SIZE_T NumberOfBytes
,
15153 _In_
__drv_strictTypeMatch(__drv_typeExpr
) EX_POOL_PRIORITY Priority
);
15155 _IRQL_requires_max_(DISPATCH_LEVEL
)
15159 ExConvertExclusiveToSharedLite(
15160 _Inout_
_Requires_lock_held_(*_Curr_
) PERESOURCE Resource
);
15162 _IRQL_requires_max_(APC_LEVEL
)
15167 _Outptr_ PCALLBACK_OBJECT
*CallbackObject
,
15168 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
15169 _In_ BOOLEAN Create
,
15170 _In_ BOOLEAN AllowMultipleCallbacks
);
15175 ExDeleteNPagedLookasideList(
15176 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
);
15178 _IRQL_requires_max_(APC_LEVEL
)
15182 ExDeletePagedLookasideList(
15183 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
15185 _IRQL_requires_max_(DISPATCH_LEVEL
)
15189 ExDeleteResourceLite(
15190 _Inout_ PERESOURCE Resource
);
15192 _IRQL_requires_max_(DISPATCH_LEVEL
)
15193 _Function_class_(FREE_FUNCTION
)
15198 _Pre_notnull_
__drv_freesMem(Mem
) PVOID P
);
15200 _IRQL_requires_max_(DISPATCH_LEVEL
)
15205 _Pre_notnull_
__drv_freesMem(Mem
) PVOID P
,
15208 _IRQL_requires_max_(DISPATCH_LEVEL
)
15212 ExGetExclusiveWaiterCount(
15213 _In_ PERESOURCE Resource
);
15215 _IRQL_requires_max_(DISPATCH_LEVEL
)
15219 ExGetPreviousMode(VOID
);
15221 _IRQL_requires_max_(DISPATCH_LEVEL
)
15225 ExGetSharedWaiterCount(
15226 _In_ PERESOURCE Resource
);
15228 _IRQL_requires_max_(DISPATCH_LEVEL
)
15232 ExInitializeNPagedLookasideList(
15233 _Out_ PNPAGED_LOOKASIDE_LIST Lookaside
,
15234 _In_opt_ PALLOCATE_FUNCTION Allocate
,
15235 _In_opt_ PFREE_FUNCTION Free
,
15239 _In_ USHORT Depth
);
15241 _IRQL_requires_max_(APC_LEVEL
)
15245 ExInitializePagedLookasideList(
15246 _Out_ PPAGED_LOOKASIDE_LIST Lookaside
,
15247 _In_opt_ PALLOCATE_FUNCTION Allocate
,
15248 _In_opt_ PFREE_FUNCTION Free
,
15252 _In_ USHORT Depth
);
15254 _IRQL_requires_max_(DISPATCH_LEVEL
)
15258 ExInitializeResourceLite(
15259 _Out_ PERESOURCE Resource
);
15264 ExInterlockedAddLargeInteger(
15265 _Inout_ PLARGE_INTEGER Addend
,
15266 _In_ LARGE_INTEGER Increment
,
15267 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15269 #if !defined(_M_IX86)
15270 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
15271 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
15273 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
15274 (VOID)_InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
15280 ExInterlockedAddUlong(
15281 _Inout_ PULONG Addend
,
15282 _In_ ULONG Increment
,
15283 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15285 #if defined(_AMD64_) || defined(_IA64_)
15287 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
15288 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
15290 #elif defined(_X86_)
15295 ExfInterlockedCompareExchange64(
15296 _Inout_ _Interlocked_operand_ LONGLONG
volatile *Destination
,
15297 _In_ PLONGLONG Exchange
,
15298 _In_ PLONGLONG Comperand
);
15300 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
15301 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
15308 ExInterlockedCompareExchange64(
15309 IN OUT LONGLONG
volatile *Destination
,
15310 IN PLONGLONG Exchange
,
15311 IN PLONGLONG Comparand
,
15312 IN PKSPIN_LOCK Lock
);
15314 #endif /* defined(_AMD64_) || defined(_IA64_) */
15319 ExInterlockedInsertHeadList(
15320 _Inout_ PLIST_ENTRY ListHead
,
15321 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
15322 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15327 ExInterlockedInsertTailList(
15328 _Inout_ PLIST_ENTRY ListHead
,
15329 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
15330 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15335 ExInterlockedPopEntryList(
15336 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
15337 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15342 ExInterlockedPushEntryList(
15343 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
15344 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
15345 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15350 ExInterlockedRemoveHeadList(
15351 _Inout_ PLIST_ENTRY ListHead
,
15352 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15354 _IRQL_requires_max_(PASSIVE_LEVEL
)
15358 ExIsProcessorFeaturePresent(
15359 _In_ ULONG ProcessorFeature
);
15361 _IRQL_requires_max_(DISPATCH_LEVEL
)
15365 ExIsResourceAcquiredExclusiveLite(
15366 _In_ PERESOURCE Resource
);
15368 _IRQL_requires_max_(DISPATCH_LEVEL
)
15372 ExIsResourceAcquiredSharedLite(
15373 _In_ PERESOURCE Resource
);
15375 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
15380 ExLocalTimeToSystemTime(
15381 _In_ PLARGE_INTEGER LocalTime
,
15382 _Out_ PLARGE_INTEGER SystemTime
);
15384 _IRQL_requires_max_(DISPATCH_LEVEL
)
15389 _In_ PCALLBACK_OBJECT CallbackObject
,
15390 _In_opt_ PVOID Argument1
,
15391 _In_opt_ PVOID Argument2
);
15393 _IRQL_requires_max_(DISPATCH_LEVEL
)
15398 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
,
15399 __drv_strictTypeMatch(__drv_typeExpr
) _In_ WORK_QUEUE_TYPE QueueType
);
15401 _IRQL_requires_max_(APC_LEVEL
)
15407 _In_ NTSTATUS Status
);
15409 _IRQL_requires_max_(APC_LEVEL
)
15413 ExRegisterCallback(
15414 _Inout_ PCALLBACK_OBJECT CallbackObject
,
15415 _In_ PCALLBACK_FUNCTION CallbackFunction
,
15416 _In_opt_ PVOID CallbackContext
);
15418 _IRQL_requires_max_(DISPATCH_LEVEL
)
15422 ExReinitializeResourceLite(
15423 _Inout_ PERESOURCE Resource
);
15425 _IRQL_requires_max_(DISPATCH_LEVEL
)
15426 _Requires_lock_held_(_Global_critical_region_
)
15430 ExReleaseResourceForThreadLite(
15431 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15432 PERESOURCE Resource
,
15433 _In_ ERESOURCE_THREAD ResourceThreadId
);
15435 _Requires_lock_held_(_Global_critical_region_
)
15436 _Requires_lock_held_(*Resource
)
15437 _Releases_lock_(*Resource
)
15438 _IRQL_requires_max_(DISPATCH_LEVEL
)
15442 ExReleaseResourceLite(
15443 _Inout_ PERESOURCE Resource
);
15445 _IRQL_requires_max_(DISPATCH_LEVEL
)
15449 ExSetResourceOwnerPointer(
15450 _Inout_ PERESOURCE Resource
,
15451 _In_ PVOID OwnerPointer
);
15453 _IRQL_requires_max_(APC_LEVEL
)
15457 ExSetTimerResolution(
15458 _In_ ULONG DesiredTime
,
15459 _In_ BOOLEAN SetResolution
);
15464 ExSystemTimeToLocalTime(
15465 _In_ PLARGE_INTEGER SystemTime
,
15466 _Out_ PLARGE_INTEGER LocalTime
);
15468 _IRQL_requires_max_(APC_LEVEL
)
15472 ExUnregisterCallback(
15473 _Inout_ PVOID CbRegistration
);
15475 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15477 #if (NTDDI_VERSION >= NTDDI_WINXP)
15479 _Must_inspect_result_
15480 _Post_satisfies_(return == 0 || return == 1)
15484 ExAcquireRundownProtection(
15485 _Inout_ PEX_RUNDOWN_REF RunRef
);
15490 ExInitializeRundownProtection(
15491 _Out_ PEX_RUNDOWN_REF RunRef
);
15496 ExReInitializeRundownProtection(
15497 _Inout_ PEX_RUNDOWN_REF RunRef
);
15502 ExReleaseRundownProtection(
15503 _Inout_ PEX_RUNDOWN_REF RunRef
);
15508 ExRundownCompleted(
15509 _Out_ PEX_RUNDOWN_REF RunRef
);
15515 __drv_strictTypeMatch(__drv_typeExpr
) _In_ SUITE_TYPE SuiteType
);
15520 ExWaitForRundownProtectionRelease(
15521 _Inout_ PEX_RUNDOWN_REF RunRef
);
15522 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15524 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
15526 _Must_inspect_result_
15527 _Post_satisfies_(return == 0 || return == 1)
15531 ExAcquireRundownProtectionEx(
15532 _Inout_ PEX_RUNDOWN_REF RunRef
,
15538 ExReleaseRundownProtectionEx(
15539 _Inout_ PEX_RUNDOWN_REF RunRef
,
15542 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
15544 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
15546 _Must_inspect_result_
15547 _IRQL_requires_max_(APC_LEVEL
)
15549 PEX_RUNDOWN_REF_CACHE_AWARE
15551 ExAllocateCacheAwareRundownProtection(
15552 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15553 _In_ ULONG PoolTag
);
15555 _IRQL_requires_max_(APC_LEVEL
)
15559 ExSizeOfRundownProtectionCacheAware(VOID
);
15561 _IRQL_requires_max_(APC_LEVEL
)
15562 _Acquires_lock_(_Global_critical_region_
)
15566 ExEnterCriticalRegionAndAcquireResourceShared(
15567 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_shared_lock_(*_Curr_
)
15568 PERESOURCE Resource
);
15570 _IRQL_requires_max_(APC_LEVEL
)
15571 _Acquires_lock_(_Global_critical_region_
)
15575 ExEnterCriticalRegionAndAcquireResourceExclusive(
15576 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)
15577 PERESOURCE Resource
);
15579 _IRQL_requires_max_(APC_LEVEL
)
15580 _Acquires_lock_(_Global_critical_region_
)
15584 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
15585 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15586 PERESOURCE Resource
);
15588 _IRQL_requires_max_(DISPATCH_LEVEL
)
15589 _Releases_lock_(_Global_critical_region_
)
15593 ExReleaseResourceAndLeaveCriticalRegion(
15594 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15595 PERESOURCE Resource
);
15597 _IRQL_requires_max_(APC_LEVEL
)
15601 ExInitializeRundownProtectionCacheAware(
15602 _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15603 _In_ SIZE_T RunRefSize
);
15605 _IRQL_requires_max_(APC_LEVEL
)
15609 ExFreeCacheAwareRundownProtection(
15610 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15612 _Must_inspect_result_
15613 _Post_satisfies_(return == 0 || return == 1)
15617 ExAcquireRundownProtectionCacheAware(
15618 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15623 ExReleaseRundownProtectionCacheAware(
15624 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15626 _Must_inspect_result_
15627 _Post_satisfies_(return == 0 || return == 1)
15631 ExAcquireRundownProtectionCacheAwareEx(
15632 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15638 ExReleaseRundownProtectionCacheAwareEx(
15639 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
15645 ExWaitForRundownProtectionReleaseCacheAware(
15646 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
15651 ExReInitializeRundownProtectionCacheAware(
15652 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15657 ExRundownCompletedCacheAware(
15658 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15660 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
15662 #if (NTDDI_VERSION >= NTDDI_VISTA)
15664 _IRQL_requires_max_(DISPATCH_LEVEL
)
15668 ExInitializeLookasideListEx(
15669 _Out_ PLOOKASIDE_LIST_EX Lookaside
,
15670 _In_opt_ PALLOCATE_FUNCTION_EX Allocate
,
15671 _In_opt_ PFREE_FUNCTION_EX Free
,
15672 _In_ POOL_TYPE PoolType
,
15676 _In_ USHORT Depth
);
15678 _IRQL_requires_max_(DISPATCH_LEVEL
)
15682 ExDeleteLookasideListEx(
15683 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15685 _IRQL_requires_max_(DISPATCH_LEVEL
)
15689 ExFlushLookasideListEx(
15690 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15692 _Must_inspect_result_
15693 _IRQL_requires_max_(DISPATCH_LEVEL
)
15696 ExAllocateFromLookasideListEx(
15697 _Inout_ PLOOKASIDE_LIST_EX Lookaside
)
15701 Lookaside
->L
.TotalAllocates
+= 1;
15702 #ifdef NONAMELESSUNION
15703 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15704 if (Entry
== NULL
) {
15705 Lookaside
->L
.u2
.AllocateMisses
+= 1;
15706 Entry
= (Lookaside
->L
.u4
.AllocateEx
)(Lookaside
->L
.Type
,
15711 #else /* NONAMELESSUNION */
15712 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15713 if (Entry
== NULL
) {
15714 Lookaside
->L
.AllocateMisses
+= 1;
15715 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
15720 #endif /* NONAMELESSUNION */
15724 _IRQL_requires_max_(DISPATCH_LEVEL
)
15727 ExFreeToLookasideListEx(
15728 _Inout_ PLOOKASIDE_LIST_EX Lookaside
,
15731 Lookaside
->L
.TotalFrees
+= 1;
15732 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15733 Lookaside
->L
.FreeMisses
+= 1;
15734 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
15736 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15741 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15743 #if (NTDDI_VERSION >= NTDDI_WIN7)
15745 _IRQL_requires_max_(DISPATCH_LEVEL
)
15749 ExSetResourceOwnerPointerEx(
15750 _Inout_ PERESOURCE Resource
,
15751 _In_ PVOID OwnerPointer
,
15754 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
15756 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15758 _IRQL_requires_max_(DISPATCH_LEVEL
)
15759 static __inline PVOID
15760 ExAllocateFromNPagedLookasideList(
15761 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
)
15765 Lookaside
->L
.TotalAllocates
++;
15766 #ifdef NONAMELESSUNION
15767 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15768 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
,
15769 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15771 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15773 if (Entry
== NULL
) {
15774 Lookaside
->L
.u2
.AllocateMisses
++;
15775 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
15779 #else /* NONAMELESSUNION */
15780 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15781 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
15782 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15784 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15786 if (Entry
== NULL
) {
15787 Lookaside
->L
.AllocateMisses
++;
15788 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
15792 #endif /* NONAMELESSUNION */
15796 _IRQL_requires_max_(DISPATCH_LEVEL
)
15797 static __inline VOID
15798 ExFreeToNPagedLookasideList(
15799 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
,
15802 Lookaside
->L
.TotalFrees
++;
15803 #ifdef NONAMELESSUNION
15804 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
15805 Lookaside
->L
.u3
.FreeMisses
++;
15806 (Lookaside
->L
.u5
.Free
)(Entry
);
15808 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15809 ExInterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
,
15810 (PSLIST_ENTRY
)Entry
,
15811 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15813 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
15816 #else /* NONAMELESSUNION */
15817 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15818 Lookaside
->L
.FreeMisses
++;
15819 (Lookaside
->L
.Free
)(Entry
);
15821 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15822 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
15823 (PSLIST_ENTRY
)Entry
,
15824 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
15826 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15829 #endif /* NONAMELESSUNION */
15832 /******************************************************************************
15833 * Object Manager Functions *
15834 ******************************************************************************/
15836 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15837 _IRQL_requires_max_(DISPATCH_LEVEL
)
15841 ObfDereferenceObject(
15842 _In_ PVOID Object
);
15843 #define ObDereferenceObject ObfDereferenceObject
15845 _IRQL_requires_max_(APC_LEVEL
)
15849 ObGetObjectSecurity(
15851 _Out_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
15852 _Out_ PBOOLEAN MemoryAllocated
);
15854 _IRQL_requires_max_(DISPATCH_LEVEL
)
15858 ObfReferenceObject(
15859 _In_ PVOID Object
);
15860 #define ObReferenceObject ObfReferenceObject
15862 _IRQL_requires_max_(APC_LEVEL
)
15866 ObReferenceObjectByHandle(
15867 _In_ HANDLE Handle
,
15868 _In_ ACCESS_MASK DesiredAccess
,
15869 _In_opt_ POBJECT_TYPE ObjectType
,
15870 _In_ KPROCESSOR_MODE AccessMode
,
15871 _Out_ PVOID
*Object
,
15872 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15874 _IRQL_requires_max_(DISPATCH_LEVEL
)
15878 ObReferenceObjectByPointer(
15880 _In_ ACCESS_MASK DesiredAccess
,
15881 _In_opt_ POBJECT_TYPE ObjectType
,
15882 _In_ KPROCESSOR_MODE AccessMode
);
15884 _IRQL_requires_max_(APC_LEVEL
)
15888 ObReleaseObjectSecurity(
15889 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
15890 _In_ BOOLEAN MemoryAllocated
);
15891 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15893 #if (NTDDI_VERSION >= NTDDI_VISTA)
15897 ObDereferenceObjectDeferDelete(
15898 _In_ PVOID Object
);
15901 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
15905 ObRegisterCallbacks(
15906 _In_ POB_CALLBACK_REGISTRATION CallbackRegistration
,
15907 _Outptr_ PVOID
*RegistrationHandle
);
15912 ObUnRegisterCallbacks(
15913 _In_ PVOID RegistrationHandle
);
15918 ObGetFilterVersion(VOID
);
15920 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
15922 #if (NTDDI_VERSION >= NTDDI_WIN7)
15923 _IRQL_requires_max_(APC_LEVEL
)
15927 ObReferenceObjectByHandleWithTag(
15928 _In_ HANDLE Handle
,
15929 _In_ ACCESS_MASK DesiredAccess
,
15930 _In_opt_ POBJECT_TYPE ObjectType
,
15931 _In_ KPROCESSOR_MODE AccessMode
,
15933 _Out_ PVOID
*Object
,
15934 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
15936 _IRQL_requires_max_(DISPATCH_LEVEL
)
15940 ObfReferenceObjectWithTag(
15944 _IRQL_requires_max_(DISPATCH_LEVEL
)
15948 ObReferenceObjectByPointerWithTag(
15950 _In_ ACCESS_MASK DesiredAccess
,
15951 _In_opt_ POBJECT_TYPE ObjectType
,
15952 _In_ KPROCESSOR_MODE AccessMode
,
15955 _IRQL_requires_max_(DISPATCH_LEVEL
)
15959 ObfDereferenceObjectWithTag(
15966 ObDereferenceObjectDeferDeleteWithTag(
15970 #define ObDereferenceObject ObfDereferenceObject
15971 #define ObReferenceObject ObfReferenceObject
15972 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
15973 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
15974 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15976 /******************************************************************************
15977 * Process Manager Functions *
15978 ******************************************************************************/
15983 PsWrapApcWow64Thread(
15984 _Inout_ PVOID
*ApcContext
,
15985 _Inout_ PVOID
*ApcRoutine
);
15989 * PsGetCurrentProcess(VOID)
15991 #define PsGetCurrentProcess IoGetCurrentProcess
15993 #if !defined(_PSGETCURRENTTHREAD_)
15994 #define _PSGETCURRENTTHREAD_
15995 _IRQL_requires_max_(DISPATCH_LEVEL
)
15999 PsGetCurrentThread(VOID
)
16001 return (PETHREAD
)KeGetCurrentThread();
16003 #endif /* !_PSGETCURRENTTHREAD_ */
16006 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16008 _IRQL_requires_max_(APC_LEVEL
)
16009 _Post_satisfies_(return <= 0)
16010 _Must_inspect_result_
16014 PsCreateSystemThread(
16015 _Out_ PHANDLE ThreadHandle
,
16016 _In_ ULONG DesiredAccess
,
16017 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16018 _In_opt_ HANDLE ProcessHandle
,
16019 _Out_opt_ PCLIENT_ID ClientId
,
16020 _In_ PKSTART_ROUTINE StartRoutine
,
16021 _In_opt_
_When_(return==0, __drv_aliasesMem
) PVOID StartContext
);
16023 _IRQL_requires_max_(PASSIVE_LEVEL
)
16027 PsTerminateSystemThread(
16028 _In_ NTSTATUS ExitStatus
);
16030 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16033 /******************************************************************************
16034 * WMI Library Support Functions *
16035 ******************************************************************************/
16038 #if (NTDDI_VERSION >= NTDDI_WINXP)
16039 _IRQL_requires_max_(HIGH_LEVEL
)
16044 _In_ TRACEHANDLE LoggerHandle
,
16045 _In_ ULONG MessageFlags
,
16046 _In_ LPGUID MessageGuid
,
16047 _In_ USHORT MessageNumber
,
16050 #endif /* RUN_WPP */
16052 #if (NTDDI_VERSION >= NTDDI_WINXP)
16054 _IRQL_requires_max_(APC_LEVEL
)
16058 WmiQueryTraceInformation(
16059 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
16060 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
16061 _In_ ULONG TraceInformationLength
,
16062 _Out_opt_ PULONG RequiredLength
,
16063 _In_opt_ PVOID Buffer
);
16066 /* FIXME: Get va_list from where? */
16067 _IRQL_requires_max_(HIGH_LEVEL
)
16072 _In_ TRACEHANDLE LoggerHandle
,
16073 _In_ ULONG MessageFlags
,
16074 _In_ LPGUID MessageGuid
,
16075 _In_ USHORT MessageNumber
,
16076 _In_
va_list MessageArgList
);
16079 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
16081 #ifndef TRACE_INFORMATION_CLASS_DEFINE
16083 #if (NTDDI_VERSION >= NTDDI_WINXP)
16084 _IRQL_requires_max_(APC_LEVEL
)
16088 WmiQueryTraceInformation(
16089 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
16090 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
16091 _In_ ULONG TraceInformationLength
,
16092 _Out_opt_ PULONG RequiredLength
,
16093 _In_opt_ PVOID Buffer
);
16096 #define TRACE_INFORMATION_CLASS_DEFINE
16098 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
16100 #if (NTDDI_VERSION >= NTDDI_VISTA)
16102 _IRQL_requires_max_(PASSIVE_LEVEL
)
16107 _In_ LPCGUID ProviderId
,
16108 _In_opt_ PETWENABLECALLBACK EnableCallback
,
16109 _In_opt_ PVOID CallbackContext
,
16110 _Out_ PREGHANDLE RegHandle
);
16112 _IRQL_requires_max_(PASSIVE_LEVEL
)
16117 _In_ REGHANDLE RegHandle
);
16119 _IRQL_requires_max_(HIGH_LEVEL
)
16124 _In_ REGHANDLE RegHandle
,
16125 _In_ PCEVENT_DESCRIPTOR EventDescriptor
);
16127 _IRQL_requires_max_(HIGH_LEVEL
)
16131 EtwProviderEnabled(
16132 _In_ REGHANDLE RegHandle
,
16134 _In_ ULONGLONG Keyword
);
16136 _When_(ControlCode
==EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(HIGH_LEVEL
))
16137 _When_(ControlCode
!=EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(APC_LEVEL
))
16141 EtwActivityIdControl(
16142 _In_ ULONG ControlCode
,
16143 _Inout_updates_bytes_(sizeof(GUID
)) LPGUID ActivityId
);
16145 _IRQL_requires_max_(HIGH_LEVEL
)
16150 _In_ REGHANDLE RegHandle
,
16151 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16152 _In_opt_ LPCGUID ActivityId
,
16153 _In_ ULONG UserDataCount
,
16154 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16156 _IRQL_requires_max_(HIGH_LEVEL
)
16161 _In_ REGHANDLE RegHandle
,
16162 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16163 _In_opt_ LPCGUID ActivityId
,
16164 _In_opt_ LPCGUID RelatedActivityId
,
16165 _In_ ULONG UserDataCount
,
16166 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16168 _IRQL_requires_max_(HIGH_LEVEL
)
16173 _In_ REGHANDLE RegHandle
,
16175 _In_ ULONGLONG Keyword
,
16176 _In_opt_ LPCGUID ActivityId
,
16177 _In_ PCWSTR String
);
16179 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
16181 #if (NTDDI_VERSION >= NTDDI_WIN7)
16182 _IRQL_requires_max_(HIGH_LEVEL
)
16187 _In_ REGHANDLE RegHandle
,
16188 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16189 _In_ ULONG64 Filter
,
16191 _In_opt_ LPCGUID ActivityId
,
16192 _In_opt_ LPCGUID RelatedActivityId
,
16193 _In_ ULONG UserDataCount
,
16194 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16199 /******************************************************************************
16200 * Kernel Debugger Functions *
16201 ******************************************************************************/
16208 _In_z_ _Printf_format_string_ PCSTR Format
,
16211 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16215 DbgPrintReturnControlC(
16216 _In_z_ _Printf_format_string_ PCCH Format
,
16220 #if (NTDDI_VERSION >= NTDDI_WINXP)
16226 _In_ ULONG ComponentId
,
16228 _In_z_ _Printf_format_string_ PCSTR Format
,
16231 #ifdef _VA_LIST_DEFINED
16237 _In_ ULONG ComponentId
,
16239 _In_z_ PCCH Format
,
16245 vDbgPrintExWithPrefix(
16246 _In_z_ PCCH Prefix
,
16247 _In_ ULONG ComponentId
,
16249 _In_z_ PCCH Format
,
16252 #endif /* _VA_LIST_DEFINED */
16257 DbgQueryDebugFilterState(
16258 _In_ ULONG ComponentId
,
16264 DbgSetDebugFilterState(
16265 _In_ ULONG ComponentId
,
16267 _In_ BOOLEAN State
);
16269 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
16271 #if (NTDDI_VERSION >= NTDDI_VISTA)
16274 (*PDEBUG_PRINT_CALLBACK
)(
16275 _In_ PSTRING Output
,
16276 _In_ ULONG ComponentId
,
16282 DbgSetDebugPrintCallback(
16283 _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
16284 _In_ BOOLEAN Enable
);
16286 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
16288 #endif /* _DBGNT_ */
16292 #define KdPrint(_x_) DbgPrint _x_
16293 #define KdPrintEx(_x_) DbgPrintEx _x_
16294 #define vKdPrintEx(_x_) vDbgPrintEx _x_
16295 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
16296 #define KdBreakPoint() DbgBreakPoint()
16297 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
16301 #define KdPrint(_x_)
16302 #define KdPrintEx(_x_)
16303 #define vKdPrintEx(_x_)
16304 #define vKdPrintExWithPrefix(_x_)
16305 #define KdBreakPoint()
16306 #define KdBreakPointWithStatus(s)
16311 extern BOOLEAN KdDebuggerEnabled
;
16312 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
16313 extern BOOLEAN KdDebuggerNotPresent
;
16314 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
16316 __CREATE_NTOS_DATA_IMPORT_ALIAS(KdDebuggerEnabled
)
16317 extern BOOLEAN
*KdDebuggerEnabled
;
16318 #define KD_DEBUGGER_ENABLED (*KdDebuggerEnabled)
16319 __CREATE_NTOS_DATA_IMPORT_ALIAS(KdDebuggerNotPresent
)
16320 extern BOOLEAN
*KdDebuggerNotPresent
;
16321 #define KD_DEBUGGER_NOT_PRESENT (*KdDebuggerNotPresent)
16324 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16329 KdDisableDebugger(VOID
);
16334 KdEnableDebugger(VOID
);
16336 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
16337 #define DbgBreakPoint __debugbreak
16339 __analysis_noreturn
16342 DbgBreakPoint(VOID
);
16345 __analysis_noreturn
16349 DbgBreakPointWithStatus(
16350 _In_ ULONG Status
);
16352 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16354 #if (NTDDI_VERSION >= NTDDI_WS03)
16358 KdRefreshDebuggerNotPresent(VOID
);
16361 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
16366 _In_ KD_OPTION Option
,
16367 _In_opt_ ULONG InBufferBytes
,
16368 _In_ PVOID InBuffer
,
16369 _In_opt_ ULONG OutBufferBytes
,
16370 _Out_ PVOID OutBuffer
,
16371 _Out_opt_ PULONG OutBufferNeeded
);
16373 /* Hardware Abstraction Layer Functions */
16375 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16377 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
16379 __drv_preferredFunction("AllocateCommonBuffer","Obsolete")
16383 HalAllocateCommonBuffer(
16384 _In_ PDMA_ADAPTER DmaAdapter
,
16386 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
16387 _In_ BOOLEAN CacheEnabled
)
16389 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
16390 PVOID commonBuffer
;
16392 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
16393 ASSERT( allocateCommonBuffer
!= NULL
);
16394 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
16395 return commonBuffer
;
16398 __drv_preferredFunction("FreeCommonBuffer","Obsolete")
16402 HalFreeCommonBuffer(
16403 _In_ PDMA_ADAPTER DmaAdapter
,
16405 _In_ PHYSICAL_ADDRESS LogicalAddress
,
16406 _In_ PVOID VirtualAddress
,
16407 _In_ BOOLEAN CacheEnabled
)
16409 PFREE_COMMON_BUFFER freeCommonBuffer
;
16411 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
16412 ASSERT( freeCommonBuffer
!= NULL
);
16413 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
16416 __drv_preferredFunction("ReadDmaCounter","Obsolete")
16421 _In_ PDMA_ADAPTER DmaAdapter
)
16423 PREAD_DMA_COUNTER readDmaCounter
;
16426 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
16427 ASSERT( readDmaCounter
!= NULL
);
16428 counter
= readDmaCounter( DmaAdapter
);
16434 HalGetDmaAlignment(
16435 _In_ PDMA_ADAPTER DmaAdapter
)
16437 PGET_DMA_ALIGNMENT getDmaAlignment
;
16440 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
16441 ASSERT( getDmaAlignment
!= NULL
);
16442 alignment
= getDmaAlignment( DmaAdapter
);
16446 #endif /* USE_DMA_MACROS ... */
16448 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16453 #include <ktmtypes.h>
16455 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
16456 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
16457 #define TRANSACTIONMANAGER_RECOVER (0x0004)
16458 #define TRANSACTIONMANAGER_RENAME (0x0008)
16459 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
16460 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
16462 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
16463 TRANSACTIONMANAGER_QUERY_INFORMATION)
16465 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16466 TRANSACTIONMANAGER_SET_INFORMATION |\
16467 TRANSACTIONMANAGER_RECOVER |\
16468 TRANSACTIONMANAGER_RENAME |\
16469 TRANSACTIONMANAGER_CREATE_RM)
16471 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
16473 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16474 TRANSACTIONMANAGER_GENERIC_READ |\
16475 TRANSACTIONMANAGER_GENERIC_WRITE |\
16476 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
16477 TRANSACTIONMANAGER_BIND_TRANSACTION)
16479 #define TRANSACTION_QUERY_INFORMATION (0x0001)
16480 #define TRANSACTION_SET_INFORMATION (0x0002)
16481 #define TRANSACTION_ENLIST (0x0004)
16482 #define TRANSACTION_COMMIT (0x0008)
16483 #define TRANSACTION_ROLLBACK (0x0010)
16484 #define TRANSACTION_PROPAGATE (0x0020)
16485 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
16487 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
16488 TRANSACTION_QUERY_INFORMATION |\
16491 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16492 TRANSACTION_SET_INFORMATION |\
16493 TRANSACTION_COMMIT |\
16494 TRANSACTION_ENLIST |\
16495 TRANSACTION_ROLLBACK |\
16496 TRANSACTION_PROPAGATE |\
16499 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16500 TRANSACTION_COMMIT |\
16501 TRANSACTION_ROLLBACK |\
16504 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16505 TRANSACTION_GENERIC_READ |\
16506 TRANSACTION_GENERIC_WRITE |\
16507 TRANSACTION_GENERIC_EXECUTE)
16509 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
16510 STANDARD_RIGHTS_WRITE |\
16511 TRANSACTION_SET_INFORMATION |\
16512 TRANSACTION_ENLIST |\
16513 TRANSACTION_ROLLBACK |\
16514 TRANSACTION_PROPAGATE |\
16517 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
16518 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
16519 #define RESOURCEMANAGER_RECOVER (0x0004)
16520 #define RESOURCEMANAGER_ENLIST (0x0008)
16521 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
16522 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
16523 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
16525 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
16526 RESOURCEMANAGER_QUERY_INFORMATION |\
16529 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16530 RESOURCEMANAGER_SET_INFORMATION |\
16531 RESOURCEMANAGER_RECOVER |\
16532 RESOURCEMANAGER_ENLIST |\
16533 RESOURCEMANAGER_GET_NOTIFICATION |\
16534 RESOURCEMANAGER_REGISTER_PROTOCOL |\
16535 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16538 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16539 RESOURCEMANAGER_RECOVER |\
16540 RESOURCEMANAGER_ENLIST |\
16541 RESOURCEMANAGER_GET_NOTIFICATION |\
16542 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16545 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16546 RESOURCEMANAGER_GENERIC_READ |\
16547 RESOURCEMANAGER_GENERIC_WRITE |\
16548 RESOURCEMANAGER_GENERIC_EXECUTE)
16550 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
16551 #define ENLISTMENT_SET_INFORMATION (0x0002)
16552 #define ENLISTMENT_RECOVER (0x0004)
16553 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
16554 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
16556 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
16557 ENLISTMENT_QUERY_INFORMATION)
16559 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16560 ENLISTMENT_SET_INFORMATION |\
16561 ENLISTMENT_RECOVER |\
16562 ENLISTMENT_SUBORDINATE_RIGHTS |\
16563 ENLISTMENT_SUPERIOR_RIGHTS)
16565 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16566 ENLISTMENT_RECOVER |\
16567 ENLISTMENT_SUBORDINATE_RIGHTS |\
16568 ENLISTMENT_SUPERIOR_RIGHTS)
16570 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16571 ENLISTMENT_GENERIC_READ |\
16572 ENLISTMENT_GENERIC_WRITE |\
16573 ENLISTMENT_GENERIC_EXECUTE)
16575 typedef enum _TRANSACTION_OUTCOME
{
16576 TransactionOutcomeUndetermined
= 1,
16577 TransactionOutcomeCommitted
,
16578 TransactionOutcomeAborted
,
16579 } TRANSACTION_OUTCOME
;
16582 typedef enum _TRANSACTION_STATE
{
16583 TransactionStateNormal
= 1,
16584 TransactionStateIndoubt
,
16585 TransactionStateCommittedNotify
,
16586 } TRANSACTION_STATE
;
16589 typedef struct _TRANSACTION_BASIC_INFORMATION
{
16590 GUID TransactionId
;
16593 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
16595 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
16597 LARGE_INTEGER VirtualClock
;
16598 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
16600 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
16602 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
16604 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
16605 ULONG LogPathLength
;
16606 _Field_size_(LogPathLength
) WCHAR LogPath
[1];
16607 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
16609 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
16610 ULONGLONG LastRecoveredLsn
;
16611 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
16613 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
16614 ULONG IsolationLevel
;
16615 ULONG IsolationFlags
;
16616 LARGE_INTEGER Timeout
;
16618 ULONG DescriptionLength
;
16619 WCHAR Description
[1];
16620 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
16622 typedef struct _TRANSACTION_BIND_INFORMATION
{
16624 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
16626 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
16628 GUID ResourceManagerId
;
16629 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
16631 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
16632 ULONG NumberOfEnlistments
;
16633 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
16634 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
16636 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
16637 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
16638 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
16640 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
16641 GUID ResourceManagerId
;
16642 ULONG DescriptionLength
;
16643 WCHAR Description
[1];
16644 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
16646 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
16647 HANDLE IoCompletionPortHandle
;
16648 ULONG_PTR CompletionKey
;
16649 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
16651 typedef enum _KTMOBJECT_TYPE
{
16652 KTMOBJECT_TRANSACTION
,
16653 KTMOBJECT_TRANSACTION_MANAGER
,
16654 KTMOBJECT_RESOURCE_MANAGER
,
16655 KTMOBJECT_ENLISTMENT
,
16657 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
16659 typedef struct _KTMOBJECT_CURSOR
{
16661 ULONG ObjectIdCount
;
16663 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
16665 typedef enum _TRANSACTION_INFORMATION_CLASS
{
16666 TransactionBasicInformation
,
16667 TransactionPropertiesInformation
,
16668 TransactionEnlistmentInformation
,
16669 TransactionSuperiorEnlistmentInformation
16670 } TRANSACTION_INFORMATION_CLASS
;
16672 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
16673 TransactionManagerBasicInformation
,
16674 TransactionManagerLogInformation
,
16675 TransactionManagerLogPathInformation
,
16676 TransactionManagerRecoveryInformation
= 4
16677 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
16679 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
16680 ResourceManagerBasicInformation
,
16681 ResourceManagerCompletionInformation
,
16682 } RESOURCEMANAGER_INFORMATION_CLASS
;
16684 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
16686 GUID TransactionId
;
16687 GUID ResourceManagerId
;
16688 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
16690 typedef struct _ENLISTMENT_CRM_INFORMATION
{
16691 GUID CrmTransactionManagerId
;
16692 GUID CrmResourceManagerId
;
16693 GUID CrmEnlistmentId
;
16694 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
16696 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
16697 EnlistmentBasicInformation
,
16698 EnlistmentRecoveryInformation
,
16699 EnlistmentCrmInformation
16700 } ENLISTMENT_INFORMATION_CLASS
;
16702 typedef struct _TRANSACTION_LIST_ENTRY
{
16703 #if defined(__cplusplus)
16708 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
16710 typedef struct _TRANSACTION_LIST_INFORMATION
{
16711 ULONG NumberOfTransactions
;
16712 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
16713 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
16716 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
16717 _Out_ PHANDLE TransactionHandle
,
16718 _In_ ACCESS_MASK DesiredAccess
,
16719 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16720 _In_opt_ LPGUID Uow
,
16721 _In_opt_ HANDLE TmHandle
,
16722 _In_opt_ ULONG CreateOptions
,
16723 _In_opt_ ULONG IsolationLevel
,
16724 _In_opt_ ULONG IsolationFlags
,
16725 _In_opt_ PLARGE_INTEGER Timeout
,
16726 _In_opt_ PUNICODE_STRING Description
);
16729 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
16730 _Out_ PHANDLE TransactionHandle
,
16731 _In_ ACCESS_MASK DesiredAccess
,
16732 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16733 _In_opt_ LPGUID Uow
,
16734 _In_opt_ HANDLE TmHandle
);
16737 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
16738 _In_ HANDLE TransactionHandle
,
16739 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16740 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16741 _In_ ULONG TransactionInformationLength
,
16742 _Out_opt_ PULONG ReturnLength
);
16745 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
16746 _In_ HANDLE TransactionHandle
,
16747 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16748 _In_ PVOID TransactionInformation
,
16749 _In_ ULONG TransactionInformationLength
);
16752 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
16753 _In_ HANDLE TransactionHandle
,
16754 _In_ BOOLEAN Wait
);
16757 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
16758 _In_ HANDLE TransactionHandle
,
16759 _In_ BOOLEAN Wait
);
16761 #if (NTDDI_VERSION >= NTDDI_VISTA)
16763 _Must_inspect_result_
16764 _IRQL_requires_max_ (APC_LEVEL
)
16769 NtCreateTransactionManager(
16770 _Out_ PHANDLE TmHandle
,
16771 _In_ ACCESS_MASK DesiredAccess
,
16772 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16773 _In_opt_ PUNICODE_STRING LogFileName
,
16774 _In_opt_ ULONG CreateOptions
,
16775 _In_opt_ ULONG CommitStrength
);
16777 _Must_inspect_result_
16778 _IRQL_requires_max_ (APC_LEVEL
)
16783 NtOpenTransactionManager(
16784 _Out_ PHANDLE TmHandle
,
16785 _In_ ACCESS_MASK DesiredAccess
,
16786 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16787 _In_opt_ PUNICODE_STRING LogFileName
,
16788 _In_opt_ LPGUID TmIdentity
,
16789 _In_opt_ ULONG OpenOptions
);
16791 _Must_inspect_result_
16792 _IRQL_requires_max_ (APC_LEVEL
)
16797 NtRenameTransactionManager(
16798 _In_ PUNICODE_STRING LogFileName
,
16799 _In_ LPGUID ExistingTransactionManagerGuid
);
16801 _Must_inspect_result_
16802 _IRQL_requires_max_ (APC_LEVEL
)
16807 NtRollforwardTransactionManager(
16808 _In_ HANDLE TransactionManagerHandle
,
16809 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
16811 _Must_inspect_result_
16812 _IRQL_requires_max_ (APC_LEVEL
)
16817 NtRecoverTransactionManager(
16818 _In_ HANDLE TransactionManagerHandle
);
16820 _Must_inspect_result_
16821 _IRQL_requires_max_ (APC_LEVEL
)
16826 NtQueryInformationTransactionManager(
16827 _In_ HANDLE TransactionManagerHandle
,
16828 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16829 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16830 _In_ ULONG TransactionManagerInformationLength
,
16831 _Out_ PULONG ReturnLength
);
16833 _Must_inspect_result_
16834 _IRQL_requires_max_ (APC_LEVEL
)
16839 NtSetInformationTransactionManager(
16840 _In_opt_ HANDLE TmHandle
,
16841 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
16842 _In_reads_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
16843 _In_ ULONG TransactionManagerInformationLength
);
16845 _Must_inspect_result_
16846 _IRQL_requires_max_ (APC_LEVEL
)
16851 NtEnumerateTransactionObject(
16852 _In_opt_ HANDLE RootObjectHandle
,
16853 _In_ KTMOBJECT_TYPE QueryType
,
16854 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
16855 _In_ ULONG ObjectCursorLength
,
16856 _Out_ PULONG ReturnLength
);
16858 _Must_inspect_result_
16859 _IRQL_requires_max_ (APC_LEVEL
)
16864 NtCreateTransaction(
16865 _Out_ PHANDLE TransactionHandle
,
16866 _In_ ACCESS_MASK DesiredAccess
,
16867 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16868 _In_opt_ LPGUID Uow
,
16869 _In_opt_ HANDLE TmHandle
,
16870 _In_opt_ ULONG CreateOptions
,
16871 _In_opt_ ULONG IsolationLevel
,
16872 _In_opt_ ULONG IsolationFlags
,
16873 _In_opt_ PLARGE_INTEGER Timeout
,
16874 _In_opt_ PUNICODE_STRING Description
);
16876 _Must_inspect_result_
16877 _IRQL_requires_max_ (APC_LEVEL
)
16883 _Out_ PHANDLE TransactionHandle
,
16884 _In_ ACCESS_MASK DesiredAccess
,
16885 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16887 _In_opt_ HANDLE TmHandle
);
16889 _Must_inspect_result_
16890 _IRQL_requires_max_ (APC_LEVEL
)
16895 NtQueryInformationTransaction(
16896 _In_ HANDLE TransactionHandle
,
16897 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16898 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16899 _In_ ULONG TransactionInformationLength
,
16900 _Out_opt_ PULONG ReturnLength
);
16902 _Must_inspect_result_
16903 _IRQL_requires_max_ (APC_LEVEL
)
16908 NtSetInformationTransaction(
16909 _In_ HANDLE TransactionHandle
,
16910 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16911 _In_reads_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16912 _In_ ULONG TransactionInformationLength
);
16914 _IRQL_requires_max_ (APC_LEVEL
)
16919 NtCommitTransaction(
16920 _In_ HANDLE TransactionHandle
,
16921 _In_ BOOLEAN Wait
);
16923 _IRQL_requires_max_ (APC_LEVEL
)
16928 NtRollbackTransaction(
16929 _In_ HANDLE TransactionHandle
,
16930 _In_ BOOLEAN Wait
);
16932 _Must_inspect_result_
16933 _IRQL_requires_max_ (APC_LEVEL
)
16938 NtCreateEnlistment(
16939 _Out_ PHANDLE EnlistmentHandle
,
16940 _In_ ACCESS_MASK DesiredAccess
,
16941 _In_ HANDLE ResourceManagerHandle
,
16942 _In_ HANDLE TransactionHandle
,
16943 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16944 _In_opt_ ULONG CreateOptions
,
16945 _In_ NOTIFICATION_MASK NotificationMask
,
16946 _In_opt_ PVOID EnlistmentKey
);
16948 _Must_inspect_result_
16949 _IRQL_requires_max_ (APC_LEVEL
)
16955 _Out_ PHANDLE EnlistmentHandle
,
16956 _In_ ACCESS_MASK DesiredAccess
,
16957 _In_ HANDLE ResourceManagerHandle
,
16958 _In_ LPGUID EnlistmentGuid
,
16959 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
16961 _Must_inspect_result_
16962 _IRQL_requires_max_ (APC_LEVEL
)
16967 NtQueryInformationEnlistment(
16968 _In_ HANDLE EnlistmentHandle
,
16969 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16970 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16971 _In_ ULONG EnlistmentInformationLength
,
16972 _Out_ PULONG ReturnLength
);
16974 _Must_inspect_result_
16975 _IRQL_requires_max_ (APC_LEVEL
)
16980 NtSetInformationEnlistment(
16981 _In_opt_ HANDLE EnlistmentHandle
,
16982 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
16983 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
16984 _In_ ULONG EnlistmentInformationLength
);
16986 _Must_inspect_result_
16987 _IRQL_requires_max_ (APC_LEVEL
)
16992 NtRecoverEnlistment(
16993 _In_ HANDLE EnlistmentHandle
,
16994 _In_opt_ PVOID EnlistmentKey
);
16996 _Must_inspect_result_
16997 _IRQL_requires_max_ (APC_LEVEL
)
17002 NtPrePrepareEnlistment(
17003 _In_ HANDLE EnlistmentHandle
,
17004 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17006 _Must_inspect_result_
17007 _IRQL_requires_max_ (APC_LEVEL
)
17012 NtPrepareEnlistment(
17013 _In_ HANDLE EnlistmentHandle
,
17014 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17016 _Must_inspect_result_
17017 _IRQL_requires_max_ (APC_LEVEL
)
17022 NtCommitEnlistment(
17023 _In_ HANDLE EnlistmentHandle
,
17024 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17026 _IRQL_requires_max_ (APC_LEVEL
)
17031 NtRollbackEnlistment(
17032 _In_ HANDLE EnlistmentHandle
,
17033 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17035 _IRQL_requires_max_ (APC_LEVEL
)
17040 NtPrePrepareComplete(
17041 _In_ HANDLE EnlistmentHandle
,
17042 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17044 _IRQL_requires_max_ (APC_LEVEL
)
17050 _In_ HANDLE EnlistmentHandle
,
17051 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17053 _IRQL_requires_max_ (APC_LEVEL
)
17059 _In_ HANDLE EnlistmentHandle
,
17060 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17062 _IRQL_requires_max_ (APC_LEVEL
)
17067 NtReadOnlyEnlistment(
17068 _In_ HANDLE EnlistmentHandle
,
17069 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17071 _IRQL_requires_max_ (APC_LEVEL
)
17076 NtRollbackComplete(
17077 _In_ HANDLE EnlistmentHandle
,
17078 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17080 _IRQL_requires_max_ (APC_LEVEL
)
17085 NtSinglePhaseReject(
17086 _In_ HANDLE EnlistmentHandle
,
17087 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17089 _Must_inspect_result_
17090 _IRQL_requires_max_ (APC_LEVEL
)
17095 NtCreateResourceManager(
17096 _Out_ PHANDLE ResourceManagerHandle
,
17097 _In_ ACCESS_MASK DesiredAccess
,
17098 _In_ HANDLE TmHandle
,
17099 _In_ LPGUID RmGuid
,
17100 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17101 _In_opt_ ULONG CreateOptions
,
17102 _In_opt_ PUNICODE_STRING Description
);
17104 _Must_inspect_result_
17105 _IRQL_requires_max_ (APC_LEVEL
)
17110 NtOpenResourceManager(
17111 _Out_ PHANDLE ResourceManagerHandle
,
17112 _In_ ACCESS_MASK DesiredAccess
,
17113 _In_ HANDLE TmHandle
,
17114 _In_opt_ LPGUID ResourceManagerGuid
,
17115 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17117 _Must_inspect_result_
17118 _IRQL_requires_max_ (APC_LEVEL
)
17123 NtRecoverResourceManager(
17124 _In_ HANDLE ResourceManagerHandle
);
17126 _Must_inspect_result_
17127 _IRQL_requires_max_ (APC_LEVEL
)
17132 NtGetNotificationResourceManager(
17133 _In_ HANDLE ResourceManagerHandle
,
17134 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17135 _In_ ULONG NotificationLength
,
17136 _In_opt_ PLARGE_INTEGER Timeout
,
17137 _Out_opt_ PULONG ReturnLength
,
17138 _In_ ULONG Asynchronous
,
17139 _In_opt_ ULONG_PTR AsynchronousContext
);
17141 _Must_inspect_result_
17142 _IRQL_requires_max_ (APC_LEVEL
)
17147 NtQueryInformationResourceManager(
17148 _In_ HANDLE ResourceManagerHandle
,
17149 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17150 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17151 _In_ ULONG ResourceManagerInformationLength
,
17152 _Out_opt_ PULONG ReturnLength
);
17154 _Must_inspect_result_
17155 _IRQL_requires_max_ (APC_LEVEL
)
17160 NtSetInformationResourceManager(
17161 _In_ HANDLE ResourceManagerHandle
,
17162 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17163 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17164 _In_ ULONG ResourceManagerInformationLength
);
17166 _Must_inspect_result_
17167 _IRQL_requires_max_ (APC_LEVEL
)
17172 NtRegisterProtocolAddressInformation(
17173 _In_ HANDLE ResourceManager
,
17174 _In_ PCRM_PROTOCOL_ID ProtocolId
,
17175 _In_ ULONG ProtocolInformationSize
,
17176 _In_ PVOID ProtocolInformation
,
17177 _In_opt_ ULONG CreateOptions
);
17179 _IRQL_requires_max_ (APC_LEVEL
)
17184 NtPropagationComplete(
17185 _In_ HANDLE ResourceManagerHandle
,
17186 _In_ ULONG RequestCookie
,
17187 _In_ ULONG BufferLength
,
17188 _In_ PVOID Buffer
);
17190 _IRQL_requires_max_ (APC_LEVEL
)
17195 NtPropagationFailed(
17196 _In_ HANDLE ResourceManagerHandle
,
17197 _In_ ULONG RequestCookie
,
17198 _In_ NTSTATUS PropStatus
);
17200 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
17202 #endif /* !_NTTMAPI_ */
17203 /******************************************************************************
17204 * ZwXxx Functions *
17205 ******************************************************************************/
17209 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
17210 #define ZwCurrentProcess() NtCurrentProcess()
17211 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
17212 #define ZwCurrentThread() NtCurrentThread()
17215 #if (NTDDI_VERSION >= NTDDI_WIN2K)
17217 _IRQL_requires_max_(PASSIVE_LEVEL
)
17222 _In_ HANDLE Handle
);
17224 _IRQL_requires_max_(PASSIVE_LEVEL
)
17228 ZwCreateDirectoryObject(
17229 _Out_ PHANDLE DirectoryHandle
,
17230 _In_ ACCESS_MASK DesiredAccess
,
17231 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17233 _IRQL_requires_max_(PASSIVE_LEVEL
)
17238 _Out_ PHANDLE FileHandle
,
17239 _In_ ACCESS_MASK DesiredAccess
,
17240 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17241 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17242 _In_opt_ PLARGE_INTEGER AllocationSize
,
17243 _In_ ULONG FileAttributes
,
17244 _In_ ULONG ShareAccess
,
17245 _In_ ULONG CreateDisposition
,
17246 _In_ ULONG CreateOptions
,
17247 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
17248 _In_ ULONG EaLength
17251 _IRQL_requires_max_(PASSIVE_LEVEL
)
17256 _Out_ PHANDLE KeyHandle
,
17257 _In_ ACCESS_MASK DesiredAccess
,
17258 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17259 _Reserved_ ULONG TitleIndex
,
17260 _In_opt_ PUNICODE_STRING Class
,
17261 _In_ ULONG CreateOptions
,
17262 _Out_opt_ PULONG Disposition
);
17264 _IRQL_requires_max_(APC_LEVEL
)
17269 _Out_ PHANDLE SectionHandle
,
17270 _In_ ACCESS_MASK DesiredAccess
,
17271 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17272 _In_opt_ PLARGE_INTEGER MaximumSize
,
17273 _In_ ULONG SectionPageProtection
,
17274 _In_ ULONG AllocationAttributes
,
17275 _In_opt_ HANDLE FileHandle
);
17277 _IRQL_requires_max_(PASSIVE_LEVEL
)
17282 _In_ HANDLE KeyHandle
);
17284 _IRQL_requires_max_(PASSIVE_LEVEL
)
17289 _In_ HANDLE KeyHandle
,
17290 _In_ PUNICODE_STRING ValueName
);
17292 _IRQL_requires_max_(PASSIVE_LEVEL
)
17293 _When_(Length
== 0, _Post_satisfies_(return < 0))
17294 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17299 _In_ HANDLE KeyHandle
,
17301 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
17302 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
17304 _Out_ PULONG ResultLength
);
17306 _IRQL_requires_max_(PASSIVE_LEVEL
)
17307 _When_(Length
== 0, _Post_satisfies_(return < 0))
17308 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17312 ZwEnumerateValueKey(
17313 _In_ HANDLE KeyHandle
,
17315 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
17316 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
17318 _Out_ PULONG ResultLength
);
17320 _IRQL_requires_max_(PASSIVE_LEVEL
)
17325 _In_ HANDLE KeyHandle
);
17327 _IRQL_requires_max_(PASSIVE_LEVEL
)
17332 _In_ PUNICODE_STRING DriverServiceName
);
17334 _IRQL_requires_max_(PASSIVE_LEVEL
)
17338 ZwMakeTemporaryObject(
17339 _In_ HANDLE Handle
);
17341 _IRQL_requires_max_(PASSIVE_LEVEL
)
17345 ZwMapViewOfSection(
17346 _In_ HANDLE SectionHandle
,
17347 _In_ HANDLE ProcessHandle
,
17348 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
17349 _In_ ULONG_PTR ZeroBits
,
17350 _In_ SIZE_T CommitSize
,
17351 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
17352 _Inout_ PSIZE_T ViewSize
,
17353 _In_ SECTION_INHERIT InheritDisposition
,
17354 _In_ ULONG AllocationType
,
17355 _In_ ULONG Protect
);
17357 _IRQL_requires_max_(PASSIVE_LEVEL
)
17362 _Out_ PHANDLE FileHandle
,
17363 _In_ ACCESS_MASK DesiredAccess
,
17364 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17365 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17366 _In_ ULONG ShareAccess
,
17367 _In_ ULONG OpenOptions
);
17369 _IRQL_requires_max_(PASSIVE_LEVEL
)
17374 _Out_ PHANDLE KeyHandle
,
17375 _In_ ACCESS_MASK DesiredAccess
,
17376 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17378 _IRQL_requires_max_(PASSIVE_LEVEL
)
17383 _Out_ PHANDLE SectionHandle
,
17384 _In_ ACCESS_MASK DesiredAccess
,
17385 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17387 _IRQL_requires_max_(PASSIVE_LEVEL
)
17391 ZwOpenSymbolicLinkObject(
17392 _Out_ PHANDLE LinkHandle
,
17393 _In_ ACCESS_MASK DesiredAccess
,
17394 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17396 _IRQL_requires_max_(PASSIVE_LEVEL
)
17400 ZwQueryInformationFile(
17401 _In_ HANDLE FileHandle
,
17402 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17403 _Out_writes_bytes_(Length
) PVOID FileInformation
,
17405 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
17407 _IRQL_requires_max_(PASSIVE_LEVEL
)
17408 _When_(Length
== 0, _Post_satisfies_(return < 0))
17409 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17414 _In_ HANDLE KeyHandle
,
17415 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
17416 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
17418 _Out_ PULONG ResultLength
);
17420 _IRQL_requires_max_(PASSIVE_LEVEL
)
17424 ZwQuerySymbolicLinkObject(
17425 _In_ HANDLE LinkHandle
,
17426 _Inout_ PUNICODE_STRING LinkTarget
,
17427 _Out_opt_ PULONG ReturnedLength
);
17429 _IRQL_requires_max_(PASSIVE_LEVEL
)
17430 _When_(Length
== 0, _Post_satisfies_(return < 0))
17431 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17436 _In_ HANDLE KeyHandle
,
17437 _In_ PUNICODE_STRING ValueName
,
17438 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
17439 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
17441 _Out_ PULONG ResultLength
);
17443 _IRQL_requires_max_(PASSIVE_LEVEL
)
17448 _In_ HANDLE FileHandle
,
17449 _In_opt_ HANDLE Event
,
17450 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17451 _In_opt_ PVOID ApcContext
,
17452 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17453 _Out_writes_bytes_(Length
) PVOID Buffer
,
17455 _In_opt_ PLARGE_INTEGER ByteOffset
,
17456 _In_opt_ PULONG Key
);
17458 _IRQL_requires_max_(PASSIVE_LEVEL
)
17462 ZwSetInformationFile(
17463 _In_ HANDLE FileHandle
,
17464 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17465 _In_reads_bytes_(Length
) PVOID FileInformation
,
17467 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
17469 _IRQL_requires_max_(PASSIVE_LEVEL
)
17474 _In_ HANDLE KeyHandle
,
17475 _In_ PUNICODE_STRING ValueName
,
17476 _In_opt_ ULONG TitleIndex
,
17478 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
17479 _In_ ULONG DataSize
);
17481 _IRQL_requires_max_(PASSIVE_LEVEL
)
17486 _In_ PUNICODE_STRING DriverServiceName
);
17488 _IRQL_requires_max_(PASSIVE_LEVEL
)
17492 ZwUnmapViewOfSection(
17493 _In_ HANDLE ProcessHandle
,
17494 _In_opt_ PVOID BaseAddress
);
17496 _IRQL_requires_max_(PASSIVE_LEVEL
)
17501 _In_ HANDLE FileHandle
,
17502 _In_opt_ HANDLE Event
,
17503 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17504 _In_opt_ PVOID ApcContext
,
17505 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17506 _In_reads_bytes_(Length
) PVOID Buffer
,
17508 _In_opt_ PLARGE_INTEGER ByteOffset
,
17509 _In_opt_ PULONG Key
);
17511 _IRQL_requires_max_(PASSIVE_LEVEL
)
17515 ZwQueryFullAttributesFile(
17516 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17517 _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
17519 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
17522 #if (NTDDI_VERSION >= NTDDI_WS03)
17523 _IRQL_requires_max_(PASSIVE_LEVEL
)
17528 _Out_ PHANDLE EventHandle
,
17529 _In_ ACCESS_MASK DesiredAccess
,
17530 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17533 #if (NTDDI_VERSION >= NTDDI_VISTA)
17535 _IRQL_requires_max_(PASSIVE_LEVEL
)
17538 ZwCreateKeyTransacted(
17539 _Out_ PHANDLE KeyHandle
,
17540 _In_ ACCESS_MASK DesiredAccess
,
17541 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17542 _Reserved_ ULONG TitleIndex
,
17543 _In_opt_ PUNICODE_STRING Class
,
17544 _In_ ULONG CreateOptions
,
17545 _In_ HANDLE TransactionHandle
,
17546 _Out_opt_ PULONG Disposition
);
17548 _IRQL_requires_max_(PASSIVE_LEVEL
)
17552 ZwOpenKeyTransacted(
17553 _Out_ PHANDLE KeyHandle
,
17554 _In_ ACCESS_MASK DesiredAccess
,
17555 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17556 _In_ HANDLE TransactionHandle
);
17558 _IRQL_requires_max_(PASSIVE_LEVEL
)
17562 ZwCreateTransactionManager(
17563 _Out_ PHANDLE TmHandle
,
17564 _In_ ACCESS_MASK DesiredAccess
,
17565 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17566 _In_opt_ PUNICODE_STRING LogFileName
,
17567 _In_opt_ ULONG CreateOptions
,
17568 _In_opt_ ULONG CommitStrength
);
17570 _IRQL_requires_max_(PASSIVE_LEVEL
)
17574 ZwOpenTransactionManager(
17575 _Out_ PHANDLE TmHandle
,
17576 _In_ ACCESS_MASK DesiredAccess
,
17577 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17578 _In_opt_ PUNICODE_STRING LogFileName
,
17579 _In_opt_ LPGUID TmIdentity
,
17580 _In_opt_ ULONG OpenOptions
);
17582 _IRQL_requires_max_(PASSIVE_LEVEL
)
17586 ZwRollforwardTransactionManager(
17587 _In_ HANDLE TransactionManagerHandle
,
17588 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17590 _IRQL_requires_max_(PASSIVE_LEVEL
)
17594 ZwRecoverTransactionManager(
17595 _In_ HANDLE TransactionManagerHandle
);
17597 _IRQL_requires_max_(PASSIVE_LEVEL
)
17601 ZwQueryInformationTransactionManager(
17602 _In_ HANDLE TransactionManagerHandle
,
17603 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17604 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17605 _In_ ULONG TransactionManagerInformationLength
,
17606 _Out_opt_ PULONG ReturnLength
);
17608 _IRQL_requires_max_(PASSIVE_LEVEL
)
17612 ZwSetInformationTransactionManager(
17613 _In_ HANDLE TmHandle
,
17614 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17615 _In_ PVOID TransactionManagerInformation
,
17616 _In_ ULONG TransactionManagerInformationLength
);
17618 _IRQL_requires_max_(PASSIVE_LEVEL
)
17622 ZwEnumerateTransactionObject(
17623 _In_opt_ HANDLE RootObjectHandle
,
17624 _In_ KTMOBJECT_TYPE QueryType
,
17625 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
17626 _In_ ULONG ObjectCursorLength
,
17627 _Out_ PULONG ReturnLength
);
17629 _IRQL_requires_max_(PASSIVE_LEVEL
)
17633 ZwCreateTransaction(
17634 _Out_ PHANDLE TransactionHandle
,
17635 _In_ ACCESS_MASK DesiredAccess
,
17636 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17637 _In_opt_ LPGUID Uow
,
17638 _In_opt_ HANDLE TmHandle
,
17639 _In_opt_ ULONG CreateOptions
,
17640 _In_opt_ ULONG IsolationLevel
,
17641 _In_opt_ ULONG IsolationFlags
,
17642 _In_opt_ PLARGE_INTEGER Timeout
,
17643 _In_opt_ PUNICODE_STRING Description
);
17645 _IRQL_requires_max_(PASSIVE_LEVEL
)
17650 _Out_ PHANDLE TransactionHandle
,
17651 _In_ ACCESS_MASK DesiredAccess
,
17652 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17654 _In_opt_ HANDLE TmHandle
);
17656 _IRQL_requires_max_(PASSIVE_LEVEL
)
17660 ZwQueryInformationTransaction(
17661 _In_ HANDLE TransactionHandle
,
17662 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17663 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17664 _In_ ULONG TransactionInformationLength
,
17665 _Out_opt_ PULONG ReturnLength
);
17667 _IRQL_requires_max_(PASSIVE_LEVEL
)
17671 ZwSetInformationTransaction(
17672 _In_ HANDLE TransactionHandle
,
17673 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17674 _In_ PVOID TransactionInformation
,
17675 _In_ ULONG TransactionInformationLength
);
17677 _IRQL_requires_max_(PASSIVE_LEVEL
)
17681 ZwCommitTransaction(
17682 _In_ HANDLE TransactionHandle
,
17683 _In_ BOOLEAN Wait
);
17685 _IRQL_requires_max_(PASSIVE_LEVEL
)
17689 ZwRollbackTransaction(
17690 _In_ HANDLE TransactionHandle
,
17691 _In_ BOOLEAN Wait
);
17693 _IRQL_requires_max_(PASSIVE_LEVEL
)
17697 ZwCreateResourceManager(
17698 _Out_ PHANDLE ResourceManagerHandle
,
17699 _In_ ACCESS_MASK DesiredAccess
,
17700 _In_ HANDLE TmHandle
,
17701 _In_opt_ LPGUID ResourceManagerGuid
,
17702 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17703 _In_opt_ ULONG CreateOptions
,
17704 _In_opt_ PUNICODE_STRING Description
);
17706 _IRQL_requires_max_(PASSIVE_LEVEL
)
17710 ZwOpenResourceManager(
17711 _Out_ PHANDLE ResourceManagerHandle
,
17712 _In_ ACCESS_MASK DesiredAccess
,
17713 _In_ HANDLE TmHandle
,
17714 _In_ LPGUID ResourceManagerGuid
,
17715 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17717 _IRQL_requires_max_(PASSIVE_LEVEL
)
17721 ZwRecoverResourceManager(
17722 _In_ HANDLE ResourceManagerHandle
);
17724 _IRQL_requires_max_(PASSIVE_LEVEL
)
17728 ZwGetNotificationResourceManager(
17729 _In_ HANDLE ResourceManagerHandle
,
17730 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17731 _In_ ULONG NotificationLength
,
17732 _In_ PLARGE_INTEGER Timeout
,
17733 _Out_opt_ PULONG ReturnLength
,
17734 _In_ ULONG Asynchronous
,
17735 _In_opt_ ULONG_PTR AsynchronousContext
);
17737 _IRQL_requires_max_(PASSIVE_LEVEL
)
17741 ZwQueryInformationResourceManager(
17742 _In_ HANDLE ResourceManagerHandle
,
17743 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17744 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17745 _In_ ULONG ResourceManagerInformationLength
,
17746 _Out_opt_ PULONG ReturnLength
);
17748 _IRQL_requires_max_(PASSIVE_LEVEL
)
17752 ZwSetInformationResourceManager(
17753 _In_ HANDLE ResourceManagerHandle
,
17754 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17755 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17756 _In_ ULONG ResourceManagerInformationLength
);
17758 _IRQL_requires_max_(PASSIVE_LEVEL
)
17762 ZwCreateEnlistment(
17763 _Out_ PHANDLE EnlistmentHandle
,
17764 _In_ ACCESS_MASK DesiredAccess
,
17765 _In_ HANDLE ResourceManagerHandle
,
17766 _In_ HANDLE TransactionHandle
,
17767 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17768 _In_opt_ ULONG CreateOptions
,
17769 _In_ NOTIFICATION_MASK NotificationMask
,
17770 _In_opt_ PVOID EnlistmentKey
);
17772 _IRQL_requires_max_(PASSIVE_LEVEL
)
17777 _Out_ PHANDLE EnlistmentHandle
,
17778 _In_ ACCESS_MASK DesiredAccess
,
17779 _In_ HANDLE RmHandle
,
17780 _In_ LPGUID EnlistmentGuid
,
17781 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17783 _IRQL_requires_max_(PASSIVE_LEVEL
)
17787 ZwQueryInformationEnlistment(
17788 _In_ HANDLE EnlistmentHandle
,
17789 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17790 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17791 _In_ ULONG EnlistmentInformationLength
,
17792 _Out_opt_ PULONG ReturnLength
);
17794 _IRQL_requires_max_(PASSIVE_LEVEL
)
17798 ZwSetInformationEnlistment(
17799 _In_ HANDLE EnlistmentHandle
,
17800 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17801 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17802 _In_ ULONG EnlistmentInformationLength
);
17804 _IRQL_requires_max_(PASSIVE_LEVEL
)
17808 ZwRecoverEnlistment(
17809 _In_ HANDLE EnlistmentHandle
,
17810 _In_opt_ PVOID EnlistmentKey
);
17812 _IRQL_requires_max_(PASSIVE_LEVEL
)
17816 ZwPrePrepareEnlistment(
17817 _In_ HANDLE EnlistmentHandle
,
17818 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17820 _IRQL_requires_max_(PASSIVE_LEVEL
)
17824 ZwPrepareEnlistment(
17825 _In_ HANDLE EnlistmentHandle
,
17826 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17828 _IRQL_requires_max_(PASSIVE_LEVEL
)
17832 ZwCommitEnlistment(
17833 _In_ HANDLE EnlistmentHandle
,
17834 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17836 _IRQL_requires_max_(PASSIVE_LEVEL
)
17840 ZwRollbackEnlistment(
17841 _In_ HANDLE EnlistmentHandle
,
17842 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17844 _IRQL_requires_max_(PASSIVE_LEVEL
)
17848 ZwPrePrepareComplete(
17849 _In_ HANDLE EnlistmentHandle
,
17850 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17852 _IRQL_requires_max_(PASSIVE_LEVEL
)
17857 _In_ HANDLE EnlistmentHandle
,
17858 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17860 _IRQL_requires_max_(PASSIVE_LEVEL
)
17865 _In_ HANDLE EnlistmentHandle
,
17866 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17868 _IRQL_requires_max_(PASSIVE_LEVEL
)
17872 ZwReadOnlyEnlistment(
17873 _In_ HANDLE EnlistmentHandle
,
17874 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17879 ZwRollbackComplete(
17880 _In_ HANDLE EnlistmentHandle
,
17881 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17886 ZwSinglePhaseReject(
17887 _In_ HANDLE EnlistmentHandle
,
17888 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17889 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
17890 #if (NTDDI_VERSION >= NTDDI_WIN7)
17892 _IRQL_requires_max_(PASSIVE_LEVEL
)
17897 _Out_ PHANDLE KeyHandle
,
17898 _In_ ACCESS_MASK DesiredAccess
,
17899 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17900 _In_ ULONG OpenOptions
);
17902 _IRQL_requires_max_(PASSIVE_LEVEL
)
17906 ZwOpenKeyTransactedEx(
17907 _Out_ PHANDLE KeyHandle
,
17908 _In_ ACCESS_MASK DesiredAccess
,
17909 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17910 _In_ ULONG OpenOptions
,
17911 _In_ HANDLE TransactionHandle
);
17916 ZwNotifyChangeMultipleKeys(
17917 _In_ HANDLE MasterKeyHandle
,
17918 _In_opt_ ULONG Count
,
17919 _In_opt_ OBJECT_ATTRIBUTES SubordinateObjects
[],
17920 _In_opt_ HANDLE Event
,
17921 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17922 _In_opt_ PVOID ApcContext
,
17923 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17924 _In_ ULONG CompletionFilter
,
17925 _In_ BOOLEAN WatchTree
,
17926 _Out_opt_ PVOID Buffer
,
17927 _In_ ULONG BufferSize
,
17928 _In_ BOOLEAN Asynchronous
);
17933 ZwQueryMultipleValueKey(
17934 _In_ HANDLE KeyHandle
,
17935 _Inout_ PKEY_VALUE_ENTRY ValueEntries
,
17936 _In_ ULONG EntryCount
,
17937 _Out_ PVOID ValueBuffer
,
17938 _Inout_ PULONG BufferLength
,
17939 _Out_opt_ PULONG RequiredBufferLength
);
17941 _IRQL_requires_max_(PASSIVE_LEVEL
)
17946 _In_ HANDLE KeyHandle
,
17947 _In_ PUNICODE_STRING NewName
);
17949 _IRQL_requires_max_(PASSIVE_LEVEL
)
17953 ZwSetInformationKey(
17954 _In_ HANDLE KeyHandle
,
17955 _In_
__drv_strictTypeMatch(__drv_typeConst
) KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
17956 _In_reads_bytes_(KeySetInformationLength
) PVOID KeySetInformation
,
17957 _In_ ULONG KeySetInformationLength
);
17959 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
17966 #endif /* !_WDMDDK_ */