Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenwdm.h
Go to the documentation of this file.
00001 /* 00002 * wdm.h 00003 * 00004 * Windows NT WDM Driver Developer Kit 00005 * 00006 * This file is part of the ReactOS DDK package. 00007 * 00008 * Contributors: 00009 * Amine Khaldi (amine.khaldi@reactos.org) 00010 * Timo Kreuzer (timo.kreuzer@reactos.org) 00011 * 00012 * THIS SOFTWARE IS NOT COPYRIGHTED 00013 * 00014 * This source code is offered for use in the public domain. You may 00015 * use, modify or distribute it freely. 00016 * 00017 * This code is distributed in the hope that it will be useful but 00018 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00019 * DISCLAIMED. This includes but is not limited to warranties of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00021 * 00022 */ 00023 #pragma once 00024 00025 #ifndef _WDMDDK_ 00026 #define _WDMDDK_ 00027 00028 #define WDM_MAJORVERSION 0x06 00029 #define WDM_MINORVERSION 0x00 00030 00031 /* Included via ntddk.h? */ 00032 #ifndef _NTDDK_ 00033 #define _NTDDK_ 00034 #define _WDM_INCLUDED_ 00035 #define _DDK_DRIVER_ 00036 #define NO_INTERLOCKED_INTRINSICS 00037 #endif /* _NTDDK_ */ 00038 00039 /* Dependencies */ 00040 #define NT_INCLUDED 00041 #include <excpt.h> 00042 #include <ntdef.h> 00043 #include <ntstatus.h> 00044 #include <ntiologc.h> 00045 00046 #ifndef GUID_DEFINED 00047 #include <guiddef.h> 00048 #endif 00049 00050 #ifdef _MAC 00051 #ifndef _INC_STRING 00052 #include <string.h> 00053 #endif /* _INC_STRING */ 00054 #else 00055 #include <string.h> 00056 #endif /* _MAC */ 00057 00058 #ifndef _KTMTYPES_ 00059 typedef GUID UOW, *PUOW; 00060 #endif 00061 00062 typedef GUID *PGUID; 00063 00064 #if (NTDDI_VERSION >= NTDDI_WINXP) 00065 #include <dpfilter.h> 00066 #endif 00067 00068 #include "intrin.h" 00069 00070 __internal_kernel_driver 00071 __drv_Mode_impl(WDM_INCLUDED) 00072 00073 #ifdef __cplusplus 00074 extern "C" { 00075 #endif 00076 00077 #if !defined(_NTHALDLL_) && !defined(_BLDR_) 00078 #define NTHALAPI DECLSPEC_IMPORT 00079 #else 00080 #define NTHALAPI 00081 #endif 00082 00083 /* For ReactOS */ 00084 #if !defined(_NTOSKRNL_) && !defined(_BLDR_) 00085 #define NTKERNELAPI DECLSPEC_IMPORT 00086 #else 00087 #define NTKERNELAPI 00088 #endif 00089 00090 #if defined(_X86_) && !defined(_NTHAL_) 00091 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT 00092 #elif defined(_X86_) 00093 #define _DECL_HAL_KE_IMPORT 00094 #else 00095 #define _DECL_HAL_KE_IMPORT NTKERNELAPI 00096 #endif 00097 00098 #if defined(_WIN64) 00099 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8) 00100 #else 00101 #define POINTER_ALIGNMENT 00102 #endif 00103 00104 /* Helper macro to enable gcc's extension. */ 00105 #ifndef __GNU_EXTENSION 00106 #ifdef __GNUC__ 00107 #define __GNU_EXTENSION __extension__ 00108 #else 00109 #define __GNU_EXTENSION 00110 #endif 00111 #endif 00112 00113 #if defined(_MSC_VER) 00114 00115 /* Disable some warnings */ 00116 #pragma warning(disable:4115) /* Named type definition in parentheses */ 00117 #pragma warning(disable:4201) /* Nameless unions and structs */ 00118 #pragma warning(disable:4214) /* Bit fields of other types than int */ 00119 #pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */ 00120 00121 /* Indicate if #pragma alloc_text() is supported */ 00122 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) 00123 #define ALLOC_PRAGMA 1 00124 #endif 00125 00126 /* Indicate if #pragma data_seg() is supported */ 00127 #if defined(_M_IX86) || defined(_M_AMD64) 00128 #define ALLOC_DATA_PRAGMA 1 00129 #endif 00130 00131 #endif 00132 00133 #if defined(_WIN64) 00134 #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_) 00135 #define USE_DMA_MACROS 00136 #endif 00137 #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__) 00138 #define NO_LEGACY_DRIVERS 00139 #endif 00140 #endif /* defined(_WIN64) */ 00141 00142 /* Forward declarations */ 00143 struct _IRP; 00144 struct _MDL; 00145 struct _KAPC; 00146 struct _KDPC; 00147 struct _FILE_OBJECT; 00148 struct _DMA_ADAPTER; 00149 struct _DEVICE_OBJECT; 00150 struct _DRIVER_OBJECT; 00151 struct _IO_STATUS_BLOCK; 00152 struct _DEVICE_DESCRIPTION; 00153 struct _SCATTER_GATHER_LIST; 00154 struct _DRIVE_LAYOUT_INFORMATION; 00155 struct _COMPRESSED_DATA_INFO; 00156 struct _IO_RESOURCE_DESCRIPTOR; 00157 00158 /* Structures not exposed to drivers */ 00159 typedef struct _OBJECT_TYPE *POBJECT_TYPE; 00160 typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE; 00161 typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE; 00162 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; 00163 typedef struct _EPROCESS *PEPROCESS; 00164 typedef struct _ETHREAD *PETHREAD; 00165 typedef struct _IO_TIMER *PIO_TIMER; 00166 typedef struct _KINTERRUPT *PKINTERRUPT; 00167 typedef struct _KPROCESS *PKPROCESS; 00168 typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; 00169 typedef struct _CONTEXT *PCONTEXT; 00170 00171 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) 00172 typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; 00173 #elif defined(_WDM_INCLUDED_) 00174 typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; 00175 #else 00176 typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 00177 #endif 00178 00179 #ifndef DEFINE_GUIDEX 00180 #ifdef _MSC_VER 00181 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name 00182 #else 00183 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name 00184 #endif 00185 #endif /* DEFINE_GUIDEX */ 00186 00187 #ifndef STATICGUIDOF 00188 #define STATICGUIDOF(guid) STATIC_##guid 00189 #endif 00190 00191 /* GUID Comparison */ 00192 #ifndef __IID_ALIGNED__ 00193 #define __IID_ALIGNED__ 00194 #ifdef __cplusplus 00195 inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) 00196 { 00197 return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && 00198 (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) ); 00199 } 00200 #else 00201 #define IsEqualGUIDAligned(guid1, guid2) \ 00202 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \ 00203 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) ) 00204 #endif /* __cplusplus */ 00205 #endif /* !__IID_ALIGNED__ */ 00206 00207 00208 /****************************************************************************** 00209 * INTERLOCKED Functions * 00210 ******************************************************************************/ 00211 // 00212 // Intrinsics (note: taken from our winnt.h) 00213 // FIXME: 64-bit 00214 // 00215 #if defined(__GNUC__) 00216 00217 static __inline__ BOOLEAN 00218 InterlockedBitTestAndSet( 00219 _Inout_updates_bytes_((Bit+7)/8) _Interlocked_operand_ LONG volatile *Base, 00220 _In_ LONG Bit) 00221 { 00222 #if defined(_M_IX86) 00223 LONG OldBit; 00224 __asm__ __volatile__("lock " 00225 "btsl %2,%1\n\t" 00226 "sbbl %0,%0\n\t" 00227 :"=r" (OldBit),"+m" (*Base) 00228 :"Ir" (Bit) 00229 : "memory"); 00230 return OldBit; 00231 #else 00232 return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1; 00233 #endif 00234 } 00235 00236 static __inline__ BOOLEAN 00237 InterlockedBitTestAndReset( 00238 _Inout_updates_bytes_((Bit+7)/8) _Interlocked_operand_ LONG volatile *Base, 00239 _In_ LONG Bit) 00240 { 00241 #if defined(_M_IX86) 00242 LONG OldBit; 00243 __asm__ __volatile__("lock " 00244 "btrl %2,%1\n\t" 00245 "sbbl %0,%0\n\t" 00246 :"=r" (OldBit),"+m" (*Base) 00247 :"Ir" (Bit) 00248 : "memory"); 00249 return OldBit; 00250 #else 00251 return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1; 00252 #endif 00253 } 00254 00255 #endif /* defined(__GNUC__) */ 00256 00257 #define BitScanForward _BitScanForward 00258 #define BitScanReverse _BitScanReverse 00259 #define BitTest _bittest 00260 #define BitTestAndComplement _bittestandcomplement 00261 #define BitTestAndSet _bittestandset 00262 #define BitTestAndReset _bittestandreset 00263 #define InterlockedBitTestAndSet _interlockedbittestandset 00264 #define InterlockedBitTestAndReset _interlockedbittestandreset 00265 00266 #ifdef _M_AMD64 00267 #define BitTest64 _bittest64 00268 #define BitTestAndComplement64 _bittestandcomplement64 00269 #define BitTestAndSet64 _bittestandset64 00270 #define BitTestAndReset64 _bittestandreset64 00271 #define InterlockedBitTestAndSet64 _interlockedbittestandset64 00272 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64 00273 #endif 00274 00275 #if !defined(__INTERLOCKED_DECLARED) 00276 #define __INTERLOCKED_DECLARED 00277 00278 #if defined (_X86_) 00279 #if defined(NO_INTERLOCKED_INTRINSICS) 00280 NTKERNELAPI 00281 LONG 00282 FASTCALL 00283 InterlockedIncrement( 00284 _Inout_ _Interlocked_operand_ LONG volatile *Addend); 00285 00286 NTKERNELAPI 00287 LONG 00288 FASTCALL 00289 InterlockedDecrement( 00290 _Inout_ _Interlocked_operand_ LONG volatile *Addend); 00291 00292 NTKERNELAPI 00293 LONG 00294 FASTCALL 00295 InterlockedCompareExchange( 00296 _Inout_ _Interlocked_operand_ LONG volatile *Destination, 00297 _In_ LONG Exchange, 00298 _In_ LONG Comparand); 00299 00300 NTKERNELAPI 00301 LONG 00302 FASTCALL 00303 InterlockedExchange( 00304 _Inout_ _Interlocked_operand_ LONG volatile *Destination, 00305 _In_ LONG Value); 00306 00307 NTKERNELAPI 00308 LONG 00309 FASTCALL 00310 InterlockedExchangeAdd( 00311 _Inout_ _Interlocked_operand_ LONG volatile *Addend, 00312 _In_ LONG Value); 00313 00314 #else /* !defined(NO_INTERLOCKED_INTRINSICS) */ 00315 00316 #define InterlockedExchange _InterlockedExchange 00317 #define InterlockedIncrement _InterlockedIncrement 00318 #define InterlockedDecrement _InterlockedDecrement 00319 #define InterlockedExchangeAdd _InterlockedExchangeAdd 00320 #define InterlockedCompareExchange _InterlockedCompareExchange 00321 #define InterlockedOr _InterlockedOr 00322 #define InterlockedAnd _InterlockedAnd 00323 #define InterlockedXor _InterlockedXor 00324 00325 #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */ 00326 00327 #endif /* defined (_X86_) */ 00328 00329 #if !defined (_WIN64) 00330 /* 00331 * PVOID 00332 * InterlockedExchangePointer( 00333 * IN OUT PVOID volatile *Target, 00334 * IN PVOID Value) 00335 */ 00336 #define InterlockedExchangePointer(Target, Value) \ 00337 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value)) 00338 00339 /* 00340 * PVOID 00341 * InterlockedCompareExchangePointer( 00342 * IN OUT PVOID *Destination, 00343 * IN PVOID Exchange, 00344 * IN PVOID Comparand) 00345 */ 00346 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \ 00347 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand)) 00348 00349 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b) 00350 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a) 00351 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a) 00352 00353 #endif // !defined (_WIN64) 00354 00355 #if defined (_M_AMD64) 00356 00357 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b) 00358 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a) 00359 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a) 00360 #define InterlockedAnd _InterlockedAnd 00361 #define InterlockedOr _InterlockedOr 00362 #define InterlockedXor _InterlockedXor 00363 #define InterlockedIncrement _InterlockedIncrement 00364 #define InterlockedDecrement _InterlockedDecrement 00365 #define InterlockedAdd _InterlockedAdd 00366 #define InterlockedExchange _InterlockedExchange 00367 #define InterlockedExchangeAdd _InterlockedExchangeAdd 00368 #define InterlockedCompareExchange _InterlockedCompareExchange 00369 #define InterlockedAnd64 _InterlockedAnd64 00370 #define InterlockedOr64 _InterlockedOr64 00371 #define InterlockedXor64 _InterlockedXor64 00372 #define InterlockedIncrement64 _InterlockedIncrement64 00373 #define InterlockedDecrement64 _InterlockedDecrement64 00374 #define InterlockedAdd64 _InterlockedAdd64 00375 #define InterlockedExchange64 _InterlockedExchange64 00376 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 00377 #define InterlockedCompareExchange64 _InterlockedCompareExchange64 00378 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer 00379 #define InterlockedExchangePointer _InterlockedExchangePointer 00380 #define InterlockedBitTestAndSet64 _interlockedbittestandset64 00381 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64 00382 00383 #endif // _M_AMD64 00384 00385 #if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) 00386 //#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for? 00387 FORCEINLINE 00388 LONG64 00389 InterlockedAdd64( 00390 _Inout_ _Interlocked_operand_ LONG64 volatile *Addend, 00391 _In_ LONG64 Value) 00392 { 00393 return InterlockedExchangeAdd64(Addend, Value) + Value; 00394 } 00395 //#endif 00396 #endif 00397 00398 #endif /* !__INTERLOCKED_DECLARED */ 00399 00400 00401 /****************************************************************************** 00402 * Runtime Library Types * 00403 ******************************************************************************/ 00404 00405 #define RTL_REGISTRY_ABSOLUTE 0 00406 #define RTL_REGISTRY_SERVICES 1 00407 #define RTL_REGISTRY_CONTROL 2 00408 #define RTL_REGISTRY_WINDOWS_NT 3 00409 #define RTL_REGISTRY_DEVICEMAP 4 00410 #define RTL_REGISTRY_USER 5 00411 #define RTL_REGISTRY_MAXIMUM 6 00412 #define RTL_REGISTRY_HANDLE 0x40000000 00413 #define RTL_REGISTRY_OPTIONAL 0x80000000 00414 00415 /* RTL_QUERY_REGISTRY_TABLE.Flags */ 00416 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 00417 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 00418 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 00419 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 00420 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 00421 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020 00422 #define RTL_QUERY_REGISTRY_DELETE 0x00000040 00423 00424 #define HASH_STRING_ALGORITHM_DEFAULT 0 00425 #define HASH_STRING_ALGORITHM_X65599 1 00426 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff 00427 00428 typedef struct _RTL_BITMAP { 00429 ULONG SizeOfBitMap; 00430 PULONG Buffer; 00431 } RTL_BITMAP, *PRTL_BITMAP; 00432 00433 typedef struct _RTL_BITMAP_RUN { 00434 ULONG StartingIndex; 00435 ULONG NumberOfBits; 00436 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; 00437 00438 _Function_class_(RTL_QUERY_REGISTRY_ROUTINE) 00439 _IRQL_requires_max_(PASSIVE_LEVEL) 00440 _IRQL_requires_same_ 00441 typedef NTSTATUS 00442 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)( 00443 _In_z_ PWSTR ValueName, 00444 _In_ ULONG ValueType, 00445 _In_reads_bytes_opt_(ValueLength) PVOID ValueData, 00446 _In_ ULONG ValueLength, 00447 _In_opt_ PVOID Context, 00448 _In_opt_ PVOID EntryContext); 00449 00450 typedef struct _RTL_QUERY_REGISTRY_TABLE { 00451 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; 00452 ULONG Flags; 00453 PCWSTR Name; 00454 PVOID EntryContext; 00455 ULONG DefaultType; 00456 PVOID DefaultData; 00457 ULONG DefaultLength; 00458 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; 00459 00460 typedef struct _TIME_FIELDS { 00461 CSHORT Year; 00462 CSHORT Month; 00463 CSHORT Day; 00464 CSHORT Hour; 00465 CSHORT Minute; 00466 CSHORT Second; 00467 CSHORT Milliseconds; 00468 CSHORT Weekday; 00469 } TIME_FIELDS, *PTIME_FIELDS; 00470 00471 /* Slist Header */ 00472 #ifndef _SLIST_HEADER_ 00473 #define _SLIST_HEADER_ 00474 00475 #if defined(_WIN64) 00476 00477 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { 00478 struct _SLIST_ENTRY *Next; 00479 } SLIST_ENTRY, *PSLIST_ENTRY; 00480 00481 typedef struct _SLIST_ENTRY32 { 00482 ULONG Next; 00483 } SLIST_ENTRY32, *PSLIST_ENTRY32; 00484 00485 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { 00486 _ANONYMOUS_STRUCT struct { 00487 ULONGLONG Alignment; 00488 ULONGLONG Region; 00489 } DUMMYSTRUCTNAME; 00490 struct { 00491 ULONGLONG Depth:16; 00492 ULONGLONG Sequence:9; 00493 ULONGLONG NextEntry:39; 00494 ULONGLONG HeaderType:1; 00495 ULONGLONG Init:1; 00496 ULONGLONG Reserved:59; 00497 ULONGLONG Region:3; 00498 } Header8; 00499 struct { 00500 ULONGLONG Depth:16; 00501 ULONGLONG Sequence:48; 00502 ULONGLONG HeaderType:1; 00503 ULONGLONG Init:1; 00504 ULONGLONG Reserved:2; 00505 ULONGLONG NextEntry:60; 00506 } Header16; 00507 struct { 00508 ULONGLONG Depth:16; 00509 ULONGLONG Sequence:48; 00510 ULONGLONG HeaderType:1; 00511 ULONGLONG Reserved:3; 00512 ULONGLONG NextEntry:60; 00513 } HeaderX64; 00514 } SLIST_HEADER, *PSLIST_HEADER; 00515 00516 typedef union _SLIST_HEADER32 { 00517 ULONGLONG Alignment; 00518 _ANONYMOUS_STRUCT struct { 00519 SLIST_ENTRY32 Next; 00520 USHORT Depth; 00521 USHORT Sequence; 00522 } DUMMYSTRUCTNAME; 00523 } SLIST_HEADER32, *PSLIST_HEADER32; 00524 00525 #else 00526 00527 #define SLIST_ENTRY SINGLE_LIST_ENTRY 00528 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY 00529 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY 00530 00531 typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32; 00532 00533 typedef union _SLIST_HEADER { 00534 ULONGLONG Alignment; 00535 _ANONYMOUS_STRUCT struct { 00536 SLIST_ENTRY Next; 00537 USHORT Depth; 00538 USHORT Sequence; 00539 } DUMMYSTRUCTNAME; 00540 } SLIST_HEADER, *PSLIST_HEADER; 00541 00542 typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32; 00543 00544 #endif /* defined(_WIN64) */ 00545 00546 #endif /* _SLIST_HEADER_ */ 00547 00548 /* MS definition is broken! */ 00549 extern BOOLEAN NTSYSAPI NlsMbCodePageTag; 00550 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag; 00551 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag 00552 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag 00553 00554 #define SHORT_LEAST_SIGNIFICANT_BIT 0 00555 #define SHORT_MOST_SIGNIFICANT_BIT 1 00556 00557 #define LONG_LEAST_SIGNIFICANT_BIT 0 00558 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1 00559 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2 00560 #define LONG_MOST_SIGNIFICANT_BIT 3 00561 00562 #define RTLVERLIB_DDI(x) Wdmlib##x 00563 00564 typedef BOOLEAN 00565 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)( 00566 _In_ ULONG Version); 00567 00568 typedef BOOLEAN 00569 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)( 00570 _In_ ULONG Version); 00571 00572 /****************************************************************************** 00573 * Kernel Types * 00574 ******************************************************************************/ 00575 00576 typedef UCHAR KIRQL, *PKIRQL; 00577 typedef CCHAR KPROCESSOR_MODE; 00578 typedef LONG KPRIORITY; 00579 00580 typedef enum _MODE { 00581 KernelMode, 00582 UserMode, 00583 MaximumMode 00584 } MODE; 00585 00586 #define CACHE_FULLY_ASSOCIATIVE 0xFF 00587 #define MAXIMUM_SUSPEND_COUNT MAXCHAR 00588 00589 #define EVENT_QUERY_STATE (0x0001) 00590 #define EVENT_MODIFY_STATE (0x0002) 00591 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) 00592 00593 #define LTP_PC_SMT 0x1 00594 00595 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS) 00596 #define SINGLE_GROUP_LEGACY_API 1 00597 #endif 00598 00599 #define SEMAPHORE_QUERY_STATE (0x0001) 00600 #define SEMAPHORE_MODIFY_STATE (0x0002) 00601 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) 00602 00603 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP { 00604 RelationProcessorCore, 00605 RelationNumaNode, 00606 RelationCache, 00607 RelationProcessorPackage, 00608 RelationGroup, 00609 RelationAll = 0xffff 00610 } LOGICAL_PROCESSOR_RELATIONSHIP; 00611 00612 typedef enum _PROCESSOR_CACHE_TYPE { 00613 CacheUnified, 00614 CacheInstruction, 00615 CacheData, 00616 CacheTrace 00617 } PROCESSOR_CACHE_TYPE; 00618 00619 typedef struct _CACHE_DESCRIPTOR { 00620 UCHAR Level; 00621 UCHAR Associativity; 00622 USHORT LineSize; 00623 ULONG Size; 00624 PROCESSOR_CACHE_TYPE Type; 00625 } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR; 00626 00627 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { 00628 ULONG_PTR ProcessorMask; 00629 LOGICAL_PROCESSOR_RELATIONSHIP Relationship; 00630 _ANONYMOUS_UNION union { 00631 struct { 00632 UCHAR Flags; 00633 } ProcessorCore; 00634 struct { 00635 ULONG NodeNumber; 00636 } NumaNode; 00637 CACHE_DESCRIPTOR Cache; 00638 ULONGLONG Reserved[2]; 00639 } DUMMYUNIONNAME; 00640 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; 00641 00642 typedef struct _PROCESSOR_RELATIONSHIP { 00643 UCHAR Flags; 00644 UCHAR Reserved[21]; 00645 USHORT GroupCount; 00646 _Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; 00647 } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; 00648 00649 typedef struct _NUMA_NODE_RELATIONSHIP { 00650 ULONG NodeNumber; 00651 UCHAR Reserved[20]; 00652 GROUP_AFFINITY GroupMask; 00653 } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP; 00654 00655 typedef struct _CACHE_RELATIONSHIP { 00656 UCHAR Level; 00657 UCHAR Associativity; 00658 USHORT LineSize; 00659 ULONG CacheSize; 00660 PROCESSOR_CACHE_TYPE Type; 00661 UCHAR Reserved[20]; 00662 GROUP_AFFINITY GroupMask; 00663 } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP; 00664 00665 typedef struct _PROCESSOR_GROUP_INFO { 00666 UCHAR MaximumProcessorCount; 00667 UCHAR ActiveProcessorCount; 00668 UCHAR Reserved[38]; 00669 KAFFINITY ActiveProcessorMask; 00670 } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO; 00671 00672 typedef struct _GROUP_RELATIONSHIP { 00673 USHORT MaximumGroupCount; 00674 USHORT ActiveGroupCount; 00675 UCHAR Reserved[20]; 00676 PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY]; 00677 } GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP; 00678 00679 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { 00680 LOGICAL_PROCESSOR_RELATIONSHIP Relationship; 00681 ULONG Size; 00682 _ANONYMOUS_UNION union { 00683 PROCESSOR_RELATIONSHIP Processor; 00684 NUMA_NODE_RELATIONSHIP NumaNode; 00685 CACHE_RELATIONSHIP Cache; 00686 GROUP_RELATIONSHIP Group; 00687 } DUMMYUNIONNAME; 00688 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;; 00689 00690 /* Processor features */ 00691 #define PF_FLOATING_POINT_PRECISION_ERRATA 0 00692 #define PF_FLOATING_POINT_EMULATED 1 00693 #define PF_COMPARE_EXCHANGE_DOUBLE 2 00694 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3 00695 #define PF_PPC_MOVEMEM_64BIT_OK 4 00696 #define PF_ALPHA_BYTE_INSTRUCTIONS 5 00697 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 00698 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 00699 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8 00700 #define PF_PAE_ENABLED 9 00701 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 00702 #define PF_SSE_DAZ_MODE_AVAILABLE 11 00703 #define PF_NX_ENABLED 12 00704 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 00705 #define PF_COMPARE_EXCHANGE128 14 00706 #define PF_COMPARE64_EXCHANGE128 15 00707 #define PF_CHANNELS_ENABLED 16 00708 #define PF_XSAVE_ENABLED 17 00709 00710 #define MAXIMUM_WAIT_OBJECTS 64 00711 00712 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject) 00713 00714 #define ASSERT_DPC(Object) \ 00715 ASSERT(((Object)->Type == 0) || \ 00716 ((Object)->Type == DpcObject) || \ 00717 ((Object)->Type == ThreadedDpcObject)) 00718 00719 #define ASSERT_GATE(object) \ 00720 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \ 00721 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject)) 00722 00723 #define ASSERT_DEVICE_QUEUE(Object) \ 00724 NT_ASSERT((Object)->Type == DeviceQueueObject) 00725 00726 #define ASSERT_TIMER(E) \ 00727 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \ 00728 ((E)->Header.Type == TimerSynchronizationObject)) 00729 00730 #define ASSERT_MUTANT(E) \ 00731 NT_ASSERT((E)->Header.Type == MutantObject) 00732 00733 #define ASSERT_SEMAPHORE(E) \ 00734 NT_ASSERT((E)->Header.Type == SemaphoreObject) 00735 00736 #define ASSERT_EVENT(E) \ 00737 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \ 00738 ((E)->Header.Type == SynchronizationEvent)) 00739 00740 #define DPC_NORMAL 0 00741 #define DPC_THREADED 1 00742 00743 #define GM_LOCK_BIT 0x1 00744 #define GM_LOCK_BIT_V 0x0 00745 #define GM_LOCK_WAITER_WOKEN 0x2 00746 #define GM_LOCK_WAITER_INC 0x4 00747 00748 #define LOCK_QUEUE_WAIT_BIT 0 00749 #define LOCK_QUEUE_OWNER_BIT 1 00750 00751 #define LOCK_QUEUE_WAIT 1 00752 #define LOCK_QUEUE_OWNER 2 00753 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4 00754 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT)) 00755 00756 #define PROCESSOR_FEATURE_MAX 64 00757 00758 #define DBG_STATUS_CONTROL_C 1 00759 #define DBG_STATUS_SYSRQ 2 00760 #define DBG_STATUS_BUGCHECK_FIRST 3 00761 #define DBG_STATUS_BUGCHECK_SECOND 4 00762 #define DBG_STATUS_FATAL 5 00763 #define DBG_STATUS_DEBUG_CONTROL 6 00764 #define DBG_STATUS_WORKER 7 00765 00766 #if defined(_WIN64) 00767 #define MAXIMUM_PROC_PER_GROUP 64 00768 #else 00769 #define MAXIMUM_PROC_PER_GROUP 32 00770 #endif 00771 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP 00772 00773 /* Exception Records */ 00774 #define EXCEPTION_NONCONTINUABLE 1 00775 #define EXCEPTION_MAXIMUM_PARAMETERS 15 00776 00777 #define EXCEPTION_DIVIDED_BY_ZERO 0 00778 #define EXCEPTION_DEBUG 1 00779 #define EXCEPTION_NMI 2 00780 #define EXCEPTION_INT3 3 00781 #define EXCEPTION_BOUND_CHECK 5 00782 #define EXCEPTION_INVALID_OPCODE 6 00783 #define EXCEPTION_NPX_NOT_AVAILABLE 7 00784 #define EXCEPTION_DOUBLE_FAULT 8 00785 #define EXCEPTION_NPX_OVERRUN 9 00786 #define EXCEPTION_INVALID_TSS 0x0A 00787 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B 00788 #define EXCEPTION_STACK_FAULT 0x0C 00789 #define EXCEPTION_GP_FAULT 0x0D 00790 #define EXCEPTION_RESERVED_TRAP 0x0F 00791 #define EXCEPTION_NPX_ERROR 0x010 00792 #define EXCEPTION_ALIGNMENT_CHECK 0x011 00793 00794 typedef struct _EXCEPTION_RECORD { 00795 NTSTATUS ExceptionCode; 00796 ULONG ExceptionFlags; 00797 struct _EXCEPTION_RECORD *ExceptionRecord; 00798 PVOID ExceptionAddress; 00799 ULONG NumberParameters; 00800 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; 00801 } EXCEPTION_RECORD, *PEXCEPTION_RECORD; 00802 00803 typedef struct _EXCEPTION_RECORD32 { 00804 NTSTATUS ExceptionCode; 00805 ULONG ExceptionFlags; 00806 ULONG ExceptionRecord; 00807 ULONG ExceptionAddress; 00808 ULONG NumberParameters; 00809 ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; 00810 } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32; 00811 00812 typedef struct _EXCEPTION_RECORD64 { 00813 NTSTATUS ExceptionCode; 00814 ULONG ExceptionFlags; 00815 ULONG64 ExceptionRecord; 00816 ULONG64 ExceptionAddress; 00817 ULONG NumberParameters; 00818 ULONG __unusedAlignment; 00819 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; 00820 } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64; 00821 00822 typedef struct _EXCEPTION_POINTERS { 00823 PEXCEPTION_RECORD ExceptionRecord; 00824 PCONTEXT ContextRecord; 00825 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; 00826 00827 typedef enum _KBUGCHECK_CALLBACK_REASON { 00828 KbCallbackInvalid, 00829 KbCallbackReserved1, 00830 KbCallbackSecondaryDumpData, 00831 KbCallbackDumpIo, 00832 KbCallbackAddPages 00833 } KBUGCHECK_CALLBACK_REASON; 00834 00835 struct _KBUGCHECK_REASON_CALLBACK_RECORD; 00836 00837 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE) 00838 _IRQL_requires_same_ 00839 typedef VOID 00840 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)( 00841 _In_ KBUGCHECK_CALLBACK_REASON Reason, 00842 _In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, 00843 _Inout_ PVOID ReasonSpecificData, 00844 _In_ ULONG ReasonSpecificDataLength); 00845 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE; 00846 00847 typedef struct _KBUGCHECK_ADD_PAGES { 00848 _Inout_ PVOID Context; 00849 _Inout_ ULONG Flags; 00850 _In_ ULONG BugCheckCode; 00851 _Out_ ULONG_PTR Address; 00852 _Out_ ULONG_PTR Count; 00853 } KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES; 00854 00855 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA { 00856 _In_ PVOID InBuffer; 00857 _In_ ULONG InBufferLength; 00858 _In_ ULONG MaximumAllowed; 00859 _Out_ GUID Guid; 00860 _Out_ PVOID OutBuffer; 00861 _Out_ ULONG OutBufferLength; 00862 } KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA; 00863 00864 typedef enum _KBUGCHECK_DUMP_IO_TYPE { 00865 KbDumpIoInvalid, 00866 KbDumpIoHeader, 00867 KbDumpIoBody, 00868 KbDumpIoSecondaryData, 00869 KbDumpIoComplete 00870 } KBUGCHECK_DUMP_IO_TYPE; 00871 00872 typedef struct _KBUGCHECK_DUMP_IO { 00873 _In_ ULONG64 Offset; 00874 _In_ PVOID Buffer; 00875 _In_ ULONG BufferLength; 00876 _In_ KBUGCHECK_DUMP_IO_TYPE Type; 00877 } KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO; 00878 00879 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL 00880 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL 00881 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL 00882 00883 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD { 00884 LIST_ENTRY Entry; 00885 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; 00886 PUCHAR Component; 00887 ULONG_PTR Checksum; 00888 KBUGCHECK_CALLBACK_REASON Reason; 00889 UCHAR State; 00890 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD; 00891 00892 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { 00893 BufferEmpty, 00894 BufferInserted, 00895 BufferStarted, 00896 BufferFinished, 00897 BufferIncomplete 00898 } KBUGCHECK_BUFFER_DUMP_STATE; 00899 00900 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE) 00901 _IRQL_requires_same_ 00902 typedef VOID 00903 (NTAPI KBUGCHECK_CALLBACK_ROUTINE)( 00904 IN PVOID Buffer, 00905 IN ULONG Length); 00906 typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE; 00907 00908 typedef struct _KBUGCHECK_CALLBACK_RECORD { 00909 LIST_ENTRY Entry; 00910 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; 00911 _Field_size_bytes_opt_(Length) PVOID Buffer; 00912 ULONG Length; 00913 PUCHAR Component; 00914 ULONG_PTR Checksum; 00915 UCHAR State; 00916 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; 00917 00918 _Function_class_(NMI_CALLBACK) 00919 _IRQL_requires_same_ 00920 typedef BOOLEAN 00921 (NTAPI NMI_CALLBACK)( 00922 _In_opt_ PVOID Context, 00923 _In_ BOOLEAN Handled); 00924 typedef NMI_CALLBACK *PNMI_CALLBACK; 00925 00926 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE { 00927 KeProcessorAddStartNotify = 0, 00928 KeProcessorAddCompleteNotify, 00929 KeProcessorAddFailureNotify 00930 } KE_PROCESSOR_CHANGE_NOTIFY_STATE; 00931 00932 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT { 00933 KE_PROCESSOR_CHANGE_NOTIFY_STATE State; 00934 ULONG NtNumber; 00935 NTSTATUS Status; 00936 #if (NTDDI_VERSION >= NTDDI_WIN7) 00937 PROCESSOR_NUMBER ProcNumber; 00938 #endif 00939 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT; 00940 00941 _IRQL_requires_same_ 00942 _Function_class_(PROCESSOR_CALLBACK_FUNCTION) 00943 typedef VOID 00944 (NTAPI PROCESSOR_CALLBACK_FUNCTION)( 00945 _In_ PVOID CallbackContext, 00946 _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext, 00947 _Inout_ PNTSTATUS OperationStatus); 00948 typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION; 00949 00950 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1 00951 00952 #define INVALID_PROCESSOR_INDEX 0xffffffff 00953 00954 typedef enum _KINTERRUPT_POLARITY { 00955 InterruptPolarityUnknown, 00956 InterruptActiveHigh, 00957 InterruptActiveLow 00958 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY; 00959 00960 typedef enum _KPROFILE_SOURCE { 00961 ProfileTime, 00962 ProfileAlignmentFixup, 00963 ProfileTotalIssues, 00964 ProfilePipelineDry, 00965 ProfileLoadInstructions, 00966 ProfilePipelineFrozen, 00967 ProfileBranchInstructions, 00968 ProfileTotalNonissues, 00969 ProfileDcacheMisses, 00970 ProfileIcacheMisses, 00971 ProfileCacheMisses, 00972 ProfileBranchMispredictions, 00973 ProfileStoreInstructions, 00974 ProfileFpInstructions, 00975 ProfileIntegerInstructions, 00976 Profile2Issue, 00977 Profile3Issue, 00978 Profile4Issue, 00979 ProfileSpecialInstructions, 00980 ProfileTotalCycles, 00981 ProfileIcacheIssues, 00982 ProfileDcacheAccesses, 00983 ProfileMemoryBarrierCycles, 00984 ProfileLoadLinkedIssues, 00985 ProfileMaximum 00986 } KPROFILE_SOURCE; 00987 00988 typedef enum _KWAIT_REASON { 00989 Executive, 00990 FreePage, 00991 PageIn, 00992 PoolAllocation, 00993 DelayExecution, 00994 Suspended, 00995 UserRequest, 00996 WrExecutive, 00997 WrFreePage, 00998 WrPageIn, 00999 WrPoolAllocation, 01000 WrDelayExecution, 01001 WrSuspended, 01002 WrUserRequest, 01003 WrEventPair, 01004 WrQueue, 01005 WrLpcReceive, 01006 WrLpcReply, 01007 WrVirtualMemory, 01008 WrPageOut, 01009 WrRendezvous, 01010 WrKeyedEvent, 01011 WrTerminated, 01012 WrProcessInSwap, 01013 WrCpuRateControl, 01014 WrCalloutStack, 01015 WrKernel, 01016 WrResource, 01017 WrPushLock, 01018 WrMutex, 01019 WrQuantumEnd, 01020 WrDispatchInt, 01021 WrPreempted, 01022 WrYieldExecution, 01023 WrFastMutex, 01024 WrGuardedMutex, 01025 WrRundown, 01026 MaximumWaitReason 01027 } KWAIT_REASON; 01028 01029 typedef struct _KWAIT_BLOCK { 01030 LIST_ENTRY WaitListEntry; 01031 struct _KTHREAD *Thread; 01032 PVOID Object; 01033 struct _KWAIT_BLOCK *NextWaitBlock; 01034 USHORT WaitKey; 01035 UCHAR WaitType; 01036 #if (NTDDI_VERSION >= NTDDI_WIN7) 01037 volatile UCHAR BlockState; 01038 #else 01039 UCHAR SpareByte; 01040 #endif 01041 #if defined(_WIN64) 01042 LONG SpareLong; 01043 #endif 01044 } KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK; 01045 01046 typedef enum _KINTERRUPT_MODE { 01047 LevelSensitive, 01048 Latched 01049 } KINTERRUPT_MODE; 01050 01051 #define THREAD_WAIT_OBJECTS 3 01052 01053 _IRQL_requires_same_ 01054 _Function_class_(KSTART_ROUTINE) 01055 typedef VOID 01056 (NTAPI KSTART_ROUTINE)( 01057 _In_ PVOID StartContext); 01058 typedef KSTART_ROUTINE *PKSTART_ROUTINE; 01059 01060 typedef VOID 01061 (NTAPI *PKINTERRUPT_ROUTINE)( 01062 VOID); 01063 01064 _Function_class_(KSERVICE_ROUTINE) 01065 _IRQL_requires_(HIGH_LEVEL) 01066 _IRQL_requires_same_ 01067 typedef BOOLEAN 01068 (NTAPI KSERVICE_ROUTINE)( 01069 _In_ struct _KINTERRUPT *Interrupt, 01070 _In_ PVOID ServiceContext); 01071 typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; 01072 01073 _Function_class_(KMESSAGE_SERVICE_ROUTINE) 01074 _IRQL_requires_same_ 01075 typedef BOOLEAN 01076 (NTAPI KMESSAGE_SERVICE_ROUTINE)( 01077 _In_ struct _KINTERRUPT *Interrupt, 01078 _In_ PVOID ServiceContext, 01079 _In_ ULONG MessageID); 01080 typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE; 01081 01082 typedef enum _KD_OPTION { 01083 KD_OPTION_SET_BLOCK_ENABLE, 01084 } KD_OPTION; 01085 01086 typedef VOID 01087 (NTAPI *PKNORMAL_ROUTINE)( 01088 IN PVOID NormalContext OPTIONAL, 01089 IN PVOID SystemArgument1 OPTIONAL, 01090 IN PVOID SystemArgument2 OPTIONAL); 01091 01092 typedef VOID 01093 (NTAPI *PKRUNDOWN_ROUTINE)( 01094 IN struct _KAPC *Apc); 01095 01096 typedef VOID 01097 (NTAPI *PKKERNEL_ROUTINE)( 01098 IN struct _KAPC *Apc, 01099 IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL, 01100 IN OUT PVOID *NormalContext OPTIONAL, 01101 IN OUT PVOID *SystemArgument1 OPTIONAL, 01102 IN OUT PVOID *SystemArgument2 OPTIONAL); 01103 01104 typedef struct _KAPC { 01105 UCHAR Type; 01106 UCHAR SpareByte0; 01107 UCHAR Size; 01108 UCHAR SpareByte1; 01109 ULONG SpareLong0; 01110 struct _KTHREAD *Thread; 01111 LIST_ENTRY ApcListEntry; 01112 PKKERNEL_ROUTINE KernelRoutine; 01113 PKRUNDOWN_ROUTINE RundownRoutine; 01114 PKNORMAL_ROUTINE NormalRoutine; 01115 PVOID NormalContext; 01116 PVOID SystemArgument1; 01117 PVOID SystemArgument2; 01118 CCHAR ApcStateIndex; 01119 KPROCESSOR_MODE ApcMode; 01120 BOOLEAN Inserted; 01121 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; 01122 01123 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0) 01124 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1) 01125 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0) 01126 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1) 01127 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2) 01128 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex) 01129 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN)) 01130 01131 typedef struct _KDEVICE_QUEUE_ENTRY { 01132 LIST_ENTRY DeviceListEntry; 01133 ULONG SortKey; 01134 BOOLEAN Inserted; 01135 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, 01136 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; 01137 01138 typedef PVOID PKIPI_CONTEXT; 01139 01140 typedef VOID 01141 (NTAPI *PKIPI_WORKER)( 01142 IN OUT PKIPI_CONTEXT PacketContext, 01143 IN PVOID Parameter1 OPTIONAL, 01144 IN PVOID Parameter2 OPTIONAL, 01145 IN PVOID Parameter3 OPTIONAL); 01146 01147 typedef struct _KIPI_COUNTS { 01148 ULONG Freeze; 01149 ULONG Packet; 01150 ULONG DPC; 01151 ULONG APC; 01152 ULONG FlushSingleTb; 01153 ULONG FlushMultipleTb; 01154 ULONG FlushEntireTb; 01155 ULONG GenericCall; 01156 ULONG ChangeColor; 01157 ULONG SweepDcache; 01158 ULONG SweepIcache; 01159 ULONG SweepIcacheRange; 01160 ULONG FlushIoBuffers; 01161 ULONG GratuitousDPC; 01162 } KIPI_COUNTS, *PKIPI_COUNTS; 01163 01164 _IRQL_requires_same_ 01165 _Function_class_(KIPI_BROADCAST_WORKER) 01166 _IRQL_requires_(IPI_LEVEL) 01167 typedef ULONG_PTR 01168 (NTAPI KIPI_BROADCAST_WORKER)( 01169 _In_ ULONG_PTR Argument); 01170 typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER; 01171 01172 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; 01173 01174 typedef struct _KSPIN_LOCK_QUEUE { 01175 struct _KSPIN_LOCK_QUEUE *volatile Next; 01176 PKSPIN_LOCK volatile Lock; 01177 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; 01178 01179 typedef struct _KLOCK_QUEUE_HANDLE { 01180 KSPIN_LOCK_QUEUE LockQueue; 01181 KIRQL OldIrql; 01182 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; 01183 01184 #if defined(_AMD64_) 01185 01186 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER; 01187 01188 #define LockQueueDispatcherLock 0 01189 #define LockQueueExpansionLock 1 01190 #define LockQueuePfnLock 2 01191 #define LockQueueSystemSpaceLock 3 01192 #define LockQueueVacbLock 4 01193 #define LockQueueMasterLock 5 01194 #define LockQueueNonPagedPoolLock 6 01195 #define LockQueueIoCancelLock 7 01196 #define LockQueueWorkQueueLock 8 01197 #define LockQueueIoVpbLock 9 01198 #define LockQueueIoDatabaseLock 10 01199 #define LockQueueIoCompletionLock 11 01200 #define LockQueueNtfsStructLock 12 01201 #define LockQueueAfdWorkQueueLock 13 01202 #define LockQueueBcbLock 14 01203 #define LockQueueMmNonPagedPoolLock 15 01204 #define LockQueueUnusedSpare16 16 01205 #define LockQueueTimerTableLock 17 01206 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS) 01207 01208 #else 01209 01210 typedef enum _KSPIN_LOCK_QUEUE_NUMBER { 01211 LockQueueDispatcherLock, 01212 LockQueueExpansionLock, 01213 LockQueuePfnLock, 01214 LockQueueSystemSpaceLock, 01215 LockQueueVacbLock, 01216 LockQueueMasterLock, 01217 LockQueueNonPagedPoolLock, 01218 LockQueueIoCancelLock, 01219 LockQueueWorkQueueLock, 01220 LockQueueIoVpbLock, 01221 LockQueueIoDatabaseLock, 01222 LockQueueIoCompletionLock, 01223 LockQueueNtfsStructLock, 01224 LockQueueAfdWorkQueueLock, 01225 LockQueueBcbLock, 01226 LockQueueMmNonPagedPoolLock, 01227 LockQueueUnusedSpare16, 01228 LockQueueTimerTableLock, 01229 LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS 01230 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; 01231 01232 #endif /* defined(_AMD64_) */ 01233 01234 _Function_class_(KDEFERRED_ROUTINE) 01235 _IRQL_requires_(DISPATCH_LEVEL) 01236 _IRQL_requires_same_ 01237 typedef VOID 01238 (NTAPI KDEFERRED_ROUTINE)( 01239 _In_ struct _KDPC *Dpc, 01240 _In_opt_ PVOID DeferredContext, 01241 _In_opt_ PVOID SystemArgument1, 01242 _In_opt_ PVOID SystemArgument2); 01243 typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE; 01244 01245 typedef enum _KDPC_IMPORTANCE { 01246 LowImportance, 01247 MediumImportance, 01248 HighImportance, 01249 MediumHighImportance 01250 } KDPC_IMPORTANCE; 01251 01252 typedef struct _KDPC { 01253 UCHAR Type; 01254 UCHAR Importance; 01255 volatile USHORT Number; 01256 LIST_ENTRY DpcListEntry; 01257 PKDEFERRED_ROUTINE DeferredRoutine; 01258 PVOID DeferredContext; 01259 PVOID SystemArgument1; 01260 PVOID SystemArgument2; 01261 volatile PVOID DpcData; 01262 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; 01263 01264 typedef struct _KDPC_WATCHDOG_INFORMATION { 01265 ULONG DpcTimeLimit; 01266 ULONG DpcTimeCount; 01267 ULONG DpcWatchdogLimit; 01268 ULONG DpcWatchdogCount; 01269 ULONG Reserved; 01270 } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION; 01271 01272 typedef struct _KDEVICE_QUEUE { 01273 CSHORT Type; 01274 CSHORT Size; 01275 LIST_ENTRY DeviceListHead; 01276 KSPIN_LOCK Lock; 01277 # if defined(_AMD64_) 01278 _ANONYMOUS_UNION union { 01279 BOOLEAN Busy; 01280 _ANONYMOUS_STRUCT struct { 01281 LONG64 Reserved:8; 01282 LONG64 Hint:56; 01283 } DUMMYSTRUCTNAME; 01284 } DUMMYUNIONNAME; 01285 # else 01286 BOOLEAN Busy; 01287 # endif 01288 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; 01289 01290 #define TIMER_EXPIRED_INDEX_BITS 6 01291 #define TIMER_PROCESSOR_INDEX_BITS 5 01292 01293 typedef struct _DISPATCHER_HEADER { 01294 _ANONYMOUS_UNION union { 01295 _ANONYMOUS_STRUCT struct { 01296 UCHAR Type; 01297 _ANONYMOUS_UNION union { 01298 _ANONYMOUS_UNION union { 01299 UCHAR TimerControlFlags; 01300 _ANONYMOUS_STRUCT struct { 01301 UCHAR Absolute:1; 01302 UCHAR Coalescable:1; 01303 UCHAR KeepShifting:1; 01304 UCHAR EncodedTolerableDelay:5; 01305 } DUMMYSTRUCTNAME; 01306 } DUMMYUNIONNAME; 01307 UCHAR Abandoned; 01308 #if (NTDDI_VERSION < NTDDI_WIN7) 01309 UCHAR NpxIrql; 01310 #endif 01311 BOOLEAN Signalling; 01312 } DUMMYUNIONNAME; 01313 _ANONYMOUS_UNION union { 01314 _ANONYMOUS_UNION union { 01315 UCHAR ThreadControlFlags; 01316 _ANONYMOUS_STRUCT struct { 01317 UCHAR CpuThrottled:1; 01318 UCHAR CycleProfiling:1; 01319 UCHAR CounterProfiling:1; 01320 UCHAR Reserved:5; 01321 } DUMMYSTRUCTNAME; 01322 } DUMMYUNIONNAME; 01323 UCHAR Size; 01324 UCHAR Hand; 01325 } DUMMYUNIONNAME2; 01326 _ANONYMOUS_UNION union { 01327 #if (NTDDI_VERSION >= NTDDI_WIN7) 01328 _ANONYMOUS_UNION union { 01329 UCHAR TimerMiscFlags; 01330 _ANONYMOUS_STRUCT struct { 01331 #if !defined(_X86_) 01332 UCHAR Index:TIMER_EXPIRED_INDEX_BITS; 01333 #else 01334 UCHAR Index:1; 01335 UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS; 01336 #endif 01337 UCHAR Inserted:1; 01338 volatile UCHAR Expired:1; 01339 } DUMMYSTRUCTNAME; 01340 } DUMMYUNIONNAME; 01341 #else 01342 /* Pre Win7 compatibility fix to latest WDK */ 01343 UCHAR Inserted; 01344 #endif 01345 _ANONYMOUS_UNION union { 01346 BOOLEAN DebugActive; 01347 _ANONYMOUS_STRUCT struct { 01348 BOOLEAN ActiveDR7:1; 01349 BOOLEAN Instrumented:1; 01350 BOOLEAN Reserved2:4; 01351 BOOLEAN UmsScheduled:1; 01352 BOOLEAN UmsPrimary:1; 01353 } DUMMYSTRUCTNAME; 01354 } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */ 01355 BOOLEAN DpcActive; 01356 } DUMMYUNIONNAME3; 01357 } DUMMYSTRUCTNAME; 01358 volatile LONG Lock; 01359 } DUMMYUNIONNAME; 01360 LONG SignalState; 01361 LIST_ENTRY WaitListHead; 01362 } DISPATCHER_HEADER, *PDISPATCHER_HEADER; 01363 01364 typedef struct _KEVENT { 01365 DISPATCHER_HEADER Header; 01366 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; 01367 01368 typedef struct _KSEMAPHORE { 01369 DISPATCHER_HEADER Header; 01370 LONG Limit; 01371 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; 01372 01373 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG)) 01374 01375 typedef struct _KGATE { 01376 DISPATCHER_HEADER Header; 01377 } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE; 01378 01379 typedef struct _KGUARDED_MUTEX { 01380 volatile LONG Count; 01381 PKTHREAD Owner; 01382 ULONG Contention; 01383 KGATE Gate; 01384 _ANONYMOUS_UNION union { 01385 _ANONYMOUS_STRUCT struct { 01386 SHORT KernelApcDisable; 01387 SHORT SpecialApcDisable; 01388 } DUMMYSTRUCTNAME; 01389 ULONG CombinedApcDisable; 01390 } DUMMYUNIONNAME; 01391 } KGUARDED_MUTEX, *PKGUARDED_MUTEX; 01392 01393 typedef struct _KMUTANT { 01394 DISPATCHER_HEADER Header; 01395 LIST_ENTRY MutantListEntry; 01396 struct _KTHREAD *RESTRICTED_POINTER OwnerThread; 01397 BOOLEAN Abandoned; 01398 UCHAR ApcDisable; 01399 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; 01400 01401 #define TIMER_TABLE_SIZE 512 01402 #define TIMER_TABLE_SHIFT 9 01403 01404 typedef struct _KTIMER { 01405 DISPATCHER_HEADER Header; 01406 ULARGE_INTEGER DueTime; 01407 LIST_ENTRY TimerListEntry; 01408 struct _KDPC *Dpc; 01409 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_) 01410 ULONG Processor; 01411 #endif 01412 ULONG Period; 01413 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; 01414 01415 typedef enum _LOCK_OPERATION { 01416 IoReadAccess, 01417 IoWriteAccess, 01418 IoModifyAccess 01419 } LOCK_OPERATION; 01420 01421 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG)) 01422 01423 _Function_class_(KSYNCHRONIZE_ROUTINE) 01424 _IRQL_requires_same_ 01425 typedef BOOLEAN 01426 (NTAPI KSYNCHRONIZE_ROUTINE)( 01427 _In_ PVOID SynchronizeContext); 01428 typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE; 01429 01430 typedef enum _POOL_TYPE { 01431 NonPagedPool, 01432 PagedPool, 01433 NonPagedPoolMustSucceed, 01434 DontUseThisType, 01435 NonPagedPoolCacheAligned, 01436 PagedPoolCacheAligned, 01437 NonPagedPoolCacheAlignedMustS, 01438 MaxPoolType, 01439 NonPagedPoolSession = 32, 01440 PagedPoolSession, 01441 NonPagedPoolMustSucceedSession, 01442 DontUseThisTypeSession, 01443 NonPagedPoolCacheAlignedSession, 01444 PagedPoolCacheAlignedSession, 01445 NonPagedPoolCacheAlignedMustSSession 01446 } POOL_TYPE; 01447 01448 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { 01449 StandardDesign, 01450 NEC98x86, 01451 EndAlternatives 01452 } ALTERNATIVE_ARCHITECTURE_TYPE; 01453 01454 #ifndef _X86_ 01455 01456 #ifndef IsNEC_98 01457 #define IsNEC_98 (FALSE) 01458 #endif 01459 01460 #ifndef IsNotNEC_98 01461 #define IsNotNEC_98 (TRUE) 01462 #endif 01463 01464 #ifndef SetNEC_98 01465 #define SetNEC_98 01466 #endif 01467 01468 #ifndef SetNotNEC_98 01469 #define SetNotNEC_98 01470 #endif 01471 01472 #endif 01473 01474 typedef struct _KSYSTEM_TIME { 01475 ULONG LowPart; 01476 LONG High1Time; 01477 LONG High2Time; 01478 } KSYSTEM_TIME, *PKSYSTEM_TIME; 01479 01480 typedef struct DECLSPEC_ALIGN(16) _M128A { 01481 ULONGLONG Low; 01482 LONGLONG High; 01483 } M128A, *PM128A; 01484 01485 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT { 01486 USHORT ControlWord; 01487 USHORT StatusWord; 01488 UCHAR TagWord; 01489 UCHAR Reserved1; 01490 USHORT ErrorOpcode; 01491 ULONG ErrorOffset; 01492 USHORT ErrorSelector; 01493 USHORT Reserved2; 01494 ULONG DataOffset; 01495 USHORT DataSelector; 01496 USHORT Reserved3; 01497 ULONG MxCsr; 01498 ULONG MxCsr_Mask; 01499 M128A FloatRegisters[8]; 01500 #if defined(_WIN64) 01501 M128A XmmRegisters[16]; 01502 UCHAR Reserved4[96]; 01503 #else 01504 M128A XmmRegisters[8]; 01505 UCHAR Reserved4[192]; 01506 ULONG StackControl[7]; 01507 ULONG Cr0NpxState; 01508 #endif 01509 } XSAVE_FORMAT, *PXSAVE_FORMAT; 01510 01511 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER { 01512 ULONG64 Mask; 01513 ULONG64 Reserved[7]; 01514 } XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER; 01515 01516 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA { 01517 XSAVE_FORMAT LegacyState; 01518 XSAVE_AREA_HEADER Header; 01519 } XSAVE_AREA, *PXSAVE_AREA; 01520 01521 typedef struct _XSTATE_CONTEXT { 01522 ULONG64 Mask; 01523 ULONG Length; 01524 ULONG Reserved1; 01525 _Field_size_bytes_opt_(Length) PXSAVE_AREA Area; 01526 #if defined(_X86_) 01527 ULONG Reserved2; 01528 #endif 01529 PVOID Buffer; 01530 #if defined(_X86_) 01531 ULONG Reserved3; 01532 #endif 01533 } XSTATE_CONTEXT, *PXSTATE_CONTEXT; 01534 01535 typedef struct _XSTATE_SAVE { 01536 #if defined(_AMD64_) 01537 struct _XSTATE_SAVE* Prev; 01538 struct _KTHREAD* Thread; 01539 UCHAR Level; 01540 XSTATE_CONTEXT XStateContext; 01541 #elif defined(_IA64_) 01542 ULONG Dummy; 01543 #elif defined(_X86_) 01544 _ANONYMOUS_UNION union { 01545 _ANONYMOUS_STRUCT struct { 01546 LONG64 Reserved1; 01547 ULONG Reserved2; 01548 struct _XSTATE_SAVE* Prev; 01549 PXSAVE_AREA Reserved3; 01550 struct _KTHREAD* Thread; 01551 PVOID Reserved4; 01552 UCHAR Level; 01553 } DUMMYSTRUCTNAME; 01554 XSTATE_CONTEXT XStateContext; 01555 } DUMMYUNIONNAME; 01556 #endif 01557 } XSTATE_SAVE, *PXSTATE_SAVE; 01558 01559 #ifdef _X86_ 01560 01561 #define MAXIMUM_SUPPORTED_EXTENSION 512 01562 01563 #if !defined(__midl) && !defined(MIDL_PASS) 01564 C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION); 01565 #endif 01566 01567 #endif /* _X86_ */ 01568 01569 #define XSAVE_ALIGN 64 01570 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA) 01571 01572 #if !defined(__midl) && !defined(MIDL_PASS) 01573 C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0); 01574 C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0); 01575 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64); 01576 #endif 01577 01578 typedef struct _CONTEXT_CHUNK { 01579 LONG Offset; 01580 ULONG Length; 01581 } CONTEXT_CHUNK, *PCONTEXT_CHUNK; 01582 01583 typedef struct _CONTEXT_EX { 01584 CONTEXT_CHUNK All; 01585 CONTEXT_CHUNK Legacy; 01586 CONTEXT_CHUNK XState; 01587 } CONTEXT_EX, *PCONTEXT_EX; 01588 01589 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN) 01590 01591 #if (NTDDI_VERSION >= NTDDI_VISTA) 01592 extern NTSYSAPI volatile CCHAR KeNumberProcessors; 01593 #elif (NTDDI_VERSION >= NTDDI_WINXP) 01594 extern NTSYSAPI CCHAR KeNumberProcessors; 01595 #else 01596 extern PCCHAR KeNumberProcessors; 01597 #endif 01598 01599 01600 /****************************************************************************** 01601 * Memory manager Types * 01602 ******************************************************************************/ 01603 01604 #if (NTDDI_VERSION >= NTDDI_WIN2K) 01605 typedef ULONG NODE_REQUIREMENT; 01606 #define MM_ANY_NODE_OK 0x80000000 01607 #endif 01608 01609 #define MM_DONT_ZERO_ALLOCATION 0x00000001 01610 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002 01611 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004 01612 #define MM_ALLOCATE_NO_WAIT 0x00000008 01613 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010 01614 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020 01615 01616 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 01617 #define MDL_PAGES_LOCKED 0x0002 01618 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 01619 #define MDL_ALLOCATED_FIXED_SIZE 0x0008 01620 #define MDL_PARTIAL 0x0010 01621 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 01622 #define MDL_IO_PAGE_READ 0x0040 01623 #define MDL_WRITE_OPERATION 0x0080 01624 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 01625 #define MDL_FREE_EXTRA_PTES 0x0200 01626 #define MDL_DESCRIBES_AWE 0x0400 01627 #define MDL_IO_SPACE 0x0800 01628 #define MDL_NETWORK_HEADER 0x1000 01629 #define MDL_MAPPING_CAN_FAIL 0x2000 01630 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 01631 #define MDL_INTERNAL 0x8000 01632 01633 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \ 01634 MDL_PAGES_LOCKED | \ 01635 MDL_SOURCE_IS_NONPAGED_POOL | \ 01636 MDL_PARTIAL_HAS_BEEN_MAPPED | \ 01637 MDL_PARENT_MAPPED_SYSTEM_VA | \ 01638 MDL_SYSTEM_VA | \ 01639 MDL_IO_SPACE) 01640 01641 #define FLUSH_MULTIPLE_MAXIMUM 32 01642 01643 /* Section access rights */ 01644 #define SECTION_QUERY 0x0001 01645 #define SECTION_MAP_WRITE 0x0002 01646 #define SECTION_MAP_READ 0x0004 01647 #define SECTION_MAP_EXECUTE 0x0008 01648 #define SECTION_EXTEND_SIZE 0x0010 01649 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 01650 01651 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \ 01652 SECTION_MAP_WRITE | \ 01653 SECTION_MAP_READ | \ 01654 SECTION_MAP_EXECUTE | \ 01655 SECTION_EXTEND_SIZE) 01656 01657 #define SESSION_QUERY_ACCESS 0x0001 01658 #define SESSION_MODIFY_ACCESS 0x0002 01659 01660 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 01661 SESSION_QUERY_ACCESS | \ 01662 SESSION_MODIFY_ACCESS) 01663 01664 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS 01665 01666 #define PAGE_NOACCESS 0x01 01667 #define PAGE_READONLY 0x02 01668 #define PAGE_READWRITE 0x04 01669 #define PAGE_WRITECOPY 0x08 01670 #define PAGE_EXECUTE 0x10 01671 #define PAGE_EXECUTE_READ 0x20 01672 #define PAGE_EXECUTE_READWRITE 0x40 01673 #define PAGE_EXECUTE_WRITECOPY 0x80 01674 #define PAGE_GUARD 0x100 01675 #define PAGE_NOCACHE 0x200 01676 #define PAGE_WRITECOMBINE 0x400 01677 01678 #define MEM_COMMIT 0x1000 01679 #define MEM_RESERVE 0x2000 01680 #define MEM_DECOMMIT 0x4000 01681 #define MEM_RELEASE 0x8000 01682 #define MEM_FREE 0x10000 01683 #define MEM_PRIVATE 0x20000 01684 #define MEM_MAPPED 0x40000 01685 #define MEM_RESET 0x80000 01686 #define MEM_TOP_DOWN 0x100000 01687 #define MEM_LARGE_PAGES 0x20000000 01688 #define MEM_4MB_PAGES 0x80000000 01689 01690 #define SEC_RESERVE 0x4000000 01691 #define SEC_COMMIT 0x8000000 01692 #define SEC_LARGE_PAGES 0x80000000 01693 01694 /* Section map options */ 01695 typedef enum _SECTION_INHERIT { 01696 ViewShare = 1, 01697 ViewUnmap = 2 01698 } SECTION_INHERIT; 01699 01700 typedef ULONG PFN_COUNT; 01701 typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER; 01702 typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER; 01703 01704 _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL) + 01705 (ByteOffset + ByteCount + PAGE_SIZE-1) / PAGE_SIZE * sizeof(PFN_NUMBER))) 01706 typedef struct _MDL { 01707 struct _MDL *Next; 01708 CSHORT Size; 01709 CSHORT MdlFlags; 01710 struct _EPROCESS *Process; 01711 PVOID MappedSystemVa; 01712 PVOID StartVa; 01713 ULONG ByteCount; 01714 ULONG ByteOffset; 01715 } MDL, *PMDL; 01716 #if (_MSC_VER >= 1600) 01717 typedef _Readable_bytes_(_Inexpressible_(polymorphism)) MDL *PMDLX; 01718 #else 01719 typedef MDL *PMDLX; 01720 #endif 01721 01722 typedef enum _MEMORY_CACHING_TYPE_ORIG { 01723 MmFrameBufferCached = 2 01724 } MEMORY_CACHING_TYPE_ORIG; 01725 01726 typedef enum _MEMORY_CACHING_TYPE { 01727 MmNonCached = FALSE, 01728 MmCached = TRUE, 01729 MmWriteCombined = MmFrameBufferCached, 01730 MmHardwareCoherentCached, 01731 MmNonCachedUnordered, 01732 MmUSWCCached, 01733 MmMaximumCacheType 01734 } MEMORY_CACHING_TYPE; 01735 01736 typedef enum _MM_PAGE_PRIORITY { 01737 LowPagePriority, 01738 NormalPagePriority = 16, 01739 HighPagePriority = 32 01740 } MM_PAGE_PRIORITY; 01741 01742 typedef enum _MM_SYSTEM_SIZE { 01743 MmSmallSystem, 01744 MmMediumSystem, 01745 MmLargeSystem 01746 } MM_SYSTEMSIZE; 01747 01748 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress; 01749 extern PVOID MmBadPointer; 01750 01751 01752 /****************************************************************************** 01753 * Executive Types * 01754 ******************************************************************************/ 01755 #define EX_RUNDOWN_ACTIVE 0x1 01756 #define EX_RUNDOWN_COUNT_SHIFT 0x1 01757 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT) 01758 01759 typedef struct _FAST_MUTEX { 01760 volatile LONG Count; 01761 PKTHREAD Owner; 01762 ULONG Contention; 01763 KEVENT Event; 01764 ULONG OldIrql; 01765 } FAST_MUTEX, *PFAST_MUTEX; 01766 01767 typedef enum _SUITE_TYPE { 01768 SmallBusiness, 01769 Enterprise, 01770 BackOffice, 01771 CommunicationServer, 01772 TerminalServer, 01773 SmallBusinessRestricted, 01774 EmbeddedNT, 01775 DataCenter, 01776 SingleUserTS, 01777 Personal, 01778 Blade, 01779 EmbeddedRestricted, 01780 SecurityAppliance, 01781 StorageServer, 01782 ComputeServer, 01783 WHServer, 01784 MaxSuiteType 01785 } SUITE_TYPE; 01786 01787 typedef enum _EX_POOL_PRIORITY { 01788 LowPoolPriority, 01789 LowPoolPrioritySpecialPoolOverrun = 8, 01790 LowPoolPrioritySpecialPoolUnderrun = 9, 01791 NormalPoolPriority = 16, 01792 NormalPoolPrioritySpecialPoolOverrun = 24, 01793 NormalPoolPrioritySpecialPoolUnderrun = 25, 01794 HighPoolPriority = 32, 01795 HighPoolPrioritySpecialPoolOverrun = 40, 01796 HighPoolPrioritySpecialPoolUnderrun = 41 01797 } EX_POOL_PRIORITY; 01798 01799 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) 01800 #define LOOKASIDE_ALIGN 01801 #else 01802 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */ 01803 #endif 01804 01805 typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX; 01806 01807 _IRQL_requires_same_ 01808 _Function_class_(ALLOCATE_FUNCTION) 01809 typedef PVOID 01810 (NTAPI *PALLOCATE_FUNCTION)( 01811 _In_ POOL_TYPE PoolType, 01812 _In_ SIZE_T NumberOfBytes, 01813 _In_ ULONG Tag); 01814 01815 _IRQL_requires_same_ 01816 _Function_class_(ALLOCATE_FUNCTION_EX) 01817 typedef PVOID 01818 (NTAPI *PALLOCATE_FUNCTION_EX)( 01819 _In_ POOL_TYPE PoolType, 01820 _In_ SIZE_T NumberOfBytes, 01821 _In_ ULONG Tag, 01822 _Inout_ PLOOKASIDE_LIST_EX Lookaside); 01823 01824 _IRQL_requires_same_ 01825 _Function_class_(FREE_FUNCTION) 01826 typedef VOID 01827 (NTAPI *PFREE_FUNCTION)( 01828 _In_ PVOID Buffer); 01829 01830 _IRQL_requires_same_ 01831 _Function_class_(FREE_FUNCTION_EX) 01832 typedef VOID 01833 (NTAPI *PFREE_FUNCTION_EX)( 01834 _In_ PVOID Buffer, 01835 _Inout_ PLOOKASIDE_LIST_EX Lookaside); 01836 01837 _IRQL_requires_same_ 01838 _Function_class_(CALLBACK_FUNCTION) 01839 typedef VOID 01840 (NTAPI CALLBACK_FUNCTION)( 01841 _In_opt_ PVOID CallbackContext, 01842 _In_opt_ PVOID Argument1, 01843 _In_opt_ PVOID Argument2); 01844 typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION; 01845 01846 #define GENERAL_LOOKASIDE_LAYOUT \ 01847 _ANONYMOUS_UNION union { \ 01848 SLIST_HEADER ListHead; \ 01849 SINGLE_LIST_ENTRY SingleListHead; \ 01850 } DUMMYUNIONNAME; \ 01851 USHORT Depth; \ 01852 USHORT MaximumDepth; \ 01853 ULONG TotalAllocates; \ 01854 _ANONYMOUS_UNION union { \ 01855 ULONG AllocateMisses; \ 01856 ULONG AllocateHits; \ 01857 } DUMMYUNIONNAME2; \ 01858 ULONG TotalFrees; \ 01859 _ANONYMOUS_UNION union { \ 01860 ULONG FreeMisses; \ 01861 ULONG FreeHits; \ 01862 } DUMMYUNIONNAME3; \ 01863 POOL_TYPE Type; \ 01864 ULONG Tag; \ 01865 ULONG Size; \ 01866 _ANONYMOUS_UNION union { \ 01867 PALLOCATE_FUNCTION_EX AllocateEx; \ 01868 PALLOCATE_FUNCTION Allocate; \ 01869 } DUMMYUNIONNAME4; \ 01870 _ANONYMOUS_UNION union { \ 01871 PFREE_FUNCTION_EX FreeEx; \ 01872 PFREE_FUNCTION Free; \ 01873 } DUMMYUNIONNAME5; \ 01874 LIST_ENTRY ListEntry; \ 01875 ULONG LastTotalAllocates; \ 01876 _ANONYMOUS_UNION union { \ 01877 ULONG LastAllocateMisses; \ 01878 ULONG LastAllocateHits; \ 01879 } DUMMYUNIONNAME6; \ 01880 ULONG Future[2]; 01881 01882 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE { 01883 GENERAL_LOOKASIDE_LAYOUT 01884 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; 01885 01886 typedef struct _GENERAL_LOOKASIDE_POOL { 01887 GENERAL_LOOKASIDE_LAYOUT 01888 } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL; 01889 01890 #define LOOKASIDE_CHECK(f) \ 01891 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f)) 01892 01893 LOOKASIDE_CHECK(TotalFrees); 01894 LOOKASIDE_CHECK(Tag); 01895 LOOKASIDE_CHECK(Future); 01896 01897 typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST { 01898 GENERAL_LOOKASIDE L; 01899 #if !defined(_AMD64_) && !defined(_IA64_) 01900 FAST_MUTEX Lock__ObsoleteButDoNotDelete; 01901 #endif 01902 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; 01903 01904 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST { 01905 GENERAL_LOOKASIDE L; 01906 #if !defined(_AMD64_) && !defined(_IA64_) 01907 KSPIN_LOCK Lock__ObsoleteButDoNotDelete; 01908 #endif 01909 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; 01910 01911 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next)) 01912 01913 typedef struct _LOOKASIDE_LIST_EX { 01914 GENERAL_LOOKASIDE_POOL L; 01915 } LOOKASIDE_LIST_EX; 01916 01917 #if (NTDDI_VERSION >= NTDDI_VISTA) 01918 01919 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL 01920 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL 01921 01922 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256 01923 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024 01924 01925 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 01926 01927 typedef struct _EX_RUNDOWN_REF { 01928 _ANONYMOUS_UNION union { 01929 volatile ULONG_PTR Count; 01930 volatile PVOID Ptr; 01931 } DUMMYUNIONNAME; 01932 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF; 01933 01934 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE; 01935 01936 typedef enum _WORK_QUEUE_TYPE { 01937 CriticalWorkQueue, 01938 DelayedWorkQueue, 01939 HyperCriticalWorkQueue, 01940 MaximumWorkQueue 01941 } WORK_QUEUE_TYPE; 01942 01943 _IRQL_requires_same_ 01944 _Function_class_(WORKER_THREAD_ROUTINE) 01945 typedef VOID 01946 (NTAPI WORKER_THREAD_ROUTINE)( 01947 _In_ PVOID Parameter); 01948 typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE; 01949 01950 typedef struct _WORK_QUEUE_ITEM { 01951 LIST_ENTRY List; 01952 PWORKER_THREAD_ROUTINE WorkerRoutine; 01953 volatile PVOID Parameter; 01954 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; 01955 01956 typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD; 01957 01958 typedef struct _OWNER_ENTRY { 01959 ERESOURCE_THREAD OwnerThread; 01960 _ANONYMOUS_UNION union { 01961 _ANONYMOUS_STRUCT struct { 01962 ULONG IoPriorityBoosted:1; 01963 ULONG OwnerReferenced:1; 01964 ULONG OwnerCount:30; 01965 } DUMMYSTRUCTNAME; 01966 ULONG TableSize; 01967 } DUMMYUNIONNAME; 01968 } OWNER_ENTRY, *POWNER_ENTRY; 01969 01970 typedef struct _ERESOURCE { 01971 LIST_ENTRY SystemResourcesList; 01972 POWNER_ENTRY OwnerTable; 01973 SHORT ActiveCount; 01974 USHORT Flag; 01975 volatile PKSEMAPHORE SharedWaiters; 01976 volatile PKEVENT ExclusiveWaiters; 01977 OWNER_ENTRY OwnerEntry; 01978 ULONG ActiveEntries; 01979 ULONG ContentionCount; 01980 ULONG NumberOfSharedWaiters; 01981 ULONG NumberOfExclusiveWaiters; 01982 #if defined(_WIN64) 01983 PVOID Reserved2; 01984 #endif 01985 _ANONYMOUS_UNION union { 01986 PVOID Address; 01987 ULONG_PTR CreatorBackTraceIndex; 01988 } DUMMYUNIONNAME; 01989 KSPIN_LOCK SpinLock; 01990 } ERESOURCE, *PERESOURCE; 01991 01992 /* ERESOURCE.Flag */ 01993 #define ResourceNeverExclusive 0x0010 01994 #define ResourceReleaseByOtherThread 0x0020 01995 #define ResourceOwnedExclusive 0x0080 01996 01997 #define RESOURCE_HASH_TABLE_SIZE 64 01998 01999 typedef struct _RESOURCE_HASH_ENTRY { 02000 LIST_ENTRY ListEntry; 02001 PVOID Address; 02002 ULONG ContentionCount; 02003 ULONG Number; 02004 } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY; 02005 02006 typedef struct _RESOURCE_PERFORMANCE_DATA { 02007 ULONG ActiveResourceCount; 02008 ULONG TotalResourceCount; 02009 ULONG ExclusiveAcquire; 02010 ULONG SharedFirstLevel; 02011 ULONG SharedSecondLevel; 02012 ULONG StarveFirstLevel; 02013 ULONG StarveSecondLevel; 02014 ULONG WaitForExclusive; 02015 ULONG OwnerTableExpands; 02016 ULONG MaximumTableExpand; 02017 LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE]; 02018 } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA; 02019 02020 /* Global debug flag */ 02021 #if DEVL 02022 extern ULONG NtGlobalFlag; 02023 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName)) 02024 #else 02025 #define IF_NTOS_DEBUG(FlagName) if(FALSE) 02026 #endif 02027 02028 /****************************************************************************** 02029 * Security Manager Types * 02030 ******************************************************************************/ 02031 02032 /* Simple types */ 02033 typedef PVOID PSECURITY_DESCRIPTOR; 02034 typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION; 02035 typedef ULONG ACCESS_MASK, *PACCESS_MASK; 02036 typedef PVOID PACCESS_TOKEN; 02037 typedef PVOID PSID; 02038 02039 #define DELETE 0x00010000L 02040 #define READ_CONTROL 0x00020000L 02041 #define WRITE_DAC 0x00040000L 02042 #define WRITE_OWNER 0x00080000L 02043 #define SYNCHRONIZE 0x00100000L 02044 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L 02045 #define STANDARD_RIGHTS_READ READ_CONTROL 02046 #define STANDARD_RIGHTS_WRITE READ_CONTROL 02047 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL 02048 #define STANDARD_RIGHTS_ALL 0x001F0000L 02049 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL 02050 #define ACCESS_SYSTEM_SECURITY 0x01000000L 02051 #define MAXIMUM_ALLOWED 0x02000000L 02052 #define GENERIC_READ 0x80000000L 02053 #define GENERIC_WRITE 0x40000000L 02054 #define GENERIC_EXECUTE 0x20000000L 02055 #define GENERIC_ALL 0x10000000L 02056 02057 typedef struct _GENERIC_MAPPING { 02058 ACCESS_MASK GenericRead; 02059 ACCESS_MASK GenericWrite; 02060 ACCESS_MASK GenericExecute; 02061 ACCESS_MASK GenericAll; 02062 } GENERIC_MAPPING, *PGENERIC_MAPPING; 02063 02064 #define ACL_REVISION 2 02065 #define ACL_REVISION_DS 4 02066 02067 #define ACL_REVISION1 1 02068 #define ACL_REVISION2 2 02069 #define ACL_REVISION3 3 02070 #define ACL_REVISION4 4 02071 #define MIN_ACL_REVISION ACL_REVISION2 02072 #define MAX_ACL_REVISION ACL_REVISION4 02073 02074 typedef struct _ACL { 02075 UCHAR AclRevision; 02076 UCHAR Sbz1; 02077 USHORT AclSize; 02078 USHORT AceCount; 02079 USHORT Sbz2; 02080 } ACL, *PACL; 02081 02082 /* Current security descriptor revision value */ 02083 #define SECURITY_DESCRIPTOR_REVISION (1) 02084 #define SECURITY_DESCRIPTOR_REVISION1 (1) 02085 02086 /* Privilege attributes */ 02087 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L) 02088 #define SE_PRIVILEGE_ENABLED (0x00000002L) 02089 #define SE_PRIVILEGE_REMOVED (0X00000004L) 02090 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L) 02091 02092 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \ 02093 SE_PRIVILEGE_ENABLED | \ 02094 SE_PRIVILEGE_REMOVED | \ 02095 SE_PRIVILEGE_USED_FOR_ACCESS) 02096 02097 #include <pshpack4.h> 02098 typedef struct _LUID_AND_ATTRIBUTES { 02099 LUID Luid; 02100 ULONG Attributes; 02101 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; 02102 #include <poppack.h> 02103 02104 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; 02105 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; 02106 02107 /* Privilege sets */ 02108 #define PRIVILEGE_SET_ALL_NECESSARY (1) 02109 02110 typedef struct _PRIVILEGE_SET { 02111 ULONG PrivilegeCount; 02112 ULONG Control; 02113 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; 02114 } PRIVILEGE_SET,*PPRIVILEGE_SET; 02115 02116 typedef enum _SECURITY_IMPERSONATION_LEVEL { 02117 SecurityAnonymous, 02118 SecurityIdentification, 02119 SecurityImpersonation, 02120 SecurityDelegation 02121 } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; 02122 02123 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation 02124 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous 02125 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation 02126 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL)) 02127 02128 #define SECURITY_DYNAMIC_TRACKING (TRUE) 02129 #define SECURITY_STATIC_TRACKING (FALSE) 02130 02131 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; 02132 02133 typedef struct _SECURITY_QUALITY_OF_SERVICE { 02134 ULONG Length; 02135 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 02136 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; 02137 BOOLEAN EffectiveOnly; 02138 } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; 02139 02140 typedef struct _SE_IMPERSONATION_STATE { 02141 PACCESS_TOKEN Token; 02142 BOOLEAN CopyOnOpen; 02143 BOOLEAN EffectiveOnly; 02144 SECURITY_IMPERSONATION_LEVEL Level; 02145 } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE; 02146 02147 #define OWNER_SECURITY_INFORMATION (0x00000001L) 02148 #define GROUP_SECURITY_INFORMATION (0x00000002L) 02149 #define DACL_SECURITY_INFORMATION (0x00000004L) 02150 #define SACL_SECURITY_INFORMATION (0x00000008L) 02151 #define LABEL_SECURITY_INFORMATION (0x00000010L) 02152 02153 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L) 02154 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L) 02155 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L) 02156 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L) 02157 02158 typedef enum _SECURITY_OPERATION_CODE { 02159 SetSecurityDescriptor, 02160 QuerySecurityDescriptor, 02161 DeleteSecurityDescriptor, 02162 AssignSecurityDescriptor 02163 } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; 02164 02165 #define INITIAL_PRIVILEGE_COUNT 3 02166 02167 typedef struct _INITIAL_PRIVILEGE_SET { 02168 ULONG PrivilegeCount; 02169 ULONG Control; 02170 LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; 02171 } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; 02172 02173 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2 02174 #define SE_CREATE_TOKEN_PRIVILEGE 2 02175 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3 02176 #define SE_LOCK_MEMORY_PRIVILEGE 4 02177 #define SE_INCREASE_QUOTA_PRIVILEGE 5 02178 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6 02179 #define SE_TCB_PRIVILEGE 7 02180 #define SE_SECURITY_PRIVILEGE 8 02181 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9 02182 #define SE_LOAD_DRIVER_PRIVILEGE 10 02183 #define SE_SYSTEM_PROFILE_PRIVILEGE 11 02184 #define SE_SYSTEMTIME_PRIVILEGE 12 02185 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13 02186 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14 02187 #define SE_CREATE_PAGEFILE_PRIVILEGE 15 02188 #define SE_CREATE_PERMANENT_PRIVILEGE 16 02189 #define SE_BACKUP_PRIVILEGE 17 02190 #define SE_RESTORE_PRIVILEGE 18 02191 #define SE_SHUTDOWN_PRIVILEGE 19 02192 #define SE_DEBUG_PRIVILEGE 20 02193 #define SE_AUDIT_PRIVILEGE 21 02194 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22 02195 #define SE_CHANGE_NOTIFY_PRIVILEGE 23 02196 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24 02197 #define SE_UNDOCK_PRIVILEGE 25 02198 #define SE_SYNC_AGENT_PRIVILEGE 26 02199 #define SE_ENABLE_DELEGATION_PRIVILEGE 27 02200 #define SE_MANAGE_VOLUME_PRIVILEGE 28 02201 #define SE_IMPERSONATE_PRIVILEGE 29 02202 #define SE_CREATE_GLOBAL_PRIVILEGE 30 02203 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31 02204 #define SE_RELABEL_PRIVILEGE 32 02205 #define SE_INC_WORKING_SET_PRIVILEGE 33 02206 #define SE_TIME_ZONE_PRIVILEGE 34 02207 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35 02208 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 02209 02210 typedef struct _SECURITY_SUBJECT_CONTEXT { 02211 PACCESS_TOKEN ClientToken; 02212 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 02213 PACCESS_TOKEN PrimaryToken; 02214 PVOID ProcessAuditId; 02215 } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; 02216 02217 typedef struct _ACCESS_STATE { 02218 LUID OperationID; 02219 BOOLEAN SecurityEvaluated; 02220 BOOLEAN GenerateAudit; 02221 BOOLEAN GenerateOnClose; 02222 BOOLEAN PrivilegesAllocated; 02223 ULONG Flags; 02224 ACCESS_MASK RemainingDesiredAccess; 02225 ACCESS_MASK PreviouslyGrantedAccess; 02226 ACCESS_MASK OriginalDesiredAccess; 02227 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; 02228 PSECURITY_DESCRIPTOR SecurityDescriptor; 02229 PVOID AuxData; 02230 union { 02231 INITIAL_PRIVILEGE_SET InitialPrivilegeSet; 02232 PRIVILEGE_SET PrivilegeSet; 02233 } Privileges; 02234 BOOLEAN AuditPrivileges; 02235 UNICODE_STRING ObjectName; 02236 UNICODE_STRING ObjectTypeName; 02237 } ACCESS_STATE, *PACCESS_STATE; 02238 02239 typedef VOID 02240 (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)( 02241 _In_ PVOID Vcb, 02242 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); 02243 02244 #ifndef _NTLSA_IFS_ 02245 02246 #ifndef _NTLSA_AUDIT_ 02247 #define _NTLSA_AUDIT_ 02248 02249 #define SE_MAX_AUDIT_PARAMETERS 32 02250 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28 02251 02252 #define SE_ADT_OBJECT_ONLY 0x1 02253 02254 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001 02255 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002 02256 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004 02257 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008 02258 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010 02259 02260 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \ 02261 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \ 02262 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) ) 02263 02264 typedef enum _SE_ADT_PARAMETER_TYPE { 02265 SeAdtParmTypeNone = 0, 02266 SeAdtParmTypeString, 02267 SeAdtParmTypeFileSpec, 02268 SeAdtParmTypeUlong, 02269 SeAdtParmTypeSid, 02270 SeAdtParmTypeLogonId, 02271 SeAdtParmTypeNoLogonId, 02272 SeAdtParmTypeAccessMask, 02273 SeAdtParmTypePrivs, 02274 SeAdtParmTypeObjectTypes, 02275 SeAdtParmTypeHexUlong, 02276 SeAdtParmTypePtr, 02277 SeAdtParmTypeTime, 02278 SeAdtParmTypeGuid, 02279 SeAdtParmTypeLuid, 02280 SeAdtParmTypeHexInt64, 02281 SeAdtParmTypeStringList, 02282 SeAdtParmTypeSidList, 02283 SeAdtParmTypeDuration, 02284 SeAdtParmTypeUserAccountControl, 02285 SeAdtParmTypeNoUac, 02286 SeAdtParmTypeMessage, 02287 SeAdtParmTypeDateTime, 02288 SeAdtParmTypeSockAddr, 02289 SeAdtParmTypeSD, 02290 SeAdtParmTypeLogonHours, 02291 SeAdtParmTypeLogonIdNoSid, 02292 SeAdtParmTypeUlongNoConv, 02293 SeAdtParmTypeSockAddrNoPort, 02294 SeAdtParmTypeAccessReason 02295 } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE; 02296 02297 typedef struct _SE_ADT_OBJECT_TYPE { 02298 GUID ObjectType; 02299 USHORT Flags; 02300 USHORT Level; 02301 ACCESS_MASK AccessMask; 02302 } SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE; 02303 02304 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY { 02305 SE_ADT_PARAMETER_TYPE Type; 02306 ULONG Length; 02307 ULONG_PTR Data[2]; 02308 PVOID Address; 02309 } SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY; 02310 02311 typedef struct _SE_ADT_ACCESS_REASON { 02312 ACCESS_MASK AccessMask; 02313 ULONG AccessReasons[32]; 02314 ULONG ObjectTypeIndex; 02315 ULONG AccessGranted; 02316 PSECURITY_DESCRIPTOR SecurityDescriptor; 02317 } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON; 02318 02319 typedef struct _SE_ADT_PARAMETER_ARRAY { 02320 ULONG CategoryId; 02321 ULONG AuditId; 02322 ULONG ParameterCount; 02323 ULONG Length; 02324 USHORT FlatSubCategoryId; 02325 USHORT Type; 02326 ULONG Flags; 02327 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ]; 02328 } SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY; 02329 02330 #endif /* !_NTLSA_AUDIT_ */ 02331 #endif /* !_NTLSA_IFS_ */ 02332 /****************************************************************************** 02333 * Power Management Support Types * 02334 ******************************************************************************/ 02335 02336 #ifndef _PO_DDK_ 02337 #define _PO_DDK_ 02338 02339 #define PO_CB_SYSTEM_POWER_POLICY 0 02340 #define PO_CB_AC_STATUS 1 02341 #define PO_CB_BUTTON_COLLISION 2 02342 #define PO_CB_SYSTEM_STATE_LOCK 3 02343 #define PO_CB_LID_SWITCH_STATE 4 02344 #define PO_CB_PROCESSOR_POWER_POLICY 5 02345 02346 /* Power States/Levels */ 02347 typedef enum _SYSTEM_POWER_STATE { 02348 PowerSystemUnspecified = 0, 02349 PowerSystemWorking, 02350 PowerSystemSleeping1, 02351 PowerSystemSleeping2, 02352 PowerSystemSleeping3, 02353 PowerSystemHibernate, 02354 PowerSystemShutdown, 02355 PowerSystemMaximum 02356 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; 02357 02358 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum 02359 02360 typedef enum _POWER_INFORMATION_LEVEL { 02361 SystemPowerPolicyAc, 02362 SystemPowerPolicyDc, 02363 VerifySystemPolicyAc, 02364 VerifySystemPolicyDc, 02365 SystemPowerCapabilities, 02366 SystemBatteryState, 02367 SystemPowerStateHandler, 02368 ProcessorStateHandler, 02369 SystemPowerPolicyCurrent, 02370 AdministratorPowerPolicy, 02371 SystemReserveHiberFile, 02372 ProcessorInformation, 02373 SystemPowerInformation, 02374 ProcessorStateHandler2, 02375 LastWakeTime, 02376 LastSleepTime, 02377 SystemExecutionState, 02378 SystemPowerStateNotifyHandler, 02379 ProcessorPowerPolicyAc, 02380 ProcessorPowerPolicyDc, 02381 VerifyProcessorPowerPolicyAc, 02382 VerifyProcessorPowerPolicyDc, 02383 ProcessorPowerPolicyCurrent, 02384 SystemPowerStateLogging, 02385 SystemPowerLoggingEntry, 02386 SetPowerSettingValue, 02387 NotifyUserPowerSetting, 02388 PowerInformationLevelUnused0, 02389 PowerInformationLevelUnused1, 02390 SystemVideoState, 02391 TraceApplicationPowerMessage, 02392 TraceApplicationPowerMessageEnd, 02393 ProcessorPerfStates, 02394 ProcessorIdleStates, 02395 ProcessorCap, 02396 SystemWakeSource, 02397 SystemHiberFileInformation, 02398 TraceServicePowerMessage, 02399 ProcessorLoad, 02400 PowerShutdownNotification, 02401 MonitorCapabilities, 02402 SessionPowerInit, 02403 SessionDisplayState, 02404 PowerRequestCreate, 02405 PowerRequestAction, 02406 GetPowerRequestList, 02407 ProcessorInformationEx, 02408 NotifyUserModeLegacyPowerEvent, 02409 GroupPark, 02410 ProcessorIdleDomains, 02411 WakeTimerList, 02412 SystemHiberFileSize, 02413 PowerInformationLevelMaximum 02414 } POWER_INFORMATION_LEVEL; 02415 02416 typedef enum { 02417 PowerActionNone = 0, 02418 PowerActionReserved, 02419 PowerActionSleep, 02420 PowerActionHibernate, 02421 PowerActionShutdown, 02422 PowerActionShutdownReset, 02423 PowerActionShutdownOff, 02424 PowerActionWarmEject 02425 } POWER_ACTION, *PPOWER_ACTION; 02426 02427 typedef enum _DEVICE_POWER_STATE { 02428 PowerDeviceUnspecified = 0, 02429 PowerDeviceD0, 02430 PowerDeviceD1, 02431 PowerDeviceD2, 02432 PowerDeviceD3, 02433 PowerDeviceMaximum 02434 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; 02435 02436 typedef enum _MONITOR_DISPLAY_STATE { 02437 PowerMonitorOff = 0, 02438 PowerMonitorOn, 02439 PowerMonitorDim 02440 } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE; 02441 02442 typedef union _POWER_STATE { 02443 SYSTEM_POWER_STATE SystemState; 02444 DEVICE_POWER_STATE DeviceState; 02445 } POWER_STATE, *PPOWER_STATE; 02446 02447 typedef enum _POWER_STATE_TYPE { 02448 SystemPowerState = 0, 02449 DevicePowerState 02450 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; 02451 02452 #if (NTDDI_VERSION >= NTDDI_VISTA) 02453 typedef struct _SYSTEM_POWER_STATE_CONTEXT { 02454 _ANONYMOUS_UNION union { 02455 _ANONYMOUS_STRUCT struct { 02456 ULONG Reserved1:8; 02457 ULONG TargetSystemState:4; 02458 ULONG EffectiveSystemState:4; 02459 ULONG CurrentSystemState:4; 02460 ULONG IgnoreHibernationPath:1; 02461 ULONG PseudoTransition:1; 02462 ULONG Reserved2:10; 02463 } DUMMYSTRUCTNAME; 02464 ULONG ContextAsUlong; 02465 } DUMMYUNIONNAME; 02466 } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT; 02467 #endif 02468 02469 #if (NTDDI_VERSION >= NTDDI_WIN7) 02470 typedef struct _COUNTED_REASON_CONTEXT { 02471 ULONG Version; 02472 ULONG Flags; 02473 _ANONYMOUS_UNION union { 02474 _ANONYMOUS_STRUCT struct { 02475 UNICODE_STRING ResourceFileName; 02476 USHORT ResourceReasonId; 02477 ULONG StringCount; 02478 PUNICODE_STRING ReasonStrings; 02479 } DUMMYSTRUCTNAME; 02480 UNICODE_STRING SimpleString; 02481 } DUMMYUNIONNAME; 02482 } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT; 02483 #endif 02484 02485 #define IOCTL_QUERY_DEVICE_POWER_STATE \ 02486 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS) 02487 02488 #define IOCTL_SET_DEVICE_WAKE \ 02489 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS) 02490 02491 #define IOCTL_CANCEL_DEVICE_WAKE \ 02492 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS) 02493 02494 #define ES_SYSTEM_REQUIRED 0x00000001 02495 #define ES_DISPLAY_REQUIRED 0x00000002 02496 #define ES_USER_PRESENT 0x00000004 02497 #define ES_CONTINUOUS 0x80000000 02498 02499 typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE; 02500 02501 typedef enum { 02502 LT_DONT_CARE, 02503 LT_LOWEST_LATENCY 02504 } LATENCY_TIME; 02505 02506 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) 02507 #define DIAGNOSTIC_REASON_VERSION 0 02508 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001 02509 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002 02510 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000 02511 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003) 02512 #endif 02513 02514 #define POWER_REQUEST_CONTEXT_VERSION 0 02515 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001 02516 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002 02517 02518 #define PowerRequestMaximum 3 02519 02520 typedef enum _POWER_REQUEST_TYPE { 02521 PowerRequestDisplayRequired, 02522 PowerRequestSystemRequired, 02523 PowerRequestAwayModeRequired 02524 } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE; 02525 02526 #if (NTDDI_VERSION >= NTDDI_WINXP) 02527 02528 #define PDCAP_D0_SUPPORTED 0x00000001 02529 #define PDCAP_D1_SUPPORTED 0x00000002 02530 #define PDCAP_D2_SUPPORTED 0x00000004 02531 #define PDCAP_D3_SUPPORTED 0x00000008 02532 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 02533 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 02534 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 02535 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 02536 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 02537 02538 typedef struct CM_Power_Data_s { 02539 ULONG PD_Size; 02540 DEVICE_POWER_STATE PD_MostRecentPowerState; 02541 ULONG PD_Capabilities; 02542 ULONG PD_D1Latency; 02543 ULONG PD_D2Latency; 02544 ULONG PD_D3Latency; 02545 DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; 02546 SYSTEM_POWER_STATE PD_DeepestSystemWake; 02547 } CM_POWER_DATA, *PCM_POWER_DATA; 02548 02549 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 02550 02551 typedef enum _SYSTEM_POWER_CONDITION { 02552 PoAc, 02553 PoDc, 02554 PoHot, 02555 PoConditionMaximum 02556 } SYSTEM_POWER_CONDITION; 02557 02558 typedef struct _SET_POWER_SETTING_VALUE { 02559 ULONG Version; 02560 GUID Guid; 02561 SYSTEM_POWER_CONDITION PowerCondition; 02562 ULONG DataLength; 02563 UCHAR Data[ANYSIZE_ARRAY]; 02564 } SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE; 02565 02566 #define POWER_SETTING_VALUE_VERSION (0x1) 02567 02568 typedef struct _NOTIFY_USER_POWER_SETTING { 02569 GUID Guid; 02570 } NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING; 02571 02572 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE { 02573 LARGE_INTEGER ActivationTime; 02574 ULONG Flags; 02575 ULONG ButtonInstanceID; 02576 } APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE; 02577 02578 typedef enum _POWER_PLATFORM_ROLE { 02579 PlatformRoleUnspecified = 0, 02580 PlatformRoleDesktop, 02581 PlatformRoleMobile, 02582 PlatformRoleWorkstation, 02583 PlatformRoleEnterpriseServer, 02584 PlatformRoleSOHOServer, 02585 PlatformRoleAppliancePC, 02586 PlatformRolePerformanceServer, 02587 PlatformRoleMaximum 02588 } POWER_PLATFORM_ROLE; 02589 02590 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) 02591 typedef struct { 02592 ULONG Granularity; 02593 ULONG Capacity; 02594 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE; 02595 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */ 02596 02597 #endif /* !_PO_DDK_ */ 02598 02599 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0 02600 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1 02601 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2 02602 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET 02603 02604 DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A); 02605 DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C); 02606 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E); 02607 DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94); 02608 DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0); 02609 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7); 02610 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63); 02611 DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99); 02612 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E); 02613 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63); 02614 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64); 02615 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee); 02616 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B); 02617 DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA); 02618 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb); 02619 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96); 02620 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff); 02621 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8); 02622 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67); 02623 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47); 02624 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23); 02625 DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42); 02626 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E); 02627 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63); 02628 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67); 02629 DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20); 02630 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70); 02631 DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA); 02632 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0); 02633 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64); 02634 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E); 02635 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1); 02636 DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0); 02637 DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87); 02638 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab); 02639 DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D); 02640 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2); 02641 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47); 02642 DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80); 02643 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78); 02644 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB); 02645 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93); 02646 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5); 02647 DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36); 02648 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B); 02649 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4); 02650 DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F); 02651 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46); 02652 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69); 02653 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f); 02654 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06); 02655 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A); 02656 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58); 02657 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4); 02658 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA); 02659 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82); 02660 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8); 02661 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65); 02662 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3); 02663 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00); 02664 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36); 02665 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC); 02666 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C); 02667 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb); 02668 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c); 02669 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0); 02670 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d); 02671 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6); 02672 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18); 02673 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6); 02674 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa); 02675 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8); 02676 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5); 02677 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59); 02678 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6); 02679 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad); 02680 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b); 02681 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19); 02682 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c); 02683 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1); 02684 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa); 02685 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6); 02686 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b); 02687 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28); 02688 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83); 02689 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32); 02690 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82); 02691 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82); 02692 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9); 02693 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20); 02694 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d); 02695 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29); 02696 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb); 02697 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1); 02698 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f); 02699 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b); 02700 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f); 02701 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F); 02702 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51); 02703 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19); 02704 DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48); 02705 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3); 02706 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1); 02707 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1); 02708 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E); 02709 DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA); 02710 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20); 02711 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5); 02712 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6); 02713 02714 #define PERFSTATE_POLICY_CHANGE_IDEAL 0 02715 #define PERFSTATE_POLICY_CHANGE_SINGLE 1 02716 #define PERFSTATE_POLICY_CHANGE_ROCKET 2 02717 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET 02718 02719 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0 02720 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100 02721 02722 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0 02723 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1 02724 02725 _Function_class_(REQUEST_POWER_COMPLETE) 02726 _IRQL_requires_same_ 02727 typedef VOID 02728 (NTAPI REQUEST_POWER_COMPLETE)( 02729 _In_ struct _DEVICE_OBJECT *DeviceObject, 02730 _In_ UCHAR MinorFunction, 02731 _In_ POWER_STATE PowerState, 02732 _In_opt_ PVOID Context, 02733 _In_ struct _IO_STATUS_BLOCK *IoStatus); 02734 typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE; 02735 02736 _Function_class_(POWER_SETTING_CALLBACK) 02737 _IRQL_requires_same_ 02738 typedef NTSTATUS 02739 (NTAPI POWER_SETTING_CALLBACK)( 02740 _In_ LPCGUID SettingGuid, 02741 _In_reads_bytes_(ValueLength) PVOID Value, 02742 _In_ ULONG ValueLength, 02743 _Inout_opt_ PVOID Context); 02744 typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK; 02745 02746 /****************************************************************************** 02747 * Configuration Manager Types * 02748 ******************************************************************************/ 02749 02750 /* Resource list definitions */ 02751 typedef int CM_RESOURCE_TYPE; 02752 02753 #define CmResourceTypeNull 0 02754 #define CmResourceTypePort 1 02755 #define CmResourceTypeInterrupt 2 02756 #define CmResourceTypeMemory 3 02757 #define CmResourceTypeDma 4 02758 #define CmResourceTypeDeviceSpecific 5 02759 #define CmResourceTypeBusNumber 6 02760 #define CmResourceTypeNonArbitrated 128 02761 #define CmResourceTypeConfigData 128 02762 #define CmResourceTypeDevicePrivate 129 02763 #define CmResourceTypePcCardConfig 130 02764 #define CmResourceTypeMfCardConfig 131 02765 02766 /* KEY_VALUE_Xxx.Type */ 02767 #define REG_NONE 0 02768 #define REG_SZ 1 02769 #define REG_EXPAND_SZ 2 02770 #define REG_BINARY 3 02771 #define REG_DWORD 4 02772 #define REG_DWORD_LITTLE_ENDIAN 4 02773 #define REG_DWORD_BIG_ENDIAN 5 02774 #define REG_LINK 6 02775 #define REG_MULTI_SZ 7 02776 #define REG_RESOURCE_LIST 8 02777 #define REG_FULL_RESOURCE_DESCRIPTOR 9 02778 #define REG_RESOURCE_REQUIREMENTS_LIST 10 02779 #define REG_QWORD 11 02780 #define REG_QWORD_LITTLE_ENDIAN 11 02781 02782 /* Registry Access Rights */ 02783 #define KEY_QUERY_VALUE (0x0001) 02784 #define KEY_SET_VALUE (0x0002) 02785 #define KEY_CREATE_SUB_KEY (0x0004) 02786 #define KEY_ENUMERATE_SUB_KEYS (0x0008) 02787 #define KEY_NOTIFY (0x0010) 02788 #define KEY_CREATE_LINK (0x0020) 02789 #define KEY_WOW64_32KEY (0x0200) 02790 #define KEY_WOW64_64KEY (0x0100) 02791 #define KEY_WOW64_RES (0x0300) 02792 02793 #define KEY_READ ((STANDARD_RIGHTS_READ |\ 02794 KEY_QUERY_VALUE |\ 02795 KEY_ENUMERATE_SUB_KEYS |\ 02796 KEY_NOTIFY) \ 02797 & \ 02798 (~SYNCHRONIZE)) 02799 02800 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\ 02801 KEY_SET_VALUE |\ 02802 KEY_CREATE_SUB_KEY) \ 02803 & \ 02804 (~SYNCHRONIZE)) 02805 02806 #define KEY_EXECUTE ((KEY_READ) \ 02807 & \ 02808 (~SYNCHRONIZE)) 02809 02810 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\ 02811 KEY_QUERY_VALUE |\ 02812 KEY_SET_VALUE |\ 02813 KEY_CREATE_SUB_KEY |\ 02814 KEY_ENUMERATE_SUB_KEYS |\ 02815 KEY_NOTIFY |\ 02816 KEY_CREATE_LINK) \ 02817 & \ 02818 (~SYNCHRONIZE)) 02819 02820 /* Registry Open/Create Options */ 02821 #define REG_OPTION_RESERVED (0x00000000L) 02822 #define REG_OPTION_NON_VOLATILE (0x00000000L) 02823 #define REG_OPTION_VOLATILE (0x00000001L) 02824 #define REG_OPTION_CREATE_LINK (0x00000002L) 02825 #define REG_OPTION_BACKUP_RESTORE (0x00000004L) 02826 #define REG_OPTION_OPEN_LINK (0x00000008L) 02827 02828 #define REG_LEGAL_OPTION \ 02829 (REG_OPTION_RESERVED |\ 02830 REG_OPTION_NON_VOLATILE |\ 02831 REG_OPTION_VOLATILE |\ 02832 REG_OPTION_CREATE_LINK |\ 02833 REG_OPTION_BACKUP_RESTORE |\ 02834 REG_OPTION_OPEN_LINK) 02835 02836 #define REG_OPEN_LEGAL_OPTION \ 02837 (REG_OPTION_RESERVED |\ 02838 REG_OPTION_BACKUP_RESTORE |\ 02839 REG_OPTION_OPEN_LINK) 02840 02841 #define REG_STANDARD_FORMAT 1 02842 #define REG_LATEST_FORMAT 2 02843 #define REG_NO_COMPRESSION 4 02844 02845 /* Key creation/open disposition */ 02846 #define REG_CREATED_NEW_KEY (0x00000001L) 02847 #define REG_OPENED_EXISTING_KEY (0x00000002L) 02848 02849 /* Key restore & hive load flags */ 02850 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L) 02851 #define REG_REFRESH_HIVE (0x00000002L) 02852 #define REG_NO_LAZY_FLUSH (0x00000004L) 02853 #define REG_FORCE_RESTORE (0x00000008L) 02854 #define REG_APP_HIVE (0x00000010L) 02855 #define REG_PROCESS_PRIVATE (0x00000020L) 02856 #define REG_START_JOURNAL (0x00000040L) 02857 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) 02858 #define REG_HIVE_NO_RM (0x00000100L) 02859 #define REG_HIVE_SINGLE_LOG (0x00000200L) 02860 #define REG_BOOT_HIVE (0x00000400L) 02861 02862 /* Unload Flags */ 02863 #define REG_FORCE_UNLOAD 1 02864 02865 /* Notify Filter Values */ 02866 #define REG_NOTIFY_CHANGE_NAME (0x00000001L) 02867 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L) 02868 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L) 02869 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L) 02870 02871 #define REG_LEGAL_CHANGE_FILTER \ 02872 (REG_NOTIFY_CHANGE_NAME |\ 02873 REG_NOTIFY_CHANGE_ATTRIBUTES |\ 02874 REG_NOTIFY_CHANGE_LAST_SET |\ 02875 REG_NOTIFY_CHANGE_SECURITY) 02876 02877 #include <pshpack4.h> 02878 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { 02879 UCHAR Type; 02880 UCHAR ShareDisposition; 02881 USHORT Flags; 02882 union { 02883 struct { 02884 PHYSICAL_ADDRESS Start; 02885 ULONG Length; 02886 } Generic; 02887 struct { 02888 PHYSICAL_ADDRESS Start; 02889 ULONG Length; 02890 } Port; 02891 struct { 02892 #if defined(NT_PROCESSOR_GROUPS) 02893 USHORT Level; 02894 USHORT Group; 02895 #else 02896 ULONG Level; 02897 #endif 02898 ULONG Vector; 02899 KAFFINITY Affinity; 02900 } Interrupt; 02901 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 02902 struct { 02903 _ANONYMOUS_UNION union { 02904 struct { 02905 #if defined(NT_PROCESSOR_GROUPS) 02906 USHORT Group; 02907 #else 02908 USHORT Reserved; 02909 #endif 02910 USHORT MessageCount; 02911 ULONG Vector; 02912 KAFFINITY Affinity; 02913 } Raw; 02914 struct { 02915 #if defined(NT_PROCESSOR_GROUPS) 02916 USHORT Level; 02917 USHORT Group; 02918 #else 02919 ULONG Level; 02920 #endif 02921 ULONG Vector; 02922 KAFFINITY Affinity; 02923 } Translated; 02924 } DUMMYUNIONNAME; 02925 } MessageInterrupt; 02926 #endif 02927 struct { 02928 PHYSICAL_ADDRESS Start; 02929 ULONG Length; 02930 } Memory; 02931 struct { 02932 ULONG Channel; 02933 ULONG Port; 02934 ULONG Reserved1; 02935 } Dma; 02936 struct { 02937 ULONG Data[3]; 02938 } DevicePrivate; 02939 struct { 02940 ULONG Start; 02941 ULONG Length; 02942 ULONG Reserved; 02943 } BusNumber; 02944 struct { 02945 ULONG DataSize; 02946 ULONG Reserved1; 02947 ULONG Reserved2; 02948 } DeviceSpecificData; 02949 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 02950 struct { 02951 PHYSICAL_ADDRESS Start; 02952 ULONG Length40; 02953 } Memory40; 02954 struct { 02955 PHYSICAL_ADDRESS Start; 02956 ULONG Length48; 02957 } Memory48; 02958 struct { 02959 PHYSICAL_ADDRESS Start; 02960 ULONG Length64; 02961 } Memory64; 02962 #endif 02963 } u; 02964 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; 02965 #include <poppack.h> 02966 02967 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */ 02968 #define CmResourceTypeNull 0 02969 #define CmResourceTypePort 1 02970 #define CmResourceTypeInterrupt 2 02971 #define CmResourceTypeMemory 3 02972 #define CmResourceTypeDma 4 02973 #define CmResourceTypeDeviceSpecific 5 02974 #define CmResourceTypeBusNumber 6 02975 #define CmResourceTypeMemoryLarge 7 02976 #define CmResourceTypeNonArbitrated 128 02977 #define CmResourceTypeConfigData 128 02978 #define CmResourceTypeDevicePrivate 129 02979 #define CmResourceTypePcCardConfig 130 02980 #define CmResourceTypeMfCardConfig 131 02981 02982 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ 02983 typedef enum _CM_SHARE_DISPOSITION { 02984 CmResourceShareUndetermined = 0, 02985 CmResourceShareDeviceExclusive, 02986 CmResourceShareDriverExclusive, 02987 CmResourceShareShared 02988 } CM_SHARE_DISPOSITION; 02989 02990 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */ 02991 #define CM_RESOURCE_PORT_MEMORY 0x0000 02992 #define CM_RESOURCE_PORT_IO 0x0001 02993 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 02994 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 02995 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 02996 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 02997 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 02998 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 02999 #define CM_RESOURCE_PORT_BAR 0x0100 03000 03001 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */ 03002 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 03003 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 03004 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002 03005 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004 03006 03007 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001 03008 03009 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2) 03010 03011 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ 03012 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 03013 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 03014 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 03015 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003 03016 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 03017 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 03018 #define CM_RESOURCE_MEMORY_24 0x0010 03019 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 03020 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040 03021 #define CM_RESOURCE_MEMORY_BAR 0x0080 03022 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100 03023 03024 #define CM_RESOURCE_MEMORY_LARGE 0x0E00 03025 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200 03026 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400 03027 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800 03028 03029 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00 03030 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000 03031 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000 03032 03033 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ 03034 #define CM_RESOURCE_DMA_8 0x0000 03035 #define CM_RESOURCE_DMA_16 0x0001 03036 #define CM_RESOURCE_DMA_32 0x0002 03037 #define CM_RESOURCE_DMA_8_AND_16 0x0004 03038 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008 03039 #define CM_RESOURCE_DMA_TYPE_A 0x0010 03040 #define CM_RESOURCE_DMA_TYPE_B 0x0020 03041 #define CM_RESOURCE_DMA_TYPE_F 0x0040 03042 03043 typedef struct _DEVICE_FLAGS { 03044 ULONG Failed:1; 03045 ULONG ReadOnly:1; 03046 ULONG Removable:1; 03047 ULONG ConsoleIn:1; 03048 ULONG ConsoleOut:1; 03049 ULONG Input:1; 03050 ULONG Output:1; 03051 } DEVICE_FLAGS, *PDEVICE_FLAGS; 03052 03053 typedef enum _INTERFACE_TYPE { 03054 InterfaceTypeUndefined = -1, 03055 Internal, 03056 Isa, 03057 Eisa, 03058 MicroChannel, 03059 TurboChannel, 03060 PCIBus, 03061 VMEBus, 03062 NuBus, 03063 PCMCIABus, 03064 CBus, 03065 MPIBus, 03066 MPSABus, 03067 ProcessorInternal, 03068 InternalPowerBus, 03069 PNPISABus, 03070 PNPBus, 03071 Vmcs, 03072 MaximumInterfaceType 03073 } INTERFACE_TYPE, *PINTERFACE_TYPE; 03074 03075 typedef struct _CM_COMPONENT_INFORMATION { 03076 DEVICE_FLAGS Flags; 03077 ULONG Version; 03078 ULONG Key; 03079 KAFFINITY AffinityMask; 03080 } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION; 03081 03082 typedef struct _CM_ROM_BLOCK { 03083 ULONG Address; 03084 ULONG Size; 03085 } CM_ROM_BLOCK, *PCM_ROM_BLOCK; 03086 03087 typedef struct _CM_PARTIAL_RESOURCE_LIST { 03088 USHORT Version; 03089 USHORT Revision; 03090 ULONG Count; 03091 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; 03092 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; 03093 03094 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { 03095 INTERFACE_TYPE InterfaceType; 03096 ULONG BusNumber; 03097 CM_PARTIAL_RESOURCE_LIST PartialResourceList; 03098 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; 03099 03100 typedef struct _CM_RESOURCE_LIST { 03101 ULONG Count; 03102 CM_FULL_RESOURCE_DESCRIPTOR List[1]; 03103 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; 03104 03105 typedef struct _PNP_BUS_INFORMATION { 03106 GUID BusTypeGuid; 03107 INTERFACE_TYPE LegacyBusType; 03108 ULONG BusNumber; 03109 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; 03110 03111 #include <pshpack1.h> 03112 03113 typedef struct _CM_INT13_DRIVE_PARAMETER { 03114 USHORT DriveSelect; 03115 ULONG MaxCylinders; 03116 USHORT SectorsPerTrack; 03117 USHORT MaxHeads; 03118 USHORT NumberDrives; 03119 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; 03120 03121 typedef struct _CM_MCA_POS_DATA { 03122 USHORT AdapterId; 03123 UCHAR PosData1; 03124 UCHAR PosData2; 03125 UCHAR PosData3; 03126 UCHAR PosData4; 03127 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; 03128 03129 typedef struct _CM_PNP_BIOS_DEVICE_NODE { 03130 USHORT Size; 03131 UCHAR Node; 03132 ULONG ProductId; 03133 UCHAR DeviceType[3]; 03134 USHORT DeviceAttributes; 03135 } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE; 03136 03137 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK { 03138 UCHAR Signature[4]; 03139 UCHAR Revision; 03140 UCHAR Length; 03141 USHORT ControlField; 03142 UCHAR Checksum; 03143 ULONG EventFlagAddress; 03144 USHORT RealModeEntryOffset; 03145 USHORT RealModeEntrySegment; 03146 USHORT ProtectedModeEntryOffset; 03147 ULONG ProtectedModeCodeBaseAddress; 03148 ULONG OemDeviceId; 03149 USHORT RealModeDataBaseAddress; 03150 ULONG ProtectedModeDataBaseAddress; 03151 } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; 03152 03153 #include <poppack.h> 03154 03155 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA { 03156 ULONG BytesPerSector; 03157 ULONG NumberOfCylinders; 03158 ULONG SectorsPerTrack; 03159 ULONG NumberOfHeads; 03160 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA; 03161 03162 typedef struct _CM_KEYBOARD_DEVICE_DATA { 03163 USHORT Version; 03164 USHORT Revision; 03165 UCHAR Type; 03166 UCHAR Subtype; 03167 USHORT KeyboardFlags; 03168 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; 03169 03170 typedef struct _CM_SCSI_DEVICE_DATA { 03171 USHORT Version; 03172 USHORT Revision; 03173 UCHAR HostIdentifier; 03174 } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; 03175 03176 typedef struct _CM_VIDEO_DEVICE_DATA { 03177 USHORT Version; 03178 USHORT Revision; 03179 ULONG VideoClock; 03180 } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA; 03181 03182 typedef struct _CM_SONIC_DEVICE_DATA { 03183 USHORT Version; 03184 USHORT Revision; 03185 USHORT DataConfigurationRegister; 03186 UCHAR EthernetAddress[8]; 03187 } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA; 03188 03189 typedef struct _CM_SERIAL_DEVICE_DATA { 03190 USHORT Version; 03191 USHORT Revision; 03192 ULONG BaudClock; 03193 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; 03194 03195 typedef struct _CM_MONITOR_DEVICE_DATA { 03196 USHORT Version; 03197 USHORT Revision; 03198 USHORT HorizontalScreenSize; 03199 USHORT VerticalScreenSize; 03200 USHORT HorizontalResolution; 03201 USHORT VerticalResolution; 03202 USHORT HorizontalDisplayTimeLow; 03203 USHORT HorizontalDisplayTime; 03204 USHORT HorizontalDisplayTimeHigh; 03205 USHORT HorizontalBackPorchLow; 03206 USHORT HorizontalBackPorch; 03207 USHORT HorizontalBackPorchHigh; 03208 USHORT HorizontalFrontPorchLow; 03209 USHORT HorizontalFrontPorch; 03210 USHORT HorizontalFrontPorchHigh; 03211 USHORT HorizontalSyncLow; 03212 USHORT HorizontalSync; 03213 USHORT HorizontalSyncHigh; 03214 USHORT VerticalBackPorchLow; 03215 USHORT VerticalBackPorch; 03216 USHORT VerticalBackPorchHigh; 03217 USHORT VerticalFrontPorchLow; 03218 USHORT VerticalFrontPorch; 03219 USHORT VerticalFrontPorchHigh; 03220 USHORT VerticalSyncLow; 03221 USHORT VerticalSync; 03222 USHORT VerticalSyncHigh; 03223 } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA; 03224 03225 typedef struct _CM_FLOPPY_DEVICE_DATA { 03226 USHORT Version; 03227 USHORT Revision; 03228 CHAR Size[8]; 03229 ULONG MaxDensity; 03230 ULONG MountDensity; 03231 UCHAR StepRateHeadUnloadTime; 03232 UCHAR HeadLoadTime; 03233 UCHAR MotorOffTime; 03234 UCHAR SectorLengthCode; 03235 UCHAR SectorPerTrack; 03236 UCHAR ReadWriteGapLength; 03237 UCHAR DataTransferLength; 03238 UCHAR FormatGapLength; 03239 UCHAR FormatFillCharacter; 03240 UCHAR HeadSettleTime; 03241 UCHAR MotorSettleTime; 03242 UCHAR MaximumTrackValue; 03243 UCHAR DataTransferRate; 03244 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; 03245 03246 typedef enum _KEY_INFORMATION_CLASS { 03247 KeyBasicInformation, 03248 KeyNodeInformation, 03249 KeyFullInformation, 03250 KeyNameInformation, 03251 KeyCachedInformation, 03252 KeyFlagsInformation, 03253 KeyVirtualizationInformation, 03254 KeyHandleTagsInformation, 03255 MaxKeyInfoClass 03256 } KEY_INFORMATION_CLASS; 03257 03258 typedef struct _KEY_BASIC_INFORMATION { 03259 LARGE_INTEGER LastWriteTime; 03260 ULONG TitleIndex; 03261 ULONG NameLength; 03262 WCHAR Name[1]; 03263 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; 03264 03265 typedef struct _KEY_CONTROL_FLAGS_INFORMATION { 03266 ULONG ControlFlags; 03267 } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION; 03268 03269 typedef struct _KEY_FULL_INFORMATION { 03270 LARGE_INTEGER LastWriteTime; 03271 ULONG TitleIndex; 03272 ULONG ClassOffset; 03273 ULONG ClassLength; 03274 ULONG SubKeys; 03275 ULONG MaxNameLen; 03276 ULONG MaxClassLen; 03277 ULONG Values; 03278 ULONG MaxValueNameLen; 03279 ULONG MaxValueDataLen; 03280 WCHAR Class[1]; 03281 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; 03282 03283 typedef struct _KEY_HANDLE_TAGS_INFORMATION { 03284 ULONG HandleTags; 03285 } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION; 03286 03287 typedef struct _KEY_NODE_INFORMATION { 03288 LARGE_INTEGER LastWriteTime; 03289 ULONG TitleIndex; 03290 ULONG ClassOffset; 03291 ULONG ClassLength; 03292 ULONG NameLength; 03293 WCHAR Name[1]; 03294 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; 03295 03296 typedef enum _KEY_SET_INFORMATION_CLASS { 03297 KeyWriteTimeInformation, 03298 KeyWow64FlagsInformation, 03299 KeyControlFlagsInformation, 03300 KeySetVirtualizationInformation, 03301 KeySetDebugInformation, 03302 KeySetHandleTagsInformation, 03303 MaxKeySetInfoClass 03304 } KEY_SET_INFORMATION_CLASS; 03305 03306 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION { 03307 ULONG VirtualTarget:1; 03308 ULONG VirtualStore:1; 03309 ULONG VirtualSource:1; 03310 ULONG Reserved:29; 03311 } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION; 03312 03313 typedef struct _KEY_VALUE_BASIC_INFORMATION { 03314 ULONG TitleIndex; 03315 ULONG Type; 03316 ULONG NameLength; 03317 WCHAR Name[1]; 03318 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; 03319 03320 typedef struct _KEY_VALUE_FULL_INFORMATION { 03321 ULONG TitleIndex; 03322 ULONG Type; 03323 ULONG DataOffset; 03324 ULONG DataLength; 03325 ULONG NameLength; 03326 WCHAR Name[1]; 03327 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; 03328 03329 typedef struct _KEY_VALUE_PARTIAL_INFORMATION { 03330 ULONG TitleIndex; 03331 ULONG Type; 03332 ULONG DataLength; 03333 _Field_size_bytes_(DataLength) UCHAR Data[1]; 03334 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; 03335 03336 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { 03337 ULONG Type; 03338 ULONG DataLength; 03339 _Field_size_bytes_(DataLength) UCHAR Data[1]; 03340 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; 03341 03342 typedef struct _KEY_VALUE_ENTRY { 03343 PUNICODE_STRING ValueName; 03344 ULONG DataLength; 03345 ULONG DataOffset; 03346 ULONG Type; 03347 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; 03348 03349 typedef enum _KEY_VALUE_INFORMATION_CLASS { 03350 KeyValueBasicInformation, 03351 KeyValueFullInformation, 03352 KeyValuePartialInformation, 03353 KeyValueFullInformationAlign64, 03354 KeyValuePartialInformationAlign64 03355 } KEY_VALUE_INFORMATION_CLASS; 03356 03357 typedef struct _KEY_WOW64_FLAGS_INFORMATION { 03358 ULONG UserFlags; 03359 } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION; 03360 03361 typedef struct _KEY_WRITE_TIME_INFORMATION { 03362 LARGE_INTEGER LastWriteTime; 03363 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; 03364 03365 typedef enum _REG_NOTIFY_CLASS { 03366 RegNtDeleteKey, 03367 RegNtPreDeleteKey = RegNtDeleteKey, 03368 RegNtSetValueKey, 03369 RegNtPreSetValueKey = RegNtSetValueKey, 03370 RegNtDeleteValueKey, 03371 RegNtPreDeleteValueKey = RegNtDeleteValueKey, 03372 RegNtSetInformationKey, 03373 RegNtPreSetInformationKey = RegNtSetInformationKey, 03374 RegNtRenameKey, 03375 RegNtPreRenameKey = RegNtRenameKey, 03376 RegNtEnumerateKey, 03377 RegNtPreEnumerateKey = RegNtEnumerateKey, 03378 RegNtEnumerateValueKey, 03379 RegNtPreEnumerateValueKey = RegNtEnumerateValueKey, 03380 RegNtQueryKey, 03381 RegNtPreQueryKey = RegNtQueryKey, 03382 RegNtQueryValueKey, 03383 RegNtPreQueryValueKey = RegNtQueryValueKey, 03384 RegNtQueryMultipleValueKey, 03385 RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey, 03386 RegNtPreCreateKey, 03387 RegNtPostCreateKey, 03388 RegNtPreOpenKey, 03389 RegNtPostOpenKey, 03390 RegNtKeyHandleClose, 03391 RegNtPreKeyHandleClose = RegNtKeyHandleClose, 03392 RegNtPostDeleteKey, 03393 RegNtPostSetValueKey, 03394 RegNtPostDeleteValueKey, 03395 RegNtPostSetInformationKey, 03396 RegNtPostRenameKey, 03397 RegNtPostEnumerateKey, 03398 RegNtPostEnumerateValueKey, 03399 RegNtPostQueryKey, 03400 RegNtPostQueryValueKey, 03401 RegNtPostQueryMultipleValueKey, 03402 RegNtPostKeyHandleClose, 03403 RegNtPreCreateKeyEx, 03404 RegNtPostCreateKeyEx, 03405 RegNtPreOpenKeyEx, 03406 RegNtPostOpenKeyEx, 03407 RegNtPreFlushKey, 03408 RegNtPostFlushKey, 03409 RegNtPreLoadKey, 03410 RegNtPostLoadKey, 03411 RegNtPreUnLoadKey, 03412 RegNtPostUnLoadKey, 03413 RegNtPreQueryKeySecurity, 03414 RegNtPostQueryKeySecurity, 03415 RegNtPreSetKeySecurity, 03416 RegNtPostSetKeySecurity, 03417 RegNtCallbackObjectContextCleanup, 03418 RegNtPreRestoreKey, 03419 RegNtPostRestoreKey, 03420 RegNtPreSaveKey, 03421 RegNtPostSaveKey, 03422 RegNtPreReplaceKey, 03423 RegNtPostReplaceKey, 03424 MaxRegNtNotifyClass 03425 } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS; 03426 03427 _IRQL_requires_same_ 03428 _Function_class_(EX_CALLBACK_FUNCTION) 03429 typedef NTSTATUS 03430 (NTAPI EX_CALLBACK_FUNCTION)( 03431 _In_ PVOID CallbackContext, 03432 _In_opt_ PVOID Argument1, 03433 _In_opt_ PVOID Argument2); 03434 typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION; 03435 03436 typedef struct _REG_DELETE_KEY_INFORMATION { 03437 PVOID Object; 03438 PVOID CallContext; 03439 PVOID ObjectContext; 03440 PVOID Reserved; 03441 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION 03442 #if (NTDDI_VERSION >= NTDDI_VISTA) 03443 , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION 03444 #endif 03445 ; 03446 03447 typedef struct _REG_SET_VALUE_KEY_INFORMATION { 03448 PVOID Object; 03449 PUNICODE_STRING ValueName; 03450 ULONG TitleIndex; 03451 ULONG Type; 03452 PVOID Data; 03453 ULONG DataSize; 03454 PVOID CallContext; 03455 PVOID ObjectContext; 03456 PVOID Reserved; 03457 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION; 03458 03459 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION { 03460 PVOID Object; 03461 PUNICODE_STRING ValueName; 03462 PVOID CallContext; 03463 PVOID ObjectContext; 03464 PVOID Reserved; 03465 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION; 03466 03467 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION { 03468 PVOID Object; 03469 KEY_SET_INFORMATION_CLASS KeySetInformationClass; 03470 PVOID KeySetInformation; 03471 ULONG KeySetInformationLength; 03472 PVOID CallContext; 03473 PVOID ObjectContext; 03474 PVOID Reserved; 03475 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION; 03476 03477 typedef struct _REG_ENUMERATE_KEY_INFORMATION { 03478 PVOID Object; 03479 ULONG Index; 03480 KEY_INFORMATION_CLASS KeyInformationClass; 03481 PVOID KeyInformation; 03482 ULONG Length; 03483 PULONG ResultLength; 03484 PVOID CallContext; 03485 PVOID ObjectContext; 03486 PVOID Reserved; 03487 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION; 03488 03489 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION { 03490 PVOID Object; 03491 ULONG Index; 03492 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; 03493 PVOID KeyValueInformation; 03494 ULONG Length; 03495 PULONG ResultLength; 03496 PVOID CallContext; 03497 PVOID ObjectContext; 03498 PVOID Reserved; 03499 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION; 03500 03501 typedef struct _REG_QUERY_KEY_INFORMATION { 03502 PVOID Object; 03503 KEY_INFORMATION_CLASS KeyInformationClass; 03504 PVOID KeyInformation; 03505 ULONG Length; 03506 PULONG ResultLength; 03507 PVOID CallContext; 03508 PVOID ObjectContext; 03509 PVOID Reserved; 03510 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION; 03511 03512 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION { 03513 PVOID Object; 03514 PUNICODE_STRING ValueName; 03515 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; 03516 PVOID KeyValueInformation; 03517 ULONG Length; 03518 PULONG ResultLength; 03519 PVOID CallContext; 03520 PVOID ObjectContext; 03521 PVOID Reserved; 03522 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION; 03523 03524 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION { 03525 PVOID Object; 03526 PKEY_VALUE_ENTRY ValueEntries; 03527 ULONG EntryCount; 03528 PVOID ValueBuffer; 03529 PULONG BufferLength; 03530 PULONG RequiredBufferLength; 03531 PVOID CallContext; 03532 PVOID ObjectContext; 03533 PVOID Reserved; 03534 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION; 03535 03536 typedef struct _REG_RENAME_KEY_INFORMATION { 03537 PVOID Object; 03538 PUNICODE_STRING NewName; 03539 PVOID CallContext; 03540 PVOID ObjectContext; 03541 PVOID Reserved; 03542 } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION; 03543 03544 typedef struct _REG_CREATE_KEY_INFORMATION { 03545 PUNICODE_STRING CompleteName; 03546 PVOID RootObject; 03547 PVOID ObjectType; 03548 ULONG CreateOptions; 03549 PUNICODE_STRING Class; 03550 PVOID SecurityDescriptor; 03551 PVOID SecurityQualityOfService; 03552 ACCESS_MASK DesiredAccess; 03553 ACCESS_MASK GrantedAccess; 03554 PULONG Disposition; 03555 PVOID *ResultObject; 03556 PVOID CallContext; 03557 PVOID RootObjectContext; 03558 PVOID Transaction; 03559 PVOID Reserved; 03560 } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION; 03561 03562 typedef struct _REG_CREATE_KEY_INFORMATION_V1 { 03563 PUNICODE_STRING CompleteName; 03564 PVOID RootObject; 03565 PVOID ObjectType; 03566 ULONG Options; 03567 PUNICODE_STRING Class; 03568 PVOID SecurityDescriptor; 03569 PVOID SecurityQualityOfService; 03570 ACCESS_MASK DesiredAccess; 03571 ACCESS_MASK GrantedAccess; 03572 PULONG Disposition; 03573 PVOID *ResultObject; 03574 PVOID CallContext; 03575 PVOID RootObjectContext; 03576 PVOID Transaction; 03577 ULONG_PTR Version; 03578 PUNICODE_STRING RemainingName; 03579 ULONG Wow64Flags; 03580 ULONG Attributes; 03581 KPROCESSOR_MODE CheckAccessMode; 03582 } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1; 03583 03584 typedef struct _REG_PRE_CREATE_KEY_INFORMATION { 03585 PUNICODE_STRING CompleteName; 03586 } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;; 03587 03588 typedef struct _REG_POST_CREATE_KEY_INFORMATION { 03589 PUNICODE_STRING CompleteName; 03590 PVOID Object; 03591 NTSTATUS Status; 03592 } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION; 03593 03594 typedef struct _REG_POST_OPERATION_INFORMATION { 03595 PVOID Object; 03596 NTSTATUS Status; 03597 PVOID PreInformation; 03598 NTSTATUS ReturnStatus; 03599 PVOID CallContext; 03600 PVOID ObjectContext; 03601 PVOID Reserved; 03602 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION; 03603 03604 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION { 03605 PVOID Object; 03606 PVOID CallContext; 03607 PVOID ObjectContext; 03608 PVOID Reserved; 03609 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION; 03610 03611 #if (NTDDI_VERSION >= NTDDI_VISTA) 03612 03613 typedef struct _REG_LOAD_KEY_INFORMATION { 03614 PVOID Object; 03615 PUNICODE_STRING KeyName; 03616 PUNICODE_STRING SourceFile; 03617 ULONG Flags; 03618 PVOID TrustClassObject; 03619 PVOID UserEvent; 03620 ACCESS_MASK DesiredAccess; 03621 PHANDLE RootHandle; 03622 PVOID CallContext; 03623 PVOID ObjectContext; 03624 PVOID Reserved; 03625 } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION; 03626 03627 typedef struct _REG_UNLOAD_KEY_INFORMATION { 03628 PVOID Object; 03629 PVOID UserEvent; 03630 PVOID CallContext; 03631 PVOID ObjectContext; 03632 PVOID Reserved; 03633 } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION; 03634 03635 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION { 03636 PVOID Object; 03637 PVOID ObjectContext; 03638 PVOID Reserved; 03639 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION; 03640 03641 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION { 03642 PVOID Object; 03643 PSECURITY_INFORMATION SecurityInformation; 03644 PSECURITY_DESCRIPTOR SecurityDescriptor; 03645 PULONG Length; 03646 PVOID CallContext; 03647 PVOID ObjectContext; 03648 PVOID Reserved; 03649 } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION; 03650 03651 typedef struct _REG_SET_KEY_SECURITY_INFORMATION { 03652 PVOID Object; 03653 PSECURITY_INFORMATION SecurityInformation; 03654 PSECURITY_DESCRIPTOR SecurityDescriptor; 03655 PVOID CallContext; 03656 PVOID ObjectContext; 03657 PVOID Reserved; 03658 } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION; 03659 03660 typedef struct _REG_RESTORE_KEY_INFORMATION { 03661 PVOID Object; 03662 HANDLE FileHandle; 03663 ULONG Flags; 03664 PVOID CallContext; 03665 PVOID ObjectContext; 03666 PVOID Reserved; 03667 } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION; 03668 03669 typedef struct _REG_SAVE_KEY_INFORMATION { 03670 PVOID Object; 03671 HANDLE FileHandle; 03672 ULONG Format; 03673 PVOID CallContext; 03674 PVOID ObjectContext; 03675 PVOID Reserved; 03676 } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION; 03677 03678 typedef struct _REG_REPLACE_KEY_INFORMATION { 03679 PVOID Object; 03680 PUNICODE_STRING OldFileName; 03681 PUNICODE_STRING NewFileName; 03682 PVOID CallContext; 03683 PVOID ObjectContext; 03684 PVOID Reserved; 03685 } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION; 03686 03687 #endif /* NTDDI_VERSION >= NTDDI_VISTA */ 03688 03689 #define SERVICE_KERNEL_DRIVER 0x00000001 03690 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 03691 #define SERVICE_ADAPTER 0x00000004 03692 #define SERVICE_RECOGNIZER_DRIVER 0x00000008 03693 03694 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \ 03695 SERVICE_FILE_SYSTEM_DRIVER | \ 03696 SERVICE_RECOGNIZER_DRIVER) 03697 03698 #define SERVICE_WIN32_OWN_PROCESS 0x00000010 03699 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020 03700 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \ 03701 SERVICE_WIN32_SHARE_PROCESS) 03702 03703 #define SERVICE_INTERACTIVE_PROCESS 0x00000100 03704 03705 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \ 03706 SERVICE_ADAPTER | \ 03707 SERVICE_DRIVER | \ 03708 SERVICE_INTERACTIVE_PROCESS) 03709 03710 /* Service Start Types */ 03711 #define SERVICE_BOOT_START 0x00000000 03712 #define SERVICE_SYSTEM_START 0x00000001 03713 #define SERVICE_AUTO_START 0x00000002 03714 #define SERVICE_DEMAND_START 0x00000003 03715 #define SERVICE_DISABLED 0x00000004 03716 03717 #define SERVICE_ERROR_IGNORE 0x00000000 03718 #define SERVICE_ERROR_NORMAL 0x00000001 03719 #define SERVICE_ERROR_SEVERE 0x00000002 03720 #define SERVICE_ERROR_CRITICAL 0x00000003 03721 03722 typedef enum _CM_SERVICE_NODE_TYPE { 03723 DriverType = SERVICE_KERNEL_DRIVER, 03724 FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, 03725 Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, 03726 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, 03727 AdapterType = SERVICE_ADAPTER, 03728 RecognizerType = SERVICE_RECOGNIZER_DRIVER 03729 } SERVICE_NODE_TYPE; 03730 03731 typedef enum _CM_SERVICE_LOAD_TYPE { 03732 BootLoad = SERVICE_BOOT_START, 03733 SystemLoad = SERVICE_SYSTEM_START, 03734 AutoLoad = SERVICE_AUTO_START, 03735 DemandLoad = SERVICE_DEMAND_START, 03736 DisableLoad = SERVICE_DISABLED 03737 } SERVICE_LOAD_TYPE; 03738 03739 typedef enum _CM_ERROR_CONTROL_TYPE { 03740 IgnoreError = SERVICE_ERROR_IGNORE, 03741 NormalError = SERVICE_ERROR_NORMAL, 03742 SevereError = SERVICE_ERROR_SEVERE, 03743 CriticalError = SERVICE_ERROR_CRITICAL 03744 } SERVICE_ERROR_TYPE; 03745 03746 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001 03747 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002 03748 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004 03749 03750 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \ 03751 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \ 03752 CM_SERVICE_USB_DISK_BOOT_LOAD) 03753 03754 /****************************************************************************** 03755 * I/O Manager Types * 03756 ******************************************************************************/ 03757 03758 03759 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS 03760 03761 #define CONNECT_FULLY_SPECIFIED 0x1 03762 #define CONNECT_LINE_BASED 0x2 03763 #define CONNECT_MESSAGE_BASED 0x3 03764 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4 03765 #define CONNECT_CURRENT_VERSION 0x4 03766 03767 #define POOL_COLD_ALLOCATION 256 03768 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8 03769 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16 03770 03771 #define IO_TYPE_ADAPTER 1 03772 #define IO_TYPE_CONTROLLER 2 03773 #define IO_TYPE_DEVICE 3 03774 #define IO_TYPE_DRIVER 4 03775 #define IO_TYPE_FILE 5 03776 #define IO_TYPE_IRP 6 03777 #define IO_TYPE_MASTER_ADAPTER 7 03778 #define IO_TYPE_OPEN_PACKET 8 03779 #define IO_TYPE_TIMER 9 03780 #define IO_TYPE_VPB 10 03781 #define IO_TYPE_ERROR_LOG 11 03782 #define IO_TYPE_ERROR_MESSAGE 12 03783 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13 03784 03785 #define IO_TYPE_CSQ_IRP_CONTEXT 1 03786 #define IO_TYPE_CSQ 2 03787 #define IO_TYPE_CSQ_EX 3 03788 03789 /* IO_RESOURCE_DESCRIPTOR.Option */ 03790 #define IO_RESOURCE_PREFERRED 0x01 03791 #define IO_RESOURCE_DEFAULT 0x02 03792 #define IO_RESOURCE_ALTERNATIVE 0x08 03793 03794 #define FILE_DEVICE_BEEP 0x00000001 03795 #define FILE_DEVICE_CD_ROM 0x00000002 03796 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 03797 #define FILE_DEVICE_CONTROLLER 0x00000004 03798 #define FILE_DEVICE_DATALINK 0x00000005 03799 #define FILE_DEVICE_DFS 0x00000006 03800 #define FILE_DEVICE_DISK 0x00000007 03801 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 03802 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 03803 #define FILE_DEVICE_INPORT_PORT 0x0000000a 03804 #define FILE_DEVICE_KEYBOARD 0x0000000b 03805 #define FILE_DEVICE_MAILSLOT 0x0000000c 03806 #define FILE_DEVICE_MIDI_IN 0x0000000d 03807 #define FILE_DEVICE_MIDI_OUT 0x0000000e 03808 #define FILE_DEVICE_MOUSE 0x0000000f 03809 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 03810 #define FILE_DEVICE_NAMED_PIPE 0x00000011 03811 #define FILE_DEVICE_NETWORK 0x00000012 03812 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 03813 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 03814 #define FILE_DEVICE_NULL 0x00000015 03815 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 03816 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 03817 #define FILE_DEVICE_PRINTER 0x00000018 03818 #define FILE_DEVICE_SCANNER 0x00000019 03819 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a 03820 #define FILE_DEVICE_SERIAL_PORT 0x0000001b 03821 #define FILE_DEVICE_SCREEN 0x0000001c 03822 #define FILE_DEVICE_SOUND 0x0000001d 03823 #define FILE_DEVICE_STREAMS 0x0000001e 03824 #define FILE_DEVICE_TAPE 0x0000001f 03825 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 03826 #define FILE_DEVICE_TRANSPORT 0x00000021 03827 #define FILE_DEVICE_UNKNOWN 0x00000022 03828 #define FILE_DEVICE_VIDEO 0x00000023 03829 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 03830 #define FILE_DEVICE_WAVE_IN 0x00000025 03831 #define FILE_DEVICE_WAVE_OUT 0x00000026 03832 #define FILE_DEVICE_8042_PORT 0x00000027 03833 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 03834 #define FILE_DEVICE_BATTERY 0x00000029 03835 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a 03836 #define FILE_DEVICE_MODEM 0x0000002b 03837 #define FILE_DEVICE_VDM 0x0000002c 03838 #define FILE_DEVICE_MASS_STORAGE 0x0000002d 03839 #define FILE_DEVICE_SMB 0x0000002e 03840 #define FILE_DEVICE_KS 0x0000002f 03841 #define FILE_DEVICE_CHANGER 0x00000030 03842 #define FILE_DEVICE_SMARTCARD 0x00000031 03843 #define FILE_DEVICE_ACPI 0x00000032 03844 #define FILE_DEVICE_DVD 0x00000033 03845 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 03846 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 03847 #define FILE_DEVICE_DFS_VOLUME 0x00000036 03848 #define FILE_DEVICE_SERENUM 0x00000037 03849 #define FILE_DEVICE_TERMSRV 0x00000038 03850 #define FILE_DEVICE_KSEC 0x00000039 03851 #define FILE_DEVICE_FIPS 0x0000003A 03852 #define FILE_DEVICE_INFINIBAND 0x0000003B 03853 #define FILE_DEVICE_VMBUS 0x0000003E 03854 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F 03855 #define FILE_DEVICE_WPD 0x00000040 03856 #define FILE_DEVICE_BLUETOOTH 0x00000041 03857 #define FILE_DEVICE_MT_COMPOSITE 0x00000042 03858 #define FILE_DEVICE_MT_TRANSPORT 0x00000043 03859 #define FILE_DEVICE_BIOMETRIC 0x00000044 03860 #define FILE_DEVICE_PMI 0x00000045 03861 03862 #if defined(NT_PROCESSOR_GROUPS) 03863 03864 typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 03865 03866 typedef enum _IRQ_DEVICE_POLICY_USHORT { 03867 IrqPolicyMachineDefault = 0, 03868 IrqPolicyAllCloseProcessors = 1, 03869 IrqPolicyOneCloseProcessor = 2, 03870 IrqPolicyAllProcessorsInMachine = 3, 03871 IrqPolicyAllProcessorsInGroup = 3, 03872 IrqPolicySpecifiedProcessors = 4, 03873 IrqPolicySpreadMessagesAcrossAllProcessors = 5}; 03874 03875 #else /* defined(NT_PROCESSOR_GROUPS) */ 03876 03877 typedef enum _IRQ_DEVICE_POLICY { 03878 IrqPolicyMachineDefault = 0, 03879 IrqPolicyAllCloseProcessors, 03880 IrqPolicyOneCloseProcessor, 03881 IrqPolicyAllProcessorsInMachine, 03882 IrqPolicySpecifiedProcessors, 03883 IrqPolicySpreadMessagesAcrossAllProcessors 03884 } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 03885 03886 #endif 03887 03888 typedef enum _IRQ_PRIORITY { 03889 IrqPriorityUndefined = 0, 03890 IrqPriorityLow, 03891 IrqPriorityNormal, 03892 IrqPriorityHigh 03893 } IRQ_PRIORITY, *PIRQ_PRIORITY; 03894 03895 typedef enum _IRQ_GROUP_POLICY { 03896 GroupAffinityAllGroupZero = 0, 03897 GroupAffinityDontCare 03898 } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY; 03899 03900 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) 03901 03902 typedef struct _OBJECT_HANDLE_INFORMATION { 03903 ULONG HandleAttributes; 03904 ACCESS_MASK GrantedAccess; 03905 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; 03906 03907 typedef struct _CLIENT_ID { 03908 HANDLE UniqueProcess; 03909 HANDLE UniqueThread; 03910 } CLIENT_ID, *PCLIENT_ID; 03911 03912 typedef struct _VPB { 03913 CSHORT Type; 03914 CSHORT Size; 03915 USHORT Flags; 03916 USHORT VolumeLabelLength; 03917 struct _DEVICE_OBJECT *DeviceObject; 03918 struct _DEVICE_OBJECT *RealDevice; 03919 ULONG SerialNumber; 03920 ULONG ReferenceCount; 03921 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; 03922 } VPB, *PVPB; 03923 03924 typedef enum _IO_ALLOCATION_ACTION { 03925 KeepObject = 1, 03926 DeallocateObject, 03927 DeallocateObjectKeepRegisters 03928 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; 03929 03930 _Function_class_(DRIVER_CONTROL) 03931 _IRQL_requires_same_ 03932 typedef IO_ALLOCATION_ACTION 03933 (NTAPI DRIVER_CONTROL)( 03934 _In_ struct _DEVICE_OBJECT *DeviceObject, 03935 _Inout_ struct _IRP *Irp, 03936 _In_ PVOID MapRegisterBase, 03937 _In_ PVOID Context); 03938 typedef DRIVER_CONTROL *PDRIVER_CONTROL; 03939 03940 typedef struct _WAIT_CONTEXT_BLOCK { 03941 KDEVICE_QUEUE_ENTRY WaitQueueEntry; 03942 PDRIVER_CONTROL DeviceRoutine; 03943 PVOID DeviceContext; 03944 ULONG NumberOfMapRegisters; 03945 PVOID DeviceObject; 03946 PVOID CurrentIrp; 03947 PKDPC BufferChainingDpc; 03948 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; 03949 03950 /* DEVICE_OBJECT.Flags */ 03951 #define DO_VERIFY_VOLUME 0x00000002 03952 #define DO_BUFFERED_IO 0x00000004 03953 #define DO_EXCLUSIVE 0x00000008 03954 #define DO_DIRECT_IO 0x00000010 03955 #define DO_MAP_IO_BUFFER 0x00000020 03956 #define DO_DEVICE_INITIALIZING 0x00000080 03957 #define DO_SHUTDOWN_REGISTERED 0x00000800 03958 #define DO_BUS_ENUMERATED_DEVICE 0x00001000 03959 #define DO_POWER_PAGABLE 0x00002000 03960 #define DO_POWER_INRUSH 0x00004000 03961 03962 /* DEVICE_OBJECT.Characteristics */ 03963 #define FILE_REMOVABLE_MEDIA 0x00000001 03964 #define FILE_READ_ONLY_DEVICE 0x00000002 03965 #define FILE_FLOPPY_DISKETTE 0x00000004 03966 #define FILE_WRITE_ONCE_MEDIA 0x00000008 03967 #define FILE_REMOTE_DEVICE 0x00000010 03968 #define FILE_DEVICE_IS_MOUNTED 0x00000020 03969 #define FILE_VIRTUAL_VOLUME 0x00000040 03970 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 03971 #define FILE_DEVICE_SECURE_OPEN 0x00000100 03972 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 03973 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 03974 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 03975 03976 /* DEVICE_OBJECT.AlignmentRequirement */ 03977 #define FILE_BYTE_ALIGNMENT 0x00000000 03978 #define FILE_WORD_ALIGNMENT 0x00000001 03979 #define FILE_LONG_ALIGNMENT 0x00000003 03980 #define FILE_QUAD_ALIGNMENT 0x00000007 03981 #define FILE_OCTA_ALIGNMENT 0x0000000f 03982 #define FILE_32_BYTE_ALIGNMENT 0x0000001f 03983 #define FILE_64_BYTE_ALIGNMENT 0x0000003f 03984 #define FILE_128_BYTE_ALIGNMENT 0x0000007f 03985 #define FILE_256_BYTE_ALIGNMENT 0x000000ff 03986 #define FILE_512_BYTE_ALIGNMENT 0x000001ff 03987 03988 /* DEVICE_OBJECT.DeviceType */ 03989 #define DEVICE_TYPE ULONG 03990 03991 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { 03992 CSHORT Type; 03993 USHORT Size; 03994 LONG ReferenceCount; 03995 struct _DRIVER_OBJECT *DriverObject; 03996 struct _DEVICE_OBJECT *NextDevice; 03997 struct _DEVICE_OBJECT *AttachedDevice; 03998 struct _IRP *CurrentIrp; 03999 PIO_TIMER Timer; 04000 ULONG Flags; 04001 ULONG Characteristics; 04002 volatile PVPB Vpb; 04003 PVOID DeviceExtension; 04004 DEVICE_TYPE DeviceType; 04005 CCHAR StackSize; 04006 union { 04007 LIST_ENTRY ListEntry; 04008 WAIT_CONTEXT_BLOCK Wcb; 04009 } Queue; 04010 ULONG AlignmentRequirement; 04011 KDEVICE_QUEUE DeviceQueue; 04012 KDPC Dpc; 04013 ULONG ActiveThreadCount; 04014 PSECURITY_DESCRIPTOR SecurityDescriptor; 04015 KEVENT DeviceLock; 04016 USHORT SectorSize; 04017 USHORT Spare1; 04018 struct _DEVOBJ_EXTENSION *DeviceObjectExtension; 04019 PVOID Reserved; 04020 } DEVICE_OBJECT, *PDEVICE_OBJECT; 04021 04022 typedef enum _IO_SESSION_STATE { 04023 IoSessionStateCreated = 1, 04024 IoSessionStateInitialized, 04025 IoSessionStateConnected, 04026 IoSessionStateDisconnected, 04027 IoSessionStateDisconnectedLoggedOn, 04028 IoSessionStateLoggedOn, 04029 IoSessionStateLoggedOff, 04030 IoSessionStateTerminated, 04031 IoSessionStateMax 04032 } IO_SESSION_STATE, *PIO_SESSION_STATE; 04033 04034 typedef enum _IO_COMPLETION_ROUTINE_RESULT { 04035 ContinueCompletion = STATUS_CONTINUE_COMPLETION, 04036 StopCompletion = STATUS_MORE_PROCESSING_REQUIRED 04037 } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT; 04038 04039 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY { 04040 PHYSICAL_ADDRESS MessageAddress; 04041 KAFFINITY TargetProcessorSet; 04042 PKINTERRUPT InterruptObject; 04043 ULONG MessageData; 04044 ULONG Vector; 04045 KIRQL Irql; 04046 KINTERRUPT_MODE Mode; 04047 KINTERRUPT_POLARITY Polarity; 04048 } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY; 04049 04050 typedef struct _IO_INTERRUPT_MESSAGE_INFO { 04051 KIRQL UnifiedIrql; 04052 ULONG MessageCount; 04053 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1]; 04054 } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO; 04055 04056 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS { 04057 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 04058 _Out_ PKINTERRUPT *InterruptObject; 04059 _In_ PKSERVICE_ROUTINE ServiceRoutine; 04060 _In_ PVOID ServiceContext; 04061 _In_opt_ PKSPIN_LOCK SpinLock; 04062 _In_ KIRQL SynchronizeIrql; 04063 _In_ BOOLEAN FloatingSave; 04064 _In_ BOOLEAN ShareVector; 04065 _In_ ULONG Vector; 04066 _In_ KIRQL Irql; 04067 _In_ KINTERRUPT_MODE InterruptMode; 04068 _In_ KAFFINITY ProcessorEnableMask; 04069 _In_ USHORT Group; 04070 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS; 04071 04072 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS { 04073 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 04074 _Out_ PKINTERRUPT *InterruptObject; 04075 _In_ PKSERVICE_ROUTINE ServiceRoutine; 04076 _In_ PVOID ServiceContext; 04077 _In_opt_ PKSPIN_LOCK SpinLock; 04078 _In_opt_ KIRQL SynchronizeIrql; 04079 _In_ BOOLEAN FloatingSave; 04080 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS; 04081 04082 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS { 04083 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 04084 union { 04085 _Out_ PVOID *Generic; 04086 _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; 04087 _Out_ PKINTERRUPT *InterruptObject; 04088 } ConnectionContext; 04089 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; 04090 _In_ PVOID ServiceContext; 04091 _In_opt_ PKSPIN_LOCK SpinLock; 04092 _In_opt_ KIRQL SynchronizeIrql; 04093 _In_ BOOLEAN FloatingSave; 04094 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine; 04095 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS; 04096 04097 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { 04098 _Inout_ ULONG Version; 04099 _ANONYMOUS_UNION union { 04100 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified; 04101 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased; 04102 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased; 04103 } DUMMYUNIONNAME; 04104 } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS; 04105 04106 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS { 04107 _In_ ULONG Version; 04108 union { 04109 _In_ PVOID Generic; 04110 _In_ PKINTERRUPT InterruptObject; 04111 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; 04112 } ConnectionContext; 04113 } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS; 04114 04115 typedef enum _IO_ACCESS_TYPE { 04116 ReadAccess, 04117 WriteAccess, 04118 ModifyAccess 04119 } IO_ACCESS_TYPE; 04120 04121 typedef enum _IO_ACCESS_MODE { 04122 SequentialAccess, 04123 RandomAccess 04124 } IO_ACCESS_MODE; 04125 04126 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS { 04127 IoSessionStateNotification, 04128 IoMaxContainerNotificationClass 04129 } IO_CONTAINER_NOTIFICATION_CLASS; 04130 04131 typedef struct _IO_SESSION_STATE_NOTIFICATION { 04132 ULONG Size; 04133 ULONG Flags; 04134 PVOID IoObject; 04135 ULONG EventMask; 04136 PVOID Context; 04137 } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION; 04138 04139 typedef enum _IO_CONTAINER_INFORMATION_CLASS { 04140 IoSessionStateInformation, 04141 IoMaxContainerInformationClass 04142 } IO_CONTAINER_INFORMATION_CLASS; 04143 04144 typedef struct _IO_SESSION_STATE_INFORMATION { 04145 ULONG SessionId; 04146 IO_SESSION_STATE SessionState; 04147 BOOLEAN LocalSession; 04148 } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION; 04149 04150 #if (NTDDI_VERSION >= NTDDI_WIN7) 04151 04152 typedef NTSTATUS 04153 (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)( 04154 VOID); 04155 04156 typedef NTSTATUS 04157 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( 04158 _In_ PVOID SessionObject, 04159 _In_ PVOID IoObject, 04160 _In_ ULONG Event, 04161 _In_ PVOID Context, 04162 _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload, 04163 _In_ ULONG PayloadLength); 04164 04165 typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION; 04166 04167 #endif 04168 04169 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; 04170 04171 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { 04172 BOOLEAN Removed; 04173 BOOLEAN Reserved[3]; 04174 volatile LONG IoCount; 04175 KEVENT RemoveEvent; 04176 } IO_REMOVE_LOCK_COMMON_BLOCK; 04177 04178 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { 04179 LONG Signature; 04180 LONG HighWatermark; 04181 LONGLONG MaxLockedTicks; 04182 LONG AllocateTag; 04183 LIST_ENTRY LockList; 04184 KSPIN_LOCK Spin; 04185 volatile LONG LowMemoryCount; 04186 ULONG Reserved1[4]; 04187 PVOID Reserved2; 04188 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; 04189 } IO_REMOVE_LOCK_DBG_BLOCK; 04190 04191 typedef struct _IO_REMOVE_LOCK { 04192 IO_REMOVE_LOCK_COMMON_BLOCK Common; 04193 #if DBG 04194 IO_REMOVE_LOCK_DBG_BLOCK Dbg; 04195 #endif 04196 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; 04197 04198 typedef struct _IO_WORKITEM *PIO_WORKITEM; 04199 04200 _Function_class_(IO_WORKITEM_ROUTINE) 04201 _IRQL_requires_(PASSIVE_LEVEL) 04202 _IRQL_requires_same_ 04203 typedef VOID 04204 (NTAPI IO_WORKITEM_ROUTINE)( 04205 _In_ PDEVICE_OBJECT DeviceObject, 04206 _In_opt_ PVOID Context); 04207 typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; 04208 04209 typedef VOID 04210 (NTAPI IO_WORKITEM_ROUTINE_EX)( 04211 _In_ PVOID IoObject, 04212 _In_opt_ PVOID Context, 04213 _In_ PIO_WORKITEM IoWorkItem); 04214 typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX; 04215 04216 typedef struct _SHARE_ACCESS { 04217 ULONG OpenCount; 04218 ULONG Readers; 04219 ULONG Writers; 04220 ULONG Deleters; 04221 ULONG SharedRead; 04222 ULONG SharedWrite; 04223 ULONG SharedDelete; 04224 } SHARE_ACCESS, *PSHARE_ACCESS; 04225 04226 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as 04227 inheritance, even from a struct renders the type non-POD. So we use 04228 this hack */ 04229 #define PCI_COMMON_HEADER_LAYOUT \ 04230 USHORT VendorID; \ 04231 USHORT DeviceID; \ 04232 USHORT Command; \ 04233 USHORT Status; \ 04234 UCHAR RevisionID; \ 04235 UCHAR ProgIf; \ 04236 UCHAR SubClass; \ 04237 UCHAR BaseClass; \ 04238 UCHAR CacheLineSize; \ 04239 UCHAR LatencyTimer; \ 04240 UCHAR HeaderType; \ 04241 UCHAR BIST; \ 04242 union { \ 04243 struct _PCI_HEADER_TYPE_0 { \ 04244 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ 04245 ULONG CIS; \ 04246 USHORT SubVendorID; \ 04247 USHORT SubSystemID; \ 04248 ULONG ROMBaseAddress; \ 04249 UCHAR CapabilitiesPtr; \ 04250 UCHAR Reserved1[3]; \ 04251 ULONG Reserved2; \ 04252 UCHAR InterruptLine; \ 04253 UCHAR InterruptPin; \ 04254 UCHAR MinimumGrant; \ 04255 UCHAR MaximumLatency; \ 04256 } type0; \ 04257 struct _PCI_HEADER_TYPE_1 { \ 04258 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ 04259 UCHAR PrimaryBus; \ 04260 UCHAR SecondaryBus; \ 04261 UCHAR SubordinateBus; \ 04262 UCHAR SecondaryLatency; \ 04263 UCHAR IOBase; \ 04264 UCHAR IOLimit; \ 04265 USHORT SecondaryStatus; \ 04266 USHORT MemoryBase; \ 04267 USHORT MemoryLimit; \ 04268 USHORT PrefetchBase; \ 04269 USHORT PrefetchLimit; \ 04270 ULONG PrefetchBaseUpper32; \ 04271 ULONG PrefetchLimitUpper32; \ 04272 USHORT IOBaseUpper16; \ 04273 USHORT IOLimitUpper16; \ 04274 UCHAR CapabilitiesPtr; \ 04275 UCHAR Reserved1[3]; \ 04276 ULONG ROMBaseAddress; \ 04277 UCHAR InterruptLine; \ 04278 UCHAR InterruptPin; \ 04279 USHORT BridgeControl; \ 04280 } type1; \ 04281 struct _PCI_HEADER_TYPE_2 { \ 04282 ULONG SocketRegistersBaseAddress; \ 04283 UCHAR CapabilitiesPtr; \ 04284 UCHAR Reserved; \ 04285 USHORT SecondaryStatus; \ 04286 UCHAR PrimaryBus; \ 04287 UCHAR SecondaryBus; \ 04288 UCHAR SubordinateBus; \ 04289 UCHAR SecondaryLatency; \ 04290 struct { \ 04291 ULONG Base; \ 04292 ULONG Limit; \ 04293 } Range[PCI_TYPE2_ADDRESSES-1]; \ 04294 UCHAR InterruptLine; \ 04295 UCHAR InterruptPin; \ 04296 USHORT BridgeControl; \ 04297 } type2; \ 04298 } u; 04299 04300 typedef enum _CREATE_FILE_TYPE { 04301 CreateFileTypeNone, 04302 CreateFileTypeNamedPipe, 04303 CreateFileTypeMailslot 04304 } CREATE_FILE_TYPE; 04305 04306 #define IO_FORCE_ACCESS_CHECK 0x001 04307 #define IO_NO_PARAMETER_CHECKING 0x100 04308 04309 #define IO_REPARSE 0x0 04310 #define IO_REMOUNT 0x1 04311 04312 typedef struct _IO_STATUS_BLOCK { 04313 _ANONYMOUS_UNION union { 04314 NTSTATUS Status; 04315 PVOID Pointer; 04316 } DUMMYUNIONNAME; 04317 ULONG_PTR Information; 04318 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; 04319 04320 #if defined(_WIN64) 04321 typedef struct _IO_STATUS_BLOCK32 { 04322 NTSTATUS Status; 04323 ULONG Information; 04324 } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32; 04325 #endif 04326 04327 typedef VOID 04328 (NTAPI *PIO_APC_ROUTINE)( 04329 _In_ PVOID ApcContext, 04330 _In_ PIO_STATUS_BLOCK IoStatusBlock, 04331 _In_ ULONG Reserved); 04332 04333 #define PIO_APC_ROUTINE_DEFINED 04334 04335 typedef enum _IO_SESSION_EVENT { 04336 IoSessionEventIgnore = 0, 04337 IoSessionEventCreated, 04338 IoSessionEventTerminated, 04339 IoSessionEventConnected, 04340 IoSessionEventDisconnected, 04341 IoSessionEventLogon, 04342 IoSessionEventLogoff, 04343 IoSessionEventMax 04344 } IO_SESSION_EVENT, *PIO_SESSION_EVENT; 04345 04346 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff 04347 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001 04348 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002 04349 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004 04350 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008 04351 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010 04352 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020 04353 04354 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f 04355 04356 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L 04357 04358 typedef struct _IO_SESSION_CONNECT_INFO { 04359 ULONG SessionId; 04360 BOOLEAN LocalSession; 04361 } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO; 04362 04363 #define EVENT_INCREMENT 1 04364 #define IO_NO_INCREMENT 0 04365 #define IO_CD_ROM_INCREMENT 1 04366 #define IO_DISK_INCREMENT 1 04367 #define IO_KEYBOARD_INCREMENT 6 04368 #define IO_MAILSLOT_INCREMENT 2 04369 #define IO_MOUSE_INCREMENT 6 04370 #define IO_NAMED_PIPE_INCREMENT 2 04371 #define IO_NETWORK_INCREMENT 2 04372 #define IO_PARALLEL_INCREMENT 1 04373 #define IO_SERIAL_INCREMENT 2 04374 #define IO_SOUND_INCREMENT 8 04375 #define IO_VIDEO_INCREMENT 1 04376 #define SEMAPHORE_INCREMENT 1 04377 04378 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000) 04379 04380 typedef struct _BOOTDISK_INFORMATION { 04381 LONGLONG BootPartitionOffset; 04382 LONGLONG SystemPartitionOffset; 04383 ULONG BootDeviceSignature; 04384 ULONG SystemDeviceSignature; 04385 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; 04386 04387 typedef struct _BOOTDISK_INFORMATION_EX { 04388 LONGLONG BootPartitionOffset; 04389 LONGLONG SystemPartitionOffset; 04390 ULONG BootDeviceSignature; 04391 ULONG SystemDeviceSignature; 04392 GUID BootDeviceGuid; 04393 GUID SystemDeviceGuid; 04394 BOOLEAN BootDeviceIsGpt; 04395 BOOLEAN SystemDeviceIsGpt; 04396 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; 04397 04398 #if (NTDDI_VERSION >= NTDDI_WIN7) 04399 04400 typedef struct _LOADER_PARTITION_INFORMATION_EX { 04401 ULONG PartitionStyle; 04402 ULONG PartitionNumber; 04403 _ANONYMOUS_UNION union { 04404 ULONG Signature; 04405 GUID DeviceId; 04406 } DUMMYUNIONNAME; 04407 ULONG Flags; 04408 } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX; 04409 04410 typedef struct _BOOTDISK_INFORMATION_LITE { 04411 ULONG NumberEntries; 04412 LOADER_PARTITION_INFORMATION_EX Entries[1]; 04413 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; 04414 04415 #else 04416 04417 #if (NTDDI_VERSION >= NTDDI_VISTA) 04418 typedef struct _BOOTDISK_INFORMATION_LITE { 04419 ULONG BootDeviceSignature; 04420 ULONG SystemDeviceSignature; 04421 GUID BootDeviceGuid; 04422 GUID SystemDeviceGuid; 04423 BOOLEAN BootDeviceIsGpt; 04424 BOOLEAN SystemDeviceIsGpt; 04425 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; 04426 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 04427 04428 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 04429 04430 #include <pshpack1.h> 04431 04432 typedef struct _EISA_MEMORY_TYPE { 04433 UCHAR ReadWrite:1; 04434 UCHAR Cached:1; 04435 UCHAR Reserved0:1; 04436 UCHAR Type:2; 04437 UCHAR Shared:1; 04438 UCHAR Reserved1:1; 04439 UCHAR MoreEntries:1; 04440 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; 04441 04442 typedef struct _EISA_MEMORY_CONFIGURATION { 04443 EISA_MEMORY_TYPE ConfigurationByte; 04444 UCHAR DataSize; 04445 USHORT AddressLowWord; 04446 UCHAR AddressHighByte; 04447 USHORT MemorySize; 04448 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; 04449 04450 typedef struct _EISA_IRQ_DESCRIPTOR { 04451 UCHAR Interrupt:4; 04452 UCHAR Reserved:1; 04453 UCHAR LevelTriggered:1; 04454 UCHAR Shared:1; 04455 UCHAR MoreEntries:1; 04456 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; 04457 04458 typedef struct _EISA_IRQ_CONFIGURATION { 04459 EISA_IRQ_DESCRIPTOR ConfigurationByte; 04460 UCHAR Reserved; 04461 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; 04462 04463 typedef struct _DMA_CONFIGURATION_BYTE0 { 04464 UCHAR Channel:3; 04465 UCHAR Reserved:3; 04466 UCHAR Shared:1; 04467 UCHAR MoreEntries:1; 04468 } DMA_CONFIGURATION_BYTE0; 04469 04470 typedef struct _DMA_CONFIGURATION_BYTE1 { 04471 UCHAR Reserved0:2; 04472 UCHAR TransferSize:2; 04473 UCHAR Timing:2; 04474 UCHAR Reserved1:2; 04475 } DMA_CONFIGURATION_BYTE1; 04476 04477 typedef struct _EISA_DMA_CONFIGURATION { 04478 DMA_CONFIGURATION_BYTE0 ConfigurationByte0; 04479 DMA_CONFIGURATION_BYTE1 ConfigurationByte1; 04480 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; 04481 04482 typedef struct _EISA_PORT_DESCRIPTOR { 04483 UCHAR NumberPorts:5; 04484 UCHAR Reserved:1; 04485 UCHAR Shared:1; 04486 UCHAR MoreEntries:1; 04487 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; 04488 04489 typedef struct _EISA_PORT_CONFIGURATION { 04490 EISA_PORT_DESCRIPTOR Configuration; 04491 USHORT PortAddress; 04492 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; 04493 04494 typedef struct _CM_EISA_SLOT_INFORMATION { 04495 UCHAR ReturnCode; 04496 UCHAR ReturnFlags; 04497 UCHAR MajorRevision; 04498 UCHAR MinorRevision; 04499 USHORT Checksum; 04500 UCHAR NumberFunctions; 04501 UCHAR FunctionInformation; 04502 ULONG CompressedId; 04503 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; 04504 04505 typedef struct _CM_EISA_FUNCTION_INFORMATION { 04506 ULONG CompressedId; 04507 UCHAR IdSlotFlags1; 04508 UCHAR IdSlotFlags2; 04509 UCHAR MinorRevision; 04510 UCHAR MajorRevision; 04511 UCHAR Selections[26]; 04512 UCHAR FunctionFlags; 04513 UCHAR TypeString[80]; 04514 EISA_MEMORY_CONFIGURATION EisaMemory[9]; 04515 EISA_IRQ_CONFIGURATION EisaIrq[7]; 04516 EISA_DMA_CONFIGURATION EisaDma[4]; 04517 EISA_PORT_CONFIGURATION EisaPort[20]; 04518 UCHAR InitializationData[60]; 04519 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; 04520 04521 #include <poppack.h> 04522 04523 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ 04524 04525 #define EISA_FUNCTION_ENABLED 0x80 04526 #define EISA_FREE_FORM_DATA 0x40 04527 #define EISA_HAS_PORT_INIT_ENTRY 0x20 04528 #define EISA_HAS_PORT_RANGE 0x10 04529 #define EISA_HAS_DMA_ENTRY 0x08 04530 #define EISA_HAS_IRQ_ENTRY 0x04 04531 #define EISA_HAS_MEMORY_ENTRY 0x02 04532 #define EISA_HAS_TYPE_ENTRY 0x01 04533 #define EISA_HAS_INFORMATION \ 04534 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ 04535 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) 04536 04537 #define EISA_MORE_ENTRIES 0x80 04538 #define EISA_SYSTEM_MEMORY 0x00 04539 #define EISA_MEMORY_TYPE_RAM 0x01 04540 04541 /* CM_EISA_SLOT_INFORMATION.ReturnCode */ 04542 04543 #define EISA_INVALID_SLOT 0x80 04544 #define EISA_INVALID_FUNCTION 0x81 04545 #define EISA_INVALID_CONFIGURATION 0x82 04546 #define EISA_EMPTY_SLOT 0x83 04547 #define EISA_INVALID_BIOS_CALL 0x86 04548 04549 /* 04550 ** Plug and Play structures 04551 */ 04552 04553 typedef VOID 04554 (NTAPI *PINTERFACE_REFERENCE)( 04555 PVOID Context); 04556 04557 typedef VOID 04558 (NTAPI *PINTERFACE_DEREFERENCE)( 04559 PVOID Context); 04560 04561 _Function_class_(TRANSLATE_BUS_ADDRESS) 04562 _IRQL_requires_same_ 04563 typedef BOOLEAN 04564 (NTAPI TRANSLATE_BUS_ADDRESS)( 04565 _Inout_opt_ PVOID Context, 04566 _In_ PHYSICAL_ADDRESS BusAddress, 04567 _In_ ULONG Length, 04568 _Out_ PULONG AddressSpace, 04569 _Out_ PPHYSICAL_ADDRESS TranslatedAddress); 04570 typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS; 04571 04572 _Function_class_(GET_DMA_ADAPTER) 04573 _IRQL_requires_same_ 04574 typedef struct _DMA_ADAPTER* 04575 (NTAPI GET_DMA_ADAPTER)( 04576 _Inout_opt_ PVOID Context, 04577 _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, 04578 _Out_ PULONG NumberOfMapRegisters); 04579 typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER; 04580 04581 _Function_class_(GET_SET_DEVICE_DATA) 04582 _IRQL_requires_same_ 04583 typedef ULONG 04584 (NTAPI GET_SET_DEVICE_DATA)( 04585 _Inout_opt_ PVOID Context, 04586 _In_ ULONG DataType, 04587 _Inout_updates_bytes_(Length) PVOID Buffer, 04588 _In_ ULONG Offset, 04589 _In_ ULONG Length); 04590 typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA; 04591 04592 typedef enum _DEVICE_INSTALL_STATE { 04593 InstallStateInstalled, 04594 InstallStateNeedsReinstall, 04595 InstallStateFailedInstall, 04596 InstallStateFinishInstall 04597 } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE; 04598 04599 typedef struct _LEGACY_BUS_INFORMATION { 04600 GUID BusTypeGuid; 04601 INTERFACE_TYPE LegacyBusType; 04602 ULONG BusNumber; 04603 } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION; 04604 04605 typedef enum _DEVICE_REMOVAL_POLICY { 04606 RemovalPolicyExpectNoRemoval = 1, 04607 RemovalPolicyExpectOrderlyRemoval = 2, 04608 RemovalPolicyExpectSurpriseRemoval = 3 04609 } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY; 04610 04611 typedef VOID 04612 (NTAPI *PREENUMERATE_SELF)( 04613 _In_ PVOID Context); 04614 04615 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { 04616 USHORT Size; 04617 USHORT Version; 04618 PVOID Context; 04619 PINTERFACE_REFERENCE InterfaceReference; 04620 PINTERFACE_DEREFERENCE InterfaceDereference; 04621 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf; 04622 } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD; 04623 04624 typedef VOID 04625 (NTAPI *PIO_DEVICE_EJECT_CALLBACK)( 04626 _In_ NTSTATUS Status, 04627 _Inout_opt_ PVOID Context); 04628 04629 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1 04630 04631 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */ 04632 #define PCI_USE_SUBSYSTEM_IDS 0x00000001 04633 #define PCI_USE_REVISION 0x00000002 04634 #define PCI_USE_VENDEV_IDS 0x00000004 04635 #define PCI_USE_CLASS_SUBCLASS 0x00000008 04636 #define PCI_USE_PROGIF 0x00000010 04637 #define PCI_USE_LOCAL_BUS 0x00000020 04638 #define PCI_USE_LOCAL_DEVICE 0x00000040 04639 04640 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { 04641 ULONG Size; 04642 ULONG Flags; 04643 USHORT VendorID; 04644 USHORT DeviceID; 04645 UCHAR RevisionID; 04646 USHORT SubVendorID; 04647 USHORT SubSystemID; 04648 UCHAR BaseClass; 04649 UCHAR SubClass; 04650 UCHAR ProgIf; 04651 } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; 04652 04653 _IRQL_requires_max_(PASSIVE_LEVEL) 04654 _Must_inspect_result_ 04655 typedef BOOLEAN 04656 (NTAPI PCI_IS_DEVICE_PRESENT)( 04657 _In_ USHORT VendorID, 04658 _In_ USHORT DeviceID, 04659 _In_ UCHAR RevisionID, 04660 _In_ USHORT SubVendorID, 04661 _In_ USHORT SubSystemID, 04662 _In_ ULONG Flags); 04663 typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT; 04664 04665 _IRQL_requires_max_(PASSIVE_LEVEL) 04666 _Must_inspect_result_ 04667 typedef BOOLEAN 04668 (NTAPI PCI_IS_DEVICE_PRESENT_EX)( 04669 _In_ PVOID Context, 04670 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); 04671 typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX; 04672 04673 typedef struct _BUS_INTERFACE_STANDARD { 04674 USHORT Size; 04675 USHORT Version; 04676 PVOID Context; 04677 PINTERFACE_REFERENCE InterfaceReference; 04678 PINTERFACE_DEREFERENCE InterfaceDereference; 04679 PTRANSLATE_BUS_ADDRESS TranslateBusAddress; 04680 PGET_DMA_ADAPTER GetDmaAdapter; 04681 PGET_SET_DEVICE_DATA SetBusData; 04682 PGET_SET_DEVICE_DATA GetBusData; 04683 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; 04684 04685 typedef struct _PCI_DEVICE_PRESENT_INTERFACE { 04686 USHORT Size; 04687 USHORT Version; 04688 PVOID Context; 04689 PINTERFACE_REFERENCE InterfaceReference; 04690 PINTERFACE_DEREFERENCE InterfaceDereference; 04691 PPCI_IS_DEVICE_PRESENT IsDevicePresent; 04692 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; 04693 } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; 04694 04695 _Struct_size_bytes_(Size) 04696 typedef struct _DEVICE_CAPABILITIES { 04697 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size; 04698 USHORT Version; 04699 ULONG DeviceD1:1; 04700 ULONG DeviceD2:1; 04701 ULONG LockSupported:1; 04702 ULONG EjectSupported:1; 04703 ULONG Removable:1; 04704 ULONG DockDevice:1; 04705 ULONG UniqueID:1; 04706 ULONG SilentInstall:1; 04707 ULONG RawDeviceOK:1; 04708 ULONG SurpriseRemovalOK:1; 04709 ULONG WakeFromD0:1; 04710 ULONG WakeFromD1:1; 04711 ULONG WakeFromD2:1; 04712 ULONG WakeFromD3:1; 04713 ULONG HardwareDisabled:1; 04714 ULONG NonDynamic:1; 04715 ULONG WarmEjectSupported:1; 04716 ULONG NoDisplayInUI:1; 04717 ULONG Reserved:14; 04718 ULONG Address; 04719 ULONG UINumber; 04720 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 04721 SYSTEM_POWER_STATE SystemWake; 04722 DEVICE_POWER_STATE DeviceWake; 04723 ULONG D1Latency; 04724 ULONG D2Latency; 04725 ULONG D3Latency; 04726 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; 04727 04728 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { 04729 USHORT Version; 04730 USHORT Size; 04731 GUID Event; 04732 GUID InterfaceClassGuid; 04733 PUNICODE_STRING SymbolicLinkName; 04734 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; 04735 04736 typedef struct _HWPROFILE_CHANGE_NOTIFICATION { 04737 USHORT Version; 04738 USHORT Size; 04739 GUID Event; 04740 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; 04741 04742 #undef INTERFACE 04743 04744 typedef struct _INTERFACE { 04745 USHORT Size; 04746 USHORT Version; 04747 PVOID Context; 04748 PINTERFACE_REFERENCE InterfaceReference; 04749 PINTERFACE_DEREFERENCE InterfaceDereference; 04750 } INTERFACE, *PINTERFACE; 04751 04752 typedef struct _PLUGPLAY_NOTIFICATION_HEADER { 04753 USHORT Version; 04754 USHORT Size; 04755 GUID Event; 04756 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; 04757 04758 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; 04759 04760 /* PNP_DEVICE_STATE */ 04761 04762 #define PNP_DEVICE_DISABLED 0x00000001 04763 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 04764 #define PNP_DEVICE_FAILED 0x00000004 04765 #define PNP_DEVICE_REMOVED 0x00000008 04766 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 04767 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 04768 04769 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { 04770 USHORT Version; 04771 USHORT Size; 04772 GUID Event; 04773 struct _FILE_OBJECT *FileObject; 04774 LONG NameBufferOffset; 04775 UCHAR CustomDataBuffer[1]; 04776 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; 04777 04778 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { 04779 USHORT Version; 04780 USHORT Size; 04781 GUID Event; 04782 struct _FILE_OBJECT *FileObject; 04783 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; 04784 04785 #if (NTDDI_VERSION >= NTDDI_VISTA) 04786 #include <devpropdef.h> 04787 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001 04788 #endif 04789 04790 #define PNP_REPLACE_NO_MAP MAXLONGLONG 04791 04792 _Must_inspect_result_ 04793 typedef NTSTATUS 04794 (NTAPI *PREPLACE_MAP_MEMORY)( 04795 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress, 04796 _In_ PHYSICAL_ADDRESS SparePhysicalAddress, 04797 _Inout_ PLARGE_INTEGER NumberOfBytes, 04798 _Outptr_ PVOID *TargetAddress, 04799 _Outptr_ PVOID *SpareAddress); 04800 04801 typedef struct _PNP_REPLACE_MEMORY_LIST { 04802 ULONG AllocatedCount; 04803 ULONG Count; 04804 ULONGLONG TotalLength; 04805 struct { 04806 PHYSICAL_ADDRESS Address; 04807 ULONGLONG Length; 04808 } Ranges[ANYSIZE_ARRAY]; 04809 } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST; 04810 04811 typedef struct _PNP_REPLACE_PROCESSOR_LIST { 04812 PKAFFINITY Affinity; 04813 _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount; 04814 ULONG AllocatedCount; 04815 ULONG Count; 04816 ULONG ApicIds[ANYSIZE_ARRAY]; 04817 } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST; 04818 04819 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 { 04820 KAFFINITY AffinityMask; 04821 ULONG AllocatedCount; 04822 ULONG Count; 04823 ULONG ApicIds[ANYSIZE_ARRAY]; 04824 } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1; 04825 04826 #define PNP_REPLACE_PARAMETERS_VERSION 2 04827 04828 typedef struct _PNP_REPLACE_PARAMETERS { 04829 ULONG Size; 04830 ULONG Version; 04831 ULONG64 Target; 04832 ULONG64 Spare; 04833 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors; 04834 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors; 04835 PPNP_REPLACE_MEMORY_LIST TargetMemory; 04836 PPNP_REPLACE_MEMORY_LIST SpareMemory; 04837 PREPLACE_MAP_MEMORY MapMemory; 04838 } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS; 04839 04840 typedef VOID 04841 (NTAPI *PREPLACE_UNLOAD)( 04842 VOID); 04843 04844 _Must_inspect_result_ 04845 typedef NTSTATUS 04846 (NTAPI *PREPLACE_BEGIN)( 04847 _In_ PPNP_REPLACE_PARAMETERS Parameters, 04848 _Outptr_ PVOID *Context); 04849 04850 _Must_inspect_result_ 04851 typedef NTSTATUS 04852 (NTAPI *PREPLACE_END)( 04853 _In_ PVOID Context); 04854 04855 _Must_inspect_result_ 04856 typedef NTSTATUS 04857 (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( 04858 _In_ PVOID Context, 04859 _In_ PHYSICAL_ADDRESS PhysicalAddress, 04860 _In_ LARGE_INTEGER ByteCount); 04861 04862 _Must_inspect_result_ 04863 typedef NTSTATUS 04864 (NTAPI *PREPLACE_SET_PROCESSOR_ID)( 04865 _In_ PVOID Context, 04866 _In_ ULONG ApicId, 04867 _In_ BOOLEAN Target); 04868 04869 _Must_inspect_result_ 04870 typedef NTSTATUS 04871 (NTAPI *PREPLACE_SWAP)( 04872 _In_ PVOID Context); 04873 04874 _Must_inspect_result_ 04875 typedef NTSTATUS 04876 (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( 04877 _In_ PVOID Context); 04878 04879 _Must_inspect_result_ 04880 typedef NTSTATUS 04881 (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( 04882 _In_ PVOID Context); 04883 04884 _Must_inspect_result_ 04885 typedef NTSTATUS 04886 (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( 04887 _In_ PVOID Context, 04888 _In_ PHYSICAL_ADDRESS SourceAddress, 04889 _Out_ PPHYSICAL_ADDRESS DestinationAddress); 04890 04891 _Must_inspect_result_ 04892 typedef NTSTATUS 04893 (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( 04894 _In_ PVOID Context, 04895 _In_ BOOLEAN Enable); 04896 04897 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1 04898 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \ 04899 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror) 04900 04901 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001 04902 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002 04903 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004 04904 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008 04905 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010 04906 04907 typedef struct _PNP_REPLACE_DRIVER_INTERFACE { 04908 ULONG Size; 04909 ULONG Version; 04910 ULONG Flags; 04911 PREPLACE_UNLOAD Unload; 04912 PREPLACE_BEGIN BeginReplace; 04913 PREPLACE_END EndReplace; 04914 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory; 04915 PREPLACE_SET_PROCESSOR_ID SetProcessorId; 04916 PREPLACE_SWAP Swap; 04917 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror; 04918 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory; 04919 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination; 04920 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce; 04921 } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE; 04922 04923 _Must_inspect_result_ 04924 typedef NTSTATUS 04925 (NTAPI *PREPLACE_DRIVER_INIT)( 04926 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface, 04927 _In_ PVOID Unused); 04928 04929 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { 04930 DeviceUsageTypeUndefined, 04931 DeviceUsageTypePaging, 04932 DeviceUsageTypeHibernation, 04933 DeviceUsageTypeDumpFile 04934 } DEVICE_USAGE_NOTIFICATION_TYPE; 04935 04936 typedef struct _POWER_SEQUENCE { 04937 ULONG SequenceD1; 04938 ULONG SequenceD2; 04939 ULONG SequenceD3; 04940 } POWER_SEQUENCE, *PPOWER_SEQUENCE; 04941 04942 #ifdef _PREFAST_ 04943 #define __string_type 0x1000 04944 #define __guid_type 0x2000 04945 #define __multiString_type 0x4000 04946 #else 04947 #define __string_type 0 04948 #define __guid_type 0 04949 #define __multiString_type 0 04950 #endif 04951 04952 typedef enum { 04953 DevicePropertyDeviceDescription = 0x0 | __string_type, 04954 DevicePropertyHardwareID = 0x1 | __multiString_type, 04955 DevicePropertyCompatibleIDs = 0x2 | __multiString_type, 04956 DevicePropertyBootConfiguration = 0x3, 04957 DevicePropertyBootConfigurationTranslated = 0x4, 04958 DevicePropertyClassName = 0x5 | __string_type, 04959 DevicePropertyClassGuid = 0x6 | __string_type, 04960 DevicePropertyDriverKeyName = 0x7 | __string_type, 04961 DevicePropertyManufacturer = 0x8 | __string_type, 04962 DevicePropertyFriendlyName = 0x9 | __string_type, 04963 DevicePropertyLocationInformation = 0xa | __string_type, 04964 DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type, 04965 DevicePropertyBusTypeGuid = 0xc | __guid_type, 04966 DevicePropertyLegacyBusType = 0xd, 04967 DevicePropertyBusNumber = 0xe, 04968 DevicePropertyEnumeratorName = 0xf | __string_type, 04969 DevicePropertyAddress = 0x10, 04970 DevicePropertyUINumber = 0x11, 04971 DevicePropertyInstallState = 0x12, 04972 DevicePropertyRemovalPolicy = 0x13, 04973 DevicePropertyResourceRequirements = 0x14, 04974 DevicePropertyAllocatedResources = 0x15, 04975 DevicePropertyContainerID = 0x16 | __string_type 04976 } DEVICE_REGISTRY_PROPERTY; 04977 04978 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { 04979 EventCategoryReserved, 04980 EventCategoryHardwareProfileChange, 04981 EventCategoryDeviceInterfaceChange, 04982 EventCategoryTargetDeviceChange 04983 } IO_NOTIFICATION_EVENT_CATEGORY; 04984 04985 typedef enum _IO_PRIORITY_HINT { 04986 IoPriorityVeryLow = 0, 04987 IoPriorityLow, 04988 IoPriorityNormal, 04989 IoPriorityHigh, 04990 IoPriorityCritical, 04991 MaxIoPriorityTypes 04992 } IO_PRIORITY_HINT; 04993 04994 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 04995 04996 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE) 04997 _IRQL_requires_max_(PASSIVE_LEVEL) 04998 typedef NTSTATUS 04999 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( 05000 _In_ PVOID NotificationStructure, 05001 _Inout_opt_ PVOID Context); 05002 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE; 05003 05004 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK) 05005 _IRQL_requires_same_ 05006 typedef VOID 05007 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( 05008 _Inout_opt_ PVOID Context); 05009 typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK; 05010 05011 typedef enum _FILE_INFORMATION_CLASS { 05012 FileDirectoryInformation = 1, 05013 FileFullDirectoryInformation, 05014 FileBothDirectoryInformation, 05015 FileBasicInformation, 05016 FileStandardInformation, 05017 FileInternalInformation, 05018 FileEaInformation, 05019 FileAccessInformation, 05020 FileNameInformation, 05021 FileRenameInformation, 05022 FileLinkInformation, 05023 FileNamesInformation, 05024 FileDispositionInformation, 05025 FilePositionInformation, 05026 FileFullEaInformation, 05027 FileModeInformation, 05028 FileAlignmentInformation, 05029 FileAllInformation, 05030 FileAllocationInformation, 05031 FileEndOfFileInformation, 05032 FileAlternateNameInformation, 05033 FileStreamInformation, 05034 FilePipeInformation, 05035 FilePipeLocalInformation, 05036 FilePipeRemoteInformation, 05037 FileMailslotQueryInformation, 05038 FileMailslotSetInformation, 05039 FileCompressionInformation, 05040 FileObjectIdInformation, 05041 FileCompletionInformation, 05042 FileMoveClusterInformation, 05043 FileQuotaInformation, 05044 FileReparsePointInformation, 05045 FileNetworkOpenInformation, 05046 FileAttributeTagInformation, 05047 FileTrackingInformation, 05048 FileIdBothDirectoryInformation, 05049 FileIdFullDirectoryInformation, 05050 FileValidDataLengthInformation, 05051 FileShortNameInformation, 05052 #if (NTDDI_VERSION >= NTDDI_VISTA) 05053 FileIoCompletionNotificationInformation, 05054 FileIoStatusBlockRangeInformation, 05055 FileIoPriorityHintInformation, 05056 FileSfioReserveInformation, 05057 FileSfioVolumeInformation, 05058 FileHardLinkInformation, 05059 FileProcessIdsUsingFileInformation, 05060 FileNormalizedNameInformation, 05061 FileNetworkPhysicalNameInformation, 05062 #endif 05063 #if (NTDDI_VERSION >= NTDDI_WIN7) 05064 FileIdGlobalTxDirectoryInformation, 05065 FileIsRemoteDeviceInformation, 05066 FileAttributeCacheInformation, 05067 FileNumaNodeInformation, 05068 FileStandardLinkInformation, 05069 FileRemoteProtocolInformation, 05070 #endif 05071 FileMaximumInformation 05072 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; 05073 05074 typedef struct _FILE_POSITION_INFORMATION { 05075 LARGE_INTEGER CurrentByteOffset; 05076 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; 05077 05078 typedef struct _FILE_BASIC_INFORMATION { 05079 LARGE_INTEGER CreationTime; 05080 LARGE_INTEGER LastAccessTime; 05081 LARGE_INTEGER LastWriteTime; 05082 LARGE_INTEGER ChangeTime; 05083 ULONG FileAttributes; 05084 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; 05085 05086 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION { 05087 IO_PRIORITY_HINT PriorityHint; 05088 } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION; 05089 05090 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { 05091 ULONG Flags; 05092 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 05093 05094 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION { 05095 PUCHAR IoStatusBlockRange; 05096 ULONG Length; 05097 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION; 05098 05099 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION { 05100 BOOLEAN IsRemote; 05101 } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION; 05102 05103 typedef struct _FILE_NUMA_NODE_INFORMATION { 05104 USHORT NodeNumber; 05105 } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION; 05106 05107 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION { 05108 ULONG NumberOfProcessIdsInList; 05109 ULONG_PTR ProcessIdList[1]; 05110 } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION; 05111 05112 typedef struct _FILE_STANDARD_INFORMATION { 05113 LARGE_INTEGER AllocationSize; 05114 LARGE_INTEGER EndOfFile; 05115 ULONG NumberOfLinks; 05116 BOOLEAN DeletePending; 05117 BOOLEAN Directory; 05118 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; 05119 05120 typedef struct _FILE_NETWORK_OPEN_INFORMATION { 05121 LARGE_INTEGER CreationTime; 05122 LARGE_INTEGER LastAccessTime; 05123 LARGE_INTEGER LastWriteTime; 05124 LARGE_INTEGER ChangeTime; 05125 LARGE_INTEGER AllocationSize; 05126 LARGE_INTEGER EndOfFile; 05127 ULONG FileAttributes; 05128 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; 05129 05130 typedef enum _FSINFOCLASS { 05131 FileFsVolumeInformation = 1, 05132 FileFsLabelInformation, 05133 FileFsSizeInformation, 05134 FileFsDeviceInformation, 05135 FileFsAttributeInformation, 05136 FileFsControlInformation, 05137 FileFsFullSizeInformation, 05138 FileFsObjectIdInformation, 05139 FileFsDriverPathInformation, 05140 FileFsVolumeFlagsInformation, 05141 FileFsMaximumInformation 05142 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; 05143 05144 typedef struct _FILE_FS_DEVICE_INFORMATION { 05145 DEVICE_TYPE DeviceType; 05146 ULONG Characteristics; 05147 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; 05148 05149 typedef struct _FILE_FULL_EA_INFORMATION { 05150 ULONG NextEntryOffset; 05151 UCHAR Flags; 05152 UCHAR EaNameLength; 05153 USHORT EaValueLength; 05154 CHAR EaName[1]; 05155 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; 05156 05157 typedef struct _FILE_SFIO_RESERVE_INFORMATION { 05158 ULONG RequestsPerPeriod; 05159 ULONG Period; 05160 BOOLEAN RetryFailures; 05161 BOOLEAN Discardable; 05162 ULONG RequestSize; 05163 ULONG NumOutstandingRequests; 05164 } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION; 05165 05166 typedef struct _FILE_SFIO_VOLUME_INFORMATION { 05167 ULONG MaximumRequestsPerPeriod; 05168 ULONG MinimumPeriod; 05169 ULONG MinimumTransferSize; 05170 } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION; 05171 05172 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 05173 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 05174 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 05175 05176 #define FM_LOCK_BIT (0x1) 05177 #define FM_LOCK_BIT_V (0x0) 05178 #define FM_LOCK_WAITER_WOKEN (0x2) 05179 #define FM_LOCK_WAITER_INC (0x4) 05180 05181 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE) 05182 _IRQL_requires_same_ 05183 typedef BOOLEAN 05184 (NTAPI FAST_IO_CHECK_IF_POSSIBLE)( 05185 _In_ struct _FILE_OBJECT *FileObject, 05186 _In_ PLARGE_INTEGER FileOffset, 05187 _In_ ULONG Length, 05188 _In_ BOOLEAN Wait, 05189 _In_ ULONG LockKey, 05190 _In_ BOOLEAN CheckForReadOperation, 05191 _Out_ PIO_STATUS_BLOCK IoStatus, 05192 _In_ struct _DEVICE_OBJECT *DeviceObject); 05193 typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE; 05194 05195 _Function_class_(FAST_IO_READ) 05196 _IRQL_requires_same_ 05197 typedef BOOLEAN 05198 (NTAPI FAST_IO_READ)( 05199 _In_ struct _FILE_OBJECT *FileObject, 05200 _In_ PLARGE_INTEGER FileOffset, 05201 _In_ ULONG Length, 05202 _In_ BOOLEAN Wait, 05203 _In_ ULONG LockKey, 05204 _Out_ PVOID Buffer, 05205 _Out_ PIO_STATUS_BLOCK IoStatus, 05206 _In_ struct _DEVICE_OBJECT *DeviceObject); 05207 typedef FAST_IO_READ *PFAST_IO_READ; 05208 05209 _Function_class_(FAST_IO_WRITE) 05210 _IRQL_requires_same_ 05211 typedef BOOLEAN 05212 (NTAPI FAST_IO_WRITE)( 05213 _In_ struct _FILE_OBJECT *FileObject, 05214 _In_ PLARGE_INTEGER FileOffset, 05215 _In_ ULONG Length, 05216 _In_ BOOLEAN Wait, 05217 _In_ ULONG LockKey, 05218 _In_ PVOID Buffer, 05219 _Out_ PIO_STATUS_BLOCK IoStatus, 05220 _In_ struct _DEVICE_OBJECT *DeviceObject); 05221 typedef FAST_IO_WRITE *PFAST_IO_WRITE; 05222 05223 _Function_class_(FAST_IO_QUERY_BASIC_INFO) 05224 _IRQL_requires_same_ 05225 typedef BOOLEAN 05226 (NTAPI FAST_IO_QUERY_BASIC_INFO)( 05227 _In_ struct _FILE_OBJECT *FileObject, 05228 _In_ BOOLEAN Wait, 05229 _Out_ PFILE_BASIC_INFORMATION Buffer, 05230 _Out_ PIO_STATUS_BLOCK IoStatus, 05231 _In_ struct _DEVICE_OBJECT *DeviceObject); 05232 typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO; 05233 05234 _Function_class_(FAST_IO_QUERY_STANDARD_INFO) 05235 _IRQL_requires_same_ 05236 typedef BOOLEAN 05237 (NTAPI FAST_IO_QUERY_STANDARD_INFO)( 05238 _In_ struct _FILE_OBJECT *FileObject, 05239 _In_ BOOLEAN Wait, 05240 _Out_ PFILE_STANDARD_INFORMATION Buffer, 05241 _Out_ PIO_STATUS_BLOCK IoStatus, 05242 _In_ struct _DEVICE_OBJECT *DeviceObject); 05243 typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO; 05244 05245 _Function_class_(FAST_IO_LOCK) 05246 _IRQL_requires_same_ 05247 typedef BOOLEAN 05248 (NTAPI FAST_IO_LOCK)( 05249 _In_ struct _FILE_OBJECT *FileObject, 05250 _In_ PLARGE_INTEGER FileOffset, 05251 _In_ PLARGE_INTEGER Length, 05252 _In_ PEPROCESS ProcessId, 05253 _In_ ULONG Key, 05254 _In_ BOOLEAN FailImmediately, 05255 _In_ BOOLEAN ExclusiveLock, 05256 _Out_ PIO_STATUS_BLOCK IoStatus, 05257 _In_ struct _DEVICE_OBJECT *DeviceObject); 05258 typedef FAST_IO_LOCK *PFAST_IO_LOCK; 05259 05260 _Function_class_(FAST_IO_UNLOCK_SINGLE) 05261 _IRQL_requires_same_ 05262 typedef BOOLEAN 05263 (NTAPI FAST_IO_UNLOCK_SINGLE)( 05264 _In_ struct _FILE_OBJECT *FileObject, 05265 _In_ PLARGE_INTEGER FileOffset, 05266 _In_ PLARGE_INTEGER Length, 05267 _In_ PEPROCESS ProcessId, 05268 _In_ ULONG Key, 05269 _Out_ PIO_STATUS_BLOCK IoStatus, 05270 _In_ struct _DEVICE_OBJECT *DeviceObject); 05271 typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE; 05272 05273 _Function_class_(FAST_IO_UNLOCK_ALL) 05274 _IRQL_requires_same_ 05275 typedef BOOLEAN 05276 (NTAPI FAST_IO_UNLOCK_ALL)( 05277 _In_ struct _FILE_OBJECT *FileObject, 05278 _In_ PEPROCESS ProcessId, 05279 _Out_ PIO_STATUS_BLOCK IoStatus, 05280 _In_ struct _DEVICE_OBJECT *DeviceObject); 05281 typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL; 05282 05283 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY) 05284 _IRQL_requires_same_ 05285 typedef BOOLEAN 05286 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( 05287 _In_ struct _FILE_OBJECT *FileObject, 05288 _In_ PVOID ProcessId, 05289 _In_ ULONG Key, 05290 _Out_ PIO_STATUS_BLOCK IoStatus, 05291 _In_ struct _DEVICE_OBJECT *DeviceObject); 05292 typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY; 05293 05294 _Function_class_(FAST_IO_DEVICE_CONTROL) 05295 _IRQL_requires_same_ 05296 typedef BOOLEAN 05297 (NTAPI FAST_IO_DEVICE_CONTROL)( 05298 _In_ struct _FILE_OBJECT *FileObject, 05299 _In_ BOOLEAN Wait, 05300 _In_opt_ PVOID InputBuffer, 05301 _In_ ULONG InputBufferLength, 05302 _Out_opt_ PVOID OutputBuffer, 05303 _In_ ULONG OutputBufferLength, 05304 _In_ ULONG IoControlCode, 05305 _Out_ PIO_STATUS_BLOCK IoStatus, 05306 _In_ struct _DEVICE_OBJECT *DeviceObject); 05307 typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL; 05308 05309 _Function_class_(FAST_IO_ACQUIRE_FILE) 05310 _IRQL_requires_same_ 05311 typedef VOID 05312 (NTAPI FAST_IO_ACQUIRE_FILE)( 05313 _In_ struct _FILE_OBJECT *FileObject); 05314 typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE; 05315 05316 _Function_class_(FAST_IO_RELEASE_FILE) 05317 _IRQL_requires_same_ 05318 typedef VOID 05319 (NTAPI FAST_IO_RELEASE_FILE)( 05320 _In_ struct _FILE_OBJECT *FileObject); 05321 typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE; 05322 05323 _Function_class_(FAST_IO_DETACH_DEVICE) 05324 _IRQL_requires_same_ 05325 typedef VOID 05326 (NTAPI FAST_IO_DETACH_DEVICE)( 05327 _In_ struct _DEVICE_OBJECT *SourceDevice, 05328 _In_ struct _DEVICE_OBJECT *TargetDevice); 05329 typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE; 05330 05331 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO) 05332 _IRQL_requires_same_ 05333 typedef BOOLEAN 05334 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( 05335 _In_ struct _FILE_OBJECT *FileObject, 05336 _In_ BOOLEAN Wait, 05337 _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, 05338 _Out_ struct _IO_STATUS_BLOCK *IoStatus, 05339 _In_ struct _DEVICE_OBJECT *DeviceObject); 05340 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO; 05341 05342 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE) 05343 _IRQL_requires_same_ 05344 typedef NTSTATUS 05345 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( 05346 _In_ struct _FILE_OBJECT *FileObject, 05347 _In_ PLARGE_INTEGER EndingOffset, 05348 _Out_ struct _ERESOURCE **ResourceToRelease, 05349 _In_ struct _DEVICE_OBJECT *DeviceObject); 05350 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE; 05351 05352 _Function_class_(FAST_IO_MDL_READ) 05353 _IRQL_requires_same_ 05354 typedef BOOLEAN 05355 (NTAPI FAST_IO_MDL_READ)( 05356 _In_ struct _FILE_OBJECT *FileObject, 05357 _In_ PLARGE_INTEGER FileOffset, 05358 _In_ ULONG Length, 05359 _In_ ULONG LockKey, 05360 _Out_ PMDL *MdlChain, 05361 _Out_ PIO_STATUS_BLOCK IoStatus, 05362 _In_ struct _DEVICE_OBJECT *DeviceObject); 05363 typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ; 05364 05365 _Function_class_(FAST_IO_MDL_READ_COMPLETE) 05366 _IRQL_requires_same_ 05367 typedef BOOLEAN 05368 (NTAPI FAST_IO_MDL_READ_COMPLETE)( 05369 _In_ struct _FILE_OBJECT *FileObject, 05370 _In_ PMDL MdlChain, 05371 _In_ struct _DEVICE_OBJECT *DeviceObject); 05372 typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE; 05373 05374 _Function_class_(FAST_IO_PREPARE_MDL_WRITE) 05375 _IRQL_requires_same_ 05376 typedef BOOLEAN 05377 (NTAPI FAST_IO_PREPARE_MDL_WRITE)( 05378 _In_ struct _FILE_OBJECT *FileObject, 05379 _In_ PLARGE_INTEGER FileOffset, 05380 _In_ ULONG Length, 05381 _In_ ULONG LockKey, 05382 _Out_ PMDL *MdlChain, 05383 _Out_ PIO_STATUS_BLOCK IoStatus, 05384 _In_ struct _DEVICE_OBJECT *DeviceObject); 05385 typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE; 05386 05387 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE) 05388 _IRQL_requires_same_ 05389 typedef BOOLEAN 05390 (NTAPI FAST_IO_MDL_WRITE_COMPLETE)( 05391 _In_ struct _FILE_OBJECT *FileObject, 05392 _In_ PLARGE_INTEGER FileOffset, 05393 _In_ PMDL MdlChain, 05394 _In_ struct _DEVICE_OBJECT *DeviceObject); 05395 typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE; 05396 05397 _Function_class_(FAST_IO_READ_COMPRESSED) 05398 _IRQL_requires_same_ 05399 typedef BOOLEAN 05400 (NTAPI FAST_IO_READ_COMPRESSED)( 05401 _In_ struct _FILE_OBJECT *FileObject, 05402 _In_ PLARGE_INTEGER FileOffset, 05403 _In_ ULONG Length, 05404 _In_ ULONG LockKey, 05405 _Out_ PVOID Buffer, 05406 _Out_ PMDL *MdlChain, 05407 _Out_ PIO_STATUS_BLOCK IoStatus, 05408 _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 05409 _In_ ULONG CompressedDataInfoLength, 05410 _In_ struct _DEVICE_OBJECT *DeviceObject); 05411 typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED; 05412 05413 _Function_class_(FAST_IO_WRITE_COMPRESSED) 05414 _IRQL_requires_same_ 05415 typedef BOOLEAN 05416 (NTAPI FAST_IO_WRITE_COMPRESSED)( 05417 _In_ struct _FILE_OBJECT *FileObject, 05418 _In_ PLARGE_INTEGER FileOffset, 05419 _In_ ULONG Length, 05420 _In_ ULONG LockKey, 05421 _In_ PVOID Buffer, 05422 _Out_ PMDL *MdlChain, 05423 _Out_ PIO_STATUS_BLOCK IoStatus, 05424 _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 05425 _In_ ULONG CompressedDataInfoLength, 05426 _In_ struct _DEVICE_OBJECT *DeviceObject); 05427 typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED; 05428 05429 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED) 05430 _IRQL_requires_same_ 05431 typedef BOOLEAN 05432 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( 05433 _In_ struct _FILE_OBJECT *FileObject, 05434 _In_ PMDL MdlChain, 05435 _In_ struct _DEVICE_OBJECT *DeviceObject); 05436 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED; 05437 05438 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED) 05439 _IRQL_requires_same_ 05440 typedef BOOLEAN 05441 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( 05442 _In_ struct _FILE_OBJECT *FileObject, 05443 _In_ PLARGE_INTEGER FileOffset, 05444 _In_ PMDL MdlChain, 05445 _In_ struct _DEVICE_OBJECT *DeviceObject); 05446 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED; 05447 05448 _Function_class_(FAST_IO_QUERY_OPEN) 05449 _IRQL_requires_same_ 05450 typedef BOOLEAN 05451 (NTAPI FAST_IO_QUERY_OPEN)( 05452 _Inout_ struct _IRP *Irp, 05453 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, 05454 _In_ struct _DEVICE_OBJECT *DeviceObject); 05455 typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN; 05456 05457 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE) 05458 _IRQL_requires_same_ 05459 typedef NTSTATUS 05460 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( 05461 _In_ struct _FILE_OBJECT *FileObject, 05462 _In_ struct _ERESOURCE *ResourceToRelease, 05463 _In_ struct _DEVICE_OBJECT *DeviceObject); 05464 typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE; 05465 05466 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH) 05467 _IRQL_requires_same_ 05468 typedef NTSTATUS 05469 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( 05470 _In_ struct _FILE_OBJECT *FileObject, 05471 _In_ struct _DEVICE_OBJECT *DeviceObject); 05472 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH; 05473 05474 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH) 05475 _IRQL_requires_same_ 05476 typedef NTSTATUS 05477 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( 05478 _In_ struct _FILE_OBJECT *FileObject, 05479 _In_ struct _DEVICE_OBJECT *DeviceObject); 05480 typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH; 05481 05482 typedef struct _FAST_IO_DISPATCH { 05483 ULONG SizeOfFastIoDispatch; 05484 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; 05485 PFAST_IO_READ FastIoRead; 05486 PFAST_IO_WRITE FastIoWrite; 05487 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; 05488 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; 05489 PFAST_IO_LOCK FastIoLock; 05490 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; 05491 PFAST_IO_UNLOCK_ALL FastIoUnlockAll; 05492 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; 05493 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; 05494 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; 05495 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; 05496 PFAST_IO_DETACH_DEVICE FastIoDetachDevice; 05497 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; 05498 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; 05499 PFAST_IO_MDL_READ MdlRead; 05500 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; 05501 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; 05502 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; 05503 PFAST_IO_READ_COMPRESSED FastIoReadCompressed; 05504 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; 05505 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; 05506 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; 05507 PFAST_IO_QUERY_OPEN FastIoQueryOpen; 05508 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; 05509 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; 05510 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; 05511 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; 05512 05513 typedef struct _SECTION_OBJECT_POINTERS { 05514 PVOID DataSectionObject; 05515 PVOID SharedCacheMap; 05516 PVOID ImageSectionObject; 05517 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; 05518 05519 typedef struct _IO_COMPLETION_CONTEXT { 05520 PVOID Port; 05521 PVOID Key; 05522 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; 05523 05524 /* FILE_OBJECT.Flags */ 05525 #define FO_FILE_OPEN 0x00000001 05526 #define FO_SYNCHRONOUS_IO 0x00000002 05527 #define FO_ALERTABLE_IO 0x00000004 05528 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 05529 #define FO_WRITE_THROUGH 0x00000010 05530 #define FO_SEQUENTIAL_ONLY 0x00000020 05531 #define FO_CACHE_SUPPORTED 0x00000040 05532 #define FO_NAMED_PIPE 0x00000080 05533 #define FO_STREAM_FILE 0x00000100 05534 #define FO_MAILSLOT 0x00000200 05535 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 05536 #define FO_QUEUE_IRP_TO_THREAD 0x00000400 05537 #define FO_DIRECT_DEVICE_OPEN 0x00000800 05538 #define FO_FILE_MODIFIED 0x00001000 05539 #define FO_FILE_SIZE_CHANGED 0x00002000 05540 #define FO_CLEANUP_COMPLETE 0x00004000 05541 #define FO_TEMPORARY_FILE 0x00008000 05542 #define FO_DELETE_ON_CLOSE 0x00010000 05543 #define FO_OPENED_CASE_SENSITIVE 0x00020000 05544 #define FO_HANDLE_CREATED 0x00040000 05545 #define FO_FILE_FAST_IO_READ 0x00080000 05546 #define FO_RANDOM_ACCESS 0x00100000 05547 #define FO_FILE_OPEN_CANCELLED 0x00200000 05548 #define FO_VOLUME_OPEN 0x00400000 05549 #define FO_REMOTE_ORIGIN 0x01000000 05550 #define FO_DISALLOW_EXCLUSIVE 0x02000000 05551 #define FO_SKIP_COMPLETION_PORT 0x02000000 05552 #define FO_SKIP_SET_EVENT 0x04000000 05553 #define FO_SKIP_SET_FAST_IO 0x08000000 05554 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE 05555 05556 /* VPB.Flags */ 05557 #define VPB_MOUNTED 0x0001 05558 #define VPB_LOCKED 0x0002 05559 #define VPB_PERSISTENT 0x0004 05560 #define VPB_REMOVE_PENDING 0x0008 05561 #define VPB_RAW_MOUNT 0x0010 05562 #define VPB_DIRECT_WRITES_ALLOWED 0x0020 05563 05564 /* IRP.Flags */ 05565 05566 #define SL_FORCE_ACCESS_CHECK 0x01 05567 #define SL_OPEN_PAGING_FILE 0x02 05568 #define SL_OPEN_TARGET_DIRECTORY 0x04 05569 #define SL_STOP_ON_SYMLINK 0x08 05570 #define SL_CASE_SENSITIVE 0x80 05571 05572 #define SL_KEY_SPECIFIED 0x01 05573 #define SL_OVERRIDE_VERIFY_VOLUME 0x02 05574 #define SL_WRITE_THROUGH 0x04 05575 #define SL_FT_SEQUENTIAL_WRITE 0x08 05576 #define SL_FORCE_DIRECT_WRITE 0x10 05577 #define SL_REALTIME_STREAM 0x20 05578 05579 #define SL_READ_ACCESS_GRANTED 0x01 05580 #define SL_WRITE_ACCESS_GRANTED 0x04 05581 05582 #define SL_FAIL_IMMEDIATELY 0x01 05583 #define SL_EXCLUSIVE_LOCK 0x02 05584 05585 #define SL_RESTART_SCAN 0x01 05586 #define SL_RETURN_SINGLE_ENTRY 0x02 05587 #define SL_INDEX_SPECIFIED 0x04 05588 05589 #define SL_WATCH_TREE 0x01 05590 05591 #define SL_ALLOW_RAW_MOUNT 0x01 05592 05593 #define CTL_CODE(DeviceType, Function, Method, Access) \ 05594 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 05595 05596 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) 05597 05598 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) 05599 05600 #define IRP_NOCACHE 0x00000001 05601 #define IRP_PAGING_IO 0x00000002 05602 #define IRP_MOUNT_COMPLETION 0x00000002 05603 #define IRP_SYNCHRONOUS_API 0x00000004 05604 #define IRP_ASSOCIATED_IRP 0x00000008 05605 #define IRP_BUFFERED_IO 0x00000010 05606 #define IRP_DEALLOCATE_BUFFER 0x00000020 05607 #define IRP_INPUT_OPERATION 0x00000040 05608 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040 05609 #define IRP_CREATE_OPERATION 0x00000080 05610 #define IRP_READ_OPERATION 0x00000100 05611 #define IRP_WRITE_OPERATION 0x00000200 05612 #define IRP_CLOSE_OPERATION 0x00000400 05613 #define IRP_DEFER_IO_COMPLETION 0x00000800 05614 #define IRP_OB_QUERY_NAME 0x00001000 05615 #define IRP_HOLD_DEVICE_QUEUE 0x00002000 05616 /* The following 2 are missing in latest WDK */ 05617 #define IRP_RETRY_IO_COMPLETION 0x00004000 05618 #define IRP_CLASS_CACHE_OPERATION 0x00008000 05619 05620 #define IRP_QUOTA_CHARGED 0x01 05621 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 05622 #define IRP_ALLOCATED_FIXED_SIZE 0x04 05623 #define IRP_LOOKASIDE_ALLOCATION 0x08 05624 05625 /* 05626 ** IRP function codes 05627 */ 05628 05629 #define IRP_MJ_CREATE 0x00 05630 #define IRP_MJ_CREATE_NAMED_PIPE 0x01 05631 #define IRP_MJ_CLOSE 0x02 05632 #define IRP_MJ_READ 0x03 05633 #define IRP_MJ_WRITE 0x04 05634 #define IRP_MJ_QUERY_INFORMATION 0x05 05635 #define IRP_MJ_SET_INFORMATION 0x06 05636 #define IRP_MJ_QUERY_EA 0x07 05637 #define IRP_MJ_SET_EA 0x08 05638 #define IRP_MJ_FLUSH_BUFFERS 0x09 05639 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a 05640 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b 05641 #define IRP_MJ_DIRECTORY_CONTROL 0x0c 05642 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d 05643 #define IRP_MJ_DEVICE_CONTROL 0x0e 05644 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f 05645 #define IRP_MJ_SCSI 0x0f 05646 #define IRP_MJ_SHUTDOWN 0x10 05647 #define IRP_MJ_LOCK_CONTROL 0x11 05648 #define IRP_MJ_CLEANUP 0x12 05649 #define IRP_MJ_CREATE_MAILSLOT 0x13 05650 #define IRP_MJ_QUERY_SECURITY 0x14 05651 #define IRP_MJ_SET_SECURITY 0x15 05652 #define IRP_MJ_POWER 0x16 05653 #define IRP_MJ_SYSTEM_CONTROL 0x17 05654 #define IRP_MJ_DEVICE_CHANGE 0x18 05655 #define IRP_MJ_QUERY_QUOTA 0x19 05656 #define IRP_MJ_SET_QUOTA 0x1a 05657 #define IRP_MJ_PNP 0x1b 05658 #define IRP_MJ_PNP_POWER 0x1b 05659 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b 05660 05661 #define IRP_MN_SCSI_CLASS 0x01 05662 05663 #define IRP_MN_START_DEVICE 0x00 05664 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 05665 #define IRP_MN_REMOVE_DEVICE 0x02 05666 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 05667 #define IRP_MN_STOP_DEVICE 0x04 05668 #define IRP_MN_QUERY_STOP_DEVICE 0x05 05669 #define IRP_MN_CANCEL_STOP_DEVICE 0x06 05670 05671 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 05672 #define IRP_MN_QUERY_INTERFACE 0x08 05673 #define IRP_MN_QUERY_CAPABILITIES 0x09 05674 #define IRP_MN_QUERY_RESOURCES 0x0A 05675 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B 05676 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C 05677 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D 05678 05679 #define IRP_MN_READ_CONFIG 0x0F 05680 #define IRP_MN_WRITE_CONFIG 0x10 05681 #define IRP_MN_EJECT 0x11 05682 #define IRP_MN_SET_LOCK 0x12 05683 #define IRP_MN_QUERY_ID 0x13 05684 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 05685 #define IRP_MN_QUERY_BUS_INFORMATION 0x15 05686 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 05687 #define IRP_MN_SURPRISE_REMOVAL 0x17 05688 #if (NTDDI_VERSION >= NTDDI_WIN7) 05689 #define IRP_MN_DEVICE_ENUMERATED 0x19 05690 #endif 05691 05692 #define IRP_MN_WAIT_WAKE 0x00 05693 #define IRP_MN_POWER_SEQUENCE 0x01 05694 #define IRP_MN_SET_POWER 0x02 05695 #define IRP_MN_QUERY_POWER 0x03 05696 05697 #define IRP_MN_QUERY_ALL_DATA 0x00 05698 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 05699 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 05700 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 05701 #define IRP_MN_ENABLE_EVENTS 0x04 05702 #define IRP_MN_DISABLE_EVENTS 0x05 05703 #define IRP_MN_ENABLE_COLLECTION 0x06 05704 #define IRP_MN_DISABLE_COLLECTION 0x07 05705 #define IRP_MN_REGINFO 0x08 05706 #define IRP_MN_EXECUTE_METHOD 0x09 05707 05708 #define IRP_MN_REGINFO_EX 0x0b 05709 05710 typedef struct _FILE_OBJECT { 05711 CSHORT Type; 05712 CSHORT Size; 05713 PDEVICE_OBJECT DeviceObject; 05714 PVPB Vpb; 05715 PVOID FsContext; 05716 PVOID FsContext2; 05717 PSECTION_OBJECT_POINTERS SectionObjectPointer; 05718 PVOID PrivateCacheMap; 05719 NTSTATUS FinalStatus; 05720 struct _FILE_OBJECT *RelatedFileObject; 05721 BOOLEAN LockOperation; 05722 BOOLEAN DeletePending; 05723 BOOLEAN ReadAccess; 05724 BOOLEAN WriteAccess; 05725 BOOLEAN DeleteAccess; 05726 BOOLEAN SharedRead; 05727 BOOLEAN SharedWrite; 05728 BOOLEAN SharedDelete; 05729 ULONG Flags; 05730 UNICODE_STRING FileName; 05731 LARGE_INTEGER CurrentByteOffset; 05732 volatile ULONG Waiters; 05733 volatile ULONG Busy; 05734 PVOID LastLock; 05735 KEVENT Lock; 05736 KEVENT Event; 05737 volatile PIO_COMPLETION_CONTEXT CompletionContext; 05738 KSPIN_LOCK IrpListLock; 05739 LIST_ENTRY IrpList; 05740 volatile PVOID FileObjectExtension; 05741 } FILE_OBJECT, *PFILE_OBJECT; 05742 05743 typedef struct _IO_ERROR_LOG_PACKET { 05744 UCHAR MajorFunctionCode; 05745 UCHAR RetryCount; 05746 USHORT DumpDataSize; 05747 USHORT NumberOfStrings; 05748 USHORT StringOffset; 05749 USHORT EventCategory; 05750 NTSTATUS ErrorCode; 05751 ULONG UniqueErrorValue; 05752 NTSTATUS FinalStatus; 05753 ULONG SequenceNumber; 05754 ULONG IoControlCode; 05755 LARGE_INTEGER DeviceOffset; 05756 ULONG DumpData[1]; 05757 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; 05758 05759 typedef struct _IO_ERROR_LOG_MESSAGE { 05760 USHORT Type; 05761 USHORT Size; 05762 USHORT DriverNameLength; 05763 LARGE_INTEGER TimeStamp; 05764 ULONG DriverNameOffset; 05765 IO_ERROR_LOG_PACKET EntryData; 05766 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; 05767 05768 #define ERROR_LOG_LIMIT_SIZE 240 05769 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \ 05770 sizeof(IO_ERROR_LOG_PACKET) + \ 05771 (sizeof(WCHAR) * 40)) 05772 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \ 05773 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) 05774 #define IO_ERROR_LOG_MESSAGE_LENGTH \ 05775 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \ 05776 ERROR_LOG_MESSAGE_LIMIT_SIZE : \ 05777 PORT_MAXIMUM_MESSAGE_LENGTH) 05778 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ 05779 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) 05780 05781 #ifdef _WIN64 05782 #define PORT_MAXIMUM_MESSAGE_LENGTH 512 05783 #else 05784 #define PORT_MAXIMUM_MESSAGE_LENGTH 256 05785 #endif 05786 05787 typedef enum _DMA_WIDTH { 05788 Width8Bits, 05789 Width16Bits, 05790 Width32Bits, 05791 MaximumDmaWidth 05792 } DMA_WIDTH, *PDMA_WIDTH; 05793 05794 typedef enum _DMA_SPEED { 05795 Compatible, 05796 TypeA, 05797 TypeB, 05798 TypeC, 05799 TypeF, 05800 MaximumDmaSpeed 05801 } DMA_SPEED, *PDMA_SPEED; 05802 05803 /* DEVICE_DESCRIPTION.Version */ 05804 05805 #define DEVICE_DESCRIPTION_VERSION 0x0000 05806 #define DEVICE_DESCRIPTION_VERSION1 0x0001 05807 #define DEVICE_DESCRIPTION_VERSION2 0x0002 05808 05809 typedef struct _DEVICE_DESCRIPTION { 05810 ULONG Version; 05811 BOOLEAN Master; 05812 BOOLEAN ScatterGather; 05813 BOOLEAN DemandMode; 05814 BOOLEAN AutoInitialize; 05815 BOOLEAN Dma32BitAddresses; 05816 BOOLEAN IgnoreCount; 05817 BOOLEAN Reserved1; 05818 BOOLEAN Dma64BitAddresses; 05819 ULONG BusNumber; 05820 ULONG DmaChannel; 05821 INTERFACE_TYPE InterfaceType; 05822 DMA_WIDTH DmaWidth; 05823 DMA_SPEED DmaSpeed; 05824 ULONG MaximumLength; 05825 ULONG DmaPort; 05826 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; 05827 05828 typedef enum _DEVICE_RELATION_TYPE { 05829 BusRelations, 05830 EjectionRelations, 05831 PowerRelations, 05832 RemovalRelations, 05833 TargetDeviceRelation, 05834 SingleBusRelations, 05835 TransportRelations 05836 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; 05837 05838 typedef struct _DEVICE_RELATIONS { 05839 ULONG Count; 05840 PDEVICE_OBJECT Objects[1]; 05841 } DEVICE_RELATIONS, *PDEVICE_RELATIONS; 05842 05843 typedef struct _DEVOBJ_EXTENSION { 05844 CSHORT Type; 05845 USHORT Size; 05846 PDEVICE_OBJECT DeviceObject; 05847 } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; 05848 05849 typedef struct _SCATTER_GATHER_ELEMENT { 05850 PHYSICAL_ADDRESS Address; 05851 ULONG Length; 05852 ULONG_PTR Reserved; 05853 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; 05854 05855 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__) 05856 05857 #if defined(_MSC_VER) 05858 #if _MSC_VER >= 1200 05859 #pragma warning(push) 05860 #endif 05861 #pragma warning(disable:4200) 05862 #endif /* _MSC_VER */ 05863 05864 typedef struct _SCATTER_GATHER_LIST { 05865 ULONG NumberOfElements; 05866 ULONG_PTR Reserved; 05867 SCATTER_GATHER_ELEMENT Elements[1]; 05868 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; 05869 05870 #if defined(_MSC_VER) 05871 #if _MSC_VER >= 1200 05872 #pragma warning(pop) 05873 #else 05874 #pragma warning(default:4200) 05875 #endif 05876 #endif /* _MSC_VER */ 05877 05878 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ 05879 05880 struct _SCATTER_GATHER_LIST; 05881 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; 05882 05883 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ 05884 05885 _Function_class_(DRIVER_ADD_DEVICE) 05886 _IRQL_requires_(PASSIVE_LEVEL) 05887 _IRQL_requires_same_ 05888 _When_(return>=0, _Kernel_clear_do_init_(__yes)) 05889 typedef NTSTATUS 05890 (NTAPI DRIVER_ADD_DEVICE)( 05891 _In_ struct _DRIVER_OBJECT *DriverObject, 05892 _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject); 05893 typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; 05894 05895 typedef struct _DRIVER_EXTENSION { 05896 struct _DRIVER_OBJECT *DriverObject; 05897 PDRIVER_ADD_DEVICE AddDevice; 05898 ULONG Count; 05899 UNICODE_STRING ServiceKeyName; 05900 } DRIVER_EXTENSION, *PDRIVER_EXTENSION; 05901 05902 #define DRVO_UNLOAD_INVOKED 0x00000001 05903 #define DRVO_LEGACY_DRIVER 0x00000002 05904 #define DRVO_BUILTIN_DRIVER 0x00000004 05905 05906 _Function_class_(DRIVER_INITIALIZE) 05907 _IRQL_requires_same_ 05908 typedef NTSTATUS 05909 (NTAPI DRIVER_INITIALIZE)( 05910 _In_ struct _DRIVER_OBJECT *DriverObject, 05911 _In_ PUNICODE_STRING RegistryPath); 05912 typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; 05913 05914 _Function_class_(DRIVER_STARTIO) 05915 _IRQL_always_function_min_(DISPATCH_LEVEL) 05916 _IRQL_requires_(DISPATCH_LEVEL) 05917 _IRQL_requires_same_ 05918 typedef VOID 05919 (NTAPI DRIVER_STARTIO)( 05920 _Inout_ struct _DEVICE_OBJECT *DeviceObject, 05921 _Inout_ struct _IRP *Irp); 05922 typedef DRIVER_STARTIO *PDRIVER_STARTIO; 05923 05924 _Function_class_(DRIVER_UNLOAD) 05925 _IRQL_requires_(PASSIVE_LEVEL) 05926 _IRQL_requires_same_ 05927 typedef VOID 05928 (NTAPI DRIVER_UNLOAD)( 05929 _In_ struct _DRIVER_OBJECT *DriverObject); 05930 typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; 05931 05932 _Function_class_(DRIVER_DISPATCH) 05933 _IRQL_requires_(PASSIVE_LEVEL) 05934 _IRQL_requires_same_ 05935 typedef NTSTATUS 05936 (NTAPI DRIVER_DISPATCH)( 05937 _In_ struct _DEVICE_OBJECT *DeviceObject, 05938 _Inout_ struct _IRP *Irp); 05939 typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; 05940 05941 typedef struct _DRIVER_OBJECT { 05942 CSHORT Type; 05943 CSHORT Size; 05944 PDEVICE_OBJECT DeviceObject; 05945 ULONG Flags; 05946 PVOID DriverStart; 05947 ULONG DriverSize; 05948 PVOID DriverSection; 05949 PDRIVER_EXTENSION DriverExtension; 05950 UNICODE_STRING DriverName; 05951 PUNICODE_STRING HardwareDatabase; 05952 struct _FAST_IO_DISPATCH *FastIoDispatch; 05953 PDRIVER_INITIALIZE DriverInit; 05954 PDRIVER_STARTIO DriverStartIo; 05955 PDRIVER_UNLOAD DriverUnload; 05956 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; 05957 } DRIVER_OBJECT, *PDRIVER_OBJECT; 05958 05959 typedef struct _DMA_ADAPTER { 05960 USHORT Version; 05961 USHORT Size; 05962 struct _DMA_OPERATIONS* DmaOperations; 05963 } DMA_ADAPTER, *PDMA_ADAPTER; 05964 05965 typedef VOID 05966 (NTAPI *PPUT_DMA_ADAPTER)( 05967 PDMA_ADAPTER DmaAdapter); 05968 05969 typedef PVOID 05970 (NTAPI *PALLOCATE_COMMON_BUFFER)( 05971 _In_ PDMA_ADAPTER DmaAdapter, 05972 _In_ ULONG Length, 05973 _Out_ PPHYSICAL_ADDRESS LogicalAddress, 05974 _In_ BOOLEAN CacheEnabled); 05975 05976 typedef VOID 05977 (NTAPI *PFREE_COMMON_BUFFER)( 05978 _In_ PDMA_ADAPTER DmaAdapter, 05979 _In_ ULONG Length, 05980 _In_ PHYSICAL_ADDRESS LogicalAddress, 05981 _In_ PVOID VirtualAddress, 05982 _In_ BOOLEAN CacheEnabled); 05983 05984 typedef NTSTATUS 05985 (NTAPI *PALLOCATE_ADAPTER_CHANNEL)( 05986 _In_ PDMA_ADAPTER DmaAdapter, 05987 _In_ PDEVICE_OBJECT DeviceObject, 05988 _In_ ULONG NumberOfMapRegisters, 05989 _In_ PDRIVER_CONTROL ExecutionRoutine, 05990 _In_ PVOID Context); 05991 05992 typedef BOOLEAN 05993 (NTAPI *PFLUSH_ADAPTER_BUFFERS)( 05994 _In_ PDMA_ADAPTER DmaAdapter, 05995 _In_ PMDL Mdl, 05996 _In_ PVOID MapRegisterBase, 05997 _In_ PVOID CurrentVa, 05998 _In_ ULONG Length, 05999 _In_ BOOLEAN WriteToDevice); 06000 06001 typedef VOID 06002 (NTAPI *PFREE_ADAPTER_CHANNEL)( 06003 _In_ PDMA_ADAPTER DmaAdapter); 06004 06005 typedef VOID 06006 (NTAPI *PFREE_MAP_REGISTERS)( 06007 _In_ PDMA_ADAPTER DmaAdapter, 06008 PVOID MapRegisterBase, 06009 ULONG NumberOfMapRegisters); 06010 06011 typedef PHYSICAL_ADDRESS 06012 (NTAPI *PMAP_TRANSFER)( 06013 _In_ PDMA_ADAPTER DmaAdapter, 06014 _In_ PMDL Mdl, 06015 _In_ PVOID MapRegisterBase, 06016 _In_ PVOID CurrentVa, 06017 _Inout_ PULONG Length, 06018 _In_ BOOLEAN WriteToDevice); 06019 06020 typedef ULONG 06021 (NTAPI *PGET_DMA_ALIGNMENT)( 06022 _In_ PDMA_ADAPTER DmaAdapter); 06023 06024 typedef ULONG 06025 (NTAPI *PREAD_DMA_COUNTER)( 06026 _In_ PDMA_ADAPTER DmaAdapter); 06027 06028 _Function_class_(DRIVER_LIST_CONTROL) 06029 _IRQL_requires_same_ 06030 typedef VOID 06031 (NTAPI DRIVER_LIST_CONTROL)( 06032 _In_ struct _DEVICE_OBJECT *DeviceObject, 06033 _In_ struct _IRP *Irp, 06034 _In_ struct _SCATTER_GATHER_LIST *ScatterGather, 06035 _In_ PVOID Context); 06036 typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL; 06037 06038 typedef NTSTATUS 06039 (NTAPI *PGET_SCATTER_GATHER_LIST)( 06040 _In_ PDMA_ADAPTER DmaAdapter, 06041 _In_ PDEVICE_OBJECT DeviceObject, 06042 _In_ PMDL Mdl, 06043 _In_ PVOID CurrentVa, 06044 _In_ ULONG Length, 06045 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, 06046 _In_ PVOID Context, 06047 _In_ BOOLEAN WriteToDevice); 06048 06049 typedef VOID 06050 (NTAPI *PPUT_SCATTER_GATHER_LIST)( 06051 _In_ PDMA_ADAPTER DmaAdapter, 06052 _In_ PSCATTER_GATHER_LIST ScatterGather, 06053 _In_ BOOLEAN WriteToDevice); 06054 06055 typedef NTSTATUS 06056 (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( 06057 _In_ PDMA_ADAPTER DmaAdapter, 06058 _In_ PMDL Mdl OPTIONAL, 06059 _In_ PVOID CurrentVa, 06060 _In_ ULONG Length, 06061 _Out_ PULONG ScatterGatherListSize, 06062 _Out_ OPTIONAL PULONG pNumberOfMapRegisters); 06063 06064 typedef NTSTATUS 06065 (NTAPI *PBUILD_SCATTER_GATHER_LIST)( 06066 _In_ PDMA_ADAPTER DmaAdapter, 06067 _In_ PDEVICE_OBJECT DeviceObject, 06068 _In_ PMDL Mdl, 06069 _In_ PVOID CurrentVa, 06070 _In_ ULONG Length, 06071 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, 06072 _In_ PVOID Context, 06073 _In_ BOOLEAN WriteToDevice, 06074 _In_ PVOID ScatterGatherBuffer, 06075 _In_ ULONG ScatterGatherLength); 06076 06077 typedef NTSTATUS 06078 (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( 06079 _In_ PDMA_ADAPTER DmaAdapter, 06080 _In_ PSCATTER_GATHER_LIST ScatterGather, 06081 _In_ PMDL OriginalMdl, 06082 _Out_ PMDL *TargetMdl); 06083 06084 typedef struct _DMA_OPERATIONS { 06085 ULONG Size; 06086 PPUT_DMA_ADAPTER PutDmaAdapter; 06087 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; 06088 PFREE_COMMON_BUFFER FreeCommonBuffer; 06089 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; 06090 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; 06091 PFREE_ADAPTER_CHANNEL FreeAdapterChannel; 06092 PFREE_MAP_REGISTERS FreeMapRegisters; 06093 PMAP_TRANSFER MapTransfer; 06094 PGET_DMA_ALIGNMENT GetDmaAlignment; 06095 PREAD_DMA_COUNTER ReadDmaCounter; 06096 PGET_SCATTER_GATHER_LIST GetScatterGatherList; 06097 PPUT_SCATTER_GATHER_LIST PutScatterGatherList; 06098 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; 06099 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; 06100 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; 06101 } DMA_OPERATIONS, *PDMA_OPERATIONS; 06102 06103 typedef struct _IO_RESOURCE_DESCRIPTOR { 06104 UCHAR Option; 06105 UCHAR Type; 06106 UCHAR ShareDisposition; 06107 UCHAR Spare1; 06108 USHORT Flags; 06109 USHORT Spare2; 06110 union { 06111 struct { 06112 ULONG Length; 06113 ULONG Alignment; 06114 PHYSICAL_ADDRESS MinimumAddress; 06115 PHYSICAL_ADDRESS MaximumAddress; 06116 } Port; 06117 struct { 06118 ULONG Length; 06119 ULONG Alignment; 06120 PHYSICAL_ADDRESS MinimumAddress; 06121 PHYSICAL_ADDRESS MaximumAddress; 06122 } Memory; 06123 struct { 06124 ULONG MinimumVector; 06125 ULONG MaximumVector; 06126 } Interrupt; 06127 struct { 06128 ULONG MinimumChannel; 06129 ULONG MaximumChannel; 06130 } Dma; 06131 struct { 06132 ULONG Length; 06133 ULONG Alignment; 06134 PHYSICAL_ADDRESS MinimumAddress; 06135 PHYSICAL_ADDRESS MaximumAddress; 06136 } Generic; 06137 struct { 06138 ULONG Data[3]; 06139 } DevicePrivate; 06140 struct { 06141 ULONG Length; 06142 ULONG MinBusNumber; 06143 ULONG MaxBusNumber; 06144 ULONG Reserved; 06145 } BusNumber; 06146 struct { 06147 ULONG Priority; 06148 ULONG Reserved1; 06149 ULONG Reserved2; 06150 } ConfigData; 06151 } u; 06152 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; 06153 06154 typedef struct _IO_RESOURCE_LIST { 06155 USHORT Version; 06156 USHORT Revision; 06157 ULONG Count; 06158 IO_RESOURCE_DESCRIPTOR Descriptors[1]; 06159 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; 06160 06161 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { 06162 ULONG ListSize; 06163 INTERFACE_TYPE InterfaceType; 06164 ULONG BusNumber; 06165 ULONG SlotNumber; 06166 ULONG Reserved[3]; 06167 ULONG AlternativeLists; 06168 IO_RESOURCE_LIST List[1]; 06169 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; 06170 06171 _Function_class_(DRIVER_CANCEL) 06172 _Requires_lock_held_(_Global_cancel_spin_lock_) 06173 _Releases_lock_(_Global_cancel_spin_lock_) 06174 _IRQL_requires_min_(DISPATCH_LEVEL) 06175 _IRQL_requires_(DISPATCH_LEVEL) 06176 typedef VOID 06177 (NTAPI DRIVER_CANCEL)( 06178 _Inout_ struct _DEVICE_OBJECT *DeviceObject, 06179 _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp); 06180 typedef DRIVER_CANCEL *PDRIVER_CANCEL; 06181 06182 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { 06183 CSHORT Type; 06184 USHORT Size; 06185 struct _MDL *MdlAddress; 06186 ULONG Flags; 06187 union { 06188 struct _IRP *MasterIrp; 06189 volatile LONG IrpCount; 06190 PVOID SystemBuffer; 06191 } AssociatedIrp; 06192 LIST_ENTRY ThreadListEntry; 06193 IO_STATUS_BLOCK IoStatus; 06194 KPROCESSOR_MODE RequestorMode; 06195 BOOLEAN PendingReturned; 06196 CHAR StackCount; 06197 CHAR CurrentLocation; 06198 BOOLEAN Cancel; 06199 KIRQL CancelIrql; 06200 CCHAR ApcEnvironment; 06201 UCHAR AllocationFlags; 06202 PIO_STATUS_BLOCK UserIosb; 06203 PKEVENT UserEvent; 06204 union { 06205 struct { 06206 _ANONYMOUS_UNION union { 06207 PIO_APC_ROUTINE UserApcRoutine; 06208 PVOID IssuingProcess; 06209 } DUMMYUNIONNAME; 06210 PVOID UserApcContext; 06211 } AsynchronousParameters; 06212 LARGE_INTEGER AllocationSize; 06213 } Overlay; 06214 volatile PDRIVER_CANCEL CancelRoutine; 06215 PVOID UserBuffer; 06216 union { 06217 struct { 06218 _ANONYMOUS_UNION union { 06219 KDEVICE_QUEUE_ENTRY DeviceQueueEntry; 06220 _ANONYMOUS_STRUCT struct { 06221 PVOID DriverContext[4]; 06222 } DUMMYSTRUCTNAME; 06223 } DUMMYUNIONNAME; 06224 PETHREAD Thread; 06225 PCHAR AuxiliaryBuffer; 06226 _ANONYMOUS_STRUCT struct { 06227 LIST_ENTRY ListEntry; 06228 _ANONYMOUS_UNION union { 06229 struct _IO_STACK_LOCATION *CurrentStackLocation; 06230 ULONG PacketType; 06231 } DUMMYUNIONNAME; 06232 } DUMMYSTRUCTNAME; 06233 struct _FILE_OBJECT *OriginalFileObject; 06234 } Overlay; 06235 KAPC Apc; 06236 PVOID CompletionKey; 06237 } Tail; 06238 } IRP, *PIRP; 06239 06240 typedef enum _IO_PAGING_PRIORITY { 06241 IoPagingPriorityInvalid, 06242 IoPagingPriorityNormal, 06243 IoPagingPriorityHigh, 06244 IoPagingPriorityReserved1, 06245 IoPagingPriorityReserved2 06246 } IO_PAGING_PRIORITY; 06247 06248 _Function_class_(IO_COMPLETION_ROUTINE) 06249 _IRQL_requires_same_ 06250 typedef NTSTATUS 06251 (NTAPI IO_COMPLETION_ROUTINE)( 06252 _In_ struct _DEVICE_OBJECT *DeviceObject, 06253 _In_ struct _IRP *Irp, 06254 _In_opt_ PVOID Context); 06255 typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; 06256 06257 _Function_class_(IO_DPC_ROUTINE) 06258 _IRQL_always_function_min_(DISPATCH_LEVEL) 06259 _IRQL_requires_(DISPATCH_LEVEL) 06260 _IRQL_requires_same_ 06261 typedef VOID 06262 (NTAPI IO_DPC_ROUTINE)( 06263 _In_ struct _KDPC *Dpc, 06264 _In_ struct _DEVICE_OBJECT *DeviceObject, 06265 _Inout_ struct _IRP *Irp, 06266 _In_opt_ PVOID Context); 06267 typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE; 06268 06269 typedef NTSTATUS 06270 (NTAPI *PMM_DLL_INITIALIZE)( 06271 _In_ PUNICODE_STRING RegistryPath); 06272 06273 typedef NTSTATUS 06274 (NTAPI *PMM_DLL_UNLOAD)( 06275 VOID); 06276 06277 _Function_class_(IO_TIMER_ROUTINE) 06278 _IRQL_requires_same_ 06279 typedef VOID 06280 (NTAPI IO_TIMER_ROUTINE)( 06281 _In_ struct _DEVICE_OBJECT *DeviceObject, 06282 _In_opt_ PVOID Context); 06283 typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE; 06284 06285 typedef struct _IO_SECURITY_CONTEXT { 06286 PSECURITY_QUALITY_OF_SERVICE SecurityQos; 06287 PACCESS_STATE AccessState; 06288 ACCESS_MASK DesiredAccess; 06289 ULONG FullCreateOptions; 06290 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; 06291 06292 struct _IO_CSQ; 06293 06294 typedef struct _IO_CSQ_IRP_CONTEXT { 06295 ULONG Type; 06296 struct _IRP *Irp; 06297 struct _IO_CSQ *Csq; 06298 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; 06299 06300 typedef VOID 06301 (NTAPI *PIO_CSQ_INSERT_IRP)( 06302 _In_ struct _IO_CSQ *Csq, 06303 _In_ PIRP Irp); 06304 06305 typedef NTSTATUS 06306 (NTAPI IO_CSQ_INSERT_IRP_EX)( 06307 _In_ struct _IO_CSQ *Csq, 06308 _In_ PIRP Irp, 06309 _In_ PVOID InsertContext); 06310 typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX; 06311 06312 typedef VOID 06313 (NTAPI *PIO_CSQ_REMOVE_IRP)( 06314 _In_ struct _IO_CSQ *Csq, 06315 _In_ PIRP Irp); 06316 06317 typedef PIRP 06318 (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)( 06319 _In_ struct _IO_CSQ *Csq, 06320 _In_ PIRP Irp, 06321 _In_ PVOID PeekContext); 06322 06323 typedef VOID 06324 (NTAPI *PIO_CSQ_ACQUIRE_LOCK)( 06325 _In_ struct _IO_CSQ *Csq, 06326 _Out_ PKIRQL Irql); 06327 06328 typedef VOID 06329 (NTAPI *PIO_CSQ_RELEASE_LOCK)( 06330 _In_ struct _IO_CSQ *Csq, 06331 _In_ KIRQL Irql); 06332 06333 typedef VOID 06334 (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( 06335 _In_ struct _IO_CSQ *Csq, 06336 _In_ PIRP Irp); 06337 06338 typedef struct _IO_CSQ { 06339 ULONG Type; 06340 PIO_CSQ_INSERT_IRP CsqInsertIrp; 06341 PIO_CSQ_REMOVE_IRP CsqRemoveIrp; 06342 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; 06343 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; 06344 PIO_CSQ_RELEASE_LOCK CsqReleaseLock; 06345 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; 06346 PVOID ReservePointer; 06347 } IO_CSQ, *PIO_CSQ; 06348 06349 typedef enum _BUS_QUERY_ID_TYPE { 06350 BusQueryDeviceID, 06351 BusQueryHardwareIDs, 06352 BusQueryCompatibleIDs, 06353 BusQueryInstanceID, 06354 BusQueryDeviceSerialNumber 06355 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; 06356 06357 typedef enum _DEVICE_TEXT_TYPE { 06358 DeviceTextDescription, 06359 DeviceTextLocationInformation 06360 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; 06361 06362 typedef BOOLEAN 06363 (NTAPI *PGPE_SERVICE_ROUTINE)( 06364 PVOID, 06365 PVOID); 06366 06367 _IRQL_requires_max_(DISPATCH_LEVEL) 06368 _Must_inspect_result_ 06369 typedef NTSTATUS 06370 (NTAPI *PGPE_CONNECT_VECTOR)( 06371 PDEVICE_OBJECT, 06372 ULONG, 06373 KINTERRUPT_MODE, 06374 BOOLEAN, 06375 PGPE_SERVICE_ROUTINE, 06376 PVOID, 06377 PVOID); 06378 06379 _IRQL_requires_max_(DISPATCH_LEVEL) 06380 _Must_inspect_result_ 06381 typedef NTSTATUS 06382 (NTAPI *PGPE_DISCONNECT_VECTOR)( 06383 PVOID); 06384 06385 _IRQL_requires_max_(DISPATCH_LEVEL) 06386 _Must_inspect_result_ 06387 typedef NTSTATUS 06388 (NTAPI *PGPE_ENABLE_EVENT)( 06389 PDEVICE_OBJECT, 06390 PVOID); 06391 06392 _IRQL_requires_max_(DISPATCH_LEVEL) 06393 _Must_inspect_result_ 06394 typedef NTSTATUS 06395 (NTAPI *PGPE_DISABLE_EVENT)( 06396 PDEVICE_OBJECT, 06397 PVOID); 06398 06399 _IRQL_requires_max_(DISPATCH_LEVEL) 06400 _Must_inspect_result_ 06401 typedef NTSTATUS 06402 (NTAPI *PGPE_CLEAR_STATUS)( 06403 PDEVICE_OBJECT, 06404 PVOID); 06405 06406 typedef VOID 06407 (NTAPI *PDEVICE_NOTIFY_CALLBACK)( 06408 PVOID, 06409 ULONG); 06410 06411 _IRQL_requires_max_(DISPATCH_LEVEL) 06412 _Must_inspect_result_ 06413 typedef NTSTATUS 06414 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( 06415 PDEVICE_OBJECT, 06416 PDEVICE_NOTIFY_CALLBACK, 06417 PVOID); 06418 06419 _IRQL_requires_max_(DISPATCH_LEVEL) 06420 typedef VOID 06421 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( 06422 PDEVICE_OBJECT, 06423 PDEVICE_NOTIFY_CALLBACK); 06424 06425 typedef struct _ACPI_INTERFACE_STANDARD { 06426 USHORT Size; 06427 USHORT Version; 06428 PVOID Context; 06429 PINTERFACE_REFERENCE InterfaceReference; 06430 PINTERFACE_DEREFERENCE InterfaceDereference; 06431 PGPE_CONNECT_VECTOR GpeConnectVector; 06432 PGPE_DISCONNECT_VECTOR GpeDisconnectVector; 06433 PGPE_ENABLE_EVENT GpeEnableEvent; 06434 PGPE_DISABLE_EVENT GpeDisableEvent; 06435 PGPE_CLEAR_STATUS GpeClearStatus; 06436 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications; 06437 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications; 06438 } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD; 06439 06440 typedef BOOLEAN 06441 (NTAPI *PGPE_SERVICE_ROUTINE2)( 06442 PVOID ObjectContext, 06443 PVOID ServiceContext); 06444 06445 _IRQL_requires_max_(DISPATCH_LEVEL) 06446 _Must_inspect_result_ 06447 typedef NTSTATUS 06448 (NTAPI *PGPE_CONNECT_VECTOR2)( 06449 PVOID Context, 06450 ULONG GpeNumber, 06451 KINTERRUPT_MODE Mode, 06452 BOOLEAN Shareable, 06453 PGPE_SERVICE_ROUTINE ServiceRoutine, 06454 PVOID ServiceContext, 06455 PVOID *ObjectContext); 06456 06457 _IRQL_requires_max_(DISPATCH_LEVEL) 06458 _Must_inspect_result_ 06459 typedef NTSTATUS 06460 (NTAPI *PGPE_DISCONNECT_VECTOR2)( 06461 PVOID Context, 06462 PVOID ObjectContext); 06463 06464 _IRQL_requires_max_(DISPATCH_LEVEL) 06465 _Must_inspect_result_ 06466 typedef NTSTATUS 06467 (NTAPI *PGPE_ENABLE_EVENT2)( 06468 PVOID Context, 06469 PVOID ObjectContext); 06470 06471 _IRQL_requires_max_(DISPATCH_LEVEL) 06472 _Must_inspect_result_ 06473 typedef NTSTATUS 06474 (NTAPI *PGPE_DISABLE_EVENT2)( 06475 PVOID Context, 06476 PVOID ObjectContext); 06477 06478 _IRQL_requires_max_(DISPATCH_LEVEL) 06479 _Must_inspect_result_ 06480 typedef NTSTATUS 06481 (NTAPI *PGPE_CLEAR_STATUS2)( 06482 PVOID Context, 06483 PVOID ObjectContext); 06484 06485 _IRQL_requires_max_(DISPATCH_LEVEL) 06486 typedef VOID 06487 (NTAPI *PDEVICE_NOTIFY_CALLBACK2)( 06488 PVOID NotificationContext, 06489 ULONG NotifyCode); 06490 06491 _IRQL_requires_max_(DISPATCH_LEVEL) 06492 _Must_inspect_result_ 06493 typedef NTSTATUS 06494 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( 06495 PVOID Context, 06496 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, 06497 PVOID NotificationContext); 06498 06499 _IRQL_requires_max_(DISPATCH_LEVEL) 06500 typedef VOID 06501 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( 06502 PVOID Context); 06503 06504 typedef struct _ACPI_INTERFACE_STANDARD2 { 06505 USHORT Size; 06506 USHORT Version; 06507 PVOID Context; 06508 PINTERFACE_REFERENCE InterfaceReference; 06509 PINTERFACE_DEREFERENCE InterfaceDereference; 06510 PGPE_CONNECT_VECTOR2 GpeConnectVector; 06511 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector; 06512 PGPE_ENABLE_EVENT2 GpeEnableEvent; 06513 PGPE_DISABLE_EVENT2 GpeDisableEvent; 06514 PGPE_CLEAR_STATUS2 GpeClearStatus; 06515 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications; 06516 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications; 06517 } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2; 06518 06519 #if !defined(_AMD64_) && !defined(_IA64_) 06520 #include <pshpack4.h> 06521 #endif 06522 typedef struct _IO_STACK_LOCATION { 06523 UCHAR MajorFunction; 06524 UCHAR MinorFunction; 06525 UCHAR Flags; 06526 UCHAR Control; 06527 union { 06528 struct { 06529 PIO_SECURITY_CONTEXT SecurityContext; 06530 ULONG Options; 06531 USHORT POINTER_ALIGNMENT FileAttributes; 06532 USHORT ShareAccess; 06533 ULONG POINTER_ALIGNMENT EaLength; 06534 } Create; 06535 struct { 06536 ULONG Length; 06537 ULONG POINTER_ALIGNMENT Key; 06538 LARGE_INTEGER ByteOffset; 06539 } Read; 06540 struct { 06541 ULONG Length; 06542 ULONG POINTER_ALIGNMENT Key; 06543 LARGE_INTEGER ByteOffset; 06544 } Write; 06545 struct { 06546 ULONG Length; 06547 PUNICODE_STRING FileName; 06548 FILE_INFORMATION_CLASS FileInformationClass; 06549 ULONG FileIndex; 06550 } QueryDirectory; 06551 struct { 06552 ULONG Length; 06553 ULONG CompletionFilter; 06554 } NotifyDirectory; 06555 struct { 06556 ULONG Length; 06557 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 06558 } QueryFile; 06559 struct { 06560 ULONG Length; 06561 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 06562 PFILE_OBJECT FileObject; 06563 _ANONYMOUS_UNION union { 06564 _ANONYMOUS_STRUCT struct { 06565 BOOLEAN ReplaceIfExists; 06566 BOOLEAN AdvanceOnly; 06567 } DUMMYSTRUCTNAME; 06568 ULONG ClusterCount; 06569 HANDLE DeleteHandle; 06570 } DUMMYUNIONNAME; 06571 } SetFile; 06572 struct { 06573 ULONG Length; 06574 PVOID EaList; 06575 ULONG EaListLength; 06576 ULONG EaIndex; 06577 } QueryEa; 06578 struct { 06579 ULONG Length; 06580 } SetEa; 06581 struct { 06582 ULONG Length; 06583 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; 06584 } QueryVolume; 06585 struct { 06586 ULONG Length; 06587 FS_INFORMATION_CLASS FsInformationClass; 06588 } SetVolume; 06589 struct { 06590 ULONG OutputBufferLength; 06591 ULONG InputBufferLength; 06592 ULONG FsControlCode; 06593 PVOID Type3InputBuffer; 06594 } FileSystemControl; 06595 struct { 06596 PLARGE_INTEGER Length; 06597 ULONG Key; 06598 LARGE_INTEGER ByteOffset; 06599 } LockControl; 06600 struct { 06601 ULONG OutputBufferLength; 06602 ULONG POINTER_ALIGNMENT InputBufferLength; 06603 ULONG POINTER_ALIGNMENT IoControlCode; 06604 PVOID Type3InputBuffer; 06605 } DeviceIoControl; 06606 struct { 06607 SECURITY_INFORMATION SecurityInformation; 06608 ULONG POINTER_ALIGNMENT Length; 06609 } QuerySecurity; 06610 struct { 06611 SECURITY_INFORMATION SecurityInformation; 06612 PSECURITY_DESCRIPTOR SecurityDescriptor; 06613 } SetSecurity; 06614 struct { 06615 PVPB Vpb; 06616 PDEVICE_OBJECT DeviceObject; 06617 } MountVolume; 06618 struct { 06619 PVPB Vpb; 06620 PDEVICE_OBJECT DeviceObject; 06621 } VerifyVolume; 06622 struct { 06623 struct _SCSI_REQUEST_BLOCK *Srb; 06624 } Scsi; 06625 struct { 06626 ULONG Length; 06627 PSID StartSid; 06628 struct _FILE_GET_QUOTA_INFORMATION *SidList; 06629 ULONG SidListLength; 06630 } QueryQuota; 06631 struct { 06632 ULONG Length; 06633 } SetQuota; 06634 struct { 06635 DEVICE_RELATION_TYPE Type; 06636 } QueryDeviceRelations; 06637 struct { 06638 CONST GUID *InterfaceType; 06639 USHORT Size; 06640 USHORT Version; 06641 PINTERFACE Interface; 06642 PVOID InterfaceSpecificData; 06643 } QueryInterface; 06644 struct { 06645 PDEVICE_CAPABILITIES Capabilities; 06646 } DeviceCapabilities; 06647 struct { 06648 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; 06649 } FilterResourceRequirements; 06650 struct { 06651 ULONG WhichSpace; 06652 PVOID Buffer; 06653 ULONG Offset; 06654 ULONG POINTER_ALIGNMENT Length; 06655 } ReadWriteConfig; 06656 struct { 06657 BOOLEAN Lock; 06658 } SetLock; 06659 struct { 06660 BUS_QUERY_ID_TYPE IdType; 06661 } QueryId; 06662 struct { 06663 DEVICE_TEXT_TYPE DeviceTextType; 06664 LCID POINTER_ALIGNMENT LocaleId; 06665 } QueryDeviceText; 06666 struct { 06667 BOOLEAN InPath; 06668 BOOLEAN Reserved[3]; 06669 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; 06670 } UsageNotification; 06671 struct { 06672 SYSTEM_POWER_STATE PowerState; 06673 } WaitWake; 06674 struct { 06675 PPOWER_SEQUENCE PowerSequence; 06676 } PowerSequence; 06677 struct { 06678 ULONG SystemContext; 06679 POWER_STATE_TYPE POINTER_ALIGNMENT Type; 06680 POWER_STATE POINTER_ALIGNMENT State; 06681 POWER_ACTION POINTER_ALIGNMENT ShutdownType; 06682 } Power; 06683 struct { 06684 PCM_RESOURCE_LIST AllocatedResources; 06685 PCM_RESOURCE_LIST AllocatedResourcesTranslated; 06686 } StartDevice; 06687 struct { 06688 ULONG_PTR ProviderId; 06689 PVOID DataPath; 06690 ULONG BufferSize; 06691 PVOID Buffer; 06692 } WMI; 06693 struct { 06694 PVOID Argument1; 06695 PVOID Argument2; 06696 PVOID Argument3; 06697 PVOID Argument4; 06698 } Others; 06699 } Parameters; 06700 PDEVICE_OBJECT DeviceObject; 06701 PFILE_OBJECT FileObject; 06702 PIO_COMPLETION_ROUTINE CompletionRoutine; 06703 PVOID Context; 06704 } IO_STACK_LOCATION, *PIO_STACK_LOCATION; 06705 #if !defined(_AMD64_) && !defined(_IA64_) 06706 #include <poppack.h> 06707 #endif 06708 06709 /* IO_STACK_LOCATION.Control */ 06710 06711 #define SL_PENDING_RETURNED 0x01 06712 #define SL_ERROR_RETURNED 0x02 06713 #define SL_INVOKE_ON_CANCEL 0x20 06714 #define SL_INVOKE_ON_SUCCESS 0x40 06715 #define SL_INVOKE_ON_ERROR 0x80 06716 06717 #define METHOD_BUFFERED 0 06718 #define METHOD_IN_DIRECT 1 06719 #define METHOD_OUT_DIRECT 2 06720 #define METHOD_NEITHER 3 06721 06722 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT 06723 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT 06724 06725 #define FILE_SUPERSEDED 0x00000000 06726 #define FILE_OPENED 0x00000001 06727 #define FILE_CREATED 0x00000002 06728 #define FILE_OVERWRITTEN 0x00000003 06729 #define FILE_EXISTS 0x00000004 06730 #define FILE_DOES_NOT_EXIST 0x00000005 06731 06732 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe 06733 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff 06734 06735 /* also in winnt.h */ 06736 #define FILE_LIST_DIRECTORY 0x00000001 06737 #define FILE_READ_DATA 0x00000001 06738 #define FILE_ADD_FILE 0x00000002 06739 #define FILE_WRITE_DATA 0x00000002 06740 #define FILE_ADD_SUBDIRECTORY 0x00000004 06741 #define FILE_APPEND_DATA 0x00000004 06742 #define FILE_CREATE_PIPE_INSTANCE 0x00000004 06743 #define FILE_READ_EA 0x00000008 06744 #define FILE_WRITE_EA 0x00000010 06745 #define FILE_EXECUTE 0x00000020 06746 #define FILE_TRAVERSE 0x00000020 06747 #define FILE_DELETE_CHILD 0x00000040 06748 #define FILE_READ_ATTRIBUTES 0x00000080 06749 #define FILE_WRITE_ATTRIBUTES 0x00000100 06750 06751 #define FILE_SHARE_READ 0x00000001 06752 #define FILE_SHARE_WRITE 0x00000002 06753 #define FILE_SHARE_DELETE 0x00000004 06754 #define FILE_SHARE_VALID_FLAGS 0x00000007 06755 06756 #define FILE_ATTRIBUTE_READONLY 0x00000001 06757 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 06758 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 06759 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 06760 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 06761 #define FILE_ATTRIBUTE_DEVICE 0x00000040 06762 #define FILE_ATTRIBUTE_NORMAL 0x00000080 06763 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 06764 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 06765 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 06766 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 06767 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 06768 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 06769 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 06770 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 06771 06772 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 06773 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 06774 06775 #define FILE_VALID_OPTION_FLAGS 0x00ffffff 06776 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 06777 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 06778 #define FILE_VALID_SET_FLAGS 0x00000036 06779 06780 #define FILE_SUPERSEDE 0x00000000 06781 #define FILE_OPEN 0x00000001 06782 #define FILE_CREATE 0x00000002 06783 #define FILE_OPEN_IF 0x00000003 06784 #define FILE_OVERWRITE 0x00000004 06785 #define FILE_OVERWRITE_IF 0x00000005 06786 #define FILE_MAXIMUM_DISPOSITION 0x00000005 06787 06788 #define FILE_DIRECTORY_FILE 0x00000001 06789 #define FILE_WRITE_THROUGH 0x00000002 06790 #define FILE_SEQUENTIAL_ONLY 0x00000004 06791 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 06792 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 06793 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 06794 #define FILE_NON_DIRECTORY_FILE 0x00000040 06795 #define FILE_CREATE_TREE_CONNECTION 0x00000080 06796 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 06797 #define FILE_NO_EA_KNOWLEDGE 0x00000200 06798 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 06799 #define FILE_RANDOM_ACCESS 0x00000800 06800 #define FILE_DELETE_ON_CLOSE 0x00001000 06801 #define FILE_OPEN_BY_FILE_ID 0x00002000 06802 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 06803 #define FILE_NO_COMPRESSION 0x00008000 06804 #if (NTDDI_VERSION >= NTDDI_WIN7) 06805 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 06806 #define FILE_DISALLOW_EXCLUSIVE 0x00020000 06807 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 06808 #define FILE_RESERVE_OPFILTER 0x00100000 06809 #define FILE_OPEN_REPARSE_POINT 0x00200000 06810 #define FILE_OPEN_NO_RECALL 0x00400000 06811 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 06812 06813 #define FILE_ANY_ACCESS 0x00000000 06814 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS 06815 #define FILE_READ_ACCESS 0x00000001 06816 #define FILE_WRITE_ACCESS 0x00000002 06817 06818 #define FILE_ALL_ACCESS \ 06819 (STANDARD_RIGHTS_REQUIRED | \ 06820 SYNCHRONIZE | \ 06821 0x1FF) 06822 06823 #define FILE_GENERIC_EXECUTE \ 06824 (STANDARD_RIGHTS_EXECUTE | \ 06825 FILE_READ_ATTRIBUTES | \ 06826 FILE_EXECUTE | \ 06827 SYNCHRONIZE) 06828 06829 #define FILE_GENERIC_READ \ 06830 (STANDARD_RIGHTS_READ | \ 06831 FILE_READ_DATA | \ 06832 FILE_READ_ATTRIBUTES | \ 06833 FILE_READ_EA | \ 06834 SYNCHRONIZE) 06835 06836 #define FILE_GENERIC_WRITE \ 06837 (STANDARD_RIGHTS_WRITE | \ 06838 FILE_WRITE_DATA | \ 06839 FILE_WRITE_ATTRIBUTES | \ 06840 FILE_WRITE_EA | \ 06841 FILE_APPEND_DATA | \ 06842 SYNCHRONIZE) 06843 06844 /* end winnt.h */ 06845 06846 #define WMIREG_ACTION_REGISTER 1 06847 #define WMIREG_ACTION_DEREGISTER 2 06848 #define WMIREG_ACTION_REREGISTER 3 06849 #define WMIREG_ACTION_UPDATE_GUIDS 4 06850 #define WMIREG_ACTION_BLOCK_IRPS 5 06851 06852 #define WMIREGISTER 0 06853 #define WMIUPDATE 1 06854 06855 _Function_class_(WMI_NOTIFICATION_CALLBACK) 06856 _IRQL_requires_same_ 06857 typedef VOID 06858 (NTAPI FWMI_NOTIFICATION_CALLBACK)( 06859 PVOID Wnode, 06860 PVOID Context); 06861 typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK; 06862 06863 #ifndef _PCI_X_ 06864 #define _PCI_X_ 06865 06866 typedef struct _PCI_SLOT_NUMBER { 06867 union { 06868 struct { 06869 ULONG DeviceNumber:5; 06870 ULONG FunctionNumber:3; 06871 ULONG Reserved:24; 06872 } bits; 06873 ULONG AsULONG; 06874 } u; 06875 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; 06876 06877 #define PCI_TYPE0_ADDRESSES 6 06878 #define PCI_TYPE1_ADDRESSES 2 06879 #define PCI_TYPE2_ADDRESSES 5 06880 06881 typedef struct _PCI_COMMON_HEADER { 06882 PCI_COMMON_HEADER_LAYOUT 06883 } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; 06884 06885 #ifdef __cplusplus 06886 typedef struct _PCI_COMMON_CONFIG { 06887 PCI_COMMON_HEADER_LAYOUT 06888 UCHAR DeviceSpecific[192]; 06889 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; 06890 #else 06891 typedef struct _PCI_COMMON_CONFIG { 06892 PCI_COMMON_HEADER DUMMYSTRUCTNAME; 06893 UCHAR DeviceSpecific[192]; 06894 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; 06895 #endif 06896 06897 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) 06898 06899 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000 06900 06901 #define PCI_MAX_DEVICES 32 06902 #define PCI_MAX_FUNCTION 8 06903 #define PCI_MAX_BRIDGE_NUMBER 0xFF 06904 #define PCI_INVALID_VENDORID 0xFFFF 06905 06906 /* PCI_COMMON_CONFIG.HeaderType */ 06907 #define PCI_MULTIFUNCTION 0x80 06908 #define PCI_DEVICE_TYPE 0x00 06909 #define PCI_BRIDGE_TYPE 0x01 06910 #define PCI_CARDBUS_BRIDGE_TYPE 0x02 06911 06912 #define PCI_CONFIGURATION_TYPE(PciData) \ 06913 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) 06914 06915 #define PCI_MULTIFUNCTION_DEVICE(PciData) \ 06916 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) 06917 06918 /* PCI_COMMON_CONFIG.Command */ 06919 #define PCI_ENABLE_IO_SPACE 0x0001 06920 #define PCI_ENABLE_MEMORY_SPACE 0x0002 06921 #define PCI_ENABLE_BUS_MASTER 0x0004 06922 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 06923 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 06924 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 06925 #define PCI_ENABLE_PARITY 0x0040 06926 #define PCI_ENABLE_WAIT_CYCLE 0x0080 06927 #define PCI_ENABLE_SERR 0x0100 06928 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 06929 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 06930 06931 /* PCI_COMMON_CONFIG.Status */ 06932 #define PCI_STATUS_INTERRUPT_PENDING 0x0008 06933 #define PCI_STATUS_CAPABILITIES_LIST 0x0010 06934 #define PCI_STATUS_66MHZ_CAPABLE 0x0020 06935 #define PCI_STATUS_UDF_SUPPORTED 0x0040 06936 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 06937 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 06938 #define PCI_STATUS_DEVSEL 0x0600 06939 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 06940 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 06941 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 06942 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 06943 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 06944 06945 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ 06946 06947 #define PCI_WHICHSPACE_CONFIG 0x0 06948 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ 06949 06950 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01 06951 #define PCI_CAPABILITY_ID_AGP 0x02 06952 #define PCI_CAPABILITY_ID_VPD 0x03 06953 #define PCI_CAPABILITY_ID_SLOT_ID 0x04 06954 #define PCI_CAPABILITY_ID_MSI 0x05 06955 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06 06956 #define PCI_CAPABILITY_ID_PCIX 0x07 06957 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08 06958 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09 06959 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A 06960 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B 06961 #define PCI_CAPABILITY_ID_SHPC 0x0C 06962 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D 06963 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E 06964 #define PCI_CAPABILITY_ID_SECURE 0x0F 06965 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10 06966 #define PCI_CAPABILITY_ID_MSIX 0x11 06967 06968 typedef struct _PCI_CAPABILITIES_HEADER { 06969 UCHAR CapabilityID; 06970 UCHAR Next; 06971 } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER; 06972 06973 typedef struct _PCI_PMC { 06974 UCHAR Version:3; 06975 UCHAR PMEClock:1; 06976 UCHAR Rsvd1:1; 06977 UCHAR DeviceSpecificInitialization:1; 06978 UCHAR Rsvd2:2; 06979 struct _PM_SUPPORT { 06980 UCHAR Rsvd2:1; 06981 UCHAR D1:1; 06982 UCHAR D2:1; 06983 UCHAR PMED0:1; 06984 UCHAR PMED1:1; 06985 UCHAR PMED2:1; 06986 UCHAR PMED3Hot:1; 06987 UCHAR PMED3Cold:1; 06988 } Support; 06989 } PCI_PMC, *PPCI_PMC; 06990 06991 typedef struct _PCI_PMCSR { 06992 USHORT PowerState:2; 06993 USHORT Rsvd1:6; 06994 USHORT PMEEnable:1; 06995 USHORT DataSelect:4; 06996 USHORT DataScale:2; 06997 USHORT PMEStatus:1; 06998 } PCI_PMCSR, *PPCI_PMCSR; 06999 07000 typedef struct _PCI_PMCSR_BSE { 07001 UCHAR Rsvd1:6; 07002 UCHAR D3HotSupportsStopClock:1; 07003 UCHAR BusPowerClockControlEnabled:1; 07004 } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE; 07005 07006 typedef struct _PCI_PM_CAPABILITY { 07007 PCI_CAPABILITIES_HEADER Header; 07008 union { 07009 PCI_PMC Capabilities; 07010 USHORT AsUSHORT; 07011 } PMC; 07012 union { 07013 PCI_PMCSR ControlStatus; 07014 USHORT AsUSHORT; 07015 } PMCSR; 07016 union { 07017 PCI_PMCSR_BSE BridgeSupport; 07018 UCHAR AsUCHAR; 07019 } PMCSR_BSE; 07020 UCHAR Data; 07021 } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY; 07022 07023 typedef struct { 07024 PCI_CAPABILITIES_HEADER Header; 07025 union { 07026 struct { 07027 USHORT DataParityErrorRecoveryEnable:1; 07028 USHORT EnableRelaxedOrdering:1; 07029 USHORT MaxMemoryReadByteCount:2; 07030 USHORT MaxOutstandingSplitTransactions:3; 07031 USHORT Reserved:9; 07032 } bits; 07033 USHORT AsUSHORT; 07034 } Command; 07035 union { 07036 struct { 07037 ULONG FunctionNumber:3; 07038 ULONG DeviceNumber:5; 07039 ULONG BusNumber:8; 07040 ULONG Device64Bit:1; 07041 ULONG Capable133MHz:1; 07042 ULONG SplitCompletionDiscarded:1; 07043 ULONG UnexpectedSplitCompletion:1; 07044 ULONG DeviceComplexity:1; 07045 ULONG DesignedMaxMemoryReadByteCount:2; 07046 ULONG DesignedMaxOutstandingSplitTransactions:3; 07047 ULONG DesignedMaxCumulativeReadSize:3; 07048 ULONG ReceivedSplitCompletionErrorMessage:1; 07049 ULONG CapablePCIX266:1; 07050 ULONG CapablePCIX533:1; 07051 } bits; 07052 ULONG AsULONG; 07053 } Status; 07054 } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY; 07055 07056 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001 07057 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002 07058 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003 07059 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004 07060 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005 07061 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006 07062 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007 07063 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008 07064 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009 07065 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A 07066 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010 07067 07068 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER { 07069 USHORT CapabilityID; 07070 USHORT Version:4; 07071 USHORT Next:12; 07072 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER; 07073 07074 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY { 07075 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 07076 ULONG LowSerialNumber; 07077 ULONG HighSerialNumber; 07078 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY; 07079 07080 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS { 07081 _ANONYMOUS_STRUCT struct { 07082 ULONG Undefined:1; 07083 ULONG Reserved1:3; 07084 ULONG DataLinkProtocolError:1; 07085 ULONG SurpriseDownError:1; 07086 ULONG Reserved2:6; 07087 ULONG PoisonedTLP:1; 07088 ULONG FlowControlProtocolError:1; 07089 ULONG CompletionTimeout:1; 07090 ULONG CompleterAbort:1; 07091 ULONG UnexpectedCompletion:1; 07092 ULONG ReceiverOverflow:1; 07093 ULONG MalformedTLP:1; 07094 ULONG ECRCError:1; 07095 ULONG UnsupportedRequestError:1; 07096 ULONG Reserved3:11; 07097 } DUMMYSTRUCTNAME; 07098 ULONG AsULONG; 07099 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS; 07100 07101 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK { 07102 _ANONYMOUS_STRUCT struct { 07103 ULONG Undefined:1; 07104 ULONG Reserved1:3; 07105 ULONG DataLinkProtocolError:1; 07106 ULONG SurpriseDownError:1; 07107 ULONG Reserved2:6; 07108 ULONG PoisonedTLP:1; 07109 ULONG FlowControlProtocolError:1; 07110 ULONG CompletionTimeout:1; 07111 ULONG CompleterAbort:1; 07112 ULONG UnexpectedCompletion:1; 07113 ULONG ReceiverOverflow:1; 07114 ULONG MalformedTLP:1; 07115 ULONG ECRCError:1; 07116 ULONG UnsupportedRequestError:1; 07117 ULONG Reserved3:11; 07118 } DUMMYSTRUCTNAME; 07119 ULONG AsULONG; 07120 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK; 07121 07122 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY { 07123 _ANONYMOUS_STRUCT struct { 07124 ULONG Undefined:1; 07125 ULONG Reserved1:3; 07126 ULONG DataLinkProtocolError:1; 07127 ULONG SurpriseDownError:1; 07128 ULONG Reserved2:6; 07129 ULONG PoisonedTLP:1; 07130 ULONG FlowControlProtocolError:1; 07131 ULONG CompletionTimeout:1; 07132 ULONG CompleterAbort:1; 07133 ULONG UnexpectedCompletion:1; 07134 ULONG ReceiverOverflow:1; 07135 ULONG MalformedTLP:1; 07136 ULONG ECRCError:1; 07137 ULONG UnsupportedRequestError:1; 07138 ULONG Reserved3:11; 07139 } DUMMYSTRUCTNAME; 07140 ULONG AsULONG; 07141 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY; 07142 07143 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS { 07144 _ANONYMOUS_STRUCT struct { 07145 ULONG ReceiverError:1; 07146 ULONG Reserved1:5; 07147 ULONG BadTLP:1; 07148 ULONG BadDLLP:1; 07149 ULONG ReplayNumRollover:1; 07150 ULONG Reserved2:3; 07151 ULONG ReplayTimerTimeout:1; 07152 ULONG AdvisoryNonFatalError:1; 07153 ULONG Reserved3:18; 07154 } DUMMYSTRUCTNAME; 07155 ULONG AsULONG; 07156 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS; 07157 07158 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK { 07159 _ANONYMOUS_STRUCT struct { 07160 ULONG ReceiverError:1; 07161 ULONG Reserved1:5; 07162 ULONG BadTLP:1; 07163 ULONG BadDLLP:1; 07164 ULONG ReplayNumRollover:1; 07165 ULONG Reserved2:3; 07166 ULONG ReplayTimerTimeout:1; 07167 ULONG AdvisoryNonFatalError:1; 07168 ULONG Reserved3:18; 07169 } DUMMYSTRUCTNAME; 07170 ULONG AsULONG; 07171 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK; 07172 07173 typedef union _PCI_EXPRESS_AER_CAPABILITIES { 07174 _ANONYMOUS_STRUCT struct { 07175 ULONG FirstErrorPointer:5; 07176 ULONG ECRCGenerationCapable:1; 07177 ULONG ECRCGenerationEnable:1; 07178 ULONG ECRCCheckCapable:1; 07179 ULONG ECRCCheckEnable:1; 07180 ULONG Reserved:23; 07181 } DUMMYSTRUCTNAME; 07182 ULONG AsULONG; 07183 } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES; 07184 07185 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND { 07186 _ANONYMOUS_STRUCT struct { 07187 ULONG CorrectableErrorReportingEnable:1; 07188 ULONG NonFatalErrorReportingEnable:1; 07189 ULONG FatalErrorReportingEnable:1; 07190 ULONG Reserved:29; 07191 } DUMMYSTRUCTNAME; 07192 ULONG AsULONG; 07193 } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND; 07194 07195 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS { 07196 _ANONYMOUS_STRUCT struct { 07197 ULONG CorrectableErrorReceived:1; 07198 ULONG MultipleCorrectableErrorsReceived:1; 07199 ULONG UncorrectableErrorReceived:1; 07200 ULONG MultipleUncorrectableErrorsReceived:1; 07201 ULONG FirstUncorrectableFatal:1; 07202 ULONG NonFatalErrorMessagesReceived:1; 07203 ULONG FatalErrorMessagesReceived:1; 07204 ULONG Reserved:20; 07205 ULONG AdvancedErrorInterruptMessageNumber:5; 07206 } DUMMYSTRUCTNAME; 07207 ULONG AsULONG; 07208 } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS; 07209 07210 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID { 07211 _ANONYMOUS_STRUCT struct { 07212 USHORT CorrectableSourceIdFun:3; 07213 USHORT CorrectableSourceIdDev:5; 07214 USHORT CorrectableSourceIdBus:8; 07215 USHORT UncorrectableSourceIdFun:3; 07216 USHORT UncorrectableSourceIdDev:5; 07217 USHORT UncorrectableSourceIdBus:8; 07218 } DUMMYSTRUCTNAME; 07219 ULONG AsULONG; 07220 } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID; 07221 07222 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS { 07223 _ANONYMOUS_STRUCT struct { 07224 ULONG TargetAbortOnSplitCompletion:1; 07225 ULONG MasterAbortOnSplitCompletion:1; 07226 ULONG ReceivedTargetAbort:1; 07227 ULONG ReceivedMasterAbort:1; 07228 ULONG RsvdZ:1; 07229 ULONG UnexpectedSplitCompletionError:1; 07230 ULONG UncorrectableSplitCompletion:1; 07231 ULONG UncorrectableDataError:1; 07232 ULONG UncorrectableAttributeError:1; 07233 ULONG UncorrectableAddressError:1; 07234 ULONG DelayedTransactionDiscardTimerExpired:1; 07235 ULONG PERRAsserted:1; 07236 ULONG SERRAsserted:1; 07237 ULONG InternalBridgeError:1; 07238 ULONG Reserved:18; 07239 } DUMMYSTRUCTNAME; 07240 ULONG AsULONG; 07241 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS; 07242 07243 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK { 07244 _ANONYMOUS_STRUCT struct { 07245 ULONG TargetAbortOnSplitCompletion:1; 07246 ULONG MasterAbortOnSplitCompletion:1; 07247 ULONG ReceivedTargetAbort:1; 07248 ULONG ReceivedMasterAbort:1; 07249 ULONG RsvdZ:1; 07250 ULONG UnexpectedSplitCompletionError:1; 07251 ULONG UncorrectableSplitCompletion:1; 07252 ULONG UncorrectableDataError:1; 07253 ULONG UncorrectableAttributeError:1; 07254 ULONG UncorrectableAddressError:1; 07255 ULONG DelayedTransactionDiscardTimerExpired:1; 07256 ULONG PERRAsserted:1; 07257 ULONG SERRAsserted:1; 07258 ULONG InternalBridgeError:1; 07259 ULONG Reserved:18; 07260 } DUMMYSTRUCTNAME; 07261 ULONG AsULONG; 07262 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK; 07263 07264 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY { 07265 _ANONYMOUS_STRUCT struct { 07266 ULONG TargetAbortOnSplitCompletion:1; 07267 ULONG MasterAbortOnSplitCompletion:1; 07268 ULONG ReceivedTargetAbort:1; 07269 ULONG ReceivedMasterAbort:1; 07270 ULONG RsvdZ:1; 07271 ULONG UnexpectedSplitCompletionError:1; 07272 ULONG UncorrectableSplitCompletion:1; 07273 ULONG UncorrectableDataError:1; 07274 ULONG UncorrectableAttributeError:1; 07275 ULONG UncorrectableAddressError:1; 07276 ULONG DelayedTransactionDiscardTimerExpired:1; 07277 ULONG PERRAsserted:1; 07278 ULONG SERRAsserted:1; 07279 ULONG InternalBridgeError:1; 07280 ULONG Reserved:18; 07281 } DUMMYSTRUCTNAME; 07282 ULONG AsULONG; 07283 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY; 07284 07285 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES { 07286 _ANONYMOUS_STRUCT struct { 07287 ULONG SecondaryUncorrectableFirstErrorPtr:5; 07288 ULONG Reserved:27; 07289 } DUMMYSTRUCTNAME; 07290 ULONG AsULONG; 07291 } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES; 07292 07293 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001 07294 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002 07295 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004 07296 07297 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \ 07298 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \ 07299 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \ 07300 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING) 07301 07302 typedef struct _PCI_EXPRESS_AER_CAPABILITY { 07303 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 07304 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 07305 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 07306 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 07307 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 07308 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 07309 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 07310 ULONG HeaderLog[4]; 07311 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; 07312 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; 07313 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; 07314 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; 07315 ULONG SecHeaderLog[4]; 07316 } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY; 07317 07318 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY { 07319 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 07320 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 07321 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 07322 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 07323 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 07324 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 07325 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 07326 ULONG HeaderLog[4]; 07327 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand; 07328 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus; 07329 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId; 07330 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY; 07331 07332 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY { 07333 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 07334 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 07335 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 07336 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 07337 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 07338 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 07339 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 07340 ULONG HeaderLog[4]; 07341 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; 07342 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; 07343 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; 07344 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; 07345 ULONG SecHeaderLog[4]; 07346 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY; 07347 07348 typedef union _PCI_EXPRESS_SRIOV_CAPS { 07349 _ANONYMOUS_STRUCT struct { 07350 ULONG VFMigrationCapable:1; 07351 ULONG Reserved1:20; 07352 ULONG VFMigrationInterruptNumber:11; 07353 } DUMMYSTRUCTNAME; 07354 ULONG AsULONG; 07355 } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS; 07356 07357 typedef union _PCI_EXPRESS_SRIOV_CONTROL { 07358 _ANONYMOUS_STRUCT struct { 07359 USHORT VFEnable:1; 07360 USHORT VFMigrationEnable:1; 07361 USHORT VFMigrationInterruptEnable:1; 07362 USHORT VFMemorySpaceEnable:1; 07363 USHORT ARICapableHierarchy:1; 07364 USHORT Reserved1:11; 07365 } DUMMYSTRUCTNAME; 07366 USHORT AsUSHORT; 07367 } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL; 07368 07369 typedef union _PCI_EXPRESS_SRIOV_STATUS { 07370 _ANONYMOUS_STRUCT struct { 07371 USHORT VFMigrationStatus:1; 07372 USHORT Reserved1:15; 07373 } DUMMYSTRUCTNAME; 07374 USHORT AsUSHORT; 07375 } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS; 07376 07377 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY { 07378 _ANONYMOUS_STRUCT struct { 07379 ULONG VFMigrationStateBIR:3; 07380 ULONG VFMigrationStateOffset:29; 07381 } DUMMYSTRUCTNAME; 07382 ULONG AsULONG; 07383 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY; 07384 07385 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY { 07386 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 07387 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities; 07388 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl; 07389 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus; 07390 USHORT InitialVFs; 07391 USHORT TotalVFs; 07392 USHORT NumVFs; 07393 UCHAR FunctionDependencyLink; 07394 UCHAR RsvdP1; 07395 USHORT FirstVFOffset; 07396 USHORT VFStride; 07397 USHORT RsvdP2; 07398 USHORT VFDeviceId; 07399 ULONG SupportedPageSizes; 07400 ULONG SystemPageSize; 07401 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; 07402 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset; 07403 } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY; 07404 07405 /* PCI device classes */ 07406 #define PCI_CLASS_PRE_20 0x00 07407 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01 07408 #define PCI_CLASS_NETWORK_CTLR 0x02 07409 #define PCI_CLASS_DISPLAY_CTLR 0x03 07410 #define PCI_CLASS_MULTIMEDIA_DEV 0x04 07411 #define PCI_CLASS_MEMORY_CTLR 0x05 07412 #define PCI_CLASS_BRIDGE_DEV 0x06 07413 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 07414 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08 07415 #define PCI_CLASS_INPUT_DEV 0x09 07416 #define PCI_CLASS_DOCKING_STATION 0x0a 07417 #define PCI_CLASS_PROCESSOR 0x0b 07418 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c 07419 #define PCI_CLASS_WIRELESS_CTLR 0x0d 07420 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e 07421 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f 07422 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10 07423 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 07424 #define PCI_CLASS_NOT_DEFINED 0xff 07425 07426 /* PCI device subclasses for class 0 */ 07427 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 07428 #define PCI_SUBCLASS_PRE_20_VGA 0x01 07429 07430 /* PCI device subclasses for class 1 (mass storage controllers)*/ 07431 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 07432 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 07433 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 07434 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 07435 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 07436 #define PCI_SUBCLASS_MSC_OTHER 0x80 07437 07438 /* PCI device subclasses for class 2 (network controllers)*/ 07439 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 07440 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 07441 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 07442 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03 07443 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04 07444 #define PCI_SUBCLASS_NET_OTHER 0x80 07445 07446 /* PCI device subclasses for class 3 (display controllers)*/ 07447 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00 07448 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01 07449 #define PCI_SUBCLASS_VID_3D_CTLR 0x02 07450 #define PCI_SUBCLASS_VID_OTHER 0x80 07451 07452 /* PCI device subclasses for class 4 (multimedia device)*/ 07453 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 07454 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 07455 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 07456 #define PCI_SUBCLASS_MM_OTHER 0x80 07457 07458 /* PCI device subclasses for class 5 (memory controller)*/ 07459 #define PCI_SUBCLASS_MEM_RAM 0x00 07460 #define PCI_SUBCLASS_MEM_FLASH 0x01 07461 #define PCI_SUBCLASS_MEM_OTHER 0x80 07462 07463 /* PCI device subclasses for class 6 (bridge device)*/ 07464 #define PCI_SUBCLASS_BR_HOST 0x00 07465 #define PCI_SUBCLASS_BR_ISA 0x01 07466 #define PCI_SUBCLASS_BR_EISA 0x02 07467 #define PCI_SUBCLASS_BR_MCA 0x03 07468 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 07469 #define PCI_SUBCLASS_BR_PCMCIA 0x05 07470 #define PCI_SUBCLASS_BR_NUBUS 0x06 07471 #define PCI_SUBCLASS_BR_CARDBUS 0x07 07472 #define PCI_SUBCLASS_BR_RACEWAY 0x08 07473 #define PCI_SUBCLASS_BR_OTHER 0x80 07474 07475 #define PCI_SUBCLASS_COM_SERIAL 0x00 07476 #define PCI_SUBCLASS_COM_PARALLEL 0x01 07477 #define PCI_SUBCLASS_COM_MULTIPORT 0x02 07478 #define PCI_SUBCLASS_COM_MODEM 0x03 07479 #define PCI_SUBCLASS_COM_OTHER 0x80 07480 07481 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00 07482 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01 07483 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02 07484 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03 07485 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04 07486 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05 07487 #define PCI_SUBCLASS_SYS_OTHER 0x80 07488 07489 #define PCI_SUBCLASS_INP_KEYBOARD 0x00 07490 #define PCI_SUBCLASS_INP_DIGITIZER 0x01 07491 #define PCI_SUBCLASS_INP_MOUSE 0x02 07492 #define PCI_SUBCLASS_INP_SCANNER 0x03 07493 #define PCI_SUBCLASS_INP_GAMEPORT 0x04 07494 #define PCI_SUBCLASS_INP_OTHER 0x80 07495 07496 #define PCI_SUBCLASS_DOC_GENERIC 0x00 07497 #define PCI_SUBCLASS_DOC_OTHER 0x80 07498 07499 #define PCI_SUBCLASS_PROC_386 0x00 07500 #define PCI_SUBCLASS_PROC_486 0x01 07501 #define PCI_SUBCLASS_PROC_PENTIUM 0x02 07502 #define PCI_SUBCLASS_PROC_ALPHA 0x10 07503 #define PCI_SUBCLASS_PROC_POWERPC 0x20 07504 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40 07505 07506 /* PCI device subclasses for class C (serial bus controller)*/ 07507 #define PCI_SUBCLASS_SB_IEEE1394 0x00 07508 #define PCI_SUBCLASS_SB_ACCESS 0x01 07509 #define PCI_SUBCLASS_SB_SSA 0x02 07510 #define PCI_SUBCLASS_SB_USB 0x03 07511 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 07512 #define PCI_SUBCLASS_SB_SMBUS 0x05 07513 07514 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00 07515 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01 07516 #define PCI_SUBCLASS_WIRELESS_RF 0x10 07517 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80 07518 07519 #define PCI_SUBCLASS_INTIO_I2O 0x00 07520 07521 #define PCI_SUBCLASS_SAT_TV 0x01 07522 #define PCI_SUBCLASS_SAT_AUDIO 0x02 07523 #define PCI_SUBCLASS_SAT_VOICE 0x03 07524 #define PCI_SUBCLASS_SAT_DATA 0x04 07525 07526 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00 07527 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10 07528 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80 07529 07530 #define PCI_SUBCLASS_DASP_DPIO 0x00 07531 #define PCI_SUBCLASS_DASP_OTHER 0x80 07532 07533 #define PCI_ADDRESS_IO_SPACE 0x00000001 07534 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 07535 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 07536 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc 07537 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 07538 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 07539 07540 #define PCI_TYPE_32BIT 0 07541 #define PCI_TYPE_20BIT 2 07542 #define PCI_TYPE_64BIT 4 07543 07544 #define PCI_ROMADDRESS_ENABLED 0x00000001 07545 07546 #endif /* _PCI_X_ */ 07547 07548 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1 07549 07550 _IRQL_requires_max_(PASSIVE_LEVEL) 07551 _Must_inspect_result_ 07552 typedef NTSTATUS 07553 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( 07554 _Inout_ PVOID Context); 07555 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE; 07556 07557 _IRQL_requires_max_(PASSIVE_LEVEL) 07558 _Must_inspect_result_ 07559 typedef NTSTATUS 07560 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( 07561 _Inout_ PVOID Context); 07562 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE; 07563 07564 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { 07565 USHORT Size; 07566 USHORT Version; 07567 PVOID Context; 07568 PINTERFACE_REFERENCE InterfaceReference; 07569 PINTERFACE_DEREFERENCE InterfaceDereference; 07570 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode; 07571 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode; 07572 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE; 07573 07574 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1 07575 07576 typedef ULONG 07577 (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( 07578 _In_ PVOID Context, 07579 _Out_writes_bytes_(Length) PVOID Buffer, 07580 _In_ ULONG Offset, 07581 _In_ ULONG Length); 07582 07583 typedef ULONG 07584 (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( 07585 _In_ PVOID Context, 07586 _In_reads_bytes_(Length) PVOID Buffer, 07587 _In_ ULONG Offset, 07588 _In_ ULONG Length); 07589 07590 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { 07591 USHORT Size; 07592 USHORT Version; 07593 PVOID Context; 07594 PINTERFACE_REFERENCE InterfaceReference; 07595 PINTERFACE_DEREFERENCE InterfaceDereference; 07596 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace; 07597 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace; 07598 } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE; 07599 07600 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1 07601 07602 _Must_inspect_result_ 07603 typedef NTSTATUS 07604 (NTAPI PCI_MSIX_SET_ENTRY)( 07605 _In_ PVOID Context, 07606 _In_ ULONG TableEntry, 07607 _In_ ULONG MessageNumber); 07608 typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY; 07609 07610 _Must_inspect_result_ 07611 typedef NTSTATUS 07612 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( 07613 _In_ PVOID Context, 07614 _In_ ULONG TableEntry); 07615 typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY; 07616 07617 _Must_inspect_result_ 07618 typedef NTSTATUS 07619 (NTAPI PCI_MSIX_GET_ENTRY)( 07620 _In_ PVOID Context, 07621 _In_ ULONG TableEntry, 07622 _Out_ PULONG MessageNumber, 07623 _Out_ PBOOLEAN Masked); 07624 typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY; 07625 07626 _Must_inspect_result_ 07627 typedef NTSTATUS 07628 (NTAPI PCI_MSIX_GET_TABLE_SIZE)( 07629 _In_ PVOID Context, 07630 _Out_ PULONG TableSize); 07631 typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE; 07632 07633 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE { 07634 USHORT Size; 07635 USHORT Version; 07636 PVOID Context; 07637 PINTERFACE_REFERENCE InterfaceReference; 07638 PINTERFACE_DEREFERENCE InterfaceDereference; 07639 PPCI_MSIX_SET_ENTRY SetTableEntry; 07640 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry; 07641 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry; 07642 PPCI_MSIX_GET_ENTRY GetTableEntry; 07643 PPCI_MSIX_GET_TABLE_SIZE GetTableSize; 07644 } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE; 07645 07646 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \ 07647 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry) 07648 07649 /****************************************************************************** 07650 * Object Manager Types * 07651 ******************************************************************************/ 07652 07653 #define MAXIMUM_FILENAME_LENGTH 256 07654 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') 07655 07656 #define OBJECT_TYPE_CREATE 0x0001 07657 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) 07658 07659 #define DIRECTORY_QUERY 0x0001 07660 #define DIRECTORY_TRAVERSE 0x0002 07661 #define DIRECTORY_CREATE_OBJECT 0x0004 07662 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008 07663 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) 07664 07665 #define SYMBOLIC_LINK_QUERY 0x0001 07666 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) 07667 07668 #define DUPLICATE_CLOSE_SOURCE 0x00000001 07669 #define DUPLICATE_SAME_ACCESS 0x00000002 07670 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 07671 07672 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100 07673 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100 07674 07675 typedef ULONG OB_OPERATION; 07676 07677 #define OB_OPERATION_HANDLE_CREATE 0x00000001 07678 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002 07679 07680 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION { 07681 _Inout_ ACCESS_MASK DesiredAccess; 07682 _In_ ACCESS_MASK OriginalDesiredAccess; 07683 } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION; 07684 07685 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION { 07686 _Inout_ ACCESS_MASK DesiredAccess; 07687 _In_ ACCESS_MASK OriginalDesiredAccess; 07688 _In_ PVOID SourceProcess; 07689 _In_ PVOID TargetProcess; 07690 } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION; 07691 07692 typedef union _OB_PRE_OPERATION_PARAMETERS { 07693 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation; 07694 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; 07695 } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS; 07696 07697 typedef struct _OB_PRE_OPERATION_INFORMATION { 07698 _In_ OB_OPERATION Operation; 07699 _ANONYMOUS_UNION union { 07700 _In_ ULONG Flags; 07701 _ANONYMOUS_STRUCT struct { 07702 _In_ ULONG KernelHandle:1; 07703 _In_ ULONG Reserved:31; 07704 } DUMMYSTRUCTNAME; 07705 } DUMMYUNIONNAME; 07706 _In_ PVOID Object; 07707 _In_ POBJECT_TYPE ObjectType; 07708 _Out_ PVOID CallContext; 07709 _In_ POB_PRE_OPERATION_PARAMETERS Parameters; 07710 } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION; 07711 07712 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION { 07713 _In_ ACCESS_MASK GrantedAccess; 07714 } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION; 07715 07716 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION { 07717 _In_ ACCESS_MASK GrantedAccess; 07718 } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION; 07719 07720 typedef union _OB_POST_OPERATION_PARAMETERS { 07721 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation; 07722 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; 07723 } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS; 07724 07725 typedef struct _OB_POST_OPERATION_INFORMATION { 07726 _In_ OB_OPERATION Operation; 07727 _ANONYMOUS_UNION union { 07728 _In_ ULONG Flags; 07729 _ANONYMOUS_STRUCT struct { 07730 _In_ ULONG KernelHandle:1; 07731 _In_ ULONG Reserved:31; 07732 } DUMMYSTRUCTNAME; 07733 } DUMMYUNIONNAME; 07734 _In_ PVOID Object; 07735 _In_ POBJECT_TYPE ObjectType; 07736 _In_ PVOID CallContext; 07737 _In_ NTSTATUS ReturnStatus; 07738 _In_ POB_POST_OPERATION_PARAMETERS Parameters; 07739 } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION; 07740 07741 typedef enum _OB_PREOP_CALLBACK_STATUS { 07742 OB_PREOP_SUCCESS 07743 } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS; 07744 07745 typedef OB_PREOP_CALLBACK_STATUS 07746 (NTAPI *POB_PRE_OPERATION_CALLBACK)( 07747 _In_ PVOID RegistrationContext, 07748 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation); 07749 07750 typedef VOID 07751 (NTAPI *POB_POST_OPERATION_CALLBACK)( 07752 _In_ PVOID RegistrationContext, 07753 _In_ POB_POST_OPERATION_INFORMATION OperationInformation); 07754 07755 typedef struct _OB_OPERATION_REGISTRATION { 07756 _In_ POBJECT_TYPE *ObjectType; 07757 _In_ OB_OPERATION Operations; 07758 _In_ POB_PRE_OPERATION_CALLBACK PreOperation; 07759 _In_ POB_POST_OPERATION_CALLBACK PostOperation; 07760 } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION; 07761 07762 typedef struct _OB_CALLBACK_REGISTRATION { 07763 _In_ USHORT Version; 07764 _In_ USHORT OperationRegistrationCount; 07765 _In_ UNICODE_STRING Altitude; 07766 _In_ PVOID RegistrationContext; 07767 _In_ OB_OPERATION_REGISTRATION *OperationRegistration; 07768 } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION; 07769 07770 typedef struct _OBJECT_NAME_INFORMATION { 07771 UNICODE_STRING Name; 07772 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; 07773 07774 /* Exported object types */ 07775 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType; 07776 extern POBJECT_TYPE NTSYSAPI ExEventObjectType; 07777 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType; 07778 extern POBJECT_TYPE NTSYSAPI IoFileObjectType; 07779 extern POBJECT_TYPE NTSYSAPI PsThreadType; 07780 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType; 07781 extern POBJECT_TYPE NTSYSAPI PsProcessType; 07782 07783 07784 /****************************************************************************** 07785 * Process Manager Types * 07786 ******************************************************************************/ 07787 07788 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 07789 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 07790 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 07791 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 07792 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 07793 07794 /* Thread Access Rights */ 07795 #define THREAD_TERMINATE 0x0001 07796 #define THREAD_SUSPEND_RESUME 0x0002 07797 #define THREAD_ALERT 0x0004 07798 #define THREAD_GET_CONTEXT 0x0008 07799 #define THREAD_SET_CONTEXT 0x0010 07800 #define THREAD_SET_INFORMATION 0x0020 07801 #define THREAD_SET_LIMITED_INFORMATION 0x0400 07802 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800 07803 07804 #define PROCESS_DUP_HANDLE (0x0040) 07805 07806 #if (NTDDI_VERSION >= NTDDI_VISTA) 07807 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) 07808 #else 07809 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) 07810 #endif 07811 07812 #if (NTDDI_VERSION >= NTDDI_VISTA) 07813 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) 07814 #else 07815 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) 07816 #endif 07817 07818 #define LOW_PRIORITY 0 07819 #define LOW_REALTIME_PRIORITY 16 07820 #define HIGH_PRIORITY 31 07821 #define MAXIMUM_PRIORITY 32 07822 07823 07824 /****************************************************************************** 07825 * WMI Library Support Types * 07826 ******************************************************************************/ 07827 07828 #ifdef RUN_WPP 07829 #include <evntrace.h> 07830 #include <stdarg.h> 07831 #endif 07832 07833 #ifndef _TRACEHANDLE_DEFINED 07834 #define _TRACEHANDLE_DEFINED 07835 typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; 07836 #endif 07837 07838 #ifndef TRACE_INFORMATION_CLASS_DEFINE 07839 07840 typedef struct _ETW_TRACE_SESSION_SETTINGS { 07841 ULONG Version; 07842 ULONG BufferSize; 07843 ULONG MinimumBuffers; 07844 ULONG MaximumBuffers; 07845 ULONG LoggerMode; 07846 ULONG FlushTimer; 07847 ULONG FlushThreshold; 07848 ULONG ClockType; 07849 } ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS; 07850 07851 typedef enum _TRACE_INFORMATION_CLASS { 07852 TraceIdClass, 07853 TraceHandleClass, 07854 TraceEnableFlagsClass, 07855 TraceEnableLevelClass, 07856 GlobalLoggerHandleClass, 07857 EventLoggerHandleClass, 07858 AllLoggerHandlesClass, 07859 TraceHandleByNameClass, 07860 LoggerEventsLostClass, 07861 TraceSessionSettingsClass, 07862 LoggerEventsLoggedClass, 07863 MaxTraceInformationClass 07864 } TRACE_INFORMATION_CLASS; 07865 07866 #endif /* TRACE_INFORMATION_CLASS_DEFINE */ 07867 07868 #ifndef _ETW_KM_ 07869 #define _ETW_KM_ 07870 #endif 07871 07872 #include <evntprov.h> 07873 07874 _IRQL_requires_same_ 07875 typedef VOID 07876 (NTAPI *PETWENABLECALLBACK)( 07877 _In_ LPCGUID SourceId, 07878 _In_ ULONG ControlCode, 07879 _In_ UCHAR Level, 07880 _In_ ULONGLONG MatchAnyKeyword, 07881 _In_ ULONGLONG MatchAllKeyword, 07882 _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, 07883 _Inout_opt_ PVOID CallbackContext); 07884 07885 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001 07886 07887 07888 /****************************************************************************** 07889 * Runtime Library Functions * 07890 ******************************************************************************/ 07891 07892 07893 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) 07894 07895 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x } 07896 07897 FORCEINLINE 07898 VOID 07899 InitializeListHead( 07900 _Out_ PLIST_ENTRY ListHead) 07901 { 07902 ListHead->Flink = ListHead->Blink = ListHead; 07903 } 07904 07905 _Must_inspect_result_ 07906 FORCEINLINE 07907 BOOLEAN 07908 IsListEmpty( 07909 _In_ const LIST_ENTRY * ListHead) 07910 { 07911 return (BOOLEAN)(ListHead->Flink == ListHead); 07912 } 07913 07914 FORCEINLINE 07915 BOOLEAN 07916 RemoveEntryList( 07917 _In_ PLIST_ENTRY Entry) 07918 { 07919 PLIST_ENTRY OldFlink; 07920 PLIST_ENTRY OldBlink; 07921 07922 OldFlink = Entry->Flink; 07923 OldBlink = Entry->Blink; 07924 OldFlink->Blink = OldBlink; 07925 OldBlink->Flink = OldFlink; 07926 return (BOOLEAN)(OldFlink == OldBlink); 07927 } 07928 07929 FORCEINLINE 07930 PLIST_ENTRY 07931 RemoveHeadList( 07932 _Inout_ PLIST_ENTRY ListHead) 07933 { 07934 PLIST_ENTRY Flink; 07935 PLIST_ENTRY Entry; 07936 07937 Entry = ListHead->Flink; 07938 Flink = Entry->Flink; 07939 ListHead->Flink = Flink; 07940 Flink->Blink = ListHead; 07941 return Entry; 07942 } 07943 07944 FORCEINLINE 07945 PLIST_ENTRY 07946 RemoveTailList( 07947 _Inout_ PLIST_ENTRY ListHead) 07948 { 07949 PLIST_ENTRY Blink; 07950 PLIST_ENTRY Entry; 07951 07952 Entry = ListHead->Blink; 07953 Blink = Entry->Blink; 07954 ListHead->Blink = Blink; 07955 Blink->Flink = ListHead; 07956 return Entry; 07957 } 07958 07959 FORCEINLINE 07960 VOID 07961 InsertTailList( 07962 _Inout_ PLIST_ENTRY ListHead, 07963 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry) 07964 { 07965 PLIST_ENTRY OldBlink; 07966 OldBlink = ListHead->Blink; 07967 Entry->Flink = ListHead; 07968 Entry->Blink = OldBlink; 07969 OldBlink->Flink = Entry; 07970 ListHead->Blink = Entry; 07971 } 07972 07973 FORCEINLINE 07974 VOID 07975 InsertHeadList( 07976 _Inout_ PLIST_ENTRY ListHead, 07977 _Inout_ __drv_aliasesMem PLIST_ENTRY Entry) 07978 { 07979 PLIST_ENTRY OldFlink; 07980 OldFlink = ListHead->Flink; 07981 Entry->Flink = OldFlink; 07982 Entry->Blink = ListHead; 07983 OldFlink->Blink = Entry; 07984 ListHead->Flink = Entry; 07985 } 07986 07987 FORCEINLINE 07988 VOID 07989 AppendTailList( 07990 _Inout_ PLIST_ENTRY ListHead, 07991 _Inout_ PLIST_ENTRY ListToAppend) 07992 { 07993 PLIST_ENTRY ListEnd = ListHead->Blink; 07994 07995 ListHead->Blink->Flink = ListToAppend; 07996 ListHead->Blink = ListToAppend->Blink; 07997 ListToAppend->Blink->Flink = ListHead; 07998 ListToAppend->Blink = ListEnd; 07999 } 08000 08001 FORCEINLINE 08002 PSINGLE_LIST_ENTRY 08003 PopEntryList( 08004 _Inout_ PSINGLE_LIST_ENTRY ListHead) 08005 { 08006 PSINGLE_LIST_ENTRY FirstEntry; 08007 FirstEntry = ListHead->Next; 08008 if (FirstEntry != NULL) { 08009 ListHead->Next = FirstEntry->Next; 08010 } 08011 return FirstEntry; 08012 } 08013 08014 FORCEINLINE 08015 VOID 08016 PushEntryList( 08017 _Inout_ PSINGLE_LIST_ENTRY ListHead, 08018 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry) 08019 { 08020 Entry->Next = ListHead->Next; 08021 ListHead->Next = Entry; 08022 } 08023 08024 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ 08025 08026 __analysis_noreturn 08027 NTSYSAPI 08028 VOID 08029 NTAPI 08030 RtlAssert( 08031 _In_ PVOID FailedAssertion, 08032 _In_ PVOID FileName, 08033 _In_ ULONG LineNumber, 08034 _In_opt_ PSTR Message); 08035 08036 /* VOID 08037 * RtlCopyMemory( 08038 * IN VOID UNALIGNED *Destination, 08039 * IN CONST VOID UNALIGNED *Source, 08040 * IN SIZE_T Length) 08041 */ 08042 #define RtlCopyMemory(Destination, Source, Length) \ 08043 memcpy(Destination, Source, Length) 08044 08045 #define RtlCopyBytes RtlCopyMemory 08046 08047 #if defined(_M_AMD64) 08048 NTSYSAPI 08049 VOID 08050 NTAPI 08051 RtlCopyMemoryNonTemporal( 08052 _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination, 08053 _In_reads_bytes_(Length) const VOID UNALIGNED *Source, 08054 _In_ SIZE_T Length); 08055 #else 08056 #define RtlCopyMemoryNonTemporal RtlCopyMemory 08057 #endif 08058 08059 /* BOOLEAN 08060 * RtlEqualLuid( 08061 * IN PLUID Luid1, 08062 * IN PLUID Luid2) 08063 */ 08064 #define RtlEqualLuid(Luid1, Luid2) \ 08065 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart)) 08066 08067 /* LOGICAL 08068 * RtlEqualMemory( 08069 * IN VOID UNALIGNED *Destination, 08070 * IN CONST VOID UNALIGNED *Source, 08071 * IN SIZE_T Length) 08072 */ 08073 #define RtlEqualMemory(Destination, Source, Length) \ 08074 (!memcmp(Destination, Source, Length)) 08075 08076 /* VOID 08077 * RtlFillMemory( 08078 * IN VOID UNALIGNED *Destination, 08079 * IN SIZE_T Length, 08080 * IN UCHAR Fill) 08081 */ 08082 #define RtlFillMemory(Destination, Length, Fill) \ 08083 memset(Destination, Fill, Length) 08084 08085 #define RtlFillBytes RtlFillMemory 08086 08087 _IRQL_requires_max_(PASSIVE_LEVEL) 08088 NTSYSAPI 08089 VOID 08090 NTAPI 08091 RtlFreeUnicodeString( 08092 _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem)) 08093 PUNICODE_STRING UnicodeString); 08094 08095 _IRQL_requires_max_(PASSIVE_LEVEL) 08096 _Must_inspect_result_ 08097 NTSYSAPI 08098 NTSTATUS 08099 NTAPI 08100 RtlGUIDFromString( 08101 _In_ PUNICODE_STRING GuidString, 08102 _Out_ GUID *Guid); 08103 08104 _IRQL_requires_max_(DISPATCH_LEVEL) 08105 _At_(DestinationString->Buffer, _Post_equal_to_(SourceString)) 08106 //_At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR))) 08107 _At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))) 08108 NTSYSAPI 08109 VOID 08110 NTAPI 08111 RtlInitUnicodeString( 08112 _Out_ PUNICODE_STRING DestinationString, 08113 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString); 08114 08115 /* VOID 08116 * RtlMoveMemory( 08117 * IN VOID UNALIGNED *Destination, 08118 * IN CONST VOID UNALIGNED *Source, 08119 * IN SIZE_T Length) 08120 */ 08121 #define RtlMoveMemory(Destination, Source, Length) \ 08122 memmove(Destination, Source, Length) 08123 08124 _IRQL_requires_max_(PASSIVE_LEVEL) 08125 _Must_inspect_result_ 08126 NTSYSAPI 08127 NTSTATUS 08128 NTAPI 08129 RtlStringFromGUID( 08130 _In_ REFGUID Guid, 08131 _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem)) 08132 PUNICODE_STRING GuidString); 08133 08134 /* VOID 08135 * RtlZeroMemory( 08136 * IN VOID UNALIGNED *Destination, 08137 * IN SIZE_T Length) 08138 */ 08139 #define RtlZeroMemory(Destination, Length) \ 08140 memset(Destination, 0, Length) 08141 08142 #define RtlZeroBytes RtlZeroMemory 08143 08144 #if (NTDDI_VERSION >= NTDDI_WIN2K) 08145 08146 _Must_inspect_result_ 08147 NTSYSAPI 08148 BOOLEAN 08149 NTAPI 08150 RtlAreBitsClear( 08151 _In_ PRTL_BITMAP BitMapHeader, 08152 _In_ ULONG StartingIndex, 08153 _In_ ULONG Length); 08154 08155 _Must_inspect_result_ 08156 NTSYSAPI 08157 BOOLEAN 08158 NTAPI 08159 RtlAreBitsSet( 08160 _In_ PRTL_BITMAP BitMapHeader, 08161 _In_ ULONG StartingIndex, 08162 _In_ ULONG Length); 08163 08164 _IRQL_requires_max_(PASSIVE_LEVEL) 08165 _Must_inspect_result_ 08166 NTSYSAPI 08167 NTSTATUS 08168 NTAPI 08169 RtlAnsiStringToUnicodeString( 08170 _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) 08171 _When_(!AllocateDestinationString, _Inout_) 08172 PUNICODE_STRING DestinationString, 08173 _In_ PANSI_STRING SourceString, 08174 _In_ BOOLEAN AllocateDestinationString); 08175 08176 _IRQL_requires_max_(PASSIVE_LEVEL) 08177 NTSYSAPI 08178 ULONG 08179 NTAPI 08180 RtlxAnsiStringToUnicodeSize( 08181 _In_ PCANSI_STRING AnsiString); 08182 08183 #define RtlAnsiStringToUnicodeSize(String) ( \ 08184 NLS_MB_CODE_PAGE_TAG ? \ 08185 RtlxAnsiStringToUnicodeSize(String) : \ 08186 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ 08187 ) 08188 08189 _Success_(1) 08190 _Unchanged_(Destination->MaximumLength) 08191 _Unchanged_(Destination->Buffer) 08192 _When_(_Old_(Destination->Length) + Source->Length <= Destination->MaximumLength, 08193 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + Source->Length)) 08194 _At_(return, _Out_range_(==, 0))) 08195 _When_(_Old_(Destination->Length) + Source->Length > Destination->MaximumLength, 08196 _Unchanged_(Destination->Length) 08197 _At_(return, _Out_range_(<, 0))) 08198 NTSYSAPI 08199 NTSTATUS 08200 NTAPI 08201 RtlAppendUnicodeStringToString( 08202 _Inout_ PUNICODE_STRING Destination, 08203 _In_ PCUNICODE_STRING Source); 08204 08205 _Success_(1) 08206 _Unchanged_(Destination->MaximumLength) 08207 _Unchanged_(Destination->Buffer) 08208 /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength, 08209 _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR))) 08210 _At_(return, _Out_range_(==, 0))) 08211 _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength, 08212 _Unchanged_(Destination->Length) 08213 _At_(return, _Out_range_(<, 0))) */ 08214 NTSYSAPI 08215 NTSTATUS 08216 NTAPI 08217 RtlAppendUnicodeToString( 08218 _Inout_ PUNICODE_STRING Destination, 08219 _In_opt_z_ PCWSTR Source); 08220 08221 _IRQL_requires_max_(PASSIVE_LEVEL) 08222 _Must_inspect_result_ 08223 NTSYSAPI 08224 NTSTATUS 08225 NTAPI 08226 RtlCheckRegistryKey( 08227 _In_ ULONG RelativeTo, 08228 _In_ PWSTR Path); 08229 08230 NTSYSAPI 08231 VOID 08232 NTAPI 08233 RtlClearAllBits( 08234 _In_ PRTL_BITMAP BitMapHeader); 08235 08236 NTSYSAPI 08237 VOID 08238 NTAPI 08239 RtlClearBits( 08240 _In_ PRTL_BITMAP BitMapHeader, 08241 _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear) ULONG StartingIndex, 08242 _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToClear); 08243 08244 _Must_inspect_result_ 08245 NTSYSAPI 08246 SIZE_T 08247 NTAPI 08248 RtlCompareMemory( 08249 _In_ const VOID *Source1, 08250 _In_ const VOID *Source2, 08251 _In_ SIZE_T Length); 08252 08253 _IRQL_requires_max_(PASSIVE_LEVEL) 08254 _Must_inspect_result_ 08255 NTSYSAPI 08256 LONG 08257 NTAPI 08258 RtlCompareUnicodeString( 08259 _In_ PCUNICODE_STRING String1, 08260 _In_ PCUNICODE_STRING String2, 08261 _In_ BOOLEAN CaseInSensitive); 08262 08263 _IRQL_requires_max_(PASSIVE_LEVEL) 08264 _Must_inspect_result_ 08265 NTSYSAPI 08266 LONG 08267 NTAPI 08268 RtlCompareUnicodeStrings( 08269 _In_reads_(String1Length) PCWCH String1, 08270 _In_ SIZE_T String1Length, 08271 _In_reads_(String2Length) PCWCH String2, 08272 _In_ SIZE_T String2Length, 08273 _In_ BOOLEAN CaseInSensitive); 08274 08275 _Unchanged_(DestinationString->Buffer) 08276 _Unchanged_(DestinationString->MaximumLength) 08277 _At_(DestinationString->Length, 08278 _When_(SourceString->Length > DestinationString->MaximumLength, 08279 _Post_equal_to_(DestinationString->MaximumLength)) 08280 _When_(SourceString->Length <= DestinationString->MaximumLength, 08281 _Post_equal_to_(SourceString->Length))) 08282 NTSYSAPI 08283 VOID 08284 NTAPI 08285 RtlCopyUnicodeString( 08286 _Inout_ PUNICODE_STRING DestinationString, 08287 _In_opt_ PCUNICODE_STRING SourceString); 08288 08289 _IRQL_requires_max_(PASSIVE_LEVEL) 08290 NTSYSAPI 08291 NTSTATUS 08292 NTAPI 08293 RtlCreateRegistryKey( 08294 _In_ ULONG RelativeTo, 08295 _In_ PWSTR Path); 08296 08297 _IRQL_requires_max_(APC_LEVEL) 08298 NTSYSAPI 08299 NTSTATUS 08300 NTAPI 08301 RtlCreateSecurityDescriptor( 08302 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, 08303 _In_ ULONG Revision); 08304 08305 _IRQL_requires_max_(PASSIVE_LEVEL) 08306 NTSYSAPI 08307 NTSTATUS 08308 NTAPI 08309 RtlDeleteRegistryValue( 08310 _In_ ULONG RelativeTo, 08311 _In_ PCWSTR Path, 08312 _In_z_ PCWSTR ValueName); 08313 08314 _IRQL_requires_max_(PASSIVE_LEVEL) 08315 _Must_inspect_result_ 08316 NTSYSAPI 08317 BOOLEAN 08318 NTAPI 08319 RtlEqualUnicodeString( 08320 _In_ CONST UNICODE_STRING *String1, 08321 _In_ CONST UNICODE_STRING *String2, 08322 _In_ BOOLEAN CaseInSensitive); 08323 08324 #if !defined(_AMD64_) && !defined(_IA64_) 08325 NTSYSAPI 08326 LARGE_INTEGER 08327 NTAPI 08328 RtlExtendedIntegerMultiply( 08329 _In_ LARGE_INTEGER Multiplicand, 08330 _In_ LONG Multiplier); 08331 08332 NTSYSAPI 08333 LARGE_INTEGER 08334 NTAPI 08335 RtlExtendedLargeIntegerDivide( 08336 _In_ LARGE_INTEGER Dividend, 08337 _In_ ULONG Divisor, 08338 _Out_opt_ PULONG Remainder); 08339 #endif 08340 08341 #if defined(_X86_) || defined(_IA64_) 08342 NTSYSAPI 08343 LARGE_INTEGER 08344 NTAPI 08345 RtlExtendedMagicDivide( 08346 _In_ LARGE_INTEGER Dividend, 08347 _In_ LARGE_INTEGER MagicDivisor, 08348 _In_ CCHAR ShiftCount); 08349 #endif 08350 08351 _IRQL_requires_max_(PASSIVE_LEVEL) 08352 NTSYSAPI 08353 VOID 08354 NTAPI 08355 RtlFreeAnsiString( 08356 _Inout_ _At_(AnsiString->Buffer, __drv_freesMem(Mem)) 08357 PANSI_STRING AnsiString); 08358 08359 _Success_(return != -1) 08360 _Must_inspect_result_ 08361 NTSYSAPI 08362 ULONG 08363 NTAPI 08364 RtlFindClearBits( 08365 _In_ PRTL_BITMAP BitMapHeader, 08366 _In_ ULONG NumberToFind, 08367 _In_ ULONG HintIndex); 08368 08369 _Success_(return != -1) 08370 NTSYSAPI 08371 ULONG 08372 NTAPI 08373 RtlFindClearBitsAndSet( 08374 _In_ PRTL_BITMAP BitMapHeader, 08375 _In_ ULONG NumberToFind, 08376 _In_ ULONG HintIndex); 08377 08378 NTSYSAPI 08379 ULONG 08380 NTAPI 08381 RtlFindFirstRunClear( 08382 _In_ PRTL_BITMAP BitMapHeader, 08383 _Out_ PULONG StartingIndex); 08384 08385 NTSYSAPI 08386 ULONG 08387 NTAPI 08388 RtlFindClearRuns( 08389 _In_ PRTL_BITMAP BitMapHeader, 08390 _Out_writes_to_(SizeOfRunArray, return) PRTL_BITMAP_RUN RunArray, 08391 _In_range_(>, 0) ULONG SizeOfRunArray, 08392 _In_ BOOLEAN LocateLongestRuns); 08393 08394 NTSYSAPI 08395 ULONG 08396 NTAPI 08397 RtlFindLastBackwardRunClear( 08398 _In_ PRTL_BITMAP BitMapHeader, 08399 _In_ ULONG FromIndex, 08400 _Out_ PULONG StartingRunIndex); 08401 08402 _Success_(return != -1) 08403 _Must_inspect_result_ 08404 NTSYSAPI 08405 CCHAR 08406 NTAPI 08407 RtlFindLeastSignificantBit( 08408 _In_ ULONGLONG Set); 08409 08410 NTSYSAPI 08411 ULONG 08412 NTAPI 08413 RtlFindLongestRunClear( 08414 _In_ PRTL_BITMAP BitMapHeader, 08415 _Out_ PULONG StartingIndex); 08416 08417 _Success_(return != -1) 08418 _Must_inspect_result_ 08419 NTSYSAPI 08420 CCHAR 08421 NTAPI 08422 RtlFindMostSignificantBit( 08423 _In_ ULONGLONG Set); 08424 08425 NTSYSAPI 08426 ULONG 08427 NTAPI 08428 RtlFindNextForwardRunClear( 08429 _In_ PRTL_BITMAP BitMapHeader, 08430 _In_ ULONG FromIndex, 08431 _Out_ PULONG StartingRunIndex); 08432 08433 _Success_(return != -1) 08434 _Must_inspect_result_ 08435 NTSYSAPI 08436 ULONG 08437 NTAPI 08438 RtlFindSetBits( 08439 _In_ PRTL_BITMAP BitMapHeader, 08440 _In_ ULONG NumberToFind, 08441 _In_ ULONG HintIndex); 08442 08443 _Success_(return != -1) 08444 NTSYSAPI 08445 ULONG 08446 NTAPI 08447 RtlFindSetBitsAndClear( 08448 _In_ PRTL_BITMAP BitMapHeader, 08449 _In_ ULONG NumberToFind, 08450 _In_ ULONG HintIndex); 08451 08452 _IRQL_requires_max_(DISPATCH_LEVEL) 08453 NTSYSAPI 08454 VOID 08455 NTAPI 08456 RtlInitAnsiString( 08457 _Out_ PANSI_STRING DestinationString, 08458 _In_opt_z_ __drv_aliasesMem PCSZ SourceString); 08459 08460 NTSYSAPI 08461 VOID 08462 NTAPI 08463 RtlInitializeBitMap( 08464 _Out_ PRTL_BITMAP BitMapHeader, 08465 _In_ __drv_aliasesMem PULONG BitMapBuffer, 08466 _In_ ULONG SizeOfBitMap); 08467 08468 _IRQL_requires_max_(DISPATCH_LEVEL) 08469 NTSYSAPI 08470 VOID 08471 NTAPI 08472 RtlInitString( 08473 _Out_ PSTRING DestinationString, 08474 _In_opt_z_ __drv_aliasesMem PCSZ SourceString); 08475 08476 _IRQL_requires_max_(PASSIVE_LEVEL) 08477 _At_(String->MaximumLength, _Const_) 08478 NTSYSAPI 08479 NTSTATUS 08480 NTAPI 08481 RtlIntegerToUnicodeString( 08482 _In_ ULONG Value, 08483 _In_opt_ ULONG Base, 08484 _Inout_ PUNICODE_STRING String); 08485 08486 _IRQL_requires_max_(PASSIVE_LEVEL) 08487 _At_(String->MaximumLength, _Const_) 08488 NTSYSAPI 08489 NTSTATUS 08490 NTAPI 08491 RtlInt64ToUnicodeString( 08492 _In_ ULONGLONG Value, 08493 _In_opt_ ULONG Base, 08494 _Inout_ PUNICODE_STRING String); 08495 08496 #ifdef _WIN64 08497 #define RtlIntPtrToUnicodeString(Value, Base, String) \ 08498 RtlInt64ToUnicodeString(Value, Base, String) 08499 #else 08500 #define RtlIntPtrToUnicodeString(Value, Base, String) \ 08501 RtlIntegerToUnicodeString(Value, Base, String) 08502 #endif 08503 08504 /* BOOLEAN 08505 * RtlIsZeroLuid( 08506 * IN PLUID L1); 08507 */ 08508 #define RtlIsZeroLuid(_L1) \ 08509 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart))) 08510 08511 _IRQL_requires_max_(APC_LEVEL) 08512 NTSYSAPI 08513 ULONG 08514 NTAPI 08515 RtlLengthSecurityDescriptor( 08516 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); 08517 08518 NTSYSAPI 08519 ULONG 08520 NTAPI 08521 RtlNumberOfClearBits( 08522 _In_ PRTL_BITMAP BitMapHeader); 08523 08524 NTSYSAPI 08525 ULONG 08526 NTAPI 08527 RtlNumberOfSetBits( 08528 _In_ PRTL_BITMAP BitMapHeader); 08529 08530 _IRQL_requires_max_(PASSIVE_LEVEL) 08531 NTSYSAPI 08532 NTSTATUS 08533 NTAPI 08534 RtlQueryRegistryValues( 08535 _In_ ULONG RelativeTo, 08536 _In_ PCWSTR Path, 08537 _Inout_ _At_(*(*QueryTable).EntryContext, _Post_valid_) 08538 PRTL_QUERY_REGISTRY_TABLE QueryTable, 08539 _In_opt_ PVOID Context, 08540 _In_opt_ PVOID Environment); 08541 08542 #define SHORT_SIZE (sizeof(USHORT)) 08543 #define SHORT_MASK (SHORT_SIZE - 1) 08544 #define LONG_SIZE (sizeof(LONG)) 08545 #define LONGLONG_SIZE (sizeof(LONGLONG)) 08546 #define LONG_MASK (LONG_SIZE - 1) 08547 #define LONGLONG_MASK (LONGLONG_SIZE - 1) 08548 #define LOWBYTE_MASK 0x00FF 08549 08550 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK) 08551 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK) 08552 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK) 08553 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK) 08554 08555 NTSYSAPI 08556 VOID 08557 NTAPI 08558 RtlSetAllBits( 08559 _In_ PRTL_BITMAP BitMapHeader); 08560 08561 NTSYSAPI 08562 VOID 08563 NTAPI 08564 RtlSetBits( 08565 _In_ PRTL_BITMAP BitMapHeader, 08566 _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet) ULONG StartingIndex, 08567 _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToSet); 08568 08569 _IRQL_requires_max_(APC_LEVEL) 08570 NTSYSAPI 08571 NTSTATUS 08572 NTAPI 08573 RtlSetDaclSecurityDescriptor( 08574 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor, 08575 _In_ BOOLEAN DaclPresent, 08576 _In_opt_ PACL Dacl, 08577 _In_opt_ BOOLEAN DaclDefaulted); 08578 08579 #if defined(_AMD64_) 08580 08581 /* VOID 08582 * RtlStoreUlong( 08583 * IN PULONG Address, 08584 * IN ULONG Value); 08585 */ 08586 #define RtlStoreUlong(Address,Value) \ 08587 *(ULONG UNALIGNED *)(Address) = (Value) 08588 08589 /* VOID 08590 * RtlStoreUlonglong( 08591 * IN OUT PULONGLONG Address, 08592 * ULONGLONG Value); 08593 */ 08594 #define RtlStoreUlonglong(Address,Value) \ 08595 *(ULONGLONG UNALIGNED *)(Address) = (Value) 08596 08597 /* VOID 08598 * RtlStoreUshort( 08599 * IN PUSHORT Address, 08600 * IN USHORT Value); 08601 */ 08602 #define RtlStoreUshort(Address,Value) \ 08603 *(USHORT UNALIGNED *)(Address) = (Value) 08604 08605 /* VOID 08606 * RtlRetrieveUshort( 08607 * PUSHORT DestinationAddress, 08608 * PUSHORT SourceAddress); 08609 */ 08610 #define RtlRetrieveUshort(DestAddress,SrcAddress) \ 08611 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress) 08612 08613 /* VOID 08614 * RtlRetrieveUlong( 08615 * PULONG DestinationAddress, 08616 * PULONG SourceAddress); 08617 */ 08618 #define RtlRetrieveUlong(DestAddress,SrcAddress) \ 08619 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress) 08620 08621 #else 08622 08623 #define RtlStoreUlong(Address,Value) \ 08624 if ((ULONG_PTR)(Address) & LONG_MASK) { \ 08625 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ 08626 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \ 08627 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \ 08628 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \ 08629 } \ 08630 else { \ 08631 *((PULONG)(Address)) = (ULONG) (Value); \ 08632 } 08633 08634 #define RtlStoreUlonglong(Address,Value) \ 08635 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \ 08636 RtlStoreUlong((ULONG_PTR)(Address), \ 08637 (ULONGLONG)(Value) & 0xFFFFFFFF); \ 08638 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \ 08639 (ULONGLONG)(Value) >> 32); \ 08640 } else { \ 08641 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \ 08642 } 08643 08644 #define RtlStoreUshort(Address,Value) \ 08645 if ((ULONG_PTR)(Address) & SHORT_MASK) { \ 08646 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ 08647 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \ 08648 } \ 08649 else { \ 08650 *((PUSHORT) (Address)) = (USHORT)Value; \ 08651 } 08652 08653 #define RtlRetrieveUshort(DestAddress,SrcAddress) \ 08654 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ 08655 { \ 08656 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ 08657 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ 08658 } \ 08659 else \ 08660 { \ 08661 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \ 08662 } 08663 08664 #define RtlRetrieveUlong(DestAddress,SrcAddress) \ 08665 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ 08666 { \ 08667 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ 08668 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ 08669 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \ 08670 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \ 08671 } \ 08672 else \ 08673 { \ 08674 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \ 08675 } 08676 08677 #endif /* defined(_AMD64_) */ 08678 08679 #ifdef _WIN64 08680 /* VOID 08681 * RtlStoreUlongPtr( 08682 * IN OUT PULONG_PTR Address, 08683 * IN ULONG_PTR Value); 08684 */ 08685 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value) 08686 #else 08687 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value) 08688 #endif /* _WIN64 */ 08689 08690 _Success_(return != 0) 08691 NTSYSAPI 08692 BOOLEAN 08693 NTAPI 08694 RtlTimeFieldsToTime( 08695 _In_ PTIME_FIELDS TimeFields, 08696 _Out_ PLARGE_INTEGER Time); 08697 08698 NTSYSAPI 08699 VOID 08700 NTAPI 08701 RtlTimeToTimeFields( 08702 _In_ PLARGE_INTEGER Time, 08703 _Out_ PTIME_FIELDS TimeFields); 08704 08705 NTSYSAPI 08706 ULONG 08707 FASTCALL 08708 RtlUlongByteSwap( 08709 _In_ ULONG Source); 08710 08711 NTSYSAPI 08712 ULONGLONG 08713 FASTCALL 08714 RtlUlonglongByteSwap( 08715 _In_ ULONGLONG Source); 08716 08717 _When_(AllocateDestinationString, 08718 _At_(DestinationString->MaximumLength, 08719 _Out_range_(<=, (SourceString->MaximumLength / sizeof(WCHAR))))) 08720 _When_(!AllocateDestinationString, 08721 _At_(DestinationString->Buffer, _Const_) 08722 _At_(DestinationString->MaximumLength, _Const_)) 08723 _IRQL_requires_max_(PASSIVE_LEVEL) 08724 _When_(AllocateDestinationString, _Must_inspect_result_) 08725 NTSYSAPI 08726 NTSTATUS 08727 NTAPI 08728 RtlUnicodeStringToAnsiString( 08729 _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) 08730 _When_(!AllocateDestinationString, _Inout_) 08731 PANSI_STRING DestinationString, 08732 _In_ PCUNICODE_STRING SourceString, 08733 _In_ BOOLEAN AllocateDestinationString); 08734 08735 _IRQL_requires_max_(PASSIVE_LEVEL) 08736 NTSYSAPI 08737 ULONG 08738 NTAPI 08739 RtlxUnicodeStringToAnsiSize( 08740 _In_ PCUNICODE_STRING UnicodeString); 08741 08742 #define RtlUnicodeStringToAnsiSize(String) ( \ 08743 NLS_MB_CODE_PAGE_TAG ? \ 08744 RtlxUnicodeStringToAnsiSize(String) : \ 08745 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ 08746 ) 08747 08748 _IRQL_requires_max_(PASSIVE_LEVEL) 08749 NTSYSAPI 08750 NTSTATUS 08751 NTAPI 08752 RtlUnicodeStringToInteger( 08753 _In_ PCUNICODE_STRING String, 08754 _In_opt_ ULONG Base, 08755 _Out_ PULONG Value); 08756 08757 _IRQL_requires_max_(PASSIVE_LEVEL) 08758 NTSYSAPI 08759 WCHAR 08760 NTAPI 08761 RtlUpcaseUnicodeChar( 08762 _In_ WCHAR SourceCharacter); 08763 08764 NTSYSAPI 08765 USHORT 08766 FASTCALL 08767 RtlUshortByteSwap( 08768 _In_ USHORT Source); 08769 08770 _IRQL_requires_max_(APC_LEVEL) 08771 _Must_inspect_result_ 08772 NTSYSAPI 08773 BOOLEAN 08774 NTAPI 08775 RtlValidRelativeSecurityDescriptor( 08776 _In_reads_bytes_(SecurityDescriptorLength) PSECURITY_DESCRIPTOR SecurityDescriptorInput, 08777 _In_ ULONG SecurityDescriptorLength, 08778 _In_ SECURITY_INFORMATION RequiredInformation); 08779 08780 _IRQL_requires_max_(APC_LEVEL) 08781 _Must_inspect_result_ 08782 NTSYSAPI 08783 BOOLEAN 08784 NTAPI 08785 RtlValidSecurityDescriptor( 08786 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); 08787 08788 _IRQL_requires_max_(PASSIVE_LEVEL) 08789 NTSYSAPI 08790 NTSTATUS 08791 NTAPI 08792 RtlWriteRegistryValue( 08793 _In_ ULONG RelativeTo, 08794 _In_ PCWSTR Path, 08795 _In_z_ PCWSTR ValueName, 08796 _In_ ULONG ValueType, 08797 _In_reads_bytes_opt_(ValueLength) PVOID ValueData, 08798 _In_ ULONG ValueLength); 08799 08800 08801 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 08802 08803 08804 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) 08805 NTSYSAPI 08806 VOID 08807 FASTCALL 08808 RtlPrefetchMemoryNonTemporal( 08809 _In_ PVOID Source, 08810 _In_ SIZE_T Length); 08811 #endif 08812 08813 08814 #if (NTDDI_VERSION >= NTDDI_WINXP) 08815 08816 08817 NTSYSAPI 08818 VOID 08819 NTAPI 08820 RtlClearBit( 08821 _In_ PRTL_BITMAP BitMapHeader, 08822 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); 08823 08824 _IRQL_requires_max_(PASSIVE_LEVEL) 08825 NTSYSAPI 08826 WCHAR 08827 NTAPI 08828 RtlDowncaseUnicodeChar( 08829 _In_ WCHAR SourceCharacter); 08830 08831 NTSYSAPI 08832 VOID 08833 NTAPI 08834 RtlSetBit( 08835 _In_ PRTL_BITMAP BitMapHeader, 08836 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); 08837 08838 _Must_inspect_result_ 08839 NTSYSAPI 08840 BOOLEAN 08841 NTAPI 08842 RtlTestBit( 08843 _In_ PRTL_BITMAP BitMapHeader, 08844 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); 08845 08846 _IRQL_requires_max_(PASSIVE_LEVEL) 08847 NTSYSAPI 08848 NTSTATUS 08849 NTAPI 08850 RtlHashUnicodeString( 08851 _In_ CONST UNICODE_STRING *String, 08852 _In_ BOOLEAN CaseInSensitive, 08853 _In_ ULONG HashAlgorithm, 08854 _Out_ PULONG HashValue); 08855 08856 08857 08858 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 08859 08860 08861 #if (NTDDI_VERSION >= NTDDI_VISTA) 08862 08863 NTSYSAPI 08864 ULONG 08865 NTAPI 08866 RtlNumberOfSetBitsUlongPtr( 08867 _In_ ULONG_PTR Target); 08868 08869 NTSYSAPI 08870 ULONGLONG 08871 NTAPI 08872 RtlIoDecodeMemIoResource( 08873 _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor, 08874 _Out_opt_ PULONGLONG Alignment, 08875 _Out_opt_ PULONGLONG MinimumAddress, 08876 _Out_opt_ PULONGLONG MaximumAddress); 08877 08878 NTSYSAPI 08879 NTSTATUS 08880 NTAPI 08881 RtlIoEncodeMemIoResource( 08882 _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor, 08883 _In_ UCHAR Type, 08884 _In_ ULONGLONG Length, 08885 _In_ ULONGLONG Alignment, 08886 _In_ ULONGLONG MinimumAddress, 08887 _In_ ULONGLONG MaximumAddress); 08888 08889 NTSYSAPI 08890 ULONGLONG 08891 NTAPI 08892 RtlCmDecodeMemIoResource( 08893 _In_ struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, 08894 _Out_opt_ PULONGLONG Start); 08895 08896 NTSYSAPI 08897 NTSTATUS 08898 NTAPI 08899 RtlFindClosestEncodableLength( 08900 _In_ ULONGLONG SourceLength, 08901 _Out_ PULONGLONG TargetLength); 08902 08903 NTSYSAPI 08904 NTSTATUS 08905 NTAPI 08906 RtlCmEncodeMemIoResource( 08907 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, 08908 _In_ UCHAR Type, 08909 _In_ ULONGLONG Length, 08910 _In_ ULONGLONG Start); 08911 08912 08913 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 08914 08915 #if (NTDDI_VERSION >= NTDDI_WIN7) 08916 08917 _IRQL_requires_max_(PASSIVE_LEVEL) 08918 _Must_inspect_result_ 08919 NTSYSAPI 08920 NTSTATUS 08921 NTAPI 08922 RtlUnicodeToUTF8N( 08923 _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount) 08924 PCHAR UTF8StringDestination, 08925 _In_ ULONG UTF8StringMaxByteCount, 08926 _Out_ PULONG UTF8StringActualByteCount, 08927 _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource, 08928 _In_ ULONG UnicodeStringByteCount); 08929 08930 _IRQL_requires_max_(PASSIVE_LEVEL) 08931 _Must_inspect_result_ 08932 NTSYSAPI 08933 NTSTATUS 08934 NTAPI 08935 RtlUTF8ToUnicodeN( 08936 _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount) 08937 PWSTR UnicodeStringDestination, 08938 _In_ ULONG UnicodeStringMaxByteCount, 08939 _Out_ PULONG UnicodeStringActualByteCount, 08940 _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource, 08941 _In_ ULONG UTF8StringByteCount); 08942 08943 NTSYSAPI 08944 ULONG64 08945 NTAPI 08946 RtlGetEnabledExtendedFeatures( 08947 IN ULONG64 FeatureMask); 08948 08949 08950 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 08951 08952 08953 #if !defined(MIDL_PASS) 08954 /* inline funftions */ 08955 //DECLSPEC_DEPRECATED_DDK_WINXP 08956 static __inline 08957 LARGE_INTEGER 08958 NTAPI_INLINE 08959 RtlConvertLongToLargeInteger( 08960 _In_ LONG SignedInteger) 08961 { 08962 LARGE_INTEGER ret; 08963 ret.QuadPart = SignedInteger; 08964 return ret; 08965 } 08966 08967 //DECLSPEC_DEPRECATED_DDK_WINXP 08968 static __inline 08969 LARGE_INTEGER 08970 NTAPI_INLINE 08971 RtlConvertUlongToLargeInteger( 08972 _In_ ULONG UnsignedInteger) 08973 { 08974 LARGE_INTEGER ret; 08975 ret.QuadPart = UnsignedInteger; 08976 return ret; 08977 } 08978 08979 //DECLSPEC_DEPRECATED_DDK_WINXP 08980 static __inline 08981 LARGE_INTEGER 08982 NTAPI_INLINE 08983 RtlLargeIntegerShiftLeft( 08984 _In_ LARGE_INTEGER LargeInteger, 08985 _In_ CCHAR ShiftCount) 08986 { 08987 LARGE_INTEGER Result; 08988 08989 Result.QuadPart = LargeInteger.QuadPart << ShiftCount; 08990 return Result; 08991 } 08992 08993 //DECLSPEC_DEPRECATED_DDK_WINXP 08994 static __inline 08995 LARGE_INTEGER 08996 NTAPI_INLINE 08997 RtlLargeIntegerShiftRight( 08998 _In_ LARGE_INTEGER LargeInteger, 08999 _In_ CCHAR ShiftCount) 09000 { 09001 LARGE_INTEGER Result; 09002 09003 Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount; 09004 return Result; 09005 } 09006 09007 //DECLSPEC_DEPRECATED_DDK 09008 static __inline 09009 ULONG 09010 NTAPI_INLINE 09011 RtlEnlargedUnsignedDivide( 09012 _In_ ULARGE_INTEGER Dividend, 09013 _In_ ULONG Divisor, 09014 _Out_opt_ PULONG Remainder) 09015 { 09016 if (Remainder) 09017 *Remainder = (ULONG)(Dividend.QuadPart % Divisor); 09018 return (ULONG)(Dividend.QuadPart / Divisor); 09019 } 09020 09021 //DECLSPEC_DEPRECATED_DDK 09022 static __inline 09023 LARGE_INTEGER 09024 NTAPI_INLINE 09025 RtlLargeIntegerNegate( 09026 _In_ LARGE_INTEGER Subtrahend) 09027 { 09028 LARGE_INTEGER Difference; 09029 09030 Difference.QuadPart = -Subtrahend.QuadPart; 09031 return Difference; 09032 } 09033 09034 //DECLSPEC_DEPRECATED_DDK 09035 static __inline 09036 LARGE_INTEGER 09037 NTAPI_INLINE 09038 RtlLargeIntegerSubtract( 09039 _In_ LARGE_INTEGER Minuend, 09040 _In_ LARGE_INTEGER Subtrahend) 09041 { 09042 LARGE_INTEGER Difference; 09043 09044 Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart; 09045 return Difference; 09046 } 09047 09048 //DECLSPEC_DEPRECATED_DDK 09049 static __inline 09050 LARGE_INTEGER 09051 NTAPI_INLINE 09052 RtlEnlargedUnsignedMultiply( 09053 _In_ ULONG Multiplicand, 09054 _In_ ULONG Multiplier) 09055 { 09056 LARGE_INTEGER ret; 09057 ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; 09058 return ret; 09059 } 09060 09061 //DECLSPEC_DEPRECATED_DDK 09062 static __inline 09063 LARGE_INTEGER 09064 NTAPI_INLINE 09065 RtlEnlargedIntegerMultiply( 09066 _In_ LONG Multiplicand, 09067 _In_ LONG Multiplier) 09068 { 09069 LARGE_INTEGER ret; 09070 ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; 09071 return ret; 09072 } 09073 09074 _At_(AnsiString->Buffer, _Post_equal_to_(Buffer)) 09075 _At_(AnsiString->Length, _Post_equal_to_(0)) 09076 _At_(AnsiString->MaximumLength, _Post_equal_to_(BufferSize)) 09077 FORCEINLINE 09078 VOID 09079 RtlInitEmptyAnsiString( 09080 _Out_ PANSI_STRING AnsiString, 09081 _Pre_maybenull_ _Pre_readable_size_(BufferSize) __drv_aliasesMem PCHAR Buffer, 09082 _In_ USHORT BufferSize) 09083 { 09084 AnsiString->Length = 0; 09085 AnsiString->MaximumLength = BufferSize; 09086 AnsiString->Buffer = Buffer; 09087 } 09088 09089 _At_(UnicodeString->Buffer, _Post_equal_to_(Buffer)) 09090 _At_(UnicodeString->Length, _Post_equal_to_(0)) 09091 _At_(UnicodeString->MaximumLength, _Post_equal_to_(BufferSize)) 09092 FORCEINLINE 09093 VOID 09094 RtlInitEmptyUnicodeString( 09095 _Out_ PUNICODE_STRING UnicodeString, 09096 _Writable_bytes_(BufferSize) 09097 _When_(BufferSize != 0, _Notnull_) 09098 __drv_aliasesMem PWSTR Buffer, 09099 _In_ USHORT BufferSize) 09100 { 09101 UnicodeString->Length = 0; 09102 UnicodeString->MaximumLength = BufferSize; 09103 UnicodeString->Buffer = Buffer; 09104 } 09105 09106 #if defined(_AMD64_) || defined(_IA64_) 09107 09108 09109 static __inline 09110 LARGE_INTEGER 09111 NTAPI_INLINE 09112 RtlExtendedIntegerMultiply( 09113 _In_ LARGE_INTEGER Multiplicand, 09114 _In_ LONG Multiplier) 09115 { 09116 LARGE_INTEGER ret; 09117 ret.QuadPart = Multiplicand.QuadPart * Multiplier; 09118 return ret; 09119 } 09120 09121 static __inline 09122 LARGE_INTEGER 09123 NTAPI_INLINE 09124 RtlExtendedLargeIntegerDivide( 09125 _In_ LARGE_INTEGER Dividend, 09126 _In_ ULONG Divisor, 09127 _Out_opt_ PULONG Remainder) 09128 { 09129 LARGE_INTEGER ret; 09130 ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; 09131 if (Remainder) 09132 *Remainder = (ULONG)(Dividend.QuadPart % Divisor); 09133 return ret; 09134 } 09135 09136 09137 09138 #endif /* defined(_AMD64_) || defined(_IA64_) */ 09139 09140 09141 #if defined(_AMD64_) 09142 09143 #define MultiplyHigh __mulh 09144 #define UnsignedMultiplyHigh __umulh 09145 09146 //DECLSPEC_DEPRECATED_DDK 09147 static __inline 09148 LARGE_INTEGER 09149 NTAPI_INLINE 09150 RtlExtendedMagicDivide( 09151 _In_ LARGE_INTEGER Dividend, 09152 _In_ LARGE_INTEGER MagicDivisor, 09153 _In_ CCHAR ShiftCount) 09154 { 09155 LARGE_INTEGER ret; 09156 ULONG64 ret64; 09157 BOOLEAN Pos; 09158 Pos = (Dividend.QuadPart >= 0); 09159 ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, 09160 MagicDivisor.QuadPart); 09161 ret64 >>= ShiftCount; 09162 ret.QuadPart = Pos ? ret64 : -(LONG64)ret64; 09163 return ret; 09164 } 09165 #endif 09166 09167 //DECLSPEC_DEPRECATED_DDK 09168 static __inline 09169 LARGE_INTEGER 09170 NTAPI_INLINE 09171 RtlLargeIntegerAdd( 09172 _In_ LARGE_INTEGER Addend1, 09173 _In_ LARGE_INTEGER Addend2) 09174 { 09175 LARGE_INTEGER ret; 09176 ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart; 09177 return ret; 09178 } 09179 09180 /* VOID 09181 * RtlLargeIntegerAnd( 09182 * IN OUT LARGE_INTEGER Result, 09183 * IN LARGE_INTEGER Source, 09184 * IN LARGE_INTEGER Mask); 09185 */ 09186 #define RtlLargeIntegerAnd(Result, Source, Mask) \ 09187 Result.QuadPart = Source.QuadPart & Mask.QuadPart 09188 09189 //DECLSPEC_DEPRECATED_DDK 09190 static __inline 09191 LARGE_INTEGER 09192 NTAPI_INLINE 09193 RtlLargeIntegerArithmeticShift( 09194 _In_ LARGE_INTEGER LargeInteger, 09195 _In_ CCHAR ShiftCount) 09196 { 09197 LARGE_INTEGER ret; 09198 ret.QuadPart = LargeInteger.QuadPart >> ShiftCount; 09199 return ret; 09200 } 09201 09202 /* BOOLEAN 09203 * RtlLargeIntegerEqualTo( 09204 * IN LARGE_INTEGER Operand1, 09205 * IN LARGE_INTEGER Operand2); 09206 */ 09207 #define RtlLargeIntegerEqualTo(X,Y) \ 09208 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart))) 09209 09210 FORCEINLINE 09211 PVOID 09212 RtlSecureZeroMemory( 09213 _Out_writes_bytes_all_(Size) PVOID Pointer, 09214 _In_ SIZE_T Size) 09215 { 09216 volatile char* vptr = (volatile char*)Pointer; 09217 #if defined(_M_AMD64) 09218 __stosb((PUCHAR)vptr, 0, Size); 09219 #else 09220 char * endptr = (char *)vptr + Size; 09221 while (vptr < endptr) { 09222 *vptr = 0; vptr++; 09223 } 09224 #endif 09225 return Pointer; 09226 } 09227 09228 #if defined(_M_AMD64) 09229 _Must_inspect_result_ 09230 FORCEINLINE 09231 BOOLEAN 09232 RtlCheckBit( 09233 _In_ PRTL_BITMAP BitMapHeader, 09234 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitPosition) 09235 { 09236 return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition); 09237 } 09238 #else 09239 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1) 09240 #endif /* defined(_M_AMD64) */ 09241 09242 #define RtlLargeIntegerGreaterThan(X,Y) ( \ 09243 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \ 09244 ((X).HighPart > (Y).HighPart) \ 09245 ) 09246 09247 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \ 09248 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \ 09249 ((X).HighPart > (Y).HighPart) \ 09250 ) 09251 09252 #define RtlLargeIntegerNotEqualTo(X,Y) ( \ 09253 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \ 09254 ) 09255 09256 #define RtlLargeIntegerLessThan(X,Y) ( \ 09257 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \ 09258 ((X).HighPart < (Y).HighPart) \ 09259 ) 09260 09261 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \ 09262 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \ 09263 ((X).HighPart < (Y).HighPart) \ 09264 ) 09265 09266 #define RtlLargeIntegerGreaterThanZero(X) ( \ 09267 (((X).HighPart == 0) && ((X).LowPart > 0)) || \ 09268 ((X).HighPart > 0 ) \ 09269 ) 09270 09271 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 ) 09272 09273 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) ) 09274 09275 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) ) 09276 09277 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) ) 09278 09279 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) ) 09280 09281 #endif /* !defined(MIDL_PASS) */ 09282 09283 /* Byte Swap Functions */ 09284 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \ 09285 ((defined(_M_AMD64) || defined(_M_IA64)) \ 09286 && (_MSC_FULL_VER > 13009175 || defined(__GNUC__))) 09287 09288 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x)) 09289 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x)) 09290 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x)) 09291 09292 #endif 09293 09294 #if DBG 09295 09296 #define ASSERT(exp) \ 09297 (VOID)((!(exp)) ? \ 09298 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) 09299 09300 #define ASSERTMSG(msg, exp) \ 09301 (VOID)((!(exp)) ? \ 09302 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE) 09303 09304 #define RTL_SOFT_ASSERT(exp) \ 09305 (VOID)((!(exp)) ? \ 09306 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE) 09307 09308 #define RTL_SOFT_ASSERTMSG(msg, exp) \ 09309 (VOID)((!(exp)) ? \ 09310 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE) 09311 09312 #define RTL_VERIFY(exp) ASSERT(exp) 09313 #define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp) 09314 09315 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) 09316 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) 09317 09318 #if defined(_MSC_VER) 09319 09320 #define NT_ASSERT(exp) \ 09321 ((!(exp)) ? \ 09322 (__annotation(L"Debug", L"AssertFail", L#exp), \ 09323 DbgRaiseAssertionFailure(), FALSE) : TRUE) 09324 09325 #define NT_ASSERTMSG(msg, exp) \ 09326 ((!(exp)) ? \ 09327 (__annotation(L"Debug", L"AssertFail", L##msg), \ 09328 DbgRaiseAssertionFailure(), FALSE) : TRUE) 09329 09330 #define NT_ASSERTMSGW(msg, exp) \ 09331 ((!(exp)) ? \ 09332 (__annotation(L"Debug", L"AssertFail", msg), \ 09333 DbgRaiseAssertionFailure(), FALSE) : TRUE) 09334 09335 #define NT_VERIFY NT_ASSERT 09336 #define NT_VERIFYMSG NT_ASSERTMSG 09337 #define NT_VERIFYMSGW NT_ASSERTMSGW 09338 09339 #else 09340 09341 /* GCC doesn't support __annotation (nor PDB) */ 09342 #define NT_ASSERT(exp) \ 09343 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE) 09344 09345 #define NT_ASSERTMSG NT_ASSERT 09346 #define NT_ASSERTMSGW NT_ASSERT 09347 09348 #endif 09349 09350 #else /* !DBG */ 09351 09352 #define ASSERT(exp) ((VOID) 0) 09353 #define ASSERTMSG(msg, exp) ((VOID) 0) 09354 09355 #define RTL_SOFT_ASSERT(exp) ((VOID) 0) 09356 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) 09357 09358 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) 09359 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) 09360 09361 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) 09362 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) 09363 09364 #define NT_ASSERT(exp) ((VOID)0) 09365 #define NT_ASSERTMSG(msg, exp) ((VOID)0) 09366 #define NT_ASSERTMSGW(msg, exp) ((VOID)0) 09367 09368 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE) 09369 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE) 09370 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE) 09371 09372 #endif /* DBG */ 09373 09374 #define InitializeListHead32(ListHead) (\ 09375 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead))) 09376 09377 #if !defined(_WINBASE_) 09378 09379 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_)) 09380 09381 NTKERNELAPI 09382 VOID 09383 InitializeSListHead( 09384 _Out_ PSLIST_HEADER SListHead); 09385 09386 #else 09387 09388 FORCEINLINE 09389 VOID 09390 InitializeSListHead( 09391 _Out_ PSLIST_HEADER SListHead) 09392 { 09393 #if defined(_IA64_) 09394 ULONG64 FeatureBits; 09395 #endif 09396 09397 #if defined(_WIN64) 09398 if (((ULONG_PTR)SListHead & 0xf) != 0) { 09399 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT); 09400 } 09401 #endif 09402 RtlZeroMemory(SListHead, sizeof(SLIST_HEADER)); 09403 #if defined(_IA64_) 09404 FeatureBits = __getReg(CV_IA64_CPUID4); 09405 if ((FeatureBits & KF_16BYTE_INSTR) != 0) { 09406 SListHead->Header16.HeaderType = 1; 09407 SListHead->Header16.Init = 1; 09408 } 09409 #endif 09410 } 09411 09412 #endif 09413 09414 #if defined(_WIN64) 09415 09416 #define InterlockedPopEntrySList(Head) \ 09417 ExpInterlockedPopEntrySList(Head) 09418 09419 #define InterlockedPushEntrySList(Head, Entry) \ 09420 ExpInterlockedPushEntrySList(Head, Entry) 09421 09422 #define InterlockedFlushSList(Head) \ 09423 ExpInterlockedFlushSList(Head) 09424 09425 #define QueryDepthSList(Head) \ 09426 ExQueryDepthSList(Head) 09427 09428 #else /* !defined(_WIN64) */ 09429 09430 NTKERNELAPI 09431 PSLIST_ENTRY 09432 FASTCALL 09433 InterlockedPopEntrySList( 09434 _Inout_ PSLIST_HEADER ListHead); 09435 09436 NTKERNELAPI 09437 PSLIST_ENTRY 09438 FASTCALL 09439 InterlockedPushEntrySList( 09440 _Inout_ PSLIST_HEADER ListHead, 09441 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry); 09442 09443 #define InterlockedFlushSList(ListHead) \ 09444 ExInterlockedFlushSList(ListHead) 09445 09446 #define QueryDepthSList(Head) \ 09447 ExQueryDepthSList(Head) 09448 09449 #endif /* !defined(_WIN64) */ 09450 09451 #endif /* !defined(_WINBASE_) */ 09452 09453 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset) 09454 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length) 09455 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \ 09456 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk))) 09457 #define RTL_CONTEXT_OFFSET(Context, Chunk) \ 09458 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk) 09459 #define RTL_CONTEXT_LENGTH(Context, Chunk) \ 09460 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk) 09461 #define RTL_CONTEXT_CHUNK(Context, Chunk) \ 09462 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \ 09463 (PCONTEXT_EX)(Context + 1), \ 09464 Chunk) 09465 09466 BOOLEAN 09467 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)( 09468 _In_ ULONG Version); 09469 09470 BOOLEAN 09471 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)( 09472 _In_ ULONG Version); 09473 09474 #ifndef RtlIsNtDdiVersionAvailable 09475 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable 09476 #endif 09477 09478 #ifndef RtlIsServicePackVersionInstalled 09479 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled 09480 #endif 09481 09482 #define RtlInterlockedSetBits(Flags, Flag) \ 09483 InterlockedOr((PLONG)(Flags), Flag) 09484 09485 #define RtlInterlockedAndBits(Flags, Flag) \ 09486 InterlockedAnd((PLONG)(Flags), Flag) 09487 09488 #define RtlInterlockedClearBits(Flags, Flag) \ 09489 RtlInterlockedAndBits(Flags, ~(Flag)) 09490 09491 #define RtlInterlockedXorBits(Flags, Flag) \ 09492 InterlockedXor(Flags, Flag) 09493 09494 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \ 09495 (VOID) RtlInterlockedSetBits(Flags, Flag) 09496 09497 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \ 09498 (VOID) RtlInterlockedAndBits(Flags, Flag) 09499 09500 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ 09501 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag)) 09502 09503 09504 /****************************************************************************** 09505 * Kernel Functions * 09506 ******************************************************************************/ 09507 #if defined(_M_IX86) 09508 09510 /* Interrupt request levels */ 09511 #define PASSIVE_LEVEL 0 09512 #define LOW_LEVEL 0 09513 #define APC_LEVEL 1 09514 #define DISPATCH_LEVEL 2 09515 #define CMCI_LEVEL 5 09516 #define PROFILE_LEVEL 27 09517 #define CLOCK1_LEVEL 28 09518 #define CLOCK2_LEVEL 28 09519 #define IPI_LEVEL 29 09520 #define POWER_LEVEL 30 09521 #define HIGH_LEVEL 31 09522 #define CLOCK_LEVEL CLOCK2_LEVEL 09523 09524 #define KIP0PCRADDRESS 0xffdff000 09525 #define KI_USER_SHARED_DATA 0xffdf0000 09526 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) 09527 09528 #define PAGE_SIZE 0x1000 09529 #define PAGE_SHIFT 12L 09530 #define KeGetDcacheFillSize() 1L 09531 09532 #define EFLAG_SIGN 0x8000 09533 #define EFLAG_ZERO 0x4000 09534 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) 09535 09536 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 09537 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) 09538 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 09539 09540 09541 typedef struct _KFLOATING_SAVE { 09542 ULONG ControlWord; 09543 ULONG StatusWord; 09544 ULONG ErrorOffset; 09545 ULONG ErrorSelector; 09546 ULONG DataOffset; 09547 ULONG DataSelector; 09548 ULONG Cr0NpxState; 09549 ULONG Spare1; 09550 } KFLOATING_SAVE, *PKFLOATING_SAVE; 09551 09552 extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; 09553 09554 #define YieldProcessor _mm_pause 09555 09556 FORCEINLINE 09557 VOID 09558 KeMemoryBarrier(VOID) 09559 { 09560 LONG Barrier, *Dummy = &Barrier; 09561 UNREFERENCED_LOCAL_VARIABLE(Dummy); 09562 09563 #if defined(__GNUC__) 09564 __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); 09565 #elif defined(_MSC_VER) 09566 __asm xchg [Barrier], eax 09567 #endif 09568 } 09569 09570 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() 09571 09572 _IRQL_requires_max_(HIGH_LEVEL) 09573 _IRQL_saves_ 09574 NTHALAPI 09575 KIRQL 09576 NTAPI 09577 KeGetCurrentIrql(VOID); 09578 09579 _IRQL_requires_max_(HIGH_LEVEL) 09580 NTHALAPI 09581 VOID 09582 FASTCALL 09583 KfLowerIrql( 09584 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql); 09585 #define KeLowerIrql(a) KfLowerIrql(a) 09586 09587 _IRQL_requires_max_(HIGH_LEVEL) 09588 _IRQL_raises_(NewIrql) 09589 _IRQL_saves_ 09590 NTHALAPI 09591 KIRQL 09592 FASTCALL 09593 KfRaiseIrql( 09594 _In_ KIRQL NewIrql); 09595 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) 09596 09597 _IRQL_requires_max_(DISPATCH_LEVEL) 09598 _IRQL_saves_ 09599 _IRQL_raises_(DISPATCH_LEVEL) 09600 NTHALAPI 09601 KIRQL 09602 NTAPI 09603 KeRaiseIrqlToDpcLevel(VOID); 09604 09605 NTHALAPI 09606 KIRQL 09607 NTAPI 09608 KeRaiseIrqlToSynchLevel(VOID); 09609 09610 _Requires_lock_not_held_(*SpinLock) 09611 _Acquires_lock_(*SpinLock) 09612 _IRQL_requires_max_(DISPATCH_LEVEL) 09613 _IRQL_saves_ 09614 _IRQL_raises_(DISPATCH_LEVEL) 09615 NTHALAPI 09616 KIRQL 09617 FASTCALL 09618 KfAcquireSpinLock( 09619 _Inout_ PKSPIN_LOCK SpinLock); 09620 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) 09621 09622 _Requires_lock_held_(*SpinLock) 09623 _Releases_lock_(*SpinLock) 09624 _IRQL_requires_(DISPATCH_LEVEL) 09625 NTHALAPI 09626 VOID 09627 FASTCALL 09628 KfReleaseSpinLock( 09629 _Inout_ PKSPIN_LOCK SpinLock, 09630 _In_ _IRQL_restores_ KIRQL NewIrql); 09631 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) 09632 09633 _Requires_lock_not_held_(*SpinLock) 09634 _Acquires_lock_(*SpinLock) 09635 _IRQL_requires_min_(DISPATCH_LEVEL) 09636 NTKERNELAPI 09637 VOID 09638 FASTCALL 09639 KefAcquireSpinLockAtDpcLevel( 09640 _Inout_ PKSPIN_LOCK SpinLock); 09641 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) 09642 09643 _Requires_lock_held_(*SpinLock) 09644 _Releases_lock_(*SpinLock) 09645 _IRQL_requires_min_(DISPATCH_LEVEL) 09646 NTKERNELAPI 09647 VOID 09648 FASTCALL 09649 KefReleaseSpinLockFromDpcLevel( 09650 _Inout_ PKSPIN_LOCK SpinLock); 09651 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) 09652 09653 NTSYSAPI 09654 PKTHREAD 09655 NTAPI 09656 KeGetCurrentThread(VOID); 09657 09658 _Always_(_Post_satisfies_(return<=0)) 09659 _Must_inspect_result_ 09660 _IRQL_requires_max_(DISPATCH_LEVEL) 09661 _Kernel_float_saved_ 09662 _At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState)) 09663 NTKERNELAPI 09664 NTSTATUS 09665 NTAPI 09666 KeSaveFloatingPointState( 09667 _Out_ PKFLOATING_SAVE FloatSave); 09668 09669 _Success_(1) 09670 _Kernel_float_restored_ 09671 _At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState)) 09672 NTKERNELAPI 09673 NTSTATUS 09674 NTAPI 09675 KeRestoreFloatingPointState( 09676 _In_ PKFLOATING_SAVE FloatSave); 09677 09678 /* VOID 09679 * KeFlushIoBuffers( 09680 * IN PMDL Mdl, 09681 * IN BOOLEAN ReadOperation, 09682 * IN BOOLEAN DmaOperation) 09683 */ 09684 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) 09685 09686 /* x86 and x64 performs a 0x2C interrupt */ 09687 #define DbgRaiseAssertionFailure __int2c 09688 09689 FORCEINLINE 09690 VOID 09691 _KeQueryTickCount( 09692 OUT PLARGE_INTEGER CurrentCount) 09693 { 09694 for (;;) { 09695 #ifdef NONAMELESSUNION 09696 CurrentCount->s.HighPart = KeTickCount.High1Time; 09697 CurrentCount->s.LowPart = KeTickCount.LowPart; 09698 if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; 09699 #else 09700 CurrentCount->HighPart = KeTickCount.High1Time; 09701 CurrentCount->LowPart = KeTickCount.LowPart; 09702 if (CurrentCount->HighPart == KeTickCount.High2Time) break; 09703 #endif 09704 YieldProcessor(); 09705 } 09706 } 09707 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) 09708 09709 09710 09711 09712 09713 #elif defined(_M_AMD64) 09714 09716 /* Interrupt request levels */ 09717 #define PASSIVE_LEVEL 0 09718 #define LOW_LEVEL 0 09719 #define APC_LEVEL 1 09720 #define DISPATCH_LEVEL 2 09721 #define CMCI_LEVEL 5 09722 #define CLOCK_LEVEL 13 09723 #define IPI_LEVEL 14 09724 #define DRS_LEVEL 14 09725 #define POWER_LEVEL 14 09726 #define PROFILE_LEVEL 15 09727 #define HIGH_LEVEL 15 09728 09729 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL 09730 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) 09731 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8) 09732 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14) 09733 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320) 09734 09735 #define PAGE_SIZE 0x1000 09736 #define PAGE_SHIFT 12L 09737 09738 #define EFLAG_SIGN 0x8000 09739 #define EFLAG_ZERO 0x4000 09740 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) 09741 09742 typedef struct _KFLOATING_SAVE { 09743 ULONG Dummy; 09744 } KFLOATING_SAVE, *PKFLOATING_SAVE; 09745 09746 typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; 09747 09748 #define KeQueryInterruptTime() \ 09749 (*(volatile ULONG64*)SharedInterruptTime) 09750 09751 #define KeQuerySystemTime(CurrentCount) \ 09752 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime 09753 09754 #define KeQueryTickCount(CurrentCount) \ 09755 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount 09756 09757 #define KeGetDcacheFillSize() 1L 09758 09759 #define YieldProcessor _mm_pause 09760 #define FastFence __faststorefence 09761 #define LoadFence _mm_lfence 09762 #define MemoryFence _mm_mfence 09763 #define StoreFence _mm_sfence 09764 #define LFENCE_ACQUIRE() LoadFence() 09765 09766 FORCEINLINE 09767 VOID 09768 KeMemoryBarrier(VOID) 09769 { 09770 // FIXME: Do we really need lfence after the __faststorefence ? 09771 FastFence(); 09772 LFENCE_ACQUIRE(); 09773 } 09774 09775 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() 09776 09777 FORCEINLINE 09778 KIRQL 09779 KeGetCurrentIrql(VOID) 09780 { 09781 return (KIRQL)__readcr8(); 09782 } 09783 09784 FORCEINLINE 09785 VOID 09786 KeLowerIrql(IN KIRQL NewIrql) 09787 { 09788 ASSERT((KIRQL)__readcr8() >= NewIrql); 09789 __writecr8(NewIrql); 09790 } 09791 09792 FORCEINLINE 09793 KIRQL 09794 KfRaiseIrql(IN KIRQL NewIrql) 09795 { 09796 KIRQL OldIrql; 09797 09798 OldIrql = (KIRQL)__readcr8(); 09799 ASSERT(OldIrql <= NewIrql); 09800 __writecr8(NewIrql); 09801 return OldIrql; 09802 } 09803 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) 09804 09805 FORCEINLINE 09806 KIRQL 09807 KeRaiseIrqlToDpcLevel(VOID) 09808 { 09809 return KfRaiseIrql(DISPATCH_LEVEL); 09810 } 09811 09812 FORCEINLINE 09813 KIRQL 09814 KeRaiseIrqlToSynchLevel(VOID) 09815 { 09816 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 09817 } 09818 09819 FORCEINLINE 09820 PKTHREAD 09821 KeGetCurrentThread(VOID) 09822 { 09823 return (struct _KTHREAD *)__readgsqword(0x188); 09824 } 09825 09826 FORCEINLINE 09827 NTSTATUS 09828 KeSaveFloatingPointState(PVOID FloatingState) 09829 { 09830 UNREFERENCED_PARAMETER(FloatingState); 09831 return STATUS_SUCCESS; 09832 } 09833 09834 FORCEINLINE 09835 NTSTATUS 09836 KeRestoreFloatingPointState(PVOID FloatingState) 09837 { 09838 UNREFERENCED_PARAMETER(FloatingState); 09839 return STATUS_SUCCESS; 09840 } 09841 09842 /* VOID 09843 * KeFlushIoBuffers( 09844 * IN PMDL Mdl, 09845 * IN BOOLEAN ReadOperation, 09846 * IN BOOLEAN DmaOperation) 09847 */ 09848 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) 09849 09850 /* x86 and x64 performs a 0x2C interrupt */ 09851 #define DbgRaiseAssertionFailure __int2c 09852 09853 #elif defined(_M_IA64) 09854 09856 /* Interrupt request levels */ 09857 #define PASSIVE_LEVEL 0 09858 #define LOW_LEVEL 0 09859 #define APC_LEVEL 1 09860 #define DISPATCH_LEVEL 2 09861 #define CMC_LEVEL 3 09862 #define DEVICE_LEVEL_BASE 4 09863 #define PC_LEVEL 12 09864 #define IPI_LEVEL 14 09865 #define DRS_LEVEL 14 09866 #define CLOCK_LEVEL 13 09867 #define POWER_LEVEL 15 09868 #define PROFILE_LEVEL 15 09869 #define HIGH_LEVEL 15 09870 09871 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) 09872 extern volatile LARGE_INTEGER KeTickCount; 09873 09874 #define PAUSE_PROCESSOR __yield(); 09875 09876 FORCEINLINE 09877 VOID 09878 KeFlushWriteBuffer(VOID) 09879 { 09880 __mf (); 09881 return; 09882 } 09883 09884 NTSYSAPI 09885 PKTHREAD 09886 NTAPI 09887 KeGetCurrentThread(VOID); 09888 09889 09890 #elif defined(_M_PPC) 09891 09892 /* Interrupt request levels */ 09893 #define PASSIVE_LEVEL 0 09894 #define LOW_LEVEL 0 09895 #define APC_LEVEL 1 09896 #define DISPATCH_LEVEL 2 09897 #define PROFILE_LEVEL 27 09898 #define CLOCK1_LEVEL 28 09899 #define CLOCK2_LEVEL 28 09900 #define IPI_LEVEL 29 09901 #define POWER_LEVEL 30 09902 #define HIGH_LEVEL 31 09903 09904 // 09905 // Used to contain PFNs and PFN counts 09906 // 09907 typedef ULONG PFN_COUNT; 09908 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; 09909 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; 09910 09911 09912 typedef struct _KFLOATING_SAVE { 09913 ULONG Dummy; 09914 } KFLOATING_SAVE, *PKFLOATING_SAVE; 09915 09916 typedef struct _KPCR_TIB { 09917 PVOID ExceptionList; /* 00 */ 09918 PVOID StackBase; /* 04 */ 09919 PVOID StackLimit; /* 08 */ 09920 PVOID SubSystemTib; /* 0C */ 09921 _ANONYMOUS_UNION union { 09922 PVOID FiberData; /* 10 */ 09923 ULONG Version; /* 10 */ 09924 } DUMMYUNIONNAME; 09925 PVOID ArbitraryUserPointer; /* 14 */ 09926 struct _KPCR_TIB *Self; /* 18 */ 09927 } KPCR_TIB, *PKPCR_TIB; /* 1C */ 09928 09929 #define PCR_MINOR_VERSION 1 09930 #define PCR_MAJOR_VERSION 1 09931 09932 typedef struct _KPCR { 09933 KPCR_TIB Tib; /* 00 */ 09934 struct _KPCR *Self; /* 1C */ 09935 struct _KPRCB *Prcb; /* 20 */ 09936 KIRQL Irql; /* 24 */ 09937 ULONG IRR; /* 28 */ 09938 ULONG IrrActive; /* 2C */ 09939 ULONG IDR; /* 30 */ 09940 PVOID KdVersionBlock; /* 34 */ 09941 PUSHORT IDT; /* 38 */ 09942 PUSHORT GDT; /* 3C */ 09943 struct _KTSS *TSS; /* 40 */ 09944 USHORT MajorVersion; /* 44 */ 09945 USHORT MinorVersion; /* 46 */ 09946 KAFFINITY SetMember; /* 48 */ 09947 ULONG StallScaleFactor; /* 4C */ 09948 UCHAR SpareUnused; /* 50 */ 09949 UCHAR Number; /* 51 */ 09950 } KPCR, *PKPCR; /* 54 */ 09951 09952 #define KeGetPcr() PCR 09953 09954 #define YieldProcessor() __asm__ __volatile__("nop"); 09955 09956 FORCEINLINE 09957 ULONG 09958 NTAPI 09959 KeGetCurrentProcessorNumber(VOID) 09960 { 09961 ULONG Number; 09962 __asm__ __volatile__ ( 09963 "lwz %0, %c1(12)\n" 09964 : "=r" (Number) 09965 : "i" (FIELD_OFFSET(KPCR, Number)) 09966 ); 09967 return Number; 09968 } 09969 09970 NTHALAPI 09971 VOID 09972 FASTCALL 09973 KfLowerIrql( 09974 IN KIRQL NewIrql); 09975 #define KeLowerIrql(a) KfLowerIrql(a) 09976 09977 NTHALAPI 09978 KIRQL 09979 FASTCALL 09980 KfRaiseIrql( 09981 IN KIRQL NewIrql); 09982 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) 09983 09984 NTHALAPI 09985 KIRQL 09986 NTAPI 09987 KeRaiseIrqlToDpcLevel(VOID); 09988 09989 NTHALAPI 09990 KIRQL 09991 NTAPI 09992 KeRaiseIrqlToSynchLevel(VOID); 09993 09994 09995 09996 #elif defined(_M_MIPS) 09997 #error MIPS Headers are totally incorrect 09998 09999 // 10000 // Used to contain PFNs and PFN counts 10001 // 10002 typedef ULONG PFN_COUNT; 10003 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; 10004 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; 10005 10006 #define PASSIVE_LEVEL 0 10007 #define APC_LEVEL 1 10008 #define DISPATCH_LEVEL 2 10009 #define PROFILE_LEVEL 27 10010 #define IPI_LEVEL 29 10011 #define HIGH_LEVEL 31 10012 10013 typedef struct _KPCR { 10014 struct _KPRCB *Prcb; /* 20 */ 10015 KIRQL Irql; /* 24 */ 10016 ULONG IRR; /* 28 */ 10017 ULONG IDR; /* 30 */ 10018 } KPCR, *PKPCR; 10019 10020 #define KeGetPcr() PCR 10021 10022 typedef struct _KFLOATING_SAVE { 10023 } KFLOATING_SAVE, *PKFLOATING_SAVE; 10024 10025 static __inline 10026 ULONG 10027 NTAPI 10028 KeGetCurrentProcessorNumber(VOID) 10029 { 10030 return 0; 10031 } 10032 10033 #define YieldProcessor() __asm__ __volatile__("nop"); 10034 10035 #define KeLowerIrql(a) KfLowerIrql(a) 10036 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) 10037 10038 NTKERNELAPI 10039 VOID 10040 NTAPI 10041 KfLowerIrql( 10042 IN KIRQL NewIrql); 10043 10044 NTKERNELAPI 10045 KIRQL 10046 NTAPI 10047 KfRaiseIrql( 10048 IN KIRQL NewIrql); 10049 10050 NTKERNELAPI 10051 KIRQL 10052 NTAPI 10053 KeRaiseIrqlToDpcLevel(VOID); 10054 10055 NTKERNELAPI 10056 KIRQL 10057 NTAPI 10058 KeRaiseIrqlToSynchLevel(VOID); 10059 10060 10061 #elif defined(_M_ARM) 10062 #include <armddk.h> 10063 #else 10064 #error Unknown Architecture 10065 #endif 10066 10067 NTKERNELAPI 10068 VOID 10069 NTAPI 10070 KeInitializeEvent( 10071 _Out_ PRKEVENT Event, 10072 _In_ EVENT_TYPE Type, 10073 _In_ BOOLEAN State); 10074 10075 _IRQL_requires_max_(DISPATCH_LEVEL) 10076 NTKERNELAPI 10077 VOID 10078 NTAPI 10079 KeClearEvent( 10080 _Inout_ PRKEVENT Event); 10081 10082 #if (NTDDI_VERSION >= NTDDI_WIN2K) 10083 10084 #if defined(_NTDDK_) || defined(_NTIFS_) 10085 _Maybe_raises_SEH_exception_ 10086 _IRQL_requires_max_(APC_LEVEL) 10087 NTKERNELAPI 10088 VOID 10089 NTAPI 10090 ProbeForRead( 10091 __in_data_source(USER_MODE) _In_reads_bytes_(Length) CONST VOID *Address, /* CONST is added */ 10092 _In_ SIZE_T Length, 10093 _In_ ULONG Alignment); 10094 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */ 10095 10096 _Maybe_raises_SEH_exception_ 10097 _IRQL_requires_max_(APC_LEVEL) 10098 NTKERNELAPI 10099 VOID 10100 NTAPI 10101 ProbeForWrite( 10102 __in_data_source(USER_MODE) _Inout_updates_bytes_(Length) PVOID Address, 10103 _In_ SIZE_T Length, 10104 _In_ ULONG Alignment); 10105 10106 #if defined(SINGLE_GROUP_LEGACY_API) 10107 10108 _IRQL_requires_min_(PASSIVE_LEVEL) 10109 _IRQL_requires_max_(APC_LEVEL) 10110 NTKERNELAPI 10111 VOID 10112 NTAPI 10113 KeRevertToUserAffinityThread(VOID); 10114 10115 _IRQL_requires_min_(PASSIVE_LEVEL) 10116 _IRQL_requires_max_(APC_LEVEL) 10117 NTKERNELAPI 10118 VOID 10119 NTAPI 10120 KeSetSystemAffinityThread( 10121 _In_ KAFFINITY Affinity); 10122 10123 NTKERNELAPI 10124 VOID 10125 NTAPI 10126 KeSetTargetProcessorDpc( 10127 _Inout_ PRKDPC Dpc, 10128 _In_ CCHAR Number); 10129 10130 NTKERNELAPI 10131 KAFFINITY 10132 NTAPI 10133 KeQueryActiveProcessors(VOID); 10134 #endif /* defined(SINGLE_GROUP_LEGACY_API) */ 10135 10136 #if !defined(_M_AMD64) 10137 NTKERNELAPI 10138 ULONGLONG 10139 NTAPI 10140 KeQueryInterruptTime(VOID); 10141 10142 NTKERNELAPI 10143 VOID 10144 NTAPI 10145 KeQuerySystemTime( 10146 _Out_ PLARGE_INTEGER CurrentTime); 10147 #endif /* !_M_AMD64 */ 10148 10149 #if !defined(_X86_) && !defined(_M_ARM) 10150 _Requires_lock_not_held_(*SpinLock) 10151 _Acquires_lock_(*SpinLock) 10152 _IRQL_requires_max_(DISPATCH_LEVEL) 10153 _IRQL_saves_ 10154 _IRQL_raises_(DISPATCH_LEVEL) 10155 NTKERNELAPI 10156 KIRQL 10157 NTAPI 10158 KeAcquireSpinLockRaiseToDpc( 10159 _Inout_ PKSPIN_LOCK SpinLock); 10160 10161 #define KeAcquireSpinLock(SpinLock, OldIrql) \ 10162 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) 10163 10164 _Requires_lock_not_held_(*SpinLock) 10165 _Acquires_lock_(*SpinLock) 10166 _IRQL_requires_min_(DISPATCH_LEVEL) 10167 NTKERNELAPI 10168 VOID 10169 NTAPI 10170 KeAcquireSpinLockAtDpcLevel( 10171 _Inout_ PKSPIN_LOCK SpinLock); 10172 10173 _Requires_lock_held_(*SpinLock) 10174 _Releases_lock_(*SpinLock) 10175 _IRQL_requires_(DISPATCH_LEVEL) 10176 NTKERNELAPI 10177 VOID 10178 NTAPI 10179 KeReleaseSpinLock( 10180 _Inout_ PKSPIN_LOCK SpinLock, 10181 _In_ _IRQL_restores_ KIRQL NewIrql); 10182 10183 _Requires_lock_held_(*SpinLock) 10184 _Releases_lock_(*SpinLock) 10185 _IRQL_requires_min_(DISPATCH_LEVEL) 10186 NTKERNELAPI 10187 VOID 10188 NTAPI 10189 KeReleaseSpinLockFromDpcLevel( 10190 _Inout_ PKSPIN_LOCK SpinLock); 10191 #endif /* !_X86_ */ 10192 10193 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK)) 10194 NTKERNELAPI 10195 VOID 10196 NTAPI 10197 KeInitializeSpinLock( 10198 _Out_ PKSPIN_LOCK SpinLock); 10199 #else 10200 FORCEINLINE 10201 VOID 10202 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock) 10203 { 10204 /* Clear the lock */ 10205 *SpinLock = 0; 10206 } 10207 #endif 10208 10209 DECLSPEC_NORETURN 10210 NTKERNELAPI 10211 VOID 10212 NTAPI 10213 KeBugCheckEx( 10214 _In_ ULONG BugCheckCode, 10215 _In_ ULONG_PTR BugCheckParameter1, 10216 _In_ ULONG_PTR BugCheckParameter2, 10217 _In_ ULONG_PTR BugCheckParameter3, 10218 _In_ ULONG_PTR BugCheckParameter4); 10219 10220 _IRQL_requires_max_(DISPATCH_LEVEL) 10221 NTKERNELAPI 10222 BOOLEAN 10223 NTAPI 10224 KeCancelTimer( 10225 _Inout_ PKTIMER); 10226 10227 _IRQL_requires_min_(PASSIVE_LEVEL) 10228 _IRQL_requires_max_(APC_LEVEL) 10229 NTKERNELAPI 10230 NTSTATUS 10231 NTAPI 10232 KeDelayExecutionThread( 10233 _In_ KPROCESSOR_MODE WaitMode, 10234 _In_ BOOLEAN Alertable, 10235 _In_ PLARGE_INTEGER Interval); 10236 10237 _Must_inspect_result_ 10238 NTKERNELAPI 10239 BOOLEAN 10240 NTAPI 10241 KeDeregisterBugCheckCallback( 10242 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord); 10243 10244 _Acquires_lock_(_Global_critical_region_) 10245 _IRQL_requires_max_(APC_LEVEL) 10246 NTKERNELAPI 10247 VOID 10248 NTAPI 10249 KeEnterCriticalRegion(VOID); 10250 10251 _IRQL_requires_max_(DISPATCH_LEVEL) 10252 NTKERNELAPI 10253 VOID 10254 NTAPI 10255 KeInitializeDeviceQueue( 10256 _Out_ PKDEVICE_QUEUE DeviceQueue); 10257 10258 NTKERNELAPI 10259 VOID 10260 NTAPI 10261 KeInitializeDpc( 10262 _Out_ __drv_aliasesMem PRKDPC Dpc, 10263 _In_ PKDEFERRED_ROUTINE DeferredRoutine, 10264 _In_opt_ __drv_aliasesMem PVOID DeferredContext); 10265 10266 NTKERNELAPI 10267 VOID 10268 NTAPI 10269 KeInitializeMutex( 10270 _Out_ PRKMUTEX Mutex, 10271 _In_ ULONG Level); 10272 10273 _IRQL_requires_max_(PASSIVE_LEVEL) 10274 NTKERNELAPI 10275 VOID 10276 NTAPI 10277 KeInitializeSemaphore( 10278 _Out_ PRKSEMAPHORE Semaphore, 10279 _In_ LONG Count, 10280 _In_ LONG Limit); 10281 10282 _IRQL_requires_max_(DISPATCH_LEVEL) 10283 NTKERNELAPI 10284 VOID 10285 NTAPI 10286 KeInitializeTimer( 10287 _Out_ PKTIMER Timer); 10288 10289 _IRQL_requires_max_(DISPATCH_LEVEL) 10290 NTKERNELAPI 10291 VOID 10292 NTAPI 10293 KeInitializeTimerEx( 10294 _Out_ PKTIMER Timer, 10295 _In_ TIMER_TYPE Type); 10296 10297 _IRQL_requires_(DISPATCH_LEVEL) 10298 NTKERNELAPI 10299 BOOLEAN 10300 NTAPI 10301 KeInsertByKeyDeviceQueue( 10302 _Inout_ PKDEVICE_QUEUE DeviceQueue, 10303 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, 10304 _In_ ULONG SortKey); 10305 10306 _IRQL_requires_(DISPATCH_LEVEL) 10307 NTKERNELAPI 10308 BOOLEAN 10309 NTAPI 10310 KeInsertDeviceQueue( 10311 _Inout_ PKDEVICE_QUEUE DeviceQueue, 10312 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 10313 10314 NTKERNELAPI 10315 BOOLEAN 10316 NTAPI 10317 KeInsertQueueDpc( 10318 _Inout_ PRKDPC Dpc, 10319 _In_opt_ PVOID SystemArgument1, 10320 _In_opt_ PVOID SystemArgument2); 10321 10322 _Releases_lock_(_Global_critical_region_) 10323 _IRQL_requires_max_(APC_LEVEL) 10324 NTKERNELAPI 10325 VOID 10326 NTAPI 10327 KeLeaveCriticalRegion(VOID); 10328 10329 NTHALAPI 10330 LARGE_INTEGER 10331 NTAPI 10332 KeQueryPerformanceCounter( 10333 _Out_opt_ PLARGE_INTEGER PerformanceFrequency); 10334 10335 _IRQL_requires_max_(PASSIVE_LEVEL) 10336 NTKERNELAPI 10337 KPRIORITY 10338 NTAPI 10339 KeQueryPriorityThread( 10340 _In_ PRKTHREAD Thread); 10341 10342 NTKERNELAPI 10343 ULONG 10344 NTAPI 10345 KeQueryTimeIncrement(VOID); 10346 10347 _IRQL_requires_max_(DISPATCH_LEVEL) 10348 NTKERNELAPI 10349 LONG 10350 NTAPI 10351 KeReadStateEvent( 10352 _In_ PRKEVENT Event); 10353 10354 _IRQL_requires_max_(DISPATCH_LEVEL) 10355 NTKERNELAPI 10356 LONG 10357 NTAPI 10358 KeReadStateMutex( 10359 _In_ PRKMUTEX Mutex); 10360 10361 _IRQL_requires_max_(DISPATCH_LEVEL) 10362 NTKERNELAPI 10363 LONG 10364 NTAPI 10365 KeReadStateSemaphore( 10366 _In_ PRKSEMAPHORE Semaphore); 10367 10368 _IRQL_requires_max_(DISPATCH_LEVEL) 10369 NTKERNELAPI 10370 BOOLEAN 10371 NTAPI 10372 KeReadStateTimer( 10373 _In_ PKTIMER Timer); 10374 10375 _Must_inspect_result_ 10376 NTKERNELAPI 10377 BOOLEAN 10378 NTAPI 10379 KeRegisterBugCheckCallback( 10380 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord, 10381 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, 10382 _In_reads_bytes_opt_(Length) PVOID Buffer, 10383 _In_ ULONG Length, 10384 _In_ PUCHAR Component); 10385 10386 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 10387 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 10388 NTKERNELAPI 10389 LONG 10390 NTAPI 10391 KeReleaseMutex( 10392 _Inout_ PRKMUTEX Mutex, 10393 _In_ BOOLEAN Wait); 10394 10395 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 10396 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 10397 NTKERNELAPI 10398 LONG 10399 NTAPI 10400 KeReleaseSemaphore( 10401 _Inout_ PRKSEMAPHORE Semaphore, 10402 _In_ KPRIORITY Increment, 10403 _In_ LONG Adjustment, 10404 _In_ _Literal_ BOOLEAN Wait); 10405 10406 _IRQL_requires_(DISPATCH_LEVEL) 10407 NTKERNELAPI 10408 PKDEVICE_QUEUE_ENTRY 10409 NTAPI 10410 KeRemoveByKeyDeviceQueue( 10411 _Inout_ PKDEVICE_QUEUE DeviceQueue, 10412 _In_ ULONG SortKey); 10413 10414 _IRQL_requires_(DISPATCH_LEVEL) 10415 NTKERNELAPI 10416 PKDEVICE_QUEUE_ENTRY 10417 NTAPI 10418 KeRemoveDeviceQueue( 10419 _Inout_ PKDEVICE_QUEUE DeviceQueue); 10420 10421 _IRQL_requires_max_(DISPATCH_LEVEL) 10422 NTKERNELAPI 10423 BOOLEAN 10424 NTAPI 10425 KeRemoveEntryDeviceQueue( 10426 _Inout_ PKDEVICE_QUEUE DeviceQueue, 10427 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 10428 10429 _IRQL_requires_max_(HIGH_LEVEL) 10430 NTKERNELAPI 10431 BOOLEAN 10432 NTAPI 10433 KeRemoveQueueDpc( 10434 _Inout_ PRKDPC Dpc); 10435 10436 _IRQL_requires_max_(DISPATCH_LEVEL) 10437 NTKERNELAPI 10438 LONG 10439 NTAPI 10440 KeResetEvent( 10441 _Inout_ PRKEVENT Event); 10442 10443 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 10444 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 10445 NTKERNELAPI 10446 LONG 10447 NTAPI 10448 KeSetEvent( 10449 _Inout_ PRKEVENT Event, 10450 _In_ KPRIORITY Increment, 10451 _In_ _Literal_ BOOLEAN Wait); 10452 10453 NTKERNELAPI 10454 VOID 10455 NTAPI 10456 KeSetImportanceDpc( 10457 _Inout_ PRKDPC Dpc, 10458 _In_ KDPC_IMPORTANCE Importance); 10459 10460 _IRQL_requires_min_(PASSIVE_LEVEL) 10461 _IRQL_requires_max_(DISPATCH_LEVEL) 10462 NTKERNELAPI 10463 KPRIORITY 10464 NTAPI 10465 KeSetPriorityThread( 10466 _Inout_ PKTHREAD Thread, 10467 _In_ KPRIORITY Priority); 10468 10469 _IRQL_requires_max_(DISPATCH_LEVEL) 10470 NTKERNELAPI 10471 BOOLEAN 10472 NTAPI 10473 KeSetTimer( 10474 _Inout_ PKTIMER Timer, 10475 _In_ LARGE_INTEGER DueTime, 10476 _In_opt_ PKDPC Dpc); 10477 10478 _IRQL_requires_max_(DISPATCH_LEVEL) 10479 NTKERNELAPI 10480 BOOLEAN 10481 NTAPI 10482 KeSetTimerEx( 10483 _Inout_ PKTIMER Timer, 10484 _In_ LARGE_INTEGER DueTime, 10485 _In_ LONG Period OPTIONAL, 10486 _In_opt_ PKDPC Dpc); 10487 10488 NTHALAPI 10489 VOID 10490 NTAPI 10491 KeStallExecutionProcessor( 10492 _In_ ULONG MicroSeconds); 10493 10494 _IRQL_requires_max_(HIGH_LEVEL) 10495 NTKERNELAPI 10496 BOOLEAN 10497 NTAPI 10498 KeSynchronizeExecution( 10499 _Inout_ PKINTERRUPT Interrupt, 10500 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, 10501 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext); 10502 10503 _IRQL_requires_min_(PASSIVE_LEVEL) 10504 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) 10505 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 10506 NTKERNELAPI 10507 NTSTATUS 10508 NTAPI 10509 KeWaitForMultipleObjects( 10510 _In_ ULONG Count, 10511 _In_reads_(Count) PVOID Object[], 10512 _In_ __drv_strictTypeMatch(__drv_typeConst) WAIT_TYPE WaitType, 10513 _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, 10514 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, 10515 _In_ BOOLEAN Alertable, 10516 _In_opt_ PLARGE_INTEGER Timeout, 10517 _Out_opt_ PKWAIT_BLOCK WaitBlockArray); 10518 10519 #define KeWaitForMutexObject KeWaitForSingleObject 10520 10521 _IRQL_requires_min_(PASSIVE_LEVEL) 10522 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) 10523 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 10524 NTKERNELAPI 10525 NTSTATUS 10526 NTAPI 10527 KeWaitForSingleObject( 10528 _In_ _Points_to_data_ PVOID Object, 10529 _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, 10530 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, 10531 _In_ BOOLEAN Alertable, 10532 _In_opt_ PLARGE_INTEGER Timeout); 10533 10534 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 10535 10536 #if (NTDDI_VERSION >= NTDDI_WINXP) 10537 10538 _Requires_lock_not_held_(*LockHandle) 10539 _Acquires_lock_(*LockHandle) 10540 _Post_same_lock_(*SpinLock, *LockHandle) 10541 _IRQL_requires_max_(DISPATCH_LEVEL) 10542 _IRQL_saves_global_(QueuedSpinLock,LockHandle) 10543 _IRQL_raises_(DISPATCH_LEVEL) 10544 _DECL_HAL_KE_IMPORT 10545 VOID 10546 FASTCALL 10547 KeAcquireInStackQueuedSpinLock( 10548 _Inout_ PKSPIN_LOCK SpinLock, 10549 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 10550 10551 _Requires_lock_not_held_(*LockHandle) 10552 _Acquires_lock_(*LockHandle) 10553 _Post_same_lock_(*SpinLock, *LockHandle) 10554 _IRQL_requires_min_(DISPATCH_LEVEL) 10555 NTKERNELAPI 10556 VOID 10557 FASTCALL 10558 KeAcquireInStackQueuedSpinLockAtDpcLevel( 10559 _Inout_ PKSPIN_LOCK SpinLock, 10560 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 10561 10562 _Requires_lock_not_held_(*Interrupt->ActualLock) 10563 _Acquires_lock_(*Interrupt->ActualLock) 10564 _IRQL_requires_max_(HIGH_LEVEL) 10565 _IRQL_saves_ 10566 _IRQL_raises_(HIGH_LEVEL) 10567 NTKERNELAPI 10568 KIRQL 10569 NTAPI 10570 KeAcquireInterruptSpinLock( 10571 _Inout_ PKINTERRUPT Interrupt); 10572 10573 _IRQL_requires_min_(PASSIVE_LEVEL) 10574 _IRQL_requires_max_(DISPATCH_LEVEL) 10575 NTKERNELAPI 10576 BOOLEAN 10577 NTAPI 10578 KeAreApcsDisabled(VOID); 10579 10580 NTKERNELAPI 10581 ULONG 10582 NTAPI 10583 KeGetRecommendedSharedDataAlignment(VOID); 10584 10585 _IRQL_requires_max_(PASSIVE_LEVEL) 10586 NTKERNELAPI 10587 ULONG 10588 NTAPI 10589 KeQueryRuntimeThread( 10590 _In_ PKTHREAD Thread, 10591 _Out_ PULONG UserTime); 10592 10593 _Requires_lock_held_(*LockHandle) 10594 _Releases_lock_(*LockHandle) 10595 _IRQL_requires_(DISPATCH_LEVEL) 10596 NTKERNELAPI 10597 VOID 10598 FASTCALL 10599 KeReleaseInStackQueuedSpinLockFromDpcLevel( 10600 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 10601 10602 _Requires_lock_held_(*Interrupt->ActualLock) 10603 _Releases_lock_(*Interrupt->ActualLock) 10604 _IRQL_requires_(HIGH_LEVEL) 10605 NTKERNELAPI 10606 VOID 10607 NTAPI 10608 KeReleaseInterruptSpinLock( 10609 _Inout_ PKINTERRUPT Interrupt, 10610 _In_ _IRQL_restores_ KIRQL OldIrql); 10611 10612 _IRQL_requires_(DISPATCH_LEVEL) 10613 NTKERNELAPI 10614 PKDEVICE_QUEUE_ENTRY 10615 NTAPI 10616 KeRemoveByKeyDeviceQueueIfBusy( 10617 _Inout_ PKDEVICE_QUEUE DeviceQueue, 10618 _In_ ULONG SortKey); 10619 10620 _Requires_lock_held_(*LockHandle) 10621 _Releases_lock_(*LockHandle) 10622 _IRQL_requires_(DISPATCH_LEVEL) 10623 _IRQL_restores_global_(QueuedSpinLock,LockHandle) 10624 _DECL_HAL_KE_IMPORT 10625 VOID 10626 FASTCALL 10627 KeReleaseInStackQueuedSpinLock( 10628 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 10629 10630 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 10631 10632 #if (NTDDI_VERSION >= NTDDI_WINXPSP1) 10633 10634 _Must_inspect_result_ 10635 NTKERNELAPI 10636 BOOLEAN 10637 NTAPI 10638 KeDeregisterBugCheckReasonCallback( 10639 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord); 10640 10641 _Must_inspect_result_ 10642 NTKERNELAPI 10643 BOOLEAN 10644 NTAPI 10645 KeRegisterBugCheckReasonCallback( 10646 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, 10647 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, 10648 _In_ KBUGCHECK_CALLBACK_REASON Reason, 10649 _In_ PUCHAR Component); 10650 10651 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */ 10652 10653 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 10654 _IRQL_requires_max_(APC_LEVEL) 10655 NTKERNELAPI 10656 VOID 10657 NTAPI 10658 KeFlushQueuedDpcs(VOID); 10659 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ 10660 #if (NTDDI_VERSION >= NTDDI_WS03) 10661 10662 _IRQL_requires_max_(APC_LEVEL) 10663 NTKERNELAPI 10664 PVOID 10665 NTAPI 10666 KeRegisterNmiCallback( 10667 _In_ PNMI_CALLBACK CallbackRoutine, 10668 _In_opt_ PVOID Context); 10669 10670 _IRQL_requires_max_(APC_LEVEL) 10671 NTKERNELAPI 10672 NTSTATUS 10673 NTAPI 10674 KeDeregisterNmiCallback( 10675 _In_ PVOID Handle); 10676 10677 NTKERNELAPI 10678 VOID 10679 NTAPI 10680 KeInitializeThreadedDpc( 10681 _Out_ PRKDPC Dpc, 10682 _In_ PKDEFERRED_ROUTINE DeferredRoutine, 10683 _In_opt_ PVOID DeferredContext); 10684 10685 _IRQL_requires_min_(PASSIVE_LEVEL) 10686 _IRQL_requires_max_(IPI_LEVEL-1) 10687 NTKERNELAPI 10688 ULONG_PTR 10689 NTAPI 10690 KeIpiGenericCall( 10691 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction, 10692 _In_ ULONG_PTR Context); 10693 10694 _Requires_lock_not_held_(*SpinLock) 10695 _Acquires_lock_(*SpinLock) 10696 _IRQL_requires_max_(DISPATCH_LEVEL) 10697 _IRQL_saves_ 10698 NTKERNELAPI 10699 KIRQL 10700 FASTCALL 10701 KeAcquireSpinLockForDpc( 10702 _Inout_ PKSPIN_LOCK SpinLock); 10703 10704 _Requires_lock_held_(*SpinLock) 10705 _Releases_lock_(*SpinLock) 10706 _IRQL_requires_(DISPATCH_LEVEL) 10707 NTKERNELAPI 10708 VOID 10709 FASTCALL 10710 KeReleaseSpinLockForDpc( 10711 _Inout_ PKSPIN_LOCK SpinLock, 10712 _In_ _IRQL_restores_ KIRQL OldIrql); 10713 10714 _Must_inspect_result_ 10715 NTKERNELAPI 10716 BOOLEAN 10717 FASTCALL 10718 KeTestSpinLock( 10719 _In_ PKSPIN_LOCK SpinLock); 10720 10721 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 10722 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 10723 10724 _Must_inspect_result_ 10725 _IRQL_requires_min_(DISPATCH_LEVEL) 10726 _Post_satisfies_(return == 1 || return == 0) 10727 NTKERNELAPI 10728 BOOLEAN 10729 FASTCALL 10730 KeTryToAcquireSpinLockAtDpcLevel( 10731 _Inout_ _Requires_lock_not_held_(*_Curr_) 10732 _When_(return!=0, _Acquires_lock_(*_Curr_)) 10733 PKSPIN_LOCK SpinLock); 10734 10735 _IRQL_requires_min_(PASSIVE_LEVEL) 10736 _IRQL_requires_max_(DISPATCH_LEVEL) 10737 NTKERNELAPI 10738 BOOLEAN 10739 NTAPI 10740 KeAreAllApcsDisabled(VOID); 10741 10742 _Acquires_lock_(_Global_critical_region_) 10743 _Requires_lock_not_held_(*Mutex) 10744 _Acquires_lock_(*Mutex) 10745 _IRQL_requires_max_(APC_LEVEL) 10746 _IRQL_requires_min_(PASSIVE_LEVEL) 10747 NTKERNELAPI 10748 VOID 10749 FASTCALL 10750 KeAcquireGuardedMutex( 10751 _Inout_ PKGUARDED_MUTEX GuardedMutex); 10752 10753 _Requires_lock_not_held_(*FastMutex) 10754 _Acquires_lock_(*FastMutex) 10755 _IRQL_requires_max_(APC_LEVEL) 10756 _IRQL_requires_min_(PASSIVE_LEVEL) 10757 NTKERNELAPI 10758 VOID 10759 FASTCALL 10760 KeAcquireGuardedMutexUnsafe( 10761 _Inout_ PKGUARDED_MUTEX GuardedMutex); 10762 10763 _Acquires_lock_(_Global_critical_region_) 10764 _IRQL_requires_max_(APC_LEVEL) 10765 NTKERNELAPI 10766 VOID 10767 NTAPI 10768 KeEnterGuardedRegion(VOID); 10769 10770 _Releases_lock_(_Global_critical_region_) 10771 _IRQL_requires_max_(APC_LEVEL) 10772 NTKERNELAPI 10773 VOID 10774 NTAPI 10775 KeLeaveGuardedRegion(VOID); 10776 10777 _IRQL_requires_max_(APC_LEVEL) 10778 _IRQL_requires_min_(PASSIVE_LEVEL) 10779 NTKERNELAPI 10780 VOID 10781 FASTCALL 10782 KeInitializeGuardedMutex( 10783 _Out_ PKGUARDED_MUTEX GuardedMutex); 10784 10785 _Requires_lock_held_(*FastMutex) 10786 _Releases_lock_(*FastMutex) 10787 _IRQL_requires_max_(APC_LEVEL) 10788 NTKERNELAPI 10789 VOID 10790 FASTCALL 10791 KeReleaseGuardedMutexUnsafe( 10792 _Inout_ PKGUARDED_MUTEX GuardedMutex); 10793 10794 _Releases_lock_(_Global_critical_region_) 10795 _Requires_lock_held_(*Mutex) 10796 _Releases_lock_(*Mutex) 10797 _IRQL_requires_max_(APC_LEVEL) 10798 NTKERNELAPI 10799 VOID 10800 FASTCALL 10801 KeReleaseGuardedMutex( 10802 _Inout_ PKGUARDED_MUTEX GuardedMutex); 10803 10804 _Must_inspect_result_ 10805 _Success_(return != FALSE) 10806 _IRQL_requires_max_(APC_LEVEL) 10807 _Post_satisfies_(return == 1 || return == 0) 10808 NTKERNELAPI 10809 BOOLEAN 10810 FASTCALL 10811 KeTryToAcquireGuardedMutex( 10812 _When_ (return, _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)) _Acquires_lock_(_Global_critical_region_) 10813 _Inout_ PKGUARDED_MUTEX GuardedMutex); 10814 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 10815 10816 #if (NTDDI_VERSION >= NTDDI_VISTA) 10817 _Requires_lock_not_held_(*LockHandle) 10818 _Acquires_lock_(*LockHandle) 10819 _Post_same_lock_(*SpinLock, *LockHandle) 10820 _IRQL_requires_max_(DISPATCH_LEVEL) 10821 _IRQL_saves_global_(QueuedSpinLock,LockHandle) 10822 NTKERNELAPI 10823 VOID 10824 FASTCALL 10825 KeAcquireInStackQueuedSpinLockForDpc( 10826 _Inout_ PKSPIN_LOCK SpinLock, 10827 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 10828 10829 _Requires_lock_held_(*LockHandle) 10830 _Releases_lock_(*LockHandle) 10831 _IRQL_requires_(DISPATCH_LEVEL) 10832 _IRQL_restores_global_(QueuedSpinLock,LockHandle) 10833 NTKERNELAPI 10834 VOID 10835 FASTCALL 10836 KeReleaseInStackQueuedSpinLockForDpc( 10837 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 10838 10839 _IRQL_requires_(DISPATCH_LEVEL) 10840 NTKERNELAPI 10841 NTSTATUS 10842 NTAPI 10843 KeQueryDpcWatchdogInformation( 10844 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation); 10845 #if defined(SINGLE_GROUP_LEGACY_API) 10846 10847 _IRQL_requires_min_(PASSIVE_LEVEL) 10848 _IRQL_requires_max_(APC_LEVEL) 10849 NTKERNELAPI 10850 KAFFINITY 10851 NTAPI 10852 KeSetSystemAffinityThreadEx( 10853 _In_ KAFFINITY Affinity); 10854 10855 _IRQL_requires_min_(PASSIVE_LEVEL) 10856 _IRQL_requires_max_(APC_LEVEL) 10857 NTKERNELAPI 10858 VOID 10859 NTAPI 10860 KeRevertToUserAffinityThreadEx( 10861 _In_ KAFFINITY Affinity); 10862 10863 NTKERNELAPI 10864 ULONG 10865 NTAPI 10866 KeQueryActiveProcessorCount( 10867 _Out_opt_ PKAFFINITY ActiveProcessors); 10868 10869 NTKERNELAPI 10870 ULONG 10871 NTAPI 10872 KeQueryMaximumProcessorCount(VOID); 10873 #endif /* SINGLE_GROUP_LEGACY_API */ 10874 10875 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 10876 10877 #if (NTDDI_VERSION >= NTDDI_WS08) 10878 10879 _IRQL_requires_max_(APC_LEVEL) 10880 PVOID 10881 NTAPI 10882 KeRegisterProcessorChangeCallback( 10883 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction, 10884 _In_opt_ PVOID CallbackContext, 10885 _In_ ULONG Flags); 10886 10887 _IRQL_requires_max_(APC_LEVEL) 10888 VOID 10889 NTAPI 10890 KeDeregisterProcessorChangeCallback( 10891 _In_ PVOID CallbackHandle); 10892 10893 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */ 10894 #if (NTDDI_VERSION >= NTDDI_WIN7) 10895 10896 _IRQL_requires_max_(DISPATCH_LEVEL) 10897 _IRQL_requires_min_(PASSIVE_LEVEL) 10898 _IRQL_requires_same_ 10899 ULONG64 10900 NTAPI 10901 KeQueryTotalCycleTimeProcess( 10902 _Inout_ PKPROCESS Process, 10903 _Out_ PULONG64 CycleTimeStamp); 10904 10905 _IRQL_requires_max_(APC_LEVEL) 10906 _IRQL_requires_min_(PASSIVE_LEVEL) 10907 _IRQL_requires_same_ 10908 ULONG64 10909 NTAPI 10910 KeQueryTotalCycleTimeThread( 10911 _Inout_ PKTHREAD Thread, 10912 _Out_ PULONG64 CycleTimeStamp); 10913 10914 _Must_inspect_result_ 10915 NTKERNELAPI 10916 NTSTATUS 10917 NTAPI 10918 KeSetTargetProcessorDpcEx( 10919 _Inout_ PKDPC Dpc, 10920 _In_ PPROCESSOR_NUMBER ProcNumber); 10921 10922 _IRQL_requires_min_(PASSIVE_LEVEL) 10923 _IRQL_requires_max_(APC_LEVEL) 10924 NTKERNELAPI 10925 VOID 10926 NTAPI 10927 KeSetSystemGroupAffinityThread( 10928 _In_ PGROUP_AFFINITY Affinity, 10929 _Out_opt_ PGROUP_AFFINITY PreviousAffinity); 10930 10931 _IRQL_requires_min_(PASSIVE_LEVEL) 10932 _IRQL_requires_max_(APC_LEVEL) 10933 NTKERNELAPI 10934 VOID 10935 NTAPI 10936 KeRevertToUserGroupAffinityThread( 10937 _In_ PGROUP_AFFINITY PreviousAffinity); 10938 10939 _IRQL_requires_max_(DISPATCH_LEVEL) 10940 NTKERNELAPI 10941 BOOLEAN 10942 NTAPI 10943 KeSetCoalescableTimer( 10944 _Inout_ PKTIMER Timer, 10945 _In_ LARGE_INTEGER DueTime, 10946 _In_ ULONG Period, 10947 _In_ ULONG TolerableDelay, 10948 _In_opt_ PKDPC Dpc); 10949 10950 NTKERNELAPI 10951 ULONGLONG 10952 NTAPI 10953 KeQueryUnbiasedInterruptTime(VOID); 10954 10955 NTKERNELAPI 10956 ULONG 10957 NTAPI 10958 KeQueryActiveProcessorCountEx( 10959 _In_ USHORT GroupNumber); 10960 10961 NTKERNELAPI 10962 ULONG 10963 NTAPI 10964 KeQueryMaximumProcessorCountEx( 10965 _In_ USHORT GroupNumber); 10966 10967 NTKERNELAPI 10968 USHORT 10969 NTAPI 10970 KeQueryActiveGroupCount(VOID); 10971 10972 NTKERNELAPI 10973 USHORT 10974 NTAPI 10975 KeQueryMaximumGroupCount(VOID); 10976 10977 NTKERNELAPI 10978 KAFFINITY 10979 NTAPI 10980 KeQueryGroupAffinity( 10981 _In_ USHORT GroupNumber); 10982 10983 NTKERNELAPI 10984 ULONG 10985 NTAPI 10986 KeGetCurrentProcessorNumberEx( 10987 _Out_opt_ PPROCESSOR_NUMBER ProcNumber); 10988 10989 NTKERNELAPI 10990 VOID 10991 NTAPI 10992 KeQueryNodeActiveAffinity( 10993 _In_ USHORT NodeNumber, 10994 _Out_opt_ PGROUP_AFFINITY Affinity, 10995 _Out_opt_ PUSHORT Count); 10996 10997 NTKERNELAPI 10998 USHORT 10999 NTAPI 11000 KeQueryNodeMaximumProcessorCount( 11001 _In_ USHORT NodeNumber); 11002 11003 NTKERNELAPI 11004 USHORT 11005 NTAPI 11006 KeQueryHighestNodeNumber(VOID); 11007 11008 NTKERNELAPI 11009 USHORT 11010 NTAPI 11011 KeGetCurrentNodeNumber(VOID); 11012 11013 _IRQL_requires_max_(DISPATCH_LEVEL) 11014 NTKERNELAPI 11015 NTSTATUS 11016 NTAPI 11017 KeQueryLogicalProcessorRelationship( 11018 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, 11019 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, 11020 _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, 11021 _Inout_ PULONG Length); 11022 11023 _Must_inspect_result_ 11024 _IRQL_requires_max_(DISPATCH_LEVEL) 11025 _Ret_range_(<=, 0) 11026 _When_(return==0, _Kernel_float_saved_) 11027 NTKERNELAPI 11028 NTSTATUS 11029 NTAPI 11030 KeSaveExtendedProcessorState( 11031 _In_ ULONG64 Mask, 11032 _Out_ _Requires_lock_not_held_(*_Curr_) 11033 _When_(return==0, _Acquires_lock_(*_Curr_)) 11034 PXSTATE_SAVE XStateSave); 11035 11036 _Kernel_float_restored_ 11037 NTKERNELAPI 11038 VOID 11039 NTAPI 11040 KeRestoreExtendedProcessorState( 11041 _In_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 11042 PXSTATE_SAVE XStateSave); 11043 11044 NTSTATUS 11045 NTAPI 11046 KeGetProcessorNumberFromIndex( 11047 _In_ ULONG ProcIndex, 11048 _Out_ PPROCESSOR_NUMBER ProcNumber); 11049 11050 ULONG 11051 NTAPI 11052 KeGetProcessorIndexFromNumber( 11053 _In_ PPROCESSOR_NUMBER ProcNumber); 11054 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 11055 #if !defined(_IA64_) 11056 NTHALAPI 11057 VOID 11058 NTAPI 11059 KeFlushWriteBuffer(VOID); 11060 #endif 11061 11062 /* VOID 11063 * KeInitializeCallbackRecord( 11064 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) 11065 */ 11066 #define KeInitializeCallbackRecord(CallbackRecord) \ 11067 CallbackRecord->State = BufferEmpty; 11068 11069 #if defined(_PREFAST_) 11070 11071 void __PREfastPagedCode(void); 11072 void __PREfastPagedCodeLocked(void); 11073 #define PAGED_CODE() __PREfastPagedCode(); 11074 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked(); 11075 11076 #elif DBG 11077 11078 #if (NTDDI_VERSION >= NTDDI_VISTA) 11079 #define PAGED_ASSERT( exp ) NT_ASSERT( exp ) 11080 #else 11081 #define PAGED_ASSERT( exp ) ASSERT( exp ) 11082 #endif 11083 11084 #define PAGED_CODE() { \ 11085 if (KeGetCurrentIrql() > APC_LEVEL) { \ 11086 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ 11087 PAGED_ASSERT(FALSE); \ 11088 } \ 11089 } 11090 11091 #define PAGED_CODE_LOCKED() NOP_FUNCTION; 11092 11093 #else 11094 11095 #define PAGED_CODE() NOP_FUNCTION; 11096 #define PAGED_CODE_LOCKED() NOP_FUNCTION; 11097 11098 #endif /* DBG */ 11099 11100 /****************************************************************************** 11101 * Memory manager Functions * 11102 ******************************************************************************/ 11103 /* Alignment Macros */ 11104 #define ALIGN_DOWN_BY(size, align) \ 11105 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1)) 11106 11107 #define ALIGN_UP_BY(size, align) \ 11108 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align)) 11109 11110 #define ALIGN_DOWN_POINTER_BY(ptr, align) \ 11111 ((PVOID)ALIGN_DOWN_BY(ptr, align)) 11112 11113 #define ALIGN_UP_POINTER_BY(ptr, align) \ 11114 ((PVOID)ALIGN_UP_BY(ptr, align)) 11115 11116 #define ALIGN_DOWN(size, type) \ 11117 ALIGN_DOWN_BY(size, sizeof(type)) 11118 11119 #define ALIGN_UP(size, type) \ 11120 ALIGN_UP_BY(size, sizeof(type)) 11121 11122 #define ALIGN_DOWN_POINTER(ptr, type) \ 11123 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type)) 11124 11125 #define ALIGN_UP_POINTER(ptr, type) \ 11126 ALIGN_UP_POINTER_BY(ptr, sizeof(type)) 11127 11128 #ifndef FIELD_OFFSET 11129 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field)) 11130 #endif 11131 11132 #ifndef FIELD_SIZE 11133 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) 11134 #endif 11135 11136 #define POOL_TAGGING 1 11137 11138 #if DBG 11139 #define IF_DEBUG if (TRUE) 11140 #else 11141 #define IF_DEBUG if (FALSE) 11142 #endif /* DBG */ 11143 11144 /* ULONG 11145 * BYTE_OFFSET( 11146 * IN PVOID Va) 11147 */ 11148 #define BYTE_OFFSET(Va) \ 11149 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) 11150 11151 /* ULONG 11152 * BYTES_TO_PAGES( 11153 * IN ULONG Size) 11154 */ 11155 #define BYTES_TO_PAGES(Size) \ 11156 (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT) 11157 11158 /* PVOID 11159 * PAGE_ALIGN( 11160 * IN PVOID Va) 11161 */ 11162 #define PAGE_ALIGN(Va) \ 11163 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) 11164 11165 /* ULONG_PTR 11166 * ROUND_TO_PAGES( 11167 * IN ULONG_PTR Size) 11168 */ 11169 #define ROUND_TO_PAGES(Size) \ 11170 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) 11171 11172 /* ULONG 11173 * ADDRESS_AND_SIZE_TO_SPAN_PAGES( 11174 * IN PVOID Va, 11175 * IN ULONG Size) 11176 */ 11177 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \ 11178 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ 11179 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) 11180 11181 #define COMPUTE_PAGES_SPANNED(Va, Size) \ 11182 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) 11183 11184 /* 11185 * ULONG 11186 * MmGetMdlByteCount( 11187 * IN PMDL Mdl) 11188 */ 11189 #define MmGetMdlByteCount(_Mdl) \ 11190 ((_Mdl)->ByteCount) 11191 11192 /* 11193 * ULONG 11194 * MmGetMdlByteOffset( 11195 * IN PMDL Mdl) 11196 */ 11197 #define MmGetMdlByteOffset(_Mdl) \ 11198 ((_Mdl)->ByteOffset) 11199 11200 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa) 11201 11202 /* 11203 * PPFN_NUMBER 11204 * MmGetMdlPfnArray( 11205 * IN PMDL Mdl) 11206 */ 11207 #define MmGetMdlPfnArray(_Mdl) \ 11208 ((PPFN_NUMBER) ((_Mdl) + 1)) 11209 11210 /* 11211 * PVOID 11212 * MmGetMdlVirtualAddress( 11213 * IN PMDL Mdl) 11214 */ 11215 #define MmGetMdlVirtualAddress(_Mdl) \ 11216 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) 11217 11218 #define MmGetProcedureAddress(Address) (Address) 11219 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) 11220 11221 /* PVOID MmGetSystemAddressForMdl( 11222 * IN PMDL Mdl); 11223 */ 11224 #define MmGetSystemAddressForMdl(Mdl) \ 11225 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \ 11226 MDL_SOURCE_IS_NONPAGED_POOL)) ? \ 11227 ((Mdl)->MappedSystemVa) : \ 11228 (MmMapLockedPages((Mdl), KernelMode))) 11229 11230 /* PVOID 11231 * MmGetSystemAddressForMdlSafe( 11232 * IN PMDL Mdl, 11233 * IN MM_PAGE_PRIORITY Priority) 11234 */ 11235 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ 11236 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ 11237 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ 11238 (_Mdl)->MappedSystemVa : \ 11239 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ 11240 KernelMode, MmCached, NULL, FALSE, (_Priority))) 11241 11242 /* 11243 * VOID 11244 * MmInitializeMdl( 11245 * IN PMDL MemoryDescriptorList, 11246 * IN PVOID BaseVa, 11247 * IN SIZE_T Length) 11248 */ 11249 #define MmInitializeMdl(_MemoryDescriptorList, \ 11250 _BaseVa, \ 11251 _Length) \ 11252 { \ 11253 (_MemoryDescriptorList)->Next = (PMDL) NULL; \ 11254 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ 11255 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ 11256 (_MemoryDescriptorList)->MdlFlags = 0; \ 11257 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ 11258 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ 11259 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ 11260 } 11261 11262 /* 11263 * VOID 11264 * MmPrepareMdlForReuse( 11265 * IN PMDL Mdl) 11266 */ 11267 #define MmPrepareMdlForReuse(_Mdl) \ 11268 { \ 11269 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ 11270 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ 11271 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ 11272 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ 11273 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ 11274 } \ 11275 } 11276 11277 #if (NTDDI_VERSION >= NTDDI_WIN2K) 11278 _Must_inspect_result_ 11279 _IRQL_requires_max_(DISPATCH_LEVEL) 11280 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) 11281 NTKERNELAPI 11282 PVOID 11283 NTAPI 11284 MmAllocateContiguousMemory( 11285 _In_ SIZE_T NumberOfBytes, 11286 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress); 11287 11288 _Must_inspect_result_ 11289 _IRQL_requires_max_(DISPATCH_LEVEL) 11290 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) 11291 NTKERNELAPI 11292 PVOID 11293 NTAPI 11294 MmAllocateContiguousMemorySpecifyCache( 11295 _In_ SIZE_T NumberOfBytes, 11296 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, 11297 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, 11298 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, 11299 _In_ MEMORY_CACHING_TYPE CacheType); 11300 11301 _Must_inspect_result_ 11302 _IRQL_requires_max_(DISPATCH_LEVEL) 11303 NTKERNELAPI 11304 PMDL 11305 NTAPI 11306 MmAllocatePagesForMdl( 11307 _In_ PHYSICAL_ADDRESS LowAddress, 11308 _In_ PHYSICAL_ADDRESS HighAddress, 11309 _In_ PHYSICAL_ADDRESS SkipBytes, 11310 _In_ SIZE_T TotalBytes); 11311 11312 _IRQL_requires_max_(DISPATCH_LEVEL) 11313 NTKERNELAPI 11314 VOID 11315 NTAPI 11316 MmBuildMdlForNonPagedPool( 11317 _Inout_ PMDLX MemoryDescriptorList); 11318 11319 //DECLSPEC_DEPRECATED_DDK 11320 NTKERNELAPI 11321 PMDL 11322 NTAPI 11323 MmCreateMdl( 11324 _Out_writes_bytes_opt_ (sizeof (MDL) + (sizeof (PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base, Length))) 11325 PMDL MemoryDescriptorList, 11326 _In_reads_bytes_opt_ (Length) PVOID Base, 11327 _In_ SIZE_T Length); 11328 11329 _IRQL_requires_max_(DISPATCH_LEVEL) 11330 NTKERNELAPI 11331 VOID 11332 NTAPI 11333 MmFreeContiguousMemory( 11334 _In_ PVOID BaseAddress); 11335 11336 _IRQL_requires_max_ (DISPATCH_LEVEL) 11337 NTKERNELAPI 11338 VOID 11339 NTAPI 11340 MmFreeContiguousMemorySpecifyCache( 11341 _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress, 11342 _In_ SIZE_T NumberOfBytes, 11343 _In_ MEMORY_CACHING_TYPE CacheType); 11344 11345 _IRQL_requires_max_(DISPATCH_LEVEL) 11346 NTKERNELAPI 11347 VOID 11348 NTAPI 11349 MmFreePagesFromMdl( 11350 _Inout_ PMDLX MemoryDescriptorList); 11351 11352 _IRQL_requires_max_(PASSIVE_LEVEL) 11353 NTKERNELAPI 11354 PVOID 11355 NTAPI 11356 MmGetSystemRoutineAddress( 11357 _In_ PUNICODE_STRING SystemRoutineName); 11358 11359 NTKERNELAPI 11360 LOGICAL 11361 NTAPI 11362 MmIsDriverVerifying( 11363 _In_ struct _DRIVER_OBJECT *DriverObject); 11364 11365 _Must_inspect_result_ 11366 _IRQL_requires_max_(APC_LEVEL) 11367 NTKERNELAPI 11368 PVOID 11369 NTAPI 11370 MmLockPagableDataSection( 11371 _In_ PVOID AddressWithinSection); 11372 11373 _Must_inspect_result_ 11374 _IRQL_requires_max_(DISPATCH_LEVEL) 11375 _Out_writes_bytes_opt_ (NumberOfBytes) 11376 NTKERNELAPI 11377 PVOID 11378 NTAPI 11379 MmMapIoSpace( 11380 _In_ PHYSICAL_ADDRESS PhysicalAddress, 11381 _In_ SIZE_T NumberOfBytes, 11382 _In_ MEMORY_CACHING_TYPE CacheType); 11383 11384 _Must_inspect_result_ 11385 _When_(AccessMode==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 11386 _When_(AccessMode==1, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL)) 11387 NTKERNELAPI 11388 PVOID 11389 NTAPI 11390 MmMapLockedPages( 11391 _Inout_ PMDL MemoryDescriptorList, 11392 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) 11393 KPROCESSOR_MODE AccessMode); 11394 11395 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount) 11396 _When_(AccessMode==KernelMode, _IRQL_requires_max_(DISPATCH_LEVEL)) 11397 _When_(AccessMode==UserMode, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL) _Post_notnull_) 11398 _At_(MemoryDescriptorList->MappedSystemVa, _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)) 11399 _Must_inspect_result_ 11400 _Success_(return != NULL) 11401 NTKERNELAPI 11402 PVOID 11403 NTAPI 11404 MmMapLockedPagesSpecifyCache( 11405 _Inout_ PMDLX MemoryDescriptorList, 11406 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) 11407 KPROCESSOR_MODE AccessMode, 11408 _In_ __drv_strictTypeMatch(__drv_typeCond) MEMORY_CACHING_TYPE CacheType, 11409 _In_opt_ PVOID BaseAddress, 11410 _In_ ULONG BugCheckOnFailure, 11411 _In_ MM_PAGE_PRIORITY Priority); 11412 11413 _IRQL_requires_max_(APC_LEVEL) 11414 NTKERNELAPI 11415 PVOID 11416 NTAPI 11417 MmPageEntireDriver( 11418 _In_ PVOID AddressWithinSection); 11419 11420 _IRQL_requires_max_(DISPATCH_LEVEL) 11421 _At_(MemoryDescriptorList->StartVa + MemoryDescriptorList->ByteOffset, 11422 _Field_size_bytes_opt_(MemoryDescriptorList->ByteCount)) 11423 NTKERNELAPI 11424 VOID 11425 NTAPI 11426 MmProbeAndLockPages( 11427 _Inout_ PMDLX MemoryDescriptorList, 11428 _In_ KPROCESSOR_MODE AccessMode, 11429 _In_ LOCK_OPERATION Operation); 11430 11431 NTKERNELAPI 11432 MM_SYSTEMSIZE 11433 NTAPI 11434 MmQuerySystemSize(VOID); 11435 11436 _IRQL_requires_max_(APC_LEVEL) 11437 NTKERNELAPI 11438 VOID 11439 NTAPI 11440 MmResetDriverPaging( 11441 _In_ PVOID AddressWithinSection); 11442 11443 NTKERNELAPI 11444 SIZE_T 11445 NTAPI 11446 MmSizeOfMdl( 11447 _In_reads_bytes_opt_ (Length) PVOID Base, 11448 _In_ SIZE_T Length); 11449 11450 _IRQL_requires_max_(DISPATCH_LEVEL) 11451 NTKERNELAPI 11452 VOID 11453 NTAPI 11454 MmUnlockPagableImageSection( 11455 _In_ PVOID ImageSectionHandle); 11456 11457 _IRQL_requires_max_(DISPATCH_LEVEL) 11458 NTKERNELAPI 11459 VOID 11460 NTAPI 11461 MmUnlockPages( 11462 _Inout_ PMDLX MemoryDescriptorList); 11463 11464 _IRQL_requires_max_(DISPATCH_LEVEL) 11465 NTKERNELAPI 11466 VOID 11467 NTAPI 11468 MmUnmapIoSpace( 11469 _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress, 11470 _In_ SIZE_T NumberOfBytes); 11471 11472 _IRQL_requires_max_ (APC_LEVEL) 11473 NTKERNELAPI 11474 VOID 11475 NTAPI 11476 MmProbeAndLockProcessPages( 11477 _Inout_ PMDL MemoryDescriptorList, 11478 _In_ PEPROCESS Process, 11479 _In_ KPROCESSOR_MODE AccessMode, 11480 _In_ LOCK_OPERATION Operation); 11481 11482 _IRQL_requires_max_(DISPATCH_LEVEL) 11483 NTKERNELAPI 11484 VOID 11485 NTAPI 11486 MmUnmapLockedPages( 11487 _In_ PVOID BaseAddress, 11488 _Inout_ PMDL MemoryDescriptorList); 11489 11490 _Must_inspect_result_ 11491 _IRQL_requires_max_(DISPATCH_LEVEL) 11492 _When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) 11493 NTKERNELAPI 11494 PVOID 11495 NTAPI 11496 MmAllocateContiguousMemorySpecifyCacheNode( 11497 _In_ SIZE_T NumberOfBytes, 11498 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, 11499 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, 11500 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, 11501 _In_ MEMORY_CACHING_TYPE CacheType, 11502 _In_ NODE_REQUIREMENT PreferredNode); 11503 11504 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 11505 11506 #if (NTDDI_VERSION >= NTDDI_WINXP) 11507 11508 _IRQL_requires_max_(DISPATCH_LEVEL) 11509 NTKERNELAPI 11510 NTSTATUS 11511 NTAPI 11512 MmAdvanceMdl( 11513 _Inout_ PMDLX Mdl, 11514 _In_ ULONG NumberOfBytes); 11515 11516 _Must_inspect_result_ 11517 _IRQL_requires_max_(APC_LEVEL) 11518 _When_ (return != NULL, _Out_writes_bytes_opt_ (NumberOfBytes)) 11519 NTKERNELAPI 11520 PVOID 11521 NTAPI 11522 MmAllocateMappingAddress( 11523 _In_ SIZE_T NumberOfBytes, 11524 _In_ ULONG PoolTag); 11525 11526 _IRQL_requires_max_(APC_LEVEL) 11527 NTKERNELAPI 11528 VOID 11529 NTAPI 11530 MmFreeMappingAddress( 11531 _In_ PVOID BaseAddress, 11532 _In_ ULONG PoolTag); 11533 11534 _IRQL_requires_max_ (APC_LEVEL) 11535 NTKERNELAPI 11536 NTSTATUS 11537 NTAPI 11538 MmIsVerifierEnabled( 11539 _Out_ PULONG VerifierFlags); 11540 11541 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount) 11542 _IRQL_requires_max_(DISPATCH_LEVEL) 11543 _At_(MemoryDescriptorList->MappedSystemVa + MemoryDescriptorList->ByteOffset, 11544 _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)) 11545 _Must_inspect_result_ 11546 _Success_(return != NULL) 11547 NTKERNELAPI 11548 PVOID 11549 NTAPI 11550 MmMapLockedPagesWithReservedMapping( 11551 _In_ PVOID MappingAddress, 11552 _In_ ULONG PoolTag, 11553 _Inout_ PMDLX MemoryDescriptorList, 11554 _In_ __drv_strictTypeMatch(__drv_typeCond) 11555 MEMORY_CACHING_TYPE CacheType); 11556 11557 _Must_inspect_result_ 11558 _IRQL_requires_max_(DISPATCH_LEVEL) 11559 NTKERNELAPI 11560 NTSTATUS 11561 NTAPI 11562 MmProtectMdlSystemAddress( 11563 _In_ PMDLX MemoryDescriptorList, 11564 _In_ ULONG NewProtect); 11565 11566 _IRQL_requires_max_(DISPATCH_LEVEL) 11567 NTKERNELAPI 11568 VOID 11569 NTAPI 11570 MmUnmapReservedMapping( 11571 _In_ PVOID BaseAddress, 11572 _In_ ULONG PoolTag, 11573 _Inout_ PMDLX MemoryDescriptorList); 11574 11575 _IRQL_requires_max_ (APC_LEVEL) 11576 NTKERNELAPI 11577 NTSTATUS 11578 NTAPI 11579 MmAddVerifierThunks( 11580 _In_reads_bytes_ (ThunkBufferSize) PVOID ThunkBuffer, 11581 _In_ ULONG ThunkBufferSize); 11582 11583 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 11584 #if (NTDDI_VERSION >= NTDDI_WS03) 11585 _IRQL_requires_max_ (DISPATCH_LEVEL) 11586 NTKERNELAPI 11587 LOGICAL 11588 NTAPI 11589 MmIsIoSpaceActive( 11590 _In_ PHYSICAL_ADDRESS StartAddress, 11591 _In_ SIZE_T NumberOfBytes); 11592 11593 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 11594 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 11595 _Must_inspect_result_ 11596 _IRQL_requires_max_ (DISPATCH_LEVEL) 11597 NTKERNELAPI 11598 PMDL 11599 NTAPI 11600 MmAllocatePagesForMdlEx( 11601 _In_ PHYSICAL_ADDRESS LowAddress, 11602 _In_ PHYSICAL_ADDRESS HighAddress, 11603 _In_ PHYSICAL_ADDRESS SkipBytes, 11604 _In_ SIZE_T TotalBytes, 11605 _In_ MEMORY_CACHING_TYPE CacheType, 11606 _In_ ULONG Flags); 11607 #endif 11608 11609 #if (NTDDI_VERSION >= NTDDI_VISTA) 11610 _IRQL_requires_max_ (APC_LEVEL) 11611 NTKERNELAPI 11612 LOGICAL 11613 NTAPI 11614 MmIsDriverVerifyingByAddress( 11615 _In_ PVOID AddressWithinSection); 11616 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 11617 11618 /****************************************************************************** 11619 * Security Manager Functions * 11620 ******************************************************************************/ 11621 11622 #if (NTDDI_VERSION >= NTDDI_WIN2K) 11623 _IRQL_requires_max_(PASSIVE_LEVEL) 11624 NTKERNELAPI 11625 BOOLEAN 11626 NTAPI 11627 SeAccessCheck( 11628 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, 11629 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, 11630 _In_ BOOLEAN SubjectContextLocked, 11631 _In_ ACCESS_MASK DesiredAccess, 11632 _In_ ACCESS_MASK PreviouslyGrantedAccess, 11633 _Outptr_opt_ PPRIVILEGE_SET *Privileges, 11634 _In_ PGENERIC_MAPPING GenericMapping, 11635 _In_ KPROCESSOR_MODE AccessMode, 11636 _Out_ PACCESS_MASK GrantedAccess, 11637 _Out_ PNTSTATUS AccessStatus); 11638 11639 _IRQL_requires_max_(PASSIVE_LEVEL) 11640 NTKERNELAPI 11641 NTSTATUS 11642 NTAPI 11643 SeAssignSecurity( 11644 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor, 11645 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor, 11646 _Out_ PSECURITY_DESCRIPTOR *NewDescriptor, 11647 _In_ BOOLEAN IsDirectoryObject, 11648 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, 11649 _In_ PGENERIC_MAPPING GenericMapping, 11650 _In_ POOL_TYPE PoolType); 11651 11652 NTKERNELAPI 11653 NTSTATUS 11654 NTAPI 11655 SeAssignSecurityEx( 11656 _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor, 11657 _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor, 11658 _Out_ PSECURITY_DESCRIPTOR *NewDescriptor, 11659 _In_opt_ GUID *ObjectType, 11660 _In_ BOOLEAN IsDirectoryObject, 11661 _In_ ULONG AutoInheritFlags, 11662 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, 11663 _In_ PGENERIC_MAPPING GenericMapping, 11664 _In_ POOL_TYPE PoolType); 11665 11666 _IRQL_requires_max_(PASSIVE_LEVEL) 11667 NTKERNELAPI 11668 NTSTATUS 11669 NTAPI 11670 SeDeassignSecurity( 11671 _Inout_ PSECURITY_DESCRIPTOR *SecurityDescriptor); 11672 11673 _IRQL_requires_max_(PASSIVE_LEVEL) 11674 NTKERNELAPI 11675 BOOLEAN 11676 NTAPI 11677 SeValidSecurityDescriptor( 11678 _In_ ULONG Length, 11679 _In_reads_bytes_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor); 11680 11681 NTKERNELAPI 11682 ULONG 11683 NTAPI 11684 SeObjectCreateSaclAccessBits( 11685 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); 11686 11687 NTKERNELAPI 11688 VOID 11689 NTAPI 11690 SeReleaseSubjectContext( 11691 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext); 11692 11693 NTKERNELAPI 11694 VOID 11695 NTAPI 11696 SeUnlockSubjectContext( 11697 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext); 11698 11699 NTKERNELAPI 11700 VOID 11701 NTAPI 11702 SeCaptureSubjectContext( 11703 _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext); 11704 11705 NTKERNELAPI 11706 VOID 11707 NTAPI 11708 SeLockSubjectContext( 11709 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext); 11710 11711 11712 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 11713 11714 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 11715 11716 _At_(AuditParameters->ParameterCount, _Const_) 11717 NTSTATUS 11718 NTAPI 11719 SeSetAuditParameter( 11720 _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters, 11721 _In_ SE_ADT_PARAMETER_TYPE Type, 11722 _In_range_(<,SE_MAX_AUDIT_PARAMETERS) ULONG Index, 11723 _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE")) 11724 PVOID Data); 11725 11726 NTSTATUS 11727 NTAPI 11728 SeReportSecurityEvent( 11729 _In_ ULONG Flags, 11730 _In_ PUNICODE_STRING SourceName, 11731 _In_opt_ PSID UserSid, 11732 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters); 11733 11734 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 11735 11736 #if (NTDDI_VERSION >= NTDDI_VISTA) 11737 NTKERNELAPI 11738 ULONG 11739 NTAPI 11740 SeComputeAutoInheritByObjectType( 11741 _In_ PVOID ObjectType, 11742 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, 11743 _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor); 11744 11745 #ifdef SE_NTFS_WORLD_CACHE 11746 VOID 11747 NTAPI 11748 SeGetWorldRights( 11749 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, 11750 _In_ PGENERIC_MAPPING GenericMapping, 11751 _Out_ PACCESS_MASK GrantedAccess); 11752 #endif /* SE_NTFS_WORLD_CACHE */ 11753 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 11754 /****************************************************************************** 11755 * Configuration Manager Functions * 11756 ******************************************************************************/ 11757 11758 #if (NTDDI_VERSION >= NTDDI_WINXP) 11759 _IRQL_requires_max_(APC_LEVEL) 11760 NTKERNELAPI 11761 NTSTATUS 11762 NTAPI 11763 CmRegisterCallback( 11764 _In_ PEX_CALLBACK_FUNCTION Function, 11765 _In_opt_ PVOID Context, 11766 _Out_ PLARGE_INTEGER Cookie); 11767 11768 _IRQL_requires_max_(APC_LEVEL) 11769 NTKERNELAPI 11770 NTSTATUS 11771 NTAPI 11772 CmUnRegisterCallback( 11773 _In_ LARGE_INTEGER Cookie); 11774 #endif 11775 11776 #if (NTDDI_VERSION >= NTDDI_VISTA) 11777 11778 _IRQL_requires_max_(APC_LEVEL) 11779 NTKERNELAPI 11780 NTSTATUS 11781 NTAPI 11782 CmRegisterCallbackEx( 11783 _In_ PEX_CALLBACK_FUNCTION Function, 11784 _In_ PCUNICODE_STRING Altitude, 11785 _In_ PVOID Driver, 11786 _In_opt_ PVOID Context, 11787 _Out_ PLARGE_INTEGER Cookie, 11788 _Reserved_ PVOID Reserved); 11789 11790 _IRQL_requires_max_(APC_LEVEL) 11791 NTKERNELAPI 11792 VOID 11793 NTAPI 11794 CmGetCallbackVersion( 11795 _Out_opt_ PULONG Major, 11796 _Out_opt_ PULONG Minor); 11797 11798 _IRQL_requires_max_(APC_LEVEL) 11799 NTKERNELAPI 11800 NTSTATUS 11801 NTAPI 11802 CmSetCallbackObjectContext( 11803 _Inout_ PVOID Object, 11804 _In_ PLARGE_INTEGER Cookie, 11805 _In_ PVOID NewContext, 11806 _Out_opt_ PVOID *OldContext); 11807 11808 _IRQL_requires_max_(APC_LEVEL) 11809 NTKERNELAPI 11810 NTSTATUS 11811 NTAPI 11812 CmCallbackGetKeyObjectID( 11813 _In_ PLARGE_INTEGER Cookie, 11814 _In_ PVOID Object, 11815 _Out_opt_ PULONG_PTR ObjectID, 11816 _Outptr_opt_ PCUNICODE_STRING *ObjectName); 11817 11818 _IRQL_requires_max_(APC_LEVEL) 11819 NTKERNELAPI 11820 PVOID 11821 NTAPI 11822 CmGetBoundTransaction( 11823 _In_ PLARGE_INTEGER Cookie, 11824 _In_ PVOID Object); 11825 11826 #endif // NTDDI_VERSION >= NTDDI_VISTA 11827 11828 11829 /****************************************************************************** 11830 * I/O Manager Functions * 11831 ******************************************************************************/ 11832 11833 /* 11834 * NTSTATUS 11835 * IoAcquireRemoveLock( 11836 * IN PIO_REMOVE_LOCK RemoveLock, 11837 * IN OPTIONAL PVOID Tag) 11838 */ 11839 #if DBG 11840 #define IoAcquireRemoveLock(RemoveLock, Tag) \ 11841 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK)) 11842 #else 11843 #define IoAcquireRemoveLock(RemoveLock, Tag) \ 11844 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK)) 11845 #endif 11846 11847 /* 11848 * VOID 11849 * IoAdjustPagingPathCount( 11850 * IN PLONG Count, 11851 * IN BOOLEAN Increment) 11852 */ 11853 #define IoAdjustPagingPathCount(_Count, \ 11854 _Increment) \ 11855 { \ 11856 if (_Increment) \ 11857 { \ 11858 InterlockedIncrement(_Count); \ 11859 } \ 11860 else \ 11861 { \ 11862 InterlockedDecrement(_Count); \ 11863 } \ 11864 } 11865 11866 #if !defined(_M_AMD64) 11867 NTHALAPI 11868 VOID 11869 NTAPI 11870 READ_PORT_BUFFER_UCHAR( 11871 IN PUCHAR Port, 11872 IN PUCHAR Buffer, 11873 IN ULONG Count); 11874 11875 NTHALAPI 11876 VOID 11877 NTAPI 11878 READ_PORT_BUFFER_ULONG( 11879 IN PULONG Port, 11880 IN PULONG Buffer, 11881 IN ULONG Count); 11882 11883 NTHALAPI 11884 VOID 11885 NTAPI 11886 READ_PORT_BUFFER_USHORT( 11887 IN PUSHORT Port, 11888 IN PUSHORT Buffer, 11889 IN ULONG Count); 11890 11891 NTHALAPI 11892 UCHAR 11893 NTAPI 11894 READ_PORT_UCHAR( 11895 IN PUCHAR Port); 11896 11897 NTHALAPI 11898 ULONG 11899 NTAPI 11900 READ_PORT_ULONG( 11901 IN PULONG Port); 11902 11903 NTHALAPI 11904 USHORT 11905 NTAPI 11906 READ_PORT_USHORT( 11907 IN PUSHORT Port); 11908 11909 NTKERNELAPI 11910 VOID 11911 NTAPI 11912 READ_REGISTER_BUFFER_UCHAR( 11913 IN PUCHAR Register, 11914 IN PUCHAR Buffer, 11915 IN ULONG Count); 11916 11917 NTKERNELAPI 11918 VOID 11919 NTAPI 11920 READ_REGISTER_BUFFER_ULONG( 11921 IN PULONG Register, 11922 IN PULONG Buffer, 11923 IN ULONG Count); 11924 11925 NTKERNELAPI 11926 VOID 11927 NTAPI 11928 READ_REGISTER_BUFFER_USHORT( 11929 IN PUSHORT Register, 11930 IN PUSHORT Buffer, 11931 IN ULONG Count); 11932 11933 NTKERNELAPI 11934 UCHAR 11935 NTAPI 11936 READ_REGISTER_UCHAR( 11937 IN PUCHAR Register); 11938 11939 NTKERNELAPI 11940 ULONG 11941 NTAPI 11942 READ_REGISTER_ULONG( 11943 IN PULONG Register); 11944 11945 NTKERNELAPI 11946 USHORT 11947 NTAPI 11948 READ_REGISTER_USHORT( 11949 IN PUSHORT Register); 11950 11951 NTHALAPI 11952 VOID 11953 NTAPI 11954 WRITE_PORT_BUFFER_UCHAR( 11955 IN PUCHAR Port, 11956 IN PUCHAR Buffer, 11957 IN ULONG Count); 11958 11959 NTHALAPI 11960 VOID 11961 NTAPI 11962 WRITE_PORT_BUFFER_ULONG( 11963 IN PULONG Port, 11964 IN PULONG Buffer, 11965 IN ULONG Count); 11966 11967 NTHALAPI 11968 VOID 11969 NTAPI 11970 WRITE_PORT_BUFFER_USHORT( 11971 IN PUSHORT Port, 11972 IN PUSHORT Buffer, 11973 IN ULONG Count); 11974 11975 NTHALAPI 11976 VOID 11977 NTAPI 11978 WRITE_PORT_UCHAR( 11979 IN PUCHAR Port, 11980 IN UCHAR Value); 11981 11982 NTHALAPI 11983 VOID 11984 NTAPI 11985 WRITE_PORT_ULONG( 11986 IN PULONG Port, 11987 IN ULONG Value); 11988 11989 NTHALAPI 11990 VOID 11991 NTAPI 11992 WRITE_PORT_USHORT( 11993 IN PUSHORT Port, 11994 IN USHORT Value); 11995 11996 NTKERNELAPI 11997 VOID 11998 NTAPI 11999 WRITE_REGISTER_BUFFER_UCHAR( 12000 IN PUCHAR Register, 12001 IN PUCHAR Buffer, 12002 IN ULONG Count); 12003 12004 NTKERNELAPI 12005 VOID 12006 NTAPI 12007 WRITE_REGISTER_BUFFER_ULONG( 12008 IN PULONG Register, 12009 IN PULONG Buffer, 12010 IN ULONG Count); 12011 12012 NTKERNELAPI 12013 VOID 12014 NTAPI 12015 WRITE_REGISTER_BUFFER_USHORT( 12016 IN PUSHORT Register, 12017 IN PUSHORT Buffer, 12018 IN ULONG Count); 12019 12020 NTKERNELAPI 12021 VOID 12022 NTAPI 12023 WRITE_REGISTER_UCHAR( 12024 IN PUCHAR Register, 12025 IN UCHAR Value); 12026 12027 NTKERNELAPI 12028 VOID 12029 NTAPI 12030 WRITE_REGISTER_ULONG( 12031 IN PULONG Register, 12032 IN ULONG Value); 12033 12034 NTKERNELAPI 12035 VOID 12036 NTAPI 12037 WRITE_REGISTER_USHORT( 12038 IN PUSHORT Register, 12039 IN USHORT Value); 12040 12041 #else 12042 12043 FORCEINLINE 12044 VOID 12045 READ_PORT_BUFFER_UCHAR( 12046 IN PUCHAR Port, 12047 IN PUCHAR Buffer, 12048 IN ULONG Count) 12049 { 12050 __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12051 } 12052 12053 FORCEINLINE 12054 VOID 12055 READ_PORT_BUFFER_ULONG( 12056 IN PULONG Port, 12057 IN PULONG Buffer, 12058 IN ULONG Count) 12059 { 12060 __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12061 } 12062 12063 FORCEINLINE 12064 VOID 12065 READ_PORT_BUFFER_USHORT( 12066 IN PUSHORT Port, 12067 IN PUSHORT Buffer, 12068 IN ULONG Count) 12069 { 12070 __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12071 } 12072 12073 FORCEINLINE 12074 UCHAR 12075 READ_PORT_UCHAR( 12076 IN PUCHAR Port) 12077 { 12078 return __inbyte((USHORT)(ULONG_PTR)Port); 12079 } 12080 12081 FORCEINLINE 12082 ULONG 12083 READ_PORT_ULONG( 12084 IN PULONG Port) 12085 { 12086 return __indword((USHORT)(ULONG_PTR)Port); 12087 } 12088 12089 FORCEINLINE 12090 USHORT 12091 READ_PORT_USHORT( 12092 IN PUSHORT Port) 12093 { 12094 return __inword((USHORT)(ULONG_PTR)Port); 12095 } 12096 12097 FORCEINLINE 12098 VOID 12099 READ_REGISTER_BUFFER_UCHAR( 12100 IN PUCHAR Register, 12101 IN PUCHAR Buffer, 12102 IN ULONG Count) 12103 { 12104 __movsb(Register, Buffer, Count); 12105 } 12106 12107 FORCEINLINE 12108 VOID 12109 READ_REGISTER_BUFFER_ULONG( 12110 IN PULONG Register, 12111 IN PULONG Buffer, 12112 IN ULONG Count) 12113 { 12114 __movsd(Register, Buffer, Count); 12115 } 12116 12117 FORCEINLINE 12118 VOID 12119 READ_REGISTER_BUFFER_USHORT( 12120 IN PUSHORT Register, 12121 IN PUSHORT Buffer, 12122 IN ULONG Count) 12123 { 12124 __movsw(Register, Buffer, Count); 12125 } 12126 12127 FORCEINLINE 12128 UCHAR 12129 READ_REGISTER_UCHAR( 12130 IN volatile UCHAR *Register) 12131 { 12132 return *Register; 12133 } 12134 12135 FORCEINLINE 12136 ULONG 12137 READ_REGISTER_ULONG( 12138 IN volatile ULONG *Register) 12139 { 12140 return *Register; 12141 } 12142 12143 FORCEINLINE 12144 USHORT 12145 READ_REGISTER_USHORT( 12146 IN volatile USHORT *Register) 12147 { 12148 return *Register; 12149 } 12150 12151 FORCEINLINE 12152 VOID 12153 WRITE_PORT_BUFFER_UCHAR( 12154 IN PUCHAR Port, 12155 IN PUCHAR Buffer, 12156 IN ULONG Count) 12157 { 12158 __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12159 } 12160 12161 FORCEINLINE 12162 VOID 12163 WRITE_PORT_BUFFER_ULONG( 12164 IN PULONG Port, 12165 IN PULONG Buffer, 12166 IN ULONG Count) 12167 { 12168 __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12169 } 12170 12171 FORCEINLINE 12172 VOID 12173 WRITE_PORT_BUFFER_USHORT( 12174 IN PUSHORT Port, 12175 IN PUSHORT Buffer, 12176 IN ULONG Count) 12177 { 12178 __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); 12179 } 12180 12181 FORCEINLINE 12182 VOID 12183 WRITE_PORT_UCHAR( 12184 IN PUCHAR Port, 12185 IN UCHAR Value) 12186 { 12187 __outbyte((USHORT)(ULONG_PTR)Port, Value); 12188 } 12189 12190 FORCEINLINE 12191 VOID 12192 WRITE_PORT_ULONG( 12193 IN PULONG Port, 12194 IN ULONG Value) 12195 { 12196 __outdword((USHORT)(ULONG_PTR)Port, Value); 12197 } 12198 12199 FORCEINLINE 12200 VOID 12201 WRITE_PORT_USHORT( 12202 IN PUSHORT Port, 12203 IN USHORT Value) 12204 { 12205 __outword((USHORT)(ULONG_PTR)Port, Value); 12206 } 12207 12208 FORCEINLINE 12209 VOID 12210 WRITE_REGISTER_BUFFER_UCHAR( 12211 IN PUCHAR Register, 12212 IN PUCHAR Buffer, 12213 IN ULONG Count) 12214 { 12215 LONG Synch; 12216 __movsb(Register, Buffer, Count); 12217 InterlockedOr(&Synch, 1); 12218 } 12219 12220 FORCEINLINE 12221 VOID 12222 WRITE_REGISTER_BUFFER_ULONG( 12223 IN PULONG Register, 12224 IN PULONG Buffer, 12225 IN ULONG Count) 12226 { 12227 LONG Synch; 12228 __movsd(Register, Buffer, Count); 12229 InterlockedOr(&Synch, 1); 12230 } 12231 12232 FORCEINLINE 12233 VOID 12234 WRITE_REGISTER_BUFFER_USHORT( 12235 IN PUSHORT Register, 12236 IN PUSHORT Buffer, 12237 IN ULONG Count) 12238 { 12239 LONG Synch; 12240 __movsw(Register, Buffer, Count); 12241 InterlockedOr(&Synch, 1); 12242 } 12243 12244 FORCEINLINE 12245 VOID 12246 WRITE_REGISTER_UCHAR( 12247 IN volatile UCHAR *Register, 12248 IN UCHAR Value) 12249 { 12250 LONG Synch; 12251 *Register = Value; 12252 InterlockedOr(&Synch, 1); 12253 } 12254 12255 FORCEINLINE 12256 VOID 12257 WRITE_REGISTER_ULONG( 12258 IN volatile ULONG *Register, 12259 IN ULONG Value) 12260 { 12261 LONG Synch; 12262 *Register = Value; 12263 InterlockedOr(&Synch, 1); 12264 } 12265 12266 FORCEINLINE 12267 VOID 12268 WRITE_REGISTER_USHORT( 12269 IN volatile USHORT *Register, 12270 IN USHORT Value) 12271 { 12272 LONG Sync; 12273 *Register = Value; 12274 InterlockedOr(&Sync, 1); 12275 } 12276 #endif 12277 12278 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \ 12279 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) 12280 12281 #define DMA_MACROS_DEFINED 12282 12283 _IRQL_requires_max_(DISPATCH_LEVEL) 12284 _IRQL_requires_min_(DISPATCH_LEVEL) 12285 FORCEINLINE 12286 NTSTATUS 12287 IoAllocateAdapterChannel( 12288 _In_ PDMA_ADAPTER DmaAdapter, 12289 _In_ PDEVICE_OBJECT DeviceObject, 12290 _In_ ULONG NumberOfMapRegisters, 12291 _In_ PDRIVER_CONTROL ExecutionRoutine, 12292 _In_ PVOID Context) 12293 { 12294 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; 12295 AllocateAdapterChannel = 12296 *(DmaAdapter)->DmaOperations->AllocateAdapterChannel; 12297 ASSERT(AllocateAdapterChannel); 12298 return AllocateAdapterChannel(DmaAdapter, 12299 DeviceObject, 12300 NumberOfMapRegisters, 12301 ExecutionRoutine, 12302 Context); 12303 } 12304 12305 FORCEINLINE 12306 BOOLEAN 12307 NTAPI 12308 IoFlushAdapterBuffers( 12309 _In_ PDMA_ADAPTER DmaAdapter, 12310 _In_ PMDL Mdl, 12311 _In_ PVOID MapRegisterBase, 12312 _In_ PVOID CurrentVa, 12313 _In_ ULONG Length, 12314 _In_ BOOLEAN WriteToDevice) 12315 { 12316 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; 12317 FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers; 12318 ASSERT(FlushAdapterBuffers); 12319 return FlushAdapterBuffers(DmaAdapter, 12320 Mdl, 12321 MapRegisterBase, 12322 CurrentVa, 12323 Length, 12324 WriteToDevice); 12325 } 12326 12327 FORCEINLINE 12328 VOID 12329 NTAPI 12330 IoFreeAdapterChannel( 12331 _In_ PDMA_ADAPTER DmaAdapter) 12332 { 12333 PFREE_ADAPTER_CHANNEL FreeAdapterChannel; 12334 FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; 12335 ASSERT(FreeAdapterChannel); 12336 FreeAdapterChannel(DmaAdapter); 12337 } 12338 12339 FORCEINLINE 12340 VOID 12341 NTAPI 12342 IoFreeMapRegisters( 12343 _In_ PDMA_ADAPTER DmaAdapter, 12344 _In_ PVOID MapRegisterBase, 12345 _In_ ULONG NumberOfMapRegisters) 12346 { 12347 PFREE_MAP_REGISTERS FreeMapRegisters; 12348 FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters; 12349 ASSERT(FreeMapRegisters); 12350 FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters); 12351 } 12352 12353 FORCEINLINE 12354 PHYSICAL_ADDRESS 12355 NTAPI 12356 IoMapTransfer( 12357 _In_ PDMA_ADAPTER DmaAdapter, 12358 _In_ PMDL Mdl, 12359 _In_ PVOID MapRegisterBase, 12360 _In_ PVOID CurrentVa, 12361 _Inout_ PULONG Length, 12362 _In_ BOOLEAN WriteToDevice) 12363 { 12364 PMAP_TRANSFER MapTransfer; 12365 12366 MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer; 12367 ASSERT(MapTransfer); 12368 return MapTransfer(DmaAdapter, 12369 Mdl, 12370 MapRegisterBase, 12371 CurrentVa, 12372 Length, 12373 WriteToDevice); 12374 } 12375 #endif 12376 12377 #if (NTDDI_VERSION >= NTDDI_WIN2K) 12378 12379 _Acquires_lock_(_Global_cancel_spin_lock_) 12380 _Requires_lock_not_held_(_Global_cancel_spin_lock_) 12381 _IRQL_requires_max_(DISPATCH_LEVEL) 12382 _IRQL_raises_(DISPATCH_LEVEL) 12383 NTKERNELAPI 12384 VOID 12385 NTAPI 12386 IoAcquireCancelSpinLock( 12387 _Out_ _At_(*Irql, _IRQL_saves_) PKIRQL Irql); 12388 12389 _IRQL_requires_max_(DISPATCH_LEVEL) 12390 NTKERNELAPI 12391 NTSTATUS 12392 NTAPI 12393 IoAcquireRemoveLockEx( 12394 _Inout_ PIO_REMOVE_LOCK RemoveLock, 12395 _In_opt_ PVOID Tag, 12396 _In_ PCSTR File, 12397 _In_ ULONG Line, 12398 _In_ ULONG RemlockSize); 12399 12400 _IRQL_requires_max_(DISPATCH_LEVEL) 12401 _Ret_range_(<=, 0) 12402 NTKERNELAPI 12403 NTSTATUS 12404 NTAPI 12405 IoAllocateDriverObjectExtension( 12406 _In_ PDRIVER_OBJECT DriverObject, 12407 _In_ PVOID ClientIdentificationAddress, 12408 _In_ ULONG DriverObjectExtensionSize, 12409 _Post_ _At_(*DriverObjectExtension, _When_(return==0, 12410 __drv_aliasesMem __drv_allocatesMem(Mem) _Post_notnull_)) 12411 _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize)) 12412 PVOID *DriverObjectExtension); 12413 12414 _IRQL_requires_max_(DISPATCH_LEVEL) 12415 NTKERNELAPI 12416 PVOID 12417 NTAPI 12418 IoAllocateErrorLogEntry( 12419 _In_ PVOID IoObject, 12420 _In_ UCHAR EntrySize); 12421 12422 _Must_inspect_result_ 12423 _IRQL_requires_max_(DISPATCH_LEVEL) 12424 NTKERNELAPI 12425 PIRP 12426 NTAPI 12427 IoAllocateIrp( 12428 _In_ CCHAR StackSize, 12429 _In_ BOOLEAN ChargeQuota); 12430 12431 _IRQL_requires_max_(DISPATCH_LEVEL) 12432 NTKERNELAPI 12433 PMDL 12434 NTAPI 12435 IoAllocateMdl( 12436 _In_opt_ __drv_aliasesMem PVOID VirtualAddress, 12437 _In_ ULONG Length, 12438 _In_ BOOLEAN SecondaryBuffer, 12439 _In_ BOOLEAN ChargeQuota, 12440 _Inout_opt_ PIRP Irp); 12441 12442 __drv_allocatesMem(Mem) 12443 _IRQL_requires_max_(DISPATCH_LEVEL) 12444 NTKERNELAPI 12445 PIO_WORKITEM 12446 NTAPI 12447 IoAllocateWorkItem( 12448 _In_ PDEVICE_OBJECT DeviceObject); 12449 12450 _IRQL_requires_max_(APC_LEVEL) 12451 _Ret_range_(<=, 0) 12452 NTKERNELAPI 12453 NTSTATUS 12454 NTAPI 12455 IoAttachDevice( 12456 _In_ _Kernel_requires_resource_held_(Memory) _When_(return==0, __drv_aliasesMem) 12457 PDEVICE_OBJECT SourceDevice, 12458 _In_ PUNICODE_STRING TargetDevice, 12459 _Out_ PDEVICE_OBJECT *AttachedDevice); 12460 12461 _Must_inspect_result_ 12462 _IRQL_requires_max_(DISPATCH_LEVEL) 12463 NTKERNELAPI 12464 PDEVICE_OBJECT 12465 NTAPI 12466 IoAttachDeviceToDeviceStack( 12467 _In_ _Kernel_requires_resource_held_(Memory) _When_(return!=0, __drv_aliasesMem) 12468 PDEVICE_OBJECT SourceDevice, 12469 _In_ PDEVICE_OBJECT TargetDevice); 12470 12471 _Must_inspect_result_ 12472 __drv_aliasesMem 12473 _IRQL_requires_max_(DISPATCH_LEVEL) 12474 NTKERNELAPI 12475 PIRP 12476 NTAPI 12477 IoBuildAsynchronousFsdRequest( 12478 _In_ ULONG MajorFunction, 12479 _In_ PDEVICE_OBJECT DeviceObject, 12480 _Inout_opt_ PVOID Buffer, 12481 _In_opt_ ULONG Length, 12482 _In_opt_ PLARGE_INTEGER StartingOffset, 12483 _In_opt_ PIO_STATUS_BLOCK IoStatusBlock); 12484 12485 _Must_inspect_result_ 12486 __drv_aliasesMem 12487 _IRQL_requires_max_(PASSIVE_LEVEL) 12488 NTKERNELAPI 12489 PIRP 12490 NTAPI 12491 IoBuildDeviceIoControlRequest( 12492 _In_ ULONG IoControlCode, 12493 _In_ PDEVICE_OBJECT DeviceObject, 12494 _In_opt_ PVOID InputBuffer, 12495 _In_ ULONG InputBufferLength, 12496 _Out_opt_ PVOID OutputBuffer, 12497 _In_ ULONG OutputBufferLength, 12498 _In_ BOOLEAN InternalDeviceIoControl, 12499 _In_ PKEVENT Event, 12500 _Out_ PIO_STATUS_BLOCK IoStatusBlock); 12501 12502 _IRQL_requires_max_(DISPATCH_LEVEL) 12503 NTKERNELAPI 12504 VOID 12505 NTAPI 12506 IoBuildPartialMdl( 12507 _In_ PMDL SourceMdl, 12508 _Inout_ PMDL TargetMdl, 12509 _In_ PVOID VirtualAddress, 12510 _In_ ULONG Length); 12511 12512 _Must_inspect_result_ 12513 __drv_aliasesMem 12514 _IRQL_requires_max_(PASSIVE_LEVEL) 12515 NTKERNELAPI 12516 PIRP 12517 NTAPI 12518 IoBuildSynchronousFsdRequest( 12519 _In_ ULONG MajorFunction, 12520 _In_ PDEVICE_OBJECT DeviceObject, 12521 _Inout_opt_ PVOID Buffer, 12522 _In_opt_ ULONG Length, 12523 _In_opt_ PLARGE_INTEGER StartingOffset, 12524 _In_ PKEVENT Event, 12525 _Out_ PIO_STATUS_BLOCK IoStatusBlock); 12526 12527 _IRQL_requires_max_(DISPATCH_LEVEL) 12528 _Success_(TRUE) 12529 NTKERNELAPI 12530 NTSTATUS 12531 FASTCALL 12532 IofCallDriver( 12533 _In_ PDEVICE_OBJECT DeviceObject, 12534 _Inout_ __drv_aliasesMem PIRP Irp); 12535 #define IoCallDriver IofCallDriver 12536 12537 _IRQL_requires_max_(DISPATCH_LEVEL) 12538 NTKERNELAPI 12539 VOID 12540 FASTCALL 12541 IofCompleteRequest( 12542 _In_ PIRP Irp, 12543 _In_ CCHAR PriorityBoost); 12544 #define IoCompleteRequest IofCompleteRequest 12545 12546 _IRQL_requires_max_(DISPATCH_LEVEL) 12547 NTKERNELAPI 12548 BOOLEAN 12549 NTAPI 12550 IoCancelIrp( 12551 _In_ PIRP Irp); 12552 12553 _IRQL_requires_max_(PASSIVE_LEVEL) 12554 NTKERNELAPI 12555 NTSTATUS 12556 NTAPI 12557 IoCheckShareAccess( 12558 _In_ ACCESS_MASK DesiredAccess, 12559 _In_ ULONG DesiredShareAccess, 12560 _Inout_ PFILE_OBJECT FileObject, 12561 _Inout_ PSHARE_ACCESS ShareAccess, 12562 _In_ BOOLEAN Update); 12563 12564 _IRQL_requires_max_(DISPATCH_LEVEL) 12565 NTKERNELAPI 12566 VOID 12567 FASTCALL 12568 IofCompleteRequest( 12569 _In_ PIRP Irp, 12570 _In_ CCHAR PriorityBoost); 12571 12572 _IRQL_requires_max_(PASSIVE_LEVEL) 12573 NTKERNELAPI 12574 NTSTATUS 12575 NTAPI 12576 IoConnectInterrupt( 12577 _Out_ PKINTERRUPT *InterruptObject, 12578 _In_ PKSERVICE_ROUTINE ServiceRoutine, 12579 _In_opt_ PVOID ServiceContext, 12580 _In_opt_ PKSPIN_LOCK SpinLock, 12581 _In_ ULONG Vector, 12582 _In_ KIRQL Irql, 12583 _In_ KIRQL SynchronizeIrql, 12584 _In_ KINTERRUPT_MODE InterruptMode, 12585 _In_ BOOLEAN ShareVector, 12586 _In_ KAFFINITY ProcessorEnableMask, 12587 _In_ BOOLEAN FloatingSave); 12588 12589 _IRQL_requires_max_(APC_LEVEL) 12590 _Ret_range_(<=, 0) 12591 NTKERNELAPI 12592 NTSTATUS 12593 NTAPI 12594 IoCreateDevice( 12595 _In_ PDRIVER_OBJECT DriverObject, 12596 _In_ ULONG DeviceExtensionSize, 12597 _In_opt_ PUNICODE_STRING DeviceName, 12598 _In_ DEVICE_TYPE DeviceType, 12599 _In_ ULONG DeviceCharacteristics, 12600 _In_ BOOLEAN Exclusive, 12601 _Outptr_result_nullonfailure_ 12602 _At_(*DeviceObject, 12603 __drv_allocatesMem(Mem) 12604 _When_((((_In_function_class_(DRIVER_INITIALIZE)) 12605 ||(_In_function_class_(DRIVER_DISPATCH)))), 12606 __drv_aliasesMem)) 12607 PDEVICE_OBJECT *DeviceObject); 12608 12609 _IRQL_requires_max_(PASSIVE_LEVEL) 12610 NTKERNELAPI 12611 NTSTATUS 12612 NTAPI 12613 IoCreateFile( 12614 _Out_ PHANDLE FileHandle, 12615 _In_ ACCESS_MASK DesiredAccess, 12616 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 12617 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 12618 _In_opt_ PLARGE_INTEGER AllocationSize, 12619 _In_ ULONG FileAttributes, 12620 _In_ ULONG ShareAccess, 12621 _In_ ULONG Disposition, 12622 _In_ ULONG CreateOptions, 12623 _In_opt_ PVOID EaBuffer, 12624 _In_ ULONG EaLength, 12625 _In_ CREATE_FILE_TYPE CreateFileType, 12626 _In_opt_ PVOID InternalParameters, 12627 _In_ ULONG Options); 12628 12629 _IRQL_requires_max_(PASSIVE_LEVEL) 12630 NTKERNELAPI 12631 PKEVENT 12632 NTAPI 12633 IoCreateNotificationEvent( 12634 _In_ PUNICODE_STRING EventName, 12635 _Out_ PHANDLE EventHandle); 12636 12637 _IRQL_requires_max_(PASSIVE_LEVEL) 12638 NTKERNELAPI 12639 NTSTATUS 12640 NTAPI 12641 IoCreateSymbolicLink( 12642 _In_ PUNICODE_STRING SymbolicLinkName, 12643 _In_ PUNICODE_STRING DeviceName); 12644 12645 _IRQL_requires_max_(PASSIVE_LEVEL) 12646 NTKERNELAPI 12647 PKEVENT 12648 NTAPI 12649 IoCreateSynchronizationEvent( 12650 _In_ PUNICODE_STRING EventName, 12651 _Out_ PHANDLE EventHandle); 12652 12653 _IRQL_requires_max_(PASSIVE_LEVEL) 12654 NTKERNELAPI 12655 NTSTATUS 12656 NTAPI 12657 IoCreateUnprotectedSymbolicLink( 12658 _In_ PUNICODE_STRING SymbolicLinkName, 12659 _In_ PUNICODE_STRING DeviceName); 12660 12661 _IRQL_requires_max_(APC_LEVEL) 12662 _Kernel_clear_do_init_(__yes) 12663 NTKERNELAPI 12664 VOID 12665 NTAPI 12666 IoDeleteDevice( 12667 _In_ _Kernel_requires_resource_held_(Memory) __drv_freesMem(Mem) 12668 PDEVICE_OBJECT DeviceObject); 12669 12670 _IRQL_requires_max_(PASSIVE_LEVEL) 12671 NTKERNELAPI 12672 NTSTATUS 12673 NTAPI 12674 IoDeleteSymbolicLink( 12675 _In_ PUNICODE_STRING SymbolicLinkName); 12676 12677 _IRQL_requires_max_(PASSIVE_LEVEL) 12678 NTKERNELAPI 12679 VOID 12680 NTAPI 12681 IoDetachDevice( 12682 _Inout_ PDEVICE_OBJECT TargetDevice); 12683 12684 _IRQL_requires_max_(PASSIVE_LEVEL) 12685 NTKERNELAPI 12686 VOID 12687 NTAPI 12688 IoDisconnectInterrupt( 12689 _In_ PKINTERRUPT InterruptObject); 12690 12691 __drv_freesMem(Mem) 12692 _IRQL_requires_max_(DISPATCH_LEVEL) 12693 NTKERNELAPI 12694 VOID 12695 NTAPI 12696 IoFreeIrp( 12697 _In_ PIRP Irp); 12698 12699 _IRQL_requires_max_(DISPATCH_LEVEL) 12700 NTKERNELAPI 12701 VOID 12702 NTAPI 12703 IoFreeMdl( 12704 PMDL Mdl); 12705 12706 _IRQL_requires_max_(DISPATCH_LEVEL) 12707 NTKERNELAPI 12708 VOID 12709 NTAPI 12710 IoFreeWorkItem( 12711 _In_ __drv_freesMem(Mem) PIO_WORKITEM IoWorkItem); 12712 12713 NTKERNELAPI 12714 PDEVICE_OBJECT 12715 NTAPI 12716 IoGetAttachedDevice( 12717 IN PDEVICE_OBJECT DeviceObject); 12718 12719 _IRQL_requires_max_(DISPATCH_LEVEL) 12720 NTKERNELAPI 12721 PDEVICE_OBJECT 12722 NTAPI 12723 IoGetAttachedDeviceReference( 12724 _In_ PDEVICE_OBJECT DeviceObject); 12725 12726 NTKERNELAPI 12727 NTSTATUS 12728 NTAPI 12729 IoGetBootDiskInformation( 12730 _Inout_ PBOOTDISK_INFORMATION BootDiskInformation, 12731 _In_ ULONG Size); 12732 12733 _IRQL_requires_max_(PASSIVE_LEVEL) 12734 _Must_inspect_result_ 12735 NTKERNELAPI 12736 NTSTATUS 12737 NTAPI 12738 IoGetDeviceInterfaceAlias( 12739 _In_ PUNICODE_STRING SymbolicLinkName, 12740 _In_ CONST GUID *AliasInterfaceClassGuid, 12741 _Out_ 12742 _When_(return==0, _At_(AliasSymbolicLinkName->Buffer, __drv_allocatesMem(Mem))) 12743 PUNICODE_STRING AliasSymbolicLinkName); 12744 12745 NTKERNELAPI 12746 PEPROCESS 12747 NTAPI 12748 IoGetCurrentProcess(VOID); 12749 12750 _IRQL_requires_max_(PASSIVE_LEVEL) 12751 _Must_inspect_result_ 12752 NTKERNELAPI 12753 NTSTATUS 12754 NTAPI 12755 IoGetDeviceInterfaces( 12756 _In_ CONST GUID *InterfaceClassGuid, 12757 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, 12758 _In_ ULONG Flags, 12759 _Outptr_result_nullonfailure_ 12760 _At_(*SymbolicLinkList, _When_(return==0, __drv_allocatesMem(Mem))) 12761 PZZWSTR *SymbolicLinkList); 12762 12763 _IRQL_requires_max_(PASSIVE_LEVEL) 12764 NTKERNELAPI 12765 NTSTATUS 12766 NTAPI 12767 IoGetDeviceObjectPointer( 12768 _In_ PUNICODE_STRING ObjectName, 12769 _In_ ACCESS_MASK DesiredAccess, 12770 _Out_ PFILE_OBJECT *FileObject, 12771 _Out_ PDEVICE_OBJECT *DeviceObject); 12772 12773 _IRQL_requires_max_(PASSIVE_LEVEL) 12774 _When_((DeviceProperty & __string_type), 12775 _At_(PropertyBuffer, _Post_z_)) 12776 _When_((DeviceProperty & __multiString_type), 12777 _At_(PropertyBuffer, _Post_ _NullNull_terminated_)) 12778 NTKERNELAPI 12779 NTSTATUS 12780 NTAPI 12781 IoGetDeviceProperty( 12782 _In_ PDEVICE_OBJECT DeviceObject, 12783 _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty, 12784 _In_ ULONG BufferLength, 12785 _Out_writes_bytes_opt_(BufferLength) PVOID PropertyBuffer, 12786 _Deref_out_range_(<=, BufferLength) PULONG ResultLength); 12787 12788 _Must_inspect_result_ 12789 _IRQL_requires_max_(PASSIVE_LEVEL) 12790 NTKERNELAPI 12791 PDMA_ADAPTER 12792 NTAPI 12793 IoGetDmaAdapter( 12794 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, 12795 _In_ PDEVICE_DESCRIPTION DeviceDescription, 12796 _Out_ _When_(return!=0, _Kernel_IoGetDmaAdapter_ _At_(*NumberOfMapRegisters, _Must_inspect_result_)) 12797 PULONG NumberOfMapRegisters); 12798 12799 __drv_aliasesMem 12800 _IRQL_requires_max_(DISPATCH_LEVEL) 12801 NTKERNELAPI 12802 PVOID 12803 NTAPI 12804 IoGetDriverObjectExtension( 12805 _In_ PDRIVER_OBJECT DriverObject, 12806 _In_ PVOID ClientIdentificationAddress); 12807 12808 _IRQL_requires_max_(APC_LEVEL) 12809 NTKERNELAPI 12810 PVOID 12811 NTAPI 12812 IoGetInitialStack(VOID); 12813 12814 NTKERNELAPI 12815 PDEVICE_OBJECT 12816 NTAPI 12817 IoGetRelatedDeviceObject( 12818 _In_ PFILE_OBJECT FileObject); 12819 12820 _IRQL_requires_max_(DISPATCH_LEVEL) 12821 NTKERNELAPI 12822 VOID 12823 NTAPI 12824 IoQueueWorkItem( 12825 _Inout_ PIO_WORKITEM IoWorkItem, 12826 _In_ PIO_WORKITEM_ROUTINE WorkerRoutine, 12827 _In_ WORK_QUEUE_TYPE QueueType, 12828 _In_opt_ __drv_aliasesMem PVOID Context); 12829 12830 _IRQL_requires_max_(DISPATCH_LEVEL) 12831 NTKERNELAPI 12832 VOID 12833 NTAPI 12834 IoInitializeIrp( 12835 _Inout_ PIRP Irp, 12836 _In_ USHORT PacketSize, 12837 _In_ CCHAR StackSize); 12838 12839 _IRQL_requires_max_(PASSIVE_LEVEL) 12840 NTKERNELAPI 12841 VOID 12842 NTAPI 12843 IoInitializeRemoveLockEx( 12844 _Out_ PIO_REMOVE_LOCK Lock, 12845 _In_ ULONG AllocateTag, 12846 _In_ ULONG MaxLockedMinutes, 12847 _In_ ULONG HighWatermark, 12848 _In_ ULONG RemlockSize); 12849 12850 _IRQL_requires_max_(PASSIVE_LEVEL) 12851 NTKERNELAPI 12852 NTSTATUS 12853 NTAPI 12854 IoInitializeTimer( 12855 _In_ PDEVICE_OBJECT DeviceObject, 12856 _In_ PIO_TIMER_ROUTINE TimerRoutine, 12857 _In_opt_ __drv_aliasesMem PVOID Context); 12858 12859 _IRQL_requires_max_(DISPATCH_LEVEL) 12860 NTKERNELAPI 12861 VOID 12862 NTAPI 12863 IoInvalidateDeviceRelations( 12864 _In_ PDEVICE_OBJECT DeviceObject, 12865 _In_ DEVICE_RELATION_TYPE Type); 12866 12867 _IRQL_requires_max_(DISPATCH_LEVEL) 12868 NTKERNELAPI 12869 VOID 12870 NTAPI 12871 IoInvalidateDeviceState( 12872 _In_ PDEVICE_OBJECT PhysicalDeviceObject); 12873 12874 _IRQL_requires_max_(PASSIVE_LEVEL) 12875 NTKERNELAPI 12876 BOOLEAN 12877 NTAPI 12878 IoIsWdmVersionAvailable( 12879 _When_(MajorVersion!=1&&MajorVersion!=6, _In_ __drv_reportError("MajorVersion must be 1 or 6")) 12880 UCHAR MajorVersion, 12881 _In_ _When_(MinorVersion!=0 && MinorVersion!=5 && 12882 MinorVersion!=16 && MinorVersion!=32 && 12883 MinorVersion!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30")) 12884 UCHAR MinorVersion); 12885 12886 _IRQL_requires_max_(PASSIVE_LEVEL) 12887 _Must_inspect_result_ 12888 NTKERNELAPI 12889 NTSTATUS 12890 NTAPI 12891 IoOpenDeviceInterfaceRegistryKey( 12892 _In_ PUNICODE_STRING SymbolicLinkName, 12893 _In_ ACCESS_MASK DesiredAccess, 12894 _Out_ PHANDLE DeviceInterfaceKey); 12895 12896 _IRQL_requires_max_(PASSIVE_LEVEL) 12897 _Must_inspect_result_ 12898 NTKERNELAPI 12899 NTSTATUS 12900 NTAPI 12901 IoOpenDeviceRegistryKey( 12902 _In_ PDEVICE_OBJECT DeviceObject, 12903 _In_ ULONG DevInstKeyType, 12904 _In_ ACCESS_MASK DesiredAccess, 12905 _Out_ PHANDLE DevInstRegKey); 12906 12907 _IRQL_requires_max_(PASSIVE_LEVEL) 12908 _Must_inspect_result_ 12909 NTKERNELAPI 12910 NTSTATUS 12911 NTAPI 12912 IoRegisterDeviceInterface( 12913 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 12914 _In_ CONST GUID *InterfaceClassGuid, 12915 _In_opt_ PUNICODE_STRING ReferenceString, 12916 _Out_ _When_(return==0, _At_(SymbolicLinkName->Buffer, __drv_allocatesMem(Mem))) 12917 PUNICODE_STRING SymbolicLinkName); 12918 12919 _IRQL_requires_max_(PASSIVE_LEVEL) 12920 _Must_inspect_result_ 12921 NTKERNELAPI 12922 NTSTATUS 12923 NTAPI 12924 IoRegisterPlugPlayNotification( 12925 _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, 12926 _In_ ULONG EventCategoryFlags, 12927 _In_opt_ PVOID EventCategoryData, 12928 _In_ PDRIVER_OBJECT DriverObject, 12929 _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, 12930 _Inout_opt_ __drv_aliasesMem PVOID Context, 12931 _Outptr_result_nullonfailure_ 12932 _At_(*NotificationEntry, _When_(return==0, __drv_allocatesMem(Mem))) 12933 PVOID *NotificationEntry); 12934 12935 _IRQL_requires_max_(PASSIVE_LEVEL) 12936 NTKERNELAPI 12937 NTSTATUS 12938 NTAPI 12939 IoRegisterShutdownNotification( 12940 _In_ PDEVICE_OBJECT DeviceObject); 12941 12942 _Requires_lock_held_(_Global_cancel_spin_lock_) 12943 _Releases_lock_(_Global_cancel_spin_lock_) 12944 _IRQL_requires_max_(DISPATCH_LEVEL) 12945 _IRQL_requires_min_(DISPATCH_LEVEL) 12946 NTKERNELAPI 12947 VOID 12948 NTAPI 12949 IoReleaseCancelSpinLock( 12950 _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql); 12951 12952 _IRQL_requires_max_(PASSIVE_LEVEL) 12953 NTKERNELAPI 12954 VOID 12955 NTAPI 12956 IoReleaseRemoveLockAndWaitEx( 12957 _Inout_ PIO_REMOVE_LOCK RemoveLock, 12958 _In_opt_ PVOID Tag, 12959 _In_ ULONG RemlockSize); 12960 12961 NTKERNELAPI 12962 VOID 12963 NTAPI 12964 IoReleaseRemoveLockEx( 12965 _Inout_ PIO_REMOVE_LOCK RemoveLock, 12966 _In_opt_ PVOID Tag, 12967 _In_ ULONG RemlockSize); 12968 12969 _IRQL_requires_max_(PASSIVE_LEVEL) 12970 NTKERNELAPI 12971 VOID 12972 NTAPI 12973 IoRemoveShareAccess( 12974 _In_ PFILE_OBJECT FileObject, 12975 _Inout_ PSHARE_ACCESS ShareAccess); 12976 12977 _IRQL_requires_max_(PASSIVE_LEVEL) 12978 NTKERNELAPI 12979 NTSTATUS 12980 NTAPI 12981 IoReportTargetDeviceChange( 12982 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 12983 _In_ PVOID NotificationStructure); 12984 12985 _IRQL_requires_max_(DISPATCH_LEVEL) 12986 NTKERNELAPI 12987 NTSTATUS 12988 NTAPI 12989 IoReportTargetDeviceChangeAsynchronous( 12990 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 12991 _In_ PVOID NotificationStructure, 12992 _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback, 12993 _In_opt_ PVOID Context); 12994 12995 _IRQL_requires_max_(DISPATCH_LEVEL) 12996 NTKERNELAPI 12997 VOID 12998 NTAPI 12999 IoRequestDeviceEject( 13000 _In_ PDEVICE_OBJECT PhysicalDeviceObject); 13001 13002 _IRQL_requires_max_(DISPATCH_LEVEL) 13003 NTKERNELAPI 13004 VOID 13005 NTAPI 13006 IoReuseIrp( 13007 _Inout_ PIRP Irp, 13008 _In_ NTSTATUS Status); 13009 13010 _IRQL_requires_max_(PASSIVE_LEVEL) 13011 _Must_inspect_result_ 13012 NTKERNELAPI 13013 NTSTATUS 13014 NTAPI 13015 IoSetDeviceInterfaceState( 13016 _In_ PUNICODE_STRING SymbolicLinkName, 13017 _In_ BOOLEAN Enable); 13018 13019 NTKERNELAPI 13020 VOID 13021 NTAPI 13022 IoSetShareAccess( 13023 _In_ ACCESS_MASK DesiredAccess, 13024 _In_ ULONG DesiredShareAccess, 13025 _Inout_ PFILE_OBJECT FileObject, 13026 _Out_ PSHARE_ACCESS ShareAccess); 13027 13028 _IRQL_requires_max_(DISPATCH_LEVEL) 13029 _IRQL_requires_min_(DISPATCH_LEVEL) 13030 NTKERNELAPI 13031 VOID 13032 NTAPI 13033 IoStartNextPacket( 13034 _In_ PDEVICE_OBJECT DeviceObject, 13035 _In_ BOOLEAN Cancelable); 13036 13037 _IRQL_requires_max_(DISPATCH_LEVEL) 13038 NTKERNELAPI 13039 VOID 13040 NTAPI 13041 IoStartNextPacketByKey( 13042 _In_ PDEVICE_OBJECT DeviceObject, 13043 _In_ BOOLEAN Cancelable, 13044 _In_ ULONG Key); 13045 13046 _IRQL_requires_max_(DISPATCH_LEVEL) 13047 NTKERNELAPI 13048 VOID 13049 NTAPI 13050 IoStartPacket( 13051 _In_ PDEVICE_OBJECT DeviceObject, 13052 _In_ PIRP Irp, 13053 _In_opt_ PULONG Key, 13054 _In_opt_ PDRIVER_CANCEL CancelFunction); 13055 13056 _IRQL_requires_max_(DISPATCH_LEVEL) 13057 NTKERNELAPI 13058 VOID 13059 NTAPI 13060 IoStartTimer( 13061 _In_ PDEVICE_OBJECT DeviceObject); 13062 13063 _IRQL_requires_max_(DISPATCH_LEVEL) 13064 NTKERNELAPI 13065 VOID 13066 NTAPI 13067 IoStopTimer( 13068 _In_ PDEVICE_OBJECT DeviceObject); 13069 13070 _IRQL_requires_max_(PASSIVE_LEVEL) 13071 __drv_freesMem(Pool) 13072 NTKERNELAPI 13073 NTSTATUS 13074 NTAPI 13075 IoUnregisterPlugPlayNotification( 13076 _In_ PVOID NotificationEntry); 13077 13078 _IRQL_requires_max_(PASSIVE_LEVEL) 13079 NTKERNELAPI 13080 VOID 13081 NTAPI 13082 IoUnregisterShutdownNotification( 13083 _In_ PDEVICE_OBJECT DeviceObject); 13084 13085 _IRQL_requires_max_(PASSIVE_LEVEL) 13086 NTKERNELAPI 13087 VOID 13088 NTAPI 13089 IoUpdateShareAccess( 13090 _In_ PFILE_OBJECT FileObject, 13091 _Inout_ PSHARE_ACCESS ShareAccess); 13092 13093 _IRQL_requires_max_(PASSIVE_LEVEL) 13094 NTKERNELAPI 13095 NTSTATUS 13096 NTAPI 13097 IoWMIAllocateInstanceIds( 13098 _In_ GUID *Guid, 13099 _In_ ULONG InstanceCount, 13100 _Out_ ULONG *FirstInstanceId); 13101 13102 NTKERNELAPI 13103 NTSTATUS 13104 NTAPI 13105 IoWMIQuerySingleInstanceMultiple( 13106 _In_reads_(ObjectCount) PVOID *DataBlockObjectList, 13107 _In_reads_(ObjectCount) PUNICODE_STRING InstanceNames, 13108 _In_ ULONG ObjectCount, 13109 _Inout_ ULONG *InOutBufferSize, 13110 _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); 13111 13112 _IRQL_requires_max_(PASSIVE_LEVEL) 13113 NTKERNELAPI 13114 NTSTATUS 13115 NTAPI 13116 IoWMIRegistrationControl( 13117 _In_ PDEVICE_OBJECT DeviceObject, 13118 _In_ ULONG Action); 13119 13120 NTKERNELAPI 13121 NTSTATUS 13122 NTAPI 13123 IoWMISuggestInstanceName( 13124 _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, 13125 _In_opt_ PUNICODE_STRING SymbolicLinkName, 13126 _In_ BOOLEAN CombineNames, 13127 _Out_ PUNICODE_STRING SuggestedInstanceName); 13128 13129 _Must_inspect_result_ 13130 _IRQL_requires_max_(DISPATCH_LEVEL) 13131 _Ret_range_(<=, 0) 13132 NTKERNELAPI 13133 NTSTATUS 13134 NTAPI 13135 IoWMIWriteEvent( 13136 _Inout_ _When_(return==0, __drv_aliasesMem) PVOID WnodeEventItem); 13137 13138 _IRQL_requires_max_(DISPATCH_LEVEL) 13139 NTKERNELAPI 13140 VOID 13141 NTAPI 13142 IoWriteErrorLogEntry( 13143 _In_ PVOID ElEntry); 13144 13145 NTKERNELAPI 13146 PIRP 13147 NTAPI 13148 IoGetTopLevelIrp(VOID); 13149 13150 _IRQL_requires_max_(PASSIVE_LEVEL) 13151 NTKERNELAPI 13152 NTSTATUS 13153 NTAPI 13154 IoRegisterLastChanceShutdownNotification( 13155 _In_ PDEVICE_OBJECT DeviceObject); 13156 13157 NTKERNELAPI 13158 VOID 13159 NTAPI 13160 IoSetTopLevelIrp( 13161 _In_opt_ PIRP Irp); 13162 13163 13164 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 13165 13166 13167 #if (NTDDI_VERSION >= NTDDI_WINXP) 13168 13169 NTKERNELAPI 13170 NTSTATUS 13171 NTAPI 13172 IoCsqInitialize( 13173 _Out_ PIO_CSQ Csq, 13174 _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp, 13175 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, 13176 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, 13177 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, 13178 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, 13179 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); 13180 13181 NTKERNELAPI 13182 VOID 13183 NTAPI 13184 IoCsqInsertIrp( 13185 _Inout_ PIO_CSQ Csq, 13186 _Inout_ PIRP Irp, 13187 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context); 13188 13189 NTKERNELAPI 13190 PIRP 13191 NTAPI 13192 IoCsqRemoveIrp( 13193 _Inout_ PIO_CSQ Csq, 13194 _Inout_ PIO_CSQ_IRP_CONTEXT Context); 13195 13196 NTKERNELAPI 13197 PIRP 13198 NTAPI 13199 IoCsqRemoveNextIrp( 13200 _Inout_ PIO_CSQ Csq, 13201 _In_opt_ PVOID PeekContext); 13202 13203 NTKERNELAPI 13204 BOOLEAN 13205 NTAPI 13206 IoForwardIrpSynchronously( 13207 _In_ PDEVICE_OBJECT DeviceObject, 13208 _In_ PIRP Irp); 13209 13210 #define IoForwardAndCatchIrp IoForwardIrpSynchronously 13211 13212 NTKERNELAPI 13213 VOID 13214 NTAPI 13215 IoFreeErrorLogEntry( 13216 _In_ PVOID ElEntry); 13217 13218 _IRQL_requires_max_(DISPATCH_LEVEL) 13219 _Must_inspect_result_ 13220 NTKERNELAPI 13221 NTSTATUS 13222 NTAPI 13223 IoSetCompletionRoutineEx( 13224 _In_ PDEVICE_OBJECT DeviceObject, 13225 _In_ PIRP Irp, 13226 _In_ PIO_COMPLETION_ROUTINE CompletionRoutine, 13227 _In_opt_ PVOID Context, 13228 _In_ BOOLEAN InvokeOnSuccess, 13229 _In_ BOOLEAN InvokeOnError, 13230 _In_ BOOLEAN InvokeOnCancel); 13231 13232 VOID 13233 NTAPI 13234 IoSetStartIoAttributes( 13235 _In_ PDEVICE_OBJECT DeviceObject, 13236 _In_ BOOLEAN DeferredStartIo, 13237 _In_ BOOLEAN NonCancelable); 13238 13239 NTKERNELAPI 13240 NTSTATUS 13241 NTAPI 13242 IoWMIDeviceObjectToInstanceName( 13243 _In_ PVOID DataBlockObject, 13244 _In_ PDEVICE_OBJECT DeviceObject, 13245 _Out_ PUNICODE_STRING InstanceName); 13246 13247 NTKERNELAPI 13248 NTSTATUS 13249 NTAPI 13250 IoWMIExecuteMethod( 13251 _In_ PVOID DataBlockObject, 13252 _In_ PUNICODE_STRING InstanceName, 13253 _In_ ULONG MethodId, 13254 _In_ ULONG InBufferSize, 13255 _Inout_ PULONG OutBufferSize, 13256 _Inout_updates_bytes_to_opt_(*OutBufferSize, InBufferSize) PUCHAR InOutBuffer); 13257 13258 NTKERNELAPI 13259 NTSTATUS 13260 NTAPI 13261 IoWMIHandleToInstanceName( 13262 _In_ PVOID DataBlockObject, 13263 _In_ HANDLE FileHandle, 13264 _Out_ PUNICODE_STRING InstanceName); 13265 13266 NTKERNELAPI 13267 NTSTATUS 13268 NTAPI 13269 IoWMIOpenBlock( 13270 _In_ GUID *DataBlockGuid, 13271 _In_ ULONG DesiredAccess, 13272 _Out_ PVOID *DataBlockObject); 13273 13274 NTKERNELAPI 13275 NTSTATUS 13276 NTAPI 13277 IoWMIQueryAllData( 13278 _In_ PVOID DataBlockObject, 13279 _Inout_ ULONG *InOutBufferSize, 13280 _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); 13281 13282 NTKERNELAPI 13283 NTSTATUS 13284 NTAPI 13285 IoWMIQueryAllDataMultiple( 13286 _In_reads_(ObjectCount) PVOID *DataBlockObjectList, 13287 _In_ ULONG ObjectCount, 13288 _Inout_ ULONG *InOutBufferSize, 13289 _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); 13290 13291 NTKERNELAPI 13292 NTSTATUS 13293 NTAPI 13294 IoWMIQuerySingleInstance( 13295 _In_ PVOID DataBlockObject, 13296 _In_ PUNICODE_STRING InstanceName, 13297 _Inout_ ULONG *InOutBufferSize, 13298 _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); 13299 13300 NTKERNELAPI 13301 NTSTATUS 13302 NTAPI 13303 IoWMISetNotificationCallback( 13304 _Inout_ PVOID Object, 13305 _In_ WMI_NOTIFICATION_CALLBACK Callback, 13306 _In_opt_ PVOID Context); 13307 13308 NTKERNELAPI 13309 NTSTATUS 13310 NTAPI 13311 IoWMISetSingleInstance( 13312 _In_ PVOID DataBlockObject, 13313 _In_ PUNICODE_STRING InstanceName, 13314 _In_ ULONG Version, 13315 _In_ ULONG ValueBufferSize, 13316 _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer); 13317 13318 NTKERNELAPI 13319 NTSTATUS 13320 NTAPI 13321 IoWMISetSingleItem( 13322 _In_ PVOID DataBlockObject, 13323 _In_ PUNICODE_STRING InstanceName, 13324 _In_ ULONG DataItemId, 13325 _In_ ULONG Version, 13326 _In_ ULONG ValueBufferSize, 13327 _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer); 13328 13329 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 13330 13331 #if (NTDDI_VERSION >= NTDDI_WINXPSP1) 13332 NTKERNELAPI 13333 NTSTATUS 13334 NTAPI 13335 IoValidateDeviceIoControlAccess( 13336 _In_ PIRP Irp, 13337 _In_ ULONG RequiredAccess); 13338 #endif 13339 13340 #if (NTDDI_VERSION >= NTDDI_WS03) 13341 NTKERNELAPI 13342 NTSTATUS 13343 NTAPI 13344 IoCsqInitializeEx( 13345 _Out_ PIO_CSQ Csq, 13346 _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp, 13347 _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, 13348 _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, 13349 _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, 13350 _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, 13351 _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); 13352 13353 NTKERNELAPI 13354 NTSTATUS 13355 NTAPI 13356 IoCsqInsertIrpEx( 13357 _Inout_ PIO_CSQ Csq, 13358 _Inout_ PIRP Irp, 13359 _Out_opt_ PIO_CSQ_IRP_CONTEXT Context, 13360 _In_opt_ PVOID InsertContext); 13361 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 13362 13363 13364 #if (NTDDI_VERSION >= NTDDI_VISTA) 13365 NTKERNELAPI 13366 NTSTATUS 13367 NTAPI 13368 IoGetBootDiskInformationLite( 13369 _Outptr_ PBOOTDISK_INFORMATION_LITE *BootDiskInformation); 13370 13371 NTKERNELAPI 13372 NTSTATUS 13373 NTAPI 13374 IoCheckShareAccessEx( 13375 _In_ ACCESS_MASK DesiredAccess, 13376 _In_ ULONG DesiredShareAccess, 13377 _Inout_ PFILE_OBJECT FileObject, 13378 _Inout_ PSHARE_ACCESS ShareAccess, 13379 _In_ BOOLEAN Update, 13380 _In_ PBOOLEAN WritePermission); 13381 13382 NTKERNELAPI 13383 NTSTATUS 13384 NTAPI 13385 IoConnectInterruptEx( 13386 _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters); 13387 13388 NTKERNELAPI 13389 VOID 13390 NTAPI 13391 IoDisconnectInterruptEx( 13392 _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters); 13393 13394 LOGICAL 13395 NTAPI 13396 IoWithinStackLimits( 13397 _In_ ULONG_PTR RegionStart, 13398 _In_ SIZE_T RegionSize); 13399 13400 NTKERNELAPI 13401 VOID 13402 NTAPI 13403 IoSetShareAccessEx( 13404 _In_ ACCESS_MASK DesiredAccess, 13405 _In_ ULONG DesiredShareAccess, 13406 _Inout_ PFILE_OBJECT FileObject, 13407 _Out_ PSHARE_ACCESS ShareAccess, 13408 _In_ PBOOLEAN WritePermission); 13409 13410 ULONG 13411 NTAPI 13412 IoSizeofWorkItem(VOID); 13413 13414 VOID 13415 NTAPI 13416 IoInitializeWorkItem( 13417 _In_ PVOID IoObject, 13418 _Out_ PIO_WORKITEM IoWorkItem); 13419 13420 VOID 13421 NTAPI 13422 IoUninitializeWorkItem( 13423 _Inout_ PIO_WORKITEM IoWorkItem); 13424 13425 _IRQL_requires_max_(DISPATCH_LEVEL) 13426 VOID 13427 NTAPI 13428 IoQueueWorkItemEx( 13429 _Inout_ PIO_WORKITEM IoWorkItem, 13430 _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine, 13431 _In_ WORK_QUEUE_TYPE QueueType, 13432 _In_opt_ __drv_aliasesMem PVOID Context); 13433 13434 IO_PRIORITY_HINT 13435 NTAPI 13436 IoGetIoPriorityHint( 13437 _In_ PIRP Irp); 13438 13439 NTSTATUS 13440 NTAPI 13441 IoSetIoPriorityHint( 13442 _In_ PIRP Irp, 13443 _In_ IO_PRIORITY_HINT PriorityHint); 13444 13445 NTSTATUS 13446 NTAPI 13447 IoAllocateSfioStreamIdentifier( 13448 _In_ PFILE_OBJECT FileObject, 13449 _In_ ULONG Length, 13450 _In_ PVOID Signature, 13451 _Out_ PVOID *StreamIdentifier); 13452 13453 PVOID 13454 NTAPI 13455 IoGetSfioStreamIdentifier( 13456 _In_ PFILE_OBJECT FileObject, 13457 _In_ PVOID Signature); 13458 13459 NTSTATUS 13460 NTAPI 13461 IoFreeSfioStreamIdentifier( 13462 _In_ PFILE_OBJECT FileObject, 13463 _In_ PVOID Signature); 13464 13465 _IRQL_requires_max_(DISPATCH_LEVEL) 13466 _Must_inspect_result_ 13467 NTKERNELAPI 13468 NTSTATUS 13469 NTAPI 13470 IoRequestDeviceEjectEx( 13471 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 13472 _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback, 13473 _In_opt_ PVOID Context, 13474 _In_opt_ PDRIVER_OBJECT DriverObject); 13475 13476 _IRQL_requires_max_(PASSIVE_LEVEL) 13477 _Must_inspect_result_ 13478 NTKERNELAPI 13479 NTSTATUS 13480 NTAPI 13481 IoSetDevicePropertyData( 13482 _In_ PDEVICE_OBJECT Pdo, 13483 _In_ CONST DEVPROPKEY *PropertyKey, 13484 _In_ LCID Lcid, 13485 _In_ ULONG Flags, 13486 _In_ DEVPROPTYPE Type, 13487 _In_ ULONG Size, 13488 _In_opt_ PVOID Data); 13489 13490 _IRQL_requires_max_(PASSIVE_LEVEL) 13491 _Must_inspect_result_ 13492 NTKERNELAPI 13493 NTSTATUS 13494 NTAPI 13495 IoGetDevicePropertyData( 13496 _In_ PDEVICE_OBJECT Pdo, 13497 _In_ CONST DEVPROPKEY *PropertyKey, 13498 _In_ LCID Lcid, 13499 _Reserved_ ULONG Flags, 13500 _In_ ULONG Size, 13501 _Out_ PVOID Data, 13502 _Out_ PULONG RequiredSize, 13503 _Out_ PDEVPROPTYPE Type); 13504 13505 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 13506 13507 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b) 13508 13509 #if (NTDDI_VERSION >= NTDDI_WS08) 13510 _IRQL_requires_max_(PASSIVE_LEVEL) 13511 _Must_inspect_result_ 13512 NTKERNELAPI 13513 NTSTATUS 13514 NTAPI 13515 IoReplacePartitionUnit( 13516 _In_ PDEVICE_OBJECT TargetPdo, 13517 _In_ PDEVICE_OBJECT SparePdo, 13518 _In_ ULONG Flags); 13519 #endif 13520 13521 #if (NTDDI_VERSION >= NTDDI_WIN7) 13522 13523 NTKERNELAPI 13524 NTSTATUS 13525 NTAPI 13526 IoGetAffinityInterrupt( 13527 _In_ PKINTERRUPT InterruptObject, 13528 _Out_ PGROUP_AFFINITY GroupAffinity); 13529 13530 NTSTATUS 13531 NTAPI 13532 IoGetContainerInformation( 13533 _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass, 13534 _In_opt_ PVOID ContainerObject, 13535 _Inout_updates_bytes_opt_(BufferLength) PVOID Buffer, 13536 _In_ ULONG BufferLength); 13537 13538 NTSTATUS 13539 NTAPI 13540 IoRegisterContainerNotification( 13541 _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass, 13542 _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction, 13543 _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation, 13544 _In_ ULONG NotificationInformationLength, 13545 _Out_ PVOID CallbackRegistration); 13546 13547 VOID 13548 NTAPI 13549 IoUnregisterContainerNotification( 13550 _In_ PVOID CallbackRegistration); 13551 13552 _IRQL_requires_max_(PASSIVE_LEVEL) 13553 __drv_freesMem(Pool) 13554 NTKERNELAPI 13555 NTSTATUS 13556 NTAPI 13557 IoUnregisterPlugPlayNotificationEx( 13558 _In_ PVOID NotificationEntry); 13559 13560 _IRQL_requires_max_(PASSIVE_LEVEL) 13561 _Must_inspect_result_ 13562 NTKERNELAPI 13563 NTSTATUS 13564 NTAPI 13565 IoGetDeviceNumaNode( 13566 _In_ PDEVICE_OBJECT Pdo, 13567 _Out_ PUSHORT NodeNumber); 13568 13569 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 13570 13571 #if defined(_WIN64) 13572 NTKERNELAPI 13573 ULONG 13574 NTAPI 13575 IoWMIDeviceObjectToProviderId( 13576 _In_ PDEVICE_OBJECT DeviceObject); 13577 #else 13578 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject)) 13579 #endif 13580 13581 /* 13582 * USHORT 13583 * IoSizeOfIrp( 13584 * IN CCHAR StackSize) 13585 */ 13586 #define IoSizeOfIrp(_StackSize) \ 13587 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION))))) 13588 13589 FORCEINLINE 13590 VOID 13591 IoSkipCurrentIrpStackLocation( 13592 _Inout_ PIRP Irp) 13593 { 13594 ASSERT(Irp->CurrentLocation <= Irp->StackCount); 13595 Irp->CurrentLocation++; 13596 #ifdef NONAMELESSUNION 13597 Irp->Tail.Overlay.s.u.CurrentStackLocation++; 13598 #else 13599 Irp->Tail.Overlay.CurrentStackLocation++; 13600 #endif 13601 } 13602 13603 FORCEINLINE 13604 VOID 13605 IoSetNextIrpStackLocation( 13606 _Inout_ PIRP Irp) 13607 { 13608 ASSERT(Irp->CurrentLocation > 0); 13609 Irp->CurrentLocation--; 13610 #ifdef NONAMELESSUNION 13611 Irp->Tail.Overlay.s.u.CurrentStackLocation--; 13612 #else 13613 Irp->Tail.Overlay.CurrentStackLocation--; 13614 #endif 13615 } 13616 13617 __drv_aliasesMem 13618 FORCEINLINE 13619 PIO_STACK_LOCATION 13620 IoGetNextIrpStackLocation( 13621 _In_ PIRP Irp) 13622 { 13623 ASSERT(Irp->CurrentLocation > 0); 13624 #ifdef NONAMELESSUNION 13625 return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 ); 13626 #else 13627 return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 ); 13628 #endif 13629 } 13630 13631 _IRQL_requires_max_(DISPATCH_LEVEL) 13632 FORCEINLINE 13633 VOID 13634 IoSetCompletionRoutine( 13635 _In_ PIRP Irp, 13636 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine, 13637 _In_opt_ __drv_aliasesMem PVOID Context, 13638 _In_ BOOLEAN InvokeOnSuccess, 13639 _In_ BOOLEAN InvokeOnError, 13640 _In_ BOOLEAN InvokeOnCancel) 13641 { 13642 PIO_STACK_LOCATION irpSp; 13643 ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE ); 13644 irpSp = IoGetNextIrpStackLocation(Irp); 13645 irpSp->CompletionRoutine = CompletionRoutine; 13646 irpSp->Context = Context; 13647 irpSp->Control = 0; 13648 13649 if (InvokeOnSuccess) { 13650 irpSp->Control = SL_INVOKE_ON_SUCCESS; 13651 } 13652 13653 if (InvokeOnError) { 13654 irpSp->Control |= SL_INVOKE_ON_ERROR; 13655 } 13656 13657 if (InvokeOnCancel) { 13658 irpSp->Control |= SL_INVOKE_ON_CANCEL; 13659 } 13660 } 13661 13662 _IRQL_requires_max_(DISPATCH_LEVEL) 13663 _Ret_maybenull_ 13664 FORCEINLINE 13665 PDRIVER_CANCEL 13666 IoSetCancelRoutine( 13667 _Inout_ PIRP Irp, 13668 _In_opt_ PDRIVER_CANCEL CancelRoutine) 13669 { 13670 return (PDRIVER_CANCEL)(ULONG_PTR) InterlockedExchangePointer((PVOID *)&(Irp)->CancelRoutine, (PVOID)(ULONG_PTR)(CancelRoutine)); 13671 } 13672 13673 FORCEINLINE 13674 VOID 13675 IoRequestDpc( 13676 _Inout_ PDEVICE_OBJECT DeviceObject, 13677 _In_opt_ PIRP Irp, 13678 _In_opt_ __drv_aliasesMem PVOID Context) 13679 { 13680 KeInsertQueueDpc(&DeviceObject->Dpc, Irp, Context); 13681 } 13682 13683 /* 13684 * VOID 13685 * IoReleaseRemoveLock( 13686 * IN PIO_REMOVE_LOCK RemoveLock, 13687 * IN PVOID Tag) 13688 */ 13689 #define IoReleaseRemoveLock(_RemoveLock, \ 13690 _Tag) \ 13691 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) 13692 13693 /* 13694 * VOID 13695 * IoReleaseRemoveLockAndWait( 13696 * IN PIO_REMOVE_LOCK RemoveLock, 13697 * IN PVOID Tag) 13698 */ 13699 #define IoReleaseRemoveLockAndWait(_RemoveLock, \ 13700 _Tag) \ 13701 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) 13702 13703 #if defined(_WIN64) 13704 _IRQL_requires_max_(DISPATCH_LEVEL) 13705 NTKERNELAPI 13706 BOOLEAN 13707 IoIs32bitProcess( 13708 _In_opt_ PIRP Irp); 13709 #endif 13710 13711 #define PLUGPLAY_REGKEY_DEVICE 1 13712 #define PLUGPLAY_REGKEY_DRIVER 2 13713 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 13714 13715 __drv_aliasesMem 13716 FORCEINLINE 13717 PIO_STACK_LOCATION 13718 IoGetCurrentIrpStackLocation( 13719 _In_ PIRP Irp) 13720 { 13721 ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1); 13722 #ifdef NONAMELESSUNION 13723 return Irp->Tail.Overlay.s.u.CurrentStackLocation; 13724 #else 13725 return Irp->Tail.Overlay.CurrentStackLocation; 13726 #endif 13727 } 13728 13729 FORCEINLINE 13730 VOID 13731 IoMarkIrpPending( 13732 _Inout_ PIRP Irp) 13733 { 13734 IoGetCurrentIrpStackLocation((Irp))->Control |= SL_PENDING_RETURNED; 13735 } 13736 13737 /* 13738 * BOOLEAN 13739 * IoIsErrorUserInduced( 13740 * IN NTSTATUS Status); 13741 */ 13742 #define IoIsErrorUserInduced(Status) \ 13743 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \ 13744 ((Status) == STATUS_IO_TIMEOUT) || \ 13745 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ 13746 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ 13747 ((Status) == STATUS_VERIFY_REQUIRED) || \ 13748 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ 13749 ((Status) == STATUS_WRONG_VOLUME))) 13750 13751 /* VOID 13752 * IoInitializeRemoveLock( 13753 * IN PIO_REMOVE_LOCK Lock, 13754 * IN ULONG AllocateTag, 13755 * IN ULONG MaxLockedMinutes, 13756 * IN ULONG HighWatermark) 13757 */ 13758 #define IoInitializeRemoveLock( \ 13759 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ 13760 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ 13761 HighWatermark, sizeof(IO_REMOVE_LOCK)) 13762 13763 FORCEINLINE 13764 VOID 13765 IoInitializeDpcRequest( 13766 _In_ PDEVICE_OBJECT DeviceObject, 13767 _In_ PIO_DPC_ROUTINE DpcRoutine) 13768 { 13769 #ifdef _MSC_VER 13770 #pragma warning(push) 13771 #pragma warning(disable:28024) 13772 #endif 13773 KeInitializeDpc(&DeviceObject->Dpc, 13774 (PKDEFERRED_ROUTINE) DpcRoutine, 13775 DeviceObject); 13776 #ifdef _MSC_VER 13777 #pragma warning(pop) 13778 #endif 13779 } 13780 13781 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 13782 13783 /* 13784 * ULONG 13785 * IoGetFunctionCodeFromCtlCode( 13786 * IN ULONG ControlCode) 13787 */ 13788 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \ 13789 (((_ControlCode) >> 2) & 0x00000FFF) 13790 13791 FORCEINLINE 13792 VOID 13793 IoCopyCurrentIrpStackLocationToNext( 13794 _Inout_ PIRP Irp) 13795 { 13796 PIO_STACK_LOCATION irpSp; 13797 PIO_STACK_LOCATION nextIrpSp; 13798 irpSp = IoGetCurrentIrpStackLocation(Irp); 13799 nextIrpSp = IoGetNextIrpStackLocation(Irp); 13800 RtlCopyMemory(nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); 13801 nextIrpSp->Control = 0; 13802 } 13803 13804 _IRQL_requires_max_(APC_LEVEL) 13805 NTKERNELAPI 13806 VOID 13807 NTAPI 13808 IoGetStackLimits( 13809 _Out_ PULONG_PTR LowLimit, 13810 _Out_ PULONG_PTR HighLimit); 13811 13812 _IRQL_requires_max_(APC_LEVEL) 13813 FORCEINLINE 13814 ULONG_PTR 13815 IoGetRemainingStackSize(VOID) 13816 { 13817 ULONG_PTR End, Begin; 13818 ULONG_PTR Result; 13819 13820 IoGetStackLimits(&Begin, &End); 13821 Result = (ULONG_PTR)(&End) - Begin; 13822 return Result; 13823 } 13824 13825 #if (NTDDI_VERSION >= NTDDI_WS03) 13826 FORCEINLINE 13827 VOID 13828 IoInitializeThreadedDpcRequest( 13829 _In_ PDEVICE_OBJECT DeviceObject, 13830 _In_ PIO_DPC_ROUTINE DpcRoutine) 13831 { 13832 #ifdef _MSC_VER 13833 #pragma warning(push) 13834 #pragma warning(disable:28024) 13835 #pragma warning(disable:28128) 13836 #endif 13837 KeInitializeThreadedDpc(&DeviceObject->Dpc, 13838 (PKDEFERRED_ROUTINE) DpcRoutine, 13839 DeviceObject ); 13840 #ifdef _MSC_VER 13841 #pragma warning(pop) 13842 #endif 13843 } 13844 #endif 13845 13846 /****************************************************************************** 13847 * Power Management Support Functions * 13848 ******************************************************************************/ 13849 13850 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0)) 13851 13852 #if (NTDDI_VERSION >= NTDDI_WIN2K) 13853 13854 _IRQL_requires_max_(DISPATCH_LEVEL) 13855 NTKERNELAPI 13856 NTSTATUS 13857 NTAPI 13858 PoCallDriver( 13859 _In_ struct _DEVICE_OBJECT *DeviceObject, 13860 _Inout_ __drv_aliasesMem struct _IRP *Irp); 13861 13862 _IRQL_requires_max_(APC_LEVEL) 13863 NTKERNELAPI 13864 PULONG 13865 NTAPI 13866 PoRegisterDeviceForIdleDetection( 13867 _In_ struct _DEVICE_OBJECT *DeviceObject, 13868 _In_ ULONG ConservationIdleTime, 13869 _In_ ULONG PerformanceIdleTime, 13870 _In_ DEVICE_POWER_STATE State); 13871 13872 _IRQL_requires_max_(APC_LEVEL) 13873 NTKERNELAPI 13874 PVOID 13875 NTAPI 13876 PoRegisterSystemState( 13877 _Inout_opt_ PVOID StateHandle, 13878 _In_ EXECUTION_STATE Flags); 13879 13880 _IRQL_requires_max_(DISPATCH_LEVEL) 13881 NTKERNELAPI 13882 NTSTATUS 13883 NTAPI 13884 PoRequestPowerIrp( 13885 _In_ struct _DEVICE_OBJECT *DeviceObject, 13886 _In_ UCHAR MinorFunction, 13887 _In_ POWER_STATE PowerState, 13888 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction, 13889 _In_opt_ __drv_aliasesMem PVOID Context, 13890 _Outptr_opt_ struct _IRP **Irp); 13891 13892 _IRQL_requires_max_(DISPATCH_LEVEL) 13893 NTKERNELAPI 13894 POWER_STATE 13895 NTAPI 13896 PoSetPowerState( 13897 _In_ struct _DEVICE_OBJECT *DeviceObject, 13898 _In_ POWER_STATE_TYPE Type, 13899 _In_ POWER_STATE State); 13900 13901 _IRQL_requires_max_(DISPATCH_LEVEL) 13902 NTKERNELAPI 13903 VOID 13904 NTAPI 13905 PoSetSystemState( 13906 _In_ EXECUTION_STATE Flags); 13907 13908 _IRQL_requires_max_(DISPATCH_LEVEL) 13909 NTKERNELAPI 13910 VOID 13911 NTAPI 13912 PoStartNextPowerIrp( 13913 _Inout_ struct _IRP *Irp); 13914 13915 _IRQL_requires_max_(APC_LEVEL) 13916 NTKERNELAPI 13917 VOID 13918 NTAPI 13919 PoUnregisterSystemState( 13920 _Inout_ PVOID StateHandle); 13921 13922 NTKERNELAPI 13923 NTSTATUS 13924 NTAPI 13925 PoRequestShutdownEvent( 13926 OUT PVOID *Event); 13927 13928 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 13929 13930 #if (NTDDI_VERSION >= NTDDI_VISTA) 13931 13932 _IRQL_requires_max_(DISPATCH_LEVEL) 13933 NTKERNELAPI 13934 VOID 13935 NTAPI 13936 PoSetSystemWake( 13937 _Inout_ struct _IRP *Irp); 13938 13939 _IRQL_requires_max_(DISPATCH_LEVEL) 13940 NTKERNELAPI 13941 BOOLEAN 13942 NTAPI 13943 PoGetSystemWake( 13944 _In_ struct _IRP *Irp); 13945 13946 _IRQL_requires_max_(APC_LEVEL) 13947 NTKERNELAPI 13948 NTSTATUS 13949 NTAPI 13950 PoRegisterPowerSettingCallback( 13951 _In_opt_ PDEVICE_OBJECT DeviceObject, 13952 _In_ LPCGUID SettingGuid, 13953 _In_ PPOWER_SETTING_CALLBACK Callback, 13954 _In_opt_ PVOID Context, 13955 _Outptr_opt_ PVOID *Handle); 13956 13957 _IRQL_requires_max_(APC_LEVEL) 13958 NTKERNELAPI 13959 NTSTATUS 13960 NTAPI 13961 PoUnregisterPowerSettingCallback( 13962 _Inout_ PVOID Handle); 13963 13964 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 13965 13966 #if (NTDDI_VERSION >= NTDDI_VISTASP1) 13967 NTKERNELAPI 13968 VOID 13969 NTAPI 13970 PoSetDeviceBusyEx( 13971 _Inout_ PULONG IdlePointer); 13972 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ 13973 13974 #if (NTDDI_VERSION >= NTDDI_WIN7) 13975 13976 NTKERNELAPI 13977 VOID 13978 NTAPI 13979 PoStartDeviceBusy( 13980 _Inout_ PULONG IdlePointer); 13981 13982 NTKERNELAPI 13983 VOID 13984 NTAPI 13985 PoEndDeviceBusy( 13986 _Inout_ PULONG IdlePointer); 13987 13988 _IRQL_requires_max_(DISPATCH_LEVEL) 13989 NTKERNELAPI 13990 BOOLEAN 13991 NTAPI 13992 PoQueryWatchdogTime( 13993 _In_ PDEVICE_OBJECT Pdo, 13994 _Out_ PULONG SecondsRemaining); 13995 13996 _IRQL_requires_max_(APC_LEVEL) 13997 NTKERNELAPI 13998 VOID 13999 NTAPI 14000 PoDeletePowerRequest( 14001 _Inout_ PVOID PowerRequest); 14002 14003 _IRQL_requires_max_(DISPATCH_LEVEL) 14004 NTKERNELAPI 14005 NTSTATUS 14006 NTAPI 14007 PoSetPowerRequest( 14008 _Inout_ PVOID PowerRequest, 14009 _In_ POWER_REQUEST_TYPE Type); 14010 14011 _IRQL_requires_max_(DISPATCH_LEVEL) 14012 NTKERNELAPI 14013 NTSTATUS 14014 NTAPI 14015 PoClearPowerRequest( 14016 _Inout_ PVOID PowerRequest, 14017 _In_ POWER_REQUEST_TYPE Type); 14018 14019 _IRQL_requires_max_(APC_LEVEL) 14020 NTKERNELAPI 14021 NTSTATUS 14022 NTAPI 14023 PoCreatePowerRequest( 14024 _Outptr_ PVOID *PowerRequest, 14025 _In_ PDEVICE_OBJECT DeviceObject, 14026 _In_opt_ PCOUNTED_REASON_CONTEXT Context); 14027 14028 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 14029 14030 /****************************************************************************** 14031 * Executive Functions * 14032 ******************************************************************************/ 14033 14034 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend) 14035 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend) 14036 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value) 14037 14038 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) 14039 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) 14040 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) 14041 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) 14042 14043 #define ExInitializeSListHead InitializeSListHead 14044 14045 #if defined(_NTHAL_) && defined(_X86_) 14046 14047 NTKERNELAPI 14048 VOID 14049 FASTCALL 14050 ExiAcquireFastMutex( 14051 IN OUT PFAST_MUTEX FastMutex); 14052 14053 NTKERNELAPI 14054 VOID 14055 FASTCALL 14056 ExiReleaseFastMutex( 14057 IN OUT PFAST_MUTEX FastMutex); 14058 14059 NTKERNELAPI 14060 BOOLEAN 14061 FASTCALL 14062 ExiTryToAcquireFastMutex( 14063 IN OUT PFAST_MUTEX FastMutex); 14064 14065 #define ExAcquireFastMutex ExiAcquireFastMutex 14066 #define ExReleaseFastMutex ExiReleaseFastMutex 14067 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex 14068 14069 #else 14070 14071 #if (NTDDI_VERSION >= NTDDI_WIN2K) 14072 14073 _IRQL_raises_(APC_LEVEL) 14074 _IRQL_saves_global_(OldIrql, FastMutex) 14075 NTKERNELAPI 14076 VOID 14077 FASTCALL 14078 ExAcquireFastMutex( 14079 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) 14080 PFAST_MUTEX FastMutex); 14081 14082 _IRQL_requires_(APC_LEVEL) 14083 _IRQL_restores_global_(OldIrql, FastMutex) 14084 NTKERNELAPI 14085 VOID 14086 FASTCALL 14087 ExReleaseFastMutex( 14088 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 14089 PFAST_MUTEX FastMutex); 14090 14091 _Must_inspect_result_ 14092 _Success_(return!=FALSE) 14093 _IRQL_raises_(APC_LEVEL) 14094 _IRQL_saves_global_(OldIrql, FastMutex) 14095 NTKERNELAPI 14096 BOOLEAN 14097 FASTCALL 14098 ExTryToAcquireFastMutex( 14099 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) 14100 PFAST_MUTEX FastMutex); 14101 14102 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 14103 14104 #endif /* defined(_NTHAL_) && defined(_X86_) */ 14105 14106 #if defined(_X86_) 14107 #define ExInterlockedAddUlong ExfInterlockedAddUlong 14108 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList 14109 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList 14110 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList 14111 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList 14112 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList 14113 #endif /* defined(_X86_) */ 14114 14115 #if defined(_WIN64) 14116 14117 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \ 14118 defined(_NTHAL_) || defined(_NTOSP_) 14119 NTKERNELAPI 14120 USHORT 14121 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead); 14122 #else 14123 FORCEINLINE 14124 USHORT 14125 ExQueryDepthSList(_In_ PSLIST_HEADER ListHead) 14126 { 14127 return (USHORT)(ListHead->Alignment & 0xffff); 14128 } 14129 #endif 14130 14131 NTKERNELAPI 14132 PSLIST_ENTRY 14133 ExpInterlockedFlushSList( 14134 PSLIST_HEADER ListHead); 14135 14136 NTKERNELAPI 14137 PSLIST_ENTRY 14138 ExpInterlockedPopEntrySList( 14139 _Inout_ PSLIST_HEADER ListHead); 14140 14141 NTKERNELAPI 14142 PSLIST_ENTRY 14143 ExpInterlockedPushEntrySList( 14144 _Inout_ PSLIST_HEADER ListHead, 14145 _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry); 14146 14147 #define ExInterlockedFlushSList(Head) \ 14148 ExpInterlockedFlushSList(Head) 14149 #define ExInterlockedPopEntrySList(Head, Lock) \ 14150 ExpInterlockedPopEntrySList(Head) 14151 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \ 14152 ExpInterlockedPushEntrySList(Head, Entry) 14153 14154 #else /* !defined(_WIN64) */ 14155 14156 #ifdef NONAMELESSUNION 14157 #define ExQueryDepthSList(listhead) (listhead)->s.Depth 14158 #else 14159 #define ExQueryDepthSList(listhead) (listhead)->Depth 14160 #endif 14161 14162 NTKERNELAPI 14163 PSINGLE_LIST_ENTRY 14164 FASTCALL 14165 ExInterlockedFlushSList( 14166 _Inout_ PSLIST_HEADER ListHead); 14167 14168 #endif /* !defined(_WIN64) */ 14169 14170 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) 14171 14172 NTKERNELAPI 14173 PSINGLE_LIST_ENTRY 14174 FASTCALL 14175 ExInterlockedPopEntrySList( 14176 _Inout_ PSLIST_HEADER ListHead, 14177 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14178 14179 NTKERNELAPI 14180 PSINGLE_LIST_ENTRY 14181 FASTCALL 14182 ExInterlockedPushEntrySList( 14183 _Inout_ PSLIST_HEADER ListHead, 14184 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry, 14185 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14186 14187 _IRQL_requires_max_(APC_LEVEL) 14188 NTKERNELAPI 14189 PVOID 14190 NTAPI 14191 ExAllocateFromPagedLookasideList( 14192 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside); 14193 14194 _IRQL_requires_max_(APC_LEVEL) 14195 NTKERNELAPI 14196 VOID 14197 NTAPI 14198 ExFreeToPagedLookasideList( 14199 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside, 14200 _In_ PVOID Entry); 14201 14202 #else /* !_WIN2K_COMPAT_SLIST_USAGE */ 14203 14204 #if !defined(_WIN64) 14205 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \ 14206 InterlockedPopEntrySList(_ListHead) 14207 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \ 14208 InterlockedPushEntrySList(_ListHead, _ListEntry) 14209 #endif 14210 14211 _IRQL_requires_max_(APC_LEVEL) 14212 static __inline 14213 PVOID 14214 ExAllocateFromPagedLookasideList( 14215 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside) 14216 { 14217 PVOID Entry; 14218 14219 Lookaside->L.TotalAllocates++; 14220 #ifdef NONAMELESSUNION 14221 Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); 14222 if (Entry == NULL) { 14223 Lookaside->L.u2.AllocateMisses++; 14224 Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, 14225 Lookaside->L.Size, 14226 Lookaside->L.Tag); 14227 } 14228 #else /* NONAMELESSUNION */ 14229 Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); 14230 if (Entry == NULL) { 14231 Lookaside->L.AllocateMisses++; 14232 Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, 14233 Lookaside->L.Size, 14234 Lookaside->L.Tag); 14235 } 14236 #endif /* NONAMELESSUNION */ 14237 return Entry; 14238 } 14239 14240 _IRQL_requires_max_(APC_LEVEL) 14241 static __inline 14242 VOID 14243 ExFreeToPagedLookasideList( 14244 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside, 14245 _In_ PVOID Entry) 14246 { 14247 Lookaside->L.TotalFrees++; 14248 #ifdef NONAMELESSUNION 14249 if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { 14250 Lookaside->L.u3.FreeMisses++; 14251 (Lookaside->L.u5.Free)(Entry); 14252 } else { 14253 InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); 14254 } 14255 #else /* NONAMELESSUNION */ 14256 if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { 14257 Lookaside->L.FreeMisses++; 14258 (Lookaside->L.Free)(Entry); 14259 } else { 14260 InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); 14261 } 14262 #endif /* NONAMELESSUNION */ 14263 } 14264 14265 #endif /* _WIN2K_COMPAT_SLIST_USAGE */ 14266 14267 14268 /* ERESOURCE_THREAD 14269 * ExGetCurrentResourceThread( 14270 * VOID); 14271 */ 14272 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread()) 14273 14274 #define ExReleaseResource(R) (ExReleaseResourceLite(R)) 14275 14276 /* VOID 14277 * ExInitializeWorkItem( 14278 * IN PWORK_QUEUE_ITEM Item, 14279 * IN PWORKER_THREAD_ROUTINE Routine, 14280 * IN PVOID Context) 14281 */ 14282 #define ExInitializeWorkItem(Item, Routine, Context) \ 14283 { \ 14284 (Item)->WorkerRoutine = Routine; \ 14285 (Item)->Parameter = Context; \ 14286 (Item)->List.Flink = NULL; \ 14287 } 14288 14289 FORCEINLINE 14290 VOID 14291 ExInitializeFastMutex( 14292 _Out_ PFAST_MUTEX FastMutex) 14293 { 14294 FastMutex->Count = FM_LOCK_BIT; 14295 FastMutex->Owner = NULL; 14296 FastMutex->Contention = 0; 14297 KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE); 14298 return; 14299 } 14300 14301 14302 #if (NTDDI_VERSION >= NTDDI_WIN2K) 14303 _IRQL_requires_max_(APC_LEVEL) 14304 _Requires_lock_held_(_Global_critical_region_) 14305 NTKERNELAPI 14306 VOID 14307 FASTCALL 14308 ExAcquireFastMutexUnsafe( 14309 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) 14310 PFAST_MUTEX FastMutex); 14311 14312 _IRQL_requires_max_(APC_LEVEL) 14313 _Requires_lock_held_(_Global_critical_region_) 14314 NTKERNELAPI 14315 VOID 14316 FASTCALL 14317 ExReleaseFastMutexUnsafe( 14318 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 14319 PFAST_MUTEX FastMutex); 14320 14321 _Requires_lock_held_(_Global_critical_region_) 14322 _Requires_lock_not_held_(*Resource) 14323 _When_(Wait!=0, _Acquires_exclusive_lock_(*Resource)) 14324 _IRQL_requires_max_(APC_LEVEL) 14325 _When_(Wait!=0, _Post_satisfies_(return == 1)) 14326 _When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) 14327 NTKERNELAPI 14328 BOOLEAN 14329 NTAPI 14330 ExAcquireResourceExclusiveLite( 14331 _Inout_ PERESOURCE Resource, 14332 _In_ _Literal_ BOOLEAN Wait); 14333 14334 _IRQL_requires_max_(APC_LEVEL) 14335 _Requires_lock_held_(_Global_critical_region_) 14336 _When_(Wait!=0, _Post_satisfies_(return == 1)) 14337 _When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) 14338 NTKERNELAPI 14339 BOOLEAN 14340 NTAPI 14341 ExAcquireResourceSharedLite( 14342 _Inout_ _Requires_lock_not_held_(*_Curr_) 14343 _When_(return!=0, _Acquires_shared_lock_(*_Curr_)) 14344 PERESOURCE Resource, 14345 _In_ BOOLEAN Wait); 14346 14347 _IRQL_requires_max_(APC_LEVEL) 14348 _Requires_lock_held_(_Global_critical_region_) 14349 _When_(Wait!=0, _Post_satisfies_(return == 1)) 14350 _When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) 14351 NTKERNELAPI 14352 BOOLEAN 14353 NTAPI 14354 ExAcquireSharedStarveExclusive( 14355 _Inout_ _Requires_lock_not_held_(*_Curr_) 14356 _When_(return!=0, _Acquires_shared_lock_(*_Curr_)) 14357 PERESOURCE Resource, 14358 _In_ BOOLEAN Wait); 14359 14360 _IRQL_requires_max_(APC_LEVEL) 14361 _Requires_lock_held_(_Global_critical_region_) 14362 _When_(Wait!=0, _Post_satisfies_(return == 1)) 14363 _When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) 14364 NTKERNELAPI 14365 BOOLEAN 14366 NTAPI 14367 ExAcquireSharedWaitForExclusive( 14368 _Inout_ _Requires_lock_not_held_(*_Curr_) 14369 _When_(return!=0, _Acquires_lock_(*_Curr_)) 14370 PERESOURCE Resource, 14371 _In_ BOOLEAN Wait); 14372 14373 __drv_preferredFunction("ExAllocatePoolWithTag", 14374 "No tag interferes with debugging.") 14375 __drv_allocatesMem(Mem) 14376 _When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) 14377 _When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 14378 _When_((PoolType & NonPagedPoolMustSucceed) != 0, 14379 __drv_reportError("Must succeed pool allocations are forbidden. " 14380 "Allocation failures cause a system crash")) 14381 _When_((PoolType & (NonPagedPoolMustSucceed | 14382 POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, 14383 _Post_maybenull_ _Must_inspect_result_) 14384 _When_((PoolType & (NonPagedPoolMustSucceed | 14385 POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, 14386 _Post_notnull_) 14387 _Post_writable_byte_size_(NumberOfBytes) 14388 NTKERNELAPI 14389 PVOID 14390 NTAPI 14391 ExAllocatePool( 14392 __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, 14393 _In_ SIZE_T NumberOfBytes); 14394 14395 __drv_preferredFunction("ExAllocatePoolWithQuotaTag", 14396 "No tag interferes with debugging.") 14397 __drv_allocatesMem(Mem) 14398 _When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) 14399 _When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 14400 _When_((PoolType & NonPagedPoolMustSucceed) != 0, 14401 __drv_reportError("Must succeed pool allocations are forbidden. " 14402 "Allocation failures cause a system crash")) 14403 _When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) != 0, 14404 _Post_maybenull_ _Must_inspect_result_) 14405 _When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) == 0, _Post_notnull_) 14406 _Post_writable_byte_size_(NumberOfBytes) 14407 NTKERNELAPI 14408 PVOID 14409 NTAPI 14410 ExAllocatePoolWithQuota( 14411 __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, 14412 _In_ SIZE_T NumberOfBytes); 14413 14414 __drv_allocatesMem(Mem) 14415 _When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) 14416 _When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 14417 _When_((PoolType & NonPagedPoolMustSucceed) != 0, 14418 __drv_reportError("Must succeed pool allocations are forbidden. " 14419 "Allocation failures cause a system crash")) 14420 _When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) != 0, 14421 _Post_maybenull_ _Must_inspect_result_) 14422 _When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) == 0, _Post_notnull_) 14423 _Post_writable_byte_size_(NumberOfBytes) 14424 NTKERNELAPI 14425 PVOID 14426 NTAPI 14427 ExAllocatePoolWithQuotaTag( 14428 _In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType, 14429 _In_ SIZE_T NumberOfBytes, 14430 _In_ ULONG Tag); 14431 14432 #ifndef POOL_TAGGING 14433 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b) 14434 #endif 14435 14436 __drv_allocatesMem(Mem) 14437 _When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) 14438 _When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 14439 _When_((PoolType & NonPagedPoolMustSucceed) != 0, 14440 __drv_reportError("Must succeed pool allocations are forbidden. " 14441 "Allocation failures cause a system crash")) 14442 _When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, 14443 _Post_maybenull_ _Must_inspect_result_) 14444 _When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, 14445 _Post_notnull_) 14446 _Post_writable_byte_size_(NumberOfBytes) 14447 NTKERNELAPI 14448 PVOID 14449 NTAPI 14450 ExAllocatePoolWithTag( 14451 _In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType, 14452 _In_ SIZE_T NumberOfBytes, 14453 _In_ ULONG Tag); 14454 14455 #ifndef POOL_TAGGING 14456 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b) 14457 #endif 14458 14459 __drv_allocatesMem(Mem) 14460 _When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) 14461 _When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) 14462 _When_((PoolType & NonPagedPoolMustSucceed) != 0, 14463 __drv_reportError("Must succeed pool allocations are forbidden. " 14464 "Allocation failures cause a system crash")) 14465 _When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, 14466 _Post_maybenull_ _Must_inspect_result_) 14467 _When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, 14468 _Post_notnull_) 14469 _Post_writable_byte_size_(NumberOfBytes) 14470 NTKERNELAPI 14471 PVOID 14472 NTAPI 14473 ExAllocatePoolWithTagPriority( 14474 _In_ __drv_strictTypeMatch(__drv_typeCond) POOL_TYPE PoolType, 14475 _In_ SIZE_T NumberOfBytes, 14476 _In_ ULONG Tag, 14477 _In_ __drv_strictTypeMatch(__drv_typeExpr) EX_POOL_PRIORITY Priority); 14478 14479 _IRQL_requires_max_(DISPATCH_LEVEL) 14480 NTKERNELAPI 14481 VOID 14482 NTAPI 14483 ExConvertExclusiveToSharedLite( 14484 _Inout_ _Requires_lock_held_(*_Curr_) PERESOURCE Resource); 14485 14486 _IRQL_requires_max_(APC_LEVEL) 14487 NTKERNELAPI 14488 NTSTATUS 14489 NTAPI 14490 ExCreateCallback( 14491 _Outptr_ PCALLBACK_OBJECT *CallbackObject, 14492 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 14493 _In_ BOOLEAN Create, 14494 _In_ BOOLEAN AllowMultipleCallbacks); 14495 14496 NTKERNELAPI 14497 VOID 14498 NTAPI 14499 ExDeleteNPagedLookasideList( 14500 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside); 14501 14502 _IRQL_requires_max_(APC_LEVEL) 14503 NTKERNELAPI 14504 VOID 14505 NTAPI 14506 ExDeletePagedLookasideList( 14507 _Inout_ PPAGED_LOOKASIDE_LIST Lookaside); 14508 14509 _IRQL_requires_max_(DISPATCH_LEVEL) 14510 NTKERNELAPI 14511 NTSTATUS 14512 NTAPI 14513 ExDeleteResourceLite( 14514 _Inout_ PERESOURCE Resource); 14515 14516 _IRQL_requires_max_(DISPATCH_LEVEL) 14517 NTKERNELAPI 14518 VOID 14519 NTAPI 14520 ExFreePool( 14521 _In_ __drv_freesMem(Mem) PVOID P); 14522 14523 _IRQL_requires_max_(DISPATCH_LEVEL) 14524 NTKERNELAPI 14525 VOID 14526 NTAPI 14527 ExFreePoolWithTag( 14528 _In_ __drv_freesMem(Mem) PVOID P, 14529 _In_ ULONG Tag); 14530 14531 _IRQL_requires_max_(DISPATCH_LEVEL) 14532 NTKERNELAPI 14533 ULONG 14534 NTAPI 14535 ExGetExclusiveWaiterCount( 14536 _In_ PERESOURCE Resource); 14537 14538 _IRQL_requires_max_(DISPATCH_LEVEL) 14539 NTKERNELAPI 14540 KPROCESSOR_MODE 14541 NTAPI 14542 ExGetPreviousMode(VOID); 14543 14544 _IRQL_requires_max_(DISPATCH_LEVEL) 14545 NTKERNELAPI 14546 ULONG 14547 NTAPI 14548 ExGetSharedWaiterCount( 14549 _In_ PERESOURCE Resource); 14550 14551 _IRQL_requires_max_(DISPATCH_LEVEL) 14552 NTKERNELAPI 14553 VOID 14554 NTAPI 14555 ExInitializeNPagedLookasideList( 14556 _Out_ PNPAGED_LOOKASIDE_LIST Lookaside, 14557 _In_opt_ PALLOCATE_FUNCTION Allocate, 14558 _In_opt_ PFREE_FUNCTION Free, 14559 _In_ ULONG Flags, 14560 _In_ SIZE_T Size, 14561 _In_ ULONG Tag, 14562 _In_ USHORT Depth); 14563 14564 _IRQL_requires_max_(APC_LEVEL) 14565 NTKERNELAPI 14566 VOID 14567 NTAPI 14568 ExInitializePagedLookasideList( 14569 _Out_ PPAGED_LOOKASIDE_LIST Lookaside, 14570 _In_opt_ PALLOCATE_FUNCTION Allocate, 14571 _In_opt_ PFREE_FUNCTION Free, 14572 _In_ ULONG Flags, 14573 _In_ SIZE_T Size, 14574 _In_ ULONG Tag, 14575 _In_ USHORT Depth); 14576 14577 _IRQL_requires_max_(DISPATCH_LEVEL) 14578 NTKERNELAPI 14579 NTSTATUS 14580 NTAPI 14581 ExInitializeResourceLite( 14582 _Out_ PERESOURCE Resource); 14583 14584 NTKERNELAPI 14585 LARGE_INTEGER 14586 NTAPI 14587 ExInterlockedAddLargeInteger( 14588 _Inout_ PLARGE_INTEGER Addend, 14589 _In_ LARGE_INTEGER Increment, 14590 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14591 14592 #if defined(_WIN64) 14593 #define ExInterlockedAddLargeStatistic(Addend, Increment) \ 14594 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment) 14595 #else 14596 #define ExInterlockedAddLargeStatistic(Addend, Increment) \ 14597 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment) 14598 #endif 14599 14600 NTKERNELAPI 14601 ULONG 14602 FASTCALL 14603 ExInterlockedAddUlong( 14604 _Inout_ PULONG Addend, 14605 _In_ ULONG Increment, 14606 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14607 14608 #if defined(_AMD64_) || defined(_IA64_) 14609 14610 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ 14611 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand)) 14612 14613 #elif defined(_X86_) 14614 14615 NTKERNELAPI 14616 LONGLONG 14617 FASTCALL 14618 ExfInterlockedCompareExchange64( 14619 _Inout_ _Interlocked_operand_ LONGLONG volatile *Destination, 14620 _In_ PLONGLONG Exchange, 14621 _In_ PLONGLONG Comperand); 14622 14623 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ 14624 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand) 14625 14626 #else 14627 14628 NTKERNELAPI 14629 LONGLONG 14630 FASTCALL 14631 ExInterlockedCompareExchange64( 14632 IN OUT LONGLONG volatile *Destination, 14633 IN PLONGLONG Exchange, 14634 IN PLONGLONG Comparand, 14635 IN PKSPIN_LOCK Lock); 14636 14637 #endif /* defined(_AMD64_) || defined(_IA64_) */ 14638 14639 NTKERNELAPI 14640 PLIST_ENTRY 14641 FASTCALL 14642 ExInterlockedInsertHeadList( 14643 _Inout_ PLIST_ENTRY ListHead, 14644 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry, 14645 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14646 14647 NTKERNELAPI 14648 PLIST_ENTRY 14649 FASTCALL 14650 ExInterlockedInsertTailList( 14651 _Inout_ PLIST_ENTRY ListHead, 14652 _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry, 14653 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14654 14655 NTKERNELAPI 14656 PSINGLE_LIST_ENTRY 14657 FASTCALL 14658 ExInterlockedPopEntryList( 14659 _Inout_ PSINGLE_LIST_ENTRY ListHead, 14660 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14661 14662 NTKERNELAPI 14663 PSINGLE_LIST_ENTRY 14664 FASTCALL 14665 ExInterlockedPushEntryList( 14666 _Inout_ PSINGLE_LIST_ENTRY ListHead, 14667 _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry, 14668 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14669 14670 NTKERNELAPI 14671 PLIST_ENTRY 14672 FASTCALL 14673 ExInterlockedRemoveHeadList( 14674 _Inout_ PLIST_ENTRY ListHead, 14675 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 14676 14677 _IRQL_requires_max_(PASSIVE_LEVEL) 14678 NTKERNELAPI 14679 BOOLEAN 14680 NTAPI 14681 ExIsProcessorFeaturePresent( 14682 _In_ ULONG ProcessorFeature); 14683 14684 _IRQL_requires_max_(DISPATCH_LEVEL) 14685 NTKERNELAPI 14686 BOOLEAN 14687 NTAPI 14688 ExIsResourceAcquiredExclusiveLite( 14689 _In_ PERESOURCE Resource); 14690 14691 _IRQL_requires_max_(DISPATCH_LEVEL) 14692 NTKERNELAPI 14693 ULONG 14694 NTAPI 14695 ExIsResourceAcquiredSharedLite( 14696 _In_ PERESOURCE Resource); 14697 14698 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite 14699 14700 NTKERNELAPI 14701 VOID 14702 NTAPI 14703 ExLocalTimeToSystemTime( 14704 _In_ PLARGE_INTEGER LocalTime, 14705 _Out_ PLARGE_INTEGER SystemTime); 14706 14707 _IRQL_requires_max_(DISPATCH_LEVEL) 14708 NTKERNELAPI 14709 VOID 14710 NTAPI 14711 ExNotifyCallback( 14712 _In_ PCALLBACK_OBJECT CallbackObject, 14713 _In_opt_ PVOID Argument1, 14714 _In_opt_ PVOID Argument2); 14715 14716 _IRQL_requires_max_(DISPATCH_LEVEL) 14717 NTKERNELAPI 14718 VOID 14719 NTAPI 14720 ExQueueWorkItem( 14721 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem, 14722 __drv_strictTypeMatch(__drv_typeExpr) _In_ WORK_QUEUE_TYPE QueueType); 14723 14724 _IRQL_requires_max_(APC_LEVEL) 14725 NTKERNELAPI 14726 DECLSPEC_NORETURN 14727 VOID 14728 NTAPI 14729 ExRaiseStatus( 14730 _In_ NTSTATUS Status); 14731 14732 _IRQL_requires_max_(APC_LEVEL) 14733 NTKERNELAPI 14734 PVOID 14735 NTAPI 14736 ExRegisterCallback( 14737 _Inout_ PCALLBACK_OBJECT CallbackObject, 14738 _In_ PCALLBACK_FUNCTION CallbackFunction, 14739 _In_opt_ PVOID CallbackContext); 14740 14741 _IRQL_requires_max_(DISPATCH_LEVEL) 14742 NTKERNELAPI 14743 NTSTATUS 14744 NTAPI 14745 ExReinitializeResourceLite( 14746 _Inout_ PERESOURCE Resource); 14747 14748 _IRQL_requires_max_(DISPATCH_LEVEL) 14749 _Requires_lock_held_(_Global_critical_region_) 14750 NTKERNELAPI 14751 VOID 14752 NTAPI 14753 ExReleaseResourceForThreadLite( 14754 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 14755 PERESOURCE Resource, 14756 _In_ ERESOURCE_THREAD ResourceThreadId); 14757 14758 _Requires_lock_held_(_Global_critical_region_) 14759 _Requires_lock_held_(*Resource) 14760 _Releases_lock_(*Resource) 14761 _IRQL_requires_max_(DISPATCH_LEVEL) 14762 NTKERNELAPI 14763 VOID 14764 FASTCALL 14765 ExReleaseResourceLite( 14766 _Inout_ PERESOURCE Resource); 14767 14768 _IRQL_requires_max_(DISPATCH_LEVEL) 14769 NTKERNELAPI 14770 VOID 14771 NTAPI 14772 ExSetResourceOwnerPointer( 14773 _Inout_ PERESOURCE Resource, 14774 _In_ PVOID OwnerPointer); 14775 14776 _IRQL_requires_max_(APC_LEVEL) 14777 NTKERNELAPI 14778 ULONG 14779 NTAPI 14780 ExSetTimerResolution( 14781 _In_ ULONG DesiredTime, 14782 _In_ BOOLEAN SetResolution); 14783 14784 NTKERNELAPI 14785 VOID 14786 NTAPI 14787 ExSystemTimeToLocalTime( 14788 _In_ PLARGE_INTEGER SystemTime, 14789 _Out_ PLARGE_INTEGER LocalTime); 14790 14791 _IRQL_requires_max_(APC_LEVEL) 14792 NTKERNELAPI 14793 VOID 14794 NTAPI 14795 ExUnregisterCallback( 14796 _Inout_ PVOID CbRegistration); 14797 14798 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 14799 14800 #if (NTDDI_VERSION >= NTDDI_WINXP) 14801 14802 _Must_inspect_result_ 14803 _Post_satisfies_(return == 0 || return == 1) 14804 NTKERNELAPI 14805 BOOLEAN 14806 FASTCALL 14807 ExAcquireRundownProtection( 14808 _Inout_ PEX_RUNDOWN_REF RunRef); 14809 14810 NTKERNELAPI 14811 VOID 14812 FASTCALL 14813 ExInitializeRundownProtection( 14814 _Out_ PEX_RUNDOWN_REF RunRef); 14815 14816 NTKERNELAPI 14817 VOID 14818 FASTCALL 14819 ExReInitializeRundownProtection( 14820 _Inout_ PEX_RUNDOWN_REF RunRef); 14821 14822 NTKERNELAPI 14823 VOID 14824 FASTCALL 14825 ExReleaseRundownProtection( 14826 _Inout_ PEX_RUNDOWN_REF RunRef); 14827 14828 NTKERNELAPI 14829 VOID 14830 FASTCALL 14831 ExRundownCompleted( 14832 _Out_ PEX_RUNDOWN_REF RunRef); 14833 14834 NTKERNELAPI 14835 BOOLEAN 14836 NTAPI 14837 ExVerifySuite( 14838 __drv_strictTypeMatch(__drv_typeExpr) _In_ SUITE_TYPE SuiteType); 14839 14840 NTKERNELAPI 14841 VOID 14842 FASTCALL 14843 ExWaitForRundownProtectionRelease( 14844 _Inout_ PEX_RUNDOWN_REF RunRef); 14845 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 14846 14847 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 14848 14849 _Must_inspect_result_ 14850 _Post_satisfies_(return == 0 || return == 1) 14851 NTKERNELAPI 14852 BOOLEAN 14853 FASTCALL 14854 ExAcquireRundownProtectionEx( 14855 _Inout_ PEX_RUNDOWN_REF RunRef, 14856 _In_ ULONG Count); 14857 14858 NTKERNELAPI 14859 VOID 14860 FASTCALL 14861 ExReleaseRundownProtectionEx( 14862 _Inout_ PEX_RUNDOWN_REF RunRef, 14863 _In_ ULONG Count); 14864 14865 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ 14866 14867 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 14868 14869 _Must_inspect_result_ 14870 _IRQL_requires_max_(APC_LEVEL) 14871 NTKERNELAPI 14872 PEX_RUNDOWN_REF_CACHE_AWARE 14873 NTAPI 14874 ExAllocateCacheAwareRundownProtection( 14875 __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, 14876 _In_ ULONG PoolTag); 14877 14878 _IRQL_requires_max_(APC_LEVEL) 14879 NTKERNELAPI 14880 SIZE_T 14881 NTAPI 14882 ExSizeOfRundownProtectionCacheAware(VOID); 14883 14884 _IRQL_requires_max_(APC_LEVEL) 14885 _Acquires_lock_(_Global_critical_region_) 14886 NTKERNELAPI 14887 PVOID 14888 NTAPI 14889 ExEnterCriticalRegionAndAcquireResourceShared( 14890 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_) 14891 PERESOURCE Resource); 14892 14893 _IRQL_requires_max_(APC_LEVEL) 14894 _Acquires_lock_(_Global_critical_region_) 14895 NTKERNELAPI 14896 PVOID 14897 NTAPI 14898 ExEnterCriticalRegionAndAcquireResourceExclusive( 14899 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_) 14900 PERESOURCE Resource); 14901 14902 _IRQL_requires_max_(APC_LEVEL) 14903 _Acquires_lock_(_Global_critical_region_) 14904 NTKERNELAPI 14905 PVOID 14906 NTAPI 14907 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( 14908 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) 14909 PERESOURCE Resource); 14910 14911 _IRQL_requires_max_(DISPATCH_LEVEL) 14912 _Releases_lock_(_Global_critical_region_) 14913 NTKERNELAPI 14914 VOID 14915 FASTCALL 14916 ExReleaseResourceAndLeaveCriticalRegion( 14917 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 14918 PERESOURCE Resource); 14919 14920 _IRQL_requires_max_(APC_LEVEL) 14921 NTKERNELAPI 14922 VOID 14923 NTAPI 14924 ExInitializeRundownProtectionCacheAware( 14925 _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, 14926 _In_ SIZE_T RunRefSize); 14927 14928 _IRQL_requires_max_(APC_LEVEL) 14929 NTKERNELAPI 14930 VOID 14931 NTAPI 14932 ExFreeCacheAwareRundownProtection( 14933 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); 14934 14935 _Must_inspect_result_ 14936 _Post_satisfies_(return == 0 || return == 1) 14937 NTKERNELAPI 14938 BOOLEAN 14939 FASTCALL 14940 ExAcquireRundownProtectionCacheAware( 14941 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); 14942 14943 NTKERNELAPI 14944 VOID 14945 FASTCALL 14946 ExReleaseRundownProtectionCacheAware( 14947 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); 14948 14949 _Must_inspect_result_ 14950 _Post_satisfies_(return == 0 || return == 1) 14951 NTKERNELAPI 14952 BOOLEAN 14953 FASTCALL 14954 ExAcquireRundownProtectionCacheAwareEx( 14955 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, 14956 _In_ ULONG Count); 14957 14958 NTKERNELAPI 14959 VOID 14960 FASTCALL 14961 ExReleaseRundownProtectionCacheAwareEx( 14962 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef, 14963 _In_ ULONG Count); 14964 14965 NTKERNELAPI 14966 VOID 14967 FASTCALL 14968 ExWaitForRundownProtectionReleaseCacheAware( 14969 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef); 14970 14971 NTKERNELAPI 14972 VOID 14973 FASTCALL 14974 ExReInitializeRundownProtectionCacheAware( 14975 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); 14976 14977 NTKERNELAPI 14978 VOID 14979 FASTCALL 14980 ExRundownCompletedCacheAware( 14981 _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); 14982 14983 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 14984 14985 #if (NTDDI_VERSION >= NTDDI_VISTA) 14986 14987 _IRQL_requires_max_(DISPATCH_LEVEL) 14988 NTKERNELAPI 14989 NTSTATUS 14990 NTAPI 14991 ExInitializeLookasideListEx( 14992 _Out_ PLOOKASIDE_LIST_EX Lookaside, 14993 _In_opt_ PALLOCATE_FUNCTION_EX Allocate, 14994 _In_opt_ PFREE_FUNCTION_EX Free, 14995 _In_ POOL_TYPE PoolType, 14996 _In_ ULONG Flags, 14997 _In_ SIZE_T Size, 14998 _In_ ULONG Tag, 14999 _In_ USHORT Depth); 15000 15001 _IRQL_requires_max_(DISPATCH_LEVEL) 15002 NTKERNELAPI 15003 VOID 15004 NTAPI 15005 ExDeleteLookasideListEx( 15006 _Inout_ PLOOKASIDE_LIST_EX Lookaside); 15007 15008 _IRQL_requires_max_(DISPATCH_LEVEL) 15009 NTKERNELAPI 15010 VOID 15011 NTAPI 15012 ExFlushLookasideListEx( 15013 _Inout_ PLOOKASIDE_LIST_EX Lookaside); 15014 15015 _Must_inspect_result_ 15016 _IRQL_requires_max_(DISPATCH_LEVEL) 15017 FORCEINLINE 15018 PVOID 15019 ExAllocateFromLookasideListEx( 15020 _Inout_ PLOOKASIDE_LIST_EX Lookaside) 15021 { 15022 PVOID Entry; 15023 15024 Lookaside->L.TotalAllocates += 1; 15025 #ifdef NONAMELESSUNION 15026 Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); 15027 if (Entry == NULL) { 15028 Lookaside->L.u2.AllocateMisses += 1; 15029 Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type, 15030 Lookaside->L.Size, 15031 Lookaside->L.Tag, 15032 Lookaside); 15033 } 15034 #else /* NONAMELESSUNION */ 15035 Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); 15036 if (Entry == NULL) { 15037 Lookaside->L.AllocateMisses += 1; 15038 Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type, 15039 Lookaside->L.Size, 15040 Lookaside->L.Tag, 15041 Lookaside); 15042 } 15043 #endif /* NONAMELESSUNION */ 15044 return Entry; 15045 } 15046 15047 _IRQL_requires_max_(DISPATCH_LEVEL) 15048 FORCEINLINE 15049 VOID 15050 ExFreeToLookasideListEx( 15051 _Inout_ PLOOKASIDE_LIST_EX Lookaside, 15052 _In_ PVOID Entry) 15053 { 15054 Lookaside->L.TotalFrees += 1; 15055 if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { 15056 Lookaside->L.FreeMisses += 1; 15057 (Lookaside->L.FreeEx)(Entry, Lookaside); 15058 } else { 15059 InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); 15060 } 15061 return; 15062 } 15063 15064 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 15065 15066 #if (NTDDI_VERSION >= NTDDI_WIN7) 15067 15068 _IRQL_requires_max_(DISPATCH_LEVEL) 15069 NTKERNELAPI 15070 VOID 15071 NTAPI 15072 ExSetResourceOwnerPointerEx( 15073 _Inout_ PERESOURCE Resource, 15074 _In_ PVOID OwnerPointer, 15075 _In_ ULONG Flags); 15076 15077 #define FLAG_OWNER_POINTER_IS_THREAD 0x1 15078 15079 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 15080 15081 _IRQL_requires_max_(DISPATCH_LEVEL) 15082 static __inline PVOID 15083 ExAllocateFromNPagedLookasideList( 15084 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside) 15085 { 15086 PVOID Entry; 15087 15088 Lookaside->L.TotalAllocates++; 15089 #ifdef NONAMELESSUNION 15090 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) 15091 Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead, 15092 &Lookaside->Lock__ObsoleteButDoNotDelete); 15093 #else 15094 Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); 15095 #endif 15096 if (Entry == NULL) { 15097 Lookaside->L.u2.AllocateMisses++; 15098 Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, 15099 Lookaside->L.Size, 15100 Lookaside->L.Tag); 15101 } 15102 #else /* NONAMELESSUNION */ 15103 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) 15104 Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, 15105 &Lookaside->Lock__ObsoleteButDoNotDelete); 15106 #else 15107 Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); 15108 #endif 15109 if (Entry == NULL) { 15110 Lookaside->L.AllocateMisses++; 15111 Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, 15112 Lookaside->L.Size, 15113 Lookaside->L.Tag); 15114 } 15115 #endif /* NONAMELESSUNION */ 15116 return Entry; 15117 } 15118 15119 _IRQL_requires_max_(DISPATCH_LEVEL) 15120 static __inline VOID 15121 ExFreeToNPagedLookasideList( 15122 _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside, 15123 _In_ PVOID Entry) 15124 { 15125 Lookaside->L.TotalFrees++; 15126 #ifdef NONAMELESSUNION 15127 if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { 15128 Lookaside->L.u3.FreeMisses++; 15129 (Lookaside->L.u5.Free)(Entry); 15130 } else { 15131 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) 15132 ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead, 15133 (PSLIST_ENTRY)Entry, 15134 &Lookaside->Lock__ObsoleteButDoNotDelete); 15135 #else 15136 InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); 15137 #endif 15138 } 15139 #else /* NONAMELESSUNION */ 15140 if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { 15141 Lookaside->L.FreeMisses++; 15142 (Lookaside->L.Free)(Entry); 15143 } else { 15144 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) 15145 ExInterlockedPushEntrySList(&Lookaside->L.ListHead, 15146 (PSLIST_ENTRY)Entry, 15147 &Lookaside->Lock__ObsoleteButDoNotDelete); 15148 #else 15149 InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); 15150 #endif 15151 } 15152 #endif /* NONAMELESSUNION */ 15153 } 15154 15155 /****************************************************************************** 15156 * Object Manager Functions * 15157 ******************************************************************************/ 15158 15159 #if (NTDDI_VERSION >= NTDDI_WIN2K) 15160 _IRQL_requires_max_(DISPATCH_LEVEL) 15161 NTKERNELAPI 15162 LONG_PTR 15163 FASTCALL 15164 ObfDereferenceObject( 15165 _In_ PVOID Object); 15166 #define ObDereferenceObject ObfDereferenceObject 15167 15168 _IRQL_requires_max_(APC_LEVEL) 15169 NTKERNELAPI 15170 NTSTATUS 15171 NTAPI 15172 ObGetObjectSecurity( 15173 _In_ PVOID Object, 15174 _Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor, 15175 _Out_ PBOOLEAN MemoryAllocated); 15176 15177 _IRQL_requires_max_(DISPATCH_LEVEL) 15178 NTKERNELAPI 15179 LONG_PTR 15180 FASTCALL 15181 ObfReferenceObject( 15182 _In_ PVOID Object); 15183 #define ObReferenceObject ObfReferenceObject 15184 15185 _IRQL_requires_max_(APC_LEVEL) 15186 NTKERNELAPI 15187 NTSTATUS 15188 NTAPI 15189 ObReferenceObjectByHandle( 15190 _In_ HANDLE Handle, 15191 _In_ ACCESS_MASK DesiredAccess, 15192 _In_opt_ POBJECT_TYPE ObjectType, 15193 _In_ KPROCESSOR_MODE AccessMode, 15194 _Out_ PVOID *Object, 15195 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation); 15196 15197 _IRQL_requires_max_(DISPATCH_LEVEL) 15198 NTKERNELAPI 15199 NTSTATUS 15200 NTAPI 15201 ObReferenceObjectByPointer( 15202 _In_ PVOID Object, 15203 _In_ ACCESS_MASK DesiredAccess, 15204 _In_opt_ POBJECT_TYPE ObjectType, 15205 _In_ KPROCESSOR_MODE AccessMode); 15206 15207 _IRQL_requires_max_(APC_LEVEL) 15208 NTKERNELAPI 15209 VOID 15210 NTAPI 15211 ObReleaseObjectSecurity( 15212 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, 15213 _In_ BOOLEAN MemoryAllocated); 15214 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 15215 15216 #if (NTDDI_VERSION >= NTDDI_VISTA) 15217 NTKERNELAPI 15218 VOID 15219 NTAPI 15220 ObDereferenceObjectDeferDelete( 15221 _In_ PVOID Object); 15222 #endif 15223 15224 #if (NTDDI_VERSION >= NTDDI_VISTASP1) 15225 NTKERNELAPI 15226 NTSTATUS 15227 NTAPI 15228 ObRegisterCallbacks( 15229 _In_ POB_CALLBACK_REGISTRATION CallbackRegistration, 15230 _Outptr_ PVOID *RegistrationHandle); 15231 15232 NTKERNELAPI 15233 VOID 15234 NTAPI 15235 ObUnRegisterCallbacks( 15236 _In_ PVOID RegistrationHandle); 15237 15238 NTKERNELAPI 15239 USHORT 15240 NTAPI 15241 ObGetFilterVersion(VOID); 15242 15243 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ 15244 15245 #if (NTDDI_VERSION >= NTDDI_WIN7) 15246 _IRQL_requires_max_(APC_LEVEL) 15247 NTKERNELAPI 15248 NTSTATUS 15249 NTAPI 15250 ObReferenceObjectByHandleWithTag( 15251 _In_ HANDLE Handle, 15252 _In_ ACCESS_MASK DesiredAccess, 15253 _In_opt_ POBJECT_TYPE ObjectType, 15254 _In_ KPROCESSOR_MODE AccessMode, 15255 _In_ ULONG Tag, 15256 _Out_ PVOID *Object, 15257 _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation); 15258 15259 _IRQL_requires_max_(DISPATCH_LEVEL) 15260 NTKERNELAPI 15261 LONG_PTR 15262 FASTCALL 15263 ObfReferenceObjectWithTag( 15264 _In_ PVOID Object, 15265 _In_ ULONG Tag); 15266 15267 _IRQL_requires_max_(DISPATCH_LEVEL) 15268 NTKERNELAPI 15269 NTSTATUS 15270 NTAPI 15271 ObReferenceObjectByPointerWithTag( 15272 _In_ PVOID Object, 15273 _In_ ACCESS_MASK DesiredAccess, 15274 _In_opt_ POBJECT_TYPE ObjectType, 15275 _In_ KPROCESSOR_MODE AccessMode, 15276 _In_ ULONG Tag); 15277 15278 _IRQL_requires_max_(DISPATCH_LEVEL) 15279 NTKERNELAPI 15280 LONG_PTR 15281 FASTCALL 15282 ObfDereferenceObjectWithTag( 15283 _In_ PVOID Object, 15284 _In_ ULONG Tag); 15285 15286 NTKERNELAPI 15287 VOID 15288 NTAPI 15289 ObDereferenceObjectDeferDeleteWithTag( 15290 _In_ PVOID Object, 15291 _In_ ULONG Tag); 15292 15293 #define ObDereferenceObject ObfDereferenceObject 15294 #define ObReferenceObject ObfReferenceObject 15295 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag 15296 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag 15297 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 15298 15299 /****************************************************************************** 15300 * Process Manager Functions * 15301 ******************************************************************************/ 15302 15303 NTKERNELAPI 15304 NTSTATUS 15305 NTAPI 15306 PsWrapApcWow64Thread( 15307 _Inout_ PVOID *ApcContext, 15308 _Inout_ PVOID *ApcRoutine); 15309 15310 /* 15311 * PEPROCESS 15312 * PsGetCurrentProcess(VOID) 15313 */ 15314 #define PsGetCurrentProcess IoGetCurrentProcess 15315 15316 #if !defined(_PSGETCURRENTTHREAD_) 15317 #define _PSGETCURRENTTHREAD_ 15318 _IRQL_requires_max_(DISPATCH_LEVEL) 15319 FORCEINLINE 15320 PETHREAD 15321 NTAPI 15322 PsGetCurrentThread(VOID) 15323 { 15324 return (PETHREAD)KeGetCurrentThread(); 15325 } 15326 #endif /* !_PSGETCURRENTTHREAD_ */ 15327 15328 15329 #if (NTDDI_VERSION >= NTDDI_WIN2K) 15330 15331 _IRQL_requires_max_(APC_LEVEL) 15332 _Post_satisfies_(return <= 0) 15333 _Must_inspect_result_ 15334 NTKERNELAPI 15335 NTSTATUS 15336 NTAPI 15337 PsCreateSystemThread( 15338 _Out_ PHANDLE ThreadHandle, 15339 _In_ ULONG DesiredAccess, 15340 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 15341 _In_opt_ HANDLE ProcessHandle, 15342 _Out_opt_ PCLIENT_ID ClientId, 15343 _In_ PKSTART_ROUTINE StartRoutine, 15344 _In_opt_ _When_(return==0, __drv_aliasesMem) PVOID StartContext); 15345 15346 _IRQL_requires_max_(PASSIVE_LEVEL) 15347 NTKERNELAPI 15348 NTSTATUS 15349 NTAPI 15350 PsTerminateSystemThread( 15351 _In_ NTSTATUS ExitStatus); 15352 15353 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 15354 15355 15356 /****************************************************************************** 15357 * WMI Library Support Functions * 15358 ******************************************************************************/ 15359 15360 #ifdef RUN_WPP 15361 #if (NTDDI_VERSION >= NTDDI_WINXP) 15362 _IRQL_requires_max_(HIGH_LEVEL) 15363 NTKERNELAPI 15364 NTSTATUS 15365 __cdecl 15366 WmiTraceMessage( 15367 _In_ TRACEHANDLE LoggerHandle, 15368 _In_ ULONG MessageFlags, 15369 _In_ LPGUID MessageGuid, 15370 _In_ USHORT MessageNumber, 15371 ...); 15372 #endif 15373 #endif /* RUN_WPP */ 15374 15375 #if (NTDDI_VERSION >= NTDDI_WINXP) 15376 15377 _IRQL_requires_max_(APC_LEVEL) 15378 NTKERNELAPI 15379 NTSTATUS 15380 NTAPI 15381 WmiQueryTraceInformation( 15382 _In_ TRACE_INFORMATION_CLASS TraceInformationClass, 15383 _Out_writes_bytes_(TraceInformationLength) PVOID TraceInformation, 15384 _In_ ULONG TraceInformationLength, 15385 _Out_opt_ PULONG RequiredLength, 15386 _In_opt_ PVOID Buffer); 15387 15388 #if 0 15389 /* FIXME: Get va_list from where? */ 15390 _IRQL_requires_max_(HIGH_LEVEL) 15391 NTKERNELAPI 15392 NTSTATUS 15393 NTAPI 15394 WmiTraceMessageVa( 15395 _In_ TRACEHANDLE LoggerHandle, 15396 _In_ ULONG MessageFlags, 15397 _In_ LPGUID MessageGuid, 15398 _In_ USHORT MessageNumber, 15399 _In_ va_list MessageArgList); 15400 #endif 15401 15402 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 15403 15404 #ifndef TRACE_INFORMATION_CLASS_DEFINE 15405 15406 #if (NTDDI_VERSION >= NTDDI_WINXP) 15407 _IRQL_requires_max_(APC_LEVEL) 15408 NTKERNELAPI 15409 NTSTATUS 15410 NTAPI 15411 WmiQueryTraceInformation( 15412 _In_ TRACE_INFORMATION_CLASS TraceInformationClass, 15413 _Out_writes_bytes_(TraceInformationLength) PVOID TraceInformation, 15414 _In_ ULONG TraceInformationLength, 15415 _Out_opt_ PULONG RequiredLength, 15416 _In_opt_ PVOID Buffer); 15417 #endif 15418 15419 #define TRACE_INFORMATION_CLASS_DEFINE 15420 15421 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */ 15422 15423 #if (NTDDI_VERSION >= NTDDI_VISTA) 15424 15425 _IRQL_requires_max_(PASSIVE_LEVEL) 15426 NTSTATUS 15427 NTKERNELAPI 15428 NTAPI 15429 EtwRegister( 15430 _In_ LPCGUID ProviderId, 15431 _In_opt_ PETWENABLECALLBACK EnableCallback, 15432 _In_opt_ PVOID CallbackContext, 15433 _Out_ PREGHANDLE RegHandle); 15434 15435 _IRQL_requires_max_(PASSIVE_LEVEL) 15436 NTSTATUS 15437 NTKERNELAPI 15438 NTAPI 15439 EtwUnregister( 15440 _In_ REGHANDLE RegHandle); 15441 15442 _IRQL_requires_max_(HIGH_LEVEL) 15443 BOOLEAN 15444 NTKERNELAPI 15445 NTAPI 15446 EtwEventEnabled( 15447 _In_ REGHANDLE RegHandle, 15448 _In_ PCEVENT_DESCRIPTOR EventDescriptor); 15449 15450 _IRQL_requires_max_(HIGH_LEVEL) 15451 BOOLEAN 15452 NTKERNELAPI 15453 NTAPI 15454 EtwProviderEnabled( 15455 _In_ REGHANDLE RegHandle, 15456 _In_ UCHAR Level, 15457 _In_ ULONGLONG Keyword); 15458 15459 _When_(ControlCode==EVENT_ACTIVITY_CTRL_CREATE_ID, _IRQL_requires_max_(HIGH_LEVEL)) 15460 _When_(ControlCode!=EVENT_ACTIVITY_CTRL_CREATE_ID, _IRQL_requires_max_(APC_LEVEL)) 15461 NTSTATUS 15462 NTKERNELAPI 15463 NTAPI 15464 EtwActivityIdControl( 15465 _In_ ULONG ControlCode, 15466 _Inout_updates_bytes_(sizeof(GUID)) LPGUID ActivityId); 15467 15468 _IRQL_requires_max_(HIGH_LEVEL) 15469 NTSTATUS 15470 NTKERNELAPI 15471 NTAPI 15472 EtwWrite( 15473 _In_ REGHANDLE RegHandle, 15474 _In_ PCEVENT_DESCRIPTOR EventDescriptor, 15475 _In_opt_ LPCGUID ActivityId, 15476 _In_ ULONG UserDataCount, 15477 _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); 15478 15479 _IRQL_requires_max_(HIGH_LEVEL) 15480 NTSTATUS 15481 NTKERNELAPI 15482 NTAPI 15483 EtwWriteTransfer( 15484 _In_ REGHANDLE RegHandle, 15485 _In_ PCEVENT_DESCRIPTOR EventDescriptor, 15486 _In_opt_ LPCGUID ActivityId, 15487 _In_opt_ LPCGUID RelatedActivityId, 15488 _In_ ULONG UserDataCount, 15489 _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); 15490 15491 _IRQL_requires_max_(HIGH_LEVEL) 15492 NTSTATUS 15493 NTKERNELAPI 15494 NTAPI 15495 EtwWriteString( 15496 _In_ REGHANDLE RegHandle, 15497 _In_ UCHAR Level, 15498 _In_ ULONGLONG Keyword, 15499 _In_opt_ LPCGUID ActivityId, 15500 _In_ PCWSTR String); 15501 15502 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 15503 15504 #if (NTDDI_VERSION >= NTDDI_WIN7) 15505 _IRQL_requires_max_(HIGH_LEVEL) 15506 NTSTATUS 15507 NTKERNELAPI 15508 NTAPI 15509 EtwWriteEx( 15510 _In_ REGHANDLE RegHandle, 15511 _In_ PCEVENT_DESCRIPTOR EventDescriptor, 15512 _In_ ULONG64 Filter, 15513 _In_ ULONG Flags, 15514 _In_opt_ LPCGUID ActivityId, 15515 _In_opt_ LPCGUID RelatedActivityId, 15516 _In_ ULONG UserDataCount, 15517 _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); 15518 #endif 15519 15520 15521 15522 /****************************************************************************** 15523 * Kernel Debugger Functions * 15524 ******************************************************************************/ 15525 15526 #ifndef _DBGNT_ 15527 15528 ULONG 15529 __cdecl 15530 DbgPrint( 15531 _In_z_ _Printf_format_string_ PCSTR Format, 15532 ...); 15533 15534 #if (NTDDI_VERSION >= NTDDI_WIN2K) 15535 NTSYSAPI 15536 ULONG 15537 __cdecl 15538 DbgPrintReturnControlC( 15539 _In_z_ _Printf_format_string_ PCCH Format, 15540 ...); 15541 #endif 15542 15543 #if (NTDDI_VERSION >= NTDDI_WINXP) 15544 15545 NTSYSAPI 15546 ULONG 15547 __cdecl 15548 DbgPrintEx( 15549 _In_ ULONG ComponentId, 15550 _In_ ULONG Level, 15551 _In_z_ _Printf_format_string_ PCSTR Format, 15552 ...); 15553 15554 #ifdef _VA_LIST_DEFINED 15555 15556 NTSYSAPI 15557 ULONG 15558 NTAPI 15559 vDbgPrintEx( 15560 _In_ ULONG ComponentId, 15561 _In_ ULONG Level, 15562 _In_z_ PCCH Format, 15563 _In_ va_list ap); 15564 15565 NTSYSAPI 15566 ULONG 15567 NTAPI 15568 vDbgPrintExWithPrefix( 15569 _In_z_ PCCH Prefix, 15570 _In_ ULONG ComponentId, 15571 _In_ ULONG Level, 15572 _In_z_ PCCH Format, 15573 _In_ va_list ap); 15574 15575 #endif /* _VA_LIST_DEFINED */ 15576 15577 NTSYSAPI 15578 NTSTATUS 15579 NTAPI 15580 DbgQueryDebugFilterState( 15581 _In_ ULONG ComponentId, 15582 _In_ ULONG Level); 15583 15584 NTSYSAPI 15585 NTSTATUS 15586 NTAPI 15587 DbgSetDebugFilterState( 15588 _In_ ULONG ComponentId, 15589 _In_ ULONG Level, 15590 _In_ BOOLEAN State); 15591 15592 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 15593 15594 #if (NTDDI_VERSION >= NTDDI_VISTA) 15595 15596 typedef VOID 15597 (*PDEBUG_PRINT_CALLBACK)( 15598 _In_ PSTRING Output, 15599 _In_ ULONG ComponentId, 15600 _In_ ULONG Level); 15601 15602 NTSYSAPI 15603 NTSTATUS 15604 NTAPI 15605 DbgSetDebugPrintCallback( 15606 _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback, 15607 _In_ BOOLEAN Enable); 15608 15609 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 15610 15611 #endif /* _DBGNT_ */ 15612 15613 #if DBG 15614 15615 #define KdPrint(_x_) DbgPrint _x_ 15616 #define KdPrintEx(_x_) DbgPrintEx _x_ 15617 #define vKdPrintEx(_x_) vDbgPrintEx _x_ 15618 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_ 15619 #define KdBreakPoint() DbgBreakPoint() 15620 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) 15621 15622 #else /* !DBG */ 15623 15624 #define KdPrint(_x_) 15625 #define KdPrintEx(_x_) 15626 #define vKdPrintEx(_x_) 15627 #define vKdPrintExWithPrefix(_x_) 15628 #define KdBreakPoint() 15629 #define KdBreakPointWithStatus(s) 15630 15631 #endif /* !DBG */ 15632 15633 #if defined(__GNUC__) 15634 15635 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; 15636 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; 15637 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled 15638 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent 15639 15640 #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) 15641 15642 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; 15643 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; 15644 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled 15645 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent 15646 15647 #else 15648 15649 extern BOOLEAN KdDebuggerNotPresent; 15650 extern BOOLEAN KdDebuggerEnabled; 15651 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled 15652 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent 15653 15654 #endif 15655 15656 #if (NTDDI_VERSION >= NTDDI_WIN2K) 15657 15658 NTKERNELAPI 15659 NTSTATUS 15660 NTAPI 15661 KdDisableDebugger(VOID); 15662 15663 NTKERNELAPI 15664 NTSTATUS 15665 NTAPI 15666 KdEnableDebugger(VOID); 15667 15668 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK) 15669 #define DbgBreakPoint __debugbreak 15670 #else 15671 __analysis_noreturn 15672 VOID 15673 NTAPI 15674 DbgBreakPoint(VOID); 15675 #endif 15676 15677 __analysis_noreturn 15678 NTSYSAPI 15679 VOID 15680 NTAPI 15681 DbgBreakPointWithStatus( 15682 IN ULONG Status); 15683 15684 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 15685 15686 #if (NTDDI_VERSION >= NTDDI_WS03) 15687 NTKERNELAPI 15688 BOOLEAN 15689 NTAPI 15690 KdRefreshDebuggerNotPresent(VOID); 15691 #endif 15692 15693 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 15694 NTKERNELAPI 15695 NTSTATUS 15696 NTAPI 15697 KdChangeOption( 15698 _In_ KD_OPTION Option, 15699 _In_opt_ ULONG InBufferBytes, 15700 _In_ PVOID InBuffer, 15701 _In_opt_ ULONG OutBufferBytes, 15702 _Out_ PVOID OutBuffer, 15703 _Out_opt_ PULONG OutBufferNeeded); 15704 #endif 15705 /* Hardware Abstraction Layer Functions */ 15706 15707 #if (NTDDI_VERSION >= NTDDI_WIN2K) 15708 15709 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) 15710 15711 __drv_preferredFunction("AllocateCommonBuffer","Obsolete") 15712 FORCEINLINE 15713 PVOID 15714 NTAPI 15715 HalAllocateCommonBuffer( 15716 _In_ PDMA_ADAPTER DmaAdapter, 15717 _In_ ULONG Length, 15718 _Out_ PPHYSICAL_ADDRESS LogicalAddress, 15719 _In_ BOOLEAN CacheEnabled) 15720 { 15721 PALLOCATE_COMMON_BUFFER allocateCommonBuffer; 15722 PVOID commonBuffer; 15723 15724 allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer; 15725 ASSERT( allocateCommonBuffer != NULL ); 15726 commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled ); 15727 return commonBuffer; 15728 } 15729 15730 __drv_preferredFunction("FreeCommonBuffer","Obsolete") 15731 FORCEINLINE 15732 VOID 15733 NTAPI 15734 HalFreeCommonBuffer( 15735 _In_ PDMA_ADAPTER DmaAdapter, 15736 _In_ ULONG Length, 15737 _In_ PHYSICAL_ADDRESS LogicalAddress, 15738 _In_ PVOID VirtualAddress, 15739 _In_ BOOLEAN CacheEnabled) 15740 { 15741 PFREE_COMMON_BUFFER freeCommonBuffer; 15742 15743 freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer; 15744 ASSERT( freeCommonBuffer != NULL ); 15745 freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled ); 15746 } 15747 15748 __drv_preferredFunction("ReadDmaCounter","Obsolete") 15749 FORCEINLINE 15750 ULONG 15751 NTAPI 15752 HalReadDmaCounter( 15753 _In_ PDMA_ADAPTER DmaAdapter) 15754 { 15755 PREAD_DMA_COUNTER readDmaCounter; 15756 ULONG counter; 15757 15758 readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter; 15759 ASSERT( readDmaCounter != NULL ); 15760 counter = readDmaCounter( DmaAdapter ); 15761 return counter; 15762 } 15763 15764 FORCEINLINE 15765 ULONG 15766 HalGetDmaAlignment( 15767 _In_ PDMA_ADAPTER DmaAdapter) 15768 { 15769 PGET_DMA_ALIGNMENT getDmaAlignment; 15770 ULONG alignment; 15771 15772 getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment; 15773 ASSERT( getDmaAlignment != NULL ); 15774 alignment = getDmaAlignment( DmaAdapter ); 15775 return alignment; 15776 } 15777 15778 #endif /* USE_DMA_MACROS ... */ 15779 15780 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 15781 15782 #ifndef _NTTMAPI_ 15783 #define _NTTMAPI_ 15784 15785 #include <ktmtypes.h> 15786 15787 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001) 15788 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002) 15789 #define TRANSACTIONMANAGER_RECOVER (0x0004) 15790 #define TRANSACTIONMANAGER_RENAME (0x0008) 15791 #define TRANSACTIONMANAGER_CREATE_RM (0x0010) 15792 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020) 15793 15794 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ 15795 TRANSACTIONMANAGER_QUERY_INFORMATION) 15796 15797 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ 15798 TRANSACTIONMANAGER_SET_INFORMATION |\ 15799 TRANSACTIONMANAGER_RECOVER |\ 15800 TRANSACTIONMANAGER_RENAME |\ 15801 TRANSACTIONMANAGER_CREATE_RM) 15802 15803 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE) 15804 15805 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ 15806 TRANSACTIONMANAGER_GENERIC_READ |\ 15807 TRANSACTIONMANAGER_GENERIC_WRITE |\ 15808 TRANSACTIONMANAGER_GENERIC_EXECUTE |\ 15809 TRANSACTIONMANAGER_BIND_TRANSACTION) 15810 15811 #define TRANSACTION_QUERY_INFORMATION (0x0001) 15812 #define TRANSACTION_SET_INFORMATION (0x0002) 15813 #define TRANSACTION_ENLIST (0x0004) 15814 #define TRANSACTION_COMMIT (0x0008) 15815 #define TRANSACTION_ROLLBACK (0x0010) 15816 #define TRANSACTION_PROPAGATE (0x0020) 15817 #define TRANSACTION_RIGHT_RESERVED1 (0x0040) 15818 15819 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\ 15820 TRANSACTION_QUERY_INFORMATION |\ 15821 SYNCHRONIZE) 15822 15823 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ 15824 TRANSACTION_SET_INFORMATION |\ 15825 TRANSACTION_COMMIT |\ 15826 TRANSACTION_ENLIST |\ 15827 TRANSACTION_ROLLBACK |\ 15828 TRANSACTION_PROPAGATE |\ 15829 SYNCHRONIZE) 15830 15831 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ 15832 TRANSACTION_COMMIT |\ 15833 TRANSACTION_ROLLBACK |\ 15834 SYNCHRONIZE) 15835 15836 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ 15837 TRANSACTION_GENERIC_READ |\ 15838 TRANSACTION_GENERIC_WRITE |\ 15839 TRANSACTION_GENERIC_EXECUTE) 15840 15841 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\ 15842 STANDARD_RIGHTS_WRITE |\ 15843 TRANSACTION_SET_INFORMATION |\ 15844 TRANSACTION_ENLIST |\ 15845 TRANSACTION_ROLLBACK |\ 15846 TRANSACTION_PROPAGATE |\ 15847 SYNCHRONIZE) 15848 15849 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001) 15850 #define RESOURCEMANAGER_SET_INFORMATION (0x0002) 15851 #define RESOURCEMANAGER_RECOVER (0x0004) 15852 #define RESOURCEMANAGER_ENLIST (0x0008) 15853 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010) 15854 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020) 15855 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040) 15856 15857 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ 15858 RESOURCEMANAGER_QUERY_INFORMATION |\ 15859 SYNCHRONIZE) 15860 15861 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ 15862 RESOURCEMANAGER_SET_INFORMATION |\ 15863 RESOURCEMANAGER_RECOVER |\ 15864 RESOURCEMANAGER_ENLIST |\ 15865 RESOURCEMANAGER_GET_NOTIFICATION |\ 15866 RESOURCEMANAGER_REGISTER_PROTOCOL |\ 15867 RESOURCEMANAGER_COMPLETE_PROPAGATION |\ 15868 SYNCHRONIZE) 15869 15870 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ 15871 RESOURCEMANAGER_RECOVER |\ 15872 RESOURCEMANAGER_ENLIST |\ 15873 RESOURCEMANAGER_GET_NOTIFICATION |\ 15874 RESOURCEMANAGER_COMPLETE_PROPAGATION |\ 15875 SYNCHRONIZE) 15876 15877 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ 15878 RESOURCEMANAGER_GENERIC_READ |\ 15879 RESOURCEMANAGER_GENERIC_WRITE |\ 15880 RESOURCEMANAGER_GENERIC_EXECUTE) 15881 15882 #define ENLISTMENT_QUERY_INFORMATION (0x0001) 15883 #define ENLISTMENT_SET_INFORMATION (0x0002) 15884 #define ENLISTMENT_RECOVER (0x0004) 15885 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008) 15886 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010) 15887 15888 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\ 15889 ENLISTMENT_QUERY_INFORMATION) 15890 15891 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ 15892 ENLISTMENT_SET_INFORMATION |\ 15893 ENLISTMENT_RECOVER |\ 15894 ENLISTMENT_SUBORDINATE_RIGHTS |\ 15895 ENLISTMENT_SUPERIOR_RIGHTS) 15896 15897 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ 15898 ENLISTMENT_RECOVER |\ 15899 ENLISTMENT_SUBORDINATE_RIGHTS |\ 15900 ENLISTMENT_SUPERIOR_RIGHTS) 15901 15902 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ 15903 ENLISTMENT_GENERIC_READ |\ 15904 ENLISTMENT_GENERIC_WRITE |\ 15905 ENLISTMENT_GENERIC_EXECUTE) 15906 15907 typedef enum _TRANSACTION_OUTCOME { 15908 TransactionOutcomeUndetermined = 1, 15909 TransactionOutcomeCommitted, 15910 TransactionOutcomeAborted, 15911 } TRANSACTION_OUTCOME; 15912 15913 15914 typedef enum _TRANSACTION_STATE { 15915 TransactionStateNormal = 1, 15916 TransactionStateIndoubt, 15917 TransactionStateCommittedNotify, 15918 } TRANSACTION_STATE; 15919 15920 15921 typedef struct _TRANSACTION_BASIC_INFORMATION { 15922 GUID TransactionId; 15923 ULONG State; 15924 ULONG Outcome; 15925 } TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION; 15926 15927 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION { 15928 GUID TmIdentity; 15929 LARGE_INTEGER VirtualClock; 15930 } TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION; 15931 15932 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { 15933 GUID LogIdentity; 15934 } TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION; 15935 15936 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { 15937 ULONG LogPathLength; 15938 _Field_size_(LogPathLength) WCHAR LogPath[1]; 15939 } TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION; 15940 15941 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { 15942 ULONGLONG LastRecoveredLsn; 15943 } TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION; 15944 15945 typedef struct _TRANSACTION_PROPERTIES_INFORMATION { 15946 ULONG IsolationLevel; 15947 ULONG IsolationFlags; 15948 LARGE_INTEGER Timeout; 15949 ULONG Outcome; 15950 ULONG DescriptionLength; 15951 WCHAR Description[1]; 15952 } TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION; 15953 15954 typedef struct _TRANSACTION_BIND_INFORMATION { 15955 HANDLE TmHandle; 15956 } TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION; 15957 15958 typedef struct _TRANSACTION_ENLISTMENT_PAIR { 15959 GUID EnlistmentId; 15960 GUID ResourceManagerId; 15961 } TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR; 15962 15963 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION { 15964 ULONG NumberOfEnlistments; 15965 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1]; 15966 } TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION; 15967 15968 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION { 15969 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair; 15970 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION; 15971 15972 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION { 15973 GUID ResourceManagerId; 15974 ULONG DescriptionLength; 15975 WCHAR Description[1]; 15976 } RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION; 15977 15978 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION { 15979 HANDLE IoCompletionPortHandle; 15980 ULONG_PTR CompletionKey; 15981 } RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION; 15982 15983 typedef enum _KTMOBJECT_TYPE { 15984 KTMOBJECT_TRANSACTION, 15985 KTMOBJECT_TRANSACTION_MANAGER, 15986 KTMOBJECT_RESOURCE_MANAGER, 15987 KTMOBJECT_ENLISTMENT, 15988 KTMOBJECT_INVALID 15989 } KTMOBJECT_TYPE, *PKTMOBJECT_TYPE; 15990 15991 typedef struct _KTMOBJECT_CURSOR { 15992 GUID LastQuery; 15993 ULONG ObjectIdCount; 15994 GUID ObjectIds[1]; 15995 } KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR; 15996 15997 typedef enum _TRANSACTION_INFORMATION_CLASS { 15998 TransactionBasicInformation, 15999 TransactionPropertiesInformation, 16000 TransactionEnlistmentInformation, 16001 TransactionSuperiorEnlistmentInformation 16002 } TRANSACTION_INFORMATION_CLASS; 16003 16004 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS { 16005 TransactionManagerBasicInformation, 16006 TransactionManagerLogInformation, 16007 TransactionManagerLogPathInformation, 16008 TransactionManagerRecoveryInformation = 4 16009 } TRANSACTIONMANAGER_INFORMATION_CLASS; 16010 16011 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS { 16012 ResourceManagerBasicInformation, 16013 ResourceManagerCompletionInformation, 16014 } RESOURCEMANAGER_INFORMATION_CLASS; 16015 16016 typedef struct _ENLISTMENT_BASIC_INFORMATION { 16017 GUID EnlistmentId; 16018 GUID TransactionId; 16019 GUID ResourceManagerId; 16020 } ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION; 16021 16022 typedef struct _ENLISTMENT_CRM_INFORMATION { 16023 GUID CrmTransactionManagerId; 16024 GUID CrmResourceManagerId; 16025 GUID CrmEnlistmentId; 16026 } ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION; 16027 16028 typedef enum _ENLISTMENT_INFORMATION_CLASS { 16029 EnlistmentBasicInformation, 16030 EnlistmentRecoveryInformation, 16031 EnlistmentCrmInformation 16032 } ENLISTMENT_INFORMATION_CLASS; 16033 16034 typedef struct _TRANSACTION_LIST_ENTRY { 16035 #if defined(__cplusplus) 16036 ::UOW UOW; 16037 #else 16038 UOW UOW; 16039 #endif 16040 } TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY; 16041 16042 typedef struct _TRANSACTION_LIST_INFORMATION { 16043 ULONG NumberOfTransactions; 16044 TRANSACTION_LIST_ENTRY TransactionInformation[1]; 16045 } TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION; 16046 16047 typedef NTSTATUS 16048 (NTAPI *PFN_NT_CREATE_TRANSACTION)( 16049 _Out_ PHANDLE TransactionHandle, 16050 _In_ ACCESS_MASK DesiredAccess, 16051 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16052 _In_opt_ LPGUID Uow, 16053 _In_opt_ HANDLE TmHandle, 16054 _In_opt_ ULONG CreateOptions, 16055 _In_opt_ ULONG IsolationLevel, 16056 _In_opt_ ULONG IsolationFlags, 16057 _In_opt_ PLARGE_INTEGER Timeout, 16058 _In_opt_ PUNICODE_STRING Description); 16059 16060 typedef NTSTATUS 16061 (NTAPI *PFN_NT_OPEN_TRANSACTION)( 16062 _Out_ PHANDLE TransactionHandle, 16063 _In_ ACCESS_MASK DesiredAccess, 16064 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16065 _In_opt_ LPGUID Uow, 16066 _In_opt_ HANDLE TmHandle); 16067 16068 typedef NTSTATUS 16069 (NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)( 16070 _In_ HANDLE TransactionHandle, 16071 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 16072 _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, 16073 _In_ ULONG TransactionInformationLength, 16074 _Out_opt_ PULONG ReturnLength); 16075 16076 typedef NTSTATUS 16077 (NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)( 16078 _In_ HANDLE TransactionHandle, 16079 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 16080 _In_ PVOID TransactionInformation, 16081 _In_ ULONG TransactionInformationLength); 16082 16083 typedef NTSTATUS 16084 (NTAPI *PFN_NT_COMMIT_TRANSACTION)( 16085 _In_ HANDLE TransactionHandle, 16086 _In_ BOOLEAN Wait); 16087 16088 typedef NTSTATUS 16089 (NTAPI *PFN_NT_ROLLBACK_TRANSACTION)( 16090 _In_ HANDLE TransactionHandle, 16091 _In_ BOOLEAN Wait); 16092 16093 #if (NTDDI_VERSION >= NTDDI_VISTA) 16094 16095 _Must_inspect_result_ 16096 _IRQL_requires_max_ (APC_LEVEL) 16097 __kernel_entry 16098 NTSYSCALLAPI 16099 NTSTATUS 16100 NTAPI 16101 NtCreateTransactionManager( 16102 _Out_ PHANDLE TmHandle, 16103 _In_ ACCESS_MASK DesiredAccess, 16104 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16105 _In_opt_ PUNICODE_STRING LogFileName, 16106 _In_opt_ ULONG CreateOptions, 16107 _In_opt_ ULONG CommitStrength); 16108 16109 _Must_inspect_result_ 16110 _IRQL_requires_max_ (APC_LEVEL) 16111 __kernel_entry 16112 NTSYSCALLAPI 16113 NTSTATUS 16114 NTAPI 16115 NtOpenTransactionManager( 16116 _Out_ PHANDLE TmHandle, 16117 _In_ ACCESS_MASK DesiredAccess, 16118 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16119 _In_opt_ PUNICODE_STRING LogFileName, 16120 _In_opt_ LPGUID TmIdentity, 16121 _In_opt_ ULONG OpenOptions); 16122 16123 _Must_inspect_result_ 16124 _IRQL_requires_max_ (APC_LEVEL) 16125 __kernel_entry 16126 NTSYSCALLAPI 16127 NTSTATUS 16128 NTAPI 16129 NtRenameTransactionManager( 16130 _In_ PUNICODE_STRING LogFileName, 16131 _In_ LPGUID ExistingTransactionManagerGuid); 16132 16133 _Must_inspect_result_ 16134 _IRQL_requires_max_ (APC_LEVEL) 16135 __kernel_entry 16136 NTSYSCALLAPI 16137 NTSTATUS 16138 NTAPI 16139 NtRollforwardTransactionManager( 16140 _In_ HANDLE TransactionManagerHandle, 16141 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16142 16143 _Must_inspect_result_ 16144 _IRQL_requires_max_ (APC_LEVEL) 16145 __kernel_entry 16146 NTSYSCALLAPI 16147 NTSTATUS 16148 NTAPI 16149 NtRecoverTransactionManager( 16150 _In_ HANDLE TransactionManagerHandle); 16151 16152 _Must_inspect_result_ 16153 _IRQL_requires_max_ (APC_LEVEL) 16154 __kernel_entry 16155 NTSYSCALLAPI 16156 NTSTATUS 16157 NTAPI 16158 NtQueryInformationTransactionManager( 16159 _In_ HANDLE TransactionManagerHandle, 16160 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, 16161 _Out_writes_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, 16162 _In_ ULONG TransactionManagerInformationLength, 16163 _Out_ PULONG ReturnLength); 16164 16165 _Must_inspect_result_ 16166 _IRQL_requires_max_ (APC_LEVEL) 16167 __kernel_entry 16168 NTSYSCALLAPI 16169 NTSTATUS 16170 NTAPI 16171 NtSetInformationTransactionManager( 16172 _In_opt_ HANDLE TmHandle, 16173 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, 16174 _In_reads_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, 16175 _In_ ULONG TransactionManagerInformationLength); 16176 16177 _Must_inspect_result_ 16178 _IRQL_requires_max_ (APC_LEVEL) 16179 __kernel_entry 16180 NTSYSCALLAPI 16181 NTSTATUS 16182 NTAPI 16183 NtEnumerateTransactionObject( 16184 _In_opt_ HANDLE RootObjectHandle, 16185 _In_ KTMOBJECT_TYPE QueryType, 16186 _Inout_updates_bytes_(ObjectCursorLength) PKTMOBJECT_CURSOR ObjectCursor, 16187 _In_ ULONG ObjectCursorLength, 16188 _Out_ PULONG ReturnLength); 16189 16190 _Must_inspect_result_ 16191 _IRQL_requires_max_ (APC_LEVEL) 16192 __kernel_entry 16193 NTSYSCALLAPI 16194 NTSTATUS 16195 NTAPI 16196 NtCreateTransaction( 16197 _Out_ PHANDLE TransactionHandle, 16198 _In_ ACCESS_MASK DesiredAccess, 16199 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16200 _In_opt_ LPGUID Uow, 16201 _In_opt_ HANDLE TmHandle, 16202 _In_opt_ ULONG CreateOptions, 16203 _In_opt_ ULONG IsolationLevel, 16204 _In_opt_ ULONG IsolationFlags, 16205 _In_opt_ PLARGE_INTEGER Timeout, 16206 _In_opt_ PUNICODE_STRING Description); 16207 16208 _Must_inspect_result_ 16209 _IRQL_requires_max_ (APC_LEVEL) 16210 __kernel_entry 16211 NTSYSCALLAPI 16212 NTSTATUS 16213 NTAPI 16214 NtOpenTransaction( 16215 _Out_ PHANDLE TransactionHandle, 16216 _In_ ACCESS_MASK DesiredAccess, 16217 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16218 _In_ LPGUID Uow, 16219 _In_opt_ HANDLE TmHandle); 16220 16221 _Must_inspect_result_ 16222 _IRQL_requires_max_ (APC_LEVEL) 16223 __kernel_entry 16224 NTSYSCALLAPI 16225 NTSTATUS 16226 NTAPI 16227 NtQueryInformationTransaction( 16228 _In_ HANDLE TransactionHandle, 16229 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 16230 _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, 16231 _In_ ULONG TransactionInformationLength, 16232 _Out_opt_ PULONG ReturnLength); 16233 16234 _Must_inspect_result_ 16235 _IRQL_requires_max_ (APC_LEVEL) 16236 __kernel_entry 16237 NTSYSCALLAPI 16238 NTSTATUS 16239 NTAPI 16240 NtSetInformationTransaction( 16241 _In_ HANDLE TransactionHandle, 16242 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 16243 _In_reads_bytes_(TransactionInformationLength) PVOID TransactionInformation, 16244 _In_ ULONG TransactionInformationLength); 16245 16246 _IRQL_requires_max_ (APC_LEVEL) 16247 __kernel_entry 16248 NTSYSCALLAPI 16249 NTSTATUS 16250 NTAPI 16251 NtCommitTransaction( 16252 _In_ HANDLE TransactionHandle, 16253 _In_ BOOLEAN Wait); 16254 16255 _IRQL_requires_max_ (APC_LEVEL) 16256 __kernel_entry 16257 NTSYSCALLAPI 16258 NTSTATUS 16259 NTAPI 16260 NtRollbackTransaction( 16261 _In_ HANDLE TransactionHandle, 16262 _In_ BOOLEAN Wait); 16263 16264 _Must_inspect_result_ 16265 _IRQL_requires_max_ (APC_LEVEL) 16266 __kernel_entry 16267 NTSYSCALLAPI 16268 NTSTATUS 16269 NTAPI 16270 NtCreateEnlistment( 16271 _Out_ PHANDLE EnlistmentHandle, 16272 _In_ ACCESS_MASK DesiredAccess, 16273 _In_ HANDLE ResourceManagerHandle, 16274 _In_ HANDLE TransactionHandle, 16275 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16276 _In_opt_ ULONG CreateOptions, 16277 _In_ NOTIFICATION_MASK NotificationMask, 16278 _In_opt_ PVOID EnlistmentKey); 16279 16280 _Must_inspect_result_ 16281 _IRQL_requires_max_ (APC_LEVEL) 16282 __kernel_entry 16283 NTSYSCALLAPI 16284 NTSTATUS 16285 NTAPI 16286 NtOpenEnlistment( 16287 _Out_ PHANDLE EnlistmentHandle, 16288 _In_ ACCESS_MASK DesiredAccess, 16289 _In_ HANDLE ResourceManagerHandle, 16290 _In_ LPGUID EnlistmentGuid, 16291 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); 16292 16293 _Must_inspect_result_ 16294 _IRQL_requires_max_ (APC_LEVEL) 16295 __kernel_entry 16296 NTSYSCALLAPI 16297 NTSTATUS 16298 NTAPI 16299 NtQueryInformationEnlistment( 16300 _In_ HANDLE EnlistmentHandle, 16301 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, 16302 _Out_writes_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, 16303 _In_ ULONG EnlistmentInformationLength, 16304 _Out_ PULONG ReturnLength); 16305 16306 _Must_inspect_result_ 16307 _IRQL_requires_max_ (APC_LEVEL) 16308 __kernel_entry 16309 NTSYSCALLAPI 16310 NTSTATUS 16311 NTAPI 16312 NtSetInformationEnlistment( 16313 _In_opt_ HANDLE EnlistmentHandle, 16314 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, 16315 _In_reads_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, 16316 _In_ ULONG EnlistmentInformationLength); 16317 16318 _Must_inspect_result_ 16319 _IRQL_requires_max_ (APC_LEVEL) 16320 __kernel_entry 16321 NTSYSCALLAPI 16322 NTSTATUS 16323 NTAPI 16324 NtRecoverEnlistment( 16325 _In_ HANDLE EnlistmentHandle, 16326 _In_opt_ PVOID EnlistmentKey); 16327 16328 _Must_inspect_result_ 16329 _IRQL_requires_max_ (APC_LEVEL) 16330 __kernel_entry 16331 NTSYSCALLAPI 16332 NTSTATUS 16333 NTAPI 16334 NtPrePrepareEnlistment( 16335 _In_ HANDLE EnlistmentHandle, 16336 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16337 16338 _Must_inspect_result_ 16339 _IRQL_requires_max_ (APC_LEVEL) 16340 __kernel_entry 16341 NTSYSCALLAPI 16342 NTSTATUS 16343 NTAPI 16344 NtPrepareEnlistment( 16345 _In_ HANDLE EnlistmentHandle, 16346 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16347 16348 _Must_inspect_result_ 16349 _IRQL_requires_max_ (APC_LEVEL) 16350 __kernel_entry 16351 NTSYSCALLAPI 16352 NTSTATUS 16353 NTAPI 16354 NtCommitEnlistment( 16355 _In_ HANDLE EnlistmentHandle, 16356 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16357 16358 _IRQL_requires_max_ (APC_LEVEL) 16359 __kernel_entry 16360 NTSYSCALLAPI 16361 NTSTATUS 16362 NTAPI 16363 NtRollbackEnlistment( 16364 _In_ HANDLE EnlistmentHandle, 16365 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16366 16367 _IRQL_requires_max_ (APC_LEVEL) 16368 __kernel_entry 16369 NTSYSCALLAPI 16370 NTSTATUS 16371 NTAPI 16372 NtPrePrepareComplete( 16373 _In_ HANDLE EnlistmentHandle, 16374 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16375 16376 _IRQL_requires_max_ (APC_LEVEL) 16377 __kernel_entry 16378 NTSYSCALLAPI 16379 NTSTATUS 16380 NTAPI 16381 NtPrepareComplete( 16382 _In_ HANDLE EnlistmentHandle, 16383 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16384 16385 _IRQL_requires_max_ (APC_LEVEL) 16386 __kernel_entry 16387 NTSYSCALLAPI 16388 NTSTATUS 16389 NTAPI 16390 NtCommitComplete( 16391 _In_ HANDLE EnlistmentHandle, 16392 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16393 16394 _IRQL_requires_max_ (APC_LEVEL) 16395 __kernel_entry 16396 NTSYSCALLAPI 16397 NTSTATUS 16398 NTAPI 16399 NtReadOnlyEnlistment( 16400 _In_ HANDLE EnlistmentHandle, 16401 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16402 16403 _IRQL_requires_max_ (APC_LEVEL) 16404 __kernel_entry 16405 NTSYSCALLAPI 16406 NTSTATUS 16407 NTAPI 16408 NtRollbackComplete( 16409 _In_ HANDLE EnlistmentHandle, 16410 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16411 16412 _IRQL_requires_max_ (APC_LEVEL) 16413 __kernel_entry 16414 NTSYSCALLAPI 16415 NTSTATUS 16416 NTAPI 16417 NtSinglePhaseReject( 16418 _In_ HANDLE EnlistmentHandle, 16419 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16420 16421 _Must_inspect_result_ 16422 _IRQL_requires_max_ (APC_LEVEL) 16423 __kernel_entry 16424 NTSYSCALLAPI 16425 NTSTATUS 16426 NTAPI 16427 NtCreateResourceManager( 16428 _Out_ PHANDLE ResourceManagerHandle, 16429 _In_ ACCESS_MASK DesiredAccess, 16430 _In_ HANDLE TmHandle, 16431 _In_ LPGUID RmGuid, 16432 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16433 _In_opt_ ULONG CreateOptions, 16434 _In_opt_ PUNICODE_STRING Description); 16435 16436 _Must_inspect_result_ 16437 _IRQL_requires_max_ (APC_LEVEL) 16438 __kernel_entry 16439 NTSYSCALLAPI 16440 NTSTATUS 16441 NTAPI 16442 NtOpenResourceManager( 16443 _Out_ PHANDLE ResourceManagerHandle, 16444 _In_ ACCESS_MASK DesiredAccess, 16445 _In_ HANDLE TmHandle, 16446 _In_opt_ LPGUID ResourceManagerGuid, 16447 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); 16448 16449 _Must_inspect_result_ 16450 _IRQL_requires_max_ (APC_LEVEL) 16451 __kernel_entry 16452 NTSYSCALLAPI 16453 NTSTATUS 16454 NTAPI 16455 NtRecoverResourceManager( 16456 _In_ HANDLE ResourceManagerHandle); 16457 16458 _Must_inspect_result_ 16459 _IRQL_requires_max_ (APC_LEVEL) 16460 __kernel_entry 16461 NTSYSCALLAPI 16462 NTSTATUS 16463 NTAPI 16464 NtGetNotificationResourceManager( 16465 _In_ HANDLE ResourceManagerHandle, 16466 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification, 16467 _In_ ULONG NotificationLength, 16468 _In_opt_ PLARGE_INTEGER Timeout, 16469 _Out_opt_ PULONG ReturnLength, 16470 _In_ ULONG Asynchronous, 16471 _In_opt_ ULONG_PTR AsynchronousContext); 16472 16473 _Must_inspect_result_ 16474 _IRQL_requires_max_ (APC_LEVEL) 16475 __kernel_entry 16476 NTSYSCALLAPI 16477 NTSTATUS 16478 NTAPI 16479 NtQueryInformationResourceManager( 16480 _In_ HANDLE ResourceManagerHandle, 16481 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, 16482 _Out_writes_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, 16483 _In_ ULONG ResourceManagerInformationLength, 16484 _Out_opt_ PULONG ReturnLength); 16485 16486 _Must_inspect_result_ 16487 _IRQL_requires_max_ (APC_LEVEL) 16488 __kernel_entry 16489 NTSYSCALLAPI 16490 NTSTATUS 16491 NTAPI 16492 NtSetInformationResourceManager( 16493 _In_ HANDLE ResourceManagerHandle, 16494 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, 16495 _In_reads_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, 16496 _In_ ULONG ResourceManagerInformationLength); 16497 16498 _Must_inspect_result_ 16499 _IRQL_requires_max_ (APC_LEVEL) 16500 __kernel_entry 16501 NTSYSCALLAPI 16502 NTSTATUS 16503 NTAPI 16504 NtRegisterProtocolAddressInformation( 16505 _In_ HANDLE ResourceManager, 16506 _In_ PCRM_PROTOCOL_ID ProtocolId, 16507 _In_ ULONG ProtocolInformationSize, 16508 _In_ PVOID ProtocolInformation, 16509 _In_opt_ ULONG CreateOptions); 16510 16511 _IRQL_requires_max_ (APC_LEVEL) 16512 __kernel_entry 16513 NTSYSCALLAPI 16514 NTSTATUS 16515 NTAPI 16516 NtPropagationComplete( 16517 _In_ HANDLE ResourceManagerHandle, 16518 _In_ ULONG RequestCookie, 16519 _In_ ULONG BufferLength, 16520 _In_ PVOID Buffer); 16521 16522 _IRQL_requires_max_ (APC_LEVEL) 16523 __kernel_entry 16524 NTSYSCALLAPI 16525 NTSTATUS 16526 NTAPI 16527 NtPropagationFailed( 16528 _In_ HANDLE ResourceManagerHandle, 16529 _In_ ULONG RequestCookie, 16530 _In_ NTSTATUS PropStatus); 16531 16532 #endif /* NTDDI_VERSION >= NTDDI_VISTA */ 16533 16534 #endif /* !_NTTMAPI_ */ 16535 /****************************************************************************** 16536 * ZwXxx Functions * 16537 ******************************************************************************/ 16538 16539 16540 /* Constants */ 16541 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) 16542 #define ZwCurrentProcess() NtCurrentProcess() 16543 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) 16544 #define ZwCurrentThread() NtCurrentThread() 16545 16546 16547 #if (NTDDI_VERSION >= NTDDI_WIN2K) 16548 16549 _IRQL_requires_max_(PASSIVE_LEVEL) 16550 NTSYSAPI 16551 NTSTATUS 16552 NTAPI 16553 ZwClose( 16554 _In_ HANDLE Handle); 16555 16556 _IRQL_requires_max_(PASSIVE_LEVEL) 16557 NTSYSAPI 16558 NTSTATUS 16559 NTAPI 16560 ZwCreateDirectoryObject( 16561 _Out_ PHANDLE DirectoryHandle, 16562 _In_ ACCESS_MASK DesiredAccess, 16563 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 16564 16565 _IRQL_requires_max_(PASSIVE_LEVEL) 16566 NTSYSAPI 16567 NTSTATUS 16568 NTAPI 16569 ZwCreateFile( 16570 _Out_ PHANDLE FileHandle, 16571 _In_ ACCESS_MASK DesiredAccess, 16572 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16573 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16574 _In_opt_ PLARGE_INTEGER AllocationSize, 16575 _In_ ULONG FileAttributes, 16576 _In_ ULONG ShareAccess, 16577 _In_ ULONG CreateDisposition, 16578 _In_ ULONG CreateOptions, 16579 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer, 16580 _In_ ULONG EaLength); 16581 16582 _IRQL_requires_max_(PASSIVE_LEVEL) 16583 NTSYSAPI 16584 NTSTATUS 16585 NTAPI 16586 ZwCreateKey( 16587 _Out_ PHANDLE KeyHandle, 16588 _In_ ACCESS_MASK DesiredAccess, 16589 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16590 _Reserved_ ULONG TitleIndex, 16591 _In_opt_ PUNICODE_STRING Class, 16592 _In_ ULONG CreateOptions, 16593 _Out_opt_ PULONG Disposition); 16594 16595 _IRQL_requires_max_(APC_LEVEL) 16596 NTSYSAPI 16597 NTSTATUS 16598 NTAPI 16599 ZwCreateSection( 16600 _Out_ PHANDLE SectionHandle, 16601 _In_ ACCESS_MASK DesiredAccess, 16602 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16603 _In_opt_ PLARGE_INTEGER MaximumSize, 16604 _In_ ULONG SectionPageProtection, 16605 _In_ ULONG AllocationAttributes, 16606 _In_opt_ HANDLE FileHandle); 16607 16608 _IRQL_requires_max_(PASSIVE_LEVEL) 16609 NTSYSAPI 16610 NTSTATUS 16611 NTAPI 16612 ZwDeleteKey( 16613 _In_ HANDLE KeyHandle); 16614 16615 _IRQL_requires_max_(PASSIVE_LEVEL) 16616 NTSYSAPI 16617 NTSTATUS 16618 NTAPI 16619 ZwDeleteValueKey( 16620 _In_ HANDLE KeyHandle, 16621 _In_ PUNICODE_STRING ValueName); 16622 16623 _IRQL_requires_max_(PASSIVE_LEVEL) 16624 _When_(Length == 0, _Post_satisfies_(return < 0)) 16625 _When_(Length > 0, _Post_satisfies_(return <= 0)) 16626 NTSYSAPI 16627 NTSTATUS 16628 NTAPI 16629 ZwEnumerateKey( 16630 _In_ HANDLE KeyHandle, 16631 _In_ ULONG Index, 16632 _In_ KEY_INFORMATION_CLASS KeyInformationClass, 16633 _Out_writes_bytes_opt_(Length) PVOID KeyInformation, 16634 _In_ ULONG Length, 16635 _Out_ PULONG ResultLength); 16636 16637 _IRQL_requires_max_(PASSIVE_LEVEL) 16638 _When_(Length == 0, _Post_satisfies_(return < 0)) 16639 _When_(Length > 0, _Post_satisfies_(return <= 0)) 16640 NTSYSAPI 16641 NTSTATUS 16642 NTAPI 16643 ZwEnumerateValueKey( 16644 _In_ HANDLE KeyHandle, 16645 _In_ ULONG Index, 16646 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 16647 _Out_writes_bytes_opt_(Length) PVOID KeyValueInformation, 16648 _In_ ULONG Length, 16649 _Out_ PULONG ResultLength); 16650 16651 _IRQL_requires_max_(PASSIVE_LEVEL) 16652 NTSYSAPI 16653 NTSTATUS 16654 NTAPI 16655 ZwFlushKey( 16656 _In_ HANDLE KeyHandle); 16657 16658 _IRQL_requires_max_(PASSIVE_LEVEL) 16659 NTSYSAPI 16660 NTSTATUS 16661 NTAPI 16662 ZwLoadDriver( 16663 _In_ PUNICODE_STRING DriverServiceName); 16664 16665 _IRQL_requires_max_(PASSIVE_LEVEL) 16666 NTSYSAPI 16667 NTSTATUS 16668 NTAPI 16669 ZwMakeTemporaryObject( 16670 _In_ HANDLE Handle); 16671 16672 _IRQL_requires_max_(PASSIVE_LEVEL) 16673 NTSYSAPI 16674 NTSTATUS 16675 NTAPI 16676 ZwMapViewOfSection( 16677 _In_ HANDLE SectionHandle, 16678 _In_ HANDLE ProcessHandle, 16679 _Outptr_result_bytebuffer_(*ViewSize) PVOID *BaseAddress, 16680 _In_ ULONG_PTR ZeroBits, 16681 _In_ SIZE_T CommitSize, 16682 _Inout_opt_ PLARGE_INTEGER SectionOffset, 16683 _Inout_ PSIZE_T ViewSize, 16684 _In_ SECTION_INHERIT InheritDisposition, 16685 _In_ ULONG AllocationType, 16686 _In_ ULONG Protect); 16687 16688 _IRQL_requires_max_(PASSIVE_LEVEL) 16689 NTSYSAPI 16690 NTSTATUS 16691 NTAPI 16692 ZwOpenFile( 16693 _Out_ PHANDLE FileHandle, 16694 _In_ ACCESS_MASK DesiredAccess, 16695 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16696 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16697 _In_ ULONG ShareAccess, 16698 _In_ ULONG OpenOptions); 16699 16700 _IRQL_requires_max_(PASSIVE_LEVEL) 16701 NTSYSAPI 16702 NTSTATUS 16703 NTAPI 16704 ZwOpenKey( 16705 _Out_ PHANDLE KeyHandle, 16706 _In_ ACCESS_MASK DesiredAccess, 16707 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 16708 16709 _IRQL_requires_max_(PASSIVE_LEVEL) 16710 NTSYSAPI 16711 NTSTATUS 16712 NTAPI 16713 ZwOpenSection( 16714 _Out_ PHANDLE SectionHandle, 16715 _In_ ACCESS_MASK DesiredAccess, 16716 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 16717 16718 _IRQL_requires_max_(PASSIVE_LEVEL) 16719 NTSYSAPI 16720 NTSTATUS 16721 NTAPI 16722 ZwOpenSymbolicLinkObject( 16723 _Out_ PHANDLE LinkHandle, 16724 _In_ ACCESS_MASK DesiredAccess, 16725 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 16726 16727 _IRQL_requires_max_(PASSIVE_LEVEL) 16728 NTSYSAPI 16729 NTSTATUS 16730 NTAPI 16731 ZwQueryInformationFile( 16732 _In_ HANDLE FileHandle, 16733 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16734 _Out_writes_bytes_(Length) PVOID FileInformation, 16735 _In_ ULONG Length, 16736 _In_ FILE_INFORMATION_CLASS FileInformationClass); 16737 16738 _IRQL_requires_max_(PASSIVE_LEVEL) 16739 _When_(Length == 0, _Post_satisfies_(return < 0)) 16740 _When_(Length > 0, _Post_satisfies_(return <= 0)) 16741 NTSYSAPI 16742 NTSTATUS 16743 NTAPI 16744 ZwQueryKey( 16745 _In_ HANDLE KeyHandle, 16746 _In_ KEY_INFORMATION_CLASS KeyInformationClass, 16747 _Out_writes_bytes_opt_(Length) PVOID KeyInformation, 16748 _In_ ULONG Length, 16749 _Out_ PULONG ResultLength); 16750 16751 _IRQL_requires_max_(PASSIVE_LEVEL) 16752 NTSYSAPI 16753 NTSTATUS 16754 NTAPI 16755 ZwQuerySymbolicLinkObject( 16756 _In_ HANDLE LinkHandle, 16757 _Inout_ PUNICODE_STRING LinkTarget, 16758 _Out_opt_ PULONG ReturnedLength); 16759 16760 _IRQL_requires_max_(PASSIVE_LEVEL) 16761 _When_(Length == 0, _Post_satisfies_(return < 0)) 16762 _When_(Length > 0, _Post_satisfies_(return <= 0)) 16763 NTSYSAPI 16764 NTSTATUS 16765 NTAPI 16766 ZwQueryValueKey( 16767 _In_ HANDLE KeyHandle, 16768 _In_ PUNICODE_STRING ValueName, 16769 _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 16770 _Out_writes_bytes_opt_(Length) PVOID KeyValueInformation, 16771 _In_ ULONG Length, 16772 _Out_ PULONG ResultLength); 16773 16774 _IRQL_requires_max_(PASSIVE_LEVEL) 16775 NTSYSAPI 16776 NTSTATUS 16777 NTAPI 16778 ZwReadFile( 16779 _In_ HANDLE FileHandle, 16780 _In_opt_ HANDLE Event, 16781 _In_opt_ PIO_APC_ROUTINE ApcRoutine, 16782 _In_opt_ PVOID ApcContext, 16783 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16784 _Out_writes_bytes_(Length) PVOID Buffer, 16785 _In_ ULONG Length, 16786 _In_opt_ PLARGE_INTEGER ByteOffset, 16787 _In_opt_ PULONG Key); 16788 16789 _IRQL_requires_max_(PASSIVE_LEVEL) 16790 NTSYSAPI 16791 NTSTATUS 16792 NTAPI 16793 ZwSetInformationFile( 16794 _In_ HANDLE FileHandle, 16795 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16796 _In_reads_bytes_(Length) PVOID FileInformation, 16797 _In_ ULONG Length, 16798 _In_ FILE_INFORMATION_CLASS FileInformationClass); 16799 16800 _IRQL_requires_max_(PASSIVE_LEVEL) 16801 NTSYSAPI 16802 NTSTATUS 16803 NTAPI 16804 ZwSetValueKey( 16805 _In_ HANDLE KeyHandle, 16806 _In_ PUNICODE_STRING ValueName, 16807 _In_opt_ ULONG TitleIndex, 16808 _In_ ULONG Type, 16809 _In_reads_bytes_opt_(DataSize) PVOID Data, 16810 _In_ ULONG DataSize); 16811 16812 _IRQL_requires_max_(PASSIVE_LEVEL) 16813 NTSYSAPI 16814 NTSTATUS 16815 NTAPI 16816 ZwUnloadDriver( 16817 _In_ PUNICODE_STRING DriverServiceName); 16818 16819 _IRQL_requires_max_(PASSIVE_LEVEL) 16820 NTSYSAPI 16821 NTSTATUS 16822 NTAPI 16823 ZwUnmapViewOfSection( 16824 _In_ HANDLE ProcessHandle, 16825 _In_opt_ PVOID BaseAddress); 16826 16827 _IRQL_requires_max_(PASSIVE_LEVEL) 16828 NTSYSAPI 16829 NTSTATUS 16830 NTAPI 16831 ZwWriteFile( 16832 _In_ HANDLE FileHandle, 16833 _In_opt_ HANDLE Event, 16834 _In_opt_ PIO_APC_ROUTINE ApcRoutine, 16835 _In_opt_ PVOID ApcContext, 16836 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 16837 _In_reads_bytes_(Length) PVOID Buffer, 16838 _In_ ULONG Length, 16839 _In_opt_ PLARGE_INTEGER ByteOffset, 16840 _In_opt_ PULONG Key); 16841 16842 _IRQL_requires_max_(PASSIVE_LEVEL) 16843 NTSYSAPI 16844 NTSTATUS 16845 NTAPI 16846 ZwQueryFullAttributesFile( 16847 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16848 _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation); 16849 16850 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 16851 16852 16853 #if (NTDDI_VERSION >= NTDDI_WS03) 16854 _IRQL_requires_max_(PASSIVE_LEVEL) 16855 NTSYSCALLAPI 16856 NTSTATUS 16857 NTAPI 16858 ZwOpenEvent( 16859 _Out_ PHANDLE EventHandle, 16860 _In_ ACCESS_MASK DesiredAccess, 16861 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 16862 #endif 16863 16864 #if (NTDDI_VERSION >= NTDDI_VISTA) 16865 16866 _IRQL_requires_max_(PASSIVE_LEVEL) 16867 NTSYSAPI 16868 NTSTATUS 16869 ZwCreateKeyTransacted( 16870 _Out_ PHANDLE KeyHandle, 16871 _In_ ACCESS_MASK DesiredAccess, 16872 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16873 _Reserved_ ULONG TitleIndex, 16874 _In_opt_ PUNICODE_STRING Class, 16875 _In_ ULONG CreateOptions, 16876 _In_ HANDLE TransactionHandle, 16877 _Out_opt_ PULONG Disposition); 16878 16879 _IRQL_requires_max_(PASSIVE_LEVEL) 16880 NTSYSAPI 16881 NTSTATUS 16882 NTAPI 16883 ZwOpenKeyTransacted( 16884 _Out_ PHANDLE KeyHandle, 16885 _In_ ACCESS_MASK DesiredAccess, 16886 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 16887 _In_ HANDLE TransactionHandle); 16888 16889 _IRQL_requires_max_(PASSIVE_LEVEL) 16890 NTSYSCALLAPI 16891 NTSTATUS 16892 NTAPI 16893 ZwCreateTransactionManager( 16894 _Out_ PHANDLE TmHandle, 16895 _In_ ACCESS_MASK DesiredAccess, 16896 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16897 _In_opt_ PUNICODE_STRING LogFileName, 16898 _In_opt_ ULONG CreateOptions, 16899 _In_opt_ ULONG CommitStrength); 16900 16901 _IRQL_requires_max_(PASSIVE_LEVEL) 16902 NTSYSCALLAPI 16903 NTSTATUS 16904 NTAPI 16905 ZwOpenTransactionManager( 16906 _Out_ PHANDLE TmHandle, 16907 _In_ ACCESS_MASK DesiredAccess, 16908 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16909 _In_opt_ PUNICODE_STRING LogFileName, 16910 _In_opt_ LPGUID TmIdentity, 16911 _In_opt_ ULONG OpenOptions); 16912 16913 _IRQL_requires_max_(PASSIVE_LEVEL) 16914 NTSYSCALLAPI 16915 NTSTATUS 16916 NTAPI 16917 ZwRollforwardTransactionManager( 16918 _In_ HANDLE TransactionManagerHandle, 16919 _In_opt_ PLARGE_INTEGER TmVirtualClock); 16920 16921 _IRQL_requires_max_(PASSIVE_LEVEL) 16922 NTSYSCALLAPI 16923 NTSTATUS 16924 NTAPI 16925 ZwRecoverTransactionManager( 16926 _In_ HANDLE TransactionManagerHandle); 16927 16928 _IRQL_requires_max_(PASSIVE_LEVEL) 16929 NTSYSCALLAPI 16930 NTSTATUS 16931 NTAPI 16932 ZwQueryInformationTransactionManager( 16933 _In_ HANDLE TransactionManagerHandle, 16934 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, 16935 _Out_writes_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, 16936 _In_ ULONG TransactionManagerInformationLength, 16937 _Out_opt_ PULONG ReturnLength); 16938 16939 _IRQL_requires_max_(PASSIVE_LEVEL) 16940 NTSYSCALLAPI 16941 NTSTATUS 16942 NTAPI 16943 ZwSetInformationTransactionManager( 16944 _In_ HANDLE TmHandle, 16945 _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, 16946 _In_ PVOID TransactionManagerInformation, 16947 _In_ ULONG TransactionManagerInformationLength); 16948 16949 _IRQL_requires_max_(PASSIVE_LEVEL) 16950 NTSYSCALLAPI 16951 NTSTATUS 16952 NTAPI 16953 ZwEnumerateTransactionObject( 16954 _In_opt_ HANDLE RootObjectHandle, 16955 _In_ KTMOBJECT_TYPE QueryType, 16956 _Inout_updates_bytes_(ObjectCursorLength) PKTMOBJECT_CURSOR ObjectCursor, 16957 _In_ ULONG ObjectCursorLength, 16958 _Out_ PULONG ReturnLength); 16959 16960 _IRQL_requires_max_(PASSIVE_LEVEL) 16961 NTSYSCALLAPI 16962 NTSTATUS 16963 NTAPI 16964 ZwCreateTransaction( 16965 _Out_ PHANDLE TransactionHandle, 16966 _In_ ACCESS_MASK DesiredAccess, 16967 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16968 _In_opt_ LPGUID Uow, 16969 _In_opt_ HANDLE TmHandle, 16970 _In_opt_ ULONG CreateOptions, 16971 _In_opt_ ULONG IsolationLevel, 16972 _In_opt_ ULONG IsolationFlags, 16973 _In_opt_ PLARGE_INTEGER Timeout, 16974 _In_opt_ PUNICODE_STRING Description); 16975 16976 _IRQL_requires_max_(PASSIVE_LEVEL) 16977 NTSYSCALLAPI 16978 NTSTATUS 16979 NTAPI 16980 ZwOpenTransaction( 16981 _Out_ PHANDLE TransactionHandle, 16982 _In_ ACCESS_MASK DesiredAccess, 16983 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 16984 _In_ LPGUID Uow, 16985 _In_opt_ HANDLE TmHandle); 16986 16987 _IRQL_requires_max_(PASSIVE_LEVEL) 16988 NTSYSCALLAPI 16989 NTSTATUS 16990 NTAPI 16991 ZwQueryInformationTransaction( 16992 _In_ HANDLE TransactionHandle, 16993 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 16994 _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, 16995 _In_ ULONG TransactionInformationLength, 16996 _Out_opt_ PULONG ReturnLength); 16997 16998 _IRQL_requires_max_(PASSIVE_LEVEL) 16999 NTSYSCALLAPI 17000 NTSTATUS 17001 NTAPI 17002 ZwSetInformationTransaction( 17003 _In_ HANDLE TransactionHandle, 17004 _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, 17005 _In_ PVOID TransactionInformation, 17006 _In_ ULONG TransactionInformationLength); 17007 17008 _IRQL_requires_max_(PASSIVE_LEVEL) 17009 NTSYSCALLAPI 17010 NTSTATUS 17011 NTAPI 17012 ZwCommitTransaction( 17013 _In_ HANDLE TransactionHandle, 17014 _In_ BOOLEAN Wait); 17015 17016 _IRQL_requires_max_(PASSIVE_LEVEL) 17017 NTSYSCALLAPI 17018 NTSTATUS 17019 NTAPI 17020 ZwRollbackTransaction( 17021 _In_ HANDLE TransactionHandle, 17022 _In_ BOOLEAN Wait); 17023 17024 _IRQL_requires_max_(PASSIVE_LEVEL) 17025 NTSYSCALLAPI 17026 NTSTATUS 17027 NTAPI 17028 ZwCreateResourceManager( 17029 _Out_ PHANDLE ResourceManagerHandle, 17030 _In_ ACCESS_MASK DesiredAccess, 17031 _In_ HANDLE TmHandle, 17032 _In_opt_ LPGUID ResourceManagerGuid, 17033 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 17034 _In_opt_ ULONG CreateOptions, 17035 _In_opt_ PUNICODE_STRING Description); 17036 17037 _IRQL_requires_max_(PASSIVE_LEVEL) 17038 NTSYSCALLAPI 17039 NTSTATUS 17040 NTAPI 17041 ZwOpenResourceManager( 17042 _Out_ PHANDLE ResourceManagerHandle, 17043 _In_ ACCESS_MASK DesiredAccess, 17044 _In_ HANDLE TmHandle, 17045 _In_ LPGUID ResourceManagerGuid, 17046 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); 17047 17048 _IRQL_requires_max_(PASSIVE_LEVEL) 17049 NTSYSCALLAPI 17050 NTSTATUS 17051 NTAPI 17052 ZwRecoverResourceManager( 17053 _In_ HANDLE ResourceManagerHandle); 17054 17055 _IRQL_requires_max_(PASSIVE_LEVEL) 17056 NTSYSCALLAPI 17057 NTSTATUS 17058 NTAPI 17059 ZwGetNotificationResourceManager( 17060 _In_ HANDLE ResourceManagerHandle, 17061 _Out_ PTRANSACTION_NOTIFICATION TransactionNotification, 17062 _In_ ULONG NotificationLength, 17063 _In_ PLARGE_INTEGER Timeout, 17064 _Out_opt_ PULONG ReturnLength, 17065 _In_ ULONG Asynchronous, 17066 _In_opt_ ULONG_PTR AsynchronousContext); 17067 17068 _IRQL_requires_max_(PASSIVE_LEVEL) 17069 NTSYSCALLAPI 17070 NTSTATUS 17071 NTAPI 17072 ZwQueryInformationResourceManager( 17073 _In_ HANDLE ResourceManagerHandle, 17074 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, 17075 _Out_writes_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, 17076 _In_ ULONG ResourceManagerInformationLength, 17077 _Out_opt_ PULONG ReturnLength); 17078 17079 _IRQL_requires_max_(PASSIVE_LEVEL) 17080 NTSYSCALLAPI 17081 NTSTATUS 17082 NTAPI 17083 ZwSetInformationResourceManager( 17084 _In_ HANDLE ResourceManagerHandle, 17085 _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, 17086 _In_reads_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, 17087 _In_ ULONG ResourceManagerInformationLength); 17088 17089 _IRQL_requires_max_(PASSIVE_LEVEL) 17090 NTSYSCALLAPI 17091 NTSTATUS 17092 NTAPI 17093 ZwCreateEnlistment( 17094 _Out_ PHANDLE EnlistmentHandle, 17095 _In_ ACCESS_MASK DesiredAccess, 17096 _In_ HANDLE ResourceManagerHandle, 17097 _In_ HANDLE TransactionHandle, 17098 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 17099 _In_opt_ ULONG CreateOptions, 17100 _In_ NOTIFICATION_MASK NotificationMask, 17101 _In_opt_ PVOID EnlistmentKey); 17102 17103 _IRQL_requires_max_(PASSIVE_LEVEL) 17104 NTSYSCALLAPI 17105 NTSTATUS 17106 NTAPI 17107 ZwOpenEnlistment( 17108 _Out_ PHANDLE EnlistmentHandle, 17109 _In_ ACCESS_MASK DesiredAccess, 17110 _In_ HANDLE RmHandle, 17111 _In_ LPGUID EnlistmentGuid, 17112 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); 17113 17114 _IRQL_requires_max_(PASSIVE_LEVEL) 17115 NTSYSCALLAPI 17116 NTSTATUS 17117 NTAPI 17118 ZwQueryInformationEnlistment( 17119 _In_ HANDLE EnlistmentHandle, 17120 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, 17121 _Out_writes_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, 17122 _In_ ULONG EnlistmentInformationLength, 17123 _Out_opt_ PULONG ReturnLength); 17124 17125 _IRQL_requires_max_(PASSIVE_LEVEL) 17126 NTSYSCALLAPI 17127 NTSTATUS 17128 NTAPI 17129 ZwSetInformationEnlistment( 17130 _In_ HANDLE EnlistmentHandle, 17131 _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, 17132 _In_reads_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, 17133 _In_ ULONG EnlistmentInformationLength); 17134 17135 _IRQL_requires_max_(PASSIVE_LEVEL) 17136 NTSYSCALLAPI 17137 NTSTATUS 17138 NTAPI 17139 ZwRecoverEnlistment( 17140 _In_ HANDLE EnlistmentHandle, 17141 _In_opt_ PVOID EnlistmentKey); 17142 17143 _IRQL_requires_max_(PASSIVE_LEVEL) 17144 NTSYSCALLAPI 17145 NTSTATUS 17146 NTAPI 17147 ZwPrePrepareEnlistment( 17148 _In_ HANDLE EnlistmentHandle, 17149 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17150 17151 _IRQL_requires_max_(PASSIVE_LEVEL) 17152 NTSYSCALLAPI 17153 NTSTATUS 17154 NTAPI 17155 ZwPrepareEnlistment( 17156 _In_ HANDLE EnlistmentHandle, 17157 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17158 17159 _IRQL_requires_max_(PASSIVE_LEVEL) 17160 NTSYSCALLAPI 17161 NTSTATUS 17162 NTAPI 17163 ZwCommitEnlistment( 17164 _In_ HANDLE EnlistmentHandle, 17165 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17166 17167 _IRQL_requires_max_(PASSIVE_LEVEL) 17168 NTSYSCALLAPI 17169 NTSTATUS 17170 NTAPI 17171 ZwRollbackEnlistment( 17172 _In_ HANDLE EnlistmentHandle, 17173 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17174 17175 _IRQL_requires_max_(PASSIVE_LEVEL) 17176 NTSYSCALLAPI 17177 NTSTATUS 17178 NTAPI 17179 ZwPrePrepareComplete( 17180 _In_ HANDLE EnlistmentHandle, 17181 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17182 17183 _IRQL_requires_max_(PASSIVE_LEVEL) 17184 NTSYSCALLAPI 17185 NTSTATUS 17186 NTAPI 17187 ZwPrepareComplete( 17188 _In_ HANDLE EnlistmentHandle, 17189 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17190 17191 _IRQL_requires_max_(PASSIVE_LEVEL) 17192 NTSYSCALLAPI 17193 NTSTATUS 17194 NTAPI 17195 ZwCommitComplete( 17196 _In_ HANDLE EnlistmentHandle, 17197 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17198 17199 _IRQL_requires_max_(PASSIVE_LEVEL) 17200 NTSYSCALLAPI 17201 NTSTATUS 17202 NTAPI 17203 ZwReadOnlyEnlistment( 17204 _In_ HANDLE EnlistmentHandle, 17205 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17206 17207 NTSYSCALLAPI 17208 NTSTATUS 17209 NTAPI 17210 ZwRollbackComplete( 17211 IN HANDLE EnlistmentHandle, 17212 IN PLARGE_INTEGER TmVirtualClock OPTIONAL); 17213 17214 NTSYSCALLAPI 17215 NTSTATUS 17216 NTAPI 17217 ZwSinglePhaseReject( 17218 _In_ HANDLE EnlistmentHandle, 17219 _In_opt_ PLARGE_INTEGER TmVirtualClock); 17220 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 17221 #if (NTDDI_VERSION >= NTDDI_WIN7) 17222 17223 _IRQL_requires_max_(PASSIVE_LEVEL) 17224 NTSYSAPI 17225 NTSTATUS 17226 NTAPI 17227 ZwOpenKeyEx( 17228 _Out_ PHANDLE KeyHandle, 17229 _In_ ACCESS_MASK DesiredAccess, 17230 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 17231 _In_ ULONG OpenOptions); 17232 17233 _IRQL_requires_max_(PASSIVE_LEVEL) 17234 NTSYSAPI 17235 NTSTATUS 17236 NTAPI 17237 ZwOpenKeyTransactedEx( 17238 _Out_ PHANDLE KeyHandle, 17239 _In_ ACCESS_MASK DesiredAccess, 17240 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 17241 _In_ ULONG OpenOptions, 17242 _In_ HANDLE TransactionHandle); 17243 17244 NTSYSAPI 17245 NTSTATUS 17246 NTAPI 17247 ZwNotifyChangeMultipleKeys( 17248 IN HANDLE MasterKeyHandle, 17249 IN ULONG Count OPTIONAL, 17250 IN OBJECT_ATTRIBUTES SubordinateObjects[] OPTIONAL, 17251 IN HANDLE Event OPTIONAL, 17252 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 17253 IN PVOID ApcContext OPTIONAL, 17254 OUT PIO_STATUS_BLOCK IoStatusBlock, 17255 IN ULONG CompletionFilter, 17256 IN BOOLEAN WatchTree, 17257 OUT PVOID Buffer OPTIONAL, 17258 IN ULONG BufferSize, 17259 IN BOOLEAN Asynchronous); 17260 17261 NTSYSAPI 17262 NTSTATUS 17263 NTAPI 17264 ZwQueryMultipleValueKey( 17265 IN HANDLE KeyHandle, 17266 IN OUT PKEY_VALUE_ENTRY ValueEntries, 17267 IN ULONG EntryCount, 17268 OUT PVOID ValueBuffer, 17269 IN OUT PULONG BufferLength, 17270 OUT PULONG RequiredBufferLength OPTIONAL); 17271 17272 _IRQL_requires_max_(PASSIVE_LEVEL) 17273 NTSYSAPI 17274 NTSTATUS 17275 NTAPI 17276 ZwRenameKey( 17277 _In_ HANDLE KeyHandle, 17278 _In_ PUNICODE_STRING NewName); 17279 17280 _IRQL_requires_max_(PASSIVE_LEVEL) 17281 NTSYSAPI 17282 NTSTATUS 17283 NTAPI 17284 ZwSetInformationKey( 17285 _In_ HANDLE KeyHandle, 17286 _In_ __drv_strictTypeMatch(__drv_typeConst) KEY_SET_INFORMATION_CLASS KeySetInformationClass, 17287 _In_reads_bytes_(KeySetInformationLength) PVOID KeySetInformation, 17288 _In_ ULONG KeySetInformationLength); 17289 17290 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 17291 17292 17293 #ifdef __cplusplus 17294 } 17295 #endif 17296 17297 #endif /* !_WDMDDK_ */ Generated on Sun May 27 2012 04:30:27 for ReactOS by
1.7.6.1
|