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>
55 #endif /* _INC_STRING */
61 typedef GUID UOW
, *PUOW
;
66 #if (NTDDI_VERSION >= NTDDI_WINXP)
72 __internal_kernel_driver
73 __drv_Mode_impl(WDM_INCLUDED
)
80 #if !defined(_NTHALDLL_) && !defined(_BLDR_)
81 #define NTHALAPI DECLSPEC_IMPORT
87 #if !defined(_NTOSKRNL_) && !defined(_BLDR_) && !defined(_NTSYSTEM_)
88 #define NTKERNELAPI DECLSPEC_IMPORT
96 #if defined(_X86_) && !defined(_NTHAL_)
97 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
99 #define _DECL_HAL_KE_IMPORT
101 #define _DECL_HAL_KE_IMPORT NTKERNELAPI
105 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
107 #define POINTER_ALIGNMENT
110 /* Helper macro to enable gcc's extension. */
111 #ifndef __GNU_EXTENSION
113 #define __GNU_EXTENSION __extension__
115 #define __GNU_EXTENSION
119 #if defined(_MSC_VER)
121 /* Disable some warnings */
122 #pragma warning(disable:4115) /* Named type definition in parentheses */
123 #pragma warning(disable:4201) /* Nameless unions and structs */
124 #pragma warning(disable:4214) /* Bit fields of other types than int */
125 #pragma warning(disable:4820) /* Padding added, due to alignment requirement */
127 /* Indicate if #pragma alloc_text() is supported */
128 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
129 #define ALLOC_PRAGMA 1
132 /* Indicate if #pragma data_seg() is supported */
133 #if defined(_M_IX86) || defined(_M_AMD64)
134 #define ALLOC_DATA_PRAGMA 1
137 #endif /* _MSC_VER */
139 /* These macros are used to create aliases for imported data. We need to do
140 this to have declarations that are compatible with MS DDK */
142 #define __SYMBOL(_Name) "_"#_Name
143 #define __IMPORTSYMBOL(_Name) "__imp__"#_Name
144 #define __IMPORTNAME(_Name) __imp__##_Name
146 #define __SYMBOL(_Name) #_Name
147 #define __IMPORTSYMBOL(_Name) "__imp_"#_Name
148 #define __IMPORTNAME(_Name) __imp_##_Name
151 #define __CREATE_NTOS_DATA_IMPORT_ALIAS(_Name) \
152 __pragma(comment(linker, "/alternatename:"__SYMBOL(_Name) "=" __IMPORTSYMBOL(_Name)))
153 #else /* !_MSC_VER */
155 #define __STRINGIFY(_exp) #_exp
157 #define _Pragma_redefine_extname(_Name, _Target) _Pragma(__STRINGIFY(redefine_extname _Name _Target))
158 #define __CREATE_NTOS_DATA_IMPORT_ALIAS(_Name) \
159 _Pragma_redefine_extname(_Name,__IMPORTNAME(_Name))
163 #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_)
164 #define USE_DMA_MACROS
166 #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__)
167 #define NO_LEGACY_DRIVERS
169 #endif /* defined(_WIN64) */
171 /* Forward declarations */
178 struct _DEVICE_OBJECT
;
179 struct _DRIVER_OBJECT
;
180 struct _IO_STATUS_BLOCK
;
181 struct _DEVICE_DESCRIPTION
;
182 struct _SCATTER_GATHER_LIST
;
183 struct _DRIVE_LAYOUT_INFORMATION
;
184 struct _COMPRESSED_DATA_INFO
;
185 struct _IO_RESOURCE_DESCRIPTOR
;
187 /* Structures not exposed to drivers */
188 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
189 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
190 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
191 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
192 typedef struct _EPROCESS
*PEPROCESS
;
193 typedef struct _ETHREAD
*PETHREAD
;
194 typedef struct _IO_TIMER
*PIO_TIMER
;
195 typedef struct _KINTERRUPT
*PKINTERRUPT
;
196 typedef struct _KPROCESS
*PKPROCESS
;
197 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
198 typedef struct _CONTEXT
*PCONTEXT
;
200 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_)
201 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
202 #elif defined(_WDM_INCLUDED_)
203 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
205 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
208 #ifndef DEFINE_GUIDEX
210 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
212 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
214 #endif /* DEFINE_GUIDEX */
217 #define STATICGUIDOF(guid) STATIC_##guid
220 /* GUID Comparison */
221 #ifndef __IID_ALIGNED__
222 #define __IID_ALIGNED__
224 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
226 return ( (*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) &&
227 (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)) );
230 #define IsEqualGUIDAligned(guid1, guid2) \
231 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
232 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
233 #endif /* __cplusplus */
234 #endif /* !__IID_ALIGNED__ */
237 /******************************************************************************
238 * INTERLOCKED Functions *
239 ******************************************************************************/
241 #define BitScanForward _BitScanForward
242 #define BitScanReverse _BitScanReverse
243 #define BitTest _bittest
244 #define BitTestAndComplement _bittestandcomplement
245 #define BitTestAndSet _bittestandset
246 #define BitTestAndReset _bittestandreset
248 #define BitScanForward64 _BitScanForward64
249 #define BitScanReverse64 _BitScanReverse64
250 #define BitTest64 _bittest64
251 #define BitTestAndComplement64 _bittestandcomplement64
252 #define BitTestAndSet64 _bittestandset64
253 #define BitTestAndReset64 _bittestandreset64
256 #if defined(_M_ARM) || defined(_M_IA64)
257 #define __ACQ_(x) x##_acq
258 #define __REL_(x) x##_rel
259 #define __NF_(x) x##_nf
266 #define InterlockedBitTestAndSet _interlockedbittestandset
267 #define InterlockedBitTestAndSetAcquire __ACQ_(_interlockedbittestandset)
268 #define InterlockedBitTestAndSetRelease __REL_(_interlockedbittestandset)
269 #define InterlockedBitTestAndSetNoFence __NF_(_interlockedbittestandset)
271 #define InterlockedBitTestAndReset _interlockedbittestandreset
272 #define InterlockedBitTestAndResetAcquire __ACQ_(_interlockedbittestandreset)
273 #define InterlockedBitTestAndResetRelease __REL_(_interlockedbittestandreset)
274 #define InterlockedBitTestAndResetNoFence __NF_(_interlockedbittestandreset)
277 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
278 #define InterlockedBitTestAndSet64Acquire __ACQ_(_interlockedbittestandset64)
279 #define InterlockedBitTestAndSet64Release __REL_(_interlockedbittestandset64)
280 #define InterlockedBitTestAndSet64NoFence __NF_(_interlockedbittestandset64)
282 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
283 #define InterlockedBitTestAndReset64Acquire __ACQ_(_interlockedbittestandreset64)
284 #define InterlockedBitTestAndReset64Release __REL_(_interlockedbittestandreset64)
285 #define InterlockedBitTestAndReset64NoFence __NF_(_interlockedbittestandreset64)
288 #define InterlockedAdd _InterlockedAdd
289 #define InterlockedAddAcquire __ACQ_(_InterlockedAdd)
290 #define InterlockedAddRelease __REL_(_InterlockedAdd)
291 #define InterlockedAddNoFence __NF_(_InterlockedAdd)
293 #define InterlockedAdd64 _InterlockedAdd64
294 #define InterlockedAddAcquire64 __ACQ_(_InterlockedAdd64)
295 #define InterlockedAddRelease64 __REL_(_InterlockedAdd64)
296 #define InterlockedAddNoFence64 __NF_(_InterlockedAdd64)
298 #define InterlockedAnd _InterlockedAnd
299 #define InterlockedAndAcquire __ACQ_(_InterlockedAnd)
300 #define InterlockedAndRelease __REL_(_InterlockedAnd)
301 #define InterlockedAndNoFence __NF_(_InterlockedAnd)
303 #define InterlockedAnd8 _InterlockedAnd8
305 #define InterlockedAndAcquire8 _InterlockedAnd8_acq
306 #define InterlockedAndRelease8 _InterlockedAnd8_rel
307 #define InterlockedAndNoFence8 _InterlockedAnd8_nf
308 #elif defined(_M_IA64)
309 #define InterlockedAnd8Acquire _InterlockedAnd8_acq
310 #define InterlockedAnd8Release _InterlockedAnd8_rel
313 #define InterlockedAnd16 _InterlockedAnd16
315 #define InterlockedAndAcquire16 _InterlockedAnd16_acq
316 #define InterlockedAndRelease16 _InterlockedAnd16_rel
317 #define InterlockedAndNoFence16 _InterlockedAnd16_nf
318 #elif defined(_M_IA64)
319 #define InterlockedAnd16Acquire _InterlockedAnd16_acq
320 #define InterlockedAnd16Release _InterlockedAnd16_rel
323 #define InterlockedAnd64 _InterlockedAnd64
325 #define InterlockedAndAcquire64 __ACQ_(_InterlockedAnd64)
326 #define InterlockedAndRelease64 __REL_(_InterlockedAnd64)
327 #define InterlockedAndNoFence64 __NF_(_InterlockedAnd64)
329 #define InterlockedAnd64Acquire __ACQ_(_InterlockedAnd64)
330 #define InterlockedAnd64Release __REL_(_InterlockedAnd64)
331 #define InterlockedAnd64NoFence __NF_(_InterlockedAnd64)
335 #define InterlockedAndAffinity InterlockedAnd64
337 #define InterlockedAndAffinity InterlockedAnd
340 #define InterlockedCompareExchange _InterlockedCompareExchange
341 #define InterlockedCompareExchangeAcquire __ACQ_(_InterlockedCompareExchange)
342 #define InterlockedCompareExchangeRelease __REL_(_InterlockedCompareExchange)
343 #define InterlockedCompareExchangeNoFence __NF_(_InterlockedCompareExchange)
345 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
346 #define InterlockedCompareExchangeAcquire16 __ACQ_(_InterlockedCompareExchange16)
347 #define InterlockedCompareExchangeRelease16 __REL_(_InterlockedCompareExchange16)
348 #define InterlockedCompareExchangeNoFence16 __NF_(_InterlockedCompareExchange16)
350 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
351 #define InterlockedCompareExchangeAcquire64 __ACQ_(_InterlockedCompareExchange64)
352 #define InterlockedCompareExchangeRelease64 __REL_(_InterlockedCompareExchange64)
353 #define InterlockedCompareExchangeNoFence64 __NF_(_InterlockedCompareExchange64)
356 #define InterlockedCompareExchange128 _InterlockedCompareExchange128
360 #define InterlockedCompare64Exchange128 _InterlockedCompare64Exchange128
361 #define InterlockedCompare64ExchangeAcquire128 _InterlockedCompare64Exchange128_acq
362 #define InterlockedCompare64ExchangeRelease128 _InterlockedCompare64Exchange128_rel
365 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
366 #define InterlockedCompareExchangePointerAcquire __ACQ_(_InterlockedCompareExchangePointer)
367 #define InterlockedCompareExchangePointerRelease __REL_(_InterlockedCompareExchangePointer)
368 #define InterlockedCompareExchangePointerNoFence __NF_(_InterlockedCompareExchangePointer)
370 #define InterlockedDecrement _InterlockedDecrement
371 #define InterlockedDecrementAcquire __ACQ_(_InterlockedDecrement)
372 #define InterlockedDecrementRelease __REL_(_InterlockedDecrement)
373 #define InterlockedDecrementNoFence __NF_(_InterlockedDecrement)
375 #define InterlockedDecrement16 _InterlockedDecrement16
376 #define InterlockedDecrementAcquire16 __ACQ_(_InterlockedDecrement16)
377 #define InterlockedDecrementRelease16 __REL_(_InterlockedDecrement16)
378 #define InterlockedDecrementNoFence16 __NF_(_InterlockedDecrement16)
380 #define InterlockedDecrement64 _InterlockedDecrement64
381 #define InterlockedDecrementAcquire64 __ACQ_(_InterlockedDecrement64)
382 #define InterlockedDecrementRelease64 __REL_(_InterlockedDecrement64)
383 #define InterlockedDecrementNoFence64 __NF_(_InterlockedDecrement64)
386 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
387 #define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence64((LONG64 *)a)
389 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
390 #define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence((LONG *)a)
393 #define InterlockedExchange _InterlockedExchange
394 #define InterlockedExchangeAcquire __ACQ_(_InterlockedExchange)
395 /* No release here */
396 #define InterlockedExchangeNoFence __NF_(_InterlockedExchange)
398 #if (_MSC_VER >= 1600)
399 #define InterlockedExchange8 _InterlockedExchange8
400 #endif // (_MSC_VER >= 1600)
402 #define InterlockedExchange16 _InterlockedExchange16
403 /* No release here */
404 #define InterlockedExchangeAcquire16 __ACQ_(_InterlockedExchange16)
405 #define InterlockedExchangeNoFence16 __NF_(_InterlockedExchange16)
407 #define InterlockedExchange64 _InterlockedExchange64
408 #define InterlockedExchangeAcquire64 __ACQ_(_InterlockedExchange64)
409 /* No release here */
410 #define InterlockedExchangeNoFence64 __NF_(_InterlockedExchange64)
412 #define InterlockedExchangePointer _InterlockedExchangePointer
413 #define InterlockedExchangePointerAcquire __ACQ_(_InterlockedExchangePointer)
414 /* No release here */
415 #define InterlockedExchangePointerNoFence __NF_(_InterlockedExchangePointer)
417 #define InterlockedExchangeAdd _InterlockedExchangeAdd
418 #define InterlockedExchangeAddAcquire __ACQ_(_InterlockedExchangeAdd)
419 #define InterlockedExchangeAddRelease __REL_(_InterlockedExchangeAdd)
420 #define InterlockedExchangeAddNoFence __NF_(_InterlockedExchangeAdd)
422 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
423 #define InterlockedExchangeAddAcquire64 __ACQ_(_InterlockedExchangeAdd64)
424 #define InterlockedExchangeAddRelease64 __REL_(_InterlockedExchangeAdd64)
425 #define InterlockedExchangeAddNoFence64 __NF_(_InterlockedExchangeAdd64)
428 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
429 #define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire64((LONG64 *)a, b)
430 #define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence64((LONG64 *)a, b)
432 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
433 #define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire((LONG *)a, b)
434 #define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence((LONG *)a, b)
437 #define InterlockedIncrement _InterlockedIncrement
438 #define InterlockedIncrementAcquire __ACQ_(_InterlockedIncrement)
439 #define InterlockedIncrementRelease __REL_(_InterlockedIncrement)
440 #define InterlockedIncrementNoFence __NF_(_InterlockedIncrement)
442 #define InterlockedIncrement16 _InterlockedIncrement16
443 #define InterlockedIncrementAcquire16 __ACQ_(_InterlockedIncrement16)
444 #define InterlockedIncrementRelease16 __REL_(_InterlockedIncrement16)
445 #define InterlockedIncrementNoFence16 __NF_(_InterlockedIncrement16)
447 #define InterlockedIncrement64 _InterlockedIncrement64
448 #define InterlockedIncrementAcquire64 __ACQ_(_InterlockedIncrement64)
449 #define InterlockedIncrementRelease64 __REL_(_InterlockedIncrement64)
450 #define InterlockedIncrementNoFence64 __NF_(_InterlockedIncrement64)
453 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
454 #define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence64((LONG64 *)a)
456 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
457 #define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence((LONG *)a)
460 #define InterlockedOr _InterlockedOr
461 #define InterlockedOrAcquire __ACQ_(_InterlockedOr)
462 #define InterlockedOrRelease __REL_(_InterlockedOr)
463 #define InterlockedOrNoFence __NF_(_InterlockedOr)
465 #define InterlockedOr8 _InterlockedOr8
467 #define InterlockedOrAcquire8 _InterlockedOr8_acq
468 #define InterlockedOrRelease8 _InterlockedOr8_rel
469 #define InterlockedOrNoFence8 _InterlockedOr8_nf
470 #elif defined(_M_IA64)
471 #define InterlockedOr8Acquire _InterlockedOr8_acq
472 #define InterlockedOr8Release _InterlockedOr8_rel
475 #define InterlockedOr16 _InterlockedOr16
477 #define InterlockedOrAcquire16 _InterlockedOr16_acq
478 #define InterlockedOrRelease16 _InterlockedOr16_rel
479 #define InterlockedOrNoFence16 _InterlockedOr16_nf
480 #elif defined(_M_IA64)
481 #define InterlockedOr16Acquire _InterlockedOr16_acq
482 #define InterlockedOr16Release _InterlockedOr16_rel
485 #define InterlockedOr64 _InterlockedOr64
487 #define InterlockedOrAcquire64 _InterlockedOr64_acq
488 #define InterlockedOrRelease64 _InterlockedOr64_rel
489 #define InterlockedOrNoFence64 _InterlockedOr64_nf
490 #elif defined(_M_IA64) || defined(_M_AMD64)
491 #define InterlockedOr64Acquire __ACQ_(_InterlockedOr64)
492 #define InterlockedOr64Release __REL_(_InterlockedOr64)
493 #define InterlockedOr64NoFence __NF_(_InterlockedOr64)
497 #define InterlockedOrAffinity InterlockedOr64
499 #define InterlockedOrAffinity InterlockedOr
502 #define InterlockedXor _InterlockedXor
503 #define InterlockedXorAcquire __ACQ_(_InterlockedXor)
504 #define InterlockedXorRelease __REL_(_InterlockedXor)
505 #define InterlockedXorNoFence __NF_(_InterlockedXor)
507 #define InterlockedXor8 _InterlockedXor8
509 #define InterlockedXorAcquire8 _InterlockedXor8_acq
510 #define InterlockedXorRelease8 _InterlockedXor8_rel
511 #define InterlockedXorNoFence8 _InterlockedXor8_nf
512 #elif defined(_M_IA64)
513 #define InterlockedXor8Acquire _InterlockedXor8_acq
514 #define InterlockedXor8Release _InterlockedXor8_rel
517 #define InterlockedXor16 _InterlockedXor16
519 #define InterlockedXorAcquire16 _InterlockedXor16_acq
520 #define InterlockedXorRelease16 _InterlockedXor16_rel
521 #define InterlockedXorNoFence16 _InterlockedXor16_nf
522 #elif defined(_M_IA64)
523 #define InterlockedXor16Acquire _InterlockedXor16_acq
524 #define InterlockedXor16Release _InterlockedXor16_rel
527 #define InterlockedXor64 _InterlockedXor64
529 #define InterlockedXorAcquire64 _InterlockedXor64_acq
530 #define InterlockedXorRelease64 _InterlockedXor64_rel
531 #define InterlockedXorNoFence64 _InterlockedXor64_nf
532 #elif defined(_M_IA64) || defined(_M_AMD64)
533 #define InterlockedXor64Acquire __ACQ_(_InterlockedXor64)
534 #define InterlockedXor64Release __REL_(_InterlockedXor64)
535 #define InterlockedXor64NoFence __NF_(_InterlockedXor64)
542 _InterlockedExchange64(
543 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
547 for (Old
= *Target
; ; Old
= Prev
)
549 Prev
= _InterlockedCompareExchange64(Target
, Value
, Old
);
558 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
561 LONG64 Old
, Prev
, New
;
562 for (Old
= *Target
; ; Old
= Prev
)
565 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
573 _InterlockedExchangeAdd64 (
574 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
578 LONG64 Old
, Prev
, New
;
579 for (Old
= *Target
; ; Old
= Prev
)
582 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
591 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
594 LONG64 Old
, Prev
, New
;
595 for (Old
= *Target
; ; Old
= Prev
)
598 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
607 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
610 LONG64 Old
, Prev
, New
;
611 for (Old
= *Target
; ; Old
= Prev
)
614 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
623 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
626 LONG64 Old
, Prev
, New
;
627 for (Old
= *Target
; ; Old
= Prev
)
630 Prev
= _InterlockedCompareExchange64(Target
, New
, Old
);
638 _InterlockedIncrement64(
639 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
)
641 return _InterlockedAdd64(Target
, 1);
646 _InterlockedDecrement64(
647 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
)
649 return _InterlockedAdd64(Target
, -1);
652 #undef _InterlockedExchangePointer
653 #define _InterlockedExchangePointer _InlineInterlockedExchangePointer
655 _Ret_writes_(_Inexpressible_(Unknown
))
657 _InterlockedExchangePointer(
658 _Inout_
_At_(*Destination
, _Pre_writable_byte_size_(_Inexpressible_(Unknown
))
659 _Post_writable_byte_size_(_Inexpressible_(Unknown
)))
660 _Interlocked_operand_
volatile PVOID
*Destination
,
661 _In_opt_ PVOID Value
)
663 return (PVOID
)InterlockedExchange((volatile long *)Destination
, (long)Value
);
666 #undef _InterlockedCompareExchangePointer
667 #define _InterlockedCompareExchangePointer _InlineInterlockedCompareExchangePointer
669 _Ret_writes_(_Inexpressible_(Unknown
))
671 _InterlockedCompareExchangePointer(
672 _Inout_
_At_(*Destination
, _Pre_writable_byte_size_(_Inexpressible_(Unknown
))
673 _Post_writable_byte_size_(_Inexpressible_(Unknown
)))
674 _Interlocked_operand_
volatile PVOID
*Destination
,
675 _In_opt_ PVOID ExChange
,
676 _In_opt_ PVOID Comperand
)
678 return (PVOID
)InterlockedCompareExchange((volatile long *)Destination
,
690 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
694 return _InterlockedExchangeAdd64(Target
, Value
) + Value
;
697 #endif /* _M_AMD64 */
701 #undef _InterlockedBitTestAndSet
702 #define _InterlockedBitTestAndSet InterlockedBitTestAndSet_Inline
705 _InterlockedBitTestAndSet(
706 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
709 ULONG Mask
= 1 << (Bit
& 31);
710 return (BOOLEAN
)((InterlockedOr(&Target
[Bit
/ 32], Mask
) & Mask
) != 0);
713 #undef _InterlockedBitTestAndReset
714 #define _InterlockedBitTestAndReset InterlockedBitTestAndReset_Inline
717 _InterlockedBitTestAndReset(
718 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
721 ULONG Mask
= 1 << (Bit
& 31);
722 return (BOOLEAN
)((InterlockedAnd(&Target
[Bit
/ 32], ~Mask
) & Mask
) != 0);
725 #undef _InterlockedBitTestAndSet64
726 #define _InterlockedBitTestAndSet64 InterlockedBitTestAndSet64_Inline
729 _InterlockedBitTestAndSet64(
730 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
733 ULONG64 Mask
= 1LL << (Bit
& 63);
734 return (BOOLEAN
)((InterlockedOr64(&Target
[Bit
/ 64], Mask
) & Mask
) != 0);
737 #undef _InterlockedBitTestAndReset64
738 #define _InterlockedBitTestAndReset64 InterlockedBitTestAndReset64_Inline
741 _InterlockedBitTestAndReset64(
742 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
745 ULONG64 Mask
= 1LL << (Bit
& 63);
746 return (BOOLEAN
)((InterlockedAnd64(&Target
[Bit
/ 64], ~Mask
) & Mask
) != 0);
749 #undef _InterlockedBitTestAndComplement
750 #define _InterlockedBitTestAndComplement InterlockedBitTestAndComplement_Inline
753 _InterlockedBitTestAndComplement(
754 _Inout_ _Interlocked_operand_
volatile LONG
*Target
,
757 ULONG Mask
= 1 << (Bit
& 31);
758 return (BOOLEAN
)((InterlockedXor(&Target
[Bit
/ 32], Mask
) & Mask
) != 0);
761 #undef _InterlockedBitTestAndComplement64
762 #define _InterlockedBitTestAndComplement64 InterlockedBitTestAndComplement64_Inline
765 _InterlockedBitTestAndComplement64(
766 _Inout_ _Interlocked_operand_
volatile LONG64
*Target
,
769 ULONG64 Mask
= 1LL << (Bit
& 63);
770 return (BOOLEAN
)((InterlockedXor64(&Target
[Bit
/ 64], Mask
) & Mask
) != 0);
775 /******************************************************************************
776 * Runtime Library Types *
777 ******************************************************************************/
779 #define RTL_REGISTRY_ABSOLUTE 0
780 #define RTL_REGISTRY_SERVICES 1
781 #define RTL_REGISTRY_CONTROL 2
782 #define RTL_REGISTRY_WINDOWS_NT 3
783 #define RTL_REGISTRY_DEVICEMAP 4
784 #define RTL_REGISTRY_USER 5
785 #define RTL_REGISTRY_MAXIMUM 6
786 #define RTL_REGISTRY_HANDLE 0x40000000
787 #define RTL_REGISTRY_OPTIONAL 0x80000000
789 /* RTL_QUERY_REGISTRY_TABLE.Flags */
790 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
791 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
792 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
793 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
794 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
795 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
796 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
798 #define HASH_STRING_ALGORITHM_DEFAULT 0
799 #define HASH_STRING_ALGORITHM_X65599 1
800 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
802 typedef struct _RTL_BITMAP
{
805 } RTL_BITMAP
, *PRTL_BITMAP
;
807 typedef struct _RTL_BITMAP_RUN
{
810 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
812 _Function_class_(RTL_QUERY_REGISTRY_ROUTINE
)
813 _IRQL_requires_max_(PASSIVE_LEVEL
)
816 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
817 _In_z_ PWSTR ValueName
,
818 _In_ ULONG ValueType
,
819 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
820 _In_ ULONG ValueLength
,
821 _In_opt_ PVOID Context
,
822 _In_opt_ PVOID EntryContext
);
824 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
825 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
832 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
834 typedef struct _TIME_FIELDS
{
843 } TIME_FIELDS
, *PTIME_FIELDS
;
846 #ifndef _SLIST_HEADER_
847 #define _SLIST_HEADER_
851 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
852 struct _SLIST_ENTRY
*Next
;
853 } SLIST_ENTRY
, *PSLIST_ENTRY
;
855 typedef struct _SLIST_ENTRY32
{
857 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
859 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
860 _ANONYMOUS_STRUCT
struct {
866 ULONGLONG Sequence
:9;
867 ULONGLONG NextEntry
:39;
868 ULONGLONG HeaderType
:1;
870 ULONGLONG Reserved
:59;
875 ULONGLONG Sequence
:48;
876 ULONGLONG HeaderType
:1;
878 ULONGLONG Reserved
:2;
879 ULONGLONG NextEntry
:60;
883 ULONGLONG Sequence
:48;
884 ULONGLONG HeaderType
:1;
885 ULONGLONG Reserved
:3;
886 ULONGLONG NextEntry
:60;
888 } SLIST_HEADER
, *PSLIST_HEADER
;
890 typedef union _SLIST_HEADER32
{
892 _ANONYMOUS_STRUCT
struct {
897 } SLIST_HEADER32
, *PSLIST_HEADER32
;
901 #define SLIST_ENTRY SINGLE_LIST_ENTRY
902 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
903 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
905 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
907 typedef union _SLIST_HEADER
{
909 _ANONYMOUS_STRUCT
struct {
914 } SLIST_HEADER
, *PSLIST_HEADER
;
916 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
918 #endif /* defined(_WIN64) */
920 #endif /* _SLIST_HEADER_ */
922 /* Exception record flags */
923 #define EXCEPTION_NONCONTINUABLE 0x01
924 #define EXCEPTION_UNWINDING 0x02
925 #define EXCEPTION_EXIT_UNWIND 0x04
926 #define EXCEPTION_STACK_INVALID 0x08
927 #define EXCEPTION_NESTED_CALL 0x10
928 #define EXCEPTION_TARGET_UNWIND 0x20
929 #define EXCEPTION_COLLIDED_UNWIND 0x40
930 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | \
931 EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND)
933 #define IS_UNWINDING(Flag) ((Flag & EXCEPTION_UNWIND) != 0)
934 #define IS_DISPATCHING(Flag) ((Flag & EXCEPTION_UNWIND) == 0)
935 #define IS_TARGET_UNWIND(Flag) (Flag & EXCEPTION_TARGET_UNWIND)
937 #define EXCEPTION_MAXIMUM_PARAMETERS 15
939 /* Exception records */
940 typedef struct _EXCEPTION_RECORD
{
941 NTSTATUS ExceptionCode
;
942 ULONG ExceptionFlags
;
943 struct _EXCEPTION_RECORD
*ExceptionRecord
;
944 PVOID ExceptionAddress
;
945 ULONG NumberParameters
;
946 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
947 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
949 typedef struct _EXCEPTION_RECORD32
{
950 NTSTATUS ExceptionCode
;
951 ULONG ExceptionFlags
;
952 ULONG ExceptionRecord
;
953 ULONG ExceptionAddress
;
954 ULONG NumberParameters
;
955 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
956 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
958 typedef struct _EXCEPTION_RECORD64
{
959 NTSTATUS ExceptionCode
;
960 ULONG ExceptionFlags
;
961 ULONG64 ExceptionRecord
;
962 ULONG64 ExceptionAddress
;
963 ULONG NumberParameters
;
964 ULONG __unusedAlignment
;
965 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
966 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
968 typedef struct _EXCEPTION_POINTERS
{
969 PEXCEPTION_RECORD ExceptionRecord
;
970 PCONTEXT ContextRecord
;
971 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
974 extern BOOLEAN NlsMbCodePageTag
;
975 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
976 extern BOOLEAN NlsMbOemCodePageTag
;
977 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
979 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsMbCodePageTag
)
980 extern BOOLEAN
*NlsMbCodePageTag
;
981 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
982 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsMbOemCodePageTag
)
983 extern BOOLEAN
*NlsMbOemCodePageTag
;
984 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
987 #define SHORT_LEAST_SIGNIFICANT_BIT 0
988 #define SHORT_MOST_SIGNIFICANT_BIT 1
990 #define LONG_LEAST_SIGNIFICANT_BIT 0
991 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
992 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
993 #define LONG_MOST_SIGNIFICANT_BIT 3
995 #define RTLVERLIB_DDI(x) Wdmlib##x
998 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
1002 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
1003 _In_ ULONG Version
);
1005 typedef struct _OSVERSIONINFOA
{
1006 ULONG dwOSVersionInfoSize
;
1007 ULONG dwMajorVersion
;
1008 ULONG dwMinorVersion
;
1009 ULONG dwBuildNumber
;
1011 CHAR szCSDVersion
[128];
1012 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1014 typedef struct _OSVERSIONINFOW
{
1015 ULONG dwOSVersionInfoSize
;
1016 ULONG dwMajorVersion
;
1017 ULONG dwMinorVersion
;
1018 ULONG dwBuildNumber
;
1020 WCHAR szCSDVersion
[128];
1021 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1023 typedef struct _OSVERSIONINFOEXA
{
1024 ULONG dwOSVersionInfoSize
;
1025 ULONG dwMajorVersion
;
1026 ULONG dwMinorVersion
;
1027 ULONG dwBuildNumber
;
1029 CHAR szCSDVersion
[128];
1030 USHORT wServicePackMajor
;
1031 USHORT wServicePackMinor
;
1035 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1037 typedef struct _OSVERSIONINFOEXW
{
1038 ULONG dwOSVersionInfoSize
;
1039 ULONG dwMajorVersion
;
1040 ULONG dwMinorVersion
;
1041 ULONG dwBuildNumber
;
1043 WCHAR szCSDVersion
[128];
1044 USHORT wServicePackMajor
;
1045 USHORT wServicePackMinor
;
1049 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1052 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1053 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1054 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1055 typedef OSVERSIONINFOW OSVERSIONINFO
;
1056 typedef POSVERSIONINFOW POSVERSIONINFO
;
1057 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1059 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1060 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1061 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1062 typedef OSVERSIONINFOA OSVERSIONINFO
;
1063 typedef POSVERSIONINFOA POSVERSIONINFO
;
1064 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1065 #endif /* UNICODE */
1067 /******************************************************************************
1069 ******************************************************************************/
1071 typedef UCHAR KIRQL
, *PKIRQL
;
1072 typedef CCHAR KPROCESSOR_MODE
;
1073 typedef LONG KPRIORITY
;
1075 typedef enum _MODE
{
1081 #define CACHE_FULLY_ASSOCIATIVE 0xFF
1082 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
1084 #define EVENT_QUERY_STATE (0x0001)
1085 #define EVENT_MODIFY_STATE (0x0002)
1086 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
1088 #define LTP_PC_SMT 0x1
1090 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
1091 #define SINGLE_GROUP_LEGACY_API 1
1094 #define SEMAPHORE_QUERY_STATE (0x0001)
1095 #define SEMAPHORE_MODIFY_STATE (0x0002)
1096 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
1098 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
1099 RelationProcessorCore
,
1102 RelationProcessorPackage
,
1104 RelationAll
= 0xffff
1105 } LOGICAL_PROCESSOR_RELATIONSHIP
;
1107 typedef enum _PROCESSOR_CACHE_TYPE
{
1112 } PROCESSOR_CACHE_TYPE
;
1114 typedef struct _CACHE_DESCRIPTOR
{
1116 UCHAR Associativity
;
1119 PROCESSOR_CACHE_TYPE Type
;
1120 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
1122 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
1123 ULONG_PTR ProcessorMask
;
1124 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
1125 _ANONYMOUS_UNION
union {
1132 CACHE_DESCRIPTOR Cache
;
1133 ULONGLONG Reserved
[2];
1135 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
1137 typedef struct _PROCESSOR_RELATIONSHIP
{
1141 _Field_size_(GroupCount
) GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
1142 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
1144 typedef struct _NUMA_NODE_RELATIONSHIP
{
1147 GROUP_AFFINITY GroupMask
;
1148 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
1150 typedef struct _CACHE_RELATIONSHIP
{
1152 UCHAR Associativity
;
1155 PROCESSOR_CACHE_TYPE Type
;
1157 GROUP_AFFINITY GroupMask
;
1158 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
1160 typedef struct _PROCESSOR_GROUP_INFO
{
1161 UCHAR MaximumProcessorCount
;
1162 UCHAR ActiveProcessorCount
;
1164 KAFFINITY ActiveProcessorMask
;
1165 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
1167 typedef struct _GROUP_RELATIONSHIP
{
1168 USHORT MaximumGroupCount
;
1169 USHORT ActiveGroupCount
;
1171 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
1172 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
1174 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
1175 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
1177 _ANONYMOUS_UNION
union {
1178 PROCESSOR_RELATIONSHIP Processor
;
1179 NUMA_NODE_RELATIONSHIP NumaNode
;
1180 CACHE_RELATIONSHIP Cache
;
1181 GROUP_RELATIONSHIP Group
;
1183 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;;
1185 /* Processor features */
1186 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
1187 #define PF_FLOATING_POINT_EMULATED 1
1188 #define PF_COMPARE_EXCHANGE_DOUBLE 2
1189 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
1190 #define PF_PPC_MOVEMEM_64BIT_OK 4
1191 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
1192 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
1193 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
1194 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
1195 #define PF_PAE_ENABLED 9
1196 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
1197 #define PF_SSE_DAZ_MODE_AVAILABLE 11
1198 #define PF_NX_ENABLED 12
1199 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
1200 #define PF_COMPARE_EXCHANGE128 14
1201 #define PF_COMPARE64_EXCHANGE128 15
1202 #define PF_CHANNELS_ENABLED 16
1203 #define PF_XSAVE_ENABLED 17
1204 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
1205 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
1206 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
1207 #define PF_VIRT_FIRMWARE_ENABLED 21
1208 #define PF_RDWRFSGSBASE_AVAILABLE 22
1209 #define PF_FASTFAIL_AVAILABLE 23
1210 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
1211 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
1212 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
1213 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
1214 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
1215 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
1216 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
1217 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
1219 #define MAXIMUM_WAIT_OBJECTS 64
1221 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
1223 #define ASSERT_DPC(Object) \
1224 ASSERT(((Object)->Type == 0) || \
1225 ((Object)->Type == DpcObject) || \
1226 ((Object)->Type == ThreadedDpcObject))
1228 #define ASSERT_GATE(object) \
1229 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1230 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1232 #define ASSERT_DEVICE_QUEUE(Object) \
1233 NT_ASSERT((Object)->Type == DeviceQueueObject)
1235 #define ASSERT_TIMER(E) \
1236 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1237 ((E)->Header.Type == TimerSynchronizationObject))
1239 #define ASSERT_MUTANT(E) \
1240 NT_ASSERT((E)->Header.Type == MutantObject)
1242 #define ASSERT_SEMAPHORE(E) \
1243 NT_ASSERT((E)->Header.Type == SemaphoreObject)
1245 #define ASSERT_EVENT(E) \
1246 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
1247 ((E)->Header.Type == SynchronizationEvent))
1249 #define DPC_NORMAL 0
1250 #define DPC_THREADED 1
1252 #define GM_LOCK_BIT 0x1
1253 #define GM_LOCK_BIT_V 0x0
1254 #define GM_LOCK_WAITER_WOKEN 0x2
1255 #define GM_LOCK_WAITER_INC 0x4
1257 #define LOCK_QUEUE_WAIT_BIT 0
1258 #define LOCK_QUEUE_OWNER_BIT 1
1260 #define LOCK_QUEUE_WAIT 1
1261 #define LOCK_QUEUE_OWNER 2
1262 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1263 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1265 #define PROCESSOR_FEATURE_MAX 64
1267 #define DBG_STATUS_CONTROL_C 1
1268 #define DBG_STATUS_SYSRQ 2
1269 #define DBG_STATUS_BUGCHECK_FIRST 3
1270 #define DBG_STATUS_BUGCHECK_SECOND 4
1271 #define DBG_STATUS_FATAL 5
1272 #define DBG_STATUS_DEBUG_CONTROL 6
1273 #define DBG_STATUS_WORKER 7
1276 #define MAXIMUM_PROC_PER_GROUP 64
1278 #define MAXIMUM_PROC_PER_GROUP 32
1280 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
1282 #define EXCEPTION_DIVIDED_BY_ZERO 0
1283 #define EXCEPTION_DEBUG 1
1284 #define EXCEPTION_NMI 2
1285 #define EXCEPTION_INT3 3
1286 #define EXCEPTION_BOUND_CHECK 5
1287 #define EXCEPTION_INVALID_OPCODE 6
1288 #define EXCEPTION_NPX_NOT_AVAILABLE 7
1289 #define EXCEPTION_DOUBLE_FAULT 8
1290 #define EXCEPTION_NPX_OVERRUN 9
1291 #define EXCEPTION_INVALID_TSS 0x0A
1292 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
1293 #define EXCEPTION_STACK_FAULT 0x0C
1294 #define EXCEPTION_GP_FAULT 0x0D
1295 #define EXCEPTION_RESERVED_TRAP 0x0F
1296 #define EXCEPTION_NPX_ERROR 0x010
1297 #define EXCEPTION_ALIGNMENT_CHECK 0x011
1299 typedef enum _KBUGCHECK_CALLBACK_REASON
{
1301 KbCallbackReserved1
,
1302 KbCallbackSecondaryDumpData
,
1305 } KBUGCHECK_CALLBACK_REASON
;
1307 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
1309 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE
)
1310 _IRQL_requires_same_
1312 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
1313 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
1314 _In_
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
1315 _Inout_ PVOID ReasonSpecificData
,
1316 _In_ ULONG ReasonSpecificDataLength
);
1317 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
1319 typedef struct _KBUGCHECK_ADD_PAGES
{
1320 _Inout_ PVOID Context
;
1321 _Inout_ ULONG Flags
;
1322 _In_ ULONG BugCheckCode
;
1323 _Out_ ULONG_PTR Address
;
1324 _Out_ ULONG_PTR Count
;
1325 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
1327 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
1328 _In_ PVOID InBuffer
;
1329 _In_ ULONG InBufferLength
;
1330 _In_ ULONG MaximumAllowed
;
1332 _Out_ PVOID OutBuffer
;
1333 _Out_ ULONG OutBufferLength
;
1334 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
1336 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
1340 KbDumpIoSecondaryData
,
1342 } KBUGCHECK_DUMP_IO_TYPE
;
1344 typedef struct _KBUGCHECK_DUMP_IO
{
1345 _In_ ULONG64 Offset
;
1347 _In_ ULONG BufferLength
;
1348 _In_ KBUGCHECK_DUMP_IO_TYPE Type
;
1349 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
1351 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
1352 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
1353 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
1355 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
1357 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
1360 KBUGCHECK_CALLBACK_REASON Reason
;
1362 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
1364 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
1370 } KBUGCHECK_BUFFER_DUMP_STATE
;
1372 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE
)
1373 _IRQL_requires_same_
1375 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
1378 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
1380 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
1382 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
1383 _Field_size_bytes_opt_(Length
) PVOID Buffer
;
1388 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
1390 _Function_class_(NMI_CALLBACK
)
1391 _IRQL_requires_same_
1393 (NTAPI NMI_CALLBACK
)(
1394 _In_opt_ PVOID Context
,
1395 _In_ BOOLEAN Handled
);
1396 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
1398 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
1399 KeProcessorAddStartNotify
= 0,
1400 KeProcessorAddCompleteNotify
,
1401 KeProcessorAddFailureNotify
1402 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
1404 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
1405 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
1408 #if (NTDDI_VERSION >= NTDDI_WIN7)
1409 PROCESSOR_NUMBER ProcNumber
;
1411 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
1413 _IRQL_requires_same_
1414 _Function_class_(PROCESSOR_CALLBACK_FUNCTION
)
1416 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
1417 _In_ PVOID CallbackContext
,
1418 _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
1419 _Inout_ PNTSTATUS OperationStatus
);
1420 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
1422 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
1424 #define INVALID_PROCESSOR_INDEX 0xffffffff
1426 typedef enum _KINTERRUPT_POLARITY
{
1427 InterruptPolarityUnknown
,
1428 InterruptActiveHigh
,
1430 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1432 typedef enum _KPROFILE_SOURCE
{
1434 ProfileAlignmentFixup
,
1437 ProfileLoadInstructions
,
1438 ProfilePipelineFrozen
,
1439 ProfileBranchInstructions
,
1440 ProfileTotalNonissues
,
1441 ProfileDcacheMisses
,
1442 ProfileIcacheMisses
,
1444 ProfileBranchMispredictions
,
1445 ProfileStoreInstructions
,
1446 ProfileFpInstructions
,
1447 ProfileIntegerInstructions
,
1451 ProfileSpecialInstructions
,
1453 ProfileIcacheIssues
,
1454 ProfileDcacheAccesses
,
1455 ProfileMemoryBarrierCycles
,
1456 ProfileLoadLinkedIssues
,
1460 typedef enum _KWAIT_REASON
{
1501 typedef struct _KWAIT_BLOCK
{
1502 LIST_ENTRY WaitListEntry
;
1503 struct _KTHREAD
*Thread
;
1505 struct _KWAIT_BLOCK
*NextWaitBlock
;
1508 #if (NTDDI_VERSION >= NTDDI_WIN7)
1509 volatile UCHAR BlockState
;
1516 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
1518 typedef enum _KINTERRUPT_MODE
{
1523 #define THREAD_WAIT_OBJECTS 3
1525 _IRQL_requires_same_
1526 _Function_class_(KSTART_ROUTINE
)
1528 (NTAPI KSTART_ROUTINE
)(
1529 _In_ PVOID StartContext
);
1530 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
1533 (NTAPI
*PKINTERRUPT_ROUTINE
)(
1536 _Function_class_(KSERVICE_ROUTINE
)
1537 _IRQL_requires_(HIGH_LEVEL
)
1538 _IRQL_requires_same_
1540 (NTAPI KSERVICE_ROUTINE
)(
1541 _In_
struct _KINTERRUPT
*Interrupt
,
1542 _In_ PVOID ServiceContext
);
1543 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
1545 _Function_class_(KMESSAGE_SERVICE_ROUTINE
)
1546 _IRQL_requires_same_
1548 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
1549 _In_
struct _KINTERRUPT
*Interrupt
,
1550 _In_ PVOID ServiceContext
,
1551 _In_ ULONG MessageID
);
1552 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
1554 typedef enum _KD_OPTION
{
1555 KD_OPTION_SET_BLOCK_ENABLE
,
1560 (NTAPI
*PKNORMAL_ROUTINE
)(
1561 IN PVOID NormalContext OPTIONAL
,
1562 IN PVOID SystemArgument1 OPTIONAL
,
1563 IN PVOID SystemArgument2 OPTIONAL
);
1566 (NTAPI
*PKRUNDOWN_ROUTINE
)(
1567 IN
struct _KAPC
*Apc
);
1570 (NTAPI
*PKKERNEL_ROUTINE
)(
1571 IN
struct _KAPC
*Apc
,
1572 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
1573 IN OUT PVOID
*NormalContext OPTIONAL
,
1574 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
1575 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
1578 typedef struct _KAPC
{
1584 struct _KTHREAD
*Thread
;
1585 LIST_ENTRY ApcListEntry
;
1587 PKKERNEL_ROUTINE KernelRoutine
;
1588 PKRUNDOWN_ROUTINE RundownRoutine
;
1589 PKNORMAL_ROUTINE NormalRoutine
;
1593 PVOID NormalContext
;
1594 PVOID SystemArgument1
;
1595 PVOID SystemArgument2
;
1596 CCHAR ApcStateIndex
;
1597 KPROCESSOR_MODE ApcMode
;
1599 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1601 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
1602 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
1603 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
1604 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
1605 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
1606 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
1607 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
1609 typedef struct _KDEVICE_QUEUE_ENTRY
{
1610 LIST_ENTRY DeviceListEntry
;
1613 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1614 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1616 typedef PVOID PKIPI_CONTEXT
;
1619 (NTAPI
*PKIPI_WORKER
)(
1620 IN OUT PKIPI_CONTEXT PacketContext
,
1621 IN PVOID Parameter1 OPTIONAL
,
1622 IN PVOID Parameter2 OPTIONAL
,
1623 IN PVOID Parameter3 OPTIONAL
);
1625 typedef struct _KIPI_COUNTS
{
1630 ULONG FlushSingleTb
;
1631 ULONG FlushMultipleTb
;
1632 ULONG FlushEntireTb
;
1637 ULONG SweepIcacheRange
;
1638 ULONG FlushIoBuffers
;
1639 ULONG GratuitousDPC
;
1640 } KIPI_COUNTS
, *PKIPI_COUNTS
;
1642 _IRQL_requires_same_
1643 _Function_class_(KIPI_BROADCAST_WORKER
)
1644 _IRQL_requires_(IPI_LEVEL
)
1646 (NTAPI KIPI_BROADCAST_WORKER
)(
1647 _In_ ULONG_PTR Argument
);
1648 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
1650 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
1652 typedef struct _KSPIN_LOCK_QUEUE
{
1653 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1654 PKSPIN_LOCK
volatile Lock
;
1655 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1657 typedef struct _KLOCK_QUEUE_HANDLE
{
1658 KSPIN_LOCK_QUEUE LockQueue
;
1660 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1662 #if defined(_AMD64_)
1664 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
1666 #define LockQueueDispatcherLock 0
1667 #define LockQueueExpansionLock 1
1668 #define LockQueuePfnLock 2
1669 #define LockQueueSystemSpaceLock 3
1670 #define LockQueueVacbLock 4
1671 #define LockQueueMasterLock 5
1672 #define LockQueueNonPagedPoolLock 6
1673 #define LockQueueIoCancelLock 7
1674 #define LockQueueWorkQueueLock 8
1675 #define LockQueueIoVpbLock 9
1676 #define LockQueueIoDatabaseLock 10
1677 #define LockQueueIoCompletionLock 11
1678 #define LockQueueNtfsStructLock 12
1679 #define LockQueueAfdWorkQueueLock 13
1680 #define LockQueueBcbLock 14
1681 #define LockQueueMmNonPagedPoolLock 15
1682 #define LockQueueUnusedSpare16 16
1683 #define LockQueueTimerTableLock 17
1684 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
1688 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
1689 LockQueueDispatcherLock
,
1690 LockQueueExpansionLock
,
1692 LockQueueSystemSpaceLock
,
1694 LockQueueMasterLock
,
1695 LockQueueNonPagedPoolLock
,
1696 LockQueueIoCancelLock
,
1697 LockQueueWorkQueueLock
,
1699 LockQueueIoDatabaseLock
,
1700 LockQueueIoCompletionLock
,
1701 LockQueueNtfsStructLock
,
1702 LockQueueAfdWorkQueueLock
,
1704 LockQueueMmNonPagedPoolLock
,
1705 LockQueueUnusedSpare16
,
1706 LockQueueTimerTableLock
,
1707 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1708 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1710 #endif /* defined(_AMD64_) */
1712 _Function_class_(KDEFERRED_ROUTINE
)
1713 _IRQL_requires_(DISPATCH_LEVEL
)
1714 _IRQL_requires_same_
1716 (NTAPI KDEFERRED_ROUTINE
)(
1717 _In_
struct _KDPC
*Dpc
,
1718 _In_opt_ PVOID DeferredContext
,
1719 _In_opt_ PVOID SystemArgument1
,
1720 _In_opt_ PVOID SystemArgument2
);
1721 typedef KDEFERRED_ROUTINE
*PKDEFERRED_ROUTINE
;
1723 typedef enum _KDPC_IMPORTANCE
{
1727 MediumHighImportance
1730 typedef struct _KDPC
{
1733 volatile USHORT Number
;
1734 LIST_ENTRY DpcListEntry
;
1735 PKDEFERRED_ROUTINE DeferredRoutine
;
1736 PVOID DeferredContext
;
1737 PVOID SystemArgument1
;
1738 PVOID SystemArgument2
;
1739 volatile PVOID DpcData
;
1740 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1742 typedef struct _KDPC_WATCHDOG_INFORMATION
{
1745 ULONG DpcWatchdogLimit
;
1746 ULONG DpcWatchdogCount
;
1748 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
1750 typedef struct _KDEVICE_QUEUE
{
1753 LIST_ENTRY DeviceListHead
;
1755 # if defined(_AMD64_)
1756 _ANONYMOUS_UNION
union {
1758 _ANONYMOUS_STRUCT
struct {
1766 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1768 #define TIMER_EXPIRED_INDEX_BITS 6
1769 #define TIMER_PROCESSOR_INDEX_BITS 5
1771 typedef struct _DISPATCHER_HEADER
{
1772 _ANONYMOUS_UNION
union {
1773 _ANONYMOUS_STRUCT
struct {
1775 _ANONYMOUS_UNION
union {
1776 _ANONYMOUS_UNION
union {
1777 UCHAR TimerControlFlags
;
1778 _ANONYMOUS_STRUCT
struct {
1780 UCHAR Coalescable
:1;
1781 UCHAR KeepShifting
:1;
1782 UCHAR EncodedTolerableDelay
:5;
1786 #if (NTDDI_VERSION < NTDDI_WIN7)
1791 _ANONYMOUS_UNION
union {
1792 _ANONYMOUS_UNION
union {
1793 UCHAR ThreadControlFlags
;
1794 _ANONYMOUS_STRUCT
struct {
1795 UCHAR CpuThrottled
:1;
1796 UCHAR CycleProfiling
:1;
1797 UCHAR CounterProfiling
:1;
1804 _ANONYMOUS_UNION
union {
1805 #if (NTDDI_VERSION >= NTDDI_WIN7)
1806 _ANONYMOUS_UNION
union {
1807 UCHAR TimerMiscFlags
;
1808 _ANONYMOUS_STRUCT
struct {
1810 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
1813 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
1816 volatile UCHAR Expired
:1;
1820 /* Pre Win7 compatibility fix to latest WDK */
1823 _ANONYMOUS_UNION
union {
1824 BOOLEAN DebugActive
;
1825 _ANONYMOUS_STRUCT
struct {
1826 BOOLEAN ActiveDR7
:1;
1827 BOOLEAN Instrumented
:1;
1828 BOOLEAN Reserved2
:4;
1829 BOOLEAN UmsScheduled
:1;
1830 BOOLEAN UmsPrimary
:1;
1832 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
1839 LIST_ENTRY WaitListHead
;
1840 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1842 typedef struct _KEVENT
{
1843 DISPATCHER_HEADER Header
;
1844 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1846 typedef struct _KSEMAPHORE
{
1847 DISPATCHER_HEADER Header
;
1849 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1851 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
1853 typedef struct _KGATE
{
1854 DISPATCHER_HEADER Header
;
1855 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1857 typedef struct _KGUARDED_MUTEX
{
1858 volatile LONG Count
;
1862 _ANONYMOUS_UNION
union {
1863 _ANONYMOUS_STRUCT
struct {
1864 SHORT KernelApcDisable
;
1865 SHORT SpecialApcDisable
;
1867 ULONG CombinedApcDisable
;
1869 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1871 typedef struct _KMUTANT
{
1872 DISPATCHER_HEADER Header
;
1873 LIST_ENTRY MutantListEntry
;
1874 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1877 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1879 #define TIMER_TABLE_SIZE 512
1880 #define TIMER_TABLE_SHIFT 9
1882 typedef struct _KTIMER
{
1883 DISPATCHER_HEADER Header
;
1884 ULARGE_INTEGER DueTime
;
1885 LIST_ENTRY TimerListEntry
;
1887 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_)
1891 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1893 typedef enum _LOCK_OPERATION
{
1899 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
1901 _Function_class_(KSYNCHRONIZE_ROUTINE
)
1902 _IRQL_requires_same_
1904 (NTAPI KSYNCHRONIZE_ROUTINE
)(
1905 _In_ PVOID SynchronizeContext
);
1906 typedef KSYNCHRONIZE_ROUTINE
*PKSYNCHRONIZE_ROUTINE
;
1908 typedef enum _POOL_TYPE
{
1911 NonPagedPoolMustSucceed
,
1913 NonPagedPoolCacheAligned
,
1914 PagedPoolCacheAligned
,
1915 NonPagedPoolCacheAlignedMustS
,
1917 NonPagedPoolSession
= 32,
1919 NonPagedPoolMustSucceedSession
,
1920 DontUseThisTypeSession
,
1921 NonPagedPoolCacheAlignedSession
,
1922 PagedPoolCacheAlignedSession
,
1923 NonPagedPoolCacheAlignedMustSSession
1926 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
1930 } ALTERNATIVE_ARCHITECTURE_TYPE
;
1935 #define IsNEC_98 (FALSE)
1939 #define IsNotNEC_98 (TRUE)
1946 #ifndef SetNotNEC_98
1947 #define SetNotNEC_98
1952 typedef struct _KSYSTEM_TIME
{
1956 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
1958 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1963 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
1970 USHORT ErrorSelector
;
1973 USHORT DataSelector
;
1977 M128A FloatRegisters
[8];
1979 M128A XmmRegisters
[16];
1980 UCHAR Reserved4
[96];
1982 M128A XmmRegisters
[8];
1983 UCHAR Reserved4
[192];
1984 ULONG StackControl
[7];
1987 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1989 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
1991 ULONG64 Reserved
[7];
1992 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1994 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
1995 XSAVE_FORMAT LegacyState
;
1996 XSAVE_AREA_HEADER Header
;
1997 } XSAVE_AREA
, *PXSAVE_AREA
;
1999 typedef struct _XSTATE_CONTEXT
{
2003 _Field_size_bytes_opt_(Length
) PXSAVE_AREA Area
;
2011 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
2013 typedef struct _XSTATE_SAVE
{
2014 #if defined(_AMD64_)
2015 struct _XSTATE_SAVE
* Prev
;
2016 struct _KTHREAD
* Thread
;
2018 XSTATE_CONTEXT XStateContext
;
2019 #elif defined(_IA64_) || defined(_ARM_)
2021 #elif defined(_X86_)
2022 _ANONYMOUS_UNION
union {
2023 _ANONYMOUS_STRUCT
struct {
2026 struct _XSTATE_SAVE
* Prev
;
2027 PXSAVE_AREA Reserved3
;
2028 struct _KTHREAD
* Thread
;
2032 XSTATE_CONTEXT XStateContext
;
2035 } XSTATE_SAVE
, *PXSTATE_SAVE
;
2039 #define MAXIMUM_SUPPORTED_EXTENSION 512
2041 #if !defined(__midl) && !defined(MIDL_PASS)
2042 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
2047 #define XSAVE_ALIGN 64
2048 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
2050 #if !defined(__midl) && !defined(MIDL_PASS)
2051 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
2052 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
2053 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
2056 typedef struct _CONTEXT_CHUNK
{
2059 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
2061 typedef struct _CONTEXT_EX
{
2063 CONTEXT_CHUNK Legacy
;
2064 CONTEXT_CHUNK XState
;
2065 } CONTEXT_EX
, *PCONTEXT_EX
;
2067 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
2069 #if (NTDDI_VERSION >= NTDDI_VISTA)
2070 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
2071 #elif (NTDDI_VERSION >= NTDDI_WINXP)
2072 extern NTSYSAPI CCHAR KeNumberProcessors
;
2074 __CREATE_NTOS_DATA_IMPORT_ALIAS(KeNumberProcessors
)
2075 extern PCCHAR KeNumberProcessors
;
2079 /******************************************************************************
2080 * Memory manager Types *
2081 ******************************************************************************/
2083 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2084 typedef ULONG NODE_REQUIREMENT
;
2085 #define MM_ANY_NODE_OK 0x80000000
2088 #define MM_DONT_ZERO_ALLOCATION 0x00000001
2089 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
2090 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
2091 #define MM_ALLOCATE_NO_WAIT 0x00000008
2092 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
2093 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
2095 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2096 #define MDL_PAGES_LOCKED 0x0002
2097 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2098 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2099 #define MDL_PARTIAL 0x0010
2100 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2101 #define MDL_IO_PAGE_READ 0x0040
2102 #define MDL_WRITE_OPERATION 0x0080
2103 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2104 #define MDL_FREE_EXTRA_PTES 0x0200
2105 #define MDL_DESCRIBES_AWE 0x0400
2106 #define MDL_IO_SPACE 0x0800
2107 #define MDL_NETWORK_HEADER 0x1000
2108 #define MDL_MAPPING_CAN_FAIL 0x2000
2109 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2110 #define MDL_INTERNAL 0x8000
2112 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
2113 MDL_PAGES_LOCKED | \
2114 MDL_SOURCE_IS_NONPAGED_POOL | \
2115 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2116 MDL_PARENT_MAPPED_SYSTEM_VA | \
2120 #define FLUSH_MULTIPLE_MAXIMUM 32
2122 /* Section access rights */
2123 #define SECTION_QUERY 0x0001
2124 #define SECTION_MAP_WRITE 0x0002
2125 #define SECTION_MAP_READ 0x0004
2126 #define SECTION_MAP_EXECUTE 0x0008
2127 #define SECTION_EXTEND_SIZE 0x0010
2128 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
2130 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
2131 SECTION_MAP_WRITE | \
2132 SECTION_MAP_READ | \
2133 SECTION_MAP_EXECUTE | \
2134 SECTION_EXTEND_SIZE)
2136 #define SESSION_QUERY_ACCESS 0x0001
2137 #define SESSION_MODIFY_ACCESS 0x0002
2139 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
2140 SESSION_QUERY_ACCESS | \
2141 SESSION_MODIFY_ACCESS)
2143 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
2145 #define PAGE_NOACCESS 0x01
2146 #define PAGE_READONLY 0x02
2147 #define PAGE_READWRITE 0x04
2148 #define PAGE_WRITECOPY 0x08
2149 #define PAGE_EXECUTE 0x10
2150 #define PAGE_EXECUTE_READ 0x20
2151 #define PAGE_EXECUTE_READWRITE 0x40
2152 #define PAGE_EXECUTE_WRITECOPY 0x80
2153 #define PAGE_GUARD 0x100
2154 #define PAGE_NOCACHE 0x200
2155 #define PAGE_WRITECOMBINE 0x400
2157 #define MEM_COMMIT 0x1000
2158 #define MEM_RESERVE 0x2000
2159 #define MEM_DECOMMIT 0x4000
2160 #define MEM_RELEASE 0x8000
2161 #define MEM_FREE 0x10000
2162 #define MEM_PRIVATE 0x20000
2163 #define MEM_MAPPED 0x40000
2164 #define MEM_RESET 0x80000
2165 #define MEM_TOP_DOWN 0x100000
2166 #define MEM_LARGE_PAGES 0x20000000
2167 #define MEM_4MB_PAGES 0x80000000
2169 #define SEC_RESERVE 0x4000000
2170 #define SEC_COMMIT 0x8000000
2171 #define SEC_LARGE_PAGES 0x80000000
2173 /* Section map options */
2174 typedef enum _SECTION_INHERIT
{
2179 typedef ULONG PFN_COUNT
;
2180 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
2181 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
2183 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL
) +
2184 (ByteOffset
+ ByteCount
+ PAGE_SIZE
-1) / PAGE_SIZE
* sizeof(PFN_NUMBER
)))
2185 typedef struct _MDL
{
2189 struct _EPROCESS
*Process
;
2190 PVOID MappedSystemVa
;
2195 #if (_MSC_VER >= 1600)
2196 typedef _Readable_bytes_(_Inexpressible_(polymorphism
)) MDL
*PMDLX
;
2201 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
2202 MmFrameBufferCached
= 2
2203 } MEMORY_CACHING_TYPE_ORIG
;
2205 typedef enum _MEMORY_CACHING_TYPE
{
2206 MmNonCached
= FALSE
,
2208 MmWriteCombined
= MmFrameBufferCached
,
2209 MmHardwareCoherentCached
,
2210 MmNonCachedUnordered
,
2213 } MEMORY_CACHING_TYPE
;
2215 typedef enum _MM_PAGE_PRIORITY
{
2217 NormalPagePriority
= 16,
2218 HighPagePriority
= 32
2221 typedef enum _MM_SYSTEM_SIZE
{
2228 __CREATE_NTOS_DATA_IMPORT_ALIAS(Mm64BitPhysicalAddress
)
2229 extern PBOOLEAN Mm64BitPhysicalAddress
;
2231 extern NTKERNELAPI PVOID MmBadPointer
;
2234 /******************************************************************************
2236 ******************************************************************************/
2237 #define EX_RUNDOWN_ACTIVE 0x1
2238 #define EX_RUNDOWN_COUNT_SHIFT 0x1
2239 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
2241 typedef struct _FAST_MUTEX
{
2242 volatile LONG Count
;
2247 } FAST_MUTEX
, *PFAST_MUTEX
;
2249 typedef enum _SUITE_TYPE
{
2253 CommunicationServer
,
2255 SmallBusinessRestricted
,
2269 typedef enum _EX_POOL_PRIORITY
{
2271 LowPoolPrioritySpecialPoolOverrun
= 8,
2272 LowPoolPrioritySpecialPoolUnderrun
= 9,
2273 NormalPoolPriority
= 16,
2274 NormalPoolPrioritySpecialPoolOverrun
= 24,
2275 NormalPoolPrioritySpecialPoolUnderrun
= 25,
2276 HighPoolPriority
= 32,
2277 HighPoolPrioritySpecialPoolOverrun
= 40,
2278 HighPoolPrioritySpecialPoolUnderrun
= 41
2281 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
2282 #define LOOKASIDE_ALIGN
2284 #define LOOKASIDE_ALIGN DECLSPEC_CACHEALIGN
2287 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
2289 _IRQL_requires_same_
2290 _Function_class_(ALLOCATE_FUNCTION
)
2292 (NTAPI
*PALLOCATE_FUNCTION
)(
2293 _In_ POOL_TYPE PoolType
,
2294 _In_ SIZE_T NumberOfBytes
,
2297 _IRQL_requires_same_
2298 _Function_class_(ALLOCATE_FUNCTION_EX
)
2300 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
2301 _In_ POOL_TYPE PoolType
,
2302 _In_ SIZE_T NumberOfBytes
,
2304 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2306 _IRQL_requires_same_
2307 _Function_class_(FREE_FUNCTION
)
2309 (NTAPI
*PFREE_FUNCTION
)(
2312 _IRQL_requires_same_
2313 _Function_class_(FREE_FUNCTION_EX
)
2315 (NTAPI
*PFREE_FUNCTION_EX
)(
2317 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
2319 _IRQL_requires_same_
2320 _Function_class_(CALLBACK_FUNCTION
)
2322 (NTAPI CALLBACK_FUNCTION
)(
2323 _In_opt_ PVOID CallbackContext
,
2324 _In_opt_ PVOID Argument1
,
2325 _In_opt_ PVOID Argument2
);
2326 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
2328 #define GENERAL_LOOKASIDE_LAYOUT \
2329 _ANONYMOUS_UNION union { \
2330 SLIST_HEADER ListHead; \
2331 SINGLE_LIST_ENTRY SingleListHead; \
2334 USHORT MaximumDepth; \
2335 ULONG TotalAllocates; \
2336 _ANONYMOUS_UNION union { \
2337 ULONG AllocateMisses; \
2338 ULONG AllocateHits; \
2339 } DUMMYUNIONNAME2; \
2341 _ANONYMOUS_UNION union { \
2344 } DUMMYUNIONNAME3; \
2348 _ANONYMOUS_UNION union { \
2349 PALLOCATE_FUNCTION_EX AllocateEx; \
2350 PALLOCATE_FUNCTION Allocate; \
2351 } DUMMYUNIONNAME4; \
2352 _ANONYMOUS_UNION union { \
2353 PFREE_FUNCTION_EX FreeEx; \
2354 PFREE_FUNCTION Free; \
2355 } DUMMYUNIONNAME5; \
2356 LIST_ENTRY ListEntry; \
2357 ULONG LastTotalAllocates; \
2358 _ANONYMOUS_UNION union { \
2359 ULONG LastAllocateMisses; \
2360 ULONG LastAllocateHits; \
2361 } DUMMYUNIONNAME6; \
2364 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
2365 GENERAL_LOOKASIDE_LAYOUT
2366 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
2368 typedef struct _GENERAL_LOOKASIDE_POOL
{
2369 GENERAL_LOOKASIDE_LAYOUT
2370 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
2372 #define LOOKASIDE_CHECK(f) \
2373 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
2375 LOOKASIDE_CHECK(TotalFrees
);
2376 LOOKASIDE_CHECK(Tag
);
2377 LOOKASIDE_CHECK(Future
);
2379 typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST
{
2380 GENERAL_LOOKASIDE L
;
2381 #if !defined(_AMD64_) && !defined(_IA64_)
2382 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
2384 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
2386 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
2387 GENERAL_LOOKASIDE L
;
2388 #if !defined(_AMD64_) && !defined(_IA64_)
2389 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
2391 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
2393 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
2395 typedef struct _LOOKASIDE_LIST_EX
{
2396 GENERAL_LOOKASIDE_POOL L
;
2397 } LOOKASIDE_LIST_EX
;
2399 #if (NTDDI_VERSION >= NTDDI_VISTA)
2401 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
2402 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
2404 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
2405 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
2407 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2409 typedef struct _EX_RUNDOWN_REF
{
2410 _ANONYMOUS_UNION
union {
2411 volatile ULONG_PTR Count
;
2414 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
2416 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
2418 typedef enum _WORK_QUEUE_TYPE
{
2421 HyperCriticalWorkQueue
,
2425 _IRQL_requires_same_
2426 _Function_class_(WORKER_THREAD_ROUTINE
)
2428 (NTAPI WORKER_THREAD_ROUTINE
)(
2429 _In_ PVOID Parameter
);
2430 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
2432 typedef struct _WORK_QUEUE_ITEM
{
2434 PWORKER_THREAD_ROUTINE WorkerRoutine
;
2435 volatile PVOID Parameter
;
2436 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
2438 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
2440 typedef struct _OWNER_ENTRY
{
2441 ERESOURCE_THREAD OwnerThread
;
2442 _ANONYMOUS_UNION
union {
2443 _ANONYMOUS_STRUCT
struct {
2444 ULONG IoPriorityBoosted
:1;
2445 ULONG OwnerReferenced
:1;
2446 ULONG OwnerCount
:30;
2450 } OWNER_ENTRY
, *POWNER_ENTRY
;
2452 typedef struct _ERESOURCE
{
2453 LIST_ENTRY SystemResourcesList
;
2454 POWNER_ENTRY OwnerTable
;
2457 volatile PKSEMAPHORE SharedWaiters
;
2458 volatile PKEVENT ExclusiveWaiters
;
2459 OWNER_ENTRY OwnerEntry
;
2460 ULONG ActiveEntries
;
2461 ULONG ContentionCount
;
2462 ULONG NumberOfSharedWaiters
;
2463 ULONG NumberOfExclusiveWaiters
;
2467 _ANONYMOUS_UNION
union {
2469 ULONG_PTR CreatorBackTraceIndex
;
2471 KSPIN_LOCK SpinLock
;
2472 } ERESOURCE
, *PERESOURCE
;
2474 /* ERESOURCE.Flag */
2475 #define ResourceNeverExclusive 0x0010
2476 #define ResourceReleaseByOtherThread 0x0020
2477 #define ResourceOwnedExclusive 0x0080
2479 #define RESOURCE_HASH_TABLE_SIZE 64
2481 typedef struct _RESOURCE_HASH_ENTRY
{
2482 LIST_ENTRY ListEntry
;
2484 ULONG ContentionCount
;
2486 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
2488 typedef struct _RESOURCE_PERFORMANCE_DATA
{
2489 ULONG ActiveResourceCount
;
2490 ULONG TotalResourceCount
;
2491 ULONG ExclusiveAcquire
;
2492 ULONG SharedFirstLevel
;
2493 ULONG SharedSecondLevel
;
2494 ULONG StarveFirstLevel
;
2495 ULONG StarveSecondLevel
;
2496 ULONG WaitForExclusive
;
2497 ULONG OwnerTableExpands
;
2498 ULONG MaximumTableExpand
;
2499 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
2500 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
2502 /* Global debug flag */
2504 extern NTKERNELAPI ULONG NtGlobalFlag
;
2505 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
2507 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
2510 /******************************************************************************
2511 * Security Manager Types *
2512 ******************************************************************************/
2515 typedef PVOID PSECURITY_DESCRIPTOR
;
2516 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
2517 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
2519 typedef PVOID PACCESS_TOKEN
;
2522 #define DELETE 0x00010000L
2523 #define READ_CONTROL 0x00020000L
2524 #define WRITE_DAC 0x00040000L
2525 #define WRITE_OWNER 0x00080000L
2526 #define SYNCHRONIZE 0x00100000L
2527 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
2528 #define STANDARD_RIGHTS_READ READ_CONTROL
2529 #define STANDARD_RIGHTS_WRITE READ_CONTROL
2530 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
2531 #define STANDARD_RIGHTS_ALL 0x001F0000L
2532 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
2533 #define ACCESS_SYSTEM_SECURITY 0x01000000L
2534 #define MAXIMUM_ALLOWED 0x02000000L
2535 #define GENERIC_READ 0x80000000L
2536 #define GENERIC_WRITE 0x40000000L
2537 #define GENERIC_EXECUTE 0x20000000L
2538 #define GENERIC_ALL 0x10000000L
2540 typedef struct _GENERIC_MAPPING
{
2541 ACCESS_MASK GenericRead
;
2542 ACCESS_MASK GenericWrite
;
2543 ACCESS_MASK GenericExecute
;
2544 ACCESS_MASK GenericAll
;
2545 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
2547 #define ACL_REVISION 2
2548 #define ACL_REVISION_DS 4
2550 #define ACL_REVISION1 1
2551 #define ACL_REVISION2 2
2552 #define ACL_REVISION3 3
2553 #define ACL_REVISION4 4
2554 #define MIN_ACL_REVISION ACL_REVISION2
2555 #define MAX_ACL_REVISION ACL_REVISION4
2557 typedef struct _ACL
{
2565 /* Current security descriptor revision value */
2566 #define SECURITY_DESCRIPTOR_REVISION (1)
2567 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2569 /* Privilege attributes */
2570 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2571 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2572 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2573 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2575 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
2576 SE_PRIVILEGE_ENABLED | \
2577 SE_PRIVILEGE_REMOVED | \
2578 SE_PRIVILEGE_USED_FOR_ACCESS)
2580 #include <pshpack4.h>
2581 typedef struct _LUID_AND_ATTRIBUTES
{
2584 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
2585 #include <poppack.h>
2587 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2588 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2590 /* Privilege sets */
2591 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2593 typedef struct _PRIVILEGE_SET
{
2594 ULONG PrivilegeCount
;
2596 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2597 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
2599 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2601 SecurityIdentification
,
2602 SecurityImpersonation
,
2604 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2606 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2607 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2608 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2609 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2611 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2612 #define SECURITY_STATIC_TRACKING (FALSE)
2614 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2616 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2618 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2619 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2620 BOOLEAN EffectiveOnly
;
2621 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2623 typedef struct _SE_IMPERSONATION_STATE
{
2624 PACCESS_TOKEN Token
;
2626 BOOLEAN EffectiveOnly
;
2627 SECURITY_IMPERSONATION_LEVEL Level
;
2628 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2631 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2632 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2633 #define DACL_SECURITY_INFORMATION (0x00000004L)
2634 #define SACL_SECURITY_INFORMATION (0x00000008L)
2635 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2637 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2638 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2639 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2640 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2643 typedef enum _SECURITY_OPERATION_CODE
{
2644 SetSecurityDescriptor
,
2645 QuerySecurityDescriptor
,
2646 DeleteSecurityDescriptor
,
2647 AssignSecurityDescriptor
2648 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2650 #define INITIAL_PRIVILEGE_COUNT 3
2652 typedef struct _INITIAL_PRIVILEGE_SET
{
2653 ULONG PrivilegeCount
;
2655 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2656 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2658 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2659 #define SE_CREATE_TOKEN_PRIVILEGE 2
2660 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2661 #define SE_LOCK_MEMORY_PRIVILEGE 4
2662 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2663 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2664 #define SE_TCB_PRIVILEGE 7
2665 #define SE_SECURITY_PRIVILEGE 8
2666 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2667 #define SE_LOAD_DRIVER_PRIVILEGE 10
2668 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2669 #define SE_SYSTEMTIME_PRIVILEGE 12
2670 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2671 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2672 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2673 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2674 #define SE_BACKUP_PRIVILEGE 17
2675 #define SE_RESTORE_PRIVILEGE 18
2676 #define SE_SHUTDOWN_PRIVILEGE 19
2677 #define SE_DEBUG_PRIVILEGE 20
2678 #define SE_AUDIT_PRIVILEGE 21
2679 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2680 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2681 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2682 #define SE_UNDOCK_PRIVILEGE 25
2683 #define SE_SYNC_AGENT_PRIVILEGE 26
2684 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2685 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2686 #define SE_IMPERSONATE_PRIVILEGE 29
2687 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2688 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2689 #define SE_RELABEL_PRIVILEGE 32
2690 #define SE_INC_WORKING_SET_PRIVILEGE 33
2691 #define SE_TIME_ZONE_PRIVILEGE 34
2692 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2693 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2695 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2696 PACCESS_TOKEN ClientToken
;
2697 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2698 PACCESS_TOKEN PrimaryToken
;
2699 PVOID ProcessAuditId
;
2700 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2702 typedef struct _ACCESS_STATE
{
2704 BOOLEAN SecurityEvaluated
;
2705 BOOLEAN GenerateAudit
;
2706 BOOLEAN GenerateOnClose
;
2707 BOOLEAN PrivilegesAllocated
;
2709 ACCESS_MASK RemainingDesiredAccess
;
2710 ACCESS_MASK PreviouslyGrantedAccess
;
2711 ACCESS_MASK OriginalDesiredAccess
;
2712 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2713 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2716 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2717 PRIVILEGE_SET PrivilegeSet
;
2719 BOOLEAN AuditPrivileges
;
2720 UNICODE_STRING ObjectName
;
2721 UNICODE_STRING ObjectTypeName
;
2722 } ACCESS_STATE
, *PACCESS_STATE
;
2725 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2727 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
2731 #ifndef _NTLSA_AUDIT_
2732 #define _NTLSA_AUDIT_
2734 #define SE_MAX_AUDIT_PARAMETERS 32
2735 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2737 #define SE_ADT_OBJECT_ONLY 0x1
2739 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2740 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2741 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2742 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2743 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2745 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2746 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2747 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2749 typedef enum _SE_ADT_PARAMETER_TYPE
{
2750 SeAdtParmTypeNone
= 0,
2751 SeAdtParmTypeString
,
2752 SeAdtParmTypeFileSpec
,
2755 SeAdtParmTypeLogonId
,
2756 SeAdtParmTypeNoLogonId
,
2757 SeAdtParmTypeAccessMask
,
2759 SeAdtParmTypeObjectTypes
,
2760 SeAdtParmTypeHexUlong
,
2765 SeAdtParmTypeHexInt64
,
2766 SeAdtParmTypeStringList
,
2767 SeAdtParmTypeSidList
,
2768 SeAdtParmTypeDuration
,
2769 SeAdtParmTypeUserAccountControl
,
2771 SeAdtParmTypeMessage
,
2772 SeAdtParmTypeDateTime
,
2773 SeAdtParmTypeSockAddr
,
2775 SeAdtParmTypeLogonHours
,
2776 SeAdtParmTypeLogonIdNoSid
,
2777 SeAdtParmTypeUlongNoConv
,
2778 SeAdtParmTypeSockAddrNoPort
,
2779 SeAdtParmTypeAccessReason
2780 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2782 typedef struct _SE_ADT_OBJECT_TYPE
{
2786 ACCESS_MASK AccessMask
;
2787 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2789 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2790 SE_ADT_PARAMETER_TYPE Type
;
2794 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2796 typedef struct _SE_ADT_ACCESS_REASON
{
2797 ACCESS_MASK AccessMask
;
2798 ULONG AccessReasons
[32];
2799 ULONG ObjectTypeIndex
;
2800 ULONG AccessGranted
;
2801 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2802 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2804 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2807 ULONG ParameterCount
;
2809 USHORT FlatSubCategoryId
;
2812 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2813 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2815 #endif /* !_NTLSA_AUDIT_ */
2816 #endif /* !_NTLSA_IFS_ */
2817 /******************************************************************************
2818 * Power Management Support Types *
2819 ******************************************************************************/
2824 #define PO_CB_SYSTEM_POWER_POLICY 0
2825 #define PO_CB_AC_STATUS 1
2826 #define PO_CB_BUTTON_COLLISION 2
2827 #define PO_CB_SYSTEM_STATE_LOCK 3
2828 #define PO_CB_LID_SWITCH_STATE 4
2829 #define PO_CB_PROCESSOR_POWER_POLICY 5
2831 /* Power States/Levels */
2832 typedef enum _SYSTEM_POWER_STATE
{
2833 PowerSystemUnspecified
= 0,
2835 PowerSystemSleeping1
,
2836 PowerSystemSleeping2
,
2837 PowerSystemSleeping3
,
2838 PowerSystemHibernate
,
2839 PowerSystemShutdown
,
2841 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2843 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
2845 typedef enum _POWER_INFORMATION_LEVEL
{
2846 SystemPowerPolicyAc
,
2847 SystemPowerPolicyDc
,
2848 VerifySystemPolicyAc
,
2849 VerifySystemPolicyDc
,
2850 SystemPowerCapabilities
,
2852 SystemPowerStateHandler
,
2853 ProcessorStateHandler
,
2854 SystemPowerPolicyCurrent
,
2855 AdministratorPowerPolicy
,
2856 SystemReserveHiberFile
,
2857 ProcessorInformation
,
2858 SystemPowerInformation
,
2859 ProcessorStateHandler2
,
2862 SystemExecutionState
,
2863 SystemPowerStateNotifyHandler
,
2864 ProcessorPowerPolicyAc
,
2865 ProcessorPowerPolicyDc
,
2866 VerifyProcessorPowerPolicyAc
,
2867 VerifyProcessorPowerPolicyDc
,
2868 ProcessorPowerPolicyCurrent
,
2869 SystemPowerStateLogging
,
2870 SystemPowerLoggingEntry
,
2871 SetPowerSettingValue
,
2872 NotifyUserPowerSetting
,
2873 PowerInformationLevelUnused0
,
2874 PowerInformationLevelUnused1
,
2876 TraceApplicationPowerMessage
,
2877 TraceApplicationPowerMessageEnd
,
2878 ProcessorPerfStates
,
2879 ProcessorIdleStates
,
2882 SystemHiberFileInformation
,
2883 TraceServicePowerMessage
,
2885 PowerShutdownNotification
,
2886 MonitorCapabilities
,
2888 SessionDisplayState
,
2891 GetPowerRequestList
,
2892 ProcessorInformationEx
,
2893 NotifyUserModeLegacyPowerEvent
,
2895 ProcessorIdleDomains
,
2897 SystemHiberFileSize
,
2898 PowerInformationLevelMaximum
2899 } POWER_INFORMATION_LEVEL
;
2902 PowerActionNone
= 0,
2903 PowerActionReserved
,
2905 PowerActionHibernate
,
2906 PowerActionShutdown
,
2907 PowerActionShutdownReset
,
2908 PowerActionShutdownOff
,
2909 PowerActionWarmEject
2910 } POWER_ACTION
, *PPOWER_ACTION
;
2912 typedef enum _DEVICE_POWER_STATE
{
2913 PowerDeviceUnspecified
= 0,
2919 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
2921 typedef enum _MONITOR_DISPLAY_STATE
{
2922 PowerMonitorOff
= 0,
2925 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
2927 typedef union _POWER_STATE
{
2928 SYSTEM_POWER_STATE SystemState
;
2929 DEVICE_POWER_STATE DeviceState
;
2930 } POWER_STATE
, *PPOWER_STATE
;
2932 typedef enum _POWER_STATE_TYPE
{
2933 SystemPowerState
= 0,
2935 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
2937 #if (NTDDI_VERSION >= NTDDI_VISTA)
2938 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
2939 _ANONYMOUS_UNION
union {
2940 _ANONYMOUS_STRUCT
struct {
2942 ULONG TargetSystemState
:4;
2943 ULONG EffectiveSystemState
:4;
2944 ULONG CurrentSystemState
:4;
2945 ULONG IgnoreHibernationPath
:1;
2946 ULONG PseudoTransition
:1;
2949 ULONG ContextAsUlong
;
2951 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
2954 #if (NTDDI_VERSION >= NTDDI_WIN7)
2955 typedef struct _COUNTED_REASON_CONTEXT
{
2958 _ANONYMOUS_UNION
union {
2959 _ANONYMOUS_STRUCT
struct {
2960 UNICODE_STRING ResourceFileName
;
2961 USHORT ResourceReasonId
;
2963 PUNICODE_STRING ReasonStrings
;
2965 UNICODE_STRING SimpleString
;
2967 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
2970 #define IOCTL_QUERY_DEVICE_POWER_STATE \
2971 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
2973 #define IOCTL_SET_DEVICE_WAKE \
2974 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2976 #define IOCTL_CANCEL_DEVICE_WAKE \
2977 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2979 #define ES_SYSTEM_REQUIRED 0x00000001
2980 #define ES_DISPLAY_REQUIRED 0x00000002
2981 #define ES_USER_PRESENT 0x00000004
2982 #define ES_CONTINUOUS 0x80000000
2984 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
2991 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
2992 #define DIAGNOSTIC_REASON_VERSION 0
2993 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
2994 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
2995 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
2996 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
2999 #define POWER_REQUEST_CONTEXT_VERSION 0
3000 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
3001 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
3003 #define PowerRequestMaximum 3
3005 typedef enum _POWER_REQUEST_TYPE
{
3006 PowerRequestDisplayRequired
,
3007 PowerRequestSystemRequired
,
3008 PowerRequestAwayModeRequired
3009 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
3011 #if (NTDDI_VERSION >= NTDDI_WINXP)
3013 #define PDCAP_D0_SUPPORTED 0x00000001
3014 #define PDCAP_D1_SUPPORTED 0x00000002
3015 #define PDCAP_D2_SUPPORTED 0x00000004
3016 #define PDCAP_D3_SUPPORTED 0x00000008
3017 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
3018 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
3019 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
3020 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
3021 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
3023 typedef struct CM_Power_Data_s
{
3025 DEVICE_POWER_STATE PD_MostRecentPowerState
;
3026 ULONG PD_Capabilities
;
3030 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
3031 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
3032 } CM_POWER_DATA
, *PCM_POWER_DATA
;
3034 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3036 typedef enum _SYSTEM_POWER_CONDITION
{
3041 } SYSTEM_POWER_CONDITION
;
3043 typedef struct _SET_POWER_SETTING_VALUE
{
3046 SYSTEM_POWER_CONDITION PowerCondition
;
3048 UCHAR Data
[ANYSIZE_ARRAY
];
3049 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
3051 #define POWER_SETTING_VALUE_VERSION (0x1)
3053 typedef struct _NOTIFY_USER_POWER_SETTING
{
3055 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
3057 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
3058 LARGE_INTEGER ActivationTime
;
3060 ULONG ButtonInstanceID
;
3061 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
3063 typedef enum _POWER_PLATFORM_ROLE
{
3064 PlatformRoleUnspecified
= 0,
3065 PlatformRoleDesktop
,
3067 PlatformRoleWorkstation
,
3068 PlatformRoleEnterpriseServer
,
3069 PlatformRoleSOHOServer
,
3070 PlatformRoleAppliancePC
,
3071 PlatformRolePerformanceServer
,
3073 } POWER_PLATFORM_ROLE
;
3075 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
3079 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
3080 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
3082 #endif /* !_PO_DDK_ */
3084 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
3085 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
3086 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
3087 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
3089 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
3090 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
3091 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
3092 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
3093 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
3094 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
3095 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
3096 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
3097 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
3098 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
3099 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
3100 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
3101 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
3102 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
3103 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
3104 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
3105 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
3106 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
3107 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
3108 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
3109 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
3110 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
3111 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
3112 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
3113 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
3114 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
3115 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
3116 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
3117 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
3118 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
3119 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
3120 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
3121 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
3122 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
3123 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
3124 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
3125 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
3126 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
3127 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
3128 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
3129 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
3130 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
3131 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
3132 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
3133 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
3134 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
3135 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
3136 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
3137 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
3138 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
3139 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
3140 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
3141 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
3142 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
3143 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
3144 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
3145 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
3146 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
3147 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
3148 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
3149 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
3150 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
3151 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
3152 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
3153 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
3154 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
3155 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
3156 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
3157 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
3158 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
3159 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
3160 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
3161 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
3162 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
3163 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
3164 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
3165 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
3166 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
3167 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
3168 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
3169 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
3170 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
3171 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
3172 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
3173 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
3174 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
3175 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
3176 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
3177 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
3178 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
3179 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
3180 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
3181 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
3182 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
3183 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
3184 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
3185 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
3186 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
3187 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
3188 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
3189 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
3190 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
3191 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
3192 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
3193 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
3194 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
3195 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
3196 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
3197 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
3199 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
3200 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
3201 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
3202 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
3204 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
3205 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
3207 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
3208 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
3210 _Function_class_(REQUEST_POWER_COMPLETE
)
3211 _IRQL_requires_same_
3213 (NTAPI REQUEST_POWER_COMPLETE
)(
3214 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
3215 _In_ UCHAR MinorFunction
,
3216 _In_ POWER_STATE PowerState
,
3217 _In_opt_ PVOID Context
,
3218 _In_
struct _IO_STATUS_BLOCK
*IoStatus
);
3219 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
3221 _Function_class_(POWER_SETTING_CALLBACK
)
3222 _IRQL_requires_same_
3224 (NTAPI POWER_SETTING_CALLBACK
)(
3225 _In_ LPCGUID SettingGuid
,
3226 _In_reads_bytes_(ValueLength
) PVOID Value
,
3227 _In_ ULONG ValueLength
,
3228 _Inout_opt_ PVOID Context
);
3229 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
3231 /******************************************************************************
3232 * Configuration Manager Types *
3233 ******************************************************************************/
3235 /* Resource list definitions */
3236 typedef int CM_RESOURCE_TYPE
;
3238 #define CmResourceTypeNull 0
3239 #define CmResourceTypePort 1
3240 #define CmResourceTypeInterrupt 2
3241 #define CmResourceTypeMemory 3
3242 #define CmResourceTypeDma 4
3243 #define CmResourceTypeDeviceSpecific 5
3244 #define CmResourceTypeBusNumber 6
3245 #define CmResourceTypeNonArbitrated 128
3246 #define CmResourceTypeConfigData 128
3247 #define CmResourceTypeDevicePrivate 129
3248 #define CmResourceTypePcCardConfig 130
3249 #define CmResourceTypeMfCardConfig 131
3251 /* KEY_VALUE_Xxx.Type */
3254 #define REG_EXPAND_SZ 2
3255 #define REG_BINARY 3
3257 #define REG_DWORD_LITTLE_ENDIAN 4
3258 #define REG_DWORD_BIG_ENDIAN 5
3260 #define REG_MULTI_SZ 7
3261 #define REG_RESOURCE_LIST 8
3262 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3263 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3264 #define REG_QWORD 11
3265 #define REG_QWORD_LITTLE_ENDIAN 11
3267 /* Registry Access Rights */
3268 #define KEY_QUERY_VALUE (0x0001)
3269 #define KEY_SET_VALUE (0x0002)
3270 #define KEY_CREATE_SUB_KEY (0x0004)
3271 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
3272 #define KEY_NOTIFY (0x0010)
3273 #define KEY_CREATE_LINK (0x0020)
3274 #define KEY_WOW64_32KEY (0x0200)
3275 #define KEY_WOW64_64KEY (0x0100)
3276 #define KEY_WOW64_RES (0x0300)
3278 #define KEY_READ ((STANDARD_RIGHTS_READ |\
3280 KEY_ENUMERATE_SUB_KEYS |\
3285 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
3287 KEY_CREATE_SUB_KEY) \
3291 #define KEY_EXECUTE ((KEY_READ) \
3295 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
3298 KEY_CREATE_SUB_KEY |\
3299 KEY_ENUMERATE_SUB_KEYS |\
3305 /* Registry Open/Create Options */
3306 #define REG_OPTION_RESERVED (0x00000000L)
3307 #define REG_OPTION_NON_VOLATILE (0x00000000L)
3308 #define REG_OPTION_VOLATILE (0x00000001L)
3309 #define REG_OPTION_CREATE_LINK (0x00000002L)
3310 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
3311 #define REG_OPTION_OPEN_LINK (0x00000008L)
3313 #define REG_LEGAL_OPTION \
3314 (REG_OPTION_RESERVED |\
3315 REG_OPTION_NON_VOLATILE |\
3316 REG_OPTION_VOLATILE |\
3317 REG_OPTION_CREATE_LINK |\
3318 REG_OPTION_BACKUP_RESTORE |\
3319 REG_OPTION_OPEN_LINK)
3321 #define REG_OPEN_LEGAL_OPTION \
3322 (REG_OPTION_RESERVED |\
3323 REG_OPTION_BACKUP_RESTORE |\
3324 REG_OPTION_OPEN_LINK)
3326 #define REG_STANDARD_FORMAT 1
3327 #define REG_LATEST_FORMAT 2
3328 #define REG_NO_COMPRESSION 4
3330 /* Key creation/open disposition */
3331 #define REG_CREATED_NEW_KEY (0x00000001L)
3332 #define REG_OPENED_EXISTING_KEY (0x00000002L)
3334 /* Key restore & hive load flags */
3335 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
3336 #define REG_REFRESH_HIVE (0x00000002L)
3337 #define REG_NO_LAZY_FLUSH (0x00000004L)
3338 #define REG_FORCE_RESTORE (0x00000008L)
3339 #define REG_APP_HIVE (0x00000010L)
3340 #define REG_PROCESS_PRIVATE (0x00000020L)
3341 #define REG_START_JOURNAL (0x00000040L)
3342 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
3343 #define REG_HIVE_NO_RM (0x00000100L)
3344 #define REG_HIVE_SINGLE_LOG (0x00000200L)
3345 #define REG_BOOT_HIVE (0x00000400L)
3348 #define REG_FORCE_UNLOAD 1
3350 /* Notify Filter Values */
3351 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
3352 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
3353 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
3354 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
3356 #define REG_LEGAL_CHANGE_FILTER \
3357 (REG_NOTIFY_CHANGE_NAME |\
3358 REG_NOTIFY_CHANGE_ATTRIBUTES |\
3359 REG_NOTIFY_CHANGE_LAST_SET |\
3360 REG_NOTIFY_CHANGE_SECURITY)
3362 #include <pshpack4.h>
3363 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
3365 UCHAR ShareDisposition
;
3369 PHYSICAL_ADDRESS Start
;
3373 PHYSICAL_ADDRESS Start
;
3377 #if defined(NT_PROCESSOR_GROUPS)
3386 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3388 _ANONYMOUS_UNION
union {
3390 #if defined(NT_PROCESSOR_GROUPS)
3395 USHORT MessageCount
;
3400 #if defined(NT_PROCESSOR_GROUPS)
3413 PHYSICAL_ADDRESS Start
;
3433 } DeviceSpecificData
;
3434 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3436 PHYSICAL_ADDRESS Start
;
3440 PHYSICAL_ADDRESS Start
;
3444 PHYSICAL_ADDRESS Start
;
3449 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
3450 #include <poppack.h>
3452 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
3453 #define CmResourceTypeNull 0
3454 #define CmResourceTypePort 1
3455 #define CmResourceTypeInterrupt 2
3456 #define CmResourceTypeMemory 3
3457 #define CmResourceTypeDma 4
3458 #define CmResourceTypeDeviceSpecific 5
3459 #define CmResourceTypeBusNumber 6
3460 #define CmResourceTypeMemoryLarge 7
3461 #define CmResourceTypeNonArbitrated 128
3462 #define CmResourceTypeConfigData 128
3463 #define CmResourceTypeDevicePrivate 129
3464 #define CmResourceTypePcCardConfig 130
3465 #define CmResourceTypeMfCardConfig 131
3467 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
3468 typedef enum _CM_SHARE_DISPOSITION
{
3469 CmResourceShareUndetermined
= 0,
3470 CmResourceShareDeviceExclusive
,
3471 CmResourceShareDriverExclusive
,
3472 CmResourceShareShared
3473 } CM_SHARE_DISPOSITION
;
3475 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
3476 #define CM_RESOURCE_PORT_MEMORY 0x0000
3477 #define CM_RESOURCE_PORT_IO 0x0001
3478 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
3479 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
3480 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
3481 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
3482 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
3483 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
3484 #define CM_RESOURCE_PORT_BAR 0x0100
3486 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
3487 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
3488 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
3489 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
3490 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
3492 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
3494 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
3496 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
3497 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
3498 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
3499 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
3500 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
3501 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
3502 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
3503 #define CM_RESOURCE_MEMORY_24 0x0010
3504 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
3505 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
3506 #define CM_RESOURCE_MEMORY_BAR 0x0080
3507 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
3509 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
3510 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
3511 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
3512 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
3514 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
3515 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
3516 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
3518 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
3519 #define CM_RESOURCE_DMA_8 0x0000
3520 #define CM_RESOURCE_DMA_16 0x0001
3521 #define CM_RESOURCE_DMA_32 0x0002
3522 #define CM_RESOURCE_DMA_8_AND_16 0x0004
3523 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
3524 #define CM_RESOURCE_DMA_TYPE_A 0x0010
3525 #define CM_RESOURCE_DMA_TYPE_B 0x0020
3526 #define CM_RESOURCE_DMA_TYPE_F 0x0040
3528 typedef struct _DEVICE_FLAGS
{
3536 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
3538 typedef enum _INTERFACE_TYPE
{
3539 InterfaceTypeUndefined
= -1,
3557 MaximumInterfaceType
3558 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
3560 typedef struct _CM_COMPONENT_INFORMATION
{
3564 KAFFINITY AffinityMask
;
3565 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
3567 typedef struct _CM_ROM_BLOCK
{
3570 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
3572 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
3576 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
3577 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
3579 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
3580 INTERFACE_TYPE InterfaceType
;
3582 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
3583 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
3585 typedef struct _CM_RESOURCE_LIST
{
3587 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
3588 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
3590 typedef struct _PNP_BUS_INFORMATION
{
3592 INTERFACE_TYPE LegacyBusType
;
3594 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
3596 #include <pshpack1.h>
3598 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3601 USHORT SectorsPerTrack
;
3603 USHORT NumberDrives
;
3604 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3606 typedef struct _CM_MCA_POS_DATA
{
3612 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3614 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3618 UCHAR DeviceType
[3];
3619 USHORT DeviceAttributes
;
3620 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3622 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3626 USHORT ControlField
;
3628 ULONG EventFlagAddress
;
3629 USHORT RealModeEntryOffset
;
3630 USHORT RealModeEntrySegment
;
3631 USHORT ProtectedModeEntryOffset
;
3632 ULONG ProtectedModeCodeBaseAddress
;
3634 USHORT RealModeDataBaseAddress
;
3635 ULONG ProtectedModeDataBaseAddress
;
3636 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3638 #include <poppack.h>
3640 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3641 ULONG BytesPerSector
;
3642 ULONG NumberOfCylinders
;
3643 ULONG SectorsPerTrack
;
3644 ULONG NumberOfHeads
;
3645 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3647 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3652 USHORT KeyboardFlags
;
3653 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3655 typedef struct _CM_SCSI_DEVICE_DATA
{
3658 UCHAR HostIdentifier
;
3659 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3661 typedef struct _CM_VIDEO_DEVICE_DATA
{
3665 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3667 typedef struct _CM_SONIC_DEVICE_DATA
{
3670 USHORT DataConfigurationRegister
;
3671 UCHAR EthernetAddress
[8];
3672 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3674 typedef struct _CM_SERIAL_DEVICE_DATA
{
3678 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3680 typedef struct _CM_MONITOR_DEVICE_DATA
{
3683 USHORT HorizontalScreenSize
;
3684 USHORT VerticalScreenSize
;
3685 USHORT HorizontalResolution
;
3686 USHORT VerticalResolution
;
3687 USHORT HorizontalDisplayTimeLow
;
3688 USHORT HorizontalDisplayTime
;
3689 USHORT HorizontalDisplayTimeHigh
;
3690 USHORT HorizontalBackPorchLow
;
3691 USHORT HorizontalBackPorch
;
3692 USHORT HorizontalBackPorchHigh
;
3693 USHORT HorizontalFrontPorchLow
;
3694 USHORT HorizontalFrontPorch
;
3695 USHORT HorizontalFrontPorchHigh
;
3696 USHORT HorizontalSyncLow
;
3697 USHORT HorizontalSync
;
3698 USHORT HorizontalSyncHigh
;
3699 USHORT VerticalBackPorchLow
;
3700 USHORT VerticalBackPorch
;
3701 USHORT VerticalBackPorchHigh
;
3702 USHORT VerticalFrontPorchLow
;
3703 USHORT VerticalFrontPorch
;
3704 USHORT VerticalFrontPorchHigh
;
3705 USHORT VerticalSyncLow
;
3706 USHORT VerticalSync
;
3707 USHORT VerticalSyncHigh
;
3708 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3710 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3716 UCHAR StepRateHeadUnloadTime
;
3719 UCHAR SectorLengthCode
;
3720 UCHAR SectorPerTrack
;
3721 UCHAR ReadWriteGapLength
;
3722 UCHAR DataTransferLength
;
3723 UCHAR FormatGapLength
;
3724 UCHAR FormatFillCharacter
;
3725 UCHAR HeadSettleTime
;
3726 UCHAR MotorSettleTime
;
3727 UCHAR MaximumTrackValue
;
3728 UCHAR DataTransferRate
;
3729 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3731 typedef enum _KEY_INFORMATION_CLASS
{
3732 KeyBasicInformation
,
3736 KeyCachedInformation
,
3737 KeyFlagsInformation
,
3738 KeyVirtualizationInformation
,
3739 KeyHandleTagsInformation
,
3741 } KEY_INFORMATION_CLASS
;
3743 typedef struct _KEY_BASIC_INFORMATION
{
3744 LARGE_INTEGER LastWriteTime
;
3748 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3750 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3752 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3754 typedef struct _KEY_FULL_INFORMATION
{
3755 LARGE_INTEGER LastWriteTime
;
3763 ULONG MaxValueNameLen
;
3764 ULONG MaxValueDataLen
;
3766 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3768 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3770 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3772 typedef struct _KEY_NODE_INFORMATION
{
3773 LARGE_INTEGER LastWriteTime
;
3779 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3781 typedef enum _KEY_SET_INFORMATION_CLASS
{
3782 KeyWriteTimeInformation
,
3783 KeyWow64FlagsInformation
,
3784 KeyControlFlagsInformation
,
3785 KeySetVirtualizationInformation
,
3786 KeySetDebugInformation
,
3787 KeySetHandleTagsInformation
,
3789 } KEY_SET_INFORMATION_CLASS
;
3791 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3792 ULONG VirtualTarget
:1;
3793 ULONG VirtualStore
:1;
3794 ULONG VirtualSource
:1;
3796 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3798 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3803 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3805 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3812 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3814 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3818 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3819 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3821 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3824 _Field_size_bytes_(DataLength
) UCHAR Data
[1];
3825 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3827 typedef struct _KEY_VALUE_ENTRY
{
3828 PUNICODE_STRING ValueName
;
3832 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3834 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3835 KeyValueBasicInformation
,
3836 KeyValueFullInformation
,
3837 KeyValuePartialInformation
,
3838 KeyValueFullInformationAlign64
,
3839 KeyValuePartialInformationAlign64
3840 } KEY_VALUE_INFORMATION_CLASS
;
3842 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3844 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
3846 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3847 LARGE_INTEGER LastWriteTime
;
3848 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3850 #if (NTDDI_VERSION < NTDDI_VISTA)
3851 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3853 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3856 typedef enum _REG_NOTIFY_CLASS
{
3858 RegNtPreDeleteKey
= RegNtDeleteKey
,
3860 RegNtPreSetValueKey
= RegNtSetValueKey
,
3861 RegNtDeleteValueKey
,
3862 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3863 RegNtSetInformationKey
,
3864 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3866 RegNtPreRenameKey
= RegNtRenameKey
,
3868 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3869 RegNtEnumerateValueKey
,
3870 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3872 RegNtPreQueryKey
= RegNtQueryKey
,
3874 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3875 RegNtQueryMultipleValueKey
,
3876 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3881 RegNtKeyHandleClose
,
3882 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3884 RegNtPostSetValueKey
,
3885 RegNtPostDeleteValueKey
,
3886 RegNtPostSetInformationKey
,
3888 RegNtPostEnumerateKey
,
3889 RegNtPostEnumerateValueKey
,
3891 RegNtPostQueryValueKey
,
3892 RegNtPostQueryMultipleValueKey
,
3893 RegNtPostKeyHandleClose
,
3894 RegNtPreCreateKeyEx
,
3895 RegNtPostCreateKeyEx
,
3904 RegNtPreQueryKeySecurity
,
3905 RegNtPostQueryKeySecurity
,
3906 RegNtPreSetKeySecurity
,
3907 RegNtPostSetKeySecurity
,
3908 RegNtCallbackObjectContextCleanup
,
3910 RegNtPostRestoreKey
,
3914 RegNtPostReplaceKey
,
3916 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3918 _IRQL_requires_same_
3919 _Function_class_(EX_CALLBACK_FUNCTION
)
3921 (NTAPI EX_CALLBACK_FUNCTION
)(
3922 _In_ PVOID CallbackContext
,
3923 _In_opt_ PVOID Argument1
,
3924 _In_opt_ PVOID Argument2
);
3925 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
3927 typedef struct _REG_DELETE_KEY_INFORMATION
{
3930 PVOID ObjectContext
;
3932 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
3933 #if (NTDDI_VERSION >= NTDDI_VISTA)
3934 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
3938 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
3940 PUNICODE_STRING ValueName
;
3946 PVOID ObjectContext
;
3948 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3950 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
3952 PUNICODE_STRING ValueName
;
3954 PVOID ObjectContext
;
3956 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3958 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
3960 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3961 PVOID KeySetInformation
;
3962 ULONG KeySetInformationLength
;
3964 PVOID ObjectContext
;
3966 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3968 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
3971 KEY_INFORMATION_CLASS KeyInformationClass
;
3972 PVOID KeyInformation
;
3974 PULONG ResultLength
;
3976 PVOID ObjectContext
;
3978 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3980 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
3983 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3984 PVOID KeyValueInformation
;
3986 PULONG ResultLength
;
3988 PVOID ObjectContext
;
3990 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3992 typedef struct _REG_QUERY_KEY_INFORMATION
{
3994 KEY_INFORMATION_CLASS KeyInformationClass
;
3995 PVOID KeyInformation
;
3997 PULONG ResultLength
;
3999 PVOID ObjectContext
;
4001 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
4003 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
4005 PUNICODE_STRING ValueName
;
4006 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4007 PVOID KeyValueInformation
;
4009 PULONG ResultLength
;
4011 PVOID ObjectContext
;
4013 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
4015 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
4017 PKEY_VALUE_ENTRY ValueEntries
;
4020 PULONG BufferLength
;
4021 PULONG RequiredBufferLength
;
4023 PVOID ObjectContext
;
4025 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4027 typedef struct _REG_RENAME_KEY_INFORMATION
{
4029 PUNICODE_STRING NewName
;
4031 PVOID ObjectContext
;
4033 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
4035 typedef struct _REG_CREATE_KEY_INFORMATION
{
4036 PUNICODE_STRING CompleteName
;
4039 ULONG CreateOptions
;
4040 PUNICODE_STRING Class
;
4041 PVOID SecurityDescriptor
;
4042 PVOID SecurityQualityOfService
;
4043 ACCESS_MASK DesiredAccess
;
4044 ACCESS_MASK GrantedAccess
;
4046 PVOID
*ResultObject
;
4048 PVOID RootObjectContext
;
4051 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
4053 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
4054 PUNICODE_STRING CompleteName
;
4058 PUNICODE_STRING Class
;
4059 PVOID SecurityDescriptor
;
4060 PVOID SecurityQualityOfService
;
4061 ACCESS_MASK DesiredAccess
;
4062 ACCESS_MASK GrantedAccess
;
4064 PVOID
*ResultObject
;
4066 PVOID RootObjectContext
;
4069 PUNICODE_STRING RemainingName
;
4072 KPROCESSOR_MODE CheckAccessMode
;
4073 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
4075 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
4076 PUNICODE_STRING CompleteName
;
4077 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
4079 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
4080 PUNICODE_STRING CompleteName
;
4083 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4085 typedef struct _REG_POST_OPERATION_INFORMATION
{
4088 PVOID PreInformation
;
4089 NTSTATUS ReturnStatus
;
4091 PVOID ObjectContext
;
4093 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4095 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
4098 PVOID ObjectContext
;
4100 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4102 #if (NTDDI_VERSION >= NTDDI_VISTA)
4104 typedef struct _REG_LOAD_KEY_INFORMATION
{
4106 PUNICODE_STRING KeyName
;
4107 PUNICODE_STRING SourceFile
;
4109 PVOID TrustClassObject
;
4111 ACCESS_MASK DesiredAccess
;
4114 PVOID ObjectContext
;
4116 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
4118 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
4122 PVOID ObjectContext
;
4124 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
4126 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
4128 PVOID ObjectContext
;
4130 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
4132 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
4134 PSECURITY_INFORMATION SecurityInformation
;
4135 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4138 PVOID ObjectContext
;
4140 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
4142 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
4144 PSECURITY_INFORMATION SecurityInformation
;
4145 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4147 PVOID ObjectContext
;
4149 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
4151 typedef struct _REG_RESTORE_KEY_INFORMATION
{
4156 PVOID ObjectContext
;
4158 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
4160 typedef struct _REG_SAVE_KEY_INFORMATION
{
4165 PVOID ObjectContext
;
4167 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
4169 typedef struct _REG_REPLACE_KEY_INFORMATION
{
4171 PUNICODE_STRING OldFileName
;
4172 PUNICODE_STRING NewFileName
;
4174 PVOID ObjectContext
;
4176 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
4178 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
4180 #define SERVICE_KERNEL_DRIVER 0x00000001
4181 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
4182 #define SERVICE_ADAPTER 0x00000004
4183 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
4185 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
4186 SERVICE_FILE_SYSTEM_DRIVER | \
4187 SERVICE_RECOGNIZER_DRIVER)
4189 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
4190 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
4191 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
4192 SERVICE_WIN32_SHARE_PROCESS)
4194 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
4196 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
4199 SERVICE_INTERACTIVE_PROCESS)
4201 /* Service Start Types */
4202 #define SERVICE_BOOT_START 0x00000000
4203 #define SERVICE_SYSTEM_START 0x00000001
4204 #define SERVICE_AUTO_START 0x00000002
4205 #define SERVICE_DEMAND_START 0x00000003
4206 #define SERVICE_DISABLED 0x00000004
4208 #define SERVICE_ERROR_IGNORE 0x00000000
4209 #define SERVICE_ERROR_NORMAL 0x00000001
4210 #define SERVICE_ERROR_SEVERE 0x00000002
4211 #define SERVICE_ERROR_CRITICAL 0x00000003
4213 typedef enum _CM_SERVICE_NODE_TYPE
{
4214 DriverType
= SERVICE_KERNEL_DRIVER
,
4215 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
4216 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
4217 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
4218 AdapterType
= SERVICE_ADAPTER
,
4219 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
4220 } SERVICE_NODE_TYPE
;
4222 typedef enum _CM_SERVICE_LOAD_TYPE
{
4223 BootLoad
= SERVICE_BOOT_START
,
4224 SystemLoad
= SERVICE_SYSTEM_START
,
4225 AutoLoad
= SERVICE_AUTO_START
,
4226 DemandLoad
= SERVICE_DEMAND_START
,
4227 DisableLoad
= SERVICE_DISABLED
4228 } SERVICE_LOAD_TYPE
;
4230 typedef enum _CM_ERROR_CONTROL_TYPE
{
4231 IgnoreError
= SERVICE_ERROR_IGNORE
,
4232 NormalError
= SERVICE_ERROR_NORMAL
,
4233 SevereError
= SERVICE_ERROR_SEVERE
,
4234 CriticalError
= SERVICE_ERROR_CRITICAL
4235 } SERVICE_ERROR_TYPE
;
4237 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
4238 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
4239 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
4241 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
4242 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
4243 CM_SERVICE_USB_DISK_BOOT_LOAD)
4245 /******************************************************************************
4246 * I/O Manager Types *
4247 ******************************************************************************/
4250 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
4252 #define CONNECT_FULLY_SPECIFIED 0x1
4253 #define CONNECT_LINE_BASED 0x2
4254 #define CONNECT_MESSAGE_BASED 0x3
4255 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
4256 #define CONNECT_CURRENT_VERSION 0x4
4258 #define POOL_COLD_ALLOCATION 256
4259 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4260 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4262 #define IO_TYPE_ADAPTER 1
4263 #define IO_TYPE_CONTROLLER 2
4264 #define IO_TYPE_DEVICE 3
4265 #define IO_TYPE_DRIVER 4
4266 #define IO_TYPE_FILE 5
4267 #define IO_TYPE_IRP 6
4268 #define IO_TYPE_MASTER_ADAPTER 7
4269 #define IO_TYPE_OPEN_PACKET 8
4270 #define IO_TYPE_TIMER 9
4271 #define IO_TYPE_VPB 10
4272 #define IO_TYPE_ERROR_LOG 11
4273 #define IO_TYPE_ERROR_MESSAGE 12
4274 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
4276 #define IO_TYPE_CSQ_IRP_CONTEXT 1
4277 #define IO_TYPE_CSQ 2
4278 #define IO_TYPE_CSQ_EX 3
4280 /* IO_RESOURCE_DESCRIPTOR.Option */
4281 #define IO_RESOURCE_PREFERRED 0x01
4282 #define IO_RESOURCE_DEFAULT 0x02
4283 #define IO_RESOURCE_ALTERNATIVE 0x08
4285 #define FILE_DEVICE_BEEP 0x00000001
4286 #define FILE_DEVICE_CD_ROM 0x00000002
4287 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
4288 #define FILE_DEVICE_CONTROLLER 0x00000004
4289 #define FILE_DEVICE_DATALINK 0x00000005
4290 #define FILE_DEVICE_DFS 0x00000006
4291 #define FILE_DEVICE_DISK 0x00000007
4292 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
4293 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
4294 #define FILE_DEVICE_INPORT_PORT 0x0000000a
4295 #define FILE_DEVICE_KEYBOARD 0x0000000b
4296 #define FILE_DEVICE_MAILSLOT 0x0000000c
4297 #define FILE_DEVICE_MIDI_IN 0x0000000d
4298 #define FILE_DEVICE_MIDI_OUT 0x0000000e
4299 #define FILE_DEVICE_MOUSE 0x0000000f
4300 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
4301 #define FILE_DEVICE_NAMED_PIPE 0x00000011
4302 #define FILE_DEVICE_NETWORK 0x00000012
4303 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
4304 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
4305 #define FILE_DEVICE_NULL 0x00000015
4306 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
4307 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
4308 #define FILE_DEVICE_PRINTER 0x00000018
4309 #define FILE_DEVICE_SCANNER 0x00000019
4310 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
4311 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
4312 #define FILE_DEVICE_SCREEN 0x0000001c
4313 #define FILE_DEVICE_SOUND 0x0000001d
4314 #define FILE_DEVICE_STREAMS 0x0000001e
4315 #define FILE_DEVICE_TAPE 0x0000001f
4316 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
4317 #define FILE_DEVICE_TRANSPORT 0x00000021
4318 #define FILE_DEVICE_UNKNOWN 0x00000022
4319 #define FILE_DEVICE_VIDEO 0x00000023
4320 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
4321 #define FILE_DEVICE_WAVE_IN 0x00000025
4322 #define FILE_DEVICE_WAVE_OUT 0x00000026
4323 #define FILE_DEVICE_8042_PORT 0x00000027
4324 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
4325 #define FILE_DEVICE_BATTERY 0x00000029
4326 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
4327 #define FILE_DEVICE_MODEM 0x0000002b
4328 #define FILE_DEVICE_VDM 0x0000002c
4329 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
4330 #define FILE_DEVICE_SMB 0x0000002e
4331 #define FILE_DEVICE_KS 0x0000002f
4332 #define FILE_DEVICE_CHANGER 0x00000030
4333 #define FILE_DEVICE_SMARTCARD 0x00000031
4334 #define FILE_DEVICE_ACPI 0x00000032
4335 #define FILE_DEVICE_DVD 0x00000033
4336 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
4337 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
4338 #define FILE_DEVICE_DFS_VOLUME 0x00000036
4339 #define FILE_DEVICE_SERENUM 0x00000037
4340 #define FILE_DEVICE_TERMSRV 0x00000038
4341 #define FILE_DEVICE_KSEC 0x00000039
4342 #define FILE_DEVICE_FIPS 0x0000003A
4343 #define FILE_DEVICE_INFINIBAND 0x0000003B
4344 #define FILE_DEVICE_VMBUS 0x0000003E
4345 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
4346 #define FILE_DEVICE_WPD 0x00000040
4347 #define FILE_DEVICE_BLUETOOTH 0x00000041
4348 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
4349 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
4350 #define FILE_DEVICE_BIOMETRIC 0x00000044
4351 #define FILE_DEVICE_PMI 0x00000045
4353 #if defined(NT_PROCESSOR_GROUPS)
4355 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4357 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
4358 IrqPolicyMachineDefault
= 0,
4359 IrqPolicyAllCloseProcessors
= 1,
4360 IrqPolicyOneCloseProcessor
= 2,
4361 IrqPolicyAllProcessorsInMachine
= 3,
4362 IrqPolicyAllProcessorsInGroup
= 3,
4363 IrqPolicySpecifiedProcessors
= 4,
4364 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
4366 #else /* defined(NT_PROCESSOR_GROUPS) */
4368 typedef enum _IRQ_DEVICE_POLICY
{
4369 IrqPolicyMachineDefault
= 0,
4370 IrqPolicyAllCloseProcessors
,
4371 IrqPolicyOneCloseProcessor
,
4372 IrqPolicyAllProcessorsInMachine
,
4373 IrqPolicySpecifiedProcessors
,
4374 IrqPolicySpreadMessagesAcrossAllProcessors
4375 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
4379 typedef enum _IRQ_PRIORITY
{
4380 IrqPriorityUndefined
= 0,
4384 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
4386 typedef enum _IRQ_GROUP_POLICY
{
4387 GroupAffinityAllGroupZero
= 0,
4388 GroupAffinityDontCare
4389 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
4391 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
4393 typedef struct _OBJECT_HANDLE_INFORMATION
{
4394 ULONG HandleAttributes
;
4395 ACCESS_MASK GrantedAccess
;
4396 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4398 typedef struct _CLIENT_ID
{
4399 HANDLE UniqueProcess
;
4400 HANDLE UniqueThread
;
4401 } CLIENT_ID
, *PCLIENT_ID
;
4403 typedef struct _VPB
{
4407 USHORT VolumeLabelLength
;
4408 struct _DEVICE_OBJECT
*DeviceObject
;
4409 struct _DEVICE_OBJECT
*RealDevice
;
4411 ULONG ReferenceCount
;
4412 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
4415 typedef enum _IO_ALLOCATION_ACTION
{
4418 DeallocateObjectKeepRegisters
4419 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
4421 _Function_class_(DRIVER_CONTROL
)
4422 _IRQL_requires_same_
4423 typedef IO_ALLOCATION_ACTION
4424 (NTAPI DRIVER_CONTROL
)(
4425 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
4426 _Inout_
struct _IRP
*Irp
,
4427 _In_ PVOID MapRegisterBase
,
4428 _In_ PVOID Context
);
4429 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
4431 typedef struct _WAIT_CONTEXT_BLOCK
{
4432 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
4433 PDRIVER_CONTROL DeviceRoutine
;
4434 PVOID DeviceContext
;
4435 ULONG NumberOfMapRegisters
;
4438 PKDPC BufferChainingDpc
;
4439 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
4441 /* DEVICE_OBJECT.Flags */
4442 #define DO_VERIFY_VOLUME 0x00000002
4443 #define DO_BUFFERED_IO 0x00000004
4444 #define DO_EXCLUSIVE 0x00000008
4445 #define DO_DIRECT_IO 0x00000010
4446 #define DO_MAP_IO_BUFFER 0x00000020
4447 #define DO_DEVICE_INITIALIZING 0x00000080
4448 #define DO_SHUTDOWN_REGISTERED 0x00000800
4449 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4450 #define DO_POWER_PAGABLE 0x00002000
4451 #define DO_POWER_INRUSH 0x00004000
4453 /* DEVICE_OBJECT.Characteristics */
4454 #define FILE_REMOVABLE_MEDIA 0x00000001
4455 #define FILE_READ_ONLY_DEVICE 0x00000002
4456 #define FILE_FLOPPY_DISKETTE 0x00000004
4457 #define FILE_WRITE_ONCE_MEDIA 0x00000008
4458 #define FILE_REMOTE_DEVICE 0x00000010
4459 #define FILE_DEVICE_IS_MOUNTED 0x00000020
4460 #define FILE_VIRTUAL_VOLUME 0x00000040
4461 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
4462 #define FILE_DEVICE_SECURE_OPEN 0x00000100
4463 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
4464 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
4465 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
4467 /* DEVICE_OBJECT.AlignmentRequirement */
4468 #define FILE_BYTE_ALIGNMENT 0x00000000
4469 #define FILE_WORD_ALIGNMENT 0x00000001
4470 #define FILE_LONG_ALIGNMENT 0x00000003
4471 #define FILE_QUAD_ALIGNMENT 0x00000007
4472 #define FILE_OCTA_ALIGNMENT 0x0000000f
4473 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
4474 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
4475 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
4476 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
4477 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
4479 /* DEVICE_OBJECT.DeviceType */
4480 #define DEVICE_TYPE ULONG
4482 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _DEVICE_OBJECT
{
4485 LONG ReferenceCount
;
4486 struct _DRIVER_OBJECT
*DriverObject
;
4487 struct _DEVICE_OBJECT
*NextDevice
;
4488 struct _DEVICE_OBJECT
*AttachedDevice
;
4489 struct _IRP
*CurrentIrp
;
4492 ULONG Characteristics
;
4494 PVOID DeviceExtension
;
4495 DEVICE_TYPE DeviceType
;
4498 LIST_ENTRY ListEntry
;
4499 WAIT_CONTEXT_BLOCK Wcb
;
4501 ULONG AlignmentRequirement
;
4502 KDEVICE_QUEUE DeviceQueue
;
4504 ULONG ActiveThreadCount
;
4505 PSECURITY_DESCRIPTOR SecurityDescriptor
;
4509 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
4511 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
4513 typedef enum _IO_SESSION_STATE
{
4514 IoSessionStateCreated
= 1,
4515 IoSessionStateInitialized
,
4516 IoSessionStateConnected
,
4517 IoSessionStateDisconnected
,
4518 IoSessionStateDisconnectedLoggedOn
,
4519 IoSessionStateLoggedOn
,
4520 IoSessionStateLoggedOff
,
4521 IoSessionStateTerminated
,
4523 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
4525 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
4526 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
4527 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
4528 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
4530 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
4531 PHYSICAL_ADDRESS MessageAddress
;
4532 KAFFINITY TargetProcessorSet
;
4533 PKINTERRUPT InterruptObject
;
4537 KINTERRUPT_MODE Mode
;
4538 KINTERRUPT_POLARITY Polarity
;
4539 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
4541 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
4544 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
4545 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
4547 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
4548 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4549 _Out_ PKINTERRUPT
*InterruptObject
;
4550 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4551 _In_ PVOID ServiceContext
;
4552 _In_opt_ PKSPIN_LOCK SpinLock
;
4553 _In_ KIRQL SynchronizeIrql
;
4554 _In_ BOOLEAN FloatingSave
;
4555 _In_ BOOLEAN ShareVector
;
4558 _In_ KINTERRUPT_MODE InterruptMode
;
4559 _In_ KAFFINITY ProcessorEnableMask
;
4561 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
4563 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
4564 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4565 _Out_ PKINTERRUPT
*InterruptObject
;
4566 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
4567 _In_ PVOID ServiceContext
;
4568 _In_opt_ PKSPIN_LOCK SpinLock
;
4569 _In_opt_ KIRQL SynchronizeIrql
;
4570 _In_ BOOLEAN FloatingSave
;
4571 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
4573 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
4574 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4576 _Out_ PVOID
*Generic
;
4577 _Out_ PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
4578 _Out_ PKINTERRUPT
*InterruptObject
;
4579 } ConnectionContext
;
4580 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
4581 _In_ PVOID ServiceContext
;
4582 _In_opt_ PKSPIN_LOCK SpinLock
;
4583 _In_opt_ KIRQL SynchronizeIrql
;
4584 _In_ BOOLEAN FloatingSave
;
4585 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine
;
4586 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
4588 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
4589 _Inout_ ULONG Version
;
4590 _ANONYMOUS_UNION
union {
4591 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
4592 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
4593 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4595 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4597 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4601 _In_ PKINTERRUPT InterruptObject
;
4602 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4603 } ConnectionContext
;
4604 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4606 typedef enum _IO_ACCESS_TYPE
{
4612 typedef enum _IO_ACCESS_MODE
{
4617 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4618 IoSessionStateNotification
,
4619 IoMaxContainerNotificationClass
4620 } IO_CONTAINER_NOTIFICATION_CLASS
;
4622 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4628 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4630 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4631 IoSessionStateInformation
,
4632 IoMaxContainerInformationClass
4633 } IO_CONTAINER_INFORMATION_CLASS
;
4635 typedef struct _IO_SESSION_STATE_INFORMATION
{
4637 IO_SESSION_STATE SessionState
;
4638 BOOLEAN LocalSession
;
4639 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4641 #if (NTDDI_VERSION >= NTDDI_WIN7)
4644 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4648 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4649 _In_ PVOID SessionObject
,
4650 _In_ PVOID IoObject
,
4653 _In_reads_bytes_opt_(PayloadLength
) PVOID NotificationPayload
,
4654 _In_ ULONG PayloadLength
);
4656 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4660 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4662 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4664 BOOLEAN Reserved
[3];
4665 volatile LONG IoCount
;
4667 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4669 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4672 LONGLONG MaxLockedTicks
;
4674 LIST_ENTRY LockList
;
4676 volatile LONG LowMemoryCount
;
4679 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4680 } IO_REMOVE_LOCK_DBG_BLOCK
;
4682 typedef struct _IO_REMOVE_LOCK
{
4683 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4685 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4687 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4689 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4691 _Function_class_(IO_WORKITEM_ROUTINE
)
4692 _IRQL_requires_(PASSIVE_LEVEL
)
4693 _IRQL_requires_same_
4695 (NTAPI IO_WORKITEM_ROUTINE
)(
4696 _In_ PDEVICE_OBJECT DeviceObject
,
4697 _In_opt_ PVOID Context
);
4698 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4701 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4702 _In_ PVOID IoObject
,
4703 _In_opt_ PVOID Context
,
4704 _In_ PIO_WORKITEM IoWorkItem
);
4705 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4707 typedef struct _SHARE_ACCESS
{
4715 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4717 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4718 inheritance, even from a struct renders the type non-POD. So we use
4720 #define PCI_COMMON_HEADER_LAYOUT \
4729 UCHAR CacheLineSize; \
4730 UCHAR LatencyTimer; \
4734 struct _PCI_HEADER_TYPE_0 { \
4735 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4737 USHORT SubVendorID; \
4738 USHORT SubSystemID; \
4739 ULONG ROMBaseAddress; \
4740 UCHAR CapabilitiesPtr; \
4741 UCHAR Reserved1[3]; \
4743 UCHAR InterruptLine; \
4744 UCHAR InterruptPin; \
4745 UCHAR MinimumGrant; \
4746 UCHAR MaximumLatency; \
4748 struct _PCI_HEADER_TYPE_1 { \
4749 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4751 UCHAR SecondaryBus; \
4752 UCHAR SubordinateBus; \
4753 UCHAR SecondaryLatency; \
4756 USHORT SecondaryStatus; \
4757 USHORT MemoryBase; \
4758 USHORT MemoryLimit; \
4759 USHORT PrefetchBase; \
4760 USHORT PrefetchLimit; \
4761 ULONG PrefetchBaseUpper32; \
4762 ULONG PrefetchLimitUpper32; \
4763 USHORT IOBaseUpper16; \
4764 USHORT IOLimitUpper16; \
4765 UCHAR CapabilitiesPtr; \
4766 UCHAR Reserved1[3]; \
4767 ULONG ROMBaseAddress; \
4768 UCHAR InterruptLine; \
4769 UCHAR InterruptPin; \
4770 USHORT BridgeControl; \
4772 struct _PCI_HEADER_TYPE_2 { \
4773 ULONG SocketRegistersBaseAddress; \
4774 UCHAR CapabilitiesPtr; \
4776 USHORT SecondaryStatus; \
4778 UCHAR SecondaryBus; \
4779 UCHAR SubordinateBus; \
4780 UCHAR SecondaryLatency; \
4784 } Range[PCI_TYPE2_ADDRESSES-1]; \
4785 UCHAR InterruptLine; \
4786 UCHAR InterruptPin; \
4787 USHORT BridgeControl; \
4791 typedef enum _CREATE_FILE_TYPE
{
4793 CreateFileTypeNamedPipe
,
4794 CreateFileTypeMailslot
4797 #define IO_FORCE_ACCESS_CHECK 0x001
4798 #define IO_NO_PARAMETER_CHECKING 0x100
4800 #define IO_REPARSE 0x0
4801 #define IO_REMOUNT 0x1
4803 typedef struct _IO_STATUS_BLOCK
{
4804 _ANONYMOUS_UNION
union {
4808 ULONG_PTR Information
;
4809 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4812 typedef struct _IO_STATUS_BLOCK32
{
4815 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4819 (NTAPI
*PIO_APC_ROUTINE
)(
4820 _In_ PVOID ApcContext
,
4821 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
4822 _In_ ULONG Reserved
);
4824 #define PIO_APC_ROUTINE_DEFINED
4826 typedef enum _IO_SESSION_EVENT
{
4827 IoSessionEventIgnore
= 0,
4828 IoSessionEventCreated
,
4829 IoSessionEventTerminated
,
4830 IoSessionEventConnected
,
4831 IoSessionEventDisconnected
,
4832 IoSessionEventLogon
,
4833 IoSessionEventLogoff
,
4835 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4837 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4838 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4839 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4840 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4841 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4842 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4843 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4845 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4847 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4849 typedef struct _IO_SESSION_CONNECT_INFO
{
4851 BOOLEAN LocalSession
;
4852 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
4854 #define EVENT_INCREMENT 1
4855 #define IO_NO_INCREMENT 0
4856 #define IO_CD_ROM_INCREMENT 1
4857 #define IO_DISK_INCREMENT 1
4858 #define IO_KEYBOARD_INCREMENT 6
4859 #define IO_MAILSLOT_INCREMENT 2
4860 #define IO_MOUSE_INCREMENT 6
4861 #define IO_NAMED_PIPE_INCREMENT 2
4862 #define IO_NETWORK_INCREMENT 2
4863 #define IO_PARALLEL_INCREMENT 1
4864 #define IO_SERIAL_INCREMENT 2
4865 #define IO_SOUND_INCREMENT 8
4866 #define IO_VIDEO_INCREMENT 1
4867 #define SEMAPHORE_INCREMENT 1
4869 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
4871 typedef struct _BOOTDISK_INFORMATION
{
4872 LONGLONG BootPartitionOffset
;
4873 LONGLONG SystemPartitionOffset
;
4874 ULONG BootDeviceSignature
;
4875 ULONG SystemDeviceSignature
;
4876 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
4878 typedef struct _BOOTDISK_INFORMATION_EX
{
4879 LONGLONG BootPartitionOffset
;
4880 LONGLONG SystemPartitionOffset
;
4881 ULONG BootDeviceSignature
;
4882 ULONG SystemDeviceSignature
;
4883 GUID BootDeviceGuid
;
4884 GUID SystemDeviceGuid
;
4885 BOOLEAN BootDeviceIsGpt
;
4886 BOOLEAN SystemDeviceIsGpt
;
4887 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
4889 #if (NTDDI_VERSION >= NTDDI_WIN7)
4891 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
4892 ULONG PartitionStyle
;
4893 ULONG PartitionNumber
;
4894 _ANONYMOUS_UNION
union {
4899 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
4901 typedef struct _BOOTDISK_INFORMATION_LITE
{
4902 ULONG NumberEntries
;
4903 LOADER_PARTITION_INFORMATION_EX Entries
[1];
4904 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4908 #if (NTDDI_VERSION >= NTDDI_VISTA)
4909 typedef struct _BOOTDISK_INFORMATION_LITE
{
4910 ULONG BootDeviceSignature
;
4911 ULONG SystemDeviceSignature
;
4912 GUID BootDeviceGuid
;
4913 GUID SystemDeviceGuid
;
4914 BOOLEAN BootDeviceIsGpt
;
4915 BOOLEAN SystemDeviceIsGpt
;
4916 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4917 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4919 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4921 #include <pshpack1.h>
4923 typedef struct _EISA_MEMORY_TYPE
{
4930 UCHAR MoreEntries
:1;
4931 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
4933 typedef struct _EISA_MEMORY_CONFIGURATION
{
4934 EISA_MEMORY_TYPE ConfigurationByte
;
4936 USHORT AddressLowWord
;
4937 UCHAR AddressHighByte
;
4939 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
4941 typedef struct _EISA_IRQ_DESCRIPTOR
{
4944 UCHAR LevelTriggered
:1;
4946 UCHAR MoreEntries
:1;
4947 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
4949 typedef struct _EISA_IRQ_CONFIGURATION
{
4950 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
4952 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
4954 typedef struct _DMA_CONFIGURATION_BYTE0
{
4958 UCHAR MoreEntries
:1;
4959 } DMA_CONFIGURATION_BYTE0
;
4961 typedef struct _DMA_CONFIGURATION_BYTE1
{
4963 UCHAR TransferSize
:2;
4966 } DMA_CONFIGURATION_BYTE1
;
4968 typedef struct _EISA_DMA_CONFIGURATION
{
4969 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
4970 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
4971 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
4973 typedef struct _EISA_PORT_DESCRIPTOR
{
4974 UCHAR NumberPorts
:5;
4977 UCHAR MoreEntries
:1;
4978 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
4980 typedef struct _EISA_PORT_CONFIGURATION
{
4981 EISA_PORT_DESCRIPTOR Configuration
;
4983 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
4985 typedef struct _CM_EISA_SLOT_INFORMATION
{
4988 UCHAR MajorRevision
;
4989 UCHAR MinorRevision
;
4991 UCHAR NumberFunctions
;
4992 UCHAR FunctionInformation
;
4994 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
4996 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
5000 UCHAR MinorRevision
;
5001 UCHAR MajorRevision
;
5002 UCHAR Selections
[26];
5003 UCHAR FunctionFlags
;
5004 UCHAR TypeString
[80];
5005 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
5006 EISA_IRQ_CONFIGURATION EisaIrq
[7];
5007 EISA_DMA_CONFIGURATION EisaDma
[4];
5008 EISA_PORT_CONFIGURATION EisaPort
[20];
5009 UCHAR InitializationData
[60];
5010 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
5012 #include <poppack.h>
5014 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
5016 #define EISA_FUNCTION_ENABLED 0x80
5017 #define EISA_FREE_FORM_DATA 0x40
5018 #define EISA_HAS_PORT_INIT_ENTRY 0x20
5019 #define EISA_HAS_PORT_RANGE 0x10
5020 #define EISA_HAS_DMA_ENTRY 0x08
5021 #define EISA_HAS_IRQ_ENTRY 0x04
5022 #define EISA_HAS_MEMORY_ENTRY 0x02
5023 #define EISA_HAS_TYPE_ENTRY 0x01
5024 #define EISA_HAS_INFORMATION \
5025 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
5026 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
5028 #define EISA_MORE_ENTRIES 0x80
5029 #define EISA_SYSTEM_MEMORY 0x00
5030 #define EISA_MEMORY_TYPE_RAM 0x01
5032 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
5034 #define EISA_INVALID_SLOT 0x80
5035 #define EISA_INVALID_FUNCTION 0x81
5036 #define EISA_INVALID_CONFIGURATION 0x82
5037 #define EISA_EMPTY_SLOT 0x83
5038 #define EISA_INVALID_BIOS_CALL 0x86
5041 ** Plug and Play structures
5045 (NTAPI
*PINTERFACE_REFERENCE
)(
5049 (NTAPI
*PINTERFACE_DEREFERENCE
)(
5052 _Function_class_(TRANSLATE_BUS_ADDRESS
)
5053 _IRQL_requires_same_
5055 (NTAPI TRANSLATE_BUS_ADDRESS
)(
5056 _Inout_opt_ PVOID Context
,
5057 _In_ PHYSICAL_ADDRESS BusAddress
,
5059 _Out_ PULONG AddressSpace
,
5060 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
5061 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
5063 _Function_class_(GET_DMA_ADAPTER
)
5064 _IRQL_requires_same_
5065 typedef struct _DMA_ADAPTER
*
5066 (NTAPI GET_DMA_ADAPTER
)(
5067 _Inout_opt_ PVOID Context
,
5068 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
5069 _Out_ PULONG NumberOfMapRegisters
);
5070 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
5072 _Function_class_(GET_SET_DEVICE_DATA
)
5073 _IRQL_requires_same_
5075 (NTAPI GET_SET_DEVICE_DATA
)(
5076 _Inout_opt_ PVOID Context
,
5077 _In_ ULONG DataType
,
5078 _Inout_updates_bytes_(Length
) PVOID Buffer
,
5081 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
5083 typedef enum _DEVICE_INSTALL_STATE
{
5084 InstallStateInstalled
,
5085 InstallStateNeedsReinstall
,
5086 InstallStateFailedInstall
,
5087 InstallStateFinishInstall
5088 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
5090 typedef struct _LEGACY_BUS_INFORMATION
{
5092 INTERFACE_TYPE LegacyBusType
;
5094 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
5096 typedef enum _DEVICE_REMOVAL_POLICY
{
5097 RemovalPolicyExpectNoRemoval
= 1,
5098 RemovalPolicyExpectOrderlyRemoval
= 2,
5099 RemovalPolicyExpectSurpriseRemoval
= 3
5100 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
5103 (NTAPI
*PREENUMERATE_SELF
)(
5104 _In_ PVOID Context
);
5106 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
5110 PINTERFACE_REFERENCE InterfaceReference
;
5111 PINTERFACE_DEREFERENCE InterfaceDereference
;
5112 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
5113 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
5116 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
5117 _In_ NTSTATUS Status
,
5118 _Inout_opt_ PVOID Context
);
5120 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
5122 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
5123 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
5124 #define PCI_USE_REVISION 0x00000002
5125 #define PCI_USE_VENDEV_IDS 0x00000004
5126 #define PCI_USE_CLASS_SUBCLASS 0x00000008
5127 #define PCI_USE_PROGIF 0x00000010
5128 #define PCI_USE_LOCAL_BUS 0x00000020
5129 #define PCI_USE_LOCAL_DEVICE 0x00000040
5131 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
5142 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
5144 _IRQL_requires_max_(PASSIVE_LEVEL
)
5145 _Must_inspect_result_
5147 (NTAPI PCI_IS_DEVICE_PRESENT
)(
5148 _In_ USHORT VendorID
,
5149 _In_ USHORT DeviceID
,
5150 _In_ UCHAR RevisionID
,
5151 _In_ USHORT SubVendorID
,
5152 _In_ USHORT SubSystemID
,
5154 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
5156 _IRQL_requires_max_(PASSIVE_LEVEL
)
5157 _Must_inspect_result_
5159 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
5161 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
5162 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
5164 typedef struct _BUS_INTERFACE_STANDARD
{
5168 PINTERFACE_REFERENCE InterfaceReference
;
5169 PINTERFACE_DEREFERENCE InterfaceDereference
;
5170 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
5171 PGET_DMA_ADAPTER GetDmaAdapter
;
5172 PGET_SET_DEVICE_DATA SetBusData
;
5173 PGET_SET_DEVICE_DATA GetBusData
;
5174 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
5176 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
5180 PINTERFACE_REFERENCE InterfaceReference
;
5181 PINTERFACE_DEREFERENCE InterfaceDereference
;
5182 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
5183 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
5184 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
5186 _Struct_size_bytes_(Size
)
5187 typedef struct _DEVICE_CAPABILITIES
{
5188 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES
)) USHORT Size
;
5192 ULONG LockSupported
:1;
5193 ULONG EjectSupported
:1;
5197 ULONG SilentInstall
:1;
5198 ULONG RawDeviceOK
:1;
5199 ULONG SurpriseRemovalOK
:1;
5204 ULONG HardwareDisabled
:1;
5206 ULONG WarmEjectSupported
:1;
5207 ULONG NoDisplayInUI
:1;
5211 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
5212 SYSTEM_POWER_STATE SystemWake
;
5213 DEVICE_POWER_STATE DeviceWake
;
5217 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
5219 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
5223 GUID InterfaceClassGuid
;
5224 PUNICODE_STRING SymbolicLinkName
;
5225 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
5227 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
5231 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
5235 typedef struct _INTERFACE
{
5239 PINTERFACE_REFERENCE InterfaceReference
;
5240 PINTERFACE_DEREFERENCE InterfaceDereference
;
5241 } INTERFACE
, *PINTERFACE
;
5243 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
5247 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
5249 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
5251 /* PNP_DEVICE_STATE */
5253 #define PNP_DEVICE_DISABLED 0x00000001
5254 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
5255 #define PNP_DEVICE_FAILED 0x00000004
5256 #define PNP_DEVICE_REMOVED 0x00000008
5257 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
5258 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
5260 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
5264 struct _FILE_OBJECT
*FileObject
;
5265 LONG NameBufferOffset
;
5266 UCHAR CustomDataBuffer
[1];
5267 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
5269 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
5273 struct _FILE_OBJECT
*FileObject
;
5274 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
5276 #if (NTDDI_VERSION >= NTDDI_VISTA)
5277 #include <devpropdef.h>
5278 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
5281 #define PNP_REPLACE_NO_MAP MAXLONGLONG
5283 _Must_inspect_result_
5285 (NTAPI
*PREPLACE_MAP_MEMORY
)(
5286 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress
,
5287 _In_ PHYSICAL_ADDRESS SparePhysicalAddress
,
5288 _Inout_ PLARGE_INTEGER NumberOfBytes
,
5289 _Outptr_ PVOID
*TargetAddress
,
5290 _Outptr_ PVOID
*SpareAddress
);
5292 typedef struct _PNP_REPLACE_MEMORY_LIST
{
5293 ULONG AllocatedCount
;
5295 ULONGLONG TotalLength
;
5297 PHYSICAL_ADDRESS Address
;
5299 } Ranges
[ANYSIZE_ARRAY
];
5300 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
5302 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
5303 PKAFFINITY Affinity
;
5304 _Field_range_(<=, MAXIMUM_GROUPS
) ULONG GroupCount
;
5305 ULONG AllocatedCount
;
5307 ULONG ApicIds
[ANYSIZE_ARRAY
];
5308 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
5310 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
5311 KAFFINITY AffinityMask
;
5312 ULONG AllocatedCount
;
5314 ULONG ApicIds
[ANYSIZE_ARRAY
];
5315 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
5317 #define PNP_REPLACE_PARAMETERS_VERSION 2
5319 typedef struct _PNP_REPLACE_PARAMETERS
{
5324 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
5325 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
5326 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
5327 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
5328 PREPLACE_MAP_MEMORY MapMemory
;
5329 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
5332 (NTAPI
*PREPLACE_UNLOAD
)(
5335 _Must_inspect_result_
5337 (NTAPI
*PREPLACE_BEGIN
)(
5338 _In_ PPNP_REPLACE_PARAMETERS Parameters
,
5339 _Outptr_ PVOID
*Context
);
5341 _Must_inspect_result_
5343 (NTAPI
*PREPLACE_END
)(
5344 _In_ PVOID Context
);
5346 _Must_inspect_result_
5348 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
5350 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
5351 _In_ LARGE_INTEGER ByteCount
);
5353 _Must_inspect_result_
5355 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
5358 _In_ BOOLEAN Target
);
5360 _Must_inspect_result_
5362 (NTAPI
*PREPLACE_SWAP
)(
5363 _In_ PVOID Context
);
5365 _Must_inspect_result_
5367 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
5368 _In_ PVOID Context
);
5370 _Must_inspect_result_
5372 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
5373 _In_ PVOID Context
);
5375 _Must_inspect_result_
5377 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
5379 _In_ PHYSICAL_ADDRESS SourceAddress
,
5380 _Out_ PPHYSICAL_ADDRESS DestinationAddress
);
5382 _Must_inspect_result_
5384 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
5386 _In_ BOOLEAN Enable
);
5388 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
5389 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
5390 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
5392 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
5393 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
5394 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
5395 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
5396 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
5398 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
5402 PREPLACE_UNLOAD Unload
;
5403 PREPLACE_BEGIN BeginReplace
;
5404 PREPLACE_END EndReplace
;
5405 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
5406 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
5408 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
5409 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
5410 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
5411 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
5412 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
5414 _Must_inspect_result_
5416 (NTAPI
*PREPLACE_DRIVER_INIT
)(
5417 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface
,
5420 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
5421 DeviceUsageTypeUndefined
,
5422 DeviceUsageTypePaging
,
5423 DeviceUsageTypeHibernation
,
5424 DeviceUsageTypeDumpFile
5425 } DEVICE_USAGE_NOTIFICATION_TYPE
;
5427 typedef struct _POWER_SEQUENCE
{
5431 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
5434 #define __string_type 0x1000
5435 #define __guid_type 0x2000
5436 #define __multiString_type 0x4000
5438 #define __string_type 0
5439 #define __guid_type 0
5440 #define __multiString_type 0
5444 DevicePropertyDeviceDescription
= 0x0 | __string_type
,
5445 DevicePropertyHardwareID
= 0x1 | __multiString_type
,
5446 DevicePropertyCompatibleIDs
= 0x2 | __multiString_type
,
5447 DevicePropertyBootConfiguration
= 0x3,
5448 DevicePropertyBootConfigurationTranslated
= 0x4,
5449 DevicePropertyClassName
= 0x5 | __string_type
,
5450 DevicePropertyClassGuid
= 0x6 | __string_type
,
5451 DevicePropertyDriverKeyName
= 0x7 | __string_type
,
5452 DevicePropertyManufacturer
= 0x8 | __string_type
,
5453 DevicePropertyFriendlyName
= 0x9 | __string_type
,
5454 DevicePropertyLocationInformation
= 0xa | __string_type
,
5455 DevicePropertyPhysicalDeviceObjectName
= 0xb | __string_type
,
5456 DevicePropertyBusTypeGuid
= 0xc | __guid_type
,
5457 DevicePropertyLegacyBusType
= 0xd,
5458 DevicePropertyBusNumber
= 0xe,
5459 DevicePropertyEnumeratorName
= 0xf | __string_type
,
5460 DevicePropertyAddress
= 0x10,
5461 DevicePropertyUINumber
= 0x11,
5462 DevicePropertyInstallState
= 0x12,
5463 DevicePropertyRemovalPolicy
= 0x13,
5464 DevicePropertyResourceRequirements
= 0x14,
5465 DevicePropertyAllocatedResources
= 0x15,
5466 DevicePropertyContainerID
= 0x16 | __string_type
5467 } DEVICE_REGISTRY_PROPERTY
;
5469 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
5470 EventCategoryReserved
,
5471 EventCategoryHardwareProfileChange
,
5472 EventCategoryDeviceInterfaceChange
,
5473 EventCategoryTargetDeviceChange
5474 } IO_NOTIFICATION_EVENT_CATEGORY
;
5476 typedef enum _IO_PRIORITY_HINT
{
5477 IoPriorityVeryLow
= 0,
5485 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
5487 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)
5488 _IRQL_requires_max_(PASSIVE_LEVEL
)
5490 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
5491 _In_ PVOID NotificationStructure
,
5492 _Inout_opt_ PVOID Context
);
5493 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
5495 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK
)
5496 _IRQL_requires_same_
5498 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
5499 _Inout_opt_ PVOID Context
);
5500 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
5502 typedef enum _FILE_INFORMATION_CLASS
{
5503 FileDirectoryInformation
= 1,
5504 FileFullDirectoryInformation
,
5505 FileBothDirectoryInformation
,
5506 FileBasicInformation
,
5507 FileStandardInformation
,
5508 FileInternalInformation
,
5510 FileAccessInformation
,
5511 FileNameInformation
,
5512 FileRenameInformation
,
5513 FileLinkInformation
,
5514 FileNamesInformation
,
5515 FileDispositionInformation
,
5516 FilePositionInformation
,
5517 FileFullEaInformation
,
5518 FileModeInformation
,
5519 FileAlignmentInformation
,
5521 FileAllocationInformation
,
5522 FileEndOfFileInformation
,
5523 FileAlternateNameInformation
,
5524 FileStreamInformation
,
5525 FilePipeInformation
,
5526 FilePipeLocalInformation
,
5527 FilePipeRemoteInformation
,
5528 FileMailslotQueryInformation
,
5529 FileMailslotSetInformation
,
5530 FileCompressionInformation
,
5531 FileObjectIdInformation
,
5532 FileCompletionInformation
,
5533 FileMoveClusterInformation
,
5534 FileQuotaInformation
,
5535 FileReparsePointInformation
,
5536 FileNetworkOpenInformation
,
5537 FileAttributeTagInformation
,
5538 FileTrackingInformation
,
5539 FileIdBothDirectoryInformation
,
5540 FileIdFullDirectoryInformation
,
5541 FileValidDataLengthInformation
,
5542 FileShortNameInformation
,
5543 #if (NTDDI_VERSION >= NTDDI_VISTA)
5544 FileIoCompletionNotificationInformation
,
5545 FileIoStatusBlockRangeInformation
,
5546 FileIoPriorityHintInformation
,
5547 FileSfioReserveInformation
,
5548 FileSfioVolumeInformation
,
5549 FileHardLinkInformation
,
5550 FileProcessIdsUsingFileInformation
,
5551 FileNormalizedNameInformation
,
5552 FileNetworkPhysicalNameInformation
,
5554 #if (NTDDI_VERSION >= NTDDI_WIN7)
5555 FileIdGlobalTxDirectoryInformation
,
5556 FileIsRemoteDeviceInformation
,
5557 FileAttributeCacheInformation
,
5558 FileNumaNodeInformation
,
5559 FileStandardLinkInformation
,
5560 FileRemoteProtocolInformation
,
5562 FileMaximumInformation
5563 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
5565 typedef struct _FILE_POSITION_INFORMATION
{
5566 LARGE_INTEGER CurrentByteOffset
;
5567 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
5569 typedef struct _FILE_BASIC_INFORMATION
{
5570 LARGE_INTEGER CreationTime
;
5571 LARGE_INTEGER LastAccessTime
;
5572 LARGE_INTEGER LastWriteTime
;
5573 LARGE_INTEGER ChangeTime
;
5574 ULONG FileAttributes
;
5575 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
5577 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
5578 IO_PRIORITY_HINT PriorityHint
;
5579 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
5581 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
5583 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
5585 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
5586 PUCHAR IoStatusBlockRange
;
5588 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
5590 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
5592 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
5594 typedef struct _FILE_NUMA_NODE_INFORMATION
{
5596 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
5598 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
5599 ULONG NumberOfProcessIdsInList
;
5600 ULONG_PTR ProcessIdList
[1];
5601 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
5603 typedef struct _FILE_STANDARD_INFORMATION
{
5604 LARGE_INTEGER AllocationSize
;
5605 LARGE_INTEGER EndOfFile
;
5606 ULONG NumberOfLinks
;
5607 BOOLEAN DeletePending
;
5609 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
5611 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
5612 LARGE_INTEGER CreationTime
;
5613 LARGE_INTEGER LastAccessTime
;
5614 LARGE_INTEGER LastWriteTime
;
5615 LARGE_INTEGER ChangeTime
;
5616 LARGE_INTEGER AllocationSize
;
5617 LARGE_INTEGER EndOfFile
;
5618 ULONG FileAttributes
;
5619 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
5621 typedef enum _FSINFOCLASS
{
5622 FileFsVolumeInformation
= 1,
5623 FileFsLabelInformation
,
5624 FileFsSizeInformation
,
5625 FileFsDeviceInformation
,
5626 FileFsAttributeInformation
,
5627 FileFsControlInformation
,
5628 FileFsFullSizeInformation
,
5629 FileFsObjectIdInformation
,
5630 FileFsDriverPathInformation
,
5631 FileFsVolumeFlagsInformation
,
5632 FileFsMaximumInformation
5633 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
5635 typedef struct _FILE_FS_DEVICE_INFORMATION
{
5636 DEVICE_TYPE DeviceType
;
5637 ULONG Characteristics
;
5638 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5640 typedef struct _FILE_FULL_EA_INFORMATION
{
5641 ULONG NextEntryOffset
;
5644 USHORT EaValueLength
;
5646 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5648 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5649 ULONG RequestsPerPeriod
;
5651 BOOLEAN RetryFailures
;
5652 BOOLEAN Discardable
;
5654 ULONG NumOutstandingRequests
;
5655 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5657 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5658 ULONG MaximumRequestsPerPeriod
;
5659 ULONG MinimumPeriod
;
5660 ULONG MinimumTransferSize
;
5661 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5663 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5664 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5665 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5667 #define FM_LOCK_BIT (0x1)
5668 #define FM_LOCK_BIT_V (0x0)
5669 #define FM_LOCK_WAITER_WOKEN (0x2)
5670 #define FM_LOCK_WAITER_INC (0x4)
5672 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE
)
5673 _IRQL_requires_same_
5675 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5676 _In_
struct _FILE_OBJECT
*FileObject
,
5677 _In_ PLARGE_INTEGER FileOffset
,
5681 _In_ BOOLEAN CheckForReadOperation
,
5682 _Out_ PIO_STATUS_BLOCK IoStatus
,
5683 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5684 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5686 _Function_class_(FAST_IO_READ
)
5687 _IRQL_requires_same_
5689 (NTAPI FAST_IO_READ
)(
5690 _In_
struct _FILE_OBJECT
*FileObject
,
5691 _In_ PLARGE_INTEGER FileOffset
,
5696 _Out_ PIO_STATUS_BLOCK IoStatus
,
5697 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5698 typedef FAST_IO_READ
*PFAST_IO_READ
;
5700 _Function_class_(FAST_IO_WRITE
)
5701 _IRQL_requires_same_
5703 (NTAPI FAST_IO_WRITE
)(
5704 _In_
struct _FILE_OBJECT
*FileObject
,
5705 _In_ PLARGE_INTEGER FileOffset
,
5710 _Out_ PIO_STATUS_BLOCK IoStatus
,
5711 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5712 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5714 _Function_class_(FAST_IO_QUERY_BASIC_INFO
)
5715 _IRQL_requires_same_
5717 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5718 _In_
struct _FILE_OBJECT
*FileObject
,
5720 _Out_ PFILE_BASIC_INFORMATION Buffer
,
5721 _Out_ PIO_STATUS_BLOCK IoStatus
,
5722 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5723 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5725 _Function_class_(FAST_IO_QUERY_STANDARD_INFO
)
5726 _IRQL_requires_same_
5728 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5729 _In_
struct _FILE_OBJECT
*FileObject
,
5731 _Out_ PFILE_STANDARD_INFORMATION Buffer
,
5732 _Out_ PIO_STATUS_BLOCK IoStatus
,
5733 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5734 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5736 _Function_class_(FAST_IO_LOCK
)
5737 _IRQL_requires_same_
5739 (NTAPI FAST_IO_LOCK
)(
5740 _In_
struct _FILE_OBJECT
*FileObject
,
5741 _In_ PLARGE_INTEGER FileOffset
,
5742 _In_ PLARGE_INTEGER Length
,
5743 _In_ PEPROCESS ProcessId
,
5745 _In_ BOOLEAN FailImmediately
,
5746 _In_ BOOLEAN ExclusiveLock
,
5747 _Out_ PIO_STATUS_BLOCK IoStatus
,
5748 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5749 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5751 _Function_class_(FAST_IO_UNLOCK_SINGLE
)
5752 _IRQL_requires_same_
5754 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5755 _In_
struct _FILE_OBJECT
*FileObject
,
5756 _In_ PLARGE_INTEGER FileOffset
,
5757 _In_ PLARGE_INTEGER Length
,
5758 _In_ PEPROCESS ProcessId
,
5760 _Out_ PIO_STATUS_BLOCK IoStatus
,
5761 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5762 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5764 _Function_class_(FAST_IO_UNLOCK_ALL
)
5765 _IRQL_requires_same_
5767 (NTAPI FAST_IO_UNLOCK_ALL
)(
5768 _In_
struct _FILE_OBJECT
*FileObject
,
5769 _In_ PEPROCESS ProcessId
,
5770 _Out_ PIO_STATUS_BLOCK IoStatus
,
5771 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5772 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5774 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY
)
5775 _IRQL_requires_same_
5777 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5778 _In_
struct _FILE_OBJECT
*FileObject
,
5779 _In_ PVOID ProcessId
,
5781 _Out_ PIO_STATUS_BLOCK IoStatus
,
5782 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5783 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5785 _Function_class_(FAST_IO_DEVICE_CONTROL
)
5786 _IRQL_requires_same_
5788 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5789 _In_
struct _FILE_OBJECT
*FileObject
,
5791 _In_opt_ PVOID InputBuffer
,
5792 _In_ ULONG InputBufferLength
,
5793 _Out_opt_ PVOID OutputBuffer
,
5794 _In_ ULONG OutputBufferLength
,
5795 _In_ ULONG IoControlCode
,
5796 _Out_ PIO_STATUS_BLOCK IoStatus
,
5797 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5798 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5800 _Function_class_(FAST_IO_ACQUIRE_FILE
)
5801 _IRQL_requires_same_
5803 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5804 _In_
struct _FILE_OBJECT
*FileObject
);
5805 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5807 _Function_class_(FAST_IO_RELEASE_FILE
)
5808 _IRQL_requires_same_
5810 (NTAPI FAST_IO_RELEASE_FILE
)(
5811 _In_
struct _FILE_OBJECT
*FileObject
);
5812 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5814 _Function_class_(FAST_IO_DETACH_DEVICE
)
5815 _IRQL_requires_same_
5817 (NTAPI FAST_IO_DETACH_DEVICE
)(
5818 _In_
struct _DEVICE_OBJECT
*SourceDevice
,
5819 _In_
struct _DEVICE_OBJECT
*TargetDevice
);
5820 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5822 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO
)
5823 _IRQL_requires_same_
5825 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5826 _In_
struct _FILE_OBJECT
*FileObject
,
5828 _Out_
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5829 _Out_
struct _IO_STATUS_BLOCK
*IoStatus
,
5830 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5831 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5833 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE
)
5834 _IRQL_requires_same_
5836 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5837 _In_
struct _FILE_OBJECT
*FileObject
,
5838 _In_ PLARGE_INTEGER EndingOffset
,
5839 _Out_
struct _ERESOURCE
**ResourceToRelease
,
5840 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5841 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5843 _Function_class_(FAST_IO_MDL_READ
)
5844 _IRQL_requires_same_
5846 (NTAPI FAST_IO_MDL_READ
)(
5847 _In_
struct _FILE_OBJECT
*FileObject
,
5848 _In_ PLARGE_INTEGER FileOffset
,
5851 _Out_ PMDL
*MdlChain
,
5852 _Out_ PIO_STATUS_BLOCK IoStatus
,
5853 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5854 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
5856 _Function_class_(FAST_IO_MDL_READ_COMPLETE
)
5857 _IRQL_requires_same_
5859 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
5860 _In_
struct _FILE_OBJECT
*FileObject
,
5862 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5863 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
5865 _Function_class_(FAST_IO_PREPARE_MDL_WRITE
)
5866 _IRQL_requires_same_
5868 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
5869 _In_
struct _FILE_OBJECT
*FileObject
,
5870 _In_ PLARGE_INTEGER FileOffset
,
5873 _Out_ PMDL
*MdlChain
,
5874 _Out_ PIO_STATUS_BLOCK IoStatus
,
5875 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5876 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
5878 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE
)
5879 _IRQL_requires_same_
5881 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
5882 _In_
struct _FILE_OBJECT
*FileObject
,
5883 _In_ PLARGE_INTEGER FileOffset
,
5885 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5886 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
5888 _Function_class_(FAST_IO_READ_COMPRESSED
)
5889 _IRQL_requires_same_
5891 (NTAPI FAST_IO_READ_COMPRESSED
)(
5892 _In_
struct _FILE_OBJECT
*FileObject
,
5893 _In_ PLARGE_INTEGER FileOffset
,
5897 _Out_ PMDL
*MdlChain
,
5898 _Out_ PIO_STATUS_BLOCK IoStatus
,
5899 _Out_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5900 _In_ ULONG CompressedDataInfoLength
,
5901 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5902 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
5904 _Function_class_(FAST_IO_WRITE_COMPRESSED
)
5905 _IRQL_requires_same_
5907 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
5908 _In_
struct _FILE_OBJECT
*FileObject
,
5909 _In_ PLARGE_INTEGER FileOffset
,
5913 _Out_ PMDL
*MdlChain
,
5914 _Out_ PIO_STATUS_BLOCK IoStatus
,
5915 _In_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5916 _In_ ULONG CompressedDataInfoLength
,
5917 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5918 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
5920 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)
5921 _IRQL_requires_same_
5923 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
5924 _In_
struct _FILE_OBJECT
*FileObject
,
5926 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5927 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
5929 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)
5930 _IRQL_requires_same_
5932 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
5933 _In_
struct _FILE_OBJECT
*FileObject
,
5934 _In_ PLARGE_INTEGER FileOffset
,
5936 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5937 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
5939 _Function_class_(FAST_IO_QUERY_OPEN
)
5940 _IRQL_requires_same_
5942 (NTAPI FAST_IO_QUERY_OPEN
)(
5943 _Inout_
struct _IRP
*Irp
,
5944 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
5945 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5946 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
5948 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE
)
5949 _IRQL_requires_same_
5951 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
5952 _In_
struct _FILE_OBJECT
*FileObject
,
5953 _In_
struct _ERESOURCE
*ResourceToRelease
,
5954 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5955 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
5957 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH
)
5958 _IRQL_requires_same_
5960 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
5961 _In_
struct _FILE_OBJECT
*FileObject
,
5962 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5963 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
5965 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH
)
5966 _IRQL_requires_same_
5968 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
5969 _In_
struct _FILE_OBJECT
*FileObject
,
5970 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
5971 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
5973 typedef struct _FAST_IO_DISPATCH
{
5974 ULONG SizeOfFastIoDispatch
;
5975 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
5976 PFAST_IO_READ FastIoRead
;
5977 PFAST_IO_WRITE FastIoWrite
;
5978 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
5979 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
5980 PFAST_IO_LOCK FastIoLock
;
5981 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
5982 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
5983 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
5984 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
5985 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
5986 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
5987 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
5988 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
5989 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
5990 PFAST_IO_MDL_READ MdlRead
;
5991 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
5992 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
5993 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
5994 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
5995 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
5996 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
5997 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
5998 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
5999 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
6000 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
6001 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
6002 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
6004 typedef struct _SECTION_OBJECT_POINTERS
{
6005 PVOID DataSectionObject
;
6006 PVOID SharedCacheMap
;
6007 PVOID ImageSectionObject
;
6008 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
6010 typedef struct _IO_COMPLETION_CONTEXT
{
6013 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
6015 /* FILE_OBJECT.Flags */
6016 #define FO_FILE_OPEN 0x00000001
6017 #define FO_SYNCHRONOUS_IO 0x00000002
6018 #define FO_ALERTABLE_IO 0x00000004
6019 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
6020 #define FO_WRITE_THROUGH 0x00000010
6021 #define FO_SEQUENTIAL_ONLY 0x00000020
6022 #define FO_CACHE_SUPPORTED 0x00000040
6023 #define FO_NAMED_PIPE 0x00000080
6024 #define FO_STREAM_FILE 0x00000100
6025 #define FO_MAILSLOT 0x00000200
6026 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
6027 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
6028 #define FO_DIRECT_DEVICE_OPEN 0x00000800
6029 #define FO_FILE_MODIFIED 0x00001000
6030 #define FO_FILE_SIZE_CHANGED 0x00002000
6031 #define FO_CLEANUP_COMPLETE 0x00004000
6032 #define FO_TEMPORARY_FILE 0x00008000
6033 #define FO_DELETE_ON_CLOSE 0x00010000
6034 #define FO_OPENED_CASE_SENSITIVE 0x00020000
6035 #define FO_HANDLE_CREATED 0x00040000
6036 #define FO_FILE_FAST_IO_READ 0x00080000
6037 #define FO_RANDOM_ACCESS 0x00100000
6038 #define FO_FILE_OPEN_CANCELLED 0x00200000
6039 #define FO_VOLUME_OPEN 0x00400000
6040 #define FO_REMOTE_ORIGIN 0x01000000
6041 #define FO_DISALLOW_EXCLUSIVE 0x02000000
6042 #define FO_SKIP_COMPLETION_PORT 0x02000000
6043 #define FO_SKIP_SET_EVENT 0x04000000
6044 #define FO_SKIP_SET_FAST_IO 0x08000000
6045 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
6048 #define VPB_MOUNTED 0x0001
6049 #define VPB_LOCKED 0x0002
6050 #define VPB_PERSISTENT 0x0004
6051 #define VPB_REMOVE_PENDING 0x0008
6052 #define VPB_RAW_MOUNT 0x0010
6053 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
6057 #define SL_FORCE_ACCESS_CHECK 0x01
6058 #define SL_OPEN_PAGING_FILE 0x02
6059 #define SL_OPEN_TARGET_DIRECTORY 0x04
6060 #define SL_STOP_ON_SYMLINK 0x08
6061 #define SL_CASE_SENSITIVE 0x80
6063 #define SL_KEY_SPECIFIED 0x01
6064 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
6065 #define SL_WRITE_THROUGH 0x04
6066 #define SL_FT_SEQUENTIAL_WRITE 0x08
6067 #define SL_FORCE_DIRECT_WRITE 0x10
6068 #define SL_REALTIME_STREAM 0x20
6070 #define SL_READ_ACCESS_GRANTED 0x01
6071 #define SL_WRITE_ACCESS_GRANTED 0x04
6073 #define SL_FAIL_IMMEDIATELY 0x01
6074 #define SL_EXCLUSIVE_LOCK 0x02
6076 #define SL_RESTART_SCAN 0x01
6077 #define SL_RETURN_SINGLE_ENTRY 0x02
6078 #define SL_INDEX_SPECIFIED 0x04
6080 #define SL_WATCH_TREE 0x01
6082 #define SL_ALLOW_RAW_MOUNT 0x01
6084 #define CTL_CODE(DeviceType, Function, Method, Access) \
6085 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
6087 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
6089 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
6091 #define IRP_NOCACHE 0x00000001
6092 #define IRP_PAGING_IO 0x00000002
6093 #define IRP_MOUNT_COMPLETION 0x00000002
6094 #define IRP_SYNCHRONOUS_API 0x00000004
6095 #define IRP_ASSOCIATED_IRP 0x00000008
6096 #define IRP_BUFFERED_IO 0x00000010
6097 #define IRP_DEALLOCATE_BUFFER 0x00000020
6098 #define IRP_INPUT_OPERATION 0x00000040
6099 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
6100 #define IRP_CREATE_OPERATION 0x00000080
6101 #define IRP_READ_OPERATION 0x00000100
6102 #define IRP_WRITE_OPERATION 0x00000200
6103 #define IRP_CLOSE_OPERATION 0x00000400
6104 #define IRP_DEFER_IO_COMPLETION 0x00000800
6105 #define IRP_OB_QUERY_NAME 0x00001000
6106 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
6107 /* The following 2 are missing in latest WDK */
6108 #define IRP_RETRY_IO_COMPLETION 0x00004000
6109 #define IRP_CLASS_CACHE_OPERATION 0x00008000
6111 #define IRP_QUOTA_CHARGED 0x01
6112 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
6113 #define IRP_ALLOCATED_FIXED_SIZE 0x04
6114 #define IRP_LOOKASIDE_ALLOCATION 0x08
6117 ** IRP function codes
6120 #define IRP_MJ_CREATE 0x00
6121 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
6122 #define IRP_MJ_CLOSE 0x02
6123 #define IRP_MJ_READ 0x03
6124 #define IRP_MJ_WRITE 0x04
6125 #define IRP_MJ_QUERY_INFORMATION 0x05
6126 #define IRP_MJ_SET_INFORMATION 0x06
6127 #define IRP_MJ_QUERY_EA 0x07
6128 #define IRP_MJ_SET_EA 0x08
6129 #define IRP_MJ_FLUSH_BUFFERS 0x09
6130 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
6131 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
6132 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
6133 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
6134 #define IRP_MJ_DEVICE_CONTROL 0x0e
6135 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
6136 #define IRP_MJ_SCSI 0x0f
6137 #define IRP_MJ_SHUTDOWN 0x10
6138 #define IRP_MJ_LOCK_CONTROL 0x11
6139 #define IRP_MJ_CLEANUP 0x12
6140 #define IRP_MJ_CREATE_MAILSLOT 0x13
6141 #define IRP_MJ_QUERY_SECURITY 0x14
6142 #define IRP_MJ_SET_SECURITY 0x15
6143 #define IRP_MJ_POWER 0x16
6144 #define IRP_MJ_SYSTEM_CONTROL 0x17
6145 #define IRP_MJ_DEVICE_CHANGE 0x18
6146 #define IRP_MJ_QUERY_QUOTA 0x19
6147 #define IRP_MJ_SET_QUOTA 0x1a
6148 #define IRP_MJ_PNP 0x1b
6149 #define IRP_MJ_PNP_POWER 0x1b
6150 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
6152 #define IRP_MN_SCSI_CLASS 0x01
6154 #define IRP_MN_START_DEVICE 0x00
6155 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
6156 #define IRP_MN_REMOVE_DEVICE 0x02
6157 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
6158 #define IRP_MN_STOP_DEVICE 0x04
6159 #define IRP_MN_QUERY_STOP_DEVICE 0x05
6160 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
6162 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
6163 #define IRP_MN_QUERY_INTERFACE 0x08
6164 #define IRP_MN_QUERY_CAPABILITIES 0x09
6165 #define IRP_MN_QUERY_RESOURCES 0x0A
6166 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
6167 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
6168 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
6170 #define IRP_MN_READ_CONFIG 0x0F
6171 #define IRP_MN_WRITE_CONFIG 0x10
6172 #define IRP_MN_EJECT 0x11
6173 #define IRP_MN_SET_LOCK 0x12
6174 #define IRP_MN_QUERY_ID 0x13
6175 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
6176 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
6177 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
6178 #define IRP_MN_SURPRISE_REMOVAL 0x17
6179 #if (NTDDI_VERSION >= NTDDI_WIN7)
6180 #define IRP_MN_DEVICE_ENUMERATED 0x19
6183 #define IRP_MN_WAIT_WAKE 0x00
6184 #define IRP_MN_POWER_SEQUENCE 0x01
6185 #define IRP_MN_SET_POWER 0x02
6186 #define IRP_MN_QUERY_POWER 0x03
6188 #define IRP_MN_QUERY_ALL_DATA 0x00
6189 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
6190 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
6191 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
6192 #define IRP_MN_ENABLE_EVENTS 0x04
6193 #define IRP_MN_DISABLE_EVENTS 0x05
6194 #define IRP_MN_ENABLE_COLLECTION 0x06
6195 #define IRP_MN_DISABLE_COLLECTION 0x07
6196 #define IRP_MN_REGINFO 0x08
6197 #define IRP_MN_EXECUTE_METHOD 0x09
6199 #define IRP_MN_REGINFO_EX 0x0b
6201 typedef struct _FILE_OBJECT
{
6204 PDEVICE_OBJECT DeviceObject
;
6208 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
6209 PVOID PrivateCacheMap
;
6210 NTSTATUS FinalStatus
;
6211 struct _FILE_OBJECT
*RelatedFileObject
;
6212 BOOLEAN LockOperation
;
6213 BOOLEAN DeletePending
;
6215 BOOLEAN WriteAccess
;
6216 BOOLEAN DeleteAccess
;
6218 BOOLEAN SharedWrite
;
6219 BOOLEAN SharedDelete
;
6221 UNICODE_STRING FileName
;
6222 LARGE_INTEGER CurrentByteOffset
;
6223 volatile ULONG Waiters
;
6224 volatile ULONG Busy
;
6228 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
6229 KSPIN_LOCK IrpListLock
;
6231 volatile PVOID FileObjectExtension
;
6232 } FILE_OBJECT
, *PFILE_OBJECT
;
6234 typedef struct _IO_ERROR_LOG_PACKET
{
6235 UCHAR MajorFunctionCode
;
6237 USHORT DumpDataSize
;
6238 USHORT NumberOfStrings
;
6239 USHORT StringOffset
;
6240 USHORT EventCategory
;
6242 ULONG UniqueErrorValue
;
6243 NTSTATUS FinalStatus
;
6244 ULONG SequenceNumber
;
6245 ULONG IoControlCode
;
6246 LARGE_INTEGER DeviceOffset
;
6248 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
6250 typedef struct _IO_ERROR_LOG_MESSAGE
{
6253 USHORT DriverNameLength
;
6254 LARGE_INTEGER TimeStamp
;
6255 ULONG DriverNameOffset
;
6256 IO_ERROR_LOG_PACKET EntryData
;
6257 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
6259 #define ERROR_LOG_LIMIT_SIZE 240
6260 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
6261 sizeof(IO_ERROR_LOG_PACKET) + \
6262 (sizeof(WCHAR) * 40))
6263 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
6264 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6265 #define IO_ERROR_LOG_MESSAGE_LENGTH \
6266 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
6267 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
6268 PORT_MAXIMUM_MESSAGE_LENGTH)
6269 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
6270 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
6273 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
6275 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
6278 typedef enum _DMA_WIDTH
{
6283 } DMA_WIDTH
, *PDMA_WIDTH
;
6285 typedef enum _DMA_SPEED
{
6292 } DMA_SPEED
, *PDMA_SPEED
;
6294 /* DEVICE_DESCRIPTION.Version */
6296 #define DEVICE_DESCRIPTION_VERSION 0x0000
6297 #define DEVICE_DESCRIPTION_VERSION1 0x0001
6298 #define DEVICE_DESCRIPTION_VERSION2 0x0002
6300 typedef struct _DEVICE_DESCRIPTION
{
6303 BOOLEAN ScatterGather
;
6305 BOOLEAN AutoInitialize
;
6306 BOOLEAN Dma32BitAddresses
;
6307 BOOLEAN IgnoreCount
;
6309 BOOLEAN Dma64BitAddresses
;
6312 INTERFACE_TYPE InterfaceType
;
6315 ULONG MaximumLength
;
6317 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
6319 typedef enum _DEVICE_RELATION_TYPE
{
6324 TargetDeviceRelation
,
6327 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
6329 typedef struct _DEVICE_RELATIONS
{
6331 PDEVICE_OBJECT Objects
[1];
6332 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
6334 typedef struct _DEVOBJ_EXTENSION
{
6337 PDEVICE_OBJECT DeviceObject
;
6338 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
6340 typedef struct _SCATTER_GATHER_ELEMENT
{
6341 PHYSICAL_ADDRESS Address
;
6344 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
6346 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
6348 #if defined(_MSC_VER)
6349 #if _MSC_VER >= 1200
6350 #pragma warning(push)
6352 #pragma warning(disable:4200)
6353 #endif /* _MSC_VER */
6355 typedef struct _SCATTER_GATHER_LIST
{
6356 ULONG NumberOfElements
;
6358 SCATTER_GATHER_ELEMENT Elements
[1];
6359 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6361 #if defined(_MSC_VER)
6362 #if _MSC_VER >= 1200
6363 #pragma warning(pop)
6365 #pragma warning(default:4200)
6367 #endif /* _MSC_VER */
6369 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6371 struct _SCATTER_GATHER_LIST
;
6372 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
6374 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
6376 _Function_class_(DRIVER_ADD_DEVICE
)
6377 _IRQL_requires_(PASSIVE_LEVEL
)
6378 _IRQL_requires_same_
6379 _When_(return>=0, _Kernel_clear_do_init_(__yes
))
6381 (NTAPI DRIVER_ADD_DEVICE
)(
6382 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6383 _In_
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
6384 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
6386 typedef struct _DRIVER_EXTENSION
{
6387 struct _DRIVER_OBJECT
*DriverObject
;
6388 PDRIVER_ADD_DEVICE AddDevice
;
6390 UNICODE_STRING ServiceKeyName
;
6391 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
6393 #define DRVO_UNLOAD_INVOKED 0x00000001
6394 #define DRVO_LEGACY_DRIVER 0x00000002
6395 #define DRVO_BUILTIN_DRIVER 0x00000004
6397 _Function_class_(DRIVER_INITIALIZE
)
6398 _IRQL_requires_same_
6400 (NTAPI DRIVER_INITIALIZE
)(
6401 _In_
struct _DRIVER_OBJECT
*DriverObject
,
6402 _In_ PUNICODE_STRING RegistryPath
);
6403 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
6405 _Function_class_(DRIVER_STARTIO
)
6406 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6407 _IRQL_requires_(DISPATCH_LEVEL
)
6408 _IRQL_requires_same_
6410 (NTAPI DRIVER_STARTIO
)(
6411 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6412 _Inout_
struct _IRP
*Irp
);
6413 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
6415 _Function_class_(DRIVER_UNLOAD
)
6416 _IRQL_requires_(PASSIVE_LEVEL
)
6417 _IRQL_requires_same_
6419 (NTAPI DRIVER_UNLOAD
)(
6420 _In_
struct _DRIVER_OBJECT
*DriverObject
);
6421 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
6423 _Function_class_(DRIVER_DISPATCH
)
6424 _IRQL_requires_(PASSIVE_LEVEL
)
6425 _IRQL_requires_same_
6427 (NTAPI DRIVER_DISPATCH
)(
6428 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6429 _Inout_
struct _IRP
*Irp
);
6430 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
6432 typedef struct _DRIVER_OBJECT
{
6435 PDEVICE_OBJECT DeviceObject
;
6439 PVOID DriverSection
;
6440 PDRIVER_EXTENSION DriverExtension
;
6441 UNICODE_STRING DriverName
;
6442 PUNICODE_STRING HardwareDatabase
;
6443 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
6444 PDRIVER_INITIALIZE DriverInit
;
6445 PDRIVER_STARTIO DriverStartIo
;
6446 PDRIVER_UNLOAD DriverUnload
;
6447 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
6448 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
6450 typedef struct _DMA_ADAPTER
{
6453 struct _DMA_OPERATIONS
* DmaOperations
;
6454 } DMA_ADAPTER
, *PDMA_ADAPTER
;
6457 (NTAPI
*PPUT_DMA_ADAPTER
)(
6458 PDMA_ADAPTER DmaAdapter
);
6461 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
6462 _In_ PDMA_ADAPTER DmaAdapter
,
6464 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
6465 _In_ BOOLEAN CacheEnabled
);
6468 (NTAPI
*PFREE_COMMON_BUFFER
)(
6469 _In_ PDMA_ADAPTER DmaAdapter
,
6471 _In_ PHYSICAL_ADDRESS LogicalAddress
,
6472 _In_ PVOID VirtualAddress
,
6473 _In_ BOOLEAN CacheEnabled
);
6476 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
6477 _In_ PDMA_ADAPTER DmaAdapter
,
6478 _In_ PDEVICE_OBJECT DeviceObject
,
6479 _In_ ULONG NumberOfMapRegisters
,
6480 _In_ PDRIVER_CONTROL ExecutionRoutine
,
6481 _In_ PVOID Context
);
6484 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
6485 _In_ PDMA_ADAPTER DmaAdapter
,
6487 _In_ PVOID MapRegisterBase
,
6488 _In_ PVOID CurrentVa
,
6490 _In_ BOOLEAN WriteToDevice
);
6493 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
6494 _In_ PDMA_ADAPTER DmaAdapter
);
6497 (NTAPI
*PFREE_MAP_REGISTERS
)(
6498 _In_ PDMA_ADAPTER DmaAdapter
,
6499 PVOID MapRegisterBase
,
6500 ULONG NumberOfMapRegisters
);
6502 typedef PHYSICAL_ADDRESS
6503 (NTAPI
*PMAP_TRANSFER
)(
6504 _In_ PDMA_ADAPTER DmaAdapter
,
6506 _In_ PVOID MapRegisterBase
,
6507 _In_ PVOID CurrentVa
,
6508 _Inout_ PULONG Length
,
6509 _In_ BOOLEAN WriteToDevice
);
6512 (NTAPI
*PGET_DMA_ALIGNMENT
)(
6513 _In_ PDMA_ADAPTER DmaAdapter
);
6516 (NTAPI
*PREAD_DMA_COUNTER
)(
6517 _In_ PDMA_ADAPTER DmaAdapter
);
6519 _Function_class_(DRIVER_LIST_CONTROL
)
6520 _IRQL_requires_same_
6522 (NTAPI DRIVER_LIST_CONTROL
)(
6523 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6524 _In_
struct _IRP
*Irp
,
6525 _In_
struct _SCATTER_GATHER_LIST
*ScatterGather
,
6526 _In_ PVOID Context
);
6527 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
6530 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
6531 _In_ PDMA_ADAPTER DmaAdapter
,
6532 _In_ PDEVICE_OBJECT DeviceObject
,
6534 _In_ PVOID CurrentVa
,
6536 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6538 _In_ BOOLEAN WriteToDevice
);
6541 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
6542 _In_ PDMA_ADAPTER DmaAdapter
,
6543 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6544 _In_ BOOLEAN WriteToDevice
);
6547 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
6548 _In_ PDMA_ADAPTER DmaAdapter
,
6549 _In_ PMDL Mdl OPTIONAL
,
6550 _In_ PVOID CurrentVa
,
6552 _Out_ PULONG ScatterGatherListSize
,
6553 _Out_ OPTIONAL PULONG pNumberOfMapRegisters
);
6556 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
6557 _In_ PDMA_ADAPTER DmaAdapter
,
6558 _In_ PDEVICE_OBJECT DeviceObject
,
6560 _In_ PVOID CurrentVa
,
6562 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
6564 _In_ BOOLEAN WriteToDevice
,
6565 _In_ PVOID ScatterGatherBuffer
,
6566 _In_ ULONG ScatterGatherLength
);
6569 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
6570 _In_ PDMA_ADAPTER DmaAdapter
,
6571 _In_ PSCATTER_GATHER_LIST ScatterGather
,
6572 _In_ PMDL OriginalMdl
,
6573 _Out_ PMDL
*TargetMdl
);
6575 typedef struct _DMA_OPERATIONS
{
6577 PPUT_DMA_ADAPTER PutDmaAdapter
;
6578 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
6579 PFREE_COMMON_BUFFER FreeCommonBuffer
;
6580 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
6581 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
6582 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
6583 PFREE_MAP_REGISTERS FreeMapRegisters
;
6584 PMAP_TRANSFER MapTransfer
;
6585 PGET_DMA_ALIGNMENT GetDmaAlignment
;
6586 PREAD_DMA_COUNTER ReadDmaCounter
;
6587 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
6588 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
6589 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
6590 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
6591 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
6592 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
6594 typedef struct _IO_RESOURCE_DESCRIPTOR
{
6597 UCHAR ShareDisposition
;
6605 PHYSICAL_ADDRESS MinimumAddress
;
6606 PHYSICAL_ADDRESS MaximumAddress
;
6611 PHYSICAL_ADDRESS MinimumAddress
;
6612 PHYSICAL_ADDRESS MaximumAddress
;
6615 ULONG MinimumVector
;
6616 ULONG MaximumVector
;
6619 ULONG MinimumChannel
;
6620 ULONG MaximumChannel
;
6625 PHYSICAL_ADDRESS MinimumAddress
;
6626 PHYSICAL_ADDRESS MaximumAddress
;
6643 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
6645 typedef struct _IO_RESOURCE_LIST
{
6649 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
6650 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
6652 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
6654 INTERFACE_TYPE InterfaceType
;
6658 ULONG AlternativeLists
;
6659 IO_RESOURCE_LIST List
[1];
6660 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
6662 _Function_class_(DRIVER_CANCEL
)
6663 _Requires_lock_held_(_Global_cancel_spin_lock_
)
6664 _Releases_lock_(_Global_cancel_spin_lock_
)
6665 _IRQL_requires_min_(DISPATCH_LEVEL
)
6666 _IRQL_requires_(DISPATCH_LEVEL
)
6668 (NTAPI DRIVER_CANCEL
)(
6669 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
6670 _Inout_ _IRQL_uses_cancel_
struct _IRP
*Irp
);
6671 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
6673 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _IRP
{
6676 struct _MDL
*MdlAddress
;
6679 struct _IRP
*MasterIrp
;
6680 volatile LONG IrpCount
;
6683 LIST_ENTRY ThreadListEntry
;
6684 IO_STATUS_BLOCK IoStatus
;
6685 KPROCESSOR_MODE RequestorMode
;
6686 BOOLEAN PendingReturned
;
6688 CHAR CurrentLocation
;
6691 CCHAR ApcEnvironment
;
6692 UCHAR AllocationFlags
;
6693 PIO_STATUS_BLOCK UserIosb
;
6697 _ANONYMOUS_UNION
union {
6698 PIO_APC_ROUTINE UserApcRoutine
;
6699 PVOID IssuingProcess
;
6701 PVOID UserApcContext
;
6702 } AsynchronousParameters
;
6703 LARGE_INTEGER AllocationSize
;
6705 volatile PDRIVER_CANCEL CancelRoutine
;
6709 _ANONYMOUS_UNION
union {
6710 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
6711 _ANONYMOUS_STRUCT
struct {
6712 PVOID DriverContext
[4];
6716 PCHAR AuxiliaryBuffer
;
6717 _ANONYMOUS_STRUCT
struct {
6718 LIST_ENTRY ListEntry
;
6719 _ANONYMOUS_UNION
union {
6720 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6724 struct _FILE_OBJECT
*OriginalFileObject
;
6727 PVOID CompletionKey
;
6731 typedef enum _IO_PAGING_PRIORITY
{
6732 IoPagingPriorityInvalid
,
6733 IoPagingPriorityNormal
,
6734 IoPagingPriorityHigh
,
6735 IoPagingPriorityReserved1
,
6736 IoPagingPriorityReserved2
6737 } IO_PAGING_PRIORITY
;
6739 _Function_class_(IO_COMPLETION_ROUTINE
)
6740 _IRQL_requires_same_
6742 (NTAPI IO_COMPLETION_ROUTINE
)(
6743 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6744 _In_
struct _IRP
*Irp
,
6745 _In_opt_ PVOID Context
);
6746 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6748 _Function_class_(IO_DPC_ROUTINE
)
6749 _IRQL_always_function_min_(DISPATCH_LEVEL
)
6750 _IRQL_requires_(DISPATCH_LEVEL
)
6751 _IRQL_requires_same_
6753 (NTAPI IO_DPC_ROUTINE
)(
6754 _In_
struct _KDPC
*Dpc
,
6755 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6756 _Inout_
struct _IRP
*Irp
,
6757 _In_opt_ PVOID Context
);
6758 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6761 (NTAPI
*PMM_DLL_INITIALIZE
)(
6762 _In_ PUNICODE_STRING RegistryPath
);
6765 (NTAPI
*PMM_DLL_UNLOAD
)(
6768 _Function_class_(IO_TIMER_ROUTINE
)
6769 _IRQL_requires_same_
6771 (NTAPI IO_TIMER_ROUTINE
)(
6772 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
6773 _In_opt_ PVOID Context
);
6774 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6776 typedef struct _IO_SECURITY_CONTEXT
{
6777 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6778 PACCESS_STATE AccessState
;
6779 ACCESS_MASK DesiredAccess
;
6780 ULONG FullCreateOptions
;
6781 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6785 typedef struct _IO_CSQ_IRP_CONTEXT
{
6788 struct _IO_CSQ
*Csq
;
6789 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6792 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6793 _In_
struct _IO_CSQ
*Csq
,
6797 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6798 _In_
struct _IO_CSQ
*Csq
,
6800 _In_ PVOID InsertContext
);
6801 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6804 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6805 _In_
struct _IO_CSQ
*Csq
,
6809 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6810 _In_
struct _IO_CSQ
*Csq
,
6812 _In_ PVOID PeekContext
);
6815 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6816 _In_
struct _IO_CSQ
*Csq
,
6820 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6821 _In_
struct _IO_CSQ
*Csq
,
6825 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6826 _In_
struct _IO_CSQ
*Csq
,
6829 typedef struct _IO_CSQ
{
6831 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6832 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6833 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6834 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6835 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6836 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6837 PVOID ReservePointer
;
6840 typedef enum _BUS_QUERY_ID_TYPE
{
6842 BusQueryHardwareIDs
,
6843 BusQueryCompatibleIDs
,
6845 BusQueryDeviceSerialNumber
6846 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6848 typedef enum _DEVICE_TEXT_TYPE
{
6849 DeviceTextDescription
,
6850 DeviceTextLocationInformation
6851 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
6854 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
6858 _IRQL_requires_max_(DISPATCH_LEVEL
)
6859 _Must_inspect_result_
6861 (NTAPI
*PGPE_CONNECT_VECTOR
)(
6866 PGPE_SERVICE_ROUTINE
,
6870 _IRQL_requires_max_(DISPATCH_LEVEL
)
6871 _Must_inspect_result_
6873 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
6876 _IRQL_requires_max_(DISPATCH_LEVEL
)
6877 _Must_inspect_result_
6879 (NTAPI
*PGPE_ENABLE_EVENT
)(
6883 _IRQL_requires_max_(DISPATCH_LEVEL
)
6884 _Must_inspect_result_
6886 (NTAPI
*PGPE_DISABLE_EVENT
)(
6890 _IRQL_requires_max_(DISPATCH_LEVEL
)
6891 _Must_inspect_result_
6893 (NTAPI
*PGPE_CLEAR_STATUS
)(
6898 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
6902 _IRQL_requires_max_(DISPATCH_LEVEL
)
6903 _Must_inspect_result_
6905 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6907 PDEVICE_NOTIFY_CALLBACK
,
6910 _IRQL_requires_max_(DISPATCH_LEVEL
)
6912 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6914 PDEVICE_NOTIFY_CALLBACK
);
6916 typedef struct _ACPI_INTERFACE_STANDARD
{
6920 PINTERFACE_REFERENCE InterfaceReference
;
6921 PINTERFACE_DEREFERENCE InterfaceDereference
;
6922 PGPE_CONNECT_VECTOR GpeConnectVector
;
6923 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
6924 PGPE_ENABLE_EVENT GpeEnableEvent
;
6925 PGPE_DISABLE_EVENT GpeDisableEvent
;
6926 PGPE_CLEAR_STATUS GpeClearStatus
;
6927 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
6928 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
6929 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
6932 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
6933 PVOID ObjectContext
,
6934 PVOID ServiceContext
);
6936 _IRQL_requires_max_(DISPATCH_LEVEL
)
6937 _Must_inspect_result_
6939 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
6942 KINTERRUPT_MODE Mode
,
6944 PGPE_SERVICE_ROUTINE ServiceRoutine
,
6945 PVOID ServiceContext
,
6946 PVOID
*ObjectContext
);
6948 _IRQL_requires_max_(DISPATCH_LEVEL
)
6949 _Must_inspect_result_
6951 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
6953 PVOID ObjectContext
);
6955 _IRQL_requires_max_(DISPATCH_LEVEL
)
6956 _Must_inspect_result_
6958 (NTAPI
*PGPE_ENABLE_EVENT2
)(
6960 PVOID ObjectContext
);
6962 _IRQL_requires_max_(DISPATCH_LEVEL
)
6963 _Must_inspect_result_
6965 (NTAPI
*PGPE_DISABLE_EVENT2
)(
6967 PVOID ObjectContext
);
6969 _IRQL_requires_max_(DISPATCH_LEVEL
)
6970 _Must_inspect_result_
6972 (NTAPI
*PGPE_CLEAR_STATUS2
)(
6974 PVOID ObjectContext
);
6976 _IRQL_requires_max_(DISPATCH_LEVEL
)
6978 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
6979 PVOID NotificationContext
,
6982 _IRQL_requires_max_(DISPATCH_LEVEL
)
6983 _Must_inspect_result_
6985 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6987 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
6988 PVOID NotificationContext
);
6990 _IRQL_requires_max_(DISPATCH_LEVEL
)
6992 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6995 typedef struct _ACPI_INTERFACE_STANDARD2
{
6999 PINTERFACE_REFERENCE InterfaceReference
;
7000 PINTERFACE_DEREFERENCE InterfaceDereference
;
7001 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
7002 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
7003 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
7004 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
7005 PGPE_CLEAR_STATUS2 GpeClearStatus
;
7006 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
7007 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
7008 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
7010 #if !defined(_AMD64_) && !defined(_IA64_)
7011 #include <pshpack4.h>
7013 typedef struct _IO_STACK_LOCATION
{
7014 UCHAR MajorFunction
;
7015 UCHAR MinorFunction
;
7020 PIO_SECURITY_CONTEXT SecurityContext
;
7022 USHORT POINTER_ALIGNMENT FileAttributes
;
7024 ULONG POINTER_ALIGNMENT EaLength
;
7028 ULONG POINTER_ALIGNMENT Key
;
7029 LARGE_INTEGER ByteOffset
;
7033 ULONG POINTER_ALIGNMENT Key
;
7034 LARGE_INTEGER ByteOffset
;
7038 PUNICODE_STRING FileName
;
7039 FILE_INFORMATION_CLASS FileInformationClass
;
7044 ULONG CompletionFilter
;
7048 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7052 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
7053 PFILE_OBJECT FileObject
;
7054 _ANONYMOUS_UNION
union {
7055 _ANONYMOUS_STRUCT
struct {
7056 BOOLEAN ReplaceIfExists
;
7057 BOOLEAN AdvanceOnly
;
7060 HANDLE DeleteHandle
;
7074 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
7078 FS_INFORMATION_CLASS FsInformationClass
;
7081 ULONG OutputBufferLength
;
7082 ULONG InputBufferLength
;
7083 ULONG FsControlCode
;
7084 PVOID Type3InputBuffer
;
7085 } FileSystemControl
;
7087 PLARGE_INTEGER Length
;
7089 LARGE_INTEGER ByteOffset
;
7092 ULONG OutputBufferLength
;
7093 ULONG POINTER_ALIGNMENT InputBufferLength
;
7094 ULONG POINTER_ALIGNMENT IoControlCode
;
7095 PVOID Type3InputBuffer
;
7098 SECURITY_INFORMATION SecurityInformation
;
7099 ULONG POINTER_ALIGNMENT Length
;
7102 SECURITY_INFORMATION SecurityInformation
;
7103 PSECURITY_DESCRIPTOR SecurityDescriptor
;
7107 PDEVICE_OBJECT DeviceObject
;
7111 PDEVICE_OBJECT DeviceObject
;
7114 struct _SCSI_REQUEST_BLOCK
*Srb
;
7119 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
7120 ULONG SidListLength
;
7126 DEVICE_RELATION_TYPE Type
;
7127 } QueryDeviceRelations
;
7129 CONST GUID
*InterfaceType
;
7132 PINTERFACE Interface
;
7133 PVOID InterfaceSpecificData
;
7136 PDEVICE_CAPABILITIES Capabilities
;
7137 } DeviceCapabilities
;
7139 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
7140 } FilterResourceRequirements
;
7145 ULONG POINTER_ALIGNMENT Length
;
7151 BUS_QUERY_ID_TYPE IdType
;
7154 DEVICE_TEXT_TYPE DeviceTextType
;
7155 LCID POINTER_ALIGNMENT LocaleId
;
7159 BOOLEAN Reserved
[3];
7160 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
7161 } UsageNotification
;
7163 SYSTEM_POWER_STATE PowerState
;
7166 PPOWER_SEQUENCE PowerSequence
;
7169 ULONG SystemContext
;
7170 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
7171 POWER_STATE POINTER_ALIGNMENT State
;
7172 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
7175 PCM_RESOURCE_LIST AllocatedResources
;
7176 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
7179 ULONG_PTR ProviderId
;
7191 PDEVICE_OBJECT DeviceObject
;
7192 PFILE_OBJECT FileObject
;
7193 PIO_COMPLETION_ROUTINE CompletionRoutine
;
7195 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
7196 #if !defined(_AMD64_) && !defined(_IA64_)
7197 #include <poppack.h>
7200 /* IO_STACK_LOCATION.Control */
7202 #define SL_PENDING_RETURNED 0x01
7203 #define SL_ERROR_RETURNED 0x02
7204 #define SL_INVOKE_ON_CANCEL 0x20
7205 #define SL_INVOKE_ON_SUCCESS 0x40
7206 #define SL_INVOKE_ON_ERROR 0x80
7208 #define METHOD_BUFFERED 0
7209 #define METHOD_IN_DIRECT 1
7210 #define METHOD_OUT_DIRECT 2
7211 #define METHOD_NEITHER 3
7213 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
7214 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
7216 #define FILE_SUPERSEDED 0x00000000
7217 #define FILE_OPENED 0x00000001
7218 #define FILE_CREATED 0x00000002
7219 #define FILE_OVERWRITTEN 0x00000003
7220 #define FILE_EXISTS 0x00000004
7221 #define FILE_DOES_NOT_EXIST 0x00000005
7223 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
7224 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
7226 /* also in winnt.h */
7227 #define FILE_LIST_DIRECTORY 0x00000001
7228 #define FILE_READ_DATA 0x00000001
7229 #define FILE_ADD_FILE 0x00000002
7230 #define FILE_WRITE_DATA 0x00000002
7231 #define FILE_ADD_SUBDIRECTORY 0x00000004
7232 #define FILE_APPEND_DATA 0x00000004
7233 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
7234 #define FILE_READ_EA 0x00000008
7235 #define FILE_WRITE_EA 0x00000010
7236 #define FILE_EXECUTE 0x00000020
7237 #define FILE_TRAVERSE 0x00000020
7238 #define FILE_DELETE_CHILD 0x00000040
7239 #define FILE_READ_ATTRIBUTES 0x00000080
7240 #define FILE_WRITE_ATTRIBUTES 0x00000100
7242 #define FILE_SHARE_READ 0x00000001
7243 #define FILE_SHARE_WRITE 0x00000002
7244 #define FILE_SHARE_DELETE 0x00000004
7245 #define FILE_SHARE_VALID_FLAGS 0x00000007
7247 #define FILE_ATTRIBUTE_READONLY 0x00000001
7248 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
7249 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
7250 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
7251 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
7252 #define FILE_ATTRIBUTE_DEVICE 0x00000040
7253 #define FILE_ATTRIBUTE_NORMAL 0x00000080
7254 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
7255 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
7256 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
7257 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
7258 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
7259 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
7260 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
7261 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
7263 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
7264 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
7266 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
7267 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
7268 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
7269 #define FILE_VALID_SET_FLAGS 0x00000036
7271 #define FILE_SUPERSEDE 0x00000000
7272 #define FILE_OPEN 0x00000001
7273 #define FILE_CREATE 0x00000002
7274 #define FILE_OPEN_IF 0x00000003
7275 #define FILE_OVERWRITE 0x00000004
7276 #define FILE_OVERWRITE_IF 0x00000005
7277 #define FILE_MAXIMUM_DISPOSITION 0x00000005
7279 #define FILE_DIRECTORY_FILE 0x00000001
7280 #define FILE_WRITE_THROUGH 0x00000002
7281 #define FILE_SEQUENTIAL_ONLY 0x00000004
7282 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
7283 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
7284 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
7285 #define FILE_NON_DIRECTORY_FILE 0x00000040
7286 #define FILE_CREATE_TREE_CONNECTION 0x00000080
7287 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
7288 #define FILE_NO_EA_KNOWLEDGE 0x00000200
7289 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
7290 #define FILE_RANDOM_ACCESS 0x00000800
7291 #define FILE_DELETE_ON_CLOSE 0x00001000
7292 #define FILE_OPEN_BY_FILE_ID 0x00002000
7293 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
7294 #define FILE_NO_COMPRESSION 0x00008000
7295 #if (NTDDI_VERSION >= NTDDI_WIN7)
7296 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
7297 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
7298 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7299 #define FILE_RESERVE_OPFILTER 0x00100000
7300 #define FILE_OPEN_REPARSE_POINT 0x00200000
7301 #define FILE_OPEN_NO_RECALL 0x00400000
7302 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
7304 #define FILE_ANY_ACCESS 0x00000000
7305 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
7306 #define FILE_READ_ACCESS 0x00000001
7307 #define FILE_WRITE_ACCESS 0x00000002
7309 #define FILE_ALL_ACCESS \
7310 (STANDARD_RIGHTS_REQUIRED | \
7314 #define FILE_GENERIC_EXECUTE \
7315 (STANDARD_RIGHTS_EXECUTE | \
7316 FILE_READ_ATTRIBUTES | \
7320 #define FILE_GENERIC_READ \
7321 (STANDARD_RIGHTS_READ | \
7323 FILE_READ_ATTRIBUTES | \
7327 #define FILE_GENERIC_WRITE \
7328 (STANDARD_RIGHTS_WRITE | \
7330 FILE_WRITE_ATTRIBUTES | \
7332 FILE_APPEND_DATA | \
7337 #define WMIREG_ACTION_REGISTER 1
7338 #define WMIREG_ACTION_DEREGISTER 2
7339 #define WMIREG_ACTION_REREGISTER 3
7340 #define WMIREG_ACTION_UPDATE_GUIDS 4
7341 #define WMIREG_ACTION_BLOCK_IRPS 5
7343 #define WMIREGISTER 0
7346 _Function_class_(WMI_NOTIFICATION_CALLBACK
)
7347 _IRQL_requires_same_
7349 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
7352 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
7357 typedef struct _PCI_SLOT_NUMBER
{
7360 ULONG DeviceNumber
:5;
7361 ULONG FunctionNumber
:3;
7366 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
7368 #define PCI_TYPE0_ADDRESSES 6
7369 #define PCI_TYPE1_ADDRESSES 2
7370 #define PCI_TYPE2_ADDRESSES 5
7372 typedef struct _PCI_COMMON_HEADER
{
7373 PCI_COMMON_HEADER_LAYOUT
7374 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
7377 typedef struct _PCI_COMMON_CONFIG
{
7378 PCI_COMMON_HEADER_LAYOUT
7379 UCHAR DeviceSpecific
[192];
7380 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7382 typedef struct _PCI_COMMON_CONFIG
{
7383 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
7384 UCHAR DeviceSpecific
[192];
7385 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
7388 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
7390 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
7392 #define PCI_MAX_DEVICES 32
7393 #define PCI_MAX_FUNCTION 8
7394 #define PCI_MAX_BRIDGE_NUMBER 0xFF
7395 #define PCI_INVALID_VENDORID 0xFFFF
7397 /* PCI_COMMON_CONFIG.HeaderType */
7398 #define PCI_MULTIFUNCTION 0x80
7399 #define PCI_DEVICE_TYPE 0x00
7400 #define PCI_BRIDGE_TYPE 0x01
7401 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
7403 #define PCI_CONFIGURATION_TYPE(PciData) \
7404 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
7406 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
7407 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
7409 /* PCI_COMMON_CONFIG.Command */
7410 #define PCI_ENABLE_IO_SPACE 0x0001
7411 #define PCI_ENABLE_MEMORY_SPACE 0x0002
7412 #define PCI_ENABLE_BUS_MASTER 0x0004
7413 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
7414 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
7415 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
7416 #define PCI_ENABLE_PARITY 0x0040
7417 #define PCI_ENABLE_WAIT_CYCLE 0x0080
7418 #define PCI_ENABLE_SERR 0x0100
7419 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
7420 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
7422 /* PCI_COMMON_CONFIG.Status */
7423 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
7424 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
7425 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
7426 #define PCI_STATUS_UDF_SUPPORTED 0x0040
7427 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
7428 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
7429 #define PCI_STATUS_DEVSEL 0x0600
7430 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
7431 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
7432 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
7433 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
7434 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
7436 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
7438 #define PCI_WHICHSPACE_CONFIG 0x0
7439 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
7441 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
7442 #define PCI_CAPABILITY_ID_AGP 0x02
7443 #define PCI_CAPABILITY_ID_VPD 0x03
7444 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
7445 #define PCI_CAPABILITY_ID_MSI 0x05
7446 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
7447 #define PCI_CAPABILITY_ID_PCIX 0x07
7448 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
7449 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
7450 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
7451 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
7452 #define PCI_CAPABILITY_ID_SHPC 0x0C
7453 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
7454 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
7455 #define PCI_CAPABILITY_ID_SECURE 0x0F
7456 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
7457 #define PCI_CAPABILITY_ID_MSIX 0x11
7459 typedef struct _PCI_CAPABILITIES_HEADER
{
7462 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
7464 typedef struct _PCI_PMC
{
7468 UCHAR DeviceSpecificInitialization
:1;
7470 struct _PM_SUPPORT
{
7480 } PCI_PMC
, *PPCI_PMC
;
7482 typedef struct _PCI_PMCSR
{
7483 USHORT PowerState
:2;
7486 USHORT DataSelect
:4;
7489 } PCI_PMCSR
, *PPCI_PMCSR
;
7491 typedef struct _PCI_PMCSR_BSE
{
7493 UCHAR D3HotSupportsStopClock
:1;
7494 UCHAR BusPowerClockControlEnabled
:1;
7495 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
7497 typedef struct _PCI_PM_CAPABILITY
{
7498 PCI_CAPABILITIES_HEADER Header
;
7500 PCI_PMC Capabilities
;
7504 PCI_PMCSR ControlStatus
;
7508 PCI_PMCSR_BSE BridgeSupport
;
7512 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
7515 PCI_CAPABILITIES_HEADER Header
;
7518 USHORT DataParityErrorRecoveryEnable
:1;
7519 USHORT EnableRelaxedOrdering
:1;
7520 USHORT MaxMemoryReadByteCount
:2;
7521 USHORT MaxOutstandingSplitTransactions
:3;
7528 ULONG FunctionNumber
:3;
7529 ULONG DeviceNumber
:5;
7531 ULONG Device64Bit
:1;
7532 ULONG Capable133MHz
:1;
7533 ULONG SplitCompletionDiscarded
:1;
7534 ULONG UnexpectedSplitCompletion
:1;
7535 ULONG DeviceComplexity
:1;
7536 ULONG DesignedMaxMemoryReadByteCount
:2;
7537 ULONG DesignedMaxOutstandingSplitTransactions
:3;
7538 ULONG DesignedMaxCumulativeReadSize
:3;
7539 ULONG ReceivedSplitCompletionErrorMessage
:1;
7540 ULONG CapablePCIX266
:1;
7541 ULONG CapablePCIX533
:1;
7545 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
7547 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
7548 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
7549 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
7550 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
7551 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
7552 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
7553 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
7554 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
7555 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
7556 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
7557 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
7559 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
7560 USHORT CapabilityID
;
7563 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
7565 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
7566 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7567 ULONG LowSerialNumber
;
7568 ULONG HighSerialNumber
;
7569 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
7571 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
7572 _ANONYMOUS_STRUCT
struct {
7575 ULONG DataLinkProtocolError
:1;
7576 ULONG SurpriseDownError
:1;
7578 ULONG PoisonedTLP
:1;
7579 ULONG FlowControlProtocolError
:1;
7580 ULONG CompletionTimeout
:1;
7581 ULONG CompleterAbort
:1;
7582 ULONG UnexpectedCompletion
:1;
7583 ULONG ReceiverOverflow
:1;
7584 ULONG MalformedTLP
:1;
7586 ULONG UnsupportedRequestError
:1;
7590 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
7592 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
7593 _ANONYMOUS_STRUCT
struct {
7596 ULONG DataLinkProtocolError
:1;
7597 ULONG SurpriseDownError
:1;
7599 ULONG PoisonedTLP
:1;
7600 ULONG FlowControlProtocolError
:1;
7601 ULONG CompletionTimeout
:1;
7602 ULONG CompleterAbort
:1;
7603 ULONG UnexpectedCompletion
:1;
7604 ULONG ReceiverOverflow
:1;
7605 ULONG MalformedTLP
:1;
7607 ULONG UnsupportedRequestError
:1;
7611 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
7613 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
7614 _ANONYMOUS_STRUCT
struct {
7617 ULONG DataLinkProtocolError
:1;
7618 ULONG SurpriseDownError
:1;
7620 ULONG PoisonedTLP
:1;
7621 ULONG FlowControlProtocolError
:1;
7622 ULONG CompletionTimeout
:1;
7623 ULONG CompleterAbort
:1;
7624 ULONG UnexpectedCompletion
:1;
7625 ULONG ReceiverOverflow
:1;
7626 ULONG MalformedTLP
:1;
7628 ULONG UnsupportedRequestError
:1;
7632 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
7634 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
7635 _ANONYMOUS_STRUCT
struct {
7636 ULONG ReceiverError
:1;
7640 ULONG ReplayNumRollover
:1;
7642 ULONG ReplayTimerTimeout
:1;
7643 ULONG AdvisoryNonFatalError
:1;
7647 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
7649 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
7650 _ANONYMOUS_STRUCT
struct {
7651 ULONG ReceiverError
:1;
7655 ULONG ReplayNumRollover
:1;
7657 ULONG ReplayTimerTimeout
:1;
7658 ULONG AdvisoryNonFatalError
:1;
7662 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
7664 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
7665 _ANONYMOUS_STRUCT
struct {
7666 ULONG FirstErrorPointer
:5;
7667 ULONG ECRCGenerationCapable
:1;
7668 ULONG ECRCGenerationEnable
:1;
7669 ULONG ECRCCheckCapable
:1;
7670 ULONG ECRCCheckEnable
:1;
7674 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
7676 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
7677 _ANONYMOUS_STRUCT
struct {
7678 ULONG CorrectableErrorReportingEnable
:1;
7679 ULONG NonFatalErrorReportingEnable
:1;
7680 ULONG FatalErrorReportingEnable
:1;
7684 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
7686 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
7687 _ANONYMOUS_STRUCT
struct {
7688 ULONG CorrectableErrorReceived
:1;
7689 ULONG MultipleCorrectableErrorsReceived
:1;
7690 ULONG UncorrectableErrorReceived
:1;
7691 ULONG MultipleUncorrectableErrorsReceived
:1;
7692 ULONG FirstUncorrectableFatal
:1;
7693 ULONG NonFatalErrorMessagesReceived
:1;
7694 ULONG FatalErrorMessagesReceived
:1;
7696 ULONG AdvancedErrorInterruptMessageNumber
:5;
7699 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
7701 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
7702 _ANONYMOUS_STRUCT
struct {
7703 USHORT CorrectableSourceIdFun
:3;
7704 USHORT CorrectableSourceIdDev
:5;
7705 USHORT CorrectableSourceIdBus
:8;
7706 USHORT UncorrectableSourceIdFun
:3;
7707 USHORT UncorrectableSourceIdDev
:5;
7708 USHORT UncorrectableSourceIdBus
:8;
7711 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
7713 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
7714 _ANONYMOUS_STRUCT
struct {
7715 ULONG TargetAbortOnSplitCompletion
:1;
7716 ULONG MasterAbortOnSplitCompletion
:1;
7717 ULONG ReceivedTargetAbort
:1;
7718 ULONG ReceivedMasterAbort
:1;
7720 ULONG UnexpectedSplitCompletionError
:1;
7721 ULONG UncorrectableSplitCompletion
:1;
7722 ULONG UncorrectableDataError
:1;
7723 ULONG UncorrectableAttributeError
:1;
7724 ULONG UncorrectableAddressError
:1;
7725 ULONG DelayedTransactionDiscardTimerExpired
:1;
7726 ULONG PERRAsserted
:1;
7727 ULONG SERRAsserted
:1;
7728 ULONG InternalBridgeError
:1;
7732 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
7734 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
7735 _ANONYMOUS_STRUCT
struct {
7736 ULONG TargetAbortOnSplitCompletion
:1;
7737 ULONG MasterAbortOnSplitCompletion
:1;
7738 ULONG ReceivedTargetAbort
:1;
7739 ULONG ReceivedMasterAbort
:1;
7741 ULONG UnexpectedSplitCompletionError
:1;
7742 ULONG UncorrectableSplitCompletion
:1;
7743 ULONG UncorrectableDataError
:1;
7744 ULONG UncorrectableAttributeError
:1;
7745 ULONG UncorrectableAddressError
:1;
7746 ULONG DelayedTransactionDiscardTimerExpired
:1;
7747 ULONG PERRAsserted
:1;
7748 ULONG SERRAsserted
:1;
7749 ULONG InternalBridgeError
:1;
7753 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
7755 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
7756 _ANONYMOUS_STRUCT
struct {
7757 ULONG TargetAbortOnSplitCompletion
:1;
7758 ULONG MasterAbortOnSplitCompletion
:1;
7759 ULONG ReceivedTargetAbort
:1;
7760 ULONG ReceivedMasterAbort
:1;
7762 ULONG UnexpectedSplitCompletionError
:1;
7763 ULONG UncorrectableSplitCompletion
:1;
7764 ULONG UncorrectableDataError
:1;
7765 ULONG UncorrectableAttributeError
:1;
7766 ULONG UncorrectableAddressError
:1;
7767 ULONG DelayedTransactionDiscardTimerExpired
:1;
7768 ULONG PERRAsserted
:1;
7769 ULONG SERRAsserted
:1;
7770 ULONG InternalBridgeError
:1;
7774 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7776 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7777 _ANONYMOUS_STRUCT
struct {
7778 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7782 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7784 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7785 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7786 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7788 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7789 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7790 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7791 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7793 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7794 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7795 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7796 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7797 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7798 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7799 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7800 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7802 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7803 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7804 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7805 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7806 ULONG SecHeaderLog
[4];
7807 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7809 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7810 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7811 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7812 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7813 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7814 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7815 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7816 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7818 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7819 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7820 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7821 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7823 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7824 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7825 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7826 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7827 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7828 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7829 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7830 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7832 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7833 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7834 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7835 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7836 ULONG SecHeaderLog
[4];
7837 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7839 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7840 _ANONYMOUS_STRUCT
struct {
7841 ULONG VFMigrationCapable
:1;
7843 ULONG VFMigrationInterruptNumber
:11;
7846 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7848 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7849 _ANONYMOUS_STRUCT
struct {
7851 USHORT VFMigrationEnable
:1;
7852 USHORT VFMigrationInterruptEnable
:1;
7853 USHORT VFMemorySpaceEnable
:1;
7854 USHORT ARICapableHierarchy
:1;
7855 USHORT Reserved1
:11;
7858 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
7860 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
7861 _ANONYMOUS_STRUCT
struct {
7862 USHORT VFMigrationStatus
:1;
7863 USHORT Reserved1
:15;
7866 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
7868 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
7869 _ANONYMOUS_STRUCT
struct {
7870 ULONG VFMigrationStateBIR
:3;
7871 ULONG VFMigrationStateOffset
:29;
7874 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
7876 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
7877 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7878 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
7879 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
7880 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
7884 UCHAR FunctionDependencyLink
;
7886 USHORT FirstVFOffset
;
7890 ULONG SupportedPageSizes
;
7891 ULONG SystemPageSize
;
7892 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
7893 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
7894 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
7896 /* PCI device classes */
7897 #define PCI_CLASS_PRE_20 0x00
7898 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
7899 #define PCI_CLASS_NETWORK_CTLR 0x02
7900 #define PCI_CLASS_DISPLAY_CTLR 0x03
7901 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
7902 #define PCI_CLASS_MEMORY_CTLR 0x05
7903 #define PCI_CLASS_BRIDGE_DEV 0x06
7904 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
7905 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
7906 #define PCI_CLASS_INPUT_DEV 0x09
7907 #define PCI_CLASS_DOCKING_STATION 0x0a
7908 #define PCI_CLASS_PROCESSOR 0x0b
7909 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
7910 #define PCI_CLASS_WIRELESS_CTLR 0x0d
7911 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
7912 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
7913 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
7914 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
7915 #define PCI_CLASS_NOT_DEFINED 0xff
7917 /* PCI device subclasses for class 0 */
7918 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
7919 #define PCI_SUBCLASS_PRE_20_VGA 0x01
7921 /* PCI device subclasses for class 1 (mass storage controllers)*/
7922 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
7923 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
7924 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
7925 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
7926 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
7927 #define PCI_SUBCLASS_MSC_OTHER 0x80
7929 /* PCI device subclasses for class 2 (network controllers)*/
7930 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
7931 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
7932 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
7933 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
7934 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
7935 #define PCI_SUBCLASS_NET_OTHER 0x80
7937 /* PCI device subclasses for class 3 (display controllers)*/
7938 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
7939 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
7940 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
7941 #define PCI_SUBCLASS_VID_OTHER 0x80
7943 /* PCI device subclasses for class 4 (multimedia device)*/
7944 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
7945 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
7946 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
7947 #define PCI_SUBCLASS_MM_OTHER 0x80
7949 /* PCI device subclasses for class 5 (memory controller)*/
7950 #define PCI_SUBCLASS_MEM_RAM 0x00
7951 #define PCI_SUBCLASS_MEM_FLASH 0x01
7952 #define PCI_SUBCLASS_MEM_OTHER 0x80
7954 /* PCI device subclasses for class 6 (bridge device)*/
7955 #define PCI_SUBCLASS_BR_HOST 0x00
7956 #define PCI_SUBCLASS_BR_ISA 0x01
7957 #define PCI_SUBCLASS_BR_EISA 0x02
7958 #define PCI_SUBCLASS_BR_MCA 0x03
7959 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
7960 #define PCI_SUBCLASS_BR_PCMCIA 0x05
7961 #define PCI_SUBCLASS_BR_NUBUS 0x06
7962 #define PCI_SUBCLASS_BR_CARDBUS 0x07
7963 #define PCI_SUBCLASS_BR_RACEWAY 0x08
7964 #define PCI_SUBCLASS_BR_OTHER 0x80
7966 #define PCI_SUBCLASS_COM_SERIAL 0x00
7967 #define PCI_SUBCLASS_COM_PARALLEL 0x01
7968 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
7969 #define PCI_SUBCLASS_COM_MODEM 0x03
7970 #define PCI_SUBCLASS_COM_OTHER 0x80
7972 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
7973 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
7974 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
7975 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
7976 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
7977 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
7978 #define PCI_SUBCLASS_SYS_OTHER 0x80
7980 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
7981 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
7982 #define PCI_SUBCLASS_INP_MOUSE 0x02
7983 #define PCI_SUBCLASS_INP_SCANNER 0x03
7984 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
7985 #define PCI_SUBCLASS_INP_OTHER 0x80
7987 #define PCI_SUBCLASS_DOC_GENERIC 0x00
7988 #define PCI_SUBCLASS_DOC_OTHER 0x80
7990 #define PCI_SUBCLASS_PROC_386 0x00
7991 #define PCI_SUBCLASS_PROC_486 0x01
7992 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
7993 #define PCI_SUBCLASS_PROC_ALPHA 0x10
7994 #define PCI_SUBCLASS_PROC_POWERPC 0x20
7995 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
7997 /* PCI device subclasses for class C (serial bus controller)*/
7998 #define PCI_SUBCLASS_SB_IEEE1394 0x00
7999 #define PCI_SUBCLASS_SB_ACCESS 0x01
8000 #define PCI_SUBCLASS_SB_SSA 0x02
8001 #define PCI_SUBCLASS_SB_USB 0x03
8002 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
8003 #define PCI_SUBCLASS_SB_SMBUS 0x05
8005 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
8006 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
8007 #define PCI_SUBCLASS_WIRELESS_RF 0x10
8008 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
8010 #define PCI_SUBCLASS_INTIO_I2O 0x00
8012 #define PCI_SUBCLASS_SAT_TV 0x01
8013 #define PCI_SUBCLASS_SAT_AUDIO 0x02
8014 #define PCI_SUBCLASS_SAT_VOICE 0x03
8015 #define PCI_SUBCLASS_SAT_DATA 0x04
8017 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
8018 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
8019 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
8021 #define PCI_SUBCLASS_DASP_DPIO 0x00
8022 #define PCI_SUBCLASS_DASP_OTHER 0x80
8024 #define PCI_ADDRESS_IO_SPACE 0x00000001
8025 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
8026 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
8027 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
8028 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
8029 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
8031 #define PCI_TYPE_32BIT 0
8032 #define PCI_TYPE_20BIT 2
8033 #define PCI_TYPE_64BIT 4
8035 #define PCI_ROMADDRESS_ENABLED 0x00000001
8037 #endif /* _PCI_X_ */
8039 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
8041 _IRQL_requires_max_(PASSIVE_LEVEL
)
8042 _Must_inspect_result_
8044 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
8045 _Inout_ PVOID Context
);
8046 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
8048 _IRQL_requires_max_(PASSIVE_LEVEL
)
8049 _Must_inspect_result_
8051 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
8052 _Inout_ PVOID Context
);
8053 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
8055 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
8059 PINTERFACE_REFERENCE InterfaceReference
;
8060 PINTERFACE_DEREFERENCE InterfaceDereference
;
8061 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
8062 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
8063 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
8065 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
8068 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
8070 _Out_writes_bytes_(Length
) PVOID Buffer
,
8075 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
8077 _In_reads_bytes_(Length
) PVOID Buffer
,
8081 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
8085 PINTERFACE_REFERENCE InterfaceReference
;
8086 PINTERFACE_DEREFERENCE InterfaceDereference
;
8087 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
8088 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
8089 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
8091 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
8093 _Must_inspect_result_
8095 (NTAPI PCI_MSIX_SET_ENTRY
)(
8097 _In_ ULONG TableEntry
,
8098 _In_ ULONG MessageNumber
);
8099 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
8101 _Must_inspect_result_
8103 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
8105 _In_ ULONG TableEntry
);
8106 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
8108 _Must_inspect_result_
8110 (NTAPI PCI_MSIX_GET_ENTRY
)(
8112 _In_ ULONG TableEntry
,
8113 _Out_ PULONG MessageNumber
,
8114 _Out_ PBOOLEAN Masked
);
8115 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
8117 _Must_inspect_result_
8119 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
8121 _Out_ PULONG TableSize
);
8122 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
8124 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
8128 PINTERFACE_REFERENCE InterfaceReference
;
8129 PINTERFACE_DEREFERENCE InterfaceDereference
;
8130 PPCI_MSIX_SET_ENTRY SetTableEntry
;
8131 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
8132 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
8133 PPCI_MSIX_GET_ENTRY GetTableEntry
;
8134 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
8135 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
8137 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
8138 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
8140 /******************************************************************************
8141 * Object Manager Types *
8142 ******************************************************************************/
8144 #define MAXIMUM_FILENAME_LENGTH 256
8145 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
8147 #define OBJECT_TYPE_CREATE 0x0001
8148 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8150 #define DIRECTORY_QUERY 0x0001
8151 #define DIRECTORY_TRAVERSE 0x0002
8152 #define DIRECTORY_CREATE_OBJECT 0x0004
8153 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
8154 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
8156 #define SYMBOLIC_LINK_QUERY 0x0001
8157 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
8159 #define DUPLICATE_CLOSE_SOURCE 0x00000001
8160 #define DUPLICATE_SAME_ACCESS 0x00000002
8161 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
8163 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
8164 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
8166 typedef ULONG OB_OPERATION
;
8168 #define OB_OPERATION_HANDLE_CREATE 0x00000001
8169 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
8171 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
8172 _Inout_ ACCESS_MASK DesiredAccess
;
8173 _In_ ACCESS_MASK OriginalDesiredAccess
;
8174 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
8176 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
8177 _Inout_ ACCESS_MASK DesiredAccess
;
8178 _In_ ACCESS_MASK OriginalDesiredAccess
;
8179 _In_ PVOID SourceProcess
;
8180 _In_ PVOID TargetProcess
;
8181 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
8183 typedef union _OB_PRE_OPERATION_PARAMETERS
{
8184 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8185 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8186 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
8188 typedef struct _OB_PRE_OPERATION_INFORMATION
{
8189 _In_ OB_OPERATION Operation
;
8190 _ANONYMOUS_UNION
union {
8192 _ANONYMOUS_STRUCT
struct {
8193 _In_ ULONG KernelHandle
:1;
8194 _In_ ULONG Reserved
:31;
8198 _In_ POBJECT_TYPE ObjectType
;
8199 _Out_ PVOID CallContext
;
8200 _In_ POB_PRE_OPERATION_PARAMETERS Parameters
;
8201 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
8203 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
8204 _In_ ACCESS_MASK GrantedAccess
;
8205 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
8207 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
8208 _In_ ACCESS_MASK GrantedAccess
;
8209 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
8211 typedef union _OB_POST_OPERATION_PARAMETERS
{
8212 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
8213 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
8214 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
8216 typedef struct _OB_POST_OPERATION_INFORMATION
{
8217 _In_ OB_OPERATION Operation
;
8218 _ANONYMOUS_UNION
union {
8220 _ANONYMOUS_STRUCT
struct {
8221 _In_ ULONG KernelHandle
:1;
8222 _In_ ULONG Reserved
:31;
8226 _In_ POBJECT_TYPE ObjectType
;
8227 _In_ PVOID CallContext
;
8228 _In_ NTSTATUS ReturnStatus
;
8229 _In_ POB_POST_OPERATION_PARAMETERS Parameters
;
8230 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
8232 typedef enum _OB_PREOP_CALLBACK_STATUS
{
8234 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
8236 typedef OB_PREOP_CALLBACK_STATUS
8237 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
8238 _In_ PVOID RegistrationContext
,
8239 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
);
8242 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
8243 _In_ PVOID RegistrationContext
,
8244 _In_ POB_POST_OPERATION_INFORMATION OperationInformation
);
8246 typedef struct _OB_OPERATION_REGISTRATION
{
8247 _In_ POBJECT_TYPE
*ObjectType
;
8248 _In_ OB_OPERATION Operations
;
8249 _In_ POB_PRE_OPERATION_CALLBACK PreOperation
;
8250 _In_ POB_POST_OPERATION_CALLBACK PostOperation
;
8251 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
8253 typedef struct _OB_CALLBACK_REGISTRATION
{
8254 _In_ USHORT Version
;
8255 _In_ USHORT OperationRegistrationCount
;
8256 _In_ UNICODE_STRING Altitude
;
8257 _In_ PVOID RegistrationContext
;
8258 _In_ OB_OPERATION_REGISTRATION
*OperationRegistration
;
8259 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
8261 typedef struct _OBJECT_NAME_INFORMATION
{
8262 UNICODE_STRING Name
;
8263 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
8265 /* Exported object types */
8267 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
8268 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
8269 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
8270 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
8271 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
8272 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
8273 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
8275 __CREATE_NTOS_DATA_IMPORT_ALIAS(CmKeyObjectType
)
8276 __CREATE_NTOS_DATA_IMPORT_ALIAS(IoFileObjectType
)
8277 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExEventObjectType
)
8278 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExSemaphoreObjectType
)
8279 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionManagerObjectType
)
8280 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmResourceManagerObjectType
)
8281 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmEnlistmentObjectType
)
8282 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionObjectType
)
8283 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsProcessType
)
8284 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsThreadType
)
8285 __CREATE_NTOS_DATA_IMPORT_ALIAS(SeTokenObjectType
)
8286 extern POBJECT_TYPE
*CmKeyObjectType
;
8287 extern POBJECT_TYPE
*IoFileObjectType
;
8288 extern POBJECT_TYPE
*ExEventObjectType
;
8289 extern POBJECT_TYPE
*ExSemaphoreObjectType
;
8290 extern POBJECT_TYPE
*TmTransactionManagerObjectType
;
8291 extern POBJECT_TYPE
*TmResourceManagerObjectType
;
8292 extern POBJECT_TYPE
*TmEnlistmentObjectType
;
8293 extern POBJECT_TYPE
*TmTransactionObjectType
;
8294 extern POBJECT_TYPE
*PsProcessType
;
8295 extern POBJECT_TYPE
*PsThreadType
;
8296 extern POBJECT_TYPE
*SeTokenObjectType
;
8300 /******************************************************************************
8301 * Process Manager Types *
8302 ******************************************************************************/
8304 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
8305 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
8306 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
8307 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
8308 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
8310 /* Thread Access Rights */
8311 #define THREAD_TERMINATE 0x0001
8312 #define THREAD_SUSPEND_RESUME 0x0002
8313 #define THREAD_ALERT 0x0004
8314 #define THREAD_GET_CONTEXT 0x0008
8315 #define THREAD_SET_CONTEXT 0x0010
8316 #define THREAD_SET_INFORMATION 0x0020
8317 #define THREAD_SET_LIMITED_INFORMATION 0x0400
8318 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
8320 #define PROCESS_DUP_HANDLE (0x0040)
8322 #if (NTDDI_VERSION >= NTDDI_VISTA)
8323 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8325 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
8328 #if (NTDDI_VERSION >= NTDDI_VISTA)
8329 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
8331 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
8334 #define LOW_PRIORITY 0
8335 #define LOW_REALTIME_PRIORITY 16
8336 #define HIGH_PRIORITY 31
8337 #define MAXIMUM_PRIORITY 32
8340 /******************************************************************************
8341 * WMI Library Support Types *
8342 ******************************************************************************/
8345 #include <evntrace.h>
8349 #ifndef _TRACEHANDLE_DEFINED
8350 #define _TRACEHANDLE_DEFINED
8351 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
8354 #ifndef TRACE_INFORMATION_CLASS_DEFINE
8356 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
8359 ULONG MinimumBuffers
;
8360 ULONG MaximumBuffers
;
8363 ULONG FlushThreshold
;
8365 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
8367 typedef enum _TRACE_INFORMATION_CLASS
{
8370 TraceEnableFlagsClass
,
8371 TraceEnableLevelClass
,
8372 GlobalLoggerHandleClass
,
8373 EventLoggerHandleClass
,
8374 AllLoggerHandlesClass
,
8375 TraceHandleByNameClass
,
8376 LoggerEventsLostClass
,
8377 TraceSessionSettingsClass
,
8378 LoggerEventsLoggedClass
,
8379 MaxTraceInformationClass
8380 } TRACE_INFORMATION_CLASS
;
8382 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
8388 #include <evntprov.h>
8390 _IRQL_requires_same_
8392 (NTAPI
*PETWENABLECALLBACK
)(
8393 _In_ LPCGUID SourceId
,
8394 _In_ ULONG ControlCode
,
8396 _In_ ULONGLONG MatchAnyKeyword
,
8397 _In_ ULONGLONG MatchAllKeyword
,
8398 _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData
,
8399 _Inout_opt_ PVOID CallbackContext
);
8401 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
8404 /******************************************************************************
8405 * Kernel Functions *
8406 ******************************************************************************/
8407 #if defined(_M_IX86)
8408 /** Kernel definitions for x86 **/
8410 /* Interrupt request levels */
8411 #define PASSIVE_LEVEL 0
8414 #define DISPATCH_LEVEL 2
8415 #define CMCI_LEVEL 5
8416 #define PROFILE_LEVEL 27
8417 #define CLOCK1_LEVEL 28
8418 #define CLOCK2_LEVEL 28
8419 #define IPI_LEVEL 29
8420 #define POWER_LEVEL 30
8421 #define HIGH_LEVEL 31
8422 #define CLOCK_LEVEL CLOCK2_LEVEL
8424 #define KIP0PCRADDRESS 0xffdff000
8425 #define KI_USER_SHARED_DATA 0xffdf0000
8426 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
8428 #define PAGE_SIZE 0x1000
8429 #define PAGE_SHIFT 12L
8430 #define KeGetDcacheFillSize() 1L
8432 #define EFLAG_SIGN 0x8000
8433 #define EFLAG_ZERO 0x4000
8434 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8436 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8437 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
8438 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
8441 typedef struct _KFLOATING_SAVE
{
8445 ULONG ErrorSelector
;
8450 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8452 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
8454 #define YieldProcessor _mm_pause
8458 KeMemoryBarrier(VOID
)
8460 LONG Barrier
, *Dummy
= &Barrier
;
8461 UNREFERENCED_LOCAL_VARIABLE(Dummy
);
8463 #if defined(__GNUC__)
8464 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8465 #elif defined(_MSC_VER)
8466 __asm xchg
[Barrier
], eax
8470 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8472 _IRQL_requires_max_(HIGH_LEVEL
)
8477 KeGetCurrentIrql(VOID
);
8479 _IRQL_requires_max_(HIGH_LEVEL
)
8484 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
);
8485 #define KeLowerIrql(a) KfLowerIrql(a)
8487 _IRQL_requires_max_(HIGH_LEVEL
)
8488 _IRQL_raises_(NewIrql
)
8494 _In_ KIRQL NewIrql
);
8495 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8497 _IRQL_requires_max_(DISPATCH_LEVEL
)
8499 _IRQL_raises_(DISPATCH_LEVEL
)
8503 KeRaiseIrqlToDpcLevel(VOID
);
8508 KeRaiseIrqlToSynchLevel(VOID
);
8510 _Requires_lock_not_held_(*SpinLock
)
8511 _Acquires_lock_(*SpinLock
)
8512 _IRQL_requires_max_(DISPATCH_LEVEL
)
8514 _IRQL_raises_(DISPATCH_LEVEL
)
8519 _Inout_ PKSPIN_LOCK SpinLock
);
8520 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
8522 _Requires_lock_held_(*SpinLock
)
8523 _Releases_lock_(*SpinLock
)
8524 _IRQL_requires_(DISPATCH_LEVEL
)
8529 _Inout_ PKSPIN_LOCK SpinLock
,
8530 _In_ _IRQL_restores_ KIRQL NewIrql
);
8531 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
8533 _Requires_lock_not_held_(*SpinLock
)
8534 _Acquires_lock_(*SpinLock
)
8535 _IRQL_requires_min_(DISPATCH_LEVEL
)
8539 KefAcquireSpinLockAtDpcLevel(
8540 _Inout_ PKSPIN_LOCK SpinLock
);
8541 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
8543 _Requires_lock_held_(*SpinLock
)
8544 _Releases_lock_(*SpinLock
)
8545 _IRQL_requires_min_(DISPATCH_LEVEL
)
8549 KefReleaseSpinLockFromDpcLevel(
8550 _Inout_ PKSPIN_LOCK SpinLock
);
8551 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
8556 KeGetCurrentThread(VOID
);
8558 _Always_(_Post_satisfies_(return<=0))
8559 _Must_inspect_result_
8560 _IRQL_requires_max_(DISPATCH_LEVEL
)
8561 _Kernel_float_saved_
8562 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
8566 KeSaveFloatingPointState(
8567 _Out_ PKFLOATING_SAVE FloatSave
);
8570 _Kernel_float_restored_
8571 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
8575 KeRestoreFloatingPointState(
8576 _In_ PKFLOATING_SAVE FloatSave
);
8581 * IN BOOLEAN ReadOperation,
8582 * IN BOOLEAN DmaOperation)
8584 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8586 /* x86 and x64 performs a 0x2C interrupt */
8587 #define DbgRaiseAssertionFailure __int2c
8592 OUT PLARGE_INTEGER CurrentCount
)
8595 #ifdef NONAMELESSUNION
8596 CurrentCount
->s
.HighPart
= KeTickCount
.High1Time
;
8597 CurrentCount
->s
.LowPart
= KeTickCount
.LowPart
;
8598 if (CurrentCount
->s
.HighPart
== KeTickCount
.High2Time
) break;
8600 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
8601 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
8602 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
8607 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
8613 #elif defined(_M_AMD64)
8614 /** Kernel definitions for AMD64 **/
8616 /* Interrupt request levels */
8617 #define PASSIVE_LEVEL 0
8620 #define DISPATCH_LEVEL 2
8621 #define CMCI_LEVEL 5
8622 #define CLOCK_LEVEL 13
8623 #define IPI_LEVEL 14
8624 #define DRS_LEVEL 14
8625 #define POWER_LEVEL 14
8626 #define PROFILE_LEVEL 15
8627 #define HIGH_LEVEL 15
8629 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
8630 #define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
8631 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
8632 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
8633 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
8635 #define PAGE_SIZE 0x1000
8636 #define PAGE_SHIFT 12L
8638 #define EFLAG_SIGN 0x8000
8639 #define EFLAG_ZERO 0x4000
8640 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
8642 typedef struct _KFLOATING_SAVE
8645 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8647 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
8649 #define KeQueryInterruptTime() \
8650 (*(volatile ULONG64*)SharedInterruptTime)
8652 #define KeQuerySystemTime(CurrentCount) \
8653 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
8655 #define KeQueryTickCount(CurrentCount) \
8656 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
8658 #define KeGetDcacheFillSize() 1L
8660 #define YieldProcessor _mm_pause
8661 #define MemoryBarrier __faststorefence
8662 #define FastFence __faststorefence
8663 #define LoadFence _mm_lfence
8664 #define MemoryFence _mm_mfence
8665 #define StoreFence _mm_sfence
8666 #define LFENCE_ACQUIRE() LoadFence()
8673 // FIXME: Do we really need lfence after the __faststorefence ?
8678 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
8680 _IRQL_requires_max_(HIGH_LEVEL
)
8684 KeGetCurrentIrql(VOID
)
8686 return (KIRQL
)__readcr8();
8689 _IRQL_requires_max_(HIGH_LEVEL
)
8693 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
)
8695 //ASSERT((KIRQL)__readcr8() >= NewIrql);
8696 __writecr8(NewIrql
);
8699 _IRQL_requires_max_(HIGH_LEVEL
)
8700 _IRQL_raises_(NewIrql
)
8709 OldIrql
= (KIRQL
)__readcr8();
8710 //ASSERT(OldIrql <= NewIrql);
8711 __writecr8(NewIrql
);
8714 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8716 _IRQL_requires_max_(DISPATCH_LEVEL
)
8718 _IRQL_raises_(DISPATCH_LEVEL
)
8721 KeRaiseIrqlToDpcLevel(
8724 return KfRaiseIrql(DISPATCH_LEVEL
);
8729 KeRaiseIrqlToSynchLevel(VOID
)
8731 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8736 KeGetCurrentThread(VOID
)
8738 return (struct _KTHREAD
*)__readgsqword(0x188);
8741 _Always_(_Post_satisfies_(return<=0))
8742 _Must_inspect_result_
8743 _IRQL_requires_max_(DISPATCH_LEVEL
)
8744 _Kernel_float_saved_
8745 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
8748 KeSaveFloatingPointState(
8749 _Out_ PKFLOATING_SAVE FloatSave
)
8751 UNREFERENCED_PARAMETER(FloatSave
);
8752 return STATUS_SUCCESS
;
8756 _Kernel_float_restored_
8757 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
8760 KeRestoreFloatingPointState(
8761 _In_ PKFLOATING_SAVE FloatSave
)
8763 UNREFERENCED_PARAMETER(FloatSave
);
8764 return STATUS_SUCCESS
;
8770 * IN BOOLEAN ReadOperation,
8771 * IN BOOLEAN DmaOperation)
8773 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8775 /* x86 and x64 performs a 0x2C interrupt */
8776 #define DbgRaiseAssertionFailure __int2c
8778 #elif defined(_M_IA64)
8779 /** Kernel definitions for IA64 **/
8781 /* Interrupt request levels */
8782 #define PASSIVE_LEVEL 0
8785 #define DISPATCH_LEVEL 2
8787 #define DEVICE_LEVEL_BASE 4
8789 #define IPI_LEVEL 14
8790 #define DRS_LEVEL 14
8791 #define CLOCK_LEVEL 13
8792 #define POWER_LEVEL 15
8793 #define PROFILE_LEVEL 15
8794 #define HIGH_LEVEL 15
8796 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
8797 extern NTKERNELAPI
volatile LARGE_INTEGER KeTickCount
;
8799 #define PAUSE_PROCESSOR __yield();
8803 KeFlushWriteBuffer(VOID
)
8812 KeGetCurrentThread(VOID
);
8815 #elif defined(_M_PPC)
8817 /* Interrupt request levels */
8818 #define PASSIVE_LEVEL 0
8821 #define DISPATCH_LEVEL 2
8822 #define PROFILE_LEVEL 27
8823 #define CLOCK1_LEVEL 28
8824 #define CLOCK2_LEVEL 28
8825 #define IPI_LEVEL 29
8826 #define POWER_LEVEL 30
8827 #define HIGH_LEVEL 31
8830 // Used to contain PFNs and PFN counts
8832 typedef ULONG PFN_COUNT
;
8833 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8834 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8837 typedef struct _KFLOATING_SAVE
{
8839 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8841 typedef struct _KPCR_TIB
{
8842 PVOID ExceptionList
; /* 00 */
8843 PVOID StackBase
; /* 04 */
8844 PVOID StackLimit
; /* 08 */
8845 PVOID SubSystemTib
; /* 0C */
8846 _ANONYMOUS_UNION
union {
8847 PVOID FiberData
; /* 10 */
8848 ULONG Version
; /* 10 */
8850 PVOID ArbitraryUserPointer
; /* 14 */
8851 struct _KPCR_TIB
*Self
; /* 18 */
8852 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
8854 #define PCR_MINOR_VERSION 1
8855 #define PCR_MAJOR_VERSION 1
8857 typedef struct _KPCR
{
8858 KPCR_TIB Tib
; /* 00 */
8859 struct _KPCR
*Self
; /* 1C */
8860 struct _KPRCB
*Prcb
; /* 20 */
8861 KIRQL Irql
; /* 24 */
8863 ULONG IrrActive
; /* 2C */
8865 PVOID KdVersionBlock
; /* 34 */
8866 PUSHORT IDT
; /* 38 */
8867 PUSHORT GDT
; /* 3C */
8868 struct _KTSS
*TSS
; /* 40 */
8869 USHORT MajorVersion
; /* 44 */
8870 USHORT MinorVersion
; /* 46 */
8871 KAFFINITY SetMember
; /* 48 */
8872 ULONG StallScaleFactor
; /* 4C */
8873 UCHAR SpareUnused
; /* 50 */
8874 UCHAR Number
; /* 51 */
8875 } KPCR
, *PKPCR
; /* 54 */
8877 #define KeGetPcr() PCR
8879 #define YieldProcessor() __asm__ __volatile__("nop");
8884 KeGetCurrentProcessorNumber(VOID
)
8887 __asm__
__volatile__ (
8890 : "i" (FIELD_OFFSET(KPCR
, Number
))
8900 #define KeLowerIrql(a) KfLowerIrql(a)
8907 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8912 KeRaiseIrqlToDpcLevel(VOID
);
8917 KeRaiseIrqlToSynchLevel(VOID
);
8921 #elif defined(_M_MIPS)
8922 #error MIPS Headers are totally incorrect
8925 // Used to contain PFNs and PFN counts
8927 typedef ULONG PFN_COUNT
;
8928 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8929 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8931 #define PASSIVE_LEVEL 0
8933 #define DISPATCH_LEVEL 2
8934 #define PROFILE_LEVEL 27
8935 #define IPI_LEVEL 29
8936 #define HIGH_LEVEL 31
8938 typedef struct _KPCR
{
8939 struct _KPRCB
*Prcb
; /* 20 */
8940 KIRQL Irql
; /* 24 */
8945 #define KeGetPcr() PCR
8947 typedef struct _KFLOATING_SAVE
{
8948 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8953 KeGetCurrentProcessorNumber(VOID
)
8958 #define YieldProcessor() __asm__ __volatile__("nop");
8960 #define KeLowerIrql(a) KfLowerIrql(a)
8961 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8978 KeRaiseIrqlToDpcLevel(VOID
);
8983 KeRaiseIrqlToSynchLevel(VOID
);
8986 #elif defined(_M_ARM)
8987 /** Kernel definitions for ARM **/
8989 /* Interrupt request levels */
8990 #define PASSIVE_LEVEL 0
8993 #define DISPATCH_LEVEL 2
8994 #define CLOCK_LEVEL 13
8995 #define IPI_LEVEL 14
8996 #define DRS_LEVEL 14
8997 #define POWER_LEVEL 14
8998 #define PROFILE_LEVEL 15
8999 #define HIGH_LEVEL 15
9001 #define KIP0PCRADDRESS 0xFFDFF000
9002 #define KI_USER_SHARED_DATA 0xFFFF9000
9003 #define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
9005 #define PAGE_SIZE 0x1000
9006 #define PAGE_SHIFT 12L
9008 typedef struct _KFLOATING_SAVE
9011 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
9013 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
9020 __dmb(_ARM_BARRIER_ISHST
);
9024 #define MemoryBarrier() __dmb(_ARM_BARRIER_SY)
9025 #define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
9026 #define PrefetchForWrite(p) __prefetch((const void *) (p))
9027 #define ReadForWriteAccess(p) (*(p))
9034 _ReadWriteBarrier();
9038 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
9040 _IRQL_requires_max_(HIGH_LEVEL
)
9048 _IRQL_requires_max_(HIGH_LEVEL
)
9053 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql
);
9054 #define KeLowerIrql(a) KfLowerIrql(a)
9056 _IRQL_requires_max_(HIGH_LEVEL
)
9057 _IRQL_raises_(NewIrql
)
9063 _In_ KIRQL NewIrql
);
9064 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
9066 _IRQL_requires_max_(DISPATCH_LEVEL
)
9068 _IRQL_raises_(DISPATCH_LEVEL
)
9072 KeRaiseIrqlToDpcLevel(VOID
);
9077 KeRaiseIrqlToSynchLevel(VOID
);
9079 _Requires_lock_not_held_(*SpinLock
)
9080 _Acquires_lock_(*SpinLock
)
9081 _IRQL_requires_max_(DISPATCH_LEVEL
)
9083 _IRQL_raises_(DISPATCH_LEVEL
)
9088 _Inout_ PKSPIN_LOCK SpinLock
);
9089 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
9091 _Requires_lock_held_(*SpinLock
)
9092 _Releases_lock_(*SpinLock
)
9093 _IRQL_requires_(DISPATCH_LEVEL
)
9098 _Inout_ PKSPIN_LOCK SpinLock
,
9099 _In_ _IRQL_restores_ KIRQL NewIrql
);
9100 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
9102 _Requires_lock_not_held_(*SpinLock
)
9103 _Acquires_lock_(*SpinLock
)
9104 _IRQL_requires_min_(DISPATCH_LEVEL
)
9108 KefAcquireSpinLockAtDpcLevel(
9109 _Inout_ PKSPIN_LOCK SpinLock
);
9110 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
9112 _Requires_lock_held_(*SpinLock
)
9113 _Releases_lock_(*SpinLock
)
9114 _IRQL_requires_min_(DISPATCH_LEVEL
)
9118 KefReleaseSpinLockFromDpcLevel(
9119 _Inout_ PKSPIN_LOCK SpinLock
);
9120 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
9125 KeGetCurrentThread(VOID
);
9127 _Always_(_Post_satisfies_(return<=0))
9128 _Must_inspect_result_
9129 _IRQL_requires_max_(DISPATCH_LEVEL
)
9130 _Kernel_float_saved_
9131 _At_(*FloatSave
, _Kernel_requires_resource_not_held_(FloatState
) _Kernel_acquires_resource_(FloatState
))
9134 KeSaveFloatingPointState(
9135 _Out_ PKFLOATING_SAVE FloatSave
)
9137 UNREFERENCED_PARAMETER(FloatSave
);
9138 return STATUS_SUCCESS
;
9142 _Kernel_float_restored_
9143 _At_(*FloatSave
, _Kernel_requires_resource_held_(FloatState
) _Kernel_releases_resource_(FloatState
))
9146 KeRestoreFloatingPointState(
9147 _In_ PKFLOATING_SAVE FloatSave
)
9149 UNREFERENCED_PARAMETER(FloatSave
);
9150 return STATUS_SUCCESS
;
9156 _In_ BOOLEAN ReadOperation
,
9157 _In_ BOOLEAN DmaOperation
);
9159 #define DbgRaiseAssertionFailure() __emit(0xdefc)
9164 OUT PLARGE_INTEGER CurrentCount
)
9167 #ifdef NONAMELESSUNION
9168 CurrentCount
->s
.HighPart
= KeTickCount
.High1Time
;
9169 CurrentCount
->s
.LowPart
= KeTickCount
.LowPart
;
9170 if (CurrentCount
->s
.HighPart
== KeTickCount
.High2Time
) break;
9172 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
9173 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
9174 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
9179 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
9181 #define CP15_PMSELR 15, 0, 9, 12, 5 /* Event Counter Selection Register */
9182 #define CP15_PMXEVCNTR 15, 0, 9, 13, 2 /* Event Count Register */
9183 #define CP15_TPIDRURW 15, 0, 13, 0, 2 /* Software Thread ID Register, UsRW */
9184 #define CP15_TPIDRURO 15, 0, 13, 0, 3 /* Software Thread ID Register, UsRO */
9185 #define CP15_TPIDRPRW 15, 0, 13, 0, 4 /* Software Thread ID Register, Kernel */
9188 #error Unknown Architecture
9195 _Out_ PRKEVENT Event
,
9196 _In_ EVENT_TYPE Type
,
9197 _In_ BOOLEAN State
);
9199 _IRQL_requires_max_(DISPATCH_LEVEL
)
9204 _Inout_ PRKEVENT Event
);
9206 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9208 #if defined(_NTDDK_) || defined(_NTIFS_)
9209 _Maybe_raises_SEH_exception_
9210 _IRQL_requires_max_(APC_LEVEL
)
9215 __in_data_source(USER_MODE
) _In_reads_bytes_(Length
) CONST VOID
*Address
, /* CONST is added */
9217 _In_ ULONG Alignment
);
9218 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
9220 _Maybe_raises_SEH_exception_
9221 _IRQL_requires_max_(APC_LEVEL
)
9226 __in_data_source(USER_MODE
) _Out_writes_bytes_(Length
) PVOID Address
,
9228 _In_ ULONG Alignment
);
9230 #if defined(SINGLE_GROUP_LEGACY_API)
9232 _IRQL_requires_min_(PASSIVE_LEVEL
)
9233 _IRQL_requires_max_(APC_LEVEL
)
9237 KeRevertToUserAffinityThread(VOID
);
9239 _IRQL_requires_min_(PASSIVE_LEVEL
)
9240 _IRQL_requires_max_(APC_LEVEL
)
9244 KeSetSystemAffinityThread(
9245 _In_ KAFFINITY Affinity
);
9250 KeSetTargetProcessorDpc(
9257 KeQueryActiveProcessors(VOID
);
9258 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
9260 #if !defined(_M_AMD64)
9264 KeQueryInterruptTime(VOID
);
9270 _Out_ PLARGE_INTEGER CurrentTime
);
9271 #endif /* !_M_AMD64 */
9273 #if !defined(_X86_) && !defined(_M_ARM)
9274 _Requires_lock_not_held_(*SpinLock
)
9275 _Acquires_lock_(*SpinLock
)
9276 _IRQL_requires_max_(DISPATCH_LEVEL
)
9278 _IRQL_raises_(DISPATCH_LEVEL
)
9282 KeAcquireSpinLockRaiseToDpc(
9283 _Inout_ PKSPIN_LOCK SpinLock
);
9285 #define KeAcquireSpinLock(SpinLock, OldIrql) \
9286 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
9288 _Requires_lock_not_held_(*SpinLock
)
9289 _Acquires_lock_(*SpinLock
)
9290 _IRQL_requires_min_(DISPATCH_LEVEL
)
9294 KeAcquireSpinLockAtDpcLevel(
9295 _Inout_ PKSPIN_LOCK SpinLock
);
9297 _Requires_lock_held_(*SpinLock
)
9298 _Releases_lock_(*SpinLock
)
9299 _IRQL_requires_(DISPATCH_LEVEL
)
9304 _Inout_ PKSPIN_LOCK SpinLock
,
9305 _In_ _IRQL_restores_ KIRQL NewIrql
);
9307 _Requires_lock_held_(*SpinLock
)
9308 _Releases_lock_(*SpinLock
)
9309 _IRQL_requires_min_(DISPATCH_LEVEL
)
9313 KeReleaseSpinLockFromDpcLevel(
9314 _Inout_ PKSPIN_LOCK SpinLock
);
9317 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
9321 KeInitializeSpinLock(
9322 _Out_ PKSPIN_LOCK SpinLock
);
9326 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock
)
9328 /* Clear the lock */
9338 _In_ ULONG BugCheckCode
,
9339 _In_ ULONG_PTR BugCheckParameter1
,
9340 _In_ ULONG_PTR BugCheckParameter2
,
9341 _In_ ULONG_PTR BugCheckParameter3
,
9342 _In_ ULONG_PTR BugCheckParameter4
);
9344 _IRQL_requires_max_(DISPATCH_LEVEL
)
9351 _IRQL_requires_min_(PASSIVE_LEVEL
)
9352 _IRQL_requires_max_(APC_LEVEL
)
9356 KeDelayExecutionThread(
9357 _In_ KPROCESSOR_MODE WaitMode
,
9358 _In_ BOOLEAN Alertable
,
9359 _In_ PLARGE_INTEGER Interval
);
9361 _Must_inspect_result_
9365 KeDeregisterBugCheckCallback(
9366 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
9368 _Acquires_lock_(_Global_critical_region_
)
9369 _IRQL_requires_max_(APC_LEVEL
)
9373 KeEnterCriticalRegion(VOID
);
9375 _IRQL_requires_max_(DISPATCH_LEVEL
)
9379 KeInitializeDeviceQueue(
9380 _Out_ PKDEVICE_QUEUE DeviceQueue
);
9386 _Out_ __drv_aliasesMem PRKDPC Dpc
,
9387 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
9388 _In_opt_ __drv_aliasesMem PVOID DeferredContext
);
9394 _Out_ PRKMUTEX Mutex
,
9397 _IRQL_requires_max_(PASSIVE_LEVEL
)
9401 KeInitializeSemaphore(
9402 _Out_ PRKSEMAPHORE Semaphore
,
9406 _IRQL_requires_max_(DISPATCH_LEVEL
)
9411 _Out_ PKTIMER Timer
);
9413 _IRQL_requires_max_(DISPATCH_LEVEL
)
9417 KeInitializeTimerEx(
9418 _Out_ PKTIMER Timer
,
9419 _In_ TIMER_TYPE Type
);
9421 _IRQL_requires_(DISPATCH_LEVEL
)
9425 KeInsertByKeyDeviceQueue(
9426 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9427 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
9428 _In_ ULONG SortKey
);
9430 _IRQL_requires_(DISPATCH_LEVEL
)
9434 KeInsertDeviceQueue(
9435 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9436 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9443 _In_opt_ PVOID SystemArgument1
,
9444 _In_opt_ PVOID SystemArgument2
);
9446 _Releases_lock_(_Global_critical_region_
)
9447 _IRQL_requires_max_(APC_LEVEL
)
9451 KeLeaveCriticalRegion(VOID
);
9456 KeQueryPerformanceCounter(
9457 _Out_opt_ PLARGE_INTEGER PerformanceFrequency
);
9459 _IRQL_requires_max_(PASSIVE_LEVEL
)
9463 KeQueryPriorityThread(
9464 _In_ PRKTHREAD Thread
);
9469 KeQueryTimeIncrement(VOID
);
9471 _IRQL_requires_max_(DISPATCH_LEVEL
)
9476 _In_ PRKEVENT Event
);
9478 _IRQL_requires_max_(DISPATCH_LEVEL
)
9483 _In_ PRKMUTEX Mutex
);
9485 _IRQL_requires_max_(DISPATCH_LEVEL
)
9489 KeReadStateSemaphore(
9490 _In_ PRKSEMAPHORE Semaphore
);
9492 _IRQL_requires_max_(DISPATCH_LEVEL
)
9497 _In_ PKTIMER Timer
);
9499 _Must_inspect_result_
9503 KeRegisterBugCheckCallback(
9504 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
9505 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
9506 _In_reads_bytes_opt_(Length
) PVOID Buffer
,
9508 _In_ PUCHAR Component
);
9510 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9511 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9516 _Inout_ PRKMUTEX Mutex
,
9519 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9520 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9525 _Inout_ PRKSEMAPHORE Semaphore
,
9526 _In_ KPRIORITY Increment
,
9527 _In_ LONG Adjustment
,
9528 _In_ _Literal_ BOOLEAN Wait
);
9530 _IRQL_requires_(DISPATCH_LEVEL
)
9532 PKDEVICE_QUEUE_ENTRY
9534 KeRemoveByKeyDeviceQueue(
9535 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9536 _In_ ULONG SortKey
);
9538 _IRQL_requires_(DISPATCH_LEVEL
)
9540 PKDEVICE_QUEUE_ENTRY
9542 KeRemoveDeviceQueue(
9543 _Inout_ PKDEVICE_QUEUE DeviceQueue
);
9545 _IRQL_requires_max_(DISPATCH_LEVEL
)
9549 KeRemoveEntryDeviceQueue(
9550 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9551 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9553 _IRQL_requires_max_(HIGH_LEVEL
)
9558 _Inout_ PRKDPC Dpc
);
9560 _IRQL_requires_max_(DISPATCH_LEVEL
)
9565 _Inout_ PRKEVENT Event
);
9567 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9568 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
9573 _Inout_ PRKEVENT Event
,
9574 _In_ KPRIORITY Increment
,
9575 _In_ _Literal_ BOOLEAN Wait
);
9582 _In_ KDPC_IMPORTANCE Importance
);
9584 _IRQL_requires_min_(PASSIVE_LEVEL
)
9585 _IRQL_requires_max_(DISPATCH_LEVEL
)
9589 KeSetPriorityThread(
9590 _Inout_ PKTHREAD Thread
,
9591 _In_ KPRIORITY Priority
);
9593 _IRQL_requires_max_(DISPATCH_LEVEL
)
9598 _Inout_ PKTIMER Timer
,
9599 _In_ LARGE_INTEGER DueTime
,
9600 _In_opt_ PKDPC Dpc
);
9602 _IRQL_requires_max_(DISPATCH_LEVEL
)
9607 _Inout_ PKTIMER Timer
,
9608 _In_ LARGE_INTEGER DueTime
,
9609 _In_ LONG Period OPTIONAL
,
9610 _In_opt_ PKDPC Dpc
);
9615 KeStallExecutionProcessor(
9616 _In_ ULONG MicroSeconds
);
9618 _IRQL_requires_max_(HIGH_LEVEL
)
9622 KeSynchronizeExecution(
9623 _Inout_ PKINTERRUPT Interrupt
,
9624 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
9625 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
);
9627 _IRQL_requires_min_(PASSIVE_LEVEL
)
9628 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
9629 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
9633 KeWaitForMultipleObjects(
9635 _In_reads_(Count
) PVOID Object
[],
9636 _In_
__drv_strictTypeMatch(__drv_typeConst
) WAIT_TYPE WaitType
,
9637 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
9638 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
9639 _In_ BOOLEAN Alertable
,
9640 _In_opt_ PLARGE_INTEGER Timeout
,
9641 _Out_opt_ PKWAIT_BLOCK WaitBlockArray
);
9643 #define KeWaitForMutexObject KeWaitForSingleObject
9645 _IRQL_requires_min_(PASSIVE_LEVEL
)
9646 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
9647 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
9651 KeWaitForSingleObject(
9652 _In_ _Points_to_data_ PVOID Object
,
9653 _In_
__drv_strictTypeMatch(__drv_typeCond
) KWAIT_REASON WaitReason
,
9654 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
) KPROCESSOR_MODE WaitMode
,
9655 _In_ BOOLEAN Alertable
,
9656 _In_opt_ PLARGE_INTEGER Timeout
);
9658 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9660 #if (NTDDI_VERSION >= NTDDI_WINXP)
9662 _Requires_lock_not_held_(*LockHandle
)
9663 _Acquires_lock_(*LockHandle
)
9664 _Post_same_lock_(*SpinLock
, *LockHandle
)
9665 _IRQL_requires_max_(DISPATCH_LEVEL
)
9666 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9667 _IRQL_raises_(DISPATCH_LEVEL
)
9671 KeAcquireInStackQueuedSpinLock(
9672 _Inout_ PKSPIN_LOCK SpinLock
,
9673 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9675 _Requires_lock_not_held_(*LockHandle
)
9676 _Acquires_lock_(*LockHandle
)
9677 _Post_same_lock_(*SpinLock
, *LockHandle
)
9678 _IRQL_requires_min_(DISPATCH_LEVEL
)
9682 KeAcquireInStackQueuedSpinLockAtDpcLevel(
9683 _Inout_ PKSPIN_LOCK SpinLock
,
9684 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9686 _Requires_lock_not_held_(*Interrupt
->ActualLock
)
9687 _Acquires_lock_(*Interrupt
->ActualLock
)
9688 _IRQL_requires_max_(HIGH_LEVEL
)
9690 _IRQL_raises_(HIGH_LEVEL
)
9694 KeAcquireInterruptSpinLock(
9695 _Inout_ PKINTERRUPT Interrupt
);
9697 _IRQL_requires_min_(PASSIVE_LEVEL
)
9698 _IRQL_requires_max_(DISPATCH_LEVEL
)
9702 KeAreApcsDisabled(VOID
);
9707 KeGetRecommendedSharedDataAlignment(VOID
);
9709 _IRQL_requires_max_(PASSIVE_LEVEL
)
9713 KeQueryRuntimeThread(
9714 _In_ PKTHREAD Thread
,
9715 _Out_ PULONG UserTime
);
9717 _Requires_lock_held_(*LockHandle
)
9718 _Releases_lock_(*LockHandle
)
9719 _IRQL_requires_(DISPATCH_LEVEL
)
9723 KeReleaseInStackQueuedSpinLockFromDpcLevel(
9724 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9726 _Requires_lock_held_(*Interrupt
->ActualLock
)
9727 _Releases_lock_(*Interrupt
->ActualLock
)
9728 _IRQL_requires_(HIGH_LEVEL
)
9732 KeReleaseInterruptSpinLock(
9733 _Inout_ PKINTERRUPT Interrupt
,
9734 _In_ _IRQL_restores_ KIRQL OldIrql
);
9736 _IRQL_requires_(DISPATCH_LEVEL
)
9738 PKDEVICE_QUEUE_ENTRY
9740 KeRemoveByKeyDeviceQueueIfBusy(
9741 _Inout_ PKDEVICE_QUEUE DeviceQueue
,
9742 _In_ ULONG SortKey
);
9744 _Requires_lock_held_(*LockHandle
)
9745 _Releases_lock_(*LockHandle
)
9746 _IRQL_requires_(DISPATCH_LEVEL
)
9747 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9751 KeReleaseInStackQueuedSpinLock(
9752 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9754 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9756 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
9758 _Must_inspect_result_
9762 KeDeregisterBugCheckReasonCallback(
9763 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
9765 _Must_inspect_result_
9769 KeRegisterBugCheckReasonCallback(
9770 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
9771 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
9772 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
9773 _In_ PUCHAR Component
);
9775 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
9777 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
9778 _IRQL_requires_max_(APC_LEVEL
)
9782 KeFlushQueuedDpcs(VOID
);
9783 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
9784 #if (NTDDI_VERSION >= NTDDI_WS03)
9786 _IRQL_requires_max_(APC_LEVEL
)
9790 KeRegisterNmiCallback(
9791 _In_ PNMI_CALLBACK CallbackRoutine
,
9792 _In_opt_ PVOID Context
);
9794 _IRQL_requires_max_(APC_LEVEL
)
9798 KeDeregisterNmiCallback(
9804 KeInitializeThreadedDpc(
9806 _In_ PKDEFERRED_ROUTINE DeferredRoutine
,
9807 _In_opt_ PVOID DeferredContext
);
9809 _IRQL_requires_min_(PASSIVE_LEVEL
)
9810 _IRQL_requires_max_(IPI_LEVEL
-1)
9815 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction
,
9816 _In_ ULONG_PTR Context
);
9818 _Requires_lock_not_held_(*SpinLock
)
9819 _Acquires_lock_(*SpinLock
)
9820 _IRQL_requires_max_(DISPATCH_LEVEL
)
9825 KeAcquireSpinLockForDpc(
9826 _Inout_ PKSPIN_LOCK SpinLock
);
9828 _Requires_lock_held_(*SpinLock
)
9829 _Releases_lock_(*SpinLock
)
9830 _IRQL_requires_(DISPATCH_LEVEL
)
9834 KeReleaseSpinLockForDpc(
9835 _Inout_ PKSPIN_LOCK SpinLock
,
9836 _In_ _IRQL_restores_ KIRQL OldIrql
);
9838 _Must_inspect_result_
9843 _In_ PKSPIN_LOCK SpinLock
);
9845 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
9846 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
9848 _Must_inspect_result_
9849 _IRQL_requires_min_(DISPATCH_LEVEL
)
9850 _Post_satisfies_(return == 1 || return == 0)
9854 KeTryToAcquireSpinLockAtDpcLevel(
9855 _Inout_
_Requires_lock_not_held_(*_Curr_
)
9856 _When_(return!=0, _Acquires_lock_(*_Curr_
))
9857 PKSPIN_LOCK SpinLock
);
9859 _IRQL_requires_min_(PASSIVE_LEVEL
)
9860 _IRQL_requires_max_(DISPATCH_LEVEL
)
9864 KeAreAllApcsDisabled(VOID
);
9866 _Acquires_lock_(_Global_critical_region_
)
9867 _Requires_lock_not_held_(*Mutex
)
9868 _Acquires_lock_(*Mutex
)
9869 _IRQL_requires_max_(APC_LEVEL
)
9870 _IRQL_requires_min_(PASSIVE_LEVEL
)
9874 KeAcquireGuardedMutex(
9875 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9877 _Requires_lock_not_held_(*FastMutex
)
9878 _Acquires_lock_(*FastMutex
)
9879 _IRQL_requires_max_(APC_LEVEL
)
9880 _IRQL_requires_min_(PASSIVE_LEVEL
)
9884 KeAcquireGuardedMutexUnsafe(
9885 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9887 _Acquires_lock_(_Global_critical_region_
)
9888 _IRQL_requires_max_(APC_LEVEL
)
9892 KeEnterGuardedRegion(VOID
);
9894 _Releases_lock_(_Global_critical_region_
)
9895 _IRQL_requires_max_(APC_LEVEL
)
9899 KeLeaveGuardedRegion(VOID
);
9901 _IRQL_requires_max_(APC_LEVEL
)
9902 _IRQL_requires_min_(PASSIVE_LEVEL
)
9906 KeInitializeGuardedMutex(
9907 _Out_ PKGUARDED_MUTEX GuardedMutex
);
9909 _Requires_lock_held_(*FastMutex
)
9910 _Releases_lock_(*FastMutex
)
9911 _IRQL_requires_max_(APC_LEVEL
)
9915 KeReleaseGuardedMutexUnsafe(
9916 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9918 _Releases_lock_(_Global_critical_region_
)
9919 _Requires_lock_held_(*Mutex
)
9920 _Releases_lock_(*Mutex
)
9921 _IRQL_requires_max_(APC_LEVEL
)
9925 KeReleaseGuardedMutex(
9926 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9928 _Must_inspect_result_
9929 _Success_(return != FALSE
)
9930 _IRQL_requires_max_(APC_LEVEL
)
9931 _Post_satisfies_(return == 1 || return == 0)
9935 KeTryToAcquireGuardedMutex(
9936 _When_ (return, _Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)) _Acquires_lock_(_Global_critical_region_
)
9937 _Inout_ PKGUARDED_MUTEX GuardedMutex
);
9938 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
9940 #if (NTDDI_VERSION >= NTDDI_VISTA)
9941 _Requires_lock_not_held_(*LockHandle
)
9942 _Acquires_lock_(*LockHandle
)
9943 _Post_same_lock_(*SpinLock
, *LockHandle
)
9944 _IRQL_requires_max_(DISPATCH_LEVEL
)
9945 _IRQL_saves_global_(QueuedSpinLock
,LockHandle
)
9949 KeAcquireInStackQueuedSpinLockForDpc(
9950 _Inout_ PKSPIN_LOCK SpinLock
,
9951 _Out_ PKLOCK_QUEUE_HANDLE LockHandle
);
9953 _Requires_lock_held_(*LockHandle
)
9954 _Releases_lock_(*LockHandle
)
9955 _IRQL_requires_(DISPATCH_LEVEL
)
9956 _IRQL_restores_global_(QueuedSpinLock
,LockHandle
)
9960 KeReleaseInStackQueuedSpinLockForDpc(
9961 _In_ PKLOCK_QUEUE_HANDLE LockHandle
);
9963 _IRQL_requires_(DISPATCH_LEVEL
)
9967 KeQueryDpcWatchdogInformation(
9968 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
9969 #if defined(SINGLE_GROUP_LEGACY_API)
9971 _IRQL_requires_min_(PASSIVE_LEVEL
)
9972 _IRQL_requires_max_(APC_LEVEL
)
9976 KeSetSystemAffinityThreadEx(
9977 _In_ KAFFINITY Affinity
);
9979 _IRQL_requires_min_(PASSIVE_LEVEL
)
9980 _IRQL_requires_max_(APC_LEVEL
)
9984 KeRevertToUserAffinityThreadEx(
9985 _In_ KAFFINITY Affinity
);
9990 KeQueryActiveProcessorCount(
9991 _Out_opt_ PKAFFINITY ActiveProcessors
);
9996 KeQueryMaximumProcessorCount(VOID
);
9997 #endif /* SINGLE_GROUP_LEGACY_API */
9999 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10001 #if (NTDDI_VERSION >= NTDDI_WS08)
10003 _IRQL_requires_max_(APC_LEVEL
)
10006 KeRegisterProcessorChangeCallback(
10007 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
10008 _In_opt_ PVOID CallbackContext
,
10011 _IRQL_requires_max_(APC_LEVEL
)
10014 KeDeregisterProcessorChangeCallback(
10015 _In_ PVOID CallbackHandle
);
10017 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
10018 #if (NTDDI_VERSION >= NTDDI_WIN7)
10020 _IRQL_requires_max_(DISPATCH_LEVEL
)
10021 _IRQL_requires_min_(PASSIVE_LEVEL
)
10022 _IRQL_requires_same_
10025 KeQueryTotalCycleTimeProcess(
10026 _Inout_ PKPROCESS Process
,
10027 _Out_ PULONG64 CycleTimeStamp
);
10029 _IRQL_requires_max_(APC_LEVEL
)
10030 _IRQL_requires_min_(PASSIVE_LEVEL
)
10031 _IRQL_requires_same_
10034 KeQueryTotalCycleTimeThread(
10035 _Inout_ PKTHREAD Thread
,
10036 _Out_ PULONG64 CycleTimeStamp
);
10038 _Must_inspect_result_
10042 KeSetTargetProcessorDpcEx(
10044 _In_ PPROCESSOR_NUMBER ProcNumber
);
10046 _IRQL_requires_min_(PASSIVE_LEVEL
)
10047 _IRQL_requires_max_(APC_LEVEL
)
10051 KeSetSystemGroupAffinityThread(
10052 _In_ PGROUP_AFFINITY Affinity
,
10053 _Out_opt_ PGROUP_AFFINITY PreviousAffinity
);
10055 _IRQL_requires_min_(PASSIVE_LEVEL
)
10056 _IRQL_requires_max_(APC_LEVEL
)
10060 KeRevertToUserGroupAffinityThread(
10061 _In_ PGROUP_AFFINITY PreviousAffinity
);
10063 _IRQL_requires_max_(DISPATCH_LEVEL
)
10067 KeSetCoalescableTimer(
10068 _Inout_ PKTIMER Timer
,
10069 _In_ LARGE_INTEGER DueTime
,
10071 _In_ ULONG TolerableDelay
,
10072 _In_opt_ PKDPC Dpc
);
10077 KeQueryUnbiasedInterruptTime(VOID
);
10082 KeQueryActiveProcessorCountEx(
10083 _In_ USHORT GroupNumber
);
10088 KeQueryMaximumProcessorCountEx(
10089 _In_ USHORT GroupNumber
);
10094 KeQueryActiveGroupCount(VOID
);
10099 KeQueryMaximumGroupCount(VOID
);
10104 KeQueryGroupAffinity(
10105 _In_ USHORT GroupNumber
);
10110 KeGetCurrentProcessorNumberEx(
10111 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
10116 KeQueryNodeActiveAffinity(
10117 _In_ USHORT NodeNumber
,
10118 _Out_opt_ PGROUP_AFFINITY Affinity
,
10119 _Out_opt_ PUSHORT Count
);
10124 KeQueryNodeMaximumProcessorCount(
10125 _In_ USHORT NodeNumber
);
10130 KeQueryHighestNodeNumber(VOID
);
10135 KeGetCurrentNodeNumber(VOID
);
10137 _IRQL_requires_max_(DISPATCH_LEVEL
)
10141 KeQueryLogicalProcessorRelationship(
10142 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
10143 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
10144 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
10145 _Inout_ PULONG Length
);
10147 _Must_inspect_result_
10148 _IRQL_requires_max_(DISPATCH_LEVEL
)
10150 _When_(return==0, _Kernel_float_saved_
)
10154 KeSaveExtendedProcessorState(
10156 _Out_
_Requires_lock_not_held_(*_Curr_
)
10157 _When_(return==0, _Acquires_lock_(*_Curr_
))
10158 PXSTATE_SAVE XStateSave
);
10160 _Kernel_float_restored_
10164 KeRestoreExtendedProcessorState(
10165 _In_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
10166 PXSTATE_SAVE XStateSave
);
10170 KeGetProcessorNumberFromIndex(
10171 _In_ ULONG ProcIndex
,
10172 _Out_ PPROCESSOR_NUMBER ProcNumber
);
10176 KeGetProcessorIndexFromNumber(
10177 _In_ PPROCESSOR_NUMBER ProcNumber
);
10178 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
10179 #if !defined(_IA64_)
10183 KeFlushWriteBuffer(VOID
);
10187 * KeInitializeCallbackRecord(
10188 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
10190 #define KeInitializeCallbackRecord(CallbackRecord) \
10191 CallbackRecord->State = BufferEmpty;
10193 #if defined(_PREFAST_)
10195 void __PREfastPagedCode(void);
10196 void __PREfastPagedCodeLocked(void);
10197 #define PAGED_CODE() __PREfastPagedCode();
10198 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked();
10202 #if (NTDDI_VERSION >= NTDDI_VISTA)
10203 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
10205 #define PAGED_ASSERT( exp ) ASSERT( exp )
10208 #define PAGED_CODE() { \
10209 if (KeGetCurrentIrql() > APC_LEVEL) { \
10210 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
10211 PAGED_ASSERT(FALSE); \
10215 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
10219 #define PAGED_CODE() NOP_FUNCTION;
10220 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
10224 /******************************************************************************
10225 * Runtime Library Functions *
10226 ******************************************************************************/
10228 #define FAST_FAIL_LEGACY_GS_VIOLATION 0
10229 #define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
10230 #define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
10231 #define FAST_FAIL_CORRUPT_LIST_ENTRY 3
10232 #define FAST_FAIL_INCORRECT_STACK 4
10233 #define FAST_FAIL_INVALID_ARG 5
10234 #define FAST_FAIL_GS_COOKIE_INIT 6
10235 #define FAST_FAIL_FATAL_APP_EXIT 7
10236 #define FAST_FAIL_RANGE_CHECK_FAILURE 8
10237 #define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
10238 #define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
10239 #define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
10240 #define FAST_FAIL_INVALID_FIBER_SWITCH 12
10241 #define FAST_FAIL_INVALID_SET_OF_CONTEXT 13
10242 #define FAST_FAIL_INVALID_REFERENCE_COUNT 14
10243 #define FAST_FAIL_INVALID_JUMP_BUFFER 18
10244 #define FAST_FAIL_MRDATA_MODIFIED 19
10245 #define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
10256 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && (defined(_M_CEE_PURE) || defined(_M_CEE_SAFE))
10257 #define NO_KERNEL_LIST_ENTRY_CHECKS
10260 #if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__)
10261 #define EXTRA_KERNEL_LIST_ENTRY_CHECKS
10264 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
10266 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
10270 InitializeListHead(
10271 _Out_ PLIST_ENTRY ListHead
)
10273 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
10276 _Must_inspect_result_
10280 _In_
const LIST_ENTRY
* ListHead
)
10282 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
10287 RemoveEntryListUnsafe(
10288 _In_ PLIST_ENTRY Entry
)
10290 PLIST_ENTRY OldFlink
;
10291 PLIST_ENTRY OldBlink
;
10293 OldFlink
= Entry
->Flink
;
10294 OldBlink
= Entry
->Blink
;
10295 OldFlink
->Blink
= OldBlink
;
10296 OldBlink
->Flink
= OldFlink
;
10297 return (BOOLEAN
)(OldFlink
== OldBlink
);
10300 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10303 FatalListEntryError(
10308 UNREFERENCED_PARAMETER(P1
);
10309 UNREFERENCED_PARAMETER(P2
);
10310 UNREFERENCED_PARAMETER(P3
);
10312 RtlFailFast(FAST_FAIL_CORRUPT_LIST_ENTRY
);
10317 RtlpCheckListEntry(
10318 _In_ PLIST_ENTRY Entry
)
10320 if (Entry
->Flink
->Blink
!= Entry
|| Entry
->Blink
->Flink
!= Entry
)
10321 FatalListEntryError(Entry
->Blink
, Entry
, Entry
->Flink
);
10328 _In_ PLIST_ENTRY Entry
)
10330 PLIST_ENTRY OldFlink
;
10331 PLIST_ENTRY OldBlink
;
10333 OldFlink
= Entry
->Flink
;
10334 OldBlink
= Entry
->Blink
;
10335 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10336 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10337 if (OldFlink
== Entry
|| OldBlink
== Entry
)
10338 FatalListEntryError(OldBlink
, Entry
, OldFlink
);
10340 if (OldFlink
->Blink
!= Entry
|| OldBlink
->Flink
!= Entry
)
10341 FatalListEntryError(OldBlink
, Entry
, OldFlink
);
10343 OldFlink
->Blink
= OldBlink
;
10344 OldBlink
->Flink
= OldFlink
;
10345 return (BOOLEAN
)(OldFlink
== OldBlink
);
10351 _Inout_ PLIST_ENTRY ListHead
)
10356 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10357 RtlpCheckListEntry(ListHead
);
10358 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10359 if (ListHead
->Flink
== ListHead
|| ListHead
->Blink
== ListHead
)
10360 FatalListEntryError(ListHead
->Blink
, ListHead
, ListHead
->Flink
);
10363 Entry
= ListHead
->Flink
;
10364 Flink
= Entry
->Flink
;
10365 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10366 if (Entry
->Blink
!= ListHead
|| Flink
->Blink
!= Entry
)
10367 FatalListEntryError(ListHead
, Entry
, Flink
);
10369 ListHead
->Flink
= Flink
;
10370 Flink
->Blink
= ListHead
;
10377 _Inout_ PLIST_ENTRY ListHead
)
10382 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10383 RtlpCheckListEntry(ListHead
);
10384 #ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
10385 if (ListHead
->Flink
== ListHead
|| ListHead
->Blink
== ListHead
)
10386 FatalListEntryError(ListHead
->Blink
, ListHead
, ListHead
->Flink
);
10389 Entry
= ListHead
->Blink
;
10390 Blink
= Entry
->Blink
;
10391 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10392 if (Blink
->Flink
!= Entry
|| Entry
->Flink
!= ListHead
)
10393 FatalListEntryError(Blink
, Entry
, ListHead
);
10395 ListHead
->Blink
= Blink
;
10396 Blink
->Flink
= ListHead
;
10403 _Inout_ PLIST_ENTRY ListHead
,
10404 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
10406 PLIST_ENTRY OldBlink
;
10407 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10408 RtlpCheckListEntry(ListHead
);
10410 OldBlink
= ListHead
->Blink
;
10411 Entry
->Flink
= ListHead
;
10412 Entry
->Blink
= OldBlink
;
10413 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10414 if (OldBlink
->Flink
!= ListHead
)
10415 FatalListEntryError(OldBlink
->Blink
, OldBlink
, ListHead
);
10417 OldBlink
->Flink
= Entry
;
10418 ListHead
->Blink
= Entry
;
10424 _Inout_ PLIST_ENTRY ListHead
,
10425 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry
)
10427 PLIST_ENTRY OldFlink
;
10428 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
10429 RtlpCheckListEntry(ListHead
);
10431 OldFlink
= ListHead
->Flink
;
10432 Entry
->Flink
= OldFlink
;
10433 Entry
->Blink
= ListHead
;
10434 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10435 if (OldFlink
->Blink
!= ListHead
)
10436 FatalListEntryError(ListHead
, OldFlink
, OldFlink
->Flink
);
10438 OldFlink
->Blink
= Entry
;
10439 ListHead
->Flink
= Entry
;
10445 _Inout_ PLIST_ENTRY ListHead
,
10446 _Inout_ PLIST_ENTRY ListToAppend
)
10448 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
10450 #if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
10451 RtlpCheckListEntry(ListHead
);
10452 RtlpCheckListEntry(ListToAppend
);
10454 ListHead
->Blink
->Flink
= ListToAppend
;
10455 ListHead
->Blink
= ListToAppend
->Blink
;
10456 ListToAppend
->Blink
->Flink
= ListHead
;
10457 ListToAppend
->Blink
= ListEnd
;
10463 _Inout_ PSINGLE_LIST_ENTRY ListHead
)
10465 PSINGLE_LIST_ENTRY FirstEntry
;
10466 FirstEntry
= ListHead
->Next
;
10467 if (FirstEntry
!= NULL
) {
10468 ListHead
->Next
= FirstEntry
->Next
;
10476 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
10477 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry
)
10479 Entry
->Next
= ListHead
->Next
;
10480 ListHead
->Next
= Entry
;
10483 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
10485 __analysis_noreturn
10490 _In_ PVOID FailedAssertion
,
10491 _In_ PVOID FileName
,
10492 _In_ ULONG LineNumber
,
10493 _In_opt_z_ PSTR Message
);
10497 * IN VOID UNALIGNED *Destination,
10498 * IN CONST VOID UNALIGNED *Source,
10499 * IN SIZE_T Length)
10501 #define RtlCopyMemory(Destination, Source, Length) \
10502 memcpy(Destination, Source, Length)
10504 #define RtlCopyBytes RtlCopyMemory
10506 #if defined(_M_AMD64)
10510 RtlCopyMemoryNonTemporal(
10511 _Out_writes_bytes_all_(Length
) VOID UNALIGNED
*Destination
,
10512 _In_reads_bytes_(Length
) const VOID UNALIGNED
*Source
,
10513 _In_ SIZE_T Length
);
10515 #define RtlCopyMemoryNonTemporal RtlCopyMemory
10523 #define RtlEqualLuid(Luid1, Luid2) \
10524 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
10528 * IN VOID UNALIGNED *Destination,
10529 * IN CONST VOID UNALIGNED *Source,
10530 * IN SIZE_T Length)
10532 #define RtlEqualMemory(Destination, Source, Length) \
10533 (!memcmp(Destination, Source, Length))
10537 * IN VOID UNALIGNED *Destination,
10538 * IN SIZE_T Length,
10541 #define RtlFillMemory(Destination, Length, Fill) \
10542 memset(Destination, Fill, Length)
10544 #define RtlFillBytes RtlFillMemory
10546 _IRQL_requires_max_(PASSIVE_LEVEL
)
10550 RtlFreeUnicodeString(
10551 _Inout_
_At_(UnicodeString
->Buffer
, __drv_freesMem(Mem
))
10552 PUNICODE_STRING UnicodeString
);
10554 _IRQL_requires_max_(PASSIVE_LEVEL
)
10555 _Must_inspect_result_
10560 _In_ PUNICODE_STRING GuidString
,
10563 _IRQL_requires_max_(DISPATCH_LEVEL
)
10564 _At_(DestinationString
->Buffer
, _Post_equal_to_(SourceString
))
10565 _When_(SourceString
!= NULL
,
10566 _At_(DestinationString
->Length
, _Post_equal_to_(_String_length_(SourceString
) * sizeof(WCHAR
)))
10567 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(DestinationString
->Length
+ sizeof(WCHAR
))))
10568 _When_(SourceString
== NULL
,
10569 _At_(DestinationString
->Length
, _Post_equal_to_(0))
10570 _At_(DestinationString
->MaximumLength
, _Post_equal_to_(0)))
10574 RtlInitUnicodeString(
10575 _Out_ PUNICODE_STRING DestinationString
,
10576 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
);
10580 * IN VOID UNALIGNED *Destination,
10581 * IN CONST VOID UNALIGNED *Source,
10582 * IN SIZE_T Length)
10584 #define RtlMoveMemory(Destination, Source, Length) \
10585 memmove(Destination, Source, Length)
10587 _IRQL_requires_max_(PASSIVE_LEVEL
)
10588 _Must_inspect_result_
10594 _Out_
_At_(GuidString
->Buffer
, __drv_allocatesMem(Mem
))
10595 PUNICODE_STRING GuidString
);
10599 * IN VOID UNALIGNED *Destination,
10600 * IN SIZE_T Length)
10602 #define RtlZeroMemory(Destination, Length) \
10603 memset(Destination, 0, Length)
10605 #define RtlZeroBytes RtlZeroMemory
10607 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10609 _Must_inspect_result_
10614 _In_ PRTL_BITMAP BitMapHeader
,
10615 _In_ ULONG StartingIndex
,
10616 _In_ ULONG Length
);
10618 _Must_inspect_result_
10623 _In_ PRTL_BITMAP BitMapHeader
,
10624 _In_ ULONG StartingIndex
,
10625 _In_ ULONG Length
);
10627 _IRQL_requires_max_(PASSIVE_LEVEL
)
10628 _Must_inspect_result_
10632 RtlAnsiStringToUnicodeString(
10633 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
10634 _When_(!AllocateDestinationString
, _Inout_
)
10635 PUNICODE_STRING DestinationString
,
10636 _In_ PANSI_STRING SourceString
,
10637 _In_ BOOLEAN AllocateDestinationString
);
10639 _IRQL_requires_max_(PASSIVE_LEVEL
)
10643 RtlxAnsiStringToUnicodeSize(
10644 _In_ PCANSI_STRING AnsiString
);
10646 #define RtlAnsiStringToUnicodeSize(String) ( \
10647 NLS_MB_CODE_PAGE_TAG ? \
10648 RtlxAnsiStringToUnicodeSize(String) : \
10649 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
10653 _Unchanged_(Destination
->MaximumLength
)
10654 _Unchanged_(Destination
->Buffer
)
10655 _When_(_Old_(Destination
->Length
) + Source
->Length
<= Destination
->MaximumLength
,
10656 _At_(Destination
->Length
, _Post_equal_to_(_Old_(Destination
->Length
) + Source
->Length
))
10657 _At_(return, _Out_range_(==, 0)))
10658 _When_(_Old_(Destination
->Length
) + Source
->Length
> Destination
->MaximumLength
,
10659 _Unchanged_(Destination
->Length
)
10660 _At_(return, _Out_range_(<, 0)))
10664 RtlAppendUnicodeStringToString(
10665 _Inout_ PUNICODE_STRING Destination
,
10666 _In_ PCUNICODE_STRING Source
);
10669 _Unchanged_(Destination
->MaximumLength
)
10670 _Unchanged_(Destination
->Buffer
)
10671 /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
10672 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
10673 _At_(return, _Out_range_(==, 0)))
10674 _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
10675 _Unchanged_(Destination->Length)
10676 _At_(return, _Out_range_(<, 0))) */
10680 RtlAppendUnicodeToString(
10681 _Inout_ PUNICODE_STRING Destination
,
10682 _In_opt_z_ PCWSTR Source
);
10684 _IRQL_requires_max_(PASSIVE_LEVEL
)
10685 _Must_inspect_result_
10689 RtlCheckRegistryKey(
10690 _In_ ULONG RelativeTo
,
10697 _In_ PRTL_BITMAP BitMapHeader
);
10703 _In_ PRTL_BITMAP BitMapHeader
,
10704 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToClear
) ULONG StartingIndex
,
10705 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToClear
);
10707 _Must_inspect_result_
10712 _In_
const VOID
*Source1
,
10713 _In_
const VOID
*Source2
,
10714 _In_ SIZE_T Length
);
10716 _IRQL_requires_max_(PASSIVE_LEVEL
)
10717 _Must_inspect_result_
10721 RtlCompareUnicodeString(
10722 _In_ PCUNICODE_STRING String1
,
10723 _In_ PCUNICODE_STRING String2
,
10724 _In_ BOOLEAN CaseInSensitive
);
10726 _IRQL_requires_max_(PASSIVE_LEVEL
)
10727 _Must_inspect_result_
10731 RtlCompareUnicodeStrings(
10732 _In_reads_(String1Length
) PCWCH String1
,
10733 _In_ SIZE_T String1Length
,
10734 _In_reads_(String2Length
) PCWCH String2
,
10735 _In_ SIZE_T String2Length
,
10736 _In_ BOOLEAN CaseInSensitive
);
10738 _Unchanged_(DestinationString
->Buffer
)
10739 _Unchanged_(DestinationString
->MaximumLength
)
10740 _At_(DestinationString
->Length
,
10741 _When_(SourceString
->Length
> DestinationString
->MaximumLength
,
10742 _Post_equal_to_(DestinationString
->MaximumLength
))
10743 _When_(SourceString
->Length
<= DestinationString
->MaximumLength
,
10744 _Post_equal_to_(SourceString
->Length
)))
10748 RtlCopyUnicodeString(
10749 _Inout_ PUNICODE_STRING DestinationString
,
10750 _In_opt_ PCUNICODE_STRING SourceString
);
10752 _IRQL_requires_max_(PASSIVE_LEVEL
)
10756 RtlCreateRegistryKey(
10757 _In_ ULONG RelativeTo
,
10760 _IRQL_requires_max_(APC_LEVEL
)
10764 RtlCreateSecurityDescriptor(
10765 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
10766 _In_ ULONG Revision
);
10768 _IRQL_requires_max_(PASSIVE_LEVEL
)
10772 RtlDeleteRegistryValue(
10773 _In_ ULONG RelativeTo
,
10775 _In_z_ PCWSTR ValueName
);
10777 _IRQL_requires_max_(PASSIVE_LEVEL
)
10778 _Must_inspect_result_
10782 RtlEqualUnicodeString(
10783 _In_ CONST UNICODE_STRING
*String1
,
10784 _In_ CONST UNICODE_STRING
*String2
,
10785 _In_ BOOLEAN CaseInSensitive
);
10787 #if !defined(_AMD64_) && !defined(_IA64_)
10791 RtlExtendedIntegerMultiply(
10792 _In_ LARGE_INTEGER Multiplicand
,
10793 _In_ LONG Multiplier
);
10798 RtlExtendedLargeIntegerDivide(
10799 _In_ LARGE_INTEGER Dividend
,
10800 _In_ ULONG Divisor
,
10801 _Out_opt_ PULONG Remainder
);
10804 #if defined(_X86_) || defined(_IA64_)
10808 RtlExtendedMagicDivide(
10809 _In_ LARGE_INTEGER Dividend
,
10810 _In_ LARGE_INTEGER MagicDivisor
,
10811 _In_ CCHAR ShiftCount
);
10814 _IRQL_requires_max_(PASSIVE_LEVEL
)
10819 _Inout_
_At_(AnsiString
->Buffer
, __drv_freesMem(Mem
))
10820 PANSI_STRING AnsiString
);
10822 _Success_(return != -1)
10823 _Must_inspect_result_
10828 _In_ PRTL_BITMAP BitMapHeader
,
10829 _In_ ULONG NumberToFind
,
10830 _In_ ULONG HintIndex
);
10832 _Success_(return != -1)
10836 RtlFindClearBitsAndSet(
10837 _In_ PRTL_BITMAP BitMapHeader
,
10838 _In_ ULONG NumberToFind
,
10839 _In_ ULONG HintIndex
);
10844 RtlFindFirstRunClear(
10845 _In_ PRTL_BITMAP BitMapHeader
,
10846 _Out_ PULONG StartingIndex
);
10852 _In_ PRTL_BITMAP BitMapHeader
,
10853 _Out_writes_to_(SizeOfRunArray
, return) PRTL_BITMAP_RUN RunArray
,
10854 _In_range_(>, 0) ULONG SizeOfRunArray
,
10855 _In_ BOOLEAN LocateLongestRuns
);
10860 RtlFindLastBackwardRunClear(
10861 _In_ PRTL_BITMAP BitMapHeader
,
10862 _In_ ULONG FromIndex
,
10863 _Out_ PULONG StartingRunIndex
);
10865 _Success_(return != -1)
10866 _Must_inspect_result_
10870 RtlFindLeastSignificantBit(
10871 _In_ ULONGLONG Set
);
10876 RtlFindLongestRunClear(
10877 _In_ PRTL_BITMAP BitMapHeader
,
10878 _Out_ PULONG StartingIndex
);
10880 _Success_(return != -1)
10881 _Must_inspect_result_
10885 RtlFindMostSignificantBit(
10886 _In_ ULONGLONG Set
);
10891 RtlFindNextForwardRunClear(
10892 _In_ PRTL_BITMAP BitMapHeader
,
10893 _In_ ULONG FromIndex
,
10894 _Out_ PULONG StartingRunIndex
);
10896 _Success_(return != -1)
10897 _Must_inspect_result_
10902 _In_ PRTL_BITMAP BitMapHeader
,
10903 _In_ ULONG NumberToFind
,
10904 _In_ ULONG HintIndex
);
10906 _Success_(return != -1)
10910 RtlFindSetBitsAndClear(
10911 _In_ PRTL_BITMAP BitMapHeader
,
10912 _In_ ULONG NumberToFind
,
10913 _In_ ULONG HintIndex
);
10915 _IRQL_requires_max_(DISPATCH_LEVEL
)
10920 _Out_ PANSI_STRING DestinationString
,
10921 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10923 _At_(BitMapHeader
->SizeOfBitMap
, _Post_equal_to_(SizeOfBitMap
))
10924 _At_(BitMapHeader
->Buffer
, _Post_equal_to_(BitMapBuffer
))
10928 RtlInitializeBitMap(
10929 _Out_ PRTL_BITMAP BitMapHeader
,
10930 _In_opt_ __drv_aliasesMem PULONG BitMapBuffer
,
10931 _In_opt_ ULONG SizeOfBitMap
);
10933 _IRQL_requires_max_(DISPATCH_LEVEL
)
10938 _Out_ PSTRING DestinationString
,
10939 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
10941 _IRQL_requires_max_(PASSIVE_LEVEL
)
10942 _At_(String
->MaximumLength
, _Const_
)
10946 RtlIntegerToUnicodeString(
10948 _In_opt_ ULONG Base
,
10949 _Inout_ PUNICODE_STRING String
);
10951 _IRQL_requires_max_(PASSIVE_LEVEL
)
10952 _At_(String
->MaximumLength
, _Const_
)
10956 RtlInt64ToUnicodeString(
10957 _In_ ULONGLONG Value
,
10958 _In_opt_ ULONG Base
,
10959 _Inout_ PUNICODE_STRING String
);
10962 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10963 RtlInt64ToUnicodeString(Value, Base, String)
10965 #define RtlIntPtrToUnicodeString(Value, Base, String) \
10966 RtlIntegerToUnicodeString(Value, Base, String)
10973 #define RtlIsZeroLuid(_L1) \
10974 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
10976 _IRQL_requires_max_(APC_LEVEL
)
10980 RtlLengthSecurityDescriptor(
10981 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
10986 RtlNumberOfClearBits(
10987 _In_ PRTL_BITMAP BitMapHeader
);
10992 RtlNumberOfSetBits(
10993 _In_ PRTL_BITMAP BitMapHeader
);
10995 _IRQL_requires_max_(PASSIVE_LEVEL
)
10999 RtlQueryRegistryValues(
11000 _In_ ULONG RelativeTo
,
11002 _Inout_
_At_(*(*QueryTable
).EntryContext
, _Pre_unknown_
)
11003 PRTL_QUERY_REGISTRY_TABLE QueryTable
,
11004 _In_opt_ PVOID Context
,
11005 _In_opt_ PVOID Environment
);
11007 #define SHORT_SIZE (sizeof(USHORT))
11008 #define SHORT_MASK (SHORT_SIZE - 1)
11009 #define LONG_SIZE (sizeof(LONG))
11010 #define LONGLONG_SIZE (sizeof(LONGLONG))
11011 #define LONG_MASK (LONG_SIZE - 1)
11012 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
11013 #define LOWBYTE_MASK 0x00FF
11015 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
11016 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
11017 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
11018 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
11024 _In_ PRTL_BITMAP BitMapHeader
);
11030 _In_ PRTL_BITMAP BitMapHeader
,
11031 _In_range_(0, BitMapHeader
->SizeOfBitMap
- NumberToSet
) ULONG StartingIndex
,
11032 _In_range_(0, BitMapHeader
->SizeOfBitMap
- StartingIndex
) ULONG NumberToSet
);
11034 _IRQL_requires_max_(APC_LEVEL
)
11038 RtlSetDaclSecurityDescriptor(
11039 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11040 _In_ BOOLEAN DaclPresent
,
11041 _In_opt_ PACL Dacl
,
11042 _In_opt_ BOOLEAN DaclDefaulted
);
11044 #if defined(_AMD64_)
11048 * IN PULONG Address,
11051 #define RtlStoreUlong(Address,Value) \
11052 *(ULONG UNALIGNED *)(Address) = (Value)
11055 * RtlStoreUlonglong(
11056 * IN OUT PULONGLONG Address,
11057 * ULONGLONG Value);
11059 #define RtlStoreUlonglong(Address,Value) \
11060 *(ULONGLONG UNALIGNED *)(Address) = (Value)
11064 * IN PUSHORT Address,
11065 * IN USHORT Value);
11067 #define RtlStoreUshort(Address,Value) \
11068 *(USHORT UNALIGNED *)(Address) = (Value)
11071 * RtlRetrieveUshort(
11072 * PUSHORT DestinationAddress,
11073 * PUSHORT SourceAddress);
11075 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
11076 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
11079 * RtlRetrieveUlong(
11080 * PULONG DestinationAddress,
11081 * PULONG SourceAddress);
11083 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
11084 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
11088 #define RtlStoreUlong(Address,Value) \
11089 if ((ULONG_PTR)(Address) & LONG_MASK) { \
11090 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
11091 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
11092 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
11093 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
11096 *((PULONG)(Address)) = (ULONG) (Value); \
11099 #define RtlStoreUlonglong(Address,Value) \
11100 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
11101 RtlStoreUlong((ULONG_PTR)(Address), \
11102 (ULONGLONG)(Value) & 0xFFFFFFFF); \
11103 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
11104 (ULONGLONG)(Value) >> 32); \
11106 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
11109 #define RtlStoreUshort(Address,Value) \
11110 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
11111 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
11112 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
11115 *((PUSHORT) (Address)) = (USHORT)Value; \
11118 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
11119 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
11121 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
11122 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
11126 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
11129 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
11130 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
11132 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
11133 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
11134 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
11135 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
11139 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
11142 #endif /* defined(_AMD64_) */
11146 * RtlStoreUlongPtr(
11147 * IN OUT PULONG_PTR Address,
11148 * IN ULONG_PTR Value);
11150 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
11152 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
11153 #endif /* _WIN64 */
11155 _Success_(return!=FALSE
)
11156 _Must_inspect_result_
11160 RtlTimeFieldsToTime(
11161 _In_ PTIME_FIELDS TimeFields
,
11162 _Out_ PLARGE_INTEGER Time
);
11167 RtlTimeToTimeFields(
11168 _In_ PLARGE_INTEGER Time
,
11169 _Out_ PTIME_FIELDS TimeFields
);
11175 _In_ ULONG Source
);
11180 RtlUlonglongByteSwap(
11181 _In_ ULONGLONG Source
);
11183 _When_(AllocateDestinationString
,
11184 _At_(DestinationString
->MaximumLength
,
11185 _Out_range_(<=, (SourceString
->MaximumLength
/ sizeof(WCHAR
)))))
11186 _When_(!AllocateDestinationString
,
11187 _At_(DestinationString
->Buffer
, _Const_
)
11188 _At_(DestinationString
->MaximumLength
, _Const_
))
11189 _IRQL_requires_max_(PASSIVE_LEVEL
)
11190 _When_(AllocateDestinationString
, _Must_inspect_result_
)
11194 RtlUnicodeStringToAnsiString(
11195 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
11196 _When_(!AllocateDestinationString
, _Inout_
)
11197 PANSI_STRING DestinationString
,
11198 _In_ PCUNICODE_STRING SourceString
,
11199 _In_ BOOLEAN AllocateDestinationString
);
11201 _IRQL_requires_max_(PASSIVE_LEVEL
)
11205 RtlxUnicodeStringToAnsiSize(
11206 _In_ PCUNICODE_STRING UnicodeString
);
11208 #define RtlUnicodeStringToAnsiSize(String) ( \
11209 NLS_MB_CODE_PAGE_TAG ? \
11210 RtlxUnicodeStringToAnsiSize(String) : \
11211 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
11214 _IRQL_requires_max_(PASSIVE_LEVEL
)
11218 RtlUnicodeStringToInteger(
11219 _In_ PCUNICODE_STRING String
,
11220 _In_opt_ ULONG Base
,
11221 _Out_ PULONG Value
);
11223 _IRQL_requires_max_(PASSIVE_LEVEL
)
11227 RtlUpcaseUnicodeChar(
11228 _In_ WCHAR SourceCharacter
);
11234 _In_ USHORT Source
);
11236 _IRQL_requires_max_(APC_LEVEL
)
11237 _Must_inspect_result_
11241 RtlValidRelativeSecurityDescriptor(
11242 _In_reads_bytes_(SecurityDescriptorLength
) PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
11243 _In_ ULONG SecurityDescriptorLength
,
11244 _In_ SECURITY_INFORMATION RequiredInformation
);
11246 _IRQL_requires_max_(APC_LEVEL
)
11247 _Must_inspect_result_
11251 RtlValidSecurityDescriptor(
11252 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
11254 _IRQL_requires_max_(PASSIVE_LEVEL
)
11260 _At_(lpVersionInformation
->dwOSVersionInfoSize
, _Pre_ _Valid_
)
11261 _When_(lpVersionInformation
->dwOSVersionInfoSize
== sizeof(RTL_OSVERSIONINFOEXW
),
11262 _At_((PRTL_OSVERSIONINFOEXW
)lpVersionInformation
, _Out_
))
11263 PRTL_OSVERSIONINFOW lpVersionInformation
);
11265 _IRQL_requires_max_(PASSIVE_LEVEL
)
11266 _Must_inspect_result_
11270 RtlVerifyVersionInfo(
11271 _In_ PRTL_OSVERSIONINFOEXW VersionInfo
,
11272 _In_ ULONG TypeMask
,
11273 _In_ ULONGLONG ConditionMask
);
11275 _IRQL_requires_max_(PASSIVE_LEVEL
)
11279 RtlWriteRegistryValue(
11280 _In_ ULONG RelativeTo
,
11282 _In_z_ PCWSTR ValueName
,
11283 _In_ ULONG ValueType
,
11284 _In_reads_bytes_opt_(ValueLength
) PVOID ValueData
,
11285 _In_ ULONG ValueLength
);
11288 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11291 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
11295 RtlPrefetchMemoryNonTemporal(
11297 _In_ SIZE_T Length
);
11301 #if (NTDDI_VERSION >= NTDDI_WINXP)
11308 _In_ PRTL_BITMAP BitMapHeader
,
11309 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11311 _IRQL_requires_max_(PASSIVE_LEVEL
)
11315 RtlDowncaseUnicodeChar(
11316 _In_ WCHAR SourceCharacter
);
11322 _In_ PRTL_BITMAP BitMapHeader
,
11323 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11325 _Must_inspect_result_
11330 _In_ PRTL_BITMAP BitMapHeader
,
11331 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitNumber
);
11333 _IRQL_requires_max_(PASSIVE_LEVEL
)
11337 RtlHashUnicodeString(
11338 _In_ CONST UNICODE_STRING
*String
,
11339 _In_ BOOLEAN CaseInSensitive
,
11340 _In_ ULONG HashAlgorithm
,
11341 _Out_ PULONG HashValue
);
11345 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
11348 #if (NTDDI_VERSION >= NTDDI_VISTA)
11353 RtlNumberOfSetBitsUlongPtr(
11354 _In_ ULONG_PTR Target
);
11359 RtlIoDecodeMemIoResource(
11360 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
11361 _Out_opt_ PULONGLONG Alignment
,
11362 _Out_opt_ PULONGLONG MinimumAddress
,
11363 _Out_opt_ PULONGLONG MaximumAddress
);
11368 RtlIoEncodeMemIoResource(
11369 _In_
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
11371 _In_ ULONGLONG Length
,
11372 _In_ ULONGLONG Alignment
,
11373 _In_ ULONGLONG MinimumAddress
,
11374 _In_ ULONGLONG MaximumAddress
);
11379 RtlCmDecodeMemIoResource(
11380 _In_
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
11381 _Out_opt_ PULONGLONG Start
);
11386 RtlFindClosestEncodableLength(
11387 _In_ ULONGLONG SourceLength
,
11388 _Out_ PULONGLONG TargetLength
);
11393 RtlCmEncodeMemIoResource(
11394 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
11396 _In_ ULONGLONG Length
,
11397 _In_ ULONGLONG Start
);
11400 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11402 #if (NTDDI_VERSION >= NTDDI_WIN7)
11404 _IRQL_requires_max_(PASSIVE_LEVEL
)
11405 _Must_inspect_result_
11410 _Out_writes_bytes_to_(UTF8StringMaxByteCount
, *UTF8StringActualByteCount
)
11411 PCHAR UTF8StringDestination
,
11412 _In_ ULONG UTF8StringMaxByteCount
,
11413 _Out_ PULONG UTF8StringActualByteCount
,
11414 _In_reads_bytes_(UnicodeStringByteCount
) PCWCH UnicodeStringSource
,
11415 _In_ ULONG UnicodeStringByteCount
);
11417 _IRQL_requires_max_(PASSIVE_LEVEL
)
11418 _Must_inspect_result_
11423 _Out_writes_bytes_to_(UnicodeStringMaxByteCount
, *UnicodeStringActualByteCount
)
11424 PWSTR UnicodeStringDestination
,
11425 _In_ ULONG UnicodeStringMaxByteCount
,
11426 _Out_ PULONG UnicodeStringActualByteCount
,
11427 _In_reads_bytes_(UTF8StringByteCount
) PCCH UTF8StringSource
,
11428 _In_ ULONG UTF8StringByteCount
);
11433 RtlGetEnabledExtendedFeatures(
11434 IN ULONG64 FeatureMask
);
11437 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
11440 #if !defined(MIDL_PASS)
11441 /* inline funftions */
11442 //DECLSPEC_DEPRECATED_DDK_WINXP
11446 RtlConvertLongToLargeInteger(
11447 _In_ LONG SignedInteger
)
11450 ret
.QuadPart
= SignedInteger
;
11454 //DECLSPEC_DEPRECATED_DDK_WINXP
11458 RtlConvertUlongToLargeInteger(
11459 _In_ ULONG UnsignedInteger
)
11462 ret
.QuadPart
= UnsignedInteger
;
11466 //DECLSPEC_DEPRECATED_DDK_WINXP
11470 RtlLargeIntegerShiftLeft(
11471 _In_ LARGE_INTEGER LargeInteger
,
11472 _In_ CCHAR ShiftCount
)
11474 LARGE_INTEGER Result
;
11476 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
11480 //DECLSPEC_DEPRECATED_DDK_WINXP
11484 RtlLargeIntegerShiftRight(
11485 _In_ LARGE_INTEGER LargeInteger
,
11486 _In_ CCHAR ShiftCount
)
11488 LARGE_INTEGER Result
;
11490 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
11494 //DECLSPEC_DEPRECATED_DDK
11498 RtlEnlargedUnsignedDivide(
11499 _In_ ULARGE_INTEGER Dividend
,
11500 _In_ ULONG Divisor
,
11501 _Out_opt_ PULONG Remainder
)
11504 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
11505 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
11508 //DECLSPEC_DEPRECATED_DDK
11512 RtlLargeIntegerNegate(
11513 _In_ LARGE_INTEGER Subtrahend
)
11515 LARGE_INTEGER Difference
;
11517 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
11521 //DECLSPEC_DEPRECATED_DDK
11525 RtlLargeIntegerSubtract(
11526 _In_ LARGE_INTEGER Minuend
,
11527 _In_ LARGE_INTEGER Subtrahend
)
11529 LARGE_INTEGER Difference
;
11531 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
11535 //DECLSPEC_DEPRECATED_DDK
11539 RtlEnlargedUnsignedMultiply(
11540 _In_ ULONG Multiplicand
,
11541 _In_ ULONG Multiplier
)
11544 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
11548 //DECLSPEC_DEPRECATED_DDK
11552 RtlEnlargedIntegerMultiply(
11553 _In_ LONG Multiplicand
,
11554 _In_ LONG Multiplier
)
11557 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
11561 _At_(AnsiString
->Buffer
, _Post_equal_to_(Buffer
))
11562 _At_(AnsiString
->Length
, _Post_equal_to_(0))
11563 _At_(AnsiString
->MaximumLength
, _Post_equal_to_(BufferSize
))
11566 RtlInitEmptyAnsiString(
11567 _Out_ PANSI_STRING AnsiString
,
11568 _Pre_maybenull_
_Pre_readable_size_(BufferSize
) __drv_aliasesMem PCHAR Buffer
,
11569 _In_ USHORT BufferSize
)
11571 AnsiString
->Length
= 0;
11572 AnsiString
->MaximumLength
= BufferSize
;
11573 AnsiString
->Buffer
= Buffer
;
11576 _At_(UnicodeString
->Buffer
, _Post_equal_to_(Buffer
))
11577 _At_(UnicodeString
->Length
, _Post_equal_to_(0))
11578 _At_(UnicodeString
->MaximumLength
, _Post_equal_to_(BufferSize
))
11581 RtlInitEmptyUnicodeString(
11582 _Out_ PUNICODE_STRING UnicodeString
,
11583 _Writable_bytes_(BufferSize
)
11584 _When_(BufferSize
!= 0, _Notnull_
)
11585 __drv_aliasesMem PWSTR Buffer
,
11586 _In_ USHORT BufferSize
)
11588 UnicodeString
->Length
= 0;
11589 UnicodeString
->MaximumLength
= BufferSize
;
11590 UnicodeString
->Buffer
= Buffer
;
11593 #if defined(_AMD64_) || defined(_IA64_)
11599 RtlExtendedIntegerMultiply(
11600 _In_ LARGE_INTEGER Multiplicand
,
11601 _In_ LONG Multiplier
)
11604 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
11611 RtlExtendedLargeIntegerDivide(
11612 _In_ LARGE_INTEGER Dividend
,
11613 _In_ ULONG Divisor
,
11614 _Out_opt_ PULONG Remainder
)
11617 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
11619 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
11625 #endif /* defined(_AMD64_) || defined(_IA64_) */
11628 #if defined(_AMD64_)
11630 #define MultiplyHigh __mulh
11631 #define UnsignedMultiplyHigh __umulh
11633 //DECLSPEC_DEPRECATED_DDK
11637 RtlExtendedMagicDivide(
11638 _In_ LARGE_INTEGER Dividend
,
11639 _In_ LARGE_INTEGER MagicDivisor
,
11640 _In_ CCHAR ShiftCount
)
11645 Pos
= (Dividend
.QuadPart
>= 0);
11646 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
11647 MagicDivisor
.QuadPart
);
11648 ret64
>>= ShiftCount
;
11649 ret
.QuadPart
= Pos
? ret64
: -(LONG64
)ret64
;
11654 //DECLSPEC_DEPRECATED_DDK
11658 RtlLargeIntegerAdd(
11659 _In_ LARGE_INTEGER Addend1
,
11660 _In_ LARGE_INTEGER Addend2
)
11663 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
11668 * RtlLargeIntegerAnd(
11669 * IN OUT LARGE_INTEGER Result,
11670 * IN LARGE_INTEGER Source,
11671 * IN LARGE_INTEGER Mask);
11673 #define RtlLargeIntegerAnd(Result, Source, Mask) \
11674 Result.QuadPart = Source.QuadPart & Mask.QuadPart
11676 //DECLSPEC_DEPRECATED_DDK
11680 RtlLargeIntegerArithmeticShift(
11681 _In_ LARGE_INTEGER LargeInteger
,
11682 _In_ CCHAR ShiftCount
)
11685 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
11690 * RtlLargeIntegerEqualTo(
11691 * IN LARGE_INTEGER Operand1,
11692 * IN LARGE_INTEGER Operand2);
11694 #define RtlLargeIntegerEqualTo(X,Y) \
11695 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
11699 RtlSecureZeroMemory(
11700 _Out_writes_bytes_all_(Size
) PVOID Pointer
,
11703 volatile char* vptr
= (volatile char*)Pointer
;
11704 #if defined(_M_AMD64)
11705 __stosb((PUCHAR
)vptr
, 0, Size
);
11707 char * endptr
= (char *)vptr
+ Size
;
11708 while (vptr
< endptr
) {
11715 #if defined(_M_AMD64)
11716 _Must_inspect_result_
11720 _In_ PRTL_BITMAP BitMapHeader
,
11721 _In_range_(<, BitMapHeader
->SizeOfBitMap
) ULONG BitPosition
)
11723 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
11726 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
11727 #endif /* defined(_M_AMD64) */
11729 #define RtlLargeIntegerGreaterThan(X,Y) ( \
11730 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
11731 ((X).HighPart > (Y).HighPart) \
11734 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
11735 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
11736 ((X).HighPart > (Y).HighPart) \
11739 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
11740 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
11743 #define RtlLargeIntegerLessThan(X,Y) ( \
11744 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
11745 ((X).HighPart < (Y).HighPart) \
11748 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
11749 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
11750 ((X).HighPart < (Y).HighPart) \
11753 #define RtlLargeIntegerGreaterThanZero(X) ( \
11754 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
11755 ((X).HighPart > 0 ) \
11758 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
11760 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
11762 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
11764 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
11766 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
11768 #endif /* !defined(MIDL_PASS) */
11770 /* Byte Swap Functions */
11771 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
11772 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
11773 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
11777 #define RTL_VERIFY(exp) \
11779 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
11781 #define RTL_VERIFYMSG(msg, exp) \
11783 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
11785 #define RTL_SOFT_VERIFY(exp) \
11787 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
11789 #define RTL_SOFT_VERIFYMSG(msg, exp) \
11791 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
11793 /* The ASSERTs must be cast to void to avoid warnings about unused results.
11794 * We also cannot invoke the VERIFY versions because the indirection messes
11795 * with stringify. */
11796 #define ASSERT(exp) \
11797 ((VOID)((!(exp)) ? \
11798 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE))
11800 #define ASSERTMSG(msg, exp) \
11801 ((VOID)((!(exp)) ? \
11802 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE))
11804 #define RTL_SOFT_ASSERT(exp) \
11805 ((VOID)((!(exp)) ? \
11806 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE))
11808 #define RTL_SOFT_ASSERTMSG(msg, exp) \
11809 ((VOID)((!(exp)) ? \
11810 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE))
11812 #if defined(_MSC_VER)
11813 # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
11814 # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
11816 # define __assert_annotationA(msg) \
11817 DbgPrint("Assertion failed at %s(%d): %s\n", __FILE__, __LINE__, msg)
11818 # define __assert_annotationW(msg) \
11819 DbgPrint("Assertion failed at %s(%d): %S\n", __FILE__, __LINE__, msg)
11823 #define __analysis_unreachable() __assume(0)
11825 #define __analysis_unreachable() ((void)0)
11828 #define NT_VERIFY(exp) \
11830 (__assert_annotationA(#exp), \
11831 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11833 #define NT_VERIFYMSG(msg, exp) \
11835 (__assert_annotationA(msg), \
11836 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11838 #define NT_VERIFYMSGW(msg, exp) \
11840 (__assert_annotationW(msg), \
11841 DbgRaiseAssertionFailure(), FALSE) : TRUE)
11843 /* Can't reuse verify, see above */
11844 #define NT_ASSERT(exp) \
11845 ((VOID)((!(exp)) ? \
11846 (__assert_annotationA(#exp), \
11847 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11849 #define NT_ASSERTMSG(msg, exp) \
11850 ((VOID)((!(exp)) ? \
11851 (__assert_annotationA(msg), \
11852 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11854 #define NT_ASSERTMSGW(msg, exp) \
11855 ((VOID)((!(exp)) ? \
11856 (__assert_annotationW(msg), \
11857 DbgRaiseAssertionFailure(), __analysis_unreachable(), FALSE) : TRUE))
11861 #define ASSERT(exp) ((VOID) 0)
11862 #define ASSERTMSG(msg, exp) ((VOID) 0)
11864 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
11865 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
11867 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
11868 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11870 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
11871 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
11873 #define NT_ASSERT(exp) ((VOID)0)
11874 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
11875 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
11877 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
11878 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
11879 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
11883 #define InitializeListHead32(ListHead) (\
11884 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
11886 #if !defined(_WINBASE_)
11888 #if defined(_WIN64) && !defined(_NTSYSTEM_) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || !defined(_NTOSP_))
11892 InitializeSListHead(
11893 _Out_ PSLIST_HEADER SListHead
);
11895 #else /* defined(_WIN64) && ... */
11898 _IRQL_requires_max_(APC_LEVEL
)
11904 _In_ NTSTATUS Status
);
11908 InitializeSListHead(
11909 _Out_ PSLIST_HEADER SListHead
)
11911 #if defined(_WIN64)
11912 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
11913 ExRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
11915 #if defined(_IA64_)
11916 SListHead
->Region
= (ULONG_PTR
)SListHead
& VRN_MASK
;
11918 SListHead
->Region
= 0;
11919 #endif /* _IA64_ */
11920 #endif /* _WIN64 */
11921 SListHead
->Alignment
= 0;
11924 #endif /* defined(_WIN64) && ... */
11931 InterlockedPushEntrySList(
11932 _Inout_ PSLIST_HEADER SListHead
,
11933 _Inout_ __drv_aliasesMem PSLIST_ENTRY SListEntry
);
11938 InterlockedPopEntrySList(
11939 _Inout_ PSLIST_HEADER SListHead
);
11941 #define InterlockedFlushSList(SListHead) \
11942 ExInterlockedFlushSList(SListHead)
11946 #define InterlockedPushEntrySList(SListHead, SListEntry) \
11947 ExpInterlockedPushEntrySList(SListHead, SListEntry)
11949 #define InterlockedPopEntrySList(SListHead) \
11950 ExpInterlockedPopEntrySList(SListHead)
11952 #define InterlockedFlushSList(SListHead) \
11953 ExpInterlockedFlushSList(SListHead)
11957 #define QueryDepthSList(SListHead) \
11958 ExQueryDepthSList(SListHead)
11960 #endif /* !defined(_WINBASE_) */
11962 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
11963 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
11964 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
11965 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
11966 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
11967 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
11968 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
11969 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
11970 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
11971 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
11972 (PCONTEXT_EX)(Context + 1), \
11976 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
11977 _In_ ULONG Version
);
11980 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
11981 _In_ ULONG Version
);
11983 #ifndef RtlIsNtDdiVersionAvailable
11984 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
11987 #ifndef RtlIsServicePackVersionInstalled
11988 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
11991 #define RtlInterlockedSetBits(Flags, Flag) \
11992 InterlockedOr((PLONG)(Flags), Flag)
11994 #define RtlInterlockedAndBits(Flags, Flag) \
11995 InterlockedAnd((PLONG)(Flags), Flag)
11997 #define RtlInterlockedClearBits(Flags, Flag) \
11998 RtlInterlockedAndBits(Flags, ~(Flag))
12000 #define RtlInterlockedXorBits(Flags, Flag) \
12001 InterlockedXor(Flags, Flag)
12003 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
12004 (VOID) RtlInterlockedSetBits(Flags, Flag)
12006 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
12007 (VOID) RtlInterlockedAndBits(Flags, Flag)
12009 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
12010 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
12013 /******************************************************************************
12014 * Memory manager Functions *
12015 ******************************************************************************/
12016 /* Alignment Macros */
12017 #define ALIGN_DOWN_BY(size, align) \
12018 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
12020 #define ALIGN_UP_BY(size, align) \
12021 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
12023 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
12024 ((PVOID)ALIGN_DOWN_BY(ptr, align))
12026 #define ALIGN_UP_POINTER_BY(ptr, align) \
12027 ((PVOID)ALIGN_UP_BY(ptr, align))
12029 #define ALIGN_DOWN(size, type) \
12030 ALIGN_DOWN_BY(size, sizeof(type))
12032 #define ALIGN_UP(size, type) \
12033 ALIGN_UP_BY(size, sizeof(type))
12035 #define ALIGN_DOWN_POINTER(ptr, type) \
12036 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
12038 #define ALIGN_UP_POINTER(ptr, type) \
12039 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
12041 #ifndef FIELD_OFFSET
12042 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
12046 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
12049 #define POOL_TAGGING 1
12052 #define IF_DEBUG if (TRUE)
12054 #define IF_DEBUG if (FALSE)
12061 #define BYTE_OFFSET(Va) \
12062 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
12068 * Note: This needs to be like this to avoid overflows!
12070 #define BYTES_TO_PAGES(Size) \
12071 (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
12077 #define PAGE_ALIGN(Va) \
12078 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
12082 * _In_ ULONG_PTR Size)
12084 #define ROUND_TO_PAGES(Size) \
12085 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
12088 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
12092 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
12093 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
12094 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
12096 #define COMPUTE_PAGES_SPANNED(Va, Size) \
12097 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
12101 * MmGetMdlByteCount(
12104 #define MmGetMdlByteCount(_Mdl) \
12105 ((_Mdl)->ByteCount)
12109 * MmGetMdlByteOffset(
12112 #define MmGetMdlByteOffset(_Mdl) \
12113 ((_Mdl)->ByteOffset)
12115 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
12119 * MmGetMdlPfnArray(
12122 #define MmGetMdlPfnArray(_Mdl) \
12123 ((PPFN_NUMBER) ((_Mdl) + 1))
12127 * MmGetMdlVirtualAddress(
12130 #define MmGetMdlVirtualAddress(_Mdl) \
12131 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
12133 #define MmGetProcedureAddress(Address) (Address)
12134 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
12136 /* PVOID MmGetSystemAddressForMdl(
12139 #define MmGetSystemAddressForMdl(Mdl) \
12140 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
12141 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
12142 ((Mdl)->MappedSystemVa) : \
12143 (MmMapLockedPages((Mdl), KernelMode)))
12146 * MmGetSystemAddressForMdlSafe(
12148 * _In_ MM_PAGE_PRIORITY Priority)
12150 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
12151 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
12152 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
12153 (_Mdl)->MappedSystemVa : \
12154 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
12155 KernelMode, MmCached, NULL, FALSE, (_Priority)))
12160 * _In_ PMDL MemoryDescriptorList,
12161 * _In_ PVOID BaseVa,
12162 * _In_ SIZE_T Length)
12164 #define MmInitializeMdl(_MemoryDescriptorList, \
12168 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
12169 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
12170 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
12171 (_MemoryDescriptorList)->MdlFlags = 0; \
12172 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
12173 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
12174 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
12179 * MmPrepareMdlForReuse(
12182 #define MmPrepareMdlForReuse(_Mdl) \
12184 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
12185 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
12186 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
12187 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
12188 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
12192 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12193 _Must_inspect_result_
12194 _IRQL_requires_max_(DISPATCH_LEVEL
)
12195 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
12199 MmAllocateContiguousMemory(
12200 _In_ SIZE_T NumberOfBytes
,
12201 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
);
12203 _Must_inspect_result_
12204 _IRQL_requires_max_(DISPATCH_LEVEL
)
12205 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
12209 MmAllocateContiguousMemorySpecifyCache(
12210 _In_ SIZE_T NumberOfBytes
,
12211 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
12212 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
12213 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
12214 _In_ MEMORY_CACHING_TYPE CacheType
);
12216 _Must_inspect_result_
12217 _IRQL_requires_max_(DISPATCH_LEVEL
)
12221 MmAllocatePagesForMdl(
12222 _In_ PHYSICAL_ADDRESS LowAddress
,
12223 _In_ PHYSICAL_ADDRESS HighAddress
,
12224 _In_ PHYSICAL_ADDRESS SkipBytes
,
12225 _In_ SIZE_T TotalBytes
);
12227 _IRQL_requires_max_(DISPATCH_LEVEL
)
12231 MmBuildMdlForNonPagedPool(
12232 _Inout_ PMDL MemoryDescriptorList
);
12234 //DECLSPEC_DEPRECATED_DDK
12239 _Out_writes_bytes_opt_ (sizeof (MDL
) + (sizeof (PFN_NUMBER
) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base
, Length
)))
12240 PMDL MemoryDescriptorList
,
12241 _In_reads_bytes_opt_ (Length
) PVOID Base
,
12242 _In_ SIZE_T Length
);
12244 _IRQL_requires_max_(DISPATCH_LEVEL
)
12248 MmFreeContiguousMemory(
12249 _In_ PVOID BaseAddress
);
12251 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12255 MmFreeContiguousMemorySpecifyCache(
12256 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
12257 _In_ SIZE_T NumberOfBytes
,
12258 _In_ MEMORY_CACHING_TYPE CacheType
);
12260 _IRQL_requires_max_(DISPATCH_LEVEL
)
12264 MmFreePagesFromMdl(
12265 _Inout_ PMDL MemoryDescriptorList
);
12267 _IRQL_requires_max_(PASSIVE_LEVEL
)
12271 MmGetSystemRoutineAddress(
12272 _In_ PUNICODE_STRING SystemRoutineName
);
12277 MmIsDriverVerifying(
12278 _In_
struct _DRIVER_OBJECT
*DriverObject
);
12280 _Must_inspect_result_
12281 _IRQL_requires_max_(APC_LEVEL
)
12285 MmLockPagableDataSection(
12286 _In_ PVOID AddressWithinSection
);
12288 _Must_inspect_result_
12289 _IRQL_requires_max_(DISPATCH_LEVEL
)
12290 _Out_writes_bytes_opt_ (NumberOfBytes
)
12295 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
12296 _In_ SIZE_T NumberOfBytes
,
12297 _In_ MEMORY_CACHING_TYPE CacheType
);
12299 _Must_inspect_result_
12300 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
12301 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
))
12306 _Inout_ PMDL MemoryDescriptorList
,
12307 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
12308 KPROCESSOR_MODE AccessMode
);
12310 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
12311 _When_(AccessMode
==KernelMode
, _IRQL_requires_max_(DISPATCH_LEVEL
))
12312 _When_(AccessMode
==UserMode
, _Maybe_raises_SEH_exception_
_IRQL_requires_max_(APC_LEVEL
) _Post_notnull_
)
12313 _At_(MemoryDescriptorList
->MappedSystemVa
, _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
12314 _Must_inspect_result_
12315 _Success_(return != NULL
)
12319 MmMapLockedPagesSpecifyCache(
12320 _Inout_ PMDL MemoryDescriptorList
,
12321 _In_
__drv_strictType(KPROCESSOR_MODE
/enum _MODE
,__drv_typeConst
)
12322 KPROCESSOR_MODE AccessMode
,
12323 _In_
__drv_strictTypeMatch(__drv_typeCond
) MEMORY_CACHING_TYPE CacheType
,
12324 _In_opt_ PVOID BaseAddress
,
12325 _In_ ULONG BugCheckOnFailure
,
12326 _In_ MM_PAGE_PRIORITY Priority
);
12328 _IRQL_requires_max_(APC_LEVEL
)
12332 MmPageEntireDriver(
12333 _In_ PVOID AddressWithinSection
);
12335 _IRQL_requires_max_(DISPATCH_LEVEL
)
12336 _At_(MemoryDescriptorList
->StartVa
+ MemoryDescriptorList
->ByteOffset
,
12337 _Field_size_bytes_opt_(MemoryDescriptorList
->ByteCount
))
12341 MmProbeAndLockPages(
12342 _Inout_ PMDL MemoryDescriptorList
,
12343 _In_ KPROCESSOR_MODE AccessMode
,
12344 _In_ LOCK_OPERATION Operation
);
12349 MmQuerySystemSize(VOID
);
12351 _IRQL_requires_max_(APC_LEVEL
)
12355 MmResetDriverPaging(
12356 _In_ PVOID AddressWithinSection
);
12362 _In_reads_bytes_opt_ (Length
) PVOID Base
,
12363 _In_ SIZE_T Length
);
12365 _IRQL_requires_max_(DISPATCH_LEVEL
)
12369 MmUnlockPagableImageSection(
12370 _In_ PVOID ImageSectionHandle
);
12372 _IRQL_requires_max_(DISPATCH_LEVEL
)
12377 _Inout_ PMDL MemoryDescriptorList
);
12379 _IRQL_requires_max_(DISPATCH_LEVEL
)
12384 _In_reads_bytes_ (NumberOfBytes
) PVOID BaseAddress
,
12385 _In_ SIZE_T NumberOfBytes
);
12387 _IRQL_requires_max_ (APC_LEVEL
)
12391 MmProbeAndLockProcessPages(
12392 _Inout_ PMDL MemoryDescriptorList
,
12393 _In_ PEPROCESS Process
,
12394 _In_ KPROCESSOR_MODE AccessMode
,
12395 _In_ LOCK_OPERATION Operation
);
12397 _IRQL_requires_max_(DISPATCH_LEVEL
)
12401 MmUnmapLockedPages(
12402 _In_ PVOID BaseAddress
,
12403 _Inout_ PMDL MemoryDescriptorList
);
12405 _Must_inspect_result_
12406 _IRQL_requires_max_(DISPATCH_LEVEL
)
12407 _When_ (return != NULL
, _Post_writable_byte_size_ (NumberOfBytes
))
12411 MmAllocateContiguousMemorySpecifyCacheNode(
12412 _In_ SIZE_T NumberOfBytes
,
12413 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
,
12414 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress
,
12415 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple
,
12416 _In_ MEMORY_CACHING_TYPE CacheType
,
12417 _In_ NODE_REQUIREMENT PreferredNode
);
12419 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12421 #if (NTDDI_VERSION >= NTDDI_WINXP)
12423 _IRQL_requires_max_(DISPATCH_LEVEL
)
12429 _In_ ULONG NumberOfBytes
);
12431 _Must_inspect_result_
12432 _IRQL_requires_max_(APC_LEVEL
)
12433 _When_ (return != NULL
, _Out_writes_bytes_opt_ (NumberOfBytes
))
12437 MmAllocateMappingAddress(
12438 _In_ SIZE_T NumberOfBytes
,
12439 _In_ ULONG PoolTag
);
12441 _IRQL_requires_max_(APC_LEVEL
)
12445 MmFreeMappingAddress(
12446 _In_ PVOID BaseAddress
,
12447 _In_ ULONG PoolTag
);
12449 _IRQL_requires_max_ (APC_LEVEL
)
12453 MmIsVerifierEnabled(
12454 _Out_ PULONG VerifierFlags
);
12456 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
)
12457 _IRQL_requires_max_(DISPATCH_LEVEL
)
12458 _At_(MemoryDescriptorList
->MappedSystemVa
+ MemoryDescriptorList
->ByteOffset
,
12459 _Post_writable_byte_size_(MemoryDescriptorList
->ByteCount
))
12460 _Must_inspect_result_
12461 _Success_(return != NULL
)
12465 MmMapLockedPagesWithReservedMapping(
12466 _In_ PVOID MappingAddress
,
12467 _In_ ULONG PoolTag
,
12468 _Inout_ PMDL MemoryDescriptorList
,
12469 _In_
__drv_strictTypeMatch(__drv_typeCond
)
12470 MEMORY_CACHING_TYPE CacheType
);
12472 _Must_inspect_result_
12473 _IRQL_requires_max_(DISPATCH_LEVEL
)
12477 MmProtectMdlSystemAddress(
12478 _In_ PMDL MemoryDescriptorList
,
12479 _In_ ULONG NewProtect
);
12481 _IRQL_requires_max_(DISPATCH_LEVEL
)
12485 MmUnmapReservedMapping(
12486 _In_ PVOID BaseAddress
,
12487 _In_ ULONG PoolTag
,
12488 _Inout_ PMDL MemoryDescriptorList
);
12490 _IRQL_requires_max_ (APC_LEVEL
)
12494 MmAddVerifierThunks(
12495 _In_reads_bytes_ (ThunkBufferSize
) PVOID ThunkBuffer
,
12496 _In_ ULONG ThunkBufferSize
);
12498 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
12499 #if (NTDDI_VERSION >= NTDDI_WS03)
12500 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12505 _In_ PHYSICAL_ADDRESS StartAddress
,
12506 _In_ SIZE_T NumberOfBytes
);
12508 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
12509 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
12510 _Must_inspect_result_
12511 _IRQL_requires_max_ (DISPATCH_LEVEL
)
12515 MmAllocatePagesForMdlEx(
12516 _In_ PHYSICAL_ADDRESS LowAddress
,
12517 _In_ PHYSICAL_ADDRESS HighAddress
,
12518 _In_ PHYSICAL_ADDRESS SkipBytes
,
12519 _In_ SIZE_T TotalBytes
,
12520 _In_ MEMORY_CACHING_TYPE CacheType
,
12524 #if (NTDDI_VERSION >= NTDDI_VISTA)
12525 _IRQL_requires_max_ (APC_LEVEL
)
12529 MmIsDriverVerifyingByAddress(
12530 _In_ PVOID AddressWithinSection
);
12531 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12533 /******************************************************************************
12534 * Security Manager Functions *
12535 ******************************************************************************/
12537 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12538 _IRQL_requires_max_(PASSIVE_LEVEL
)
12543 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12544 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
12545 _In_ BOOLEAN SubjectContextLocked
,
12546 _In_ ACCESS_MASK DesiredAccess
,
12547 _In_ ACCESS_MASK PreviouslyGrantedAccess
,
12548 _Outptr_opt_ PPRIVILEGE_SET
*Privileges
,
12549 _In_ PGENERIC_MAPPING GenericMapping
,
12550 _In_ KPROCESSOR_MODE AccessMode
,
12551 _Out_ PACCESS_MASK GrantedAccess
,
12552 _Out_ PNTSTATUS AccessStatus
);
12554 _IRQL_requires_max_(PASSIVE_LEVEL
)
12559 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
12560 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
12561 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
12562 _In_ BOOLEAN IsDirectoryObject
,
12563 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
12564 _In_ PGENERIC_MAPPING GenericMapping
,
12565 _In_ POOL_TYPE PoolType
);
12570 SeAssignSecurityEx(
12571 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor
,
12572 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor
,
12573 _Out_ PSECURITY_DESCRIPTOR
*NewDescriptor
,
12574 _In_opt_ GUID
*ObjectType
,
12575 _In_ BOOLEAN IsDirectoryObject
,
12576 _In_ ULONG AutoInheritFlags
,
12577 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
12578 _In_ PGENERIC_MAPPING GenericMapping
,
12579 _In_ POOL_TYPE PoolType
);
12581 _IRQL_requires_max_(PASSIVE_LEVEL
)
12585 SeDeassignSecurity(
12586 _Inout_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
12588 _IRQL_requires_max_(PASSIVE_LEVEL
)
12592 SeValidSecurityDescriptor(
12594 _In_reads_bytes_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
);
12599 SeObjectCreateSaclAccessBits(
12600 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
12605 SeReleaseSubjectContext(
12606 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12611 SeUnlockSubjectContext(
12612 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12617 SeCaptureSubjectContext(
12618 _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12623 SeLockSubjectContext(
12624 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
12627 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12629 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
12631 _At_(AuditParameters
->ParameterCount
, _Const_
)
12634 SeSetAuditParameter(
12635 _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters
,
12636 _In_ SE_ADT_PARAMETER_TYPE Type
,
12637 _In_range_(<,SE_MAX_AUDIT_PARAMETERS
) ULONG Index
,
12638 _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE"))
12643 SeReportSecurityEvent(
12645 _In_ PUNICODE_STRING SourceName
,
12646 _In_opt_ PSID UserSid
,
12647 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters
);
12649 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
12651 #if (NTDDI_VERSION >= NTDDI_VISTA)
12655 SeComputeAutoInheritByObjectType(
12656 _In_ PVOID ObjectType
,
12657 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12658 _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor
);
12660 #ifdef SE_NTFS_WORLD_CACHE
12664 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
12665 _In_ PGENERIC_MAPPING GenericMapping
,
12666 _Out_ PACCESS_MASK GrantedAccess
);
12667 #endif /* SE_NTFS_WORLD_CACHE */
12668 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12669 /******************************************************************************
12670 * Configuration Manager Functions *
12671 ******************************************************************************/
12673 #if (NTDDI_VERSION >= NTDDI_WINXP)
12674 _IRQL_requires_max_(APC_LEVEL
)
12678 CmRegisterCallback(
12679 _In_ PEX_CALLBACK_FUNCTION Function
,
12680 _In_opt_ PVOID Context
,
12681 _Out_ PLARGE_INTEGER Cookie
);
12683 _IRQL_requires_max_(APC_LEVEL
)
12687 CmUnRegisterCallback(
12688 _In_ LARGE_INTEGER Cookie
);
12691 #if (NTDDI_VERSION >= NTDDI_VISTA)
12693 _IRQL_requires_max_(APC_LEVEL
)
12697 CmRegisterCallbackEx(
12698 _In_ PEX_CALLBACK_FUNCTION Function
,
12699 _In_ PCUNICODE_STRING Altitude
,
12701 _In_opt_ PVOID Context
,
12702 _Out_ PLARGE_INTEGER Cookie
,
12703 _Reserved_ PVOID Reserved
);
12705 _IRQL_requires_max_(APC_LEVEL
)
12709 CmGetCallbackVersion(
12710 _Out_opt_ PULONG Major
,
12711 _Out_opt_ PULONG Minor
);
12713 _IRQL_requires_max_(APC_LEVEL
)
12717 CmSetCallbackObjectContext(
12718 _Inout_ PVOID Object
,
12719 _In_ PLARGE_INTEGER Cookie
,
12720 _In_ PVOID NewContext
,
12721 _Out_opt_ PVOID
*OldContext
);
12723 _IRQL_requires_max_(APC_LEVEL
)
12727 CmCallbackGetKeyObjectID(
12728 _In_ PLARGE_INTEGER Cookie
,
12730 _Out_opt_ PULONG_PTR ObjectID
,
12731 _Outptr_opt_ PCUNICODE_STRING
*ObjectName
);
12733 _IRQL_requires_max_(APC_LEVEL
)
12737 CmGetBoundTransaction(
12738 _In_ PLARGE_INTEGER Cookie
,
12739 _In_ PVOID Object
);
12741 #endif // NTDDI_VERSION >= NTDDI_VISTA
12744 /******************************************************************************
12745 * I/O Manager Functions *
12746 ******************************************************************************/
12750 * IoAcquireRemoveLock(
12751 * IN PIO_REMOVE_LOCK RemoveLock,
12752 * IN OPTIONAL PVOID Tag)
12755 #define IoAcquireRemoveLock(RemoveLock, Tag) \
12756 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
12758 #define IoAcquireRemoveLock(RemoveLock, Tag) \
12759 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
12764 * IoAdjustPagingPathCount(
12766 * IN BOOLEAN Increment)
12768 #define IoAdjustPagingPathCount(_Count, \
12773 InterlockedIncrement(_Count); \
12777 InterlockedDecrement(_Count); \
12781 #if !defined(_M_AMD64)
12785 READ_PORT_BUFFER_UCHAR(
12793 READ_PORT_BUFFER_ULONG(
12801 READ_PORT_BUFFER_USHORT(
12827 READ_REGISTER_BUFFER_UCHAR(
12828 IN PUCHAR Register
,
12835 READ_REGISTER_BUFFER_ULONG(
12836 IN PULONG Register
,
12843 READ_REGISTER_BUFFER_USHORT(
12844 IN PUSHORT Register
,
12851 READ_REGISTER_UCHAR(
12852 IN PUCHAR Register
);
12857 READ_REGISTER_ULONG(
12858 IN PULONG Register
);
12863 READ_REGISTER_USHORT(
12864 IN PUSHORT Register
);
12869 WRITE_PORT_BUFFER_UCHAR(
12877 WRITE_PORT_BUFFER_ULONG(
12885 WRITE_PORT_BUFFER_USHORT(
12914 WRITE_REGISTER_BUFFER_UCHAR(
12915 IN PUCHAR Register
,
12922 WRITE_REGISTER_BUFFER_ULONG(
12923 IN PULONG Register
,
12930 WRITE_REGISTER_BUFFER_USHORT(
12931 IN PUSHORT Register
,
12938 WRITE_REGISTER_UCHAR(
12939 IN PUCHAR Register
,
12945 WRITE_REGISTER_ULONG(
12946 IN PULONG Register
,
12952 WRITE_REGISTER_USHORT(
12953 IN PUSHORT Register
,
12960 READ_PORT_BUFFER_UCHAR(
12965 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12970 READ_PORT_BUFFER_ULONG(
12975 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12980 READ_PORT_BUFFER_USHORT(
12985 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
12993 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
13001 return __indword((USHORT
)(ULONG_PTR
)Port
);
13009 return __inword((USHORT
)(ULONG_PTR
)Port
);
13014 READ_REGISTER_BUFFER_UCHAR(
13015 IN PUCHAR Register
,
13019 __movsb(Register
, Buffer
, Count
);
13024 READ_REGISTER_BUFFER_ULONG(
13025 IN PULONG Register
,
13029 __movsd(Register
, Buffer
, Count
);
13034 READ_REGISTER_BUFFER_USHORT(
13035 IN PUSHORT Register
,
13039 __movsw(Register
, Buffer
, Count
);
13044 READ_REGISTER_UCHAR(
13045 IN
volatile UCHAR
*Register
)
13052 READ_REGISTER_ULONG(
13053 IN
volatile ULONG
*Register
)
13060 READ_REGISTER_USHORT(
13061 IN
volatile USHORT
*Register
)
13068 WRITE_PORT_BUFFER_UCHAR(
13073 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
13078 WRITE_PORT_BUFFER_ULONG(
13083 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
13088 WRITE_PORT_BUFFER_USHORT(
13093 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
13102 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
13111 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
13120 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
13125 WRITE_REGISTER_BUFFER_UCHAR(
13126 IN PUCHAR Register
,
13131 __movsb(Register
, Buffer
, Count
);
13132 InterlockedOr(&Synch
, 1);
13137 WRITE_REGISTER_BUFFER_ULONG(
13138 IN PULONG Register
,
13143 __movsd(Register
, Buffer
, Count
);
13144 InterlockedOr(&Synch
, 1);
13149 WRITE_REGISTER_BUFFER_USHORT(
13150 IN PUSHORT Register
,
13155 __movsw(Register
, Buffer
, Count
);
13156 InterlockedOr(&Synch
, 1);
13161 WRITE_REGISTER_UCHAR(
13162 IN
volatile UCHAR
*Register
,
13167 InterlockedOr(&Synch
, 1);
13172 WRITE_REGISTER_ULONG(
13173 IN
volatile ULONG
*Register
,
13178 InterlockedOr(&Synch
, 1);
13183 WRITE_REGISTER_USHORT(
13184 IN
volatile USHORT
*Register
,
13189 InterlockedOr(&Sync
, 1);
13193 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
13194 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
13196 #define DMA_MACROS_DEFINED
13198 _IRQL_requires_max_(DISPATCH_LEVEL
)
13199 _IRQL_requires_min_(DISPATCH_LEVEL
)
13202 IoAllocateAdapterChannel(
13203 _In_ PDMA_ADAPTER DmaAdapter
,
13204 _In_ PDEVICE_OBJECT DeviceObject
,
13205 _In_ ULONG NumberOfMapRegisters
,
13206 _In_ PDRIVER_CONTROL ExecutionRoutine
,
13207 _In_ PVOID Context
)
13209 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
13210 AllocateAdapterChannel
=
13211 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
13212 ASSERT(AllocateAdapterChannel
);
13213 return AllocateAdapterChannel(DmaAdapter
,
13215 NumberOfMapRegisters
,
13223 IoFlushAdapterBuffers(
13224 _In_ PDMA_ADAPTER DmaAdapter
,
13226 _In_ PVOID MapRegisterBase
,
13227 _In_ PVOID CurrentVa
,
13229 _In_ BOOLEAN WriteToDevice
)
13231 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
13232 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
13233 ASSERT(FlushAdapterBuffers
);
13234 return FlushAdapterBuffers(DmaAdapter
,
13245 IoFreeAdapterChannel(
13246 _In_ PDMA_ADAPTER DmaAdapter
)
13248 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
13249 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
13250 ASSERT(FreeAdapterChannel
);
13251 FreeAdapterChannel(DmaAdapter
);
13257 IoFreeMapRegisters(
13258 _In_ PDMA_ADAPTER DmaAdapter
,
13259 _In_ PVOID MapRegisterBase
,
13260 _In_ ULONG NumberOfMapRegisters
)
13262 PFREE_MAP_REGISTERS FreeMapRegisters
;
13263 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
13264 ASSERT(FreeMapRegisters
);
13265 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
13272 _In_ PDMA_ADAPTER DmaAdapter
,
13274 _In_ PVOID MapRegisterBase
,
13275 _In_ PVOID CurrentVa
,
13276 _Inout_ PULONG Length
,
13277 _In_ BOOLEAN WriteToDevice
)
13279 PMAP_TRANSFER MapTransfer
;
13281 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
13282 ASSERT(MapTransfer
);
13283 return MapTransfer(DmaAdapter
,
13292 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13294 _Acquires_lock_(_Global_cancel_spin_lock_
)
13295 _Requires_lock_not_held_(_Global_cancel_spin_lock_
)
13296 _IRQL_requires_max_(DISPATCH_LEVEL
)
13297 _IRQL_raises_(DISPATCH_LEVEL
)
13301 IoAcquireCancelSpinLock(
13302 _Out_
_At_(*Irql
, _IRQL_saves_
) PKIRQL Irql
);
13304 _IRQL_requires_max_(DISPATCH_LEVEL
)
13308 IoAcquireRemoveLockEx(
13309 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13310 _In_opt_ PVOID Tag
,
13313 _In_ ULONG RemlockSize
);
13315 _IRQL_requires_max_(DISPATCH_LEVEL
)
13320 IoAllocateDriverObjectExtension(
13321 _In_ PDRIVER_OBJECT DriverObject
,
13322 _In_ PVOID ClientIdentificationAddress
,
13323 _In_ ULONG DriverObjectExtensionSize
,
13324 _Post_
_At_(*DriverObjectExtension
, _When_(return==0,
13325 __drv_aliasesMem
__drv_allocatesMem(Mem
) _Post_notnull_
))
13326 _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize
))
13327 PVOID
*DriverObjectExtension
);
13329 _IRQL_requires_max_(DISPATCH_LEVEL
)
13333 IoAllocateErrorLogEntry(
13334 _In_ PVOID IoObject
,
13335 _In_ UCHAR EntrySize
);
13337 _Must_inspect_result_
13338 _IRQL_requires_max_(DISPATCH_LEVEL
)
13343 _In_ CCHAR StackSize
,
13344 _In_ BOOLEAN ChargeQuota
);
13346 _IRQL_requires_max_(DISPATCH_LEVEL
)
13351 _In_opt_ __drv_aliasesMem PVOID VirtualAddress
,
13353 _In_ BOOLEAN SecondaryBuffer
,
13354 _In_ BOOLEAN ChargeQuota
,
13355 _Inout_opt_ PIRP Irp
);
13357 __drv_allocatesMem(Mem
)
13358 _IRQL_requires_max_(DISPATCH_LEVEL
)
13362 IoAllocateWorkItem(
13363 _In_ PDEVICE_OBJECT DeviceObject
);
13365 _IRQL_requires_max_(APC_LEVEL
)
13371 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return==0, __drv_aliasesMem
)
13372 PDEVICE_OBJECT SourceDevice
,
13373 _In_ PUNICODE_STRING TargetDevice
,
13374 _Out_ PDEVICE_OBJECT
*AttachedDevice
);
13376 _Must_inspect_result_
13377 _IRQL_requires_max_(DISPATCH_LEVEL
)
13381 IoAttachDeviceToDeviceStack(
13382 _In_
_Kernel_requires_resource_held_(Memory
) _When_(return!=0, __drv_aliasesMem
)
13383 PDEVICE_OBJECT SourceDevice
,
13384 _In_ PDEVICE_OBJECT TargetDevice
);
13386 _Must_inspect_result_
13388 _IRQL_requires_max_(DISPATCH_LEVEL
)
13392 IoBuildAsynchronousFsdRequest(
13393 _In_ ULONG MajorFunction
,
13394 _In_ PDEVICE_OBJECT DeviceObject
,
13395 _Inout_opt_ PVOID Buffer
,
13396 _In_opt_ ULONG Length
,
13397 _In_opt_ PLARGE_INTEGER StartingOffset
,
13398 _In_opt_ PIO_STATUS_BLOCK IoStatusBlock
);
13400 _Must_inspect_result_
13402 _IRQL_requires_max_(PASSIVE_LEVEL
)
13406 IoBuildDeviceIoControlRequest(
13407 _In_ ULONG IoControlCode
,
13408 _In_ PDEVICE_OBJECT DeviceObject
,
13409 _In_opt_ PVOID InputBuffer
,
13410 _In_ ULONG InputBufferLength
,
13411 _Out_opt_ PVOID OutputBuffer
,
13412 _In_ ULONG OutputBufferLength
,
13413 _In_ BOOLEAN InternalDeviceIoControl
,
13414 _In_opt_ PKEVENT Event
,
13415 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
13417 _IRQL_requires_max_(DISPATCH_LEVEL
)
13422 _In_ PMDL SourceMdl
,
13423 _Inout_ PMDL TargetMdl
,
13424 _In_ PVOID VirtualAddress
,
13425 _In_ ULONG Length
);
13427 _Must_inspect_result_
13429 _IRQL_requires_max_(PASSIVE_LEVEL
)
13433 IoBuildSynchronousFsdRequest(
13434 _In_ ULONG MajorFunction
,
13435 _In_ PDEVICE_OBJECT DeviceObject
,
13436 _Inout_opt_ PVOID Buffer
,
13437 _In_opt_ ULONG Length
,
13438 _In_opt_ PLARGE_INTEGER StartingOffset
,
13439 _In_ PKEVENT Event
,
13440 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
13442 _IRQL_requires_max_(DISPATCH_LEVEL
)
13448 _In_ PDEVICE_OBJECT DeviceObject
,
13449 _Inout_ __drv_aliasesMem PIRP Irp
);
13450 #define IoCallDriver IofCallDriver
13452 _IRQL_requires_max_(DISPATCH_LEVEL
)
13456 IofCompleteRequest(
13458 _In_ CCHAR PriorityBoost
);
13459 #define IoCompleteRequest IofCompleteRequest
13461 _IRQL_requires_max_(DISPATCH_LEVEL
)
13468 _IRQL_requires_max_(PASSIVE_LEVEL
)
13472 IoCheckShareAccess(
13473 _In_ ACCESS_MASK DesiredAccess
,
13474 _In_ ULONG DesiredShareAccess
,
13475 _Inout_ PFILE_OBJECT FileObject
,
13476 _Inout_ PSHARE_ACCESS ShareAccess
,
13477 _In_ BOOLEAN Update
);
13479 _IRQL_requires_max_(DISPATCH_LEVEL
)
13483 IofCompleteRequest(
13485 _In_ CCHAR PriorityBoost
);
13487 _IRQL_requires_max_(PASSIVE_LEVEL
)
13491 IoConnectInterrupt(
13492 _Out_ PKINTERRUPT
*InterruptObject
,
13493 _In_ PKSERVICE_ROUTINE ServiceRoutine
,
13494 _In_opt_ PVOID ServiceContext
,
13495 _In_opt_ PKSPIN_LOCK SpinLock
,
13498 _In_ KIRQL SynchronizeIrql
,
13499 _In_ KINTERRUPT_MODE InterruptMode
,
13500 _In_ BOOLEAN ShareVector
,
13501 _In_ KAFFINITY ProcessorEnableMask
,
13502 _In_ BOOLEAN FloatingSave
);
13504 _IRQL_requires_max_(APC_LEVEL
)
13510 _In_ PDRIVER_OBJECT DriverObject
,
13511 _In_ ULONG DeviceExtensionSize
,
13512 _In_opt_ PUNICODE_STRING DeviceName
,
13513 _In_ DEVICE_TYPE DeviceType
,
13514 _In_ ULONG DeviceCharacteristics
,
13515 _In_ BOOLEAN Exclusive
,
13516 _Outptr_result_nullonfailure_
13517 _At_(*DeviceObject
,
13518 __drv_allocatesMem(Mem
)
13519 _When_(((_In_function_class_(DRIVER_INITIALIZE
))
13520 ||(_In_function_class_(DRIVER_DISPATCH
))),
13522 PDEVICE_OBJECT
*DeviceObject
);
13524 _IRQL_requires_max_(PASSIVE_LEVEL
)
13529 _Out_ PHANDLE FileHandle
,
13530 _In_ ACCESS_MASK DesiredAccess
,
13531 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
13532 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
13533 _In_opt_ PLARGE_INTEGER AllocationSize
,
13534 _In_ ULONG FileAttributes
,
13535 _In_ ULONG ShareAccess
,
13536 _In_ ULONG Disposition
,
13537 _In_ ULONG CreateOptions
,
13538 _In_opt_ PVOID EaBuffer
,
13539 _In_ ULONG EaLength
,
13540 _In_ CREATE_FILE_TYPE CreateFileType
,
13541 _In_opt_ PVOID InternalParameters
,
13542 _In_ ULONG Options
);
13544 _IRQL_requires_max_(PASSIVE_LEVEL
)
13548 IoCreateNotificationEvent(
13549 _In_ PUNICODE_STRING EventName
,
13550 _Out_ PHANDLE EventHandle
);
13552 _IRQL_requires_max_(PASSIVE_LEVEL
)
13556 IoCreateSymbolicLink(
13557 _In_ PUNICODE_STRING SymbolicLinkName
,
13558 _In_ PUNICODE_STRING DeviceName
);
13560 _IRQL_requires_max_(PASSIVE_LEVEL
)
13564 IoCreateSynchronizationEvent(
13565 _In_ PUNICODE_STRING EventName
,
13566 _Out_ PHANDLE EventHandle
);
13568 _IRQL_requires_max_(PASSIVE_LEVEL
)
13572 IoCreateUnprotectedSymbolicLink(
13573 _In_ PUNICODE_STRING SymbolicLinkName
,
13574 _In_ PUNICODE_STRING DeviceName
);
13576 _IRQL_requires_max_(APC_LEVEL
)
13577 _Kernel_clear_do_init_(__yes
)
13582 _In_
_Kernel_requires_resource_held_(Memory
) __drv_freesMem(Mem
)
13583 PDEVICE_OBJECT DeviceObject
);
13585 _IRQL_requires_max_(PASSIVE_LEVEL
)
13589 IoDeleteSymbolicLink(
13590 _In_ PUNICODE_STRING SymbolicLinkName
);
13592 _IRQL_requires_max_(PASSIVE_LEVEL
)
13597 _Inout_ PDEVICE_OBJECT TargetDevice
);
13599 _IRQL_requires_max_(PASSIVE_LEVEL
)
13603 IoDisconnectInterrupt(
13604 _In_ PKINTERRUPT InterruptObject
);
13606 __drv_freesMem(Mem
)
13607 _IRQL_requires_max_(DISPATCH_LEVEL
)
13614 _IRQL_requires_max_(DISPATCH_LEVEL
)
13621 _IRQL_requires_max_(DISPATCH_LEVEL
)
13626 _In_
__drv_freesMem(Mem
) PIO_WORKITEM IoWorkItem
);
13631 IoGetAttachedDevice(
13632 IN PDEVICE_OBJECT DeviceObject
);
13634 _IRQL_requires_max_(DISPATCH_LEVEL
)
13638 IoGetAttachedDeviceReference(
13639 _In_ PDEVICE_OBJECT DeviceObject
);
13644 IoGetBootDiskInformation(
13645 _Inout_ PBOOTDISK_INFORMATION BootDiskInformation
,
13648 _IRQL_requires_max_(PASSIVE_LEVEL
)
13649 _Must_inspect_result_
13653 IoGetDeviceInterfaceAlias(
13654 _In_ PUNICODE_STRING SymbolicLinkName
,
13655 _In_ CONST GUID
*AliasInterfaceClassGuid
,
13657 _When_(return==0, _At_(AliasSymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13658 PUNICODE_STRING AliasSymbolicLinkName
);
13663 IoGetCurrentProcess(VOID
);
13665 _IRQL_requires_max_(PASSIVE_LEVEL
)
13666 _Must_inspect_result_
13670 IoGetDeviceInterfaces(
13671 _In_ CONST GUID
*InterfaceClassGuid
,
13672 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13674 _Outptr_result_nullonfailure_
13675 _At_(*SymbolicLinkList
, _When_(return==0, __drv_allocatesMem(Mem
)))
13676 PZZWSTR
*SymbolicLinkList
);
13678 _IRQL_requires_max_(PASSIVE_LEVEL
)
13682 IoGetDeviceObjectPointer(
13683 _In_ PUNICODE_STRING ObjectName
,
13684 _In_ ACCESS_MASK DesiredAccess
,
13685 _Out_ PFILE_OBJECT
*FileObject
,
13686 _Out_ PDEVICE_OBJECT
*DeviceObject
);
13688 _IRQL_requires_max_(PASSIVE_LEVEL
)
13689 _When_((DeviceProperty
& __string_type
),
13690 _At_(PropertyBuffer
, _Post_z_
))
13691 _When_((DeviceProperty
& __multiString_type
),
13692 _At_(PropertyBuffer
, _Post_ _NullNull_terminated_
))
13696 IoGetDeviceProperty(
13697 _In_ PDEVICE_OBJECT DeviceObject
,
13698 _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty
,
13699 _In_ ULONG BufferLength
,
13700 _Out_writes_bytes_opt_(BufferLength
) PVOID PropertyBuffer
,
13701 _Deref_out_range_(<=, BufferLength
) PULONG ResultLength
);
13703 _Must_inspect_result_
13704 _IRQL_requires_max_(PASSIVE_LEVEL
)
13709 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
13710 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
13711 _Out_
_When_(return!=0, _Kernel_IoGetDmaAdapter_
_At_(*NumberOfMapRegisters
, _Must_inspect_result_
))
13712 PULONG NumberOfMapRegisters
);
13715 _IRQL_requires_max_(DISPATCH_LEVEL
)
13719 IoGetDriverObjectExtension(
13720 _In_ PDRIVER_OBJECT DriverObject
,
13721 _In_ PVOID ClientIdentificationAddress
);
13723 _IRQL_requires_max_(APC_LEVEL
)
13727 IoGetInitialStack(VOID
);
13732 IoGetRelatedDeviceObject(
13733 _In_ PFILE_OBJECT FileObject
);
13735 _IRQL_requires_max_(DISPATCH_LEVEL
)
13740 _Inout_ PIO_WORKITEM IoWorkItem
,
13741 _In_ PIO_WORKITEM_ROUTINE WorkerRoutine
,
13742 _In_ WORK_QUEUE_TYPE QueueType
,
13743 _In_opt_ __drv_aliasesMem PVOID Context
);
13745 _IRQL_requires_max_(DISPATCH_LEVEL
)
13751 _In_ USHORT PacketSize
,
13752 _In_ CCHAR StackSize
);
13754 _IRQL_requires_max_(PASSIVE_LEVEL
)
13758 IoInitializeRemoveLockEx(
13759 _Out_ PIO_REMOVE_LOCK Lock
,
13760 _In_ ULONG AllocateTag
,
13761 _In_ ULONG MaxLockedMinutes
,
13762 _In_ ULONG HighWatermark
,
13763 _In_ ULONG RemlockSize
);
13765 _IRQL_requires_max_(PASSIVE_LEVEL
)
13770 _In_ PDEVICE_OBJECT DeviceObject
,
13771 _In_ PIO_TIMER_ROUTINE TimerRoutine
,
13772 _In_opt_ __drv_aliasesMem PVOID Context
);
13774 _IRQL_requires_max_(DISPATCH_LEVEL
)
13778 IoInvalidateDeviceRelations(
13779 _In_ PDEVICE_OBJECT DeviceObject
,
13780 _In_ DEVICE_RELATION_TYPE Type
);
13782 _IRQL_requires_max_(DISPATCH_LEVEL
)
13786 IoInvalidateDeviceState(
13787 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13789 _IRQL_requires_max_(PASSIVE_LEVEL
)
13793 IoIsWdmVersionAvailable(
13794 _When_(MajorVersion
!=1&&MajorVersion
!=6, _In_
__drv_reportError("MajorVersion must be 1 or 6"))
13795 UCHAR MajorVersion
,
13796 _In_
_When_(MinorVersion
!=0 && MinorVersion
!=5 &&
13797 MinorVersion
!=16 && MinorVersion
!=32 &&
13798 MinorVersion
!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30"))
13799 UCHAR MinorVersion
);
13801 _IRQL_requires_max_(PASSIVE_LEVEL
)
13802 _Must_inspect_result_
13806 IoOpenDeviceInterfaceRegistryKey(
13807 _In_ PUNICODE_STRING SymbolicLinkName
,
13808 _In_ ACCESS_MASK DesiredAccess
,
13809 _Out_ PHANDLE DeviceInterfaceKey
);
13811 _IRQL_requires_max_(PASSIVE_LEVEL
)
13812 _Must_inspect_result_
13816 IoOpenDeviceRegistryKey(
13817 _In_ PDEVICE_OBJECT DeviceObject
,
13818 _In_ ULONG DevInstKeyType
,
13819 _In_ ACCESS_MASK DesiredAccess
,
13820 _Out_ PHANDLE DevInstRegKey
);
13822 _IRQL_requires_max_(PASSIVE_LEVEL
)
13823 _Must_inspect_result_
13827 IoRegisterDeviceInterface(
13828 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13829 _In_ CONST GUID
*InterfaceClassGuid
,
13830 _In_opt_ PUNICODE_STRING ReferenceString
,
13831 _Out_
_When_(return==0, _At_(SymbolicLinkName
->Buffer
, __drv_allocatesMem(Mem
)))
13832 PUNICODE_STRING SymbolicLinkName
);
13834 _IRQL_requires_max_(PASSIVE_LEVEL
)
13835 _Must_inspect_result_
13839 IoRegisterPlugPlayNotification(
13840 _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
13841 _In_ ULONG EventCategoryFlags
,
13842 _In_opt_ PVOID EventCategoryData
,
13843 _In_ PDRIVER_OBJECT DriverObject
,
13844 _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
13845 _Inout_opt_ __drv_aliasesMem PVOID Context
,
13846 _Outptr_result_nullonfailure_
13847 _At_(*NotificationEntry
, _When_(return==0, __drv_allocatesMem(Mem
)))
13848 PVOID
*NotificationEntry
);
13850 _IRQL_requires_max_(PASSIVE_LEVEL
)
13854 IoRegisterShutdownNotification(
13855 _In_ PDEVICE_OBJECT DeviceObject
);
13857 _Requires_lock_held_(_Global_cancel_spin_lock_
)
13858 _Releases_lock_(_Global_cancel_spin_lock_
)
13859 _IRQL_requires_max_(DISPATCH_LEVEL
)
13860 _IRQL_requires_min_(DISPATCH_LEVEL
)
13864 IoReleaseCancelSpinLock(
13865 _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql
);
13867 _IRQL_requires_max_(PASSIVE_LEVEL
)
13871 IoReleaseRemoveLockAndWaitEx(
13872 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13873 _In_opt_ PVOID Tag
,
13874 _In_ ULONG RemlockSize
);
13879 IoReleaseRemoveLockEx(
13880 _Inout_ PIO_REMOVE_LOCK RemoveLock
,
13881 _In_opt_ PVOID Tag
,
13882 _In_ ULONG RemlockSize
);
13884 _IRQL_requires_max_(PASSIVE_LEVEL
)
13888 IoRemoveShareAccess(
13889 _In_ PFILE_OBJECT FileObject
,
13890 _Inout_ PSHARE_ACCESS ShareAccess
);
13892 _IRQL_requires_max_(PASSIVE_LEVEL
)
13896 IoReportTargetDeviceChange(
13897 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13898 _In_ PVOID NotificationStructure
);
13900 _IRQL_requires_max_(DISPATCH_LEVEL
)
13904 IoReportTargetDeviceChangeAsynchronous(
13905 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
13906 _In_ PVOID NotificationStructure
,
13907 _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback
,
13908 _In_opt_ PVOID Context
);
13910 _IRQL_requires_max_(DISPATCH_LEVEL
)
13914 IoRequestDeviceEject(
13915 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
13917 _IRQL_requires_max_(DISPATCH_LEVEL
)
13923 _In_ NTSTATUS Status
);
13925 _IRQL_requires_max_(PASSIVE_LEVEL
)
13926 _Must_inspect_result_
13930 IoSetDeviceInterfaceState(
13931 _In_ PUNICODE_STRING SymbolicLinkName
,
13932 _In_ BOOLEAN Enable
);
13938 _In_ ACCESS_MASK DesiredAccess
,
13939 _In_ ULONG DesiredShareAccess
,
13940 _Inout_ PFILE_OBJECT FileObject
,
13941 _Out_ PSHARE_ACCESS ShareAccess
);
13943 _IRQL_requires_max_(DISPATCH_LEVEL
)
13944 _IRQL_requires_min_(DISPATCH_LEVEL
)
13949 _In_ PDEVICE_OBJECT DeviceObject
,
13950 _In_ BOOLEAN Cancelable
);
13952 _IRQL_requires_max_(DISPATCH_LEVEL
)
13956 IoStartNextPacketByKey(
13957 _In_ PDEVICE_OBJECT DeviceObject
,
13958 _In_ BOOLEAN Cancelable
,
13961 _IRQL_requires_max_(DISPATCH_LEVEL
)
13966 _In_ PDEVICE_OBJECT DeviceObject
,
13968 _In_opt_ PULONG Key
,
13969 _In_opt_ PDRIVER_CANCEL CancelFunction
);
13971 _IRQL_requires_max_(DISPATCH_LEVEL
)
13976 _In_ PDEVICE_OBJECT DeviceObject
);
13978 _IRQL_requires_max_(DISPATCH_LEVEL
)
13983 _In_ PDEVICE_OBJECT DeviceObject
);
13985 _IRQL_requires_max_(PASSIVE_LEVEL
)
13986 __drv_freesMem(Pool
)
13990 IoUnregisterPlugPlayNotification(
13991 _In_ PVOID NotificationEntry
);
13993 _IRQL_requires_max_(PASSIVE_LEVEL
)
13997 IoUnregisterShutdownNotification(
13998 _In_ PDEVICE_OBJECT DeviceObject
);
14000 _IRQL_requires_max_(PASSIVE_LEVEL
)
14004 IoUpdateShareAccess(
14005 _In_ PFILE_OBJECT FileObject
,
14006 _Inout_ PSHARE_ACCESS ShareAccess
);
14008 _IRQL_requires_max_(PASSIVE_LEVEL
)
14012 IoWMIAllocateInstanceIds(
14014 _In_ ULONG InstanceCount
,
14015 _Out_ ULONG
*FirstInstanceId
);
14020 IoWMIQuerySingleInstanceMultiple(
14021 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
14022 _In_reads_(ObjectCount
) PUNICODE_STRING InstanceNames
,
14023 _In_ ULONG ObjectCount
,
14024 _Inout_ ULONG
*InOutBufferSize
,
14025 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
14027 _IRQL_requires_max_(PASSIVE_LEVEL
)
14031 IoWMIRegistrationControl(
14032 _In_ PDEVICE_OBJECT DeviceObject
,
14033 _In_ ULONG Action
);
14038 IoWMISuggestInstanceName(
14039 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject
,
14040 _In_opt_ PUNICODE_STRING SymbolicLinkName
,
14041 _In_ BOOLEAN CombineNames
,
14042 _Out_ PUNICODE_STRING SuggestedInstanceName
);
14044 _Must_inspect_result_
14045 _IRQL_requires_max_(DISPATCH_LEVEL
)
14051 _Inout_
_When_(return==0, __drv_aliasesMem
) PVOID WnodeEventItem
);
14053 _IRQL_requires_max_(DISPATCH_LEVEL
)
14057 IoWriteErrorLogEntry(
14058 _In_ PVOID ElEntry
);
14063 IoGetTopLevelIrp(VOID
);
14065 _IRQL_requires_max_(PASSIVE_LEVEL
)
14069 IoRegisterLastChanceShutdownNotification(
14070 _In_ PDEVICE_OBJECT DeviceObject
);
14076 _In_opt_ PIRP Irp
);
14079 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14082 #if (NTDDI_VERSION >= NTDDI_WINXP)
14089 _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp
,
14090 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
14091 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
14092 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
14093 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
14094 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
14100 _Inout_ PIO_CSQ Csq
,
14102 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
);
14108 _Inout_ PIO_CSQ Csq
,
14109 _Inout_ PIO_CSQ_IRP_CONTEXT Context
);
14114 IoCsqRemoveNextIrp(
14115 _Inout_ PIO_CSQ Csq
,
14116 _In_opt_ PVOID PeekContext
);
14121 IoForwardIrpSynchronously(
14122 _In_ PDEVICE_OBJECT DeviceObject
,
14125 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
14130 IoFreeErrorLogEntry(
14131 _In_ PVOID ElEntry
);
14133 _IRQL_requires_max_(DISPATCH_LEVEL
)
14134 _Must_inspect_result_
14138 IoSetCompletionRoutineEx(
14139 _In_ PDEVICE_OBJECT DeviceObject
,
14141 _In_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
14142 _In_opt_ PVOID Context
,
14143 _In_ BOOLEAN InvokeOnSuccess
,
14144 _In_ BOOLEAN InvokeOnError
,
14145 _In_ BOOLEAN InvokeOnCancel
);
14149 IoSetStartIoAttributes(
14150 _In_ PDEVICE_OBJECT DeviceObject
,
14151 _In_ BOOLEAN DeferredStartIo
,
14152 _In_ BOOLEAN NonCancelable
);
14157 IoWMIDeviceObjectToInstanceName(
14158 _In_ PVOID DataBlockObject
,
14159 _In_ PDEVICE_OBJECT DeviceObject
,
14160 _Out_ PUNICODE_STRING InstanceName
);
14165 IoWMIExecuteMethod(
14166 _In_ PVOID DataBlockObject
,
14167 _In_ PUNICODE_STRING InstanceName
,
14168 _In_ ULONG MethodId
,
14169 _In_ ULONG InBufferSize
,
14170 _Inout_ PULONG OutBufferSize
,
14171 _Inout_updates_bytes_to_opt_(*OutBufferSize
, InBufferSize
) PUCHAR InOutBuffer
);
14176 IoWMIHandleToInstanceName(
14177 _In_ PVOID DataBlockObject
,
14178 _In_ HANDLE FileHandle
,
14179 _Out_ PUNICODE_STRING InstanceName
);
14185 _In_ LPCGUID DataBlockGuid
,
14186 _In_ ULONG DesiredAccess
,
14187 _Out_ PVOID
*DataBlockObject
);
14193 _In_ PVOID DataBlockObject
,
14194 _Inout_ ULONG
*InOutBufferSize
,
14195 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
14200 IoWMIQueryAllDataMultiple(
14201 _In_reads_(ObjectCount
) PVOID
*DataBlockObjectList
,
14202 _In_ ULONG ObjectCount
,
14203 _Inout_ ULONG
*InOutBufferSize
,
14204 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
14209 IoWMIQuerySingleInstance(
14210 _In_ PVOID DataBlockObject
,
14211 _In_ PUNICODE_STRING InstanceName
,
14212 _Inout_ ULONG
*InOutBufferSize
,
14213 _Out_writes_bytes_opt_(*InOutBufferSize
) PVOID OutBuffer
);
14218 IoWMISetNotificationCallback(
14219 _Inout_ PVOID Object
,
14220 _In_ WMI_NOTIFICATION_CALLBACK Callback
,
14221 _In_opt_ PVOID Context
);
14226 IoWMISetSingleInstance(
14227 _In_ PVOID DataBlockObject
,
14228 _In_ PUNICODE_STRING InstanceName
,
14229 _In_ ULONG Version
,
14230 _In_ ULONG ValueBufferSize
,
14231 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
14236 IoWMISetSingleItem(
14237 _In_ PVOID DataBlockObject
,
14238 _In_ PUNICODE_STRING InstanceName
,
14239 _In_ ULONG DataItemId
,
14240 _In_ ULONG Version
,
14241 _In_ ULONG ValueBufferSize
,
14242 _In_reads_bytes_(ValueBufferSize
) PVOID ValueBuffer
);
14244 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14246 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
14250 IoValidateDeviceIoControlAccess(
14252 _In_ ULONG RequiredAccess
);
14255 #if (NTDDI_VERSION >= NTDDI_WS03)
14261 _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
14262 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
14263 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
14264 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
14265 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
14266 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
14272 _Inout_ PIO_CSQ Csq
,
14274 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context
,
14275 _In_opt_ PVOID InsertContext
);
14276 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
14279 #if (NTDDI_VERSION >= NTDDI_VISTA)
14283 IoGetBootDiskInformationLite(
14284 _Outptr_ PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
14289 IoCheckShareAccessEx(
14290 _In_ ACCESS_MASK DesiredAccess
,
14291 _In_ ULONG DesiredShareAccess
,
14292 _Inout_ PFILE_OBJECT FileObject
,
14293 _Inout_ PSHARE_ACCESS ShareAccess
,
14294 _In_ BOOLEAN Update
,
14295 _In_ PBOOLEAN WritePermission
);
14300 IoConnectInterruptEx(
14301 _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
14306 IoDisconnectInterruptEx(
14307 _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
14311 IoWithinStackLimits(
14312 _In_ ULONG_PTR RegionStart
,
14313 _In_ SIZE_T RegionSize
);
14318 IoSetShareAccessEx(
14319 _In_ ACCESS_MASK DesiredAccess
,
14320 _In_ ULONG DesiredShareAccess
,
14321 _Inout_ PFILE_OBJECT FileObject
,
14322 _Out_ PSHARE_ACCESS ShareAccess
,
14323 _In_ PBOOLEAN WritePermission
);
14327 IoSizeofWorkItem(VOID
);
14331 IoInitializeWorkItem(
14332 _In_ PVOID IoObject
,
14333 _Out_ PIO_WORKITEM IoWorkItem
);
14337 IoUninitializeWorkItem(
14338 _Inout_ PIO_WORKITEM IoWorkItem
);
14340 _IRQL_requires_max_(DISPATCH_LEVEL
)
14344 _Inout_ PIO_WORKITEM IoWorkItem
,
14345 _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
14346 _In_ WORK_QUEUE_TYPE QueueType
,
14347 _In_opt_ __drv_aliasesMem PVOID Context
);
14351 IoGetIoPriorityHint(
14356 IoSetIoPriorityHint(
14358 _In_ IO_PRIORITY_HINT PriorityHint
);
14362 IoAllocateSfioStreamIdentifier(
14363 _In_ PFILE_OBJECT FileObject
,
14365 _In_ PVOID Signature
,
14366 _Out_ PVOID
*StreamIdentifier
);
14370 IoGetSfioStreamIdentifier(
14371 _In_ PFILE_OBJECT FileObject
,
14372 _In_ PVOID Signature
);
14376 IoFreeSfioStreamIdentifier(
14377 _In_ PFILE_OBJECT FileObject
,
14378 _In_ PVOID Signature
);
14380 _IRQL_requires_max_(DISPATCH_LEVEL
)
14381 _Must_inspect_result_
14385 IoRequestDeviceEjectEx(
14386 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
14387 _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback
,
14388 _In_opt_ PVOID Context
,
14389 _In_opt_ PDRIVER_OBJECT DriverObject
);
14391 _IRQL_requires_max_(PASSIVE_LEVEL
)
14392 _Must_inspect_result_
14396 IoSetDevicePropertyData(
14397 _In_ PDEVICE_OBJECT Pdo
,
14398 _In_ CONST DEVPROPKEY
*PropertyKey
,
14401 _In_ DEVPROPTYPE Type
,
14403 _In_opt_ PVOID Data
);
14405 _IRQL_requires_max_(PASSIVE_LEVEL
)
14406 _Must_inspect_result_
14410 IoGetDevicePropertyData(
14411 _In_ PDEVICE_OBJECT Pdo
,
14412 _In_ CONST DEVPROPKEY
*PropertyKey
,
14414 _Reserved_ ULONG Flags
,
14417 _Out_ PULONG RequiredSize
,
14418 _Out_ PDEVPROPTYPE Type
);
14420 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14422 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
14424 #if (NTDDI_VERSION >= NTDDI_WS08)
14425 _IRQL_requires_max_(PASSIVE_LEVEL
)
14426 _Must_inspect_result_
14430 IoReplacePartitionUnit(
14431 _In_ PDEVICE_OBJECT TargetPdo
,
14432 _In_ PDEVICE_OBJECT SparePdo
,
14436 #if (NTDDI_VERSION >= NTDDI_WIN7)
14441 IoGetAffinityInterrupt(
14442 _In_ PKINTERRUPT InterruptObject
,
14443 _Out_ PGROUP_AFFINITY GroupAffinity
);
14447 IoGetContainerInformation(
14448 _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass
,
14449 _In_opt_ PVOID ContainerObject
,
14450 _Inout_updates_bytes_opt_(BufferLength
) PVOID Buffer
,
14451 _In_ ULONG BufferLength
);
14455 IoRegisterContainerNotification(
14456 _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
14457 _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
14458 _In_reads_bytes_opt_(NotificationInformationLength
) PVOID NotificationInformation
,
14459 _In_ ULONG NotificationInformationLength
,
14460 _Out_ PVOID CallbackRegistration
);
14464 IoUnregisterContainerNotification(
14465 _In_ PVOID CallbackRegistration
);
14467 _IRQL_requires_max_(PASSIVE_LEVEL
)
14468 __drv_freesMem(Pool
)
14472 IoUnregisterPlugPlayNotificationEx(
14473 _In_ PVOID NotificationEntry
);
14475 _IRQL_requires_max_(PASSIVE_LEVEL
)
14476 _Must_inspect_result_
14480 IoGetDeviceNumaNode(
14481 _In_ PDEVICE_OBJECT Pdo
,
14482 _Out_ PUSHORT NodeNumber
);
14484 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14486 #if defined(_WIN64)
14490 IoWMIDeviceObjectToProviderId(
14491 _In_ PDEVICE_OBJECT DeviceObject
);
14493 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
14499 * IN CCHAR StackSize)
14501 #define IoSizeOfIrp(_StackSize) \
14502 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
14506 IoSkipCurrentIrpStackLocation(
14509 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
14510 Irp
->CurrentLocation
++;
14511 #ifdef NONAMELESSUNION
14512 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
++;
14514 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
14520 IoSetNextIrpStackLocation(
14523 ASSERT(Irp
->CurrentLocation
> 0);
14524 Irp
->CurrentLocation
--;
14525 #ifdef NONAMELESSUNION
14526 Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
--;
14528 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
14535 IoGetNextIrpStackLocation(
14538 ASSERT(Irp
->CurrentLocation
> 0);
14539 #ifdef NONAMELESSUNION
14540 return ((Irp
)->Tail
.Overlay
.s
.u
.CurrentStackLocation
- 1 );
14542 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
14546 _IRQL_requires_max_(DISPATCH_LEVEL
)
14549 IoSetCompletionRoutine(
14551 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
14552 _In_opt_ __drv_aliasesMem PVOID Context
,
14553 _In_ BOOLEAN InvokeOnSuccess
,
14554 _In_ BOOLEAN InvokeOnError
,
14555 _In_ BOOLEAN InvokeOnCancel
)
14557 PIO_STACK_LOCATION irpSp
;
14558 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
14559 irpSp
= IoGetNextIrpStackLocation(Irp
);
14560 irpSp
->CompletionRoutine
= CompletionRoutine
;
14561 irpSp
->Context
= Context
;
14562 irpSp
->Control
= 0;
14564 if (InvokeOnSuccess
) {
14565 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
14568 if (InvokeOnError
) {
14569 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
14572 if (InvokeOnCancel
) {
14573 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
14577 _IRQL_requires_max_(DISPATCH_LEVEL
)
14581 IoSetCancelRoutine(
14583 _In_opt_ PDRIVER_CANCEL CancelRoutine
)
14585 return (PDRIVER_CANCEL
)(ULONG_PTR
) InterlockedExchangePointer((PVOID
*)&(Irp
)->CancelRoutine
, (PVOID
)(ULONG_PTR
)(CancelRoutine
));
14591 _Inout_ PDEVICE_OBJECT DeviceObject
,
14593 _In_opt_ __drv_aliasesMem PVOID Context
)
14595 KeInsertQueueDpc(&DeviceObject
->Dpc
, Irp
, Context
);
14600 * IoReleaseRemoveLock(
14601 * IN PIO_REMOVE_LOCK RemoveLock,
14604 #define IoReleaseRemoveLock(_RemoveLock, \
14606 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
14610 * IoReleaseRemoveLockAndWait(
14611 * IN PIO_REMOVE_LOCK RemoveLock,
14614 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
14616 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
14618 #if defined(_WIN64)
14619 _IRQL_requires_max_(DISPATCH_LEVEL
)
14623 _In_opt_ PIRP Irp
);
14626 #define PLUGPLAY_REGKEY_DEVICE 1
14627 #define PLUGPLAY_REGKEY_DRIVER 2
14628 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
14633 IoGetCurrentIrpStackLocation(
14636 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
14637 #ifdef NONAMELESSUNION
14638 return Irp
->Tail
.Overlay
.s
.u
.CurrentStackLocation
;
14640 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
14649 IoGetCurrentIrpStackLocation((Irp
))->Control
|= SL_PENDING_RETURNED
;
14654 * IoIsErrorUserInduced(
14655 * IN NTSTATUS Status);
14657 #define IoIsErrorUserInduced(Status) \
14658 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
14659 ((Status) == STATUS_IO_TIMEOUT) || \
14660 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
14661 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
14662 ((Status) == STATUS_VERIFY_REQUIRED) || \
14663 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
14664 ((Status) == STATUS_WRONG_VOLUME)))
14667 * IoInitializeRemoveLock(
14668 * IN PIO_REMOVE_LOCK Lock,
14669 * IN ULONG AllocateTag,
14670 * IN ULONG MaxLockedMinutes,
14671 * IN ULONG HighWatermark)
14673 #define IoInitializeRemoveLock( \
14674 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
14675 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
14676 HighWatermark, sizeof(IO_REMOVE_LOCK))
14680 IoInitializeDpcRequest(
14681 _In_ PDEVICE_OBJECT DeviceObject
,
14682 _In_ PIO_DPC_ROUTINE DpcRoutine
)
14685 #pragma warning(push)
14686 #pragma warning(disable:28024)
14688 KeInitializeDpc(&DeviceObject
->Dpc
,
14689 (PKDEFERRED_ROUTINE
) DpcRoutine
,
14692 #pragma warning(pop)
14696 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
14700 * IoGetFunctionCodeFromCtlCode(
14701 * IN ULONG ControlCode)
14703 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
14704 (((_ControlCode) >> 2) & 0x00000FFF)
14708 IoCopyCurrentIrpStackLocationToNext(
14711 PIO_STACK_LOCATION irpSp
;
14712 PIO_STACK_LOCATION nextIrpSp
;
14713 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
14714 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
14715 RtlCopyMemory(nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
14716 nextIrpSp
->Control
= 0;
14719 _IRQL_requires_max_(APC_LEVEL
)
14724 _Out_ PULONG_PTR LowLimit
,
14725 _Out_ PULONG_PTR HighLimit
);
14727 _IRQL_requires_max_(APC_LEVEL
)
14730 IoGetRemainingStackSize(VOID
)
14732 ULONG_PTR End
, Begin
;
14735 IoGetStackLimits(&Begin
, &End
);
14736 Result
= (ULONG_PTR
)(&End
) - Begin
;
14740 #if (NTDDI_VERSION >= NTDDI_WS03)
14743 IoInitializeThreadedDpcRequest(
14744 _In_ PDEVICE_OBJECT DeviceObject
,
14745 _In_ PIO_DPC_ROUTINE DpcRoutine
)
14748 #pragma warning(push)
14749 #pragma warning(disable:28024)
14750 #pragma warning(disable:28128)
14752 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
14753 (PKDEFERRED_ROUTINE
) DpcRoutine
,
14756 #pragma warning(pop)
14761 /******************************************************************************
14762 * Power Management Support Functions *
14763 ******************************************************************************/
14765 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
14767 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14769 _IRQL_requires_max_(DISPATCH_LEVEL
)
14774 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14775 _Inout_ __drv_aliasesMem
struct _IRP
*Irp
);
14777 _IRQL_requires_max_(APC_LEVEL
)
14781 PoRegisterDeviceForIdleDetection(
14782 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14783 _In_ ULONG ConservationIdleTime
,
14784 _In_ ULONG PerformanceIdleTime
,
14785 _In_ DEVICE_POWER_STATE State
);
14787 _IRQL_requires_max_(APC_LEVEL
)
14791 PoRegisterSystemState(
14792 _Inout_opt_ PVOID StateHandle
,
14793 _In_ EXECUTION_STATE Flags
);
14795 _IRQL_requires_max_(DISPATCH_LEVEL
)
14800 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14801 _In_ UCHAR MinorFunction
,
14802 _In_ POWER_STATE PowerState
,
14803 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
,
14804 _In_opt_ __drv_aliasesMem PVOID Context
,
14805 _Outptr_opt_
struct _IRP
**Irp
);
14807 _IRQL_requires_max_(DISPATCH_LEVEL
)
14812 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
14813 _In_ POWER_STATE_TYPE Type
,
14814 _In_ POWER_STATE State
);
14816 _IRQL_requires_max_(DISPATCH_LEVEL
)
14821 _In_ EXECUTION_STATE Flags
);
14823 _IRQL_requires_max_(DISPATCH_LEVEL
)
14827 PoStartNextPowerIrp(
14828 _Inout_
struct _IRP
*Irp
);
14830 _IRQL_requires_max_(APC_LEVEL
)
14834 PoUnregisterSystemState(
14835 _Inout_ PVOID StateHandle
);
14840 PoRequestShutdownEvent(
14843 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14845 #if (NTDDI_VERSION >= NTDDI_VISTA)
14847 _IRQL_requires_max_(DISPATCH_LEVEL
)
14852 _Inout_
struct _IRP
*Irp
);
14854 _IRQL_requires_max_(DISPATCH_LEVEL
)
14859 _In_
struct _IRP
*Irp
);
14861 _IRQL_requires_max_(APC_LEVEL
)
14865 PoRegisterPowerSettingCallback(
14866 _In_opt_ PDEVICE_OBJECT DeviceObject
,
14867 _In_ LPCGUID SettingGuid
,
14868 _In_ PPOWER_SETTING_CALLBACK Callback
,
14869 _In_opt_ PVOID Context
,
14870 _Outptr_opt_ PVOID
*Handle
);
14872 _IRQL_requires_max_(APC_LEVEL
)
14876 PoUnregisterPowerSettingCallback(
14877 _Inout_ PVOID Handle
);
14879 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14881 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14886 _Inout_ PULONG IdlePointer
);
14887 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14889 #if (NTDDI_VERSION >= NTDDI_WIN7)
14895 _Inout_ PULONG IdlePointer
);
14901 _Inout_ PULONG IdlePointer
);
14903 _IRQL_requires_max_(DISPATCH_LEVEL
)
14907 PoQueryWatchdogTime(
14908 _In_ PDEVICE_OBJECT Pdo
,
14909 _Out_ PULONG SecondsRemaining
);
14911 _IRQL_requires_max_(APC_LEVEL
)
14915 PoDeletePowerRequest(
14916 _Inout_ PVOID PowerRequest
);
14918 _IRQL_requires_max_(DISPATCH_LEVEL
)
14923 _Inout_ PVOID PowerRequest
,
14924 _In_ POWER_REQUEST_TYPE Type
);
14926 _IRQL_requires_max_(DISPATCH_LEVEL
)
14930 PoClearPowerRequest(
14931 _Inout_ PVOID PowerRequest
,
14932 _In_ POWER_REQUEST_TYPE Type
);
14934 _IRQL_requires_max_(APC_LEVEL
)
14938 PoCreatePowerRequest(
14939 _Outptr_ PVOID
*PowerRequest
,
14940 _In_ PDEVICE_OBJECT DeviceObject
,
14941 _In_opt_ PCOUNTED_REASON_CONTEXT Context
);
14943 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14945 /******************************************************************************
14946 * Executive Functions *
14947 ******************************************************************************/
14949 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
14950 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
14951 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
14953 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
14954 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
14955 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
14956 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
14958 #define ExInitializeSListHead InitializeSListHead
14960 #if defined(_NTHAL_) && defined(_X86_)
14965 ExiAcquireFastMutex(
14966 IN OUT PFAST_MUTEX FastMutex
);
14971 ExiReleaseFastMutex(
14972 IN OUT PFAST_MUTEX FastMutex
);
14977 ExiTryToAcquireFastMutex(
14978 IN OUT PFAST_MUTEX FastMutex
);
14980 #define ExAcquireFastMutex ExiAcquireFastMutex
14981 #define ExReleaseFastMutex ExiReleaseFastMutex
14982 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
14986 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14988 _IRQL_raises_(APC_LEVEL
)
14989 _IRQL_saves_global_(OldIrql
, FastMutex
)
14993 ExAcquireFastMutex(
14994 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
14995 PFAST_MUTEX FastMutex
);
14997 _IRQL_requires_(APC_LEVEL
)
14998 _IRQL_restores_global_(OldIrql
, FastMutex
)
15002 ExReleaseFastMutex(
15003 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15004 PFAST_MUTEX FastMutex
);
15006 _Must_inspect_result_
15007 _Success_(return!=FALSE
)
15008 _IRQL_raises_(APC_LEVEL
)
15009 _IRQL_saves_global_(OldIrql
, FastMutex
)
15013 ExTryToAcquireFastMutex(
15014 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15015 PFAST_MUTEX FastMutex
);
15017 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15019 #endif /* defined(_NTHAL_) && defined(_X86_) */
15022 #define ExInterlockedAddUlong ExfInterlockedAddUlong
15023 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
15024 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
15025 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
15026 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
15027 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
15028 #endif /* defined(_X86_) */
15032 #ifdef _WIN2K_COMPAT_SLIST_USAGE
15037 ExInterlockedPushEntrySList(
15038 _Inout_ PSLIST_HEADER SListHead
,
15039 _Inout_ __drv_aliasesMem PSLIST_ENTRY SListEntry
,
15040 _Inout_opt_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15045 ExInterlockedPopEntrySList(
15046 _Inout_ PSLIST_HEADER SListHead
,
15047 _Inout_opt_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15049 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
15051 #define ExInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
15052 InterlockedPushEntrySList(SListHead, SListEntry)
15054 #define ExInterlockedPopEntrySList(SListHead, Lock) \
15055 InterlockedPopEntrySList(SListHead)
15057 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
15062 ExInterlockedFlushSList(
15063 _Inout_ PSLIST_HEADER SListHead
);
15065 #ifdef NONAMELESSUNION
15066 #define ExQueryDepthSList(SListHead) (SListHead)->s.Depth
15068 #define ExQueryDepthSList(SListHead) (SListHead)->Depth
15075 ExpInterlockedPushEntrySList(
15076 _Inout_ PSLIST_HEADER SListHead
,
15077 _Inout_ __drv_aliasesMem PSLIST_ENTRY SListEntry
);
15081 ExpInterlockedPopEntrySList(
15082 _Inout_ PSLIST_HEADER SListHead
);
15086 ExpInterlockedFlushSList(
15087 _Inout_ PSLIST_HEADER SListHead
);
15089 #if !defined(_NTSYSTEM_) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
15092 ExQueryDepthSList(_In_ PSLIST_HEADER SListHead
);
15096 ExQueryDepthSList(_In_ PSLIST_HEADER SListHead
)
15099 return (USHORT
)(SListHead
->Alignment
& 0xffff);
15100 #else /* !_WIN64 */
15101 return (USHORT
)SListHead
->Depth
;
15102 #endif /* _WIN64 */
15106 #define ExInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
15107 ExpInterlockedPushEntrySList(SListHead, SListEntry)
15109 #define ExInterlockedPopEntrySList(SListHead, Lock) \
15110 ExpInterlockedPopEntrySList(SListHead)
15112 #define ExInterlockedFlushSList(SListHead) \
15113 ExpInterlockedFlushSList(SListHead)
15118 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
15120 _IRQL_requires_max_(APC_LEVEL
)
15124 ExAllocateFromPagedLookasideList(
15125 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
15127 _IRQL_requires_max_(APC_LEVEL
)
15131 ExFreeToPagedLookasideList(
15132 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
15135 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
15137 _IRQL_requires_max_(APC_LEVEL
)
15140 ExAllocateFromPagedLookasideList(
15141 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
)
15145 Lookaside
->L
.TotalAllocates
++;
15146 #ifdef NONAMELESSUNION
15147 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15148 if (Entry
== NULL
) {
15149 Lookaside
->L
.u2
.AllocateMisses
++;
15150 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
15154 #else /* NONAMELESSUNION */
15155 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15156 if (Entry
== NULL
) {
15157 Lookaside
->L
.AllocateMisses
++;
15158 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
15162 #endif /* NONAMELESSUNION */
15166 _IRQL_requires_max_(APC_LEVEL
)
15169 ExFreeToPagedLookasideList(
15170 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
,
15173 Lookaside
->L
.TotalFrees
++;
15174 #ifdef NONAMELESSUNION
15175 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
15176 Lookaside
->L
.u3
.FreeMisses
++;
15177 (Lookaside
->L
.u5
.Free
)(Entry
);
15179 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
15181 #else /* NONAMELESSUNION */
15182 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15183 Lookaside
->L
.FreeMisses
++;
15184 (Lookaside
->L
.Free
)(Entry
);
15186 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15188 #endif /* NONAMELESSUNION */
15191 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
15194 /* ERESOURCE_THREAD
15195 * ExGetCurrentResourceThread(
15198 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
15200 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
15203 * ExInitializeWorkItem(
15204 * IN PWORK_QUEUE_ITEM Item,
15205 * IN PWORKER_THREAD_ROUTINE Routine,
15206 * IN PVOID Context)
15208 #define ExInitializeWorkItem(Item, Routine, Context) \
15210 (Item)->WorkerRoutine = Routine; \
15211 (Item)->Parameter = Context; \
15212 (Item)->List.Flink = NULL; \
15217 ExInitializeFastMutex(
15218 _Out_ PFAST_MUTEX FastMutex
)
15220 FastMutex
->Count
= FM_LOCK_BIT
;
15221 FastMutex
->Owner
= NULL
;
15222 FastMutex
->Contention
= 0;
15223 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
15228 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15229 _IRQL_requires_max_(APC_LEVEL
)
15230 _Requires_lock_held_(_Global_critical_region_
)
15234 ExAcquireFastMutexUnsafe(
15235 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15236 PFAST_MUTEX FastMutex
);
15238 _IRQL_requires_max_(APC_LEVEL
)
15239 _Requires_lock_held_(_Global_critical_region_
)
15243 ExReleaseFastMutexUnsafe(
15244 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15245 PFAST_MUTEX FastMutex
);
15247 _Requires_lock_held_(_Global_critical_region_
)
15248 _Requires_lock_not_held_(*Resource
)
15249 _When_(Wait
!=0, _Acquires_exclusive_lock_(*Resource
))
15250 _IRQL_requires_max_(APC_LEVEL
)
15251 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15252 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15256 ExAcquireResourceExclusiveLite(
15257 _Inout_ PERESOURCE Resource
,
15258 _In_ _Literal_ BOOLEAN Wait
);
15260 _IRQL_requires_max_(APC_LEVEL
)
15261 _Requires_lock_held_(_Global_critical_region_
)
15262 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15263 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15267 ExAcquireResourceSharedLite(
15268 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15269 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
15270 PERESOURCE Resource
,
15271 _In_ BOOLEAN Wait
);
15273 _IRQL_requires_max_(APC_LEVEL
)
15274 _Requires_lock_held_(_Global_critical_region_
)
15275 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15276 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15280 ExAcquireSharedStarveExclusive(
15281 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15282 _When_(return!=0, _Acquires_shared_lock_(*_Curr_
))
15283 PERESOURCE Resource
,
15284 _In_ BOOLEAN Wait
);
15286 _IRQL_requires_max_(APC_LEVEL
)
15287 _Requires_lock_held_(_Global_critical_region_
)
15288 _When_(Wait
!=0, _Post_satisfies_(return == 1))
15289 _When_(Wait
==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_
)
15293 ExAcquireSharedWaitForExclusive(
15294 _Inout_
_Requires_lock_not_held_(*_Curr_
)
15295 _When_(return!=0, _Acquires_lock_(*_Curr_
))
15296 PERESOURCE Resource
,
15297 _In_ BOOLEAN Wait
);
15299 __drv_preferredFunction("ExAllocatePoolWithTag",
15300 "No tag interferes with debugging.")
15301 __drv_allocatesMem(Mem
)
15302 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15303 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15304 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15305 __drv_reportError("Must succeed pool allocations are forbidden. "
15306 "Allocation failures cause a system crash"))
15307 _When_((PoolType
& (NonPagedPoolMustSucceed
|
15308 POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15309 _Post_maybenull_ _Must_inspect_result_
)
15310 _When_((PoolType
& (NonPagedPoolMustSucceed
|
15311 POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15313 _Post_writable_byte_size_(NumberOfBytes
)
15318 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15319 _In_ SIZE_T NumberOfBytes
);
15321 __drv_preferredFunction("ExAllocatePoolWithQuotaTag",
15322 "No tag interferes with debugging.")
15323 __drv_allocatesMem(Mem
)
15324 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15325 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15326 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15327 __drv_reportError("Must succeed pool allocations are forbidden. "
15328 "Allocation failures cause a system crash"))
15329 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
15330 _Post_maybenull_ _Must_inspect_result_
)
15331 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
15332 _Post_writable_byte_size_(NumberOfBytes
)
15336 ExAllocatePoolWithQuota(
15337 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15338 _In_ SIZE_T NumberOfBytes
);
15340 __drv_allocatesMem(Mem
)
15341 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15342 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15343 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15344 __drv_reportError("Must succeed pool allocations are forbidden. "
15345 "Allocation failures cause a system crash"))
15346 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) != 0,
15347 _Post_maybenull_ _Must_inspect_result_
)
15348 _When_((PoolType
& POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
) == 0, _Post_notnull_
)
15349 _Post_writable_byte_size_(NumberOfBytes
)
15353 ExAllocatePoolWithQuotaTag(
15354 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
15355 _In_ SIZE_T NumberOfBytes
,
15358 #ifndef POOL_TAGGING
15359 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
15362 __drv_allocatesMem(Mem
)
15363 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15364 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15365 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15366 __drv_reportError("Must succeed pool allocations are forbidden. "
15367 "Allocation failures cause a system crash"))
15368 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15369 _Post_maybenull_ _Must_inspect_result_
)
15370 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15372 _Post_writable_byte_size_(NumberOfBytes
)
15373 _Function_class_(ALLOCATE_FUNCTION
)
15377 ExAllocatePoolWithTag(
15378 _In_
__drv_strictTypeMatch(__drv_typeExpr
) POOL_TYPE PoolType
,
15379 _In_ SIZE_T NumberOfBytes
,
15382 #ifndef POOL_TAGGING
15383 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
15386 __drv_allocatesMem(Mem
)
15387 _When_((PoolType
& PagedPool
) != 0, _IRQL_requires_max_(APC_LEVEL
))
15388 _When_((PoolType
& PagedPool
) == 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
15389 _When_((PoolType
& NonPagedPoolMustSucceed
) != 0,
15390 __drv_reportError("Must succeed pool allocations are forbidden. "
15391 "Allocation failures cause a system crash"))
15392 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) == 0,
15393 _Post_maybenull_ _Must_inspect_result_
)
15394 _When_((PoolType
& (NonPagedPoolMustSucceed
| POOL_RAISE_IF_ALLOCATION_FAILURE
)) != 0,
15396 _Post_writable_byte_size_(NumberOfBytes
)
15400 ExAllocatePoolWithTagPriority(
15401 _In_
__drv_strictTypeMatch(__drv_typeCond
) POOL_TYPE PoolType
,
15402 _In_ SIZE_T NumberOfBytes
,
15404 _In_
__drv_strictTypeMatch(__drv_typeExpr
) EX_POOL_PRIORITY Priority
);
15406 _IRQL_requires_max_(DISPATCH_LEVEL
)
15410 ExConvertExclusiveToSharedLite(
15411 _Inout_
_Requires_lock_held_(*_Curr_
) PERESOURCE Resource
);
15413 _IRQL_requires_max_(APC_LEVEL
)
15418 _Outptr_ PCALLBACK_OBJECT
*CallbackObject
,
15419 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
15420 _In_ BOOLEAN Create
,
15421 _In_ BOOLEAN AllowMultipleCallbacks
);
15426 ExDeleteNPagedLookasideList(
15427 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
);
15429 _IRQL_requires_max_(APC_LEVEL
)
15433 ExDeletePagedLookasideList(
15434 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside
);
15436 _IRQL_requires_max_(DISPATCH_LEVEL
)
15440 ExDeleteResourceLite(
15441 _Inout_ PERESOURCE Resource
);
15443 _IRQL_requires_max_(DISPATCH_LEVEL
)
15444 _Function_class_(FREE_FUNCTION
)
15449 _Pre_notnull_
__drv_freesMem(Mem
) PVOID P
);
15451 _IRQL_requires_max_(DISPATCH_LEVEL
)
15456 _Pre_notnull_
__drv_freesMem(Mem
) PVOID P
,
15459 _IRQL_requires_max_(DISPATCH_LEVEL
)
15463 ExGetExclusiveWaiterCount(
15464 _In_ PERESOURCE Resource
);
15466 _IRQL_requires_max_(DISPATCH_LEVEL
)
15470 ExGetPreviousMode(VOID
);
15472 _IRQL_requires_max_(DISPATCH_LEVEL
)
15476 ExGetSharedWaiterCount(
15477 _In_ PERESOURCE Resource
);
15479 _IRQL_requires_max_(DISPATCH_LEVEL
)
15483 ExInitializeNPagedLookasideList(
15484 _Out_ PNPAGED_LOOKASIDE_LIST Lookaside
,
15485 _In_opt_ PALLOCATE_FUNCTION Allocate
,
15486 _In_opt_ PFREE_FUNCTION Free
,
15490 _In_ USHORT Depth
);
15492 _IRQL_requires_max_(APC_LEVEL
)
15496 ExInitializePagedLookasideList(
15497 _Out_ PPAGED_LOOKASIDE_LIST Lookaside
,
15498 _In_opt_ PALLOCATE_FUNCTION Allocate
,
15499 _In_opt_ PFREE_FUNCTION Free
,
15503 _In_ USHORT Depth
);
15505 _IRQL_requires_max_(DISPATCH_LEVEL
)
15509 ExInitializeResourceLite(
15510 _Out_ PERESOURCE Resource
);
15515 ExInterlockedAddLargeInteger(
15516 _Inout_ PLARGE_INTEGER Addend
,
15517 _In_ LARGE_INTEGER Increment
,
15518 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15520 #if !defined(_M_IX86)
15521 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
15522 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
15524 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
15525 (VOID)_InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
15531 ExInterlockedAddUlong(
15532 _Inout_ PULONG Addend
,
15533 _In_ ULONG Increment
,
15534 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15536 #if defined(_M_IX86)
15541 ExfInterlockedCompareExchange64(
15542 _Inout_ _Interlocked_operand_ LONGLONG
volatile *Destination
,
15543 _In_ PLONGLONG Exchange
,
15544 _In_ PLONGLONG Comperand
);
15546 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
15547 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
15551 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
15552 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
15554 #endif /* defined(_M_IX86) */
15559 ExInterlockedInsertHeadList(
15560 _Inout_ PLIST_ENTRY ListHead
,
15561 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
15562 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15567 ExInterlockedInsertTailList(
15568 _Inout_ PLIST_ENTRY ListHead
,
15569 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry
,
15570 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15575 ExInterlockedPopEntryList(
15576 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
15577 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15582 ExInterlockedPushEntryList(
15583 _Inout_ PSINGLE_LIST_ENTRY ListHead
,
15584 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry
,
15585 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15590 ExInterlockedRemoveHeadList(
15591 _Inout_ PLIST_ENTRY ListHead
,
15592 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
15594 _IRQL_requires_max_(PASSIVE_LEVEL
)
15598 ExIsProcessorFeaturePresent(
15599 _In_ ULONG ProcessorFeature
);
15601 _IRQL_requires_max_(DISPATCH_LEVEL
)
15605 ExIsResourceAcquiredExclusiveLite(
15606 _In_ PERESOURCE Resource
);
15608 _IRQL_requires_max_(DISPATCH_LEVEL
)
15612 ExIsResourceAcquiredSharedLite(
15613 _In_ PERESOURCE Resource
);
15615 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
15620 ExLocalTimeToSystemTime(
15621 _In_ PLARGE_INTEGER LocalTime
,
15622 _Out_ PLARGE_INTEGER SystemTime
);
15624 _IRQL_requires_max_(DISPATCH_LEVEL
)
15629 _In_ PCALLBACK_OBJECT CallbackObject
,
15630 _In_opt_ PVOID Argument1
,
15631 _In_opt_ PVOID Argument2
);
15633 _IRQL_requires_max_(DISPATCH_LEVEL
)
15638 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
,
15639 __drv_strictTypeMatch(__drv_typeExpr
) _In_ WORK_QUEUE_TYPE QueueType
);
15641 _IRQL_requires_max_(APC_LEVEL
)
15647 _In_ NTSTATUS Status
);
15649 _IRQL_requires_max_(APC_LEVEL
)
15653 ExRegisterCallback(
15654 _Inout_ PCALLBACK_OBJECT CallbackObject
,
15655 _In_ PCALLBACK_FUNCTION CallbackFunction
,
15656 _In_opt_ PVOID CallbackContext
);
15658 _IRQL_requires_max_(DISPATCH_LEVEL
)
15662 ExReinitializeResourceLite(
15663 _Inout_ PERESOURCE Resource
);
15665 _IRQL_requires_max_(DISPATCH_LEVEL
)
15666 _Requires_lock_held_(_Global_critical_region_
)
15670 ExReleaseResourceForThreadLite(
15671 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15672 PERESOURCE Resource
,
15673 _In_ ERESOURCE_THREAD ResourceThreadId
);
15675 _Requires_lock_held_(_Global_critical_region_
)
15676 _Requires_lock_held_(*Resource
)
15677 _Releases_lock_(*Resource
)
15678 _IRQL_requires_max_(DISPATCH_LEVEL
)
15682 ExReleaseResourceLite(
15683 _Inout_ PERESOURCE Resource
);
15685 _IRQL_requires_max_(DISPATCH_LEVEL
)
15689 ExSetResourceOwnerPointer(
15690 _Inout_ PERESOURCE Resource
,
15691 _In_ PVOID OwnerPointer
);
15693 _IRQL_requires_max_(APC_LEVEL
)
15697 ExSetTimerResolution(
15698 _In_ ULONG DesiredTime
,
15699 _In_ BOOLEAN SetResolution
);
15704 ExSystemTimeToLocalTime(
15705 _In_ PLARGE_INTEGER SystemTime
,
15706 _Out_ PLARGE_INTEGER LocalTime
);
15708 _IRQL_requires_max_(APC_LEVEL
)
15712 ExUnregisterCallback(
15713 _Inout_ PVOID CbRegistration
);
15715 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15717 #if (NTDDI_VERSION >= NTDDI_WINXP)
15719 _Must_inspect_result_
15720 _Post_satisfies_(return == 0 || return == 1)
15724 ExAcquireRundownProtection(
15725 _Inout_ PEX_RUNDOWN_REF RunRef
);
15730 ExInitializeRundownProtection(
15731 _Out_ PEX_RUNDOWN_REF RunRef
);
15736 ExReInitializeRundownProtection(
15737 _Inout_ PEX_RUNDOWN_REF RunRef
);
15742 ExReleaseRundownProtection(
15743 _Inout_ PEX_RUNDOWN_REF RunRef
);
15748 ExRundownCompleted(
15749 _Out_ PEX_RUNDOWN_REF RunRef
);
15755 __drv_strictTypeMatch(__drv_typeExpr
) _In_ SUITE_TYPE SuiteType
);
15760 ExWaitForRundownProtectionRelease(
15761 _Inout_ PEX_RUNDOWN_REF RunRef
);
15762 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
15764 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
15766 _Must_inspect_result_
15767 _Post_satisfies_(return == 0 || return == 1)
15771 ExAcquireRundownProtectionEx(
15772 _Inout_ PEX_RUNDOWN_REF RunRef
,
15778 ExReleaseRundownProtectionEx(
15779 _Inout_ PEX_RUNDOWN_REF RunRef
,
15782 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
15784 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
15786 _Must_inspect_result_
15787 _IRQL_requires_max_(APC_LEVEL
)
15789 PEX_RUNDOWN_REF_CACHE_AWARE
15791 ExAllocateCacheAwareRundownProtection(
15792 __drv_strictTypeMatch(__drv_typeExpr
) _In_ POOL_TYPE PoolType
,
15793 _In_ ULONG PoolTag
);
15795 _IRQL_requires_max_(APC_LEVEL
)
15799 ExSizeOfRundownProtectionCacheAware(VOID
);
15801 _IRQL_requires_max_(APC_LEVEL
)
15802 _Acquires_lock_(_Global_critical_region_
)
15806 ExEnterCriticalRegionAndAcquireResourceShared(
15807 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_shared_lock_(*_Curr_
)
15808 PERESOURCE Resource
);
15810 _IRQL_requires_max_(APC_LEVEL
)
15811 _Acquires_lock_(_Global_critical_region_
)
15815 ExEnterCriticalRegionAndAcquireResourceExclusive(
15816 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_exclusive_lock_(*_Curr_
)
15817 PERESOURCE Resource
);
15819 _IRQL_requires_max_(APC_LEVEL
)
15820 _Acquires_lock_(_Global_critical_region_
)
15824 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
15825 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
)
15826 PERESOURCE Resource
);
15828 _IRQL_requires_max_(DISPATCH_LEVEL
)
15829 _Releases_lock_(_Global_critical_region_
)
15833 ExReleaseResourceAndLeaveCriticalRegion(
15834 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
)
15835 PERESOURCE Resource
);
15837 _IRQL_requires_max_(APC_LEVEL
)
15841 ExInitializeRundownProtectionCacheAware(
15842 _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15843 _In_ SIZE_T RunRefSize
);
15845 _IRQL_requires_max_(APC_LEVEL
)
15849 ExFreeCacheAwareRundownProtection(
15850 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15852 _Must_inspect_result_
15853 _Post_satisfies_(return == 0 || return == 1)
15857 ExAcquireRundownProtectionCacheAware(
15858 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15863 ExReleaseRundownProtectionCacheAware(
15864 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15866 _Must_inspect_result_
15867 _Post_satisfies_(return == 0 || return == 1)
15871 ExAcquireRundownProtectionCacheAwareEx(
15872 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
15878 ExReleaseRundownProtectionCacheAwareEx(
15879 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
15885 ExWaitForRundownProtectionReleaseCacheAware(
15886 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
15891 ExReInitializeRundownProtectionCacheAware(
15892 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15897 ExRundownCompletedCacheAware(
15898 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
15900 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
15902 #if (NTDDI_VERSION >= NTDDI_VISTA)
15904 _IRQL_requires_max_(DISPATCH_LEVEL
)
15908 ExInitializeLookasideListEx(
15909 _Out_ PLOOKASIDE_LIST_EX Lookaside
,
15910 _In_opt_ PALLOCATE_FUNCTION_EX Allocate
,
15911 _In_opt_ PFREE_FUNCTION_EX Free
,
15912 _In_ POOL_TYPE PoolType
,
15916 _In_ USHORT Depth
);
15918 _IRQL_requires_max_(DISPATCH_LEVEL
)
15922 ExDeleteLookasideListEx(
15923 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15925 _IRQL_requires_max_(DISPATCH_LEVEL
)
15929 ExFlushLookasideListEx(
15930 _Inout_ PLOOKASIDE_LIST_EX Lookaside
);
15933 #pragma warning(push)
15934 #pragma warning(disable:__WARNING_MEMORY_NOT_ACQUIRED)
15937 __drv_allocatesMem(Mem
)
15938 _Must_inspect_result_
15939 _IRQL_requires_max_(DISPATCH_LEVEL
)
15942 ExAllocateFromLookasideListEx(
15943 _Inout_ PLOOKASIDE_LIST_EX Lookaside
)
15947 Lookaside
->L
.TotalAllocates
+= 1;
15948 #ifdef NONAMELESSUNION
15949 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
15950 if (Entry
== NULL
) {
15951 Lookaside
->L
.u2
.AllocateMisses
+= 1;
15952 Entry
= (Lookaside
->L
.u4
.AllocateEx
)(Lookaside
->L
.Type
,
15957 #else /* NONAMELESSUNION */
15958 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
15959 if (Entry
== NULL
) {
15960 Lookaside
->L
.AllocateMisses
+= 1;
15961 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
15966 #endif /* NONAMELESSUNION */
15971 #pragma warning(pop)
15974 _IRQL_requires_max_(DISPATCH_LEVEL
)
15977 ExFreeToLookasideListEx(
15978 _Inout_ PLOOKASIDE_LIST_EX Lookaside
,
15979 _In_
__drv_freesMem(Entry
) PVOID Entry
)
15981 Lookaside
->L
.TotalFrees
+= 1;
15982 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
15983 Lookaside
->L
.FreeMisses
+= 1;
15984 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
15986 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
15991 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15993 #if (NTDDI_VERSION >= NTDDI_WIN7)
15995 _IRQL_requires_max_(DISPATCH_LEVEL
)
15999 ExSetResourceOwnerPointerEx(
16000 _Inout_ PERESOURCE Resource
,
16001 _In_ PVOID OwnerPointer
,
16004 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
16006 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
16008 __drv_allocatesMem(Mem
)
16009 _IRQL_requires_max_(DISPATCH_LEVEL
)
16011 _Post_writable_byte_size_(Lookaside
->L
.Size
)
16014 ExAllocateFromNPagedLookasideList(
16015 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
)
16019 Lookaside
->L
.TotalAllocates
++;
16020 #ifdef NONAMELESSUNION
16021 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
16022 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
,
16023 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
16025 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.u
.ListHead
);
16027 if (Entry
== NULL
) {
16028 Lookaside
->L
.u2
.AllocateMisses
++;
16029 Entry
= (Lookaside
->L
.u4
.Allocate
)(Lookaside
->L
.Type
,
16033 #else /* NONAMELESSUNION */
16034 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
16035 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
16036 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
16038 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
16040 if (Entry
== NULL
) {
16041 Lookaside
->L
.AllocateMisses
++;
16042 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
16046 #endif /* NONAMELESSUNION */
16050 _IRQL_requires_max_(DISPATCH_LEVEL
)
16053 ExFreeToNPagedLookasideList(
16054 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside
,
16055 _In_
__drv_freesMem(Mem
) PVOID Entry
)
16057 Lookaside
->L
.TotalFrees
++;
16058 #ifdef NONAMELESSUNION
16059 if (ExQueryDepthSList(&Lookaside
->L
.u
.ListHead
) >= Lookaside
->L
.Depth
) {
16060 Lookaside
->L
.u3
.FreeMisses
++;
16061 (Lookaside
->L
.u5
.Free
)(Entry
);
16063 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
16064 ExInterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
,
16065 (PSLIST_ENTRY
)Entry
,
16066 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
16068 InterlockedPushEntrySList(&Lookaside
->L
.u
.ListHead
, (PSLIST_ENTRY
)Entry
);
16071 #else /* NONAMELESSUNION */
16072 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
16073 Lookaside
->L
.FreeMisses
++;
16074 (Lookaside
->L
.Free
)(Entry
);
16076 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
16077 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
16078 (PSLIST_ENTRY
)Entry
,
16079 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
16081 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
16084 #endif /* NONAMELESSUNION */
16087 /******************************************************************************
16088 * Object Manager Functions *
16089 ******************************************************************************/
16091 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16092 _IRQL_requires_max_(DISPATCH_LEVEL
)
16096 ObfDereferenceObject(
16097 _In_ PVOID Object
);
16098 #define ObDereferenceObject ObfDereferenceObject
16100 _IRQL_requires_max_(APC_LEVEL
)
16104 ObGetObjectSecurity(
16106 _Out_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
16107 _Out_ PBOOLEAN MemoryAllocated
);
16109 _IRQL_requires_max_(DISPATCH_LEVEL
)
16113 ObfReferenceObject(
16114 _In_ PVOID Object
);
16115 #define ObReferenceObject ObfReferenceObject
16117 _IRQL_requires_max_(APC_LEVEL
)
16121 ObReferenceObjectByHandle(
16122 _In_ HANDLE Handle
,
16123 _In_ ACCESS_MASK DesiredAccess
,
16124 _In_opt_ POBJECT_TYPE ObjectType
,
16125 _In_ KPROCESSOR_MODE AccessMode
,
16126 _Out_ PVOID
*Object
,
16127 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
16129 _IRQL_requires_max_(DISPATCH_LEVEL
)
16133 ObReferenceObjectByPointer(
16135 _In_ ACCESS_MASK DesiredAccess
,
16136 _In_opt_ POBJECT_TYPE ObjectType
,
16137 _In_ KPROCESSOR_MODE AccessMode
);
16139 _IRQL_requires_max_(APC_LEVEL
)
16143 ObReleaseObjectSecurity(
16144 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
16145 _In_ BOOLEAN MemoryAllocated
);
16146 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16148 #if (NTDDI_VERSION >= NTDDI_VISTA)
16152 ObDereferenceObjectDeferDelete(
16153 _In_ PVOID Object
);
16156 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
16160 ObRegisterCallbacks(
16161 _In_ POB_CALLBACK_REGISTRATION CallbackRegistration
,
16162 _Outptr_ PVOID
*RegistrationHandle
);
16167 ObUnRegisterCallbacks(
16168 _In_ PVOID RegistrationHandle
);
16173 ObGetFilterVersion(VOID
);
16175 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
16177 #if (NTDDI_VERSION >= NTDDI_WIN7)
16178 _IRQL_requires_max_(APC_LEVEL
)
16182 ObReferenceObjectByHandleWithTag(
16183 _In_ HANDLE Handle
,
16184 _In_ ACCESS_MASK DesiredAccess
,
16185 _In_opt_ POBJECT_TYPE ObjectType
,
16186 _In_ KPROCESSOR_MODE AccessMode
,
16188 _Out_ PVOID
*Object
,
16189 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
);
16191 _IRQL_requires_max_(DISPATCH_LEVEL
)
16195 ObfReferenceObjectWithTag(
16199 _IRQL_requires_max_(DISPATCH_LEVEL
)
16203 ObReferenceObjectByPointerWithTag(
16205 _In_ ACCESS_MASK DesiredAccess
,
16206 _In_opt_ POBJECT_TYPE ObjectType
,
16207 _In_ KPROCESSOR_MODE AccessMode
,
16210 _IRQL_requires_max_(DISPATCH_LEVEL
)
16214 ObfDereferenceObjectWithTag(
16221 ObDereferenceObjectDeferDeleteWithTag(
16225 #define ObDereferenceObject ObfDereferenceObject
16226 #define ObReferenceObject ObfReferenceObject
16227 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
16228 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
16229 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
16231 /******************************************************************************
16232 * Process Manager Functions *
16233 ******************************************************************************/
16238 PsWrapApcWow64Thread(
16239 _Inout_ PVOID
*ApcContext
,
16240 _Inout_ PVOID
*ApcRoutine
);
16244 * PsGetCurrentProcess(VOID)
16246 #define PsGetCurrentProcess IoGetCurrentProcess
16248 #if !defined(_PSGETCURRENTTHREAD_)
16249 #define _PSGETCURRENTTHREAD_
16250 _IRQL_requires_max_(DISPATCH_LEVEL
)
16254 PsGetCurrentThread(VOID
)
16256 return (PETHREAD
)KeGetCurrentThread();
16258 #endif /* !_PSGETCURRENTTHREAD_ */
16261 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16263 _IRQL_requires_max_(APC_LEVEL
)
16264 _Post_satisfies_(return <= 0)
16265 _Must_inspect_result_
16269 PsCreateSystemThread(
16270 _Out_ PHANDLE ThreadHandle
,
16271 _In_ ULONG DesiredAccess
,
16272 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16273 _In_opt_ HANDLE ProcessHandle
,
16274 _Out_opt_ PCLIENT_ID ClientId
,
16275 _In_ PKSTART_ROUTINE StartRoutine
,
16276 _In_opt_
_When_(return==0, __drv_aliasesMem
) PVOID StartContext
);
16278 _IRQL_requires_max_(PASSIVE_LEVEL
)
16282 PsTerminateSystemThread(
16283 _In_ NTSTATUS ExitStatus
);
16285 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16288 /******************************************************************************
16289 * WMI Library Support Functions *
16290 ******************************************************************************/
16293 #if (NTDDI_VERSION >= NTDDI_WINXP)
16294 _IRQL_requires_max_(HIGH_LEVEL
)
16299 _In_ TRACEHANDLE LoggerHandle
,
16300 _In_ ULONG MessageFlags
,
16301 _In_ LPGUID MessageGuid
,
16302 _In_ USHORT MessageNumber
,
16305 #endif /* RUN_WPP */
16307 #if (NTDDI_VERSION >= NTDDI_WINXP)
16309 _IRQL_requires_max_(APC_LEVEL
)
16313 WmiQueryTraceInformation(
16314 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
16315 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
16316 _In_ ULONG TraceInformationLength
,
16317 _Out_opt_ PULONG RequiredLength
,
16318 _In_opt_ PVOID Buffer
);
16321 /* FIXME: Get va_list from where? */
16322 _IRQL_requires_max_(HIGH_LEVEL
)
16327 _In_ TRACEHANDLE LoggerHandle
,
16328 _In_ ULONG MessageFlags
,
16329 _In_ LPGUID MessageGuid
,
16330 _In_ USHORT MessageNumber
,
16331 _In_
va_list MessageArgList
);
16334 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
16336 #ifndef TRACE_INFORMATION_CLASS_DEFINE
16338 #if (NTDDI_VERSION >= NTDDI_WINXP)
16339 _IRQL_requires_max_(APC_LEVEL
)
16343 WmiQueryTraceInformation(
16344 _In_ TRACE_INFORMATION_CLASS TraceInformationClass
,
16345 _Out_writes_bytes_(TraceInformationLength
) PVOID TraceInformation
,
16346 _In_ ULONG TraceInformationLength
,
16347 _Out_opt_ PULONG RequiredLength
,
16348 _In_opt_ PVOID Buffer
);
16351 #define TRACE_INFORMATION_CLASS_DEFINE
16353 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
16355 #if (NTDDI_VERSION >= NTDDI_VISTA)
16357 _IRQL_requires_max_(PASSIVE_LEVEL
)
16362 _In_ LPCGUID ProviderId
,
16363 _In_opt_ PETWENABLECALLBACK EnableCallback
,
16364 _In_opt_ PVOID CallbackContext
,
16365 _Out_ PREGHANDLE RegHandle
);
16367 _IRQL_requires_max_(PASSIVE_LEVEL
)
16372 _In_ REGHANDLE RegHandle
);
16374 _IRQL_requires_max_(HIGH_LEVEL
)
16379 _In_ REGHANDLE RegHandle
,
16380 _In_ PCEVENT_DESCRIPTOR EventDescriptor
);
16382 _IRQL_requires_max_(HIGH_LEVEL
)
16386 EtwProviderEnabled(
16387 _In_ REGHANDLE RegHandle
,
16389 _In_ ULONGLONG Keyword
);
16391 _When_(ControlCode
==EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(HIGH_LEVEL
))
16392 _When_(ControlCode
!=EVENT_ACTIVITY_CTRL_CREATE_ID
, _IRQL_requires_max_(APC_LEVEL
))
16396 EtwActivityIdControl(
16397 _In_ ULONG ControlCode
,
16398 _Inout_updates_bytes_(sizeof(GUID
)) LPGUID ActivityId
);
16400 _IRQL_requires_max_(HIGH_LEVEL
)
16405 _In_ REGHANDLE RegHandle
,
16406 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16407 _In_opt_ LPCGUID ActivityId
,
16408 _In_ ULONG UserDataCount
,
16409 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16411 _IRQL_requires_max_(HIGH_LEVEL
)
16416 _In_ REGHANDLE RegHandle
,
16417 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16418 _In_opt_ LPCGUID ActivityId
,
16419 _In_opt_ LPCGUID RelatedActivityId
,
16420 _In_ ULONG UserDataCount
,
16421 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16423 _IRQL_requires_max_(HIGH_LEVEL
)
16428 _In_ REGHANDLE RegHandle
,
16430 _In_ ULONGLONG Keyword
,
16431 _In_opt_ LPCGUID ActivityId
,
16432 _In_ PCWSTR String
);
16434 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
16436 #if (NTDDI_VERSION >= NTDDI_WIN7)
16437 _IRQL_requires_max_(HIGH_LEVEL
)
16442 _In_ REGHANDLE RegHandle
,
16443 _In_ PCEVENT_DESCRIPTOR EventDescriptor
,
16444 _In_ ULONG64 Filter
,
16446 _In_opt_ LPCGUID ActivityId
,
16447 _In_opt_ LPCGUID RelatedActivityId
,
16448 _In_ ULONG UserDataCount
,
16449 _In_reads_opt_(UserDataCount
) PEVENT_DATA_DESCRIPTOR UserData
);
16454 /******************************************************************************
16455 * Kernel Debugger Functions *
16456 ******************************************************************************/
16463 _In_z_ _Printf_format_string_ PCSTR Format
,
16466 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16470 DbgPrintReturnControlC(
16471 _In_z_ _Printf_format_string_ PCCH Format
,
16475 #if (NTDDI_VERSION >= NTDDI_WINXP)
16481 _In_ ULONG ComponentId
,
16483 _In_z_ _Printf_format_string_ PCSTR Format
,
16486 #ifdef _VA_LIST_DEFINED
16492 _In_ ULONG ComponentId
,
16494 _In_z_ PCCH Format
,
16500 vDbgPrintExWithPrefix(
16501 _In_z_ PCCH Prefix
,
16502 _In_ ULONG ComponentId
,
16504 _In_z_ PCCH Format
,
16507 #endif /* _VA_LIST_DEFINED */
16512 DbgQueryDebugFilterState(
16513 _In_ ULONG ComponentId
,
16519 DbgSetDebugFilterState(
16520 _In_ ULONG ComponentId
,
16522 _In_ BOOLEAN State
);
16524 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
16526 #if (NTDDI_VERSION >= NTDDI_VISTA)
16529 (*PDEBUG_PRINT_CALLBACK
)(
16530 _In_ PSTRING Output
,
16531 _In_ ULONG ComponentId
,
16537 DbgSetDebugPrintCallback(
16538 _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
16539 _In_ BOOLEAN Enable
);
16541 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
16543 #endif /* _DBGNT_ */
16547 #define KdPrint(_x_) DbgPrint _x_
16548 #define KdPrintEx(_x_) DbgPrintEx _x_
16549 #define vKdPrintEx(_x_) vDbgPrintEx _x_
16550 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
16551 #define KdBreakPoint() DbgBreakPoint()
16552 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
16556 #define KdPrint(_x_)
16557 #define KdPrintEx(_x_)
16558 #define vKdPrintEx(_x_)
16559 #define vKdPrintExWithPrefix(_x_)
16560 #define KdBreakPoint()
16561 #define KdBreakPointWithStatus(s)
16566 extern BOOLEAN KdDebuggerEnabled
;
16567 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
16568 extern BOOLEAN KdDebuggerNotPresent
;
16569 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
16571 __CREATE_NTOS_DATA_IMPORT_ALIAS(KdDebuggerEnabled
)
16572 extern BOOLEAN
*KdDebuggerEnabled
;
16573 #define KD_DEBUGGER_ENABLED (*KdDebuggerEnabled)
16574 __CREATE_NTOS_DATA_IMPORT_ALIAS(KdDebuggerNotPresent
)
16575 extern BOOLEAN
*KdDebuggerNotPresent
;
16576 #define KD_DEBUGGER_NOT_PRESENT (*KdDebuggerNotPresent)
16579 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16584 KdDisableDebugger(VOID
);
16589 KdEnableDebugger(VOID
);
16591 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
16592 #define DbgBreakPoint __debugbreak
16594 __analysis_noreturn
16597 DbgBreakPoint(VOID
);
16600 __analysis_noreturn
16604 DbgBreakPointWithStatus(
16605 _In_ ULONG Status
);
16607 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16609 #if (NTDDI_VERSION >= NTDDI_WS03)
16613 KdRefreshDebuggerNotPresent(VOID
);
16616 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
16621 _In_ KD_OPTION Option
,
16622 _In_opt_ ULONG InBufferBytes
,
16623 _In_ PVOID InBuffer
,
16624 _In_opt_ ULONG OutBufferBytes
,
16625 _Out_ PVOID OutBuffer
,
16626 _Out_opt_ PULONG OutBufferNeeded
);
16628 /* Hardware Abstraction Layer Functions */
16630 #if (NTDDI_VERSION >= NTDDI_WIN2K)
16632 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
16634 __drv_preferredFunction("AllocateCommonBuffer","Obsolete")
16638 HalAllocateCommonBuffer(
16639 _In_ PDMA_ADAPTER DmaAdapter
,
16641 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
16642 _In_ BOOLEAN CacheEnabled
)
16644 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
16645 PVOID commonBuffer
;
16647 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
16648 ASSERT( allocateCommonBuffer
!= NULL
);
16649 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
16650 return commonBuffer
;
16653 __drv_preferredFunction("FreeCommonBuffer","Obsolete")
16657 HalFreeCommonBuffer(
16658 _In_ PDMA_ADAPTER DmaAdapter
,
16660 _In_ PHYSICAL_ADDRESS LogicalAddress
,
16661 _In_ PVOID VirtualAddress
,
16662 _In_ BOOLEAN CacheEnabled
)
16664 PFREE_COMMON_BUFFER freeCommonBuffer
;
16666 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
16667 ASSERT( freeCommonBuffer
!= NULL
);
16668 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
16671 __drv_preferredFunction("ReadDmaCounter","Obsolete")
16676 _In_ PDMA_ADAPTER DmaAdapter
)
16678 PREAD_DMA_COUNTER readDmaCounter
;
16681 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
16682 ASSERT( readDmaCounter
!= NULL
);
16683 counter
= readDmaCounter( DmaAdapter
);
16689 HalGetDmaAlignment(
16690 _In_ PDMA_ADAPTER DmaAdapter
)
16692 PGET_DMA_ALIGNMENT getDmaAlignment
;
16695 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
16696 ASSERT( getDmaAlignment
!= NULL
);
16697 alignment
= getDmaAlignment( DmaAdapter
);
16701 #endif /* USE_DMA_MACROS ... */
16703 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
16708 #include <ktmtypes.h>
16710 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
16711 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
16712 #define TRANSACTIONMANAGER_RECOVER (0x0004)
16713 #define TRANSACTIONMANAGER_RENAME (0x0008)
16714 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
16715 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
16717 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
16718 TRANSACTIONMANAGER_QUERY_INFORMATION)
16720 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16721 TRANSACTIONMANAGER_SET_INFORMATION |\
16722 TRANSACTIONMANAGER_RECOVER |\
16723 TRANSACTIONMANAGER_RENAME |\
16724 TRANSACTIONMANAGER_CREATE_RM)
16726 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
16728 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16729 TRANSACTIONMANAGER_GENERIC_READ |\
16730 TRANSACTIONMANAGER_GENERIC_WRITE |\
16731 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
16732 TRANSACTIONMANAGER_BIND_TRANSACTION)
16734 #define TRANSACTION_QUERY_INFORMATION (0x0001)
16735 #define TRANSACTION_SET_INFORMATION (0x0002)
16736 #define TRANSACTION_ENLIST (0x0004)
16737 #define TRANSACTION_COMMIT (0x0008)
16738 #define TRANSACTION_ROLLBACK (0x0010)
16739 #define TRANSACTION_PROPAGATE (0x0020)
16740 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
16742 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
16743 TRANSACTION_QUERY_INFORMATION |\
16746 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16747 TRANSACTION_SET_INFORMATION |\
16748 TRANSACTION_COMMIT |\
16749 TRANSACTION_ENLIST |\
16750 TRANSACTION_ROLLBACK |\
16751 TRANSACTION_PROPAGATE |\
16754 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16755 TRANSACTION_COMMIT |\
16756 TRANSACTION_ROLLBACK |\
16759 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16760 TRANSACTION_GENERIC_READ |\
16761 TRANSACTION_GENERIC_WRITE |\
16762 TRANSACTION_GENERIC_EXECUTE)
16764 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
16765 STANDARD_RIGHTS_WRITE |\
16766 TRANSACTION_SET_INFORMATION |\
16767 TRANSACTION_ENLIST |\
16768 TRANSACTION_ROLLBACK |\
16769 TRANSACTION_PROPAGATE |\
16772 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
16773 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
16774 #define RESOURCEMANAGER_RECOVER (0x0004)
16775 #define RESOURCEMANAGER_ENLIST (0x0008)
16776 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
16777 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
16778 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
16780 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
16781 RESOURCEMANAGER_QUERY_INFORMATION |\
16784 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16785 RESOURCEMANAGER_SET_INFORMATION |\
16786 RESOURCEMANAGER_RECOVER |\
16787 RESOURCEMANAGER_ENLIST |\
16788 RESOURCEMANAGER_GET_NOTIFICATION |\
16789 RESOURCEMANAGER_REGISTER_PROTOCOL |\
16790 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16793 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16794 RESOURCEMANAGER_RECOVER |\
16795 RESOURCEMANAGER_ENLIST |\
16796 RESOURCEMANAGER_GET_NOTIFICATION |\
16797 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
16800 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16801 RESOURCEMANAGER_GENERIC_READ |\
16802 RESOURCEMANAGER_GENERIC_WRITE |\
16803 RESOURCEMANAGER_GENERIC_EXECUTE)
16805 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
16806 #define ENLISTMENT_SET_INFORMATION (0x0002)
16807 #define ENLISTMENT_RECOVER (0x0004)
16808 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
16809 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
16811 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
16812 ENLISTMENT_QUERY_INFORMATION)
16814 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
16815 ENLISTMENT_SET_INFORMATION |\
16816 ENLISTMENT_RECOVER |\
16817 ENLISTMENT_SUBORDINATE_RIGHTS |\
16818 ENLISTMENT_SUPERIOR_RIGHTS)
16820 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
16821 ENLISTMENT_RECOVER |\
16822 ENLISTMENT_SUBORDINATE_RIGHTS |\
16823 ENLISTMENT_SUPERIOR_RIGHTS)
16825 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
16826 ENLISTMENT_GENERIC_READ |\
16827 ENLISTMENT_GENERIC_WRITE |\
16828 ENLISTMENT_GENERIC_EXECUTE)
16830 typedef enum _TRANSACTION_OUTCOME
{
16831 TransactionOutcomeUndetermined
= 1,
16832 TransactionOutcomeCommitted
,
16833 TransactionOutcomeAborted
,
16834 } TRANSACTION_OUTCOME
;
16837 typedef enum _TRANSACTION_STATE
{
16838 TransactionStateNormal
= 1,
16839 TransactionStateIndoubt
,
16840 TransactionStateCommittedNotify
,
16841 } TRANSACTION_STATE
;
16844 typedef struct _TRANSACTION_BASIC_INFORMATION
{
16845 GUID TransactionId
;
16848 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
16850 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
16852 LARGE_INTEGER VirtualClock
;
16853 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
16855 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
16857 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
16859 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
16860 ULONG LogPathLength
;
16861 _Field_size_(LogPathLength
) WCHAR LogPath
[1];
16862 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
16864 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
16865 ULONGLONG LastRecoveredLsn
;
16866 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
16868 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
16869 ULONG IsolationLevel
;
16870 ULONG IsolationFlags
;
16871 LARGE_INTEGER Timeout
;
16873 ULONG DescriptionLength
;
16874 WCHAR Description
[1];
16875 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
16877 typedef struct _TRANSACTION_BIND_INFORMATION
{
16879 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
16881 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
16883 GUID ResourceManagerId
;
16884 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
16886 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
16887 ULONG NumberOfEnlistments
;
16888 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
16889 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
16891 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
16892 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
16893 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
16895 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
16896 GUID ResourceManagerId
;
16897 ULONG DescriptionLength
;
16898 WCHAR Description
[1];
16899 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
16901 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
16902 HANDLE IoCompletionPortHandle
;
16903 ULONG_PTR CompletionKey
;
16904 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
16906 typedef enum _KTMOBJECT_TYPE
{
16907 KTMOBJECT_TRANSACTION
,
16908 KTMOBJECT_TRANSACTION_MANAGER
,
16909 KTMOBJECT_RESOURCE_MANAGER
,
16910 KTMOBJECT_ENLISTMENT
,
16912 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
16914 typedef struct _KTMOBJECT_CURSOR
{
16916 ULONG ObjectIdCount
;
16918 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
16920 typedef enum _TRANSACTION_INFORMATION_CLASS
{
16921 TransactionBasicInformation
,
16922 TransactionPropertiesInformation
,
16923 TransactionEnlistmentInformation
,
16924 TransactionSuperiorEnlistmentInformation
16925 } TRANSACTION_INFORMATION_CLASS
;
16927 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
16928 TransactionManagerBasicInformation
,
16929 TransactionManagerLogInformation
,
16930 TransactionManagerLogPathInformation
,
16931 TransactionManagerRecoveryInformation
= 4
16932 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
16934 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
16935 ResourceManagerBasicInformation
,
16936 ResourceManagerCompletionInformation
,
16937 } RESOURCEMANAGER_INFORMATION_CLASS
;
16939 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
16941 GUID TransactionId
;
16942 GUID ResourceManagerId
;
16943 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
16945 typedef struct _ENLISTMENT_CRM_INFORMATION
{
16946 GUID CrmTransactionManagerId
;
16947 GUID CrmResourceManagerId
;
16948 GUID CrmEnlistmentId
;
16949 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
16951 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
16952 EnlistmentBasicInformation
,
16953 EnlistmentRecoveryInformation
,
16954 EnlistmentCrmInformation
16955 } ENLISTMENT_INFORMATION_CLASS
;
16957 typedef struct _TRANSACTION_LIST_ENTRY
{
16958 #if defined(__cplusplus)
16963 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
16965 typedef struct _TRANSACTION_LIST_INFORMATION
{
16966 ULONG NumberOfTransactions
;
16967 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
16968 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
16971 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
16972 _Out_ PHANDLE TransactionHandle
,
16973 _In_ ACCESS_MASK DesiredAccess
,
16974 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
16975 _In_opt_ LPGUID Uow
,
16976 _In_opt_ HANDLE TmHandle
,
16977 _In_opt_ ULONG CreateOptions
,
16978 _In_opt_ ULONG IsolationLevel
,
16979 _In_opt_ ULONG IsolationFlags
,
16980 _In_opt_ PLARGE_INTEGER Timeout
,
16981 _In_opt_ PUNICODE_STRING Description
);
16984 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
16985 _Out_ PHANDLE TransactionHandle
,
16986 _In_ ACCESS_MASK DesiredAccess
,
16987 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
16988 _In_opt_ LPGUID Uow
,
16989 _In_opt_ HANDLE TmHandle
);
16992 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
16993 _In_ HANDLE TransactionHandle
,
16994 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
16995 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
16996 _In_ ULONG TransactionInformationLength
,
16997 _Out_opt_ PULONG ReturnLength
);
17000 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
17001 _In_ HANDLE TransactionHandle
,
17002 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17003 _In_ PVOID TransactionInformation
,
17004 _In_ ULONG TransactionInformationLength
);
17007 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
17008 _In_ HANDLE TransactionHandle
,
17009 _In_ BOOLEAN Wait
);
17012 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
17013 _In_ HANDLE TransactionHandle
,
17014 _In_ BOOLEAN Wait
);
17016 #if (NTDDI_VERSION >= NTDDI_VISTA)
17018 _Must_inspect_result_
17019 _IRQL_requires_max_ (APC_LEVEL
)
17024 NtCreateTransactionManager(
17025 _Out_ PHANDLE TmHandle
,
17026 _In_ ACCESS_MASK DesiredAccess
,
17027 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17028 _In_opt_ PUNICODE_STRING LogFileName
,
17029 _In_opt_ ULONG CreateOptions
,
17030 _In_opt_ ULONG CommitStrength
);
17032 _Must_inspect_result_
17033 _IRQL_requires_max_ (APC_LEVEL
)
17038 NtOpenTransactionManager(
17039 _Out_ PHANDLE TmHandle
,
17040 _In_ ACCESS_MASK DesiredAccess
,
17041 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17042 _In_opt_ PUNICODE_STRING LogFileName
,
17043 _In_opt_ LPGUID TmIdentity
,
17044 _In_opt_ ULONG OpenOptions
);
17046 _Must_inspect_result_
17047 _IRQL_requires_max_ (APC_LEVEL
)
17052 NtRenameTransactionManager(
17053 _In_ PUNICODE_STRING LogFileName
,
17054 _In_ LPGUID ExistingTransactionManagerGuid
);
17056 _Must_inspect_result_
17057 _IRQL_requires_max_ (APC_LEVEL
)
17062 NtRollforwardTransactionManager(
17063 _In_ HANDLE TransactionManagerHandle
,
17064 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17066 _Must_inspect_result_
17067 _IRQL_requires_max_ (APC_LEVEL
)
17072 NtRecoverTransactionManager(
17073 _In_ HANDLE TransactionManagerHandle
);
17075 _Must_inspect_result_
17076 _IRQL_requires_max_ (APC_LEVEL
)
17081 NtQueryInformationTransactionManager(
17082 _In_ HANDLE TransactionManagerHandle
,
17083 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17084 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17085 _In_ ULONG TransactionManagerInformationLength
,
17086 _Out_ PULONG ReturnLength
);
17088 _Must_inspect_result_
17089 _IRQL_requires_max_ (APC_LEVEL
)
17094 NtSetInformationTransactionManager(
17095 _In_opt_ HANDLE TmHandle
,
17096 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17097 _In_reads_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17098 _In_ ULONG TransactionManagerInformationLength
);
17100 _Must_inspect_result_
17101 _IRQL_requires_max_ (APC_LEVEL
)
17106 NtEnumerateTransactionObject(
17107 _In_opt_ HANDLE RootObjectHandle
,
17108 _In_ KTMOBJECT_TYPE QueryType
,
17109 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
17110 _In_ ULONG ObjectCursorLength
,
17111 _Out_ PULONG ReturnLength
);
17113 _Must_inspect_result_
17114 _IRQL_requires_max_ (APC_LEVEL
)
17119 NtCreateTransaction(
17120 _Out_ PHANDLE TransactionHandle
,
17121 _In_ ACCESS_MASK DesiredAccess
,
17122 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17123 _In_opt_ LPGUID Uow
,
17124 _In_opt_ HANDLE TmHandle
,
17125 _In_opt_ ULONG CreateOptions
,
17126 _In_opt_ ULONG IsolationLevel
,
17127 _In_opt_ ULONG IsolationFlags
,
17128 _In_opt_ PLARGE_INTEGER Timeout
,
17129 _In_opt_ PUNICODE_STRING Description
);
17131 _Must_inspect_result_
17132 _IRQL_requires_max_ (APC_LEVEL
)
17138 _Out_ PHANDLE TransactionHandle
,
17139 _In_ ACCESS_MASK DesiredAccess
,
17140 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17142 _In_opt_ HANDLE TmHandle
);
17144 _Must_inspect_result_
17145 _IRQL_requires_max_ (APC_LEVEL
)
17150 NtQueryInformationTransaction(
17151 _In_ HANDLE TransactionHandle
,
17152 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17153 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17154 _In_ ULONG TransactionInformationLength
,
17155 _Out_opt_ PULONG ReturnLength
);
17157 _Must_inspect_result_
17158 _IRQL_requires_max_ (APC_LEVEL
)
17163 NtSetInformationTransaction(
17164 _In_ HANDLE TransactionHandle
,
17165 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17166 _In_reads_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17167 _In_ ULONG TransactionInformationLength
);
17169 _IRQL_requires_max_ (APC_LEVEL
)
17174 NtCommitTransaction(
17175 _In_ HANDLE TransactionHandle
,
17176 _In_ BOOLEAN Wait
);
17178 _IRQL_requires_max_ (APC_LEVEL
)
17183 NtRollbackTransaction(
17184 _In_ HANDLE TransactionHandle
,
17185 _In_ BOOLEAN Wait
);
17187 _Must_inspect_result_
17188 _IRQL_requires_max_ (APC_LEVEL
)
17193 NtCreateEnlistment(
17194 _Out_ PHANDLE EnlistmentHandle
,
17195 _In_ ACCESS_MASK DesiredAccess
,
17196 _In_ HANDLE ResourceManagerHandle
,
17197 _In_ HANDLE TransactionHandle
,
17198 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17199 _In_opt_ ULONG CreateOptions
,
17200 _In_ NOTIFICATION_MASK NotificationMask
,
17201 _In_opt_ PVOID EnlistmentKey
);
17203 _Must_inspect_result_
17204 _IRQL_requires_max_ (APC_LEVEL
)
17210 _Out_ PHANDLE EnlistmentHandle
,
17211 _In_ ACCESS_MASK DesiredAccess
,
17212 _In_ HANDLE ResourceManagerHandle
,
17213 _In_ LPGUID EnlistmentGuid
,
17214 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17216 _Must_inspect_result_
17217 _IRQL_requires_max_ (APC_LEVEL
)
17222 NtQueryInformationEnlistment(
17223 _In_ HANDLE EnlistmentHandle
,
17224 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17225 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17226 _In_ ULONG EnlistmentInformationLength
,
17227 _Out_ PULONG ReturnLength
);
17229 _Must_inspect_result_
17230 _IRQL_requires_max_ (APC_LEVEL
)
17235 NtSetInformationEnlistment(
17236 _In_opt_ HANDLE EnlistmentHandle
,
17237 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
17238 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
17239 _In_ ULONG EnlistmentInformationLength
);
17241 _Must_inspect_result_
17242 _IRQL_requires_max_ (APC_LEVEL
)
17247 NtRecoverEnlistment(
17248 _In_ HANDLE EnlistmentHandle
,
17249 _In_opt_ PVOID EnlistmentKey
);
17251 _Must_inspect_result_
17252 _IRQL_requires_max_ (APC_LEVEL
)
17257 NtPrePrepareEnlistment(
17258 _In_ HANDLE EnlistmentHandle
,
17259 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17261 _Must_inspect_result_
17262 _IRQL_requires_max_ (APC_LEVEL
)
17267 NtPrepareEnlistment(
17268 _In_ HANDLE EnlistmentHandle
,
17269 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17271 _Must_inspect_result_
17272 _IRQL_requires_max_ (APC_LEVEL
)
17277 NtCommitEnlistment(
17278 _In_ HANDLE EnlistmentHandle
,
17279 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17281 _IRQL_requires_max_ (APC_LEVEL
)
17286 NtRollbackEnlistment(
17287 _In_ HANDLE EnlistmentHandle
,
17288 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17290 _IRQL_requires_max_ (APC_LEVEL
)
17295 NtPrePrepareComplete(
17296 _In_ HANDLE EnlistmentHandle
,
17297 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17299 _IRQL_requires_max_ (APC_LEVEL
)
17305 _In_ HANDLE EnlistmentHandle
,
17306 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17308 _IRQL_requires_max_ (APC_LEVEL
)
17314 _In_ HANDLE EnlistmentHandle
,
17315 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17317 _IRQL_requires_max_ (APC_LEVEL
)
17322 NtReadOnlyEnlistment(
17323 _In_ HANDLE EnlistmentHandle
,
17324 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17326 _IRQL_requires_max_ (APC_LEVEL
)
17331 NtRollbackComplete(
17332 _In_ HANDLE EnlistmentHandle
,
17333 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17335 _IRQL_requires_max_ (APC_LEVEL
)
17340 NtSinglePhaseReject(
17341 _In_ HANDLE EnlistmentHandle
,
17342 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17344 _Must_inspect_result_
17345 _IRQL_requires_max_ (APC_LEVEL
)
17350 NtCreateResourceManager(
17351 _Out_ PHANDLE ResourceManagerHandle
,
17352 _In_ ACCESS_MASK DesiredAccess
,
17353 _In_ HANDLE TmHandle
,
17354 _In_ LPGUID RmGuid
,
17355 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17356 _In_opt_ ULONG CreateOptions
,
17357 _In_opt_ PUNICODE_STRING Description
);
17359 _Must_inspect_result_
17360 _IRQL_requires_max_ (APC_LEVEL
)
17365 NtOpenResourceManager(
17366 _Out_ PHANDLE ResourceManagerHandle
,
17367 _In_ ACCESS_MASK DesiredAccess
,
17368 _In_ HANDLE TmHandle
,
17369 _In_opt_ LPGUID ResourceManagerGuid
,
17370 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17372 _Must_inspect_result_
17373 _IRQL_requires_max_ (APC_LEVEL
)
17378 NtRecoverResourceManager(
17379 _In_ HANDLE ResourceManagerHandle
);
17381 _Must_inspect_result_
17382 _IRQL_requires_max_ (APC_LEVEL
)
17387 NtGetNotificationResourceManager(
17388 _In_ HANDLE ResourceManagerHandle
,
17389 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17390 _In_ ULONG NotificationLength
,
17391 _In_opt_ PLARGE_INTEGER Timeout
,
17392 _Out_opt_ PULONG ReturnLength
,
17393 _In_ ULONG Asynchronous
,
17394 _In_opt_ ULONG_PTR AsynchronousContext
);
17396 _Must_inspect_result_
17397 _IRQL_requires_max_ (APC_LEVEL
)
17402 NtQueryInformationResourceManager(
17403 _In_ HANDLE ResourceManagerHandle
,
17404 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17405 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17406 _In_ ULONG ResourceManagerInformationLength
,
17407 _Out_opt_ PULONG ReturnLength
);
17409 _Must_inspect_result_
17410 _IRQL_requires_max_ (APC_LEVEL
)
17415 NtSetInformationResourceManager(
17416 _In_ HANDLE ResourceManagerHandle
,
17417 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17418 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
17419 _In_ ULONG ResourceManagerInformationLength
);
17421 _Must_inspect_result_
17422 _IRQL_requires_max_ (APC_LEVEL
)
17427 NtRegisterProtocolAddressInformation(
17428 _In_ HANDLE ResourceManager
,
17429 _In_ PCRM_PROTOCOL_ID ProtocolId
,
17430 _In_ ULONG ProtocolInformationSize
,
17431 _In_ PVOID ProtocolInformation
,
17432 _In_opt_ ULONG CreateOptions
);
17434 _IRQL_requires_max_ (APC_LEVEL
)
17439 NtPropagationComplete(
17440 _In_ HANDLE ResourceManagerHandle
,
17441 _In_ ULONG RequestCookie
,
17442 _In_ ULONG BufferLength
,
17443 _In_ PVOID Buffer
);
17445 _IRQL_requires_max_ (APC_LEVEL
)
17450 NtPropagationFailed(
17451 _In_ HANDLE ResourceManagerHandle
,
17452 _In_ ULONG RequestCookie
,
17453 _In_ NTSTATUS PropStatus
);
17455 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
17457 #endif /* !_NTTMAPI_ */
17458 /******************************************************************************
17459 * ZwXxx Functions *
17460 ******************************************************************************/
17464 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
17465 #define ZwCurrentProcess() NtCurrentProcess()
17466 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
17467 #define ZwCurrentThread() NtCurrentThread()
17470 #if (NTDDI_VERSION >= NTDDI_WIN2K)
17472 _IRQL_requires_max_(PASSIVE_LEVEL
)
17477 _In_ HANDLE Handle
);
17479 _IRQL_requires_max_(PASSIVE_LEVEL
)
17483 ZwCreateDirectoryObject(
17484 _Out_ PHANDLE DirectoryHandle
,
17485 _In_ ACCESS_MASK DesiredAccess
,
17486 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17488 _IRQL_requires_max_(PASSIVE_LEVEL
)
17493 _Out_ PHANDLE FileHandle
,
17494 _In_ ACCESS_MASK DesiredAccess
,
17495 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17496 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17497 _In_opt_ PLARGE_INTEGER AllocationSize
,
17498 _In_ ULONG FileAttributes
,
17499 _In_ ULONG ShareAccess
,
17500 _In_ ULONG CreateDisposition
,
17501 _In_ ULONG CreateOptions
,
17502 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
17503 _In_ ULONG EaLength
17506 _IRQL_requires_max_(PASSIVE_LEVEL
)
17511 _Out_ PHANDLE KeyHandle
,
17512 _In_ ACCESS_MASK DesiredAccess
,
17513 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17514 _Reserved_ ULONG TitleIndex
,
17515 _In_opt_ PUNICODE_STRING Class
,
17516 _In_ ULONG CreateOptions
,
17517 _Out_opt_ PULONG Disposition
);
17519 _IRQL_requires_max_(APC_LEVEL
)
17524 _Out_ PHANDLE SectionHandle
,
17525 _In_ ACCESS_MASK DesiredAccess
,
17526 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17527 _In_opt_ PLARGE_INTEGER MaximumSize
,
17528 _In_ ULONG SectionPageProtection
,
17529 _In_ ULONG AllocationAttributes
,
17530 _In_opt_ HANDLE FileHandle
);
17532 _IRQL_requires_max_(PASSIVE_LEVEL
)
17537 _In_ HANDLE KeyHandle
);
17539 _IRQL_requires_max_(PASSIVE_LEVEL
)
17544 _In_ HANDLE KeyHandle
,
17545 _In_ PUNICODE_STRING ValueName
);
17547 _IRQL_requires_max_(PASSIVE_LEVEL
)
17548 _When_(Length
== 0, _Post_satisfies_(return < 0))
17549 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17554 _In_ HANDLE KeyHandle
,
17556 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
17557 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
17559 _Out_ PULONG ResultLength
);
17561 _IRQL_requires_max_(PASSIVE_LEVEL
)
17562 _When_(Length
== 0, _Post_satisfies_(return < 0))
17563 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17567 ZwEnumerateValueKey(
17568 _In_ HANDLE KeyHandle
,
17570 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
17571 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
17573 _Out_ PULONG ResultLength
);
17575 _IRQL_requires_max_(PASSIVE_LEVEL
)
17580 _In_ HANDLE KeyHandle
);
17582 _IRQL_requires_max_(PASSIVE_LEVEL
)
17587 _In_ PUNICODE_STRING DriverServiceName
);
17589 _IRQL_requires_max_(PASSIVE_LEVEL
)
17593 ZwMakeTemporaryObject(
17594 _In_ HANDLE Handle
);
17596 _IRQL_requires_max_(PASSIVE_LEVEL
)
17600 ZwMapViewOfSection(
17601 _In_ HANDLE SectionHandle
,
17602 _In_ HANDLE ProcessHandle
,
17603 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*BaseAddress
,
17604 _In_ ULONG_PTR ZeroBits
,
17605 _In_ SIZE_T CommitSize
,
17606 _Inout_opt_ PLARGE_INTEGER SectionOffset
,
17607 _Inout_ PSIZE_T ViewSize
,
17608 _In_ SECTION_INHERIT InheritDisposition
,
17609 _In_ ULONG AllocationType
,
17610 _In_ ULONG Protect
);
17612 _IRQL_requires_max_(PASSIVE_LEVEL
)
17617 _Out_ PHANDLE FileHandle
,
17618 _In_ ACCESS_MASK DesiredAccess
,
17619 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17620 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17621 _In_ ULONG ShareAccess
,
17622 _In_ ULONG OpenOptions
);
17624 _IRQL_requires_max_(PASSIVE_LEVEL
)
17629 _Out_ PHANDLE KeyHandle
,
17630 _In_ ACCESS_MASK DesiredAccess
,
17631 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17633 _IRQL_requires_max_(PASSIVE_LEVEL
)
17638 _Out_ PHANDLE SectionHandle
,
17639 _In_ ACCESS_MASK DesiredAccess
,
17640 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17642 _IRQL_requires_max_(PASSIVE_LEVEL
)
17646 ZwOpenSymbolicLinkObject(
17647 _Out_ PHANDLE LinkHandle
,
17648 _In_ ACCESS_MASK DesiredAccess
,
17649 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17651 _IRQL_requires_max_(PASSIVE_LEVEL
)
17655 ZwQueryInformationFile(
17656 _In_ HANDLE FileHandle
,
17657 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17658 _Out_writes_bytes_(Length
) PVOID FileInformation
,
17660 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
17662 _IRQL_requires_max_(PASSIVE_LEVEL
)
17663 _When_(Length
== 0, _Post_satisfies_(return < 0))
17664 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17669 _In_ HANDLE KeyHandle
,
17670 _In_ KEY_INFORMATION_CLASS KeyInformationClass
,
17671 _Out_writes_bytes_opt_(Length
) PVOID KeyInformation
,
17673 _Out_ PULONG ResultLength
);
17675 _IRQL_requires_max_(PASSIVE_LEVEL
)
17679 ZwQuerySymbolicLinkObject(
17680 _In_ HANDLE LinkHandle
,
17681 _Inout_ PUNICODE_STRING LinkTarget
,
17682 _Out_opt_ PULONG ReturnedLength
);
17684 _IRQL_requires_max_(PASSIVE_LEVEL
)
17685 _When_(Length
== 0, _Post_satisfies_(return < 0))
17686 _When_(Length
> 0, _Post_satisfies_(return <= 0))
17691 _In_ HANDLE KeyHandle
,
17692 _In_ PUNICODE_STRING ValueName
,
17693 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
17694 _Out_writes_bytes_opt_(Length
) PVOID KeyValueInformation
,
17696 _Out_ PULONG ResultLength
);
17698 _IRQL_requires_max_(PASSIVE_LEVEL
)
17703 _In_ HANDLE FileHandle
,
17704 _In_opt_ HANDLE Event
,
17705 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17706 _In_opt_ PVOID ApcContext
,
17707 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17708 _Out_writes_bytes_(Length
) PVOID Buffer
,
17710 _In_opt_ PLARGE_INTEGER ByteOffset
,
17711 _In_opt_ PULONG Key
);
17713 _IRQL_requires_max_(PASSIVE_LEVEL
)
17717 ZwSetInformationFile(
17718 _In_ HANDLE FileHandle
,
17719 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17720 _In_reads_bytes_(Length
) PVOID FileInformation
,
17722 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
17724 _IRQL_requires_max_(PASSIVE_LEVEL
)
17729 _In_ HANDLE KeyHandle
,
17730 _In_ PUNICODE_STRING ValueName
,
17731 _In_opt_ ULONG TitleIndex
,
17733 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
17734 _In_ ULONG DataSize
);
17736 _IRQL_requires_max_(PASSIVE_LEVEL
)
17741 _In_ PUNICODE_STRING DriverServiceName
);
17743 _IRQL_requires_max_(PASSIVE_LEVEL
)
17747 ZwUnmapViewOfSection(
17748 _In_ HANDLE ProcessHandle
,
17749 _In_opt_ PVOID BaseAddress
);
17751 _IRQL_requires_max_(PASSIVE_LEVEL
)
17756 _In_ HANDLE FileHandle
,
17757 _In_opt_ HANDLE Event
,
17758 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
17759 _In_opt_ PVOID ApcContext
,
17760 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
17761 _In_reads_bytes_(Length
) PVOID Buffer
,
17763 _In_opt_ PLARGE_INTEGER ByteOffset
,
17764 _In_opt_ PULONG Key
);
17766 _IRQL_requires_max_(PASSIVE_LEVEL
)
17770 ZwQueryFullAttributesFile(
17771 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17772 _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
17774 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
17777 #if (NTDDI_VERSION >= NTDDI_WS03)
17778 _IRQL_requires_max_(PASSIVE_LEVEL
)
17783 _Out_ PHANDLE EventHandle
,
17784 _In_ ACCESS_MASK DesiredAccess
,
17785 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
17788 #if (NTDDI_VERSION >= NTDDI_VISTA)
17790 _IRQL_requires_max_(PASSIVE_LEVEL
)
17793 ZwCreateKeyTransacted(
17794 _Out_ PHANDLE KeyHandle
,
17795 _In_ ACCESS_MASK DesiredAccess
,
17796 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17797 _Reserved_ ULONG TitleIndex
,
17798 _In_opt_ PUNICODE_STRING Class
,
17799 _In_ ULONG CreateOptions
,
17800 _In_ HANDLE TransactionHandle
,
17801 _Out_opt_ PULONG Disposition
);
17803 _IRQL_requires_max_(PASSIVE_LEVEL
)
17807 ZwOpenKeyTransacted(
17808 _Out_ PHANDLE KeyHandle
,
17809 _In_ ACCESS_MASK DesiredAccess
,
17810 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
17811 _In_ HANDLE TransactionHandle
);
17813 _IRQL_requires_max_(PASSIVE_LEVEL
)
17817 ZwCreateTransactionManager(
17818 _Out_ PHANDLE TmHandle
,
17819 _In_ ACCESS_MASK DesiredAccess
,
17820 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17821 _In_opt_ PUNICODE_STRING LogFileName
,
17822 _In_opt_ ULONG CreateOptions
,
17823 _In_opt_ ULONG CommitStrength
);
17825 _IRQL_requires_max_(PASSIVE_LEVEL
)
17829 ZwOpenTransactionManager(
17830 _Out_ PHANDLE TmHandle
,
17831 _In_ ACCESS_MASK DesiredAccess
,
17832 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17833 _In_opt_ PUNICODE_STRING LogFileName
,
17834 _In_opt_ LPGUID TmIdentity
,
17835 _In_opt_ ULONG OpenOptions
);
17837 _IRQL_requires_max_(PASSIVE_LEVEL
)
17841 ZwRollforwardTransactionManager(
17842 _In_ HANDLE TransactionManagerHandle
,
17843 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
17845 _IRQL_requires_max_(PASSIVE_LEVEL
)
17849 ZwRecoverTransactionManager(
17850 _In_ HANDLE TransactionManagerHandle
);
17852 _IRQL_requires_max_(PASSIVE_LEVEL
)
17856 ZwQueryInformationTransactionManager(
17857 _In_ HANDLE TransactionManagerHandle
,
17858 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17859 _Out_writes_bytes_(TransactionManagerInformationLength
) PVOID TransactionManagerInformation
,
17860 _In_ ULONG TransactionManagerInformationLength
,
17861 _Out_opt_ PULONG ReturnLength
);
17863 _IRQL_requires_max_(PASSIVE_LEVEL
)
17867 ZwSetInformationTransactionManager(
17868 _In_ HANDLE TmHandle
,
17869 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
17870 _In_ PVOID TransactionManagerInformation
,
17871 _In_ ULONG TransactionManagerInformationLength
);
17873 _IRQL_requires_max_(PASSIVE_LEVEL
)
17877 ZwEnumerateTransactionObject(
17878 _In_opt_ HANDLE RootObjectHandle
,
17879 _In_ KTMOBJECT_TYPE QueryType
,
17880 _Inout_updates_bytes_(ObjectCursorLength
) PKTMOBJECT_CURSOR ObjectCursor
,
17881 _In_ ULONG ObjectCursorLength
,
17882 _Out_ PULONG ReturnLength
);
17884 _IRQL_requires_max_(PASSIVE_LEVEL
)
17888 ZwCreateTransaction(
17889 _Out_ PHANDLE TransactionHandle
,
17890 _In_ ACCESS_MASK DesiredAccess
,
17891 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17892 _In_opt_ LPGUID Uow
,
17893 _In_opt_ HANDLE TmHandle
,
17894 _In_opt_ ULONG CreateOptions
,
17895 _In_opt_ ULONG IsolationLevel
,
17896 _In_opt_ ULONG IsolationFlags
,
17897 _In_opt_ PLARGE_INTEGER Timeout
,
17898 _In_opt_ PUNICODE_STRING Description
);
17900 _IRQL_requires_max_(PASSIVE_LEVEL
)
17905 _Out_ PHANDLE TransactionHandle
,
17906 _In_ ACCESS_MASK DesiredAccess
,
17907 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17909 _In_opt_ HANDLE TmHandle
);
17911 _IRQL_requires_max_(PASSIVE_LEVEL
)
17915 ZwQueryInformationTransaction(
17916 _In_ HANDLE TransactionHandle
,
17917 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17918 _Out_writes_bytes_(TransactionInformationLength
) PVOID TransactionInformation
,
17919 _In_ ULONG TransactionInformationLength
,
17920 _Out_opt_ PULONG ReturnLength
);
17922 _IRQL_requires_max_(PASSIVE_LEVEL
)
17926 ZwSetInformationTransaction(
17927 _In_ HANDLE TransactionHandle
,
17928 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
17929 _In_ PVOID TransactionInformation
,
17930 _In_ ULONG TransactionInformationLength
);
17932 _IRQL_requires_max_(PASSIVE_LEVEL
)
17936 ZwCommitTransaction(
17937 _In_ HANDLE TransactionHandle
,
17938 _In_ BOOLEAN Wait
);
17940 _IRQL_requires_max_(PASSIVE_LEVEL
)
17944 ZwRollbackTransaction(
17945 _In_ HANDLE TransactionHandle
,
17946 _In_ BOOLEAN Wait
);
17948 _IRQL_requires_max_(PASSIVE_LEVEL
)
17952 ZwCreateResourceManager(
17953 _Out_ PHANDLE ResourceManagerHandle
,
17954 _In_ ACCESS_MASK DesiredAccess
,
17955 _In_ HANDLE TmHandle
,
17956 _In_opt_ LPGUID ResourceManagerGuid
,
17957 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
17958 _In_opt_ ULONG CreateOptions
,
17959 _In_opt_ PUNICODE_STRING Description
);
17961 _IRQL_requires_max_(PASSIVE_LEVEL
)
17965 ZwOpenResourceManager(
17966 _Out_ PHANDLE ResourceManagerHandle
,
17967 _In_ ACCESS_MASK DesiredAccess
,
17968 _In_ HANDLE TmHandle
,
17969 _In_ LPGUID ResourceManagerGuid
,
17970 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
17972 _IRQL_requires_max_(PASSIVE_LEVEL
)
17976 ZwRecoverResourceManager(
17977 _In_ HANDLE ResourceManagerHandle
);
17979 _IRQL_requires_max_(PASSIVE_LEVEL
)
17983 ZwGetNotificationResourceManager(
17984 _In_ HANDLE ResourceManagerHandle
,
17985 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification
,
17986 _In_ ULONG NotificationLength
,
17987 _In_ PLARGE_INTEGER Timeout
,
17988 _Out_opt_ PULONG ReturnLength
,
17989 _In_ ULONG Asynchronous
,
17990 _In_opt_ ULONG_PTR AsynchronousContext
);
17992 _IRQL_requires_max_(PASSIVE_LEVEL
)
17996 ZwQueryInformationResourceManager(
17997 _In_ HANDLE ResourceManagerHandle
,
17998 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
17999 _Out_writes_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
18000 _In_ ULONG ResourceManagerInformationLength
,
18001 _Out_opt_ PULONG ReturnLength
);
18003 _IRQL_requires_max_(PASSIVE_LEVEL
)
18007 ZwSetInformationResourceManager(
18008 _In_ HANDLE ResourceManagerHandle
,
18009 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
18010 _In_reads_bytes_(ResourceManagerInformationLength
) PVOID ResourceManagerInformation
,
18011 _In_ ULONG ResourceManagerInformationLength
);
18013 _IRQL_requires_max_(PASSIVE_LEVEL
)
18017 ZwCreateEnlistment(
18018 _Out_ PHANDLE EnlistmentHandle
,
18019 _In_ ACCESS_MASK DesiredAccess
,
18020 _In_ HANDLE ResourceManagerHandle
,
18021 _In_ HANDLE TransactionHandle
,
18022 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
18023 _In_opt_ ULONG CreateOptions
,
18024 _In_ NOTIFICATION_MASK NotificationMask
,
18025 _In_opt_ PVOID EnlistmentKey
);
18027 _IRQL_requires_max_(PASSIVE_LEVEL
)
18032 _Out_ PHANDLE EnlistmentHandle
,
18033 _In_ ACCESS_MASK DesiredAccess
,
18034 _In_ HANDLE RmHandle
,
18035 _In_ LPGUID EnlistmentGuid
,
18036 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
);
18038 _IRQL_requires_max_(PASSIVE_LEVEL
)
18042 ZwQueryInformationEnlistment(
18043 _In_ HANDLE EnlistmentHandle
,
18044 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
18045 _Out_writes_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
18046 _In_ ULONG EnlistmentInformationLength
,
18047 _Out_opt_ PULONG ReturnLength
);
18049 _IRQL_requires_max_(PASSIVE_LEVEL
)
18053 ZwSetInformationEnlistment(
18054 _In_ HANDLE EnlistmentHandle
,
18055 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
18056 _In_reads_bytes_(EnlistmentInformationLength
) PVOID EnlistmentInformation
,
18057 _In_ ULONG EnlistmentInformationLength
);
18059 _IRQL_requires_max_(PASSIVE_LEVEL
)
18063 ZwRecoverEnlistment(
18064 _In_ HANDLE EnlistmentHandle
,
18065 _In_opt_ PVOID EnlistmentKey
);
18067 _IRQL_requires_max_(PASSIVE_LEVEL
)
18071 ZwPrePrepareEnlistment(
18072 _In_ HANDLE EnlistmentHandle
,
18073 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18075 _IRQL_requires_max_(PASSIVE_LEVEL
)
18079 ZwPrepareEnlistment(
18080 _In_ HANDLE EnlistmentHandle
,
18081 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18083 _IRQL_requires_max_(PASSIVE_LEVEL
)
18087 ZwCommitEnlistment(
18088 _In_ HANDLE EnlistmentHandle
,
18089 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18091 _IRQL_requires_max_(PASSIVE_LEVEL
)
18095 ZwRollbackEnlistment(
18096 _In_ HANDLE EnlistmentHandle
,
18097 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18099 _IRQL_requires_max_(PASSIVE_LEVEL
)
18103 ZwPrePrepareComplete(
18104 _In_ HANDLE EnlistmentHandle
,
18105 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18107 _IRQL_requires_max_(PASSIVE_LEVEL
)
18112 _In_ HANDLE EnlistmentHandle
,
18113 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18115 _IRQL_requires_max_(PASSIVE_LEVEL
)
18120 _In_ HANDLE EnlistmentHandle
,
18121 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18123 _IRQL_requires_max_(PASSIVE_LEVEL
)
18127 ZwReadOnlyEnlistment(
18128 _In_ HANDLE EnlistmentHandle
,
18129 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18134 ZwRollbackComplete(
18135 _In_ HANDLE EnlistmentHandle
,
18136 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18141 ZwSinglePhaseReject(
18142 _In_ HANDLE EnlistmentHandle
,
18143 _In_opt_ PLARGE_INTEGER TmVirtualClock
);
18144 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
18145 #if (NTDDI_VERSION >= NTDDI_WIN7)
18147 _IRQL_requires_max_(PASSIVE_LEVEL
)
18152 _Out_ PHANDLE KeyHandle
,
18153 _In_ ACCESS_MASK DesiredAccess
,
18154 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
18155 _In_ ULONG OpenOptions
);
18157 _IRQL_requires_max_(PASSIVE_LEVEL
)
18161 ZwOpenKeyTransactedEx(
18162 _Out_ PHANDLE KeyHandle
,
18163 _In_ ACCESS_MASK DesiredAccess
,
18164 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
18165 _In_ ULONG OpenOptions
,
18166 _In_ HANDLE TransactionHandle
);
18171 ZwNotifyChangeMultipleKeys(
18172 _In_ HANDLE MasterKeyHandle
,
18173 _In_opt_ ULONG Count
,
18174 _In_opt_ OBJECT_ATTRIBUTES SubordinateObjects
[],
18175 _In_opt_ HANDLE Event
,
18176 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
18177 _In_opt_ PVOID ApcContext
,
18178 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
18179 _In_ ULONG CompletionFilter
,
18180 _In_ BOOLEAN WatchTree
,
18181 _Out_opt_ PVOID Buffer
,
18182 _In_ ULONG BufferSize
,
18183 _In_ BOOLEAN Asynchronous
);
18188 ZwQueryMultipleValueKey(
18189 _In_ HANDLE KeyHandle
,
18190 _Inout_ PKEY_VALUE_ENTRY ValueEntries
,
18191 _In_ ULONG EntryCount
,
18192 _Out_ PVOID ValueBuffer
,
18193 _Inout_ PULONG BufferLength
,
18194 _Out_opt_ PULONG RequiredBufferLength
);
18196 _IRQL_requires_max_(PASSIVE_LEVEL
)
18201 _In_ HANDLE KeyHandle
,
18202 _In_ PUNICODE_STRING NewName
);
18204 _IRQL_requires_max_(PASSIVE_LEVEL
)
18208 ZwSetInformationKey(
18209 _In_ HANDLE KeyHandle
,
18210 _In_
__drv_strictTypeMatch(__drv_typeConst
) KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
18211 _In_reads_bytes_(KeySetInformationLength
) PVOID KeySetInformation
,
18212 _In_ ULONG KeySetInformationLength
);
18214 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
18221 #endif /* !_WDMDDK_ */