| 1 | /* |
| 2 | * wdm.h |
| 3 | * |
| 4 | * Windows NT WDM Driver Developer Kit |
| 5 | * |
| 6 | * This file is part of the ReactOS DDK package. |
| 7 | * |
| 8 | * Contributors: |
| 9 | * Amine Khaldi |
| 10 | * Timo Kreuzer (timo.kreuzer@reactos.org) |
| 11 | * |
| 12 | * THIS SOFTWARE IS NOT COPYRIGHTED |
| 13 | * |
| 14 | * This source code is offered for use in the public domain. You may |
| 15 | * use, modify or distribute it freely. |
| 16 | * |
| 17 | * This code is distributed in the hope that it will be useful but |
| 18 | * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| 19 | * DISCLAIMED. This includes but is not limited to warranties of |
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| 21 | * |
| 22 | */ |
| 23 | #pragma once |
| 24 | |
| 25 | #ifndef _WDMDDK_ |
| 26 | #define _WDMDDK_ |
| 27 | |
| 28 | #define WDM_MAJORVERSION 0x06 |
| 29 | #define WDM_MINORVERSION 0x00 |
| 30 | |
| 31 | /* Included via ntddk.h? */ |
| 32 | #ifndef _NTDDK_ |
| 33 | #define _NTDDK_ |
| 34 | #define _WDM_INCLUDED_ |
| 35 | #define _DDK_DRIVER_ |
| 36 | #define NO_INTERLOCKED_INTRINSICS |
| 37 | #endif /* _NTDDK_ */ |
| 38 | |
| 39 | /* Dependencies */ |
| 40 | #define NT_INCLUDED |
| 41 | #include <excpt.h> |
| 42 | #include <ntdef.h> |
| 43 | #include <ntstatus.h> |
| 44 | #include <ntiologc.h> |
| 45 | |
| 46 | #ifndef GUID_DEFINED |
| 47 | #include <guiddef.h> |
| 48 | #endif |
| 49 | |
| 50 | #ifdef _MAC |
| 51 | #ifndef _INC_STRING |
| 52 | #include <string.h> |
| 53 | #endif /* _INC_STRING */ |
| 54 | #else |
| 55 | #include <string.h> |
| 56 | #endif /* _MAC */ |
| 57 | |
| 58 | #ifndef _KTMTYPES_ |
| 59 | typedef GUID UOW, *PUOW; |
| 60 | #endif |
| 61 | |
| 62 | typedef GUID *PGUID; |
| 63 | |
| 64 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 65 | #include <dpfilter.h> |
| 66 | #endif |
| 67 | |
| 68 | #include "intrin.h" |
| 69 | |
| 70 | #ifdef __cplusplus |
| 71 | extern "C" { |
| 72 | #endif |
| 73 | |
| 74 | #if !defined(_NTHALDLL_) && !defined(_BLDR_) |
| 75 | #define NTHALAPI DECLSPEC_IMPORT |
| 76 | #else |
| 77 | #define NTHALAPI |
| 78 | #endif |
| 79 | |
| 80 | /* For ReactOS */ |
| 81 | #if !defined(_NTOSKRNL_) && !defined(_BLDR_) |
| 82 | #define NTKERNELAPI DECLSPEC_IMPORT |
| 83 | #else |
| 84 | #define NTKERNELAPI |
| 85 | #endif |
| 86 | |
| 87 | #if defined(_X86_) && !defined(_NTHAL_) |
| 88 | #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT |
| 89 | #elif defined(_X86_) |
| 90 | #define _DECL_HAL_KE_IMPORT |
| 91 | #else |
| 92 | #define _DECL_HAL_KE_IMPORT NTKERNELAPI |
| 93 | #endif |
| 94 | |
| 95 | #if defined(_WIN64) |
| 96 | #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8) |
| 97 | #else |
| 98 | #define POINTER_ALIGNMENT |
| 99 | #endif |
| 100 | |
| 101 | #if defined(_MSC_VER) |
| 102 | /* Disable some warnings */ |
| 103 | #pragma warning(disable:4115) /* Named type definition in parentheses */ |
| 104 | #pragma warning(disable:4201) /* Nameless unions and structs */ |
| 105 | #pragma warning(disable:4214) /* Bit fields of other types than int */ |
| 106 | #pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */ |
| 107 | |
| 108 | /* Indicate if #pragma alloc_text() is supported */ |
| 109 | #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) |
| 110 | #define ALLOC_PRAGMA 1 |
| 111 | #endif |
| 112 | |
| 113 | /* Indicate if #pragma data_seg() is supported */ |
| 114 | #if defined(_M_IX86) || defined(_M_AMD64) |
| 115 | #define ALLOC_DATA_PRAGMA 1 |
| 116 | #endif |
| 117 | |
| 118 | #endif /* _MSC_VER */ |
| 119 | |
| 120 | #if defined(_WIN64) |
| 121 | #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_) |
| 122 | #define USE_DMA_MACROS |
| 123 | #endif |
| 124 | #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__) |
| 125 | #define NO_LEGACY_DRIVERS |
| 126 | #endif |
| 127 | #endif /* defined(_WIN64) */ |
| 128 | |
| 129 | /* Forward declarations */ |
| 130 | struct _IRP; |
| 131 | struct _MDL; |
| 132 | struct _KAPC; |
| 133 | struct _KDPC; |
| 134 | struct _FILE_OBJECT; |
| 135 | struct _DMA_ADAPTER; |
| 136 | struct _DEVICE_OBJECT; |
| 137 | struct _DRIVER_OBJECT; |
| 138 | struct _IO_STATUS_BLOCK; |
| 139 | struct _DEVICE_DESCRIPTION; |
| 140 | struct _SCATTER_GATHER_LIST; |
| 141 | struct _DRIVE_LAYOUT_INFORMATION; |
| 142 | struct _COMPRESSED_DATA_INFO; |
| 143 | struct _IO_RESOURCE_DESCRIPTOR; |
| 144 | |
| 145 | /* Structures not exposed to drivers */ |
| 146 | typedef struct _OBJECT_TYPE *POBJECT_TYPE; |
| 147 | typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE; |
| 148 | typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE; |
| 149 | typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; |
| 150 | typedef struct _EPROCESS *PEPROCESS; |
| 151 | typedef struct _ETHREAD *PETHREAD; |
| 152 | typedef struct _IO_TIMER *PIO_TIMER; |
| 153 | typedef struct _KINTERRUPT *PKINTERRUPT; |
| 154 | typedef struct _KPROCESS *PKPROCESS; |
| 155 | typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; |
| 156 | typedef struct _CONTEXT *PCONTEXT; |
| 157 | |
| 158 | #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) |
| 159 | typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; |
| 160 | #elif defined(_WDM_INCLUDED_) |
| 161 | typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; |
| 162 | #else |
| 163 | typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; |
| 164 | #endif |
| 165 | |
| 166 | #ifndef DEFINE_GUIDEX |
| 167 | #ifdef _MSC_VER |
| 168 | #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name |
| 169 | #else |
| 170 | #define DEFINE_GUIDEX(name) EXTERN_C const GUID name |
| 171 | #endif |
| 172 | #endif /* DEFINE_GUIDEX */ |
| 173 | |
| 174 | #ifndef STATICGUIDOF |
| 175 | #define STATICGUIDOF(guid) STATIC_##guid |
| 176 | #endif |
| 177 | |
| 178 | /* GUID Comparison */ |
| 179 | #ifndef __IID_ALIGNED__ |
| 180 | #define __IID_ALIGNED__ |
| 181 | #ifdef __cplusplus |
| 182 | inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) |
| 183 | { |
| 184 | return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && |
| 185 | (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) ); |
| 186 | } |
| 187 | #else |
| 188 | #define IsEqualGUIDAligned(guid1, guid2) \ |
| 189 | ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \ |
| 190 | (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) ) |
| 191 | #endif /* __cplusplus */ |
| 192 | #endif /* !__IID_ALIGNED__ */ |
| 193 | |
| 194 | |
| 195 | /****************************************************************************** |
| 196 | * INTERLOCKED Functions * |
| 197 | ******************************************************************************/ |
| 198 | |
| 199 | #define BitScanForward _BitScanForward |
| 200 | #define BitScanReverse _BitScanReverse |
| 201 | #define BitTest _bittest |
| 202 | #define BitTestAndComplement _bittestandcomplement |
| 203 | #define BitTestAndSet _bittestandset |
| 204 | #define BitTestAndReset _bittestandreset |
| 205 | #define InterlockedBitTestAndSet _interlockedbittestandset |
| 206 | #define InterlockedBitTestAndReset _interlockedbittestandreset |
| 207 | |
| 208 | #ifdef _M_AMD64 |
| 209 | #define BitTest64 _bittest64 |
| 210 | #define BitTestAndComplement64 _bittestandcomplement64 |
| 211 | #define BitTestAndSet64 _bittestandset64 |
| 212 | #define BitTestAndReset64 _bittestandreset64 |
| 213 | #define InterlockedBitTestAndSet64 _interlockedbittestandset64 |
| 214 | #define InterlockedBitTestAndReset64 _interlockedbittestandreset64 |
| 215 | #endif |
| 216 | |
| 217 | #if !defined(__INTERLOCKED_DECLARED) |
| 218 | #define __INTERLOCKED_DECLARED |
| 219 | |
| 220 | #if defined (_X86_) |
| 221 | #if defined(NO_INTERLOCKED_INTRINSICS) |
| 222 | NTKERNELAPI |
| 223 | LONG |
| 224 | FASTCALL |
| 225 | InterlockedIncrement( |
| 226 | IN OUT LONG volatile *Addend); |
| 227 | |
| 228 | NTKERNELAPI |
| 229 | LONG |
| 230 | FASTCALL |
| 231 | InterlockedDecrement( |
| 232 | IN OUT LONG volatile *Addend); |
| 233 | |
| 234 | NTKERNELAPI |
| 235 | LONG |
| 236 | FASTCALL |
| 237 | InterlockedCompareExchange( |
| 238 | IN OUT LONG volatile *Destination, |
| 239 | IN LONG Exchange, |
| 240 | IN LONG Comparand); |
| 241 | |
| 242 | NTKERNELAPI |
| 243 | LONG |
| 244 | FASTCALL |
| 245 | InterlockedExchange( |
| 246 | IN OUT LONG volatile *Destination, |
| 247 | IN LONG Value); |
| 248 | |
| 249 | NTKERNELAPI |
| 250 | LONG |
| 251 | FASTCALL |
| 252 | InterlockedExchangeAdd( |
| 253 | IN OUT LONG volatile *Addend, |
| 254 | IN LONG Value); |
| 255 | |
| 256 | #else /* !defined(NO_INTERLOCKED_INTRINSICS) */ |
| 257 | |
| 258 | #define InterlockedExchange _InterlockedExchange |
| 259 | #define InterlockedIncrement _InterlockedIncrement |
| 260 | #define InterlockedDecrement _InterlockedDecrement |
| 261 | #define InterlockedExchangeAdd _InterlockedExchangeAdd |
| 262 | #define InterlockedCompareExchange _InterlockedCompareExchange |
| 263 | #define InterlockedOr _InterlockedOr |
| 264 | #define InterlockedAnd _InterlockedAnd |
| 265 | #define InterlockedXor _InterlockedXor |
| 266 | |
| 267 | #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */ |
| 268 | |
| 269 | #endif /* defined (_X86_) */ |
| 270 | |
| 271 | #if !defined (_WIN64) |
| 272 | /* |
| 273 | * PVOID |
| 274 | * InterlockedExchangePointer( |
| 275 | * IN OUT PVOID volatile *Target, |
| 276 | * IN PVOID Value) |
| 277 | */ |
| 278 | #define InterlockedExchangePointer(Target, Value) \ |
| 279 | ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value)) |
| 280 | |
| 281 | /* |
| 282 | * PVOID |
| 283 | * InterlockedCompareExchangePointer( |
| 284 | * IN OUT PVOID *Destination, |
| 285 | * IN PVOID Exchange, |
| 286 | * IN PVOID Comparand) |
| 287 | */ |
| 288 | #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \ |
| 289 | ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand)) |
| 290 | |
| 291 | #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b) |
| 292 | #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a) |
| 293 | #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a) |
| 294 | |
| 295 | #endif // !defined (_WIN64) |
| 296 | |
| 297 | #if defined (_M_AMD64) |
| 298 | |
| 299 | #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b) |
| 300 | #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a) |
| 301 | #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a) |
| 302 | #define InterlockedAnd _InterlockedAnd |
| 303 | #define InterlockedOr _InterlockedOr |
| 304 | #define InterlockedXor _InterlockedXor |
| 305 | #define InterlockedIncrement _InterlockedIncrement |
| 306 | #define InterlockedDecrement _InterlockedDecrement |
| 307 | #define InterlockedAdd _InterlockedAdd |
| 308 | #define InterlockedExchange _InterlockedExchange |
| 309 | #define InterlockedExchangeAdd _InterlockedExchangeAdd |
| 310 | #define InterlockedCompareExchange _InterlockedCompareExchange |
| 311 | #define InterlockedAnd64 _InterlockedAnd64 |
| 312 | #define InterlockedOr64 _InterlockedOr64 |
| 313 | #define InterlockedXor64 _InterlockedXor64 |
| 314 | #define InterlockedIncrement64 _InterlockedIncrement64 |
| 315 | #define InterlockedDecrement64 _InterlockedDecrement64 |
| 316 | #define InterlockedAdd64 _InterlockedAdd64 |
| 317 | #define InterlockedExchange64 _InterlockedExchange64 |
| 318 | #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 |
| 319 | #define InterlockedCompareExchange64 _InterlockedCompareExchange64 |
| 320 | #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer |
| 321 | #define InterlockedExchangePointer _InterlockedExchangePointer |
| 322 | #define InterlockedBitTestAndSet64 _interlockedbittestandset64 |
| 323 | #define InterlockedBitTestAndReset64 _interlockedbittestandreset64 |
| 324 | |
| 325 | #endif // _M_AMD64 |
| 326 | |
| 327 | #endif /* !__INTERLOCKED_DECLARED */ |
| 328 | |
| 329 | |
| 330 | /****************************************************************************** |
| 331 | * Runtime Library Types * |
| 332 | ******************************************************************************/ |
| 333 | |
| 334 | #define RTL_REGISTRY_ABSOLUTE 0 |
| 335 | #define RTL_REGISTRY_SERVICES 1 |
| 336 | #define RTL_REGISTRY_CONTROL 2 |
| 337 | #define RTL_REGISTRY_WINDOWS_NT 3 |
| 338 | #define RTL_REGISTRY_DEVICEMAP 4 |
| 339 | #define RTL_REGISTRY_USER 5 |
| 340 | #define RTL_REGISTRY_MAXIMUM 6 |
| 341 | #define RTL_REGISTRY_HANDLE 0x40000000 |
| 342 | #define RTL_REGISTRY_OPTIONAL 0x80000000 |
| 343 | |
| 344 | /* RTL_QUERY_REGISTRY_TABLE.Flags */ |
| 345 | #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 |
| 346 | #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 |
| 347 | #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 |
| 348 | #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 |
| 349 | #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 |
| 350 | #define RTL_QUERY_REGISTRY_DIRECT 0x00000020 |
| 351 | #define RTL_QUERY_REGISTRY_DELETE 0x00000040 |
| 352 | |
| 353 | #define HASH_STRING_ALGORITHM_DEFAULT 0 |
| 354 | #define HASH_STRING_ALGORITHM_X65599 1 |
| 355 | #define HASH_STRING_ALGORITHM_INVALID 0xffffffff |
| 356 | |
| 357 | typedef struct _RTL_BITMAP { |
| 358 | ULONG SizeOfBitMap; |
| 359 | PULONG Buffer; |
| 360 | } RTL_BITMAP, *PRTL_BITMAP; |
| 361 | |
| 362 | typedef struct _RTL_BITMAP_RUN { |
| 363 | ULONG StartingIndex; |
| 364 | ULONG NumberOfBits; |
| 365 | } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; |
| 366 | |
| 367 | typedef NTSTATUS |
| 368 | (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)( |
| 369 | IN PWSTR ValueName, |
| 370 | IN ULONG ValueType, |
| 371 | IN PVOID ValueData, |
| 372 | IN ULONG ValueLength, |
| 373 | IN PVOID Context, |
| 374 | IN PVOID EntryContext); |
| 375 | |
| 376 | typedef struct _RTL_QUERY_REGISTRY_TABLE { |
| 377 | PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; |
| 378 | ULONG Flags; |
| 379 | PCWSTR Name; |
| 380 | PVOID EntryContext; |
| 381 | ULONG DefaultType; |
| 382 | PVOID DefaultData; |
| 383 | ULONG DefaultLength; |
| 384 | } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; |
| 385 | |
| 386 | typedef struct _TIME_FIELDS { |
| 387 | CSHORT Year; |
| 388 | CSHORT Month; |
| 389 | CSHORT Day; |
| 390 | CSHORT Hour; |
| 391 | CSHORT Minute; |
| 392 | CSHORT Second; |
| 393 | CSHORT Milliseconds; |
| 394 | CSHORT Weekday; |
| 395 | } TIME_FIELDS, *PTIME_FIELDS; |
| 396 | |
| 397 | /* Slist Header */ |
| 398 | #ifndef _SLIST_HEADER_ |
| 399 | #define _SLIST_HEADER_ |
| 400 | |
| 401 | #if defined(_WIN64) |
| 402 | |
| 403 | typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { |
| 404 | struct _SLIST_ENTRY *Next; |
| 405 | } SLIST_ENTRY, *PSLIST_ENTRY; |
| 406 | |
| 407 | typedef struct _SLIST_ENTRY32 { |
| 408 | ULONG Next; |
| 409 | } SLIST_ENTRY32, *PSLIST_ENTRY32; |
| 410 | |
| 411 | typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { |
| 412 | _ANONYMOUS_STRUCT struct { |
| 413 | ULONGLONG Alignment; |
| 414 | ULONGLONG Region; |
| 415 | } DUMMYSTRUCTNAME; |
| 416 | struct { |
| 417 | ULONGLONG Depth:16; |
| 418 | ULONGLONG Sequence:9; |
| 419 | ULONGLONG NextEntry:39; |
| 420 | ULONGLONG HeaderType:1; |
| 421 | ULONGLONG Init:1; |
| 422 | ULONGLONG Reserved:59; |
| 423 | ULONGLONG Region:3; |
| 424 | } Header8; |
| 425 | struct { |
| 426 | ULONGLONG Depth:16; |
| 427 | ULONGLONG Sequence:48; |
| 428 | ULONGLONG HeaderType:1; |
| 429 | ULONGLONG Init:1; |
| 430 | ULONGLONG Reserved:2; |
| 431 | ULONGLONG NextEntry:60; |
| 432 | } Header16; |
| 433 | struct { |
| 434 | ULONGLONG Depth:16; |
| 435 | ULONGLONG Sequence:48; |
| 436 | ULONGLONG HeaderType:1; |
| 437 | ULONGLONG Reserved:3; |
| 438 | ULONGLONG NextEntry:60; |
| 439 | } HeaderX64; |
| 440 | } SLIST_HEADER, *PSLIST_HEADER; |
| 441 | |
| 442 | typedef union _SLIST_HEADER32 { |
| 443 | ULONGLONG Alignment; |
| 444 | _ANONYMOUS_STRUCT struct { |
| 445 | SLIST_ENTRY32 Next; |
| 446 | USHORT Depth; |
| 447 | USHORT Sequence; |
| 448 | } DUMMYSTRUCTNAME; |
| 449 | } SLIST_HEADER32, *PSLIST_HEADER32; |
| 450 | |
| 451 | #else |
| 452 | |
| 453 | #define SLIST_ENTRY SINGLE_LIST_ENTRY |
| 454 | #define _SLIST_ENTRY _SINGLE_LIST_ENTRY |
| 455 | #define PSLIST_ENTRY PSINGLE_LIST_ENTRY |
| 456 | |
| 457 | typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32; |
| 458 | |
| 459 | typedef union _SLIST_HEADER { |
| 460 | ULONGLONG Alignment; |
| 461 | _ANONYMOUS_STRUCT struct { |
| 462 | SLIST_ENTRY Next; |
| 463 | USHORT Depth; |
| 464 | USHORT Sequence; |
| 465 | } DUMMYSTRUCTNAME; |
| 466 | } SLIST_HEADER, *PSLIST_HEADER; |
| 467 | |
| 468 | typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32; |
| 469 | |
| 470 | #endif /* defined(_WIN64) */ |
| 471 | |
| 472 | #endif /* _SLIST_HEADER_ */ |
| 473 | |
| 474 | /* MS definition is broken! */ |
| 475 | extern BOOLEAN NTSYSAPI NlsMbCodePageTag; |
| 476 | extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag; |
| 477 | #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag |
| 478 | #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag |
| 479 | |
| 480 | #define SHORT_LEAST_SIGNIFICANT_BIT 0 |
| 481 | #define SHORT_MOST_SIGNIFICANT_BIT 1 |
| 482 | |
| 483 | #define LONG_LEAST_SIGNIFICANT_BIT 0 |
| 484 | #define LONG_3RD_MOST_SIGNIFICANT_BIT 1 |
| 485 | #define LONG_2ND_MOST_SIGNIFICANT_BIT 2 |
| 486 | #define LONG_MOST_SIGNIFICANT_BIT 3 |
| 487 | |
| 488 | #define RTLVERLIB_DDI(x) Wdmlib##x |
| 489 | |
| 490 | typedef BOOLEAN |
| 491 | (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)( |
| 492 | IN ULONG Version); |
| 493 | |
| 494 | typedef BOOLEAN |
| 495 | (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)( |
| 496 | IN ULONG Version); |
| 497 | |
| 498 | /****************************************************************************** |
| 499 | * Kernel Types * |
| 500 | ******************************************************************************/ |
| 501 | |
| 502 | typedef UCHAR KIRQL, *PKIRQL; |
| 503 | typedef CCHAR KPROCESSOR_MODE; |
| 504 | typedef LONG KPRIORITY; |
| 505 | |
| 506 | typedef enum _MODE { |
| 507 | KernelMode, |
| 508 | UserMode, |
| 509 | MaximumMode |
| 510 | } MODE; |
| 511 | |
| 512 | #define CACHE_FULLY_ASSOCIATIVE 0xFF |
| 513 | #define MAXIMUM_SUSPEND_COUNT MAXCHAR |
| 514 | |
| 515 | #define EVENT_QUERY_STATE (0x0001) |
| 516 | #define EVENT_MODIFY_STATE (0x0002) |
| 517 | #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) |
| 518 | |
| 519 | #define LTP_PC_SMT 0x1 |
| 520 | |
| 521 | #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS) |
| 522 | #define SINGLE_GROUP_LEGACY_API 1 |
| 523 | #endif |
| 524 | |
| 525 | #define SEMAPHORE_QUERY_STATE (0x0001) |
| 526 | #define SEMAPHORE_MODIFY_STATE (0x0002) |
| 527 | #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) |
| 528 | |
| 529 | typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP { |
| 530 | RelationProcessorCore, |
| 531 | RelationNumaNode, |
| 532 | RelationCache, |
| 533 | RelationProcessorPackage, |
| 534 | RelationGroup, |
| 535 | RelationAll = 0xffff |
| 536 | } LOGICAL_PROCESSOR_RELATIONSHIP; |
| 537 | |
| 538 | typedef enum _PROCESSOR_CACHE_TYPE { |
| 539 | CacheUnified, |
| 540 | CacheInstruction, |
| 541 | CacheData, |
| 542 | CacheTrace |
| 543 | } PROCESSOR_CACHE_TYPE; |
| 544 | |
| 545 | typedef struct _CACHE_DESCRIPTOR { |
| 546 | UCHAR Level; |
| 547 | UCHAR Associativity; |
| 548 | USHORT LineSize; |
| 549 | ULONG Size; |
| 550 | PROCESSOR_CACHE_TYPE Type; |
| 551 | } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR; |
| 552 | |
| 553 | typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { |
| 554 | ULONG_PTR ProcessorMask; |
| 555 | LOGICAL_PROCESSOR_RELATIONSHIP Relationship; |
| 556 | _ANONYMOUS_UNION union { |
| 557 | struct { |
| 558 | UCHAR Flags; |
| 559 | } ProcessorCore; |
| 560 | struct { |
| 561 | ULONG NodeNumber; |
| 562 | } NumaNode; |
| 563 | CACHE_DESCRIPTOR Cache; |
| 564 | ULONGLONG Reserved[2]; |
| 565 | } DUMMYUNIONNAME; |
| 566 | } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; |
| 567 | |
| 568 | typedef struct _PROCESSOR_RELATIONSHIP { |
| 569 | UCHAR Flags; |
| 570 | UCHAR Reserved[21]; |
| 571 | USHORT GroupCount; |
| 572 | GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; |
| 573 | } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; |
| 574 | |
| 575 | typedef struct _NUMA_NODE_RELATIONSHIP { |
| 576 | ULONG NodeNumber; |
| 577 | UCHAR Reserved[20]; |
| 578 | GROUP_AFFINITY GroupMask; |
| 579 | } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP; |
| 580 | |
| 581 | typedef struct _CACHE_RELATIONSHIP { |
| 582 | UCHAR Level; |
| 583 | UCHAR Associativity; |
| 584 | USHORT LineSize; |
| 585 | ULONG CacheSize; |
| 586 | PROCESSOR_CACHE_TYPE Type; |
| 587 | UCHAR Reserved[20]; |
| 588 | GROUP_AFFINITY GroupMask; |
| 589 | } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP; |
| 590 | |
| 591 | typedef struct _PROCESSOR_GROUP_INFO { |
| 592 | UCHAR MaximumProcessorCount; |
| 593 | UCHAR ActiveProcessorCount; |
| 594 | UCHAR Reserved[38]; |
| 595 | KAFFINITY ActiveProcessorMask; |
| 596 | } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO; |
| 597 | |
| 598 | typedef struct _GROUP_RELATIONSHIP { |
| 599 | USHORT MaximumGroupCount; |
| 600 | USHORT ActiveGroupCount; |
| 601 | UCHAR Reserved[20]; |
| 602 | PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY]; |
| 603 | } GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP; |
| 604 | |
| 605 | typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { |
| 606 | LOGICAL_PROCESSOR_RELATIONSHIP Relationship; |
| 607 | ULONG Size; |
| 608 | _ANONYMOUS_UNION union { |
| 609 | PROCESSOR_RELATIONSHIP Processor; |
| 610 | NUMA_NODE_RELATIONSHIP NumaNode; |
| 611 | CACHE_RELATIONSHIP Cache; |
| 612 | GROUP_RELATIONSHIP Group; |
| 613 | } DUMMYUNIONNAME; |
| 614 | } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX; |
| 615 | |
| 616 | /* Processor features */ |
| 617 | #define PF_FLOATING_POINT_PRECISION_ERRATA 0 |
| 618 | #define PF_FLOATING_POINT_EMULATED 1 |
| 619 | #define PF_COMPARE_EXCHANGE_DOUBLE 2 |
| 620 | #define PF_MMX_INSTRUCTIONS_AVAILABLE 3 |
| 621 | #define PF_PPC_MOVEMEM_64BIT_OK 4 |
| 622 | #define PF_ALPHA_BYTE_INSTRUCTIONS 5 |
| 623 | #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 |
| 624 | #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 |
| 625 | #define PF_RDTSC_INSTRUCTION_AVAILABLE 8 |
| 626 | #define PF_PAE_ENABLED 9 |
| 627 | #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 |
| 628 | #define PF_SSE_DAZ_MODE_AVAILABLE 11 |
| 629 | #define PF_NX_ENABLED 12 |
| 630 | #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 |
| 631 | #define PF_COMPARE_EXCHANGE128 14 |
| 632 | #define PF_COMPARE64_EXCHANGE128 15 |
| 633 | #define PF_CHANNELS_ENABLED 16 |
| 634 | #define PF_XSAVE_ENABLED 17 |
| 635 | |
| 636 | #define MAXIMUM_WAIT_OBJECTS 64 |
| 637 | |
| 638 | #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject) |
| 639 | |
| 640 | #define ASSERT_DPC(Object) \ |
| 641 | ASSERT(((Object)->Type == 0) || \ |
| 642 | ((Object)->Type == DpcObject) || \ |
| 643 | ((Object)->Type == ThreadedDpcObject)) |
| 644 | |
| 645 | #define ASSERT_GATE(object) \ |
| 646 | NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \ |
| 647 | (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject)) |
| 648 | |
| 649 | #define ASSERT_DEVICE_QUEUE(Object) \ |
| 650 | NT_ASSERT((Object)->Type == DeviceQueueObject) |
| 651 | |
| 652 | #define ASSERT_TIMER(E) \ |
| 653 | NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \ |
| 654 | ((E)->Header.Type == TimerSynchronizationObject)) |
| 655 | |
| 656 | #define ASSERT_MUTANT(E) \ |
| 657 | NT_ASSERT((E)->Header.Type == MutantObject) |
| 658 | |
| 659 | #define ASSERT_SEMAPHORE(E) \ |
| 660 | NT_ASSERT((E)->Header.Type == SemaphoreObject) |
| 661 | |
| 662 | #define ASSERT_EVENT(E) \ |
| 663 | NT_ASSERT(((E)->Header.Type == NotificationEvent) || \ |
| 664 | ((E)->Header.Type == SynchronizationEvent)) |
| 665 | |
| 666 | #define DPC_NORMAL 0 |
| 667 | #define DPC_THREADED 1 |
| 668 | |
| 669 | #define GM_LOCK_BIT 0x1 |
| 670 | #define GM_LOCK_BIT_V 0x0 |
| 671 | #define GM_LOCK_WAITER_WOKEN 0x2 |
| 672 | #define GM_LOCK_WAITER_INC 0x4 |
| 673 | |
| 674 | #define LOCK_QUEUE_WAIT_BIT 0 |
| 675 | #define LOCK_QUEUE_OWNER_BIT 1 |
| 676 | |
| 677 | #define LOCK_QUEUE_WAIT 1 |
| 678 | #define LOCK_QUEUE_OWNER 2 |
| 679 | #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4 |
| 680 | #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT)) |
| 681 | |
| 682 | #define PROCESSOR_FEATURE_MAX 64 |
| 683 | |
| 684 | #define DBG_STATUS_CONTROL_C 1 |
| 685 | #define DBG_STATUS_SYSRQ 2 |
| 686 | #define DBG_STATUS_BUGCHECK_FIRST 3 |
| 687 | #define DBG_STATUS_BUGCHECK_SECOND 4 |
| 688 | #define DBG_STATUS_FATAL 5 |
| 689 | #define DBG_STATUS_DEBUG_CONTROL 6 |
| 690 | #define DBG_STATUS_WORKER 7 |
| 691 | |
| 692 | #if defined(_WIN64) |
| 693 | #define MAXIMUM_PROC_PER_GROUP 64 |
| 694 | #else |
| 695 | #define MAXIMUM_PROC_PER_GROUP 32 |
| 696 | #endif |
| 697 | #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP |
| 698 | |
| 699 | /* Exception Records */ |
| 700 | #define EXCEPTION_NONCONTINUABLE 1 |
| 701 | #define EXCEPTION_MAXIMUM_PARAMETERS 15 |
| 702 | |
| 703 | #define EXCEPTION_DIVIDED_BY_ZERO 0 |
| 704 | #define EXCEPTION_DEBUG 1 |
| 705 | #define EXCEPTION_NMI 2 |
| 706 | #define EXCEPTION_INT3 3 |
| 707 | #define EXCEPTION_BOUND_CHECK 5 |
| 708 | #define EXCEPTION_INVALID_OPCODE 6 |
| 709 | #define EXCEPTION_NPX_NOT_AVAILABLE 7 |
| 710 | #define EXCEPTION_DOUBLE_FAULT 8 |
| 711 | #define EXCEPTION_NPX_OVERRUN 9 |
| 712 | #define EXCEPTION_INVALID_TSS 0x0A |
| 713 | #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B |
| 714 | #define EXCEPTION_STACK_FAULT 0x0C |
| 715 | #define EXCEPTION_GP_FAULT 0x0D |
| 716 | #define EXCEPTION_RESERVED_TRAP 0x0F |
| 717 | #define EXCEPTION_NPX_ERROR 0x010 |
| 718 | #define EXCEPTION_ALIGNMENT_CHECK 0x011 |
| 719 | |
| 720 | typedef struct _EXCEPTION_RECORD { |
| 721 | NTSTATUS ExceptionCode; |
| 722 | ULONG ExceptionFlags; |
| 723 | struct _EXCEPTION_RECORD *ExceptionRecord; |
| 724 | PVOID ExceptionAddress; |
| 725 | ULONG NumberParameters; |
| 726 | ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; |
| 727 | } EXCEPTION_RECORD, *PEXCEPTION_RECORD; |
| 728 | |
| 729 | typedef struct _EXCEPTION_RECORD32 { |
| 730 | NTSTATUS ExceptionCode; |
| 731 | ULONG ExceptionFlags; |
| 732 | ULONG ExceptionRecord; |
| 733 | ULONG ExceptionAddress; |
| 734 | ULONG NumberParameters; |
| 735 | ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; |
| 736 | } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32; |
| 737 | |
| 738 | typedef struct _EXCEPTION_RECORD64 { |
| 739 | NTSTATUS ExceptionCode; |
| 740 | ULONG ExceptionFlags; |
| 741 | ULONG64 ExceptionRecord; |
| 742 | ULONG64 ExceptionAddress; |
| 743 | ULONG NumberParameters; |
| 744 | ULONG __unusedAlignment; |
| 745 | ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; |
| 746 | } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64; |
| 747 | |
| 748 | typedef struct _EXCEPTION_POINTERS { |
| 749 | PEXCEPTION_RECORD ExceptionRecord; |
| 750 | PCONTEXT ContextRecord; |
| 751 | } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; |
| 752 | |
| 753 | typedef enum _KBUGCHECK_CALLBACK_REASON { |
| 754 | KbCallbackInvalid, |
| 755 | KbCallbackReserved1, |
| 756 | KbCallbackSecondaryDumpData, |
| 757 | KbCallbackDumpIo, |
| 758 | KbCallbackAddPages, |
| 759 | KbCallbackSecondaryMultiPartDumpData, |
| 760 | KbCallbackRemovePages, |
| 761 | KbCallbackTriageDumpData |
| 762 | } KBUGCHECK_CALLBACK_REASON; |
| 763 | |
| 764 | struct _KBUGCHECK_REASON_CALLBACK_RECORD; |
| 765 | |
| 766 | typedef VOID |
| 767 | (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)( |
| 768 | IN KBUGCHECK_CALLBACK_REASON Reason, |
| 769 | IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, |
| 770 | IN OUT PVOID ReasonSpecificData, |
| 771 | IN ULONG ReasonSpecificDataLength); |
| 772 | typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE; |
| 773 | |
| 774 | typedef struct _KBUGCHECK_ADD_PAGES { |
| 775 | IN OUT PVOID Context; |
| 776 | IN OUT ULONG Flags; |
| 777 | IN ULONG BugCheckCode; |
| 778 | OUT ULONG_PTR Address; |
| 779 | OUT ULONG_PTR Count; |
| 780 | } KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES; |
| 781 | |
| 782 | typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA { |
| 783 | IN PVOID InBuffer; |
| 784 | IN ULONG InBufferLength; |
| 785 | IN ULONG MaximumAllowed; |
| 786 | OUT GUID Guid; |
| 787 | OUT PVOID OutBuffer; |
| 788 | OUT ULONG OutBufferLength; |
| 789 | } KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA; |
| 790 | |
| 791 | typedef enum _KBUGCHECK_DUMP_IO_TYPE { |
| 792 | KbDumpIoInvalid, |
| 793 | KbDumpIoHeader, |
| 794 | KbDumpIoBody, |
| 795 | KbDumpIoSecondaryData, |
| 796 | KbDumpIoComplete |
| 797 | } KBUGCHECK_DUMP_IO_TYPE; |
| 798 | |
| 799 | typedef struct _KBUGCHECK_DUMP_IO { |
| 800 | IN ULONG64 Offset; |
| 801 | IN PVOID Buffer; |
| 802 | IN ULONG BufferLength; |
| 803 | IN KBUGCHECK_DUMP_IO_TYPE Type; |
| 804 | } KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO; |
| 805 | |
| 806 | #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL |
| 807 | #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL |
| 808 | #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL |
| 809 | |
| 810 | typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD { |
| 811 | LIST_ENTRY Entry; |
| 812 | PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; |
| 813 | PUCHAR Component; |
| 814 | ULONG_PTR Checksum; |
| 815 | KBUGCHECK_CALLBACK_REASON Reason; |
| 816 | UCHAR State; |
| 817 | } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD; |
| 818 | |
| 819 | typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { |
| 820 | BufferEmpty, |
| 821 | BufferInserted, |
| 822 | BufferStarted, |
| 823 | BufferFinished, |
| 824 | BufferIncomplete |
| 825 | } KBUGCHECK_BUFFER_DUMP_STATE; |
| 826 | |
| 827 | typedef VOID |
| 828 | (NTAPI KBUGCHECK_CALLBACK_ROUTINE)( |
| 829 | IN PVOID Buffer, |
| 830 | IN ULONG Length); |
| 831 | typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE; |
| 832 | |
| 833 | typedef struct _KBUGCHECK_CALLBACK_RECORD { |
| 834 | LIST_ENTRY Entry; |
| 835 | PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; |
| 836 | PVOID Buffer; |
| 837 | ULONG Length; |
| 838 | PUCHAR Component; |
| 839 | ULONG_PTR Checksum; |
| 840 | UCHAR State; |
| 841 | } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; |
| 842 | |
| 843 | typedef BOOLEAN |
| 844 | (NTAPI NMI_CALLBACK)( |
| 845 | IN PVOID Context, |
| 846 | IN BOOLEAN Handled); |
| 847 | typedef NMI_CALLBACK *PNMI_CALLBACK; |
| 848 | |
| 849 | typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE { |
| 850 | KeProcessorAddStartNotify = 0, |
| 851 | KeProcessorAddCompleteNotify, |
| 852 | KeProcessorAddFailureNotify |
| 853 | } KE_PROCESSOR_CHANGE_NOTIFY_STATE; |
| 854 | |
| 855 | typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT { |
| 856 | KE_PROCESSOR_CHANGE_NOTIFY_STATE State; |
| 857 | ULONG NtNumber; |
| 858 | NTSTATUS Status; |
| 859 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 860 | PROCESSOR_NUMBER ProcNumber; |
| 861 | #endif |
| 862 | } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT; |
| 863 | |
| 864 | typedef VOID |
| 865 | (NTAPI PROCESSOR_CALLBACK_FUNCTION)( |
| 866 | IN PVOID CallbackContext, |
| 867 | IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext, |
| 868 | IN OUT PNTSTATUS OperationStatus); |
| 869 | typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION; |
| 870 | |
| 871 | #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1 |
| 872 | |
| 873 | #define INVALID_PROCESSOR_INDEX 0xffffffff |
| 874 | |
| 875 | typedef enum _KINTERRUPT_POLARITY { |
| 876 | InterruptPolarityUnknown, |
| 877 | InterruptActiveHigh, |
| 878 | InterruptRisingEdge = InterruptActiveHigh, |
| 879 | InterruptActiveLow, |
| 880 | InterruptFallingEdge = InterruptActiveLow, |
| 881 | #if NTDDI_VERSION >= NTDDI_WIN8 |
| 882 | InterruptActiveBoth, |
| 883 | #endif |
| 884 | #if NTDDI_VERSION >= NTDDI_WINBLUE |
| 885 | InterruptActiveBothTriggerLow = InterruptActiveBoth, |
| 886 | InterruptActiveBothTriggerHigh |
| 887 | #endif |
| 888 | } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY; |
| 889 | |
| 890 | typedef enum _KPROFILE_SOURCE { |
| 891 | ProfileTime, |
| 892 | ProfileAlignmentFixup, |
| 893 | ProfileTotalIssues, |
| 894 | ProfilePipelineDry, |
| 895 | ProfileLoadInstructions, |
| 896 | ProfilePipelineFrozen, |
| 897 | ProfileBranchInstructions, |
| 898 | ProfileTotalNonissues, |
| 899 | ProfileDcacheMisses, |
| 900 | ProfileIcacheMisses, |
| 901 | ProfileCacheMisses, |
| 902 | ProfileBranchMispredictions, |
| 903 | ProfileStoreInstructions, |
| 904 | ProfileFpInstructions, |
| 905 | ProfileIntegerInstructions, |
| 906 | Profile2Issue, |
| 907 | Profile3Issue, |
| 908 | Profile4Issue, |
| 909 | ProfileSpecialInstructions, |
| 910 | ProfileTotalCycles, |
| 911 | ProfileIcacheIssues, |
| 912 | ProfileDcacheAccesses, |
| 913 | ProfileMemoryBarrierCycles, |
| 914 | ProfileLoadLinkedIssues, |
| 915 | ProfileMaximum |
| 916 | } KPROFILE_SOURCE; |
| 917 | |
| 918 | typedef enum _KWAIT_REASON { |
| 919 | Executive, |
| 920 | FreePage, |
| 921 | PageIn, |
| 922 | PoolAllocation, |
| 923 | DelayExecution, |
| 924 | Suspended, |
| 925 | UserRequest, |
| 926 | WrExecutive, |
| 927 | WrFreePage, |
| 928 | WrPageIn, |
| 929 | WrPoolAllocation, |
| 930 | WrDelayExecution, |
| 931 | WrSuspended, |
| 932 | WrUserRequest, |
| 933 | WrSpare0, |
| 934 | WrQueue, |
| 935 | WrLpcReceive, |
| 936 | WrLpcReply, |
| 937 | WrVirtualMemory, |
| 938 | WrPageOut, |
| 939 | WrRendezvous, |
| 940 | WrKeyedEvent, |
| 941 | WrTerminated, |
| 942 | WrProcessInSwap, |
| 943 | WrCpuRateControl, |
| 944 | WrCalloutStack, |
| 945 | WrKernel, |
| 946 | WrResource, |
| 947 | WrPushLock, |
| 948 | WrMutex, |
| 949 | WrQuantumEnd, |
| 950 | WrDispatchInt, |
| 951 | WrPreempted, |
| 952 | WrYieldExecution, |
| 953 | WrFastMutex, |
| 954 | WrGuardedMutex, |
| 955 | WrRundown, |
| 956 | WrAlertByThreadId, |
| 957 | WrDeferredPreempt, |
| 958 | WrPhysicalFault, |
| 959 | MaximumWaitReason |
| 960 | } KWAIT_REASON; |
| 961 | |
| 962 | typedef struct _KWAIT_BLOCK { |
| 963 | LIST_ENTRY WaitListEntry; |
| 964 | struct _KTHREAD *Thread; |
| 965 | PVOID Object; |
| 966 | struct _KWAIT_BLOCK *NextWaitBlock; |
| 967 | USHORT WaitKey; |
| 968 | UCHAR WaitType; |
| 969 | volatile UCHAR BlockState; |
| 970 | #if defined(_WIN64) |
| 971 | LONG SpareLong; |
| 972 | #endif |
| 973 | } KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK; |
| 974 | |
| 975 | typedef enum _KINTERRUPT_MODE { |
| 976 | LevelSensitive, |
| 977 | Latched |
| 978 | } KINTERRUPT_MODE; |
| 979 | |
| 980 | #define THREAD_WAIT_OBJECTS 3 |
| 981 | |
| 982 | typedef VOID |
| 983 | (NTAPI KSTART_ROUTINE)( |
| 984 | IN PVOID StartContext); |
| 985 | typedef KSTART_ROUTINE *PKSTART_ROUTINE; |
| 986 | |
| 987 | typedef VOID |
| 988 | (NTAPI *PKINTERRUPT_ROUTINE)( |
| 989 | VOID); |
| 990 | |
| 991 | typedef BOOLEAN |
| 992 | (NTAPI KSERVICE_ROUTINE)( |
| 993 | IN struct _KINTERRUPT *Interrupt, |
| 994 | IN PVOID ServiceContext); |
| 995 | typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; |
| 996 | |
| 997 | typedef BOOLEAN |
| 998 | (NTAPI KMESSAGE_SERVICE_ROUTINE)( |
| 999 | IN struct _KINTERRUPT *Interrupt, |
| 1000 | IN PVOID ServiceContext, |
| 1001 | IN ULONG MessageID); |
| 1002 | typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE; |
| 1003 | |
| 1004 | typedef enum _KD_OPTION { |
| 1005 | KD_OPTION_SET_BLOCK_ENABLE, |
| 1006 | } KD_OPTION; |
| 1007 | |
| 1008 | typedef VOID |
| 1009 | (NTAPI *PKNORMAL_ROUTINE)( |
| 1010 | IN PVOID NormalContext OPTIONAL, |
| 1011 | IN PVOID SystemArgument1 OPTIONAL, |
| 1012 | IN PVOID SystemArgument2 OPTIONAL); |
| 1013 | |
| 1014 | typedef VOID |
| 1015 | (NTAPI *PKRUNDOWN_ROUTINE)( |
| 1016 | IN struct _KAPC *Apc); |
| 1017 | |
| 1018 | typedef VOID |
| 1019 | (NTAPI *PKKERNEL_ROUTINE)( |
| 1020 | IN struct _KAPC *Apc, |
| 1021 | IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL, |
| 1022 | IN OUT PVOID *NormalContext OPTIONAL, |
| 1023 | IN OUT PVOID *SystemArgument1 OPTIONAL, |
| 1024 | IN OUT PVOID *SystemArgument2 OPTIONAL); |
| 1025 | |
| 1026 | typedef struct _KAPC { |
| 1027 | UCHAR Type; |
| 1028 | UCHAR SpareByte0; |
| 1029 | UCHAR Size; |
| 1030 | UCHAR SpareByte1; |
| 1031 | ULONG SpareLong0; |
| 1032 | struct _KTHREAD *Thread; |
| 1033 | LIST_ENTRY ApcListEntry; |
| 1034 | PKKERNEL_ROUTINE KernelRoutine; |
| 1035 | PKRUNDOWN_ROUTINE RundownRoutine; |
| 1036 | PKNORMAL_ROUTINE NormalRoutine; |
| 1037 | PVOID NormalContext; |
| 1038 | PVOID SystemArgument1; |
| 1039 | PVOID SystemArgument2; |
| 1040 | CCHAR ApcStateIndex; |
| 1041 | KPROCESSOR_MODE ApcMode; |
| 1042 | BOOLEAN Inserted; |
| 1043 | } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; |
| 1044 | |
| 1045 | #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0) |
| 1046 | #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1) |
| 1047 | #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0) |
| 1048 | #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1) |
| 1049 | #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2) |
| 1050 | #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex) |
| 1051 | #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN)) |
| 1052 | |
| 1053 | typedef struct _KDEVICE_QUEUE_ENTRY { |
| 1054 | LIST_ENTRY DeviceListEntry; |
| 1055 | ULONG SortKey; |
| 1056 | BOOLEAN Inserted; |
| 1057 | } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, |
| 1058 | *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; |
| 1059 | |
| 1060 | typedef PVOID PKIPI_CONTEXT; |
| 1061 | |
| 1062 | typedef VOID |
| 1063 | (NTAPI *PKIPI_WORKER)( |
| 1064 | IN OUT PKIPI_CONTEXT PacketContext, |
| 1065 | IN PVOID Parameter1 OPTIONAL, |
| 1066 | IN PVOID Parameter2 OPTIONAL, |
| 1067 | IN PVOID Parameter3 OPTIONAL); |
| 1068 | |
| 1069 | typedef struct _KIPI_COUNTS { |
| 1070 | ULONG Freeze; |
| 1071 | ULONG Packet; |
| 1072 | ULONG DPC; |
| 1073 | ULONG APC; |
| 1074 | ULONG FlushSingleTb; |
| 1075 | ULONG FlushMultipleTb; |
| 1076 | ULONG FlushEntireTb; |
| 1077 | ULONG GenericCall; |
| 1078 | ULONG ChangeColor; |
| 1079 | ULONG SweepDcache; |
| 1080 | ULONG SweepIcache; |
| 1081 | ULONG SweepIcacheRange; |
| 1082 | ULONG FlushIoBuffers; |
| 1083 | ULONG GratuitousDPC; |
| 1084 | } KIPI_COUNTS, *PKIPI_COUNTS; |
| 1085 | |
| 1086 | typedef ULONG_PTR |
| 1087 | (NTAPI KIPI_BROADCAST_WORKER)( |
| 1088 | IN ULONG_PTR Argument); |
| 1089 | typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER; |
| 1090 | |
| 1091 | typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; |
| 1092 | |
| 1093 | typedef struct _KSPIN_LOCK_QUEUE { |
| 1094 | struct _KSPIN_LOCK_QUEUE *volatile Next; |
| 1095 | PKSPIN_LOCK volatile Lock; |
| 1096 | } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; |
| 1097 | |
| 1098 | typedef struct _KLOCK_QUEUE_HANDLE { |
| 1099 | KSPIN_LOCK_QUEUE LockQueue; |
| 1100 | KIRQL OldIrql; |
| 1101 | } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; |
| 1102 | |
| 1103 | #if defined(_AMD64_) |
| 1104 | |
| 1105 | typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER; |
| 1106 | |
| 1107 | #define LockQueueUnusedSpare0 0 |
| 1108 | #define LockQueueUnusedSpare1 1 |
| 1109 | #define LockQueueUnusedSpare2 2 |
| 1110 | #define LockQueueUnusedSpare3 3 |
| 1111 | #define LockQueueVacbLock 4 |
| 1112 | #define LockQueueMasterLock 5 |
| 1113 | #define LockQueueNonPagedPoolLock 6 |
| 1114 | #define LockQueueIoCancelLock 7 |
| 1115 | #define LockQueueUnusedSpare8 8 |
| 1116 | #define LockQueueIoVpbLock 9 |
| 1117 | #define LockQueueIoDatabaseLock 10 |
| 1118 | #define LockQueueIoCompletionLock 11 |
| 1119 | #define LockQueueNtfsStructLock 12 |
| 1120 | #define LockQueueAfdWorkQueueLock 13 |
| 1121 | #define LockQueueBcbLock 14 |
| 1122 | #define LockQueueUnusedSpare15 15 |
| 1123 | #define LockQueueUnusedSpare16 16 |
| 1124 | #define LockQueueMaximumLock 17 |
| 1125 | |
| 1126 | #else |
| 1127 | |
| 1128 | typedef enum _KSPIN_LOCK_QUEUE_NUMBER { |
| 1129 | LockQueueUnusedSpare0, |
| 1130 | LockQueueUnusedSpare1, |
| 1131 | LockQueueUnusedSpare2, |
| 1132 | LockQueueUnusedSpare3, |
| 1133 | LockQueueVacbLock, |
| 1134 | LockQueueMasterLock, |
| 1135 | LockQueueNonPagedPoolLock, |
| 1136 | LockQueueIoCancelLock, |
| 1137 | LockQueueUnusedSpare8, |
| 1138 | LockQueueIoVpbLock, |
| 1139 | LockQueueIoDatabaseLock, |
| 1140 | LockQueueIoCompletionLock, |
| 1141 | LockQueueNtfsStructLock, |
| 1142 | LockQueueAfdWorkQueueLock, |
| 1143 | LockQueueBcbLock, |
| 1144 | LockQueueUnusedSpare15, |
| 1145 | LockQueueUnusedSpare16, |
| 1146 | LockQueueMaximumLock = LockQueueUnusedSpare16 + 1 |
| 1147 | } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; |
| 1148 | |
| 1149 | #endif /* defined(_AMD64_) */ |
| 1150 | |
| 1151 | typedef VOID |
| 1152 | (NTAPI KDEFERRED_ROUTINE)( |
| 1153 | IN struct _KDPC *Dpc, |
| 1154 | IN PVOID DeferredContext OPTIONAL, |
| 1155 | IN PVOID SystemArgument1 OPTIONAL, |
| 1156 | IN PVOID SystemArgument2 OPTIONAL); |
| 1157 | typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE; |
| 1158 | |
| 1159 | typedef enum _KDPC_IMPORTANCE { |
| 1160 | LowImportance, |
| 1161 | MediumImportance, |
| 1162 | HighImportance, |
| 1163 | MediumHighImportance |
| 1164 | } KDPC_IMPORTANCE; |
| 1165 | |
| 1166 | typedef struct _KDPC { |
| 1167 | UCHAR Type; |
| 1168 | UCHAR Importance; |
| 1169 | volatile USHORT Number; |
| 1170 | LIST_ENTRY DpcListEntry; |
| 1171 | PKDEFERRED_ROUTINE DeferredRoutine; |
| 1172 | PVOID DeferredContext; |
| 1173 | PVOID SystemArgument1; |
| 1174 | PVOID SystemArgument2; |
| 1175 | volatile PVOID DpcData; |
| 1176 | } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; |
| 1177 | |
| 1178 | typedef struct _KDPC_WATCHDOG_INFORMATION { |
| 1179 | ULONG DpcTimeLimit; |
| 1180 | ULONG DpcTimeCount; |
| 1181 | ULONG DpcWatchdogLimit; |
| 1182 | ULONG DpcWatchdogCount; |
| 1183 | ULONG Reserved; |
| 1184 | } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION; |
| 1185 | |
| 1186 | typedef struct _KDEVICE_QUEUE { |
| 1187 | CSHORT Type; |
| 1188 | CSHORT Size; |
| 1189 | LIST_ENTRY DeviceListHead; |
| 1190 | KSPIN_LOCK Lock; |
| 1191 | # if defined(_AMD64_) |
| 1192 | _ANONYMOUS_UNION union { |
| 1193 | BOOLEAN Busy; |
| 1194 | _ANONYMOUS_STRUCT struct { |
| 1195 | LONG64 Reserved:8; |
| 1196 | LONG64 Hint:56; |
| 1197 | } DUMMYSTRUCTNAME; |
| 1198 | } DUMMYUNIONNAME; |
| 1199 | # else |
| 1200 | BOOLEAN Busy; |
| 1201 | # endif |
| 1202 | } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; |
| 1203 | |
| 1204 | #define TIMER_EXPIRED_INDEX_BITS 6 |
| 1205 | #define TIMER_PROCESSOR_INDEX_BITS 5 |
| 1206 | |
| 1207 | typedef struct _DISPATCHER_HEADER { |
| 1208 | _ANONYMOUS_UNION union { |
| 1209 | _ANONYMOUS_STRUCT struct { |
| 1210 | UCHAR Type; |
| 1211 | _ANONYMOUS_UNION union { |
| 1212 | _ANONYMOUS_UNION union { |
| 1213 | UCHAR TimerControlFlags; |
| 1214 | _ANONYMOUS_STRUCT struct { |
| 1215 | UCHAR Absolute:1; |
| 1216 | UCHAR Coalescable:1; |
| 1217 | UCHAR KeepShifting:1; |
| 1218 | UCHAR EncodedTolerableDelay:5; |
| 1219 | } DUMMYSTRUCTNAME; |
| 1220 | } DUMMYUNIONNAME; |
| 1221 | UCHAR Abandoned; |
| 1222 | #if (NTDDI_VERSION < NTDDI_WIN7) |
| 1223 | UCHAR NpxIrql; |
| 1224 | #endif |
| 1225 | BOOLEAN Signalling; |
| 1226 | } DUMMYUNIONNAME; |
| 1227 | _ANONYMOUS_UNION union { |
| 1228 | _ANONYMOUS_UNION union { |
| 1229 | UCHAR ThreadControlFlags; |
| 1230 | _ANONYMOUS_STRUCT struct { |
| 1231 | UCHAR CpuThrottled:1; |
| 1232 | UCHAR CycleProfiling:1; |
| 1233 | UCHAR CounterProfiling:1; |
| 1234 | UCHAR Reserved:5; |
| 1235 | } DUMMYSTRUCTNAME; |
| 1236 | } DUMMYUNIONNAME; |
| 1237 | UCHAR Size; |
| 1238 | UCHAR Hand; |
| 1239 | } DUMMYUNIONNAME2; |
| 1240 | _ANONYMOUS_UNION union { |
| 1241 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 1242 | _ANONYMOUS_UNION union { |
| 1243 | UCHAR TimerMiscFlags; |
| 1244 | _ANONYMOUS_STRUCT struct { |
| 1245 | #if !defined(_X86_) |
| 1246 | UCHAR Index:TIMER_EXPIRED_INDEX_BITS; |
| 1247 | #else |
| 1248 | UCHAR Index:1; |
| 1249 | UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS; |
| 1250 | #endif |
| 1251 | UCHAR Inserted:1; |
| 1252 | volatile UCHAR Expired:1; |
| 1253 | } DUMMYSTRUCTNAME; |
| 1254 | } DUMMYUNIONNAME; |
| 1255 | #else |
| 1256 | /* Pre Win7 compatibility fix to latest WDK */ |
| 1257 | UCHAR Inserted; |
| 1258 | #endif |
| 1259 | _ANONYMOUS_UNION union { |
| 1260 | BOOLEAN DebugActive; |
| 1261 | _ANONYMOUS_STRUCT struct { |
| 1262 | BOOLEAN ActiveDR7:1; |
| 1263 | BOOLEAN Instrumented:1; |
| 1264 | BOOLEAN Reserved2:4; |
| 1265 | BOOLEAN UmsScheduled:1; |
| 1266 | BOOLEAN UmsPrimary:1; |
| 1267 | } DUMMYSTRUCTNAME; |
| 1268 | } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */ |
| 1269 | BOOLEAN DpcActive; |
| 1270 | } DUMMYUNIONNAME3; |
| 1271 | } DUMMYSTRUCTNAME; |
| 1272 | volatile LONG Lock; |
| 1273 | } DUMMYUNIONNAME; |
| 1274 | LONG SignalState; |
| 1275 | LIST_ENTRY WaitListHead; |
| 1276 | } DISPATCHER_HEADER, *PDISPATCHER_HEADER; |
| 1277 | |
| 1278 | typedef struct _KEVENT { |
| 1279 | DISPATCHER_HEADER Header; |
| 1280 | } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; |
| 1281 | |
| 1282 | typedef struct _KSEMAPHORE { |
| 1283 | DISPATCHER_HEADER Header; |
| 1284 | LONG Limit; |
| 1285 | } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; |
| 1286 | |
| 1287 | #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG)) |
| 1288 | |
| 1289 | typedef struct _KGATE { |
| 1290 | DISPATCHER_HEADER Header; |
| 1291 | } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE; |
| 1292 | |
| 1293 | typedef struct _KGUARDED_MUTEX { |
| 1294 | volatile LONG Count; |
| 1295 | PKTHREAD Owner; |
| 1296 | ULONG Contention; |
| 1297 | KGATE Gate; |
| 1298 | _ANONYMOUS_UNION union { |
| 1299 | _ANONYMOUS_STRUCT struct { |
| 1300 | SHORT KernelApcDisable; |
| 1301 | SHORT SpecialApcDisable; |
| 1302 | } DUMMYSTRUCTNAME; |
| 1303 | ULONG CombinedApcDisable; |
| 1304 | } DUMMYUNIONNAME; |
| 1305 | } KGUARDED_MUTEX, *PKGUARDED_MUTEX; |
| 1306 | |
| 1307 | typedef struct _KMUTANT { |
| 1308 | DISPATCHER_HEADER Header; |
| 1309 | LIST_ENTRY MutantListEntry; |
| 1310 | struct _KTHREAD *RESTRICTED_POINTER OwnerThread; |
| 1311 | BOOLEAN Abandoned; |
| 1312 | UCHAR ApcDisable; |
| 1313 | } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; |
| 1314 | |
| 1315 | #define TIMER_TABLE_SIZE 512 |
| 1316 | #define TIMER_TABLE_SHIFT 9 |
| 1317 | |
| 1318 | typedef struct _KTIMER { |
| 1319 | DISPATCHER_HEADER Header; |
| 1320 | ULARGE_INTEGER DueTime; |
| 1321 | LIST_ENTRY TimerListEntry; |
| 1322 | struct _KDPC *Dpc; |
| 1323 | # if !defined(_X86_) |
| 1324 | ULONG Processor; |
| 1325 | # endif |
| 1326 | ULONG Period; |
| 1327 | } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; |
| 1328 | |
| 1329 | typedef enum _LOCK_OPERATION { |
| 1330 | IoReadAccess, |
| 1331 | IoWriteAccess, |
| 1332 | IoModifyAccess |
| 1333 | } LOCK_OPERATION; |
| 1334 | |
| 1335 | #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG)) |
| 1336 | |
| 1337 | typedef BOOLEAN (NTAPI KSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext); |
| 1338 | typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE; |
| 1339 | |
| 1340 | typedef enum _POOL_TYPE { |
| 1341 | NonPagedPool, |
| 1342 | NonPagedPoolExecute = NonPagedPool, |
| 1343 | PagedPool, |
| 1344 | NonPagedPoolMustSucceed, |
| 1345 | DontUseThisType, |
| 1346 | NonPagedPoolCacheAligned, |
| 1347 | PagedPoolCacheAligned, |
| 1348 | NonPagedPoolCacheAlignedMustS, |
| 1349 | MaxPoolType, |
| 1350 | NonPagedPoolBase = 0, |
| 1351 | NonPagedPoolBaseMustSucceed = 2, |
| 1352 | NonPagedPoolBaseCacheAligned = 4, |
| 1353 | NonPagedPoolBaseCacheAlignedMustS = 6, |
| 1354 | NonPagedPoolSession = 32, |
| 1355 | PagedPoolSession, |
| 1356 | NonPagedPoolMustSucceedSession, |
| 1357 | DontUseThisTypeSession, |
| 1358 | NonPagedPoolCacheAlignedSession, |
| 1359 | PagedPoolCacheAlignedSession, |
| 1360 | NonPagedPoolCacheAlignedMustSSession, |
| 1361 | NonPagedPoolNx = 512, |
| 1362 | NonPagedPoolNxCacheAligned = 516, |
| 1363 | NonPagedPoolSessionNx = 544, |
| 1364 | } POOL_TYPE; |
| 1365 | |
| 1366 | typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { |
| 1367 | StandardDesign, |
| 1368 | NEC98x86, |
| 1369 | EndAlternatives |
| 1370 | } ALTERNATIVE_ARCHITECTURE_TYPE; |
| 1371 | |
| 1372 | #ifndef _X86_ |
| 1373 | |
| 1374 | #ifndef IsNEC_98 |
| 1375 | #define IsNEC_98 (FALSE) |
| 1376 | #endif |
| 1377 | |
| 1378 | #ifndef IsNotNEC_98 |
| 1379 | #define IsNotNEC_98 (TRUE) |
| 1380 | #endif |
| 1381 | |
| 1382 | #ifndef SetNEC_98 |
| 1383 | #define SetNEC_98 |
| 1384 | #endif |
| 1385 | |
| 1386 | #ifndef SetNotNEC_98 |
| 1387 | #define SetNotNEC_98 |
| 1388 | #endif |
| 1389 | |
| 1390 | #endif |
| 1391 | |
| 1392 | typedef struct _KSYSTEM_TIME { |
| 1393 | ULONG LowPart; |
| 1394 | LONG High1Time; |
| 1395 | LONG High2Time; |
| 1396 | } KSYSTEM_TIME, *PKSYSTEM_TIME; |
| 1397 | |
| 1398 | typedef struct DECLSPEC_ALIGN(16) _M128A { |
| 1399 | ULONGLONG Low; |
| 1400 | LONGLONG High; |
| 1401 | } M128A, *PM128A; |
| 1402 | |
| 1403 | typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT { |
| 1404 | USHORT ControlWord; |
| 1405 | USHORT StatusWord; |
| 1406 | UCHAR TagWord; |
| 1407 | UCHAR Reserved1; |
| 1408 | USHORT ErrorOpcode; |
| 1409 | ULONG ErrorOffset; |
| 1410 | USHORT ErrorSelector; |
| 1411 | USHORT Reserved2; |
| 1412 | ULONG DataOffset; |
| 1413 | USHORT DataSelector; |
| 1414 | USHORT Reserved3; |
| 1415 | ULONG MxCsr; |
| 1416 | ULONG MxCsr_Mask; |
| 1417 | M128A FloatRegisters[8]; |
| 1418 | #if defined(_WIN64) |
| 1419 | M128A XmmRegisters[16]; |
| 1420 | UCHAR Reserved4[96]; |
| 1421 | #else |
| 1422 | M128A XmmRegisters[8]; |
| 1423 | UCHAR Reserved4[192]; |
| 1424 | ULONG StackControl[7]; |
| 1425 | ULONG Cr0NpxState; |
| 1426 | #endif |
| 1427 | } XSAVE_FORMAT, *PXSAVE_FORMAT; |
| 1428 | |
| 1429 | typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER { |
| 1430 | ULONG64 Mask; |
| 1431 | ULONG64 Reserved[7]; |
| 1432 | } XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER; |
| 1433 | |
| 1434 | typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA { |
| 1435 | XSAVE_FORMAT LegacyState; |
| 1436 | XSAVE_AREA_HEADER Header; |
| 1437 | } XSAVE_AREA, *PXSAVE_AREA; |
| 1438 | |
| 1439 | typedef struct _XSTATE_CONTEXT { |
| 1440 | ULONG64 Mask; |
| 1441 | ULONG Length; |
| 1442 | ULONG Reserved1; |
| 1443 | PXSAVE_AREA Area; |
| 1444 | #if defined(_X86_) |
| 1445 | ULONG Reserved2; |
| 1446 | #endif |
| 1447 | PVOID Buffer; |
| 1448 | #if defined(_X86_) |
| 1449 | ULONG Reserved3; |
| 1450 | #endif |
| 1451 | } XSTATE_CONTEXT, *PXSTATE_CONTEXT; |
| 1452 | |
| 1453 | typedef struct _XSTATE_SAVE { |
| 1454 | #if defined(_AMD64_) |
| 1455 | struct _XSTATE_SAVE* Prev; |
| 1456 | struct _KTHREAD* Thread; |
| 1457 | UCHAR Level; |
| 1458 | XSTATE_CONTEXT XStateContext; |
| 1459 | #elif defined(_IA64_) |
| 1460 | ULONG Dummy; |
| 1461 | #elif defined(_X86_) |
| 1462 | _ANONYMOUS_UNION union { |
| 1463 | _ANONYMOUS_STRUCT struct { |
| 1464 | LONG64 Reserved1; |
| 1465 | ULONG Reserved2; |
| 1466 | struct _XSTATE_SAVE* Prev; |
| 1467 | PXSAVE_AREA Reserved3; |
| 1468 | struct _KTHREAD* Thread; |
| 1469 | PVOID Reserved4; |
| 1470 | UCHAR Level; |
| 1471 | } DUMMYSTRUCTNAME; |
| 1472 | XSTATE_CONTEXT XStateContext; |
| 1473 | } DUMMYUNIONNAME; |
| 1474 | #endif |
| 1475 | } XSTATE_SAVE, *PXSTATE_SAVE; |
| 1476 | |
| 1477 | #ifdef _X86_ |
| 1478 | |
| 1479 | #define MAXIMUM_SUPPORTED_EXTENSION 512 |
| 1480 | |
| 1481 | #if !defined(__midl) && !defined(MIDL_PASS) |
| 1482 | C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION); |
| 1483 | #endif |
| 1484 | |
| 1485 | #endif /* _X86_ */ |
| 1486 | |
| 1487 | #define XSAVE_ALIGN 64 |
| 1488 | #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA) |
| 1489 | |
| 1490 | #if !defined(__midl) && !defined(MIDL_PASS) |
| 1491 | C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0); |
| 1492 | C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0); |
| 1493 | C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64); |
| 1494 | #endif |
| 1495 | |
| 1496 | typedef struct _CONTEXT_CHUNK { |
| 1497 | LONG Offset; |
| 1498 | ULONG Length; |
| 1499 | } CONTEXT_CHUNK, *PCONTEXT_CHUNK; |
| 1500 | |
| 1501 | typedef struct _CONTEXT_EX { |
| 1502 | CONTEXT_CHUNK All; |
| 1503 | CONTEXT_CHUNK Legacy; |
| 1504 | CONTEXT_CHUNK XState; |
| 1505 | } CONTEXT_EX, *PCONTEXT_EX; |
| 1506 | |
| 1507 | #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN) |
| 1508 | |
| 1509 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 1510 | extern NTSYSAPI volatile CCHAR KeNumberProcessors; |
| 1511 | #elif (NTDDI_VERSION >= NTDDI_WINXP) |
| 1512 | extern NTSYSAPI CCHAR KeNumberProcessors; |
| 1513 | #else |
| 1514 | extern PCCHAR KeNumberProcessors; |
| 1515 | #endif |
| 1516 | |
| 1517 | |
| 1518 | /****************************************************************************** |
| 1519 | * Memory manager Types * |
| 1520 | ******************************************************************************/ |
| 1521 | |
| 1522 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 1523 | typedef ULONG NODE_REQUIREMENT; |
| 1524 | #define MM_ANY_NODE_OK 0x80000000 |
| 1525 | #endif |
| 1526 | |
| 1527 | #define MM_DONT_ZERO_ALLOCATION 0x00000001 |
| 1528 | #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002 |
| 1529 | #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004 |
| 1530 | #define MM_ALLOCATE_NO_WAIT 0x00000008 |
| 1531 | #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010 |
| 1532 | #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020 |
| 1533 | |
| 1534 | #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 |
| 1535 | #define MDL_PAGES_LOCKED 0x0002 |
| 1536 | #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 |
| 1537 | #define MDL_ALLOCATED_FIXED_SIZE 0x0008 |
| 1538 | #define MDL_PARTIAL 0x0010 |
| 1539 | #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 |
| 1540 | #define MDL_IO_PAGE_READ 0x0040 |
| 1541 | #define MDL_WRITE_OPERATION 0x0080 |
| 1542 | #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 |
| 1543 | #define MDL_FREE_EXTRA_PTES 0x0200 |
| 1544 | #define MDL_DESCRIBES_AWE 0x0400 |
| 1545 | #define MDL_IO_SPACE 0x0800 |
| 1546 | #define MDL_NETWORK_HEADER 0x1000 |
| 1547 | #define MDL_MAPPING_CAN_FAIL 0x2000 |
| 1548 | #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 |
| 1549 | #define MDL_INTERNAL 0x8000 |
| 1550 | |
| 1551 | #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \ |
| 1552 | MDL_PAGES_LOCKED | \ |
| 1553 | MDL_SOURCE_IS_NONPAGED_POOL | \ |
| 1554 | MDL_PARTIAL_HAS_BEEN_MAPPED | \ |
| 1555 | MDL_PARENT_MAPPED_SYSTEM_VA | \ |
| 1556 | MDL_SYSTEM_VA | \ |
| 1557 | MDL_IO_SPACE) |
| 1558 | |
| 1559 | #define FLUSH_MULTIPLE_MAXIMUM 32 |
| 1560 | |
| 1561 | /* Section access rights */ |
| 1562 | #define SECTION_QUERY 0x0001 |
| 1563 | #define SECTION_MAP_WRITE 0x0002 |
| 1564 | #define SECTION_MAP_READ 0x0004 |
| 1565 | #define SECTION_MAP_EXECUTE 0x0008 |
| 1566 | #define SECTION_EXTEND_SIZE 0x0010 |
| 1567 | #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 |
| 1568 | |
| 1569 | #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \ |
| 1570 | SECTION_MAP_WRITE | \ |
| 1571 | SECTION_MAP_READ | \ |
| 1572 | SECTION_MAP_EXECUTE | \ |
| 1573 | SECTION_EXTEND_SIZE) |
| 1574 | |
| 1575 | #define SESSION_QUERY_ACCESS 0x0001 |
| 1576 | #define SESSION_MODIFY_ACCESS 0x0002 |
| 1577 | |
| 1578 | #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ |
| 1579 | SESSION_QUERY_ACCESS | \ |
| 1580 | SESSION_MODIFY_ACCESS) |
| 1581 | |
| 1582 | #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS |
| 1583 | |
| 1584 | #define PAGE_NOACCESS 0x01 |
| 1585 | #define PAGE_READONLY 0x02 |
| 1586 | #define PAGE_READWRITE 0x04 |
| 1587 | #define PAGE_WRITECOPY 0x08 |
| 1588 | #define PAGE_EXECUTE 0x10 |
| 1589 | #define PAGE_EXECUTE_READ 0x20 |
| 1590 | #define PAGE_EXECUTE_READWRITE 0x40 |
| 1591 | #define PAGE_EXECUTE_WRITECOPY 0x80 |
| 1592 | #define PAGE_GUARD 0x100 |
| 1593 | #define PAGE_NOCACHE 0x200 |
| 1594 | #define PAGE_WRITECOMBINE 0x400 |
| 1595 | |
| 1596 | #define MEM_COMMIT 0x1000 |
| 1597 | #define MEM_RESERVE 0x2000 |
| 1598 | #define MEM_DECOMMIT 0x4000 |
| 1599 | #define MEM_RELEASE 0x8000 |
| 1600 | #define MEM_FREE 0x10000 |
| 1601 | #define MEM_PRIVATE 0x20000 |
| 1602 | #define MEM_MAPPED 0x40000 |
| 1603 | #define MEM_RESET 0x80000 |
| 1604 | #define MEM_TOP_DOWN 0x100000 |
| 1605 | #define MEM_LARGE_PAGES 0x20000000 |
| 1606 | #define MEM_4MB_PAGES 0x80000000 |
| 1607 | |
| 1608 | #define SEC_RESERVE 0x4000000 |
| 1609 | #define SEC_COMMIT 0x8000000 |
| 1610 | #define SEC_LARGE_PAGES 0x80000000 |
| 1611 | |
| 1612 | /* Section map options */ |
| 1613 | typedef enum _SECTION_INHERIT { |
| 1614 | ViewShare = 1, |
| 1615 | ViewUnmap = 2 |
| 1616 | } SECTION_INHERIT; |
| 1617 | |
| 1618 | typedef ULONG PFN_COUNT; |
| 1619 | typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER; |
| 1620 | typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER; |
| 1621 | |
| 1622 | typedef struct _MDL { |
| 1623 | struct _MDL *Next; |
| 1624 | CSHORT Size; |
| 1625 | CSHORT MdlFlags; |
| 1626 | struct _EPROCESS *Process; |
| 1627 | PVOID MappedSystemVa; |
| 1628 | PVOID StartVa; |
| 1629 | ULONG ByteCount; |
| 1630 | ULONG ByteOffset; |
| 1631 | } MDL, *PMDL; |
| 1632 | typedef MDL *PMDLX; |
| 1633 | |
| 1634 | typedef enum _MEMORY_CACHING_TYPE_ORIG { |
| 1635 | MmFrameBufferCached = 2 |
| 1636 | } MEMORY_CACHING_TYPE_ORIG; |
| 1637 | |
| 1638 | typedef enum _MEMORY_CACHING_TYPE { |
| 1639 | MmNonCached = FALSE, |
| 1640 | MmCached = TRUE, |
| 1641 | MmWriteCombined = MmFrameBufferCached, |
| 1642 | MmHardwareCoherentCached, |
| 1643 | MmNonCachedUnordered, |
| 1644 | MmUSWCCached, |
| 1645 | MmMaximumCacheType, |
| 1646 | MmNotMapped = -1 |
| 1647 | } MEMORY_CACHING_TYPE; |
| 1648 | |
| 1649 | typedef enum _MM_PAGE_PRIORITY { |
| 1650 | LowPagePriority, |
| 1651 | NormalPagePriority = 16, |
| 1652 | HighPagePriority = 32 |
| 1653 | } MM_PAGE_PRIORITY; |
| 1654 | |
| 1655 | typedef enum _MM_SYSTEM_SIZE { |
| 1656 | MmSmallSystem, |
| 1657 | MmMediumSystem, |
| 1658 | MmLargeSystem |
| 1659 | } MM_SYSTEMSIZE; |
| 1660 | |
| 1661 | extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress; |
| 1662 | extern PVOID MmBadPointer; |
| 1663 | |
| 1664 | |
| 1665 | /****************************************************************************** |
| 1666 | * Executive Types * |
| 1667 | ******************************************************************************/ |
| 1668 | #define EX_RUNDOWN_ACTIVE 0x1 |
| 1669 | #define EX_RUNDOWN_COUNT_SHIFT 0x1 |
| 1670 | #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT) |
| 1671 | |
| 1672 | typedef struct _FAST_MUTEX { |
| 1673 | volatile LONG Count; |
| 1674 | PKTHREAD Owner; |
| 1675 | ULONG Contention; |
| 1676 | KEVENT Event; |
| 1677 | ULONG OldIrql; |
| 1678 | } FAST_MUTEX, *PFAST_MUTEX; |
| 1679 | |
| 1680 | typedef enum _SUITE_TYPE { |
| 1681 | SmallBusiness, |
| 1682 | Enterprise, |
| 1683 | BackOffice, |
| 1684 | CommunicationServer, |
| 1685 | TerminalServer, |
| 1686 | SmallBusinessRestricted, |
| 1687 | EmbeddedNT, |
| 1688 | DataCenter, |
| 1689 | SingleUserTS, |
| 1690 | Personal, |
| 1691 | Blade, |
| 1692 | EmbeddedRestricted, |
| 1693 | SecurityAppliance, |
| 1694 | StorageServer, |
| 1695 | ComputeServer, |
| 1696 | WHServer, |
| 1697 | MaxSuiteType |
| 1698 | } SUITE_TYPE; |
| 1699 | |
| 1700 | typedef enum _EX_POOL_PRIORITY { |
| 1701 | LowPoolPriority, |
| 1702 | LowPoolPrioritySpecialPoolOverrun = 8, |
| 1703 | LowPoolPrioritySpecialPoolUnderrun = 9, |
| 1704 | NormalPoolPriority = 16, |
| 1705 | NormalPoolPrioritySpecialPoolOverrun = 24, |
| 1706 | NormalPoolPrioritySpecialPoolUnderrun = 25, |
| 1707 | HighPoolPriority = 32, |
| 1708 | HighPoolPrioritySpecialPoolOverrun = 40, |
| 1709 | HighPoolPrioritySpecialPoolUnderrun = 41 |
| 1710 | } EX_POOL_PRIORITY; |
| 1711 | |
| 1712 | #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) |
| 1713 | #define LOOKASIDE_ALIGN |
| 1714 | #else |
| 1715 | #define LOOKASIDE_ALIGN DECLSPEC_CACHEALIGN |
| 1716 | #endif |
| 1717 | |
| 1718 | typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX; |
| 1719 | |
| 1720 | typedef PVOID |
| 1721 | (NTAPI *PALLOCATE_FUNCTION)( |
| 1722 | IN POOL_TYPE PoolType, |
| 1723 | IN SIZE_T NumberOfBytes, |
| 1724 | IN ULONG Tag); |
| 1725 | |
| 1726 | typedef PVOID |
| 1727 | (NTAPI *PALLOCATE_FUNCTION_EX)( |
| 1728 | IN POOL_TYPE PoolType, |
| 1729 | IN SIZE_T NumberOfBytes, |
| 1730 | IN ULONG Tag, |
| 1731 | IN OUT PLOOKASIDE_LIST_EX Lookaside); |
| 1732 | |
| 1733 | typedef VOID |
| 1734 | (NTAPI *PFREE_FUNCTION)( |
| 1735 | IN PVOID Buffer); |
| 1736 | |
| 1737 | typedef VOID |
| 1738 | (NTAPI *PFREE_FUNCTION_EX)( |
| 1739 | IN PVOID Buffer, |
| 1740 | IN OUT PLOOKASIDE_LIST_EX Lookaside); |
| 1741 | |
| 1742 | typedef VOID |
| 1743 | (NTAPI CALLBACK_FUNCTION)( |
| 1744 | IN PVOID CallbackContext OPTIONAL, |
| 1745 | IN PVOID Argument1 OPTIONAL, |
| 1746 | IN PVOID Argument2 OPTIONAL); |
| 1747 | typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION; |
| 1748 | |
| 1749 | #define GENERAL_LOOKASIDE_LAYOUT \ |
| 1750 | _ANONYMOUS_UNION union { \ |
| 1751 | SLIST_HEADER ListHead; \ |
| 1752 | SINGLE_LIST_ENTRY SingleListHead; \ |
| 1753 | } DUMMYUNIONNAME; \ |
| 1754 | USHORT Depth; \ |
| 1755 | USHORT MaximumDepth; \ |
| 1756 | ULONG TotalAllocates; \ |
| 1757 | _ANONYMOUS_UNION union { \ |
| 1758 | ULONG AllocateMisses; \ |
| 1759 | ULONG AllocateHits; \ |
| 1760 | } DUMMYUNIONNAME2; \ |
| 1761 | ULONG TotalFrees; \ |
| 1762 | _ANONYMOUS_UNION union { \ |
| 1763 | ULONG FreeMisses; \ |
| 1764 | ULONG FreeHits; \ |
| 1765 | } DUMMYUNIONNAME3; \ |
| 1766 | POOL_TYPE Type; \ |
| 1767 | ULONG Tag; \ |
| 1768 | ULONG Size; \ |
| 1769 | _ANONYMOUS_UNION union { \ |
| 1770 | PALLOCATE_FUNCTION_EX AllocateEx; \ |
| 1771 | PALLOCATE_FUNCTION Allocate; \ |
| 1772 | } DUMMYUNIONNAME4; \ |
| 1773 | _ANONYMOUS_UNION union { \ |
| 1774 | PFREE_FUNCTION_EX FreeEx; \ |
| 1775 | PFREE_FUNCTION Free; \ |
| 1776 | } DUMMYUNIONNAME5; \ |
| 1777 | LIST_ENTRY ListEntry; \ |
| 1778 | ULONG LastTotalAllocates; \ |
| 1779 | _ANONYMOUS_UNION union { \ |
| 1780 | ULONG LastAllocateMisses; \ |
| 1781 | ULONG LastAllocateHits; \ |
| 1782 | } DUMMYUNIONNAME6; \ |
| 1783 | ULONG Future[2]; |
| 1784 | |
| 1785 | typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE { |
| 1786 | GENERAL_LOOKASIDE_LAYOUT |
| 1787 | } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; |
| 1788 | |
| 1789 | typedef struct _GENERAL_LOOKASIDE_POOL { |
| 1790 | GENERAL_LOOKASIDE_LAYOUT |
| 1791 | } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL; |
| 1792 | |
| 1793 | #define LOOKASIDE_CHECK(f) \ |
| 1794 | C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f)) |
| 1795 | |
| 1796 | LOOKASIDE_CHECK(TotalFrees); |
| 1797 | LOOKASIDE_CHECK(Tag); |
| 1798 | LOOKASIDE_CHECK(Future); |
| 1799 | |
| 1800 | typedef struct _PAGED_LOOKASIDE_LIST { |
| 1801 | GENERAL_LOOKASIDE L; |
| 1802 | #if !defined(_AMD64_) && !defined(_IA64_) |
| 1803 | FAST_MUTEX Lock__ObsoleteButDoNotDelete; |
| 1804 | #endif |
| 1805 | } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; |
| 1806 | |
| 1807 | typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST { |
| 1808 | GENERAL_LOOKASIDE L; |
| 1809 | #if !defined(_AMD64_) && !defined(_IA64_) |
| 1810 | KSPIN_LOCK Lock__ObsoleteButDoNotDelete; |
| 1811 | #endif |
| 1812 | } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; |
| 1813 | |
| 1814 | #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next)) |
| 1815 | |
| 1816 | typedef struct _LOOKASIDE_LIST_EX { |
| 1817 | GENERAL_LOOKASIDE_POOL L; |
| 1818 | } LOOKASIDE_LIST_EX; |
| 1819 | |
| 1820 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 1821 | |
| 1822 | #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL |
| 1823 | #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL |
| 1824 | |
| 1825 | #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256 |
| 1826 | #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024 |
| 1827 | |
| 1828 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 1829 | |
| 1830 | typedef struct _EX_RUNDOWN_REF { |
| 1831 | _ANONYMOUS_UNION union { |
| 1832 | volatile ULONG_PTR Count; |
| 1833 | volatile PVOID Ptr; |
| 1834 | } DUMMYUNIONNAME; |
| 1835 | } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF; |
| 1836 | |
| 1837 | typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE; |
| 1838 | |
| 1839 | typedef enum _WORK_QUEUE_TYPE { |
| 1840 | CriticalWorkQueue, |
| 1841 | DelayedWorkQueue, |
| 1842 | HyperCriticalWorkQueue, |
| 1843 | NormalWorkQueue, |
| 1844 | BackgroundWorkQueue, |
| 1845 | RealTimeWorkQueue, |
| 1846 | SuperCriticalWorkQueue, |
| 1847 | MaximumWorkQueue, |
| 1848 | CustomPriorityWorkQueue = 32 |
| 1849 | } WORK_QUEUE_TYPE; |
| 1850 | |
| 1851 | typedef VOID |
| 1852 | (NTAPI WORKER_THREAD_ROUTINE)( |
| 1853 | IN PVOID Parameter); |
| 1854 | typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE; |
| 1855 | |
| 1856 | typedef struct _WORK_QUEUE_ITEM { |
| 1857 | LIST_ENTRY List; |
| 1858 | PWORKER_THREAD_ROUTINE WorkerRoutine; |
| 1859 | volatile PVOID Parameter; |
| 1860 | } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; |
| 1861 | |
| 1862 | typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD; |
| 1863 | |
| 1864 | typedef struct _OWNER_ENTRY { |
| 1865 | ERESOURCE_THREAD OwnerThread; |
| 1866 | _ANONYMOUS_UNION union { |
| 1867 | _ANONYMOUS_STRUCT struct { |
| 1868 | ULONG IoPriorityBoosted:1; |
| 1869 | ULONG OwnerReferenced:1; |
| 1870 | ULONG OwnerCount:30; |
| 1871 | } DUMMYSTRUCTNAME; |
| 1872 | ULONG TableSize; |
| 1873 | } DUMMYUNIONNAME; |
| 1874 | } OWNER_ENTRY, *POWNER_ENTRY; |
| 1875 | |
| 1876 | typedef struct _ERESOURCE { |
| 1877 | LIST_ENTRY SystemResourcesList; |
| 1878 | POWNER_ENTRY OwnerTable; |
| 1879 | SHORT ActiveCount; |
| 1880 | USHORT Flag; |
| 1881 | volatile PKSEMAPHORE SharedWaiters; |
| 1882 | volatile PKEVENT ExclusiveWaiters; |
| 1883 | OWNER_ENTRY OwnerEntry; |
| 1884 | ULONG ActiveEntries; |
| 1885 | ULONG ContentionCount; |
| 1886 | ULONG NumberOfSharedWaiters; |
| 1887 | ULONG NumberOfExclusiveWaiters; |
| 1888 | #if defined(_WIN64) |
| 1889 | PVOID Reserved2; |
| 1890 | #endif |
| 1891 | _ANONYMOUS_UNION union { |
| 1892 | PVOID Address; |
| 1893 | ULONG_PTR CreatorBackTraceIndex; |
| 1894 | } DUMMYUNIONNAME; |
| 1895 | KSPIN_LOCK SpinLock; |
| 1896 | } ERESOURCE, *PERESOURCE; |
| 1897 | |
| 1898 | /* ERESOURCE.Flag */ |
| 1899 | #define ResourceNeverExclusive 0x0010 |
| 1900 | #define ResourceReleaseByOtherThread 0x0020 |
| 1901 | #define ResourceOwnedExclusive 0x0080 |
| 1902 | |
| 1903 | #define RESOURCE_HASH_TABLE_SIZE 64 |
| 1904 | |
| 1905 | typedef struct _RESOURCE_HASH_ENTRY { |
| 1906 | LIST_ENTRY ListEntry; |
| 1907 | PVOID Address; |
| 1908 | ULONG ContentionCount; |
| 1909 | ULONG Number; |
| 1910 | } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY; |
| 1911 | |
| 1912 | typedef struct _RESOURCE_PERFORMANCE_DATA { |
| 1913 | ULONG ActiveResourceCount; |
| 1914 | ULONG TotalResourceCount; |
| 1915 | ULONG ExclusiveAcquire; |
| 1916 | ULONG SharedFirstLevel; |
| 1917 | ULONG SharedSecondLevel; |
| 1918 | ULONG StarveFirstLevel; |
| 1919 | ULONG StarveSecondLevel; |
| 1920 | ULONG WaitForExclusive; |
| 1921 | ULONG OwnerTableExpands; |
| 1922 | ULONG MaximumTableExpand; |
| 1923 | LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE]; |
| 1924 | } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA; |
| 1925 | |
| 1926 | /* Global debug flag */ |
| 1927 | #if DEVL |
| 1928 | extern ULONG NtGlobalFlag; |
| 1929 | #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName)) |
| 1930 | #else |
| 1931 | #define IF_NTOS_DEBUG(FlagName) if(FALSE) |
| 1932 | #endif |
| 1933 | |
| 1934 | /****************************************************************************** |
| 1935 | * Security Manager Types * |
| 1936 | ******************************************************************************/ |
| 1937 | |
| 1938 | /* Simple types */ |
| 1939 | typedef PVOID PSECURITY_DESCRIPTOR; |
| 1940 | typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION; |
| 1941 | typedef ULONG ACCESS_MASK, *PACCESS_MASK; |
| 1942 | typedef PVOID PACCESS_TOKEN; |
| 1943 | typedef PVOID PSID; |
| 1944 | |
| 1945 | #define DELETE 0x00010000L |
| 1946 | #define READ_CONTROL 0x00020000L |
| 1947 | #define WRITE_DAC 0x00040000L |
| 1948 | #define WRITE_OWNER 0x00080000L |
| 1949 | #define SYNCHRONIZE 0x00100000L |
| 1950 | #define STANDARD_RIGHTS_REQUIRED 0x000F0000L |
| 1951 | #define STANDARD_RIGHTS_READ READ_CONTROL |
| 1952 | #define STANDARD_RIGHTS_WRITE READ_CONTROL |
| 1953 | #define STANDARD_RIGHTS_EXECUTE READ_CONTROL |
| 1954 | #define STANDARD_RIGHTS_ALL 0x001F0000L |
| 1955 | #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL |
| 1956 | #define ACCESS_SYSTEM_SECURITY 0x01000000L |
| 1957 | #define MAXIMUM_ALLOWED 0x02000000L |
| 1958 | #define GENERIC_READ 0x80000000L |
| 1959 | #define GENERIC_WRITE 0x40000000L |
| 1960 | #define GENERIC_EXECUTE 0x20000000L |
| 1961 | #define GENERIC_ALL 0x10000000L |
| 1962 | |
| 1963 | typedef struct _GENERIC_MAPPING { |
| 1964 | ACCESS_MASK GenericRead; |
| 1965 | ACCESS_MASK GenericWrite; |
| 1966 | ACCESS_MASK GenericExecute; |
| 1967 | ACCESS_MASK GenericAll; |
| 1968 | } GENERIC_MAPPING, *PGENERIC_MAPPING; |
| 1969 | |
| 1970 | #define ACL_REVISION 2 |
| 1971 | #define ACL_REVISION_DS 4 |
| 1972 | |
| 1973 | #define ACL_REVISION1 1 |
| 1974 | #define ACL_REVISION2 2 |
| 1975 | #define ACL_REVISION3 3 |
| 1976 | #define ACL_REVISION4 4 |
| 1977 | #define MIN_ACL_REVISION ACL_REVISION2 |
| 1978 | #define MAX_ACL_REVISION ACL_REVISION4 |
| 1979 | |
| 1980 | typedef struct _ACL { |
| 1981 | UCHAR AclRevision; |
| 1982 | UCHAR Sbz1; |
| 1983 | USHORT AclSize; |
| 1984 | USHORT AceCount; |
| 1985 | USHORT Sbz2; |
| 1986 | } ACL, *PACL; |
| 1987 | |
| 1988 | /* Current security descriptor revision value */ |
| 1989 | #define SECURITY_DESCRIPTOR_REVISION (1) |
| 1990 | #define SECURITY_DESCRIPTOR_REVISION1 (1) |
| 1991 | |
| 1992 | /* Privilege attributes */ |
| 1993 | #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L) |
| 1994 | #define SE_PRIVILEGE_ENABLED (0x00000002L) |
| 1995 | #define SE_PRIVILEGE_REMOVED (0X00000004L) |
| 1996 | #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L) |
| 1997 | |
| 1998 | #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \ |
| 1999 | SE_PRIVILEGE_ENABLED | \ |
| 2000 | SE_PRIVILEGE_REMOVED | \ |
| 2001 | SE_PRIVILEGE_USED_FOR_ACCESS) |
| 2002 | |
| 2003 | #include <pshpack4.h> |
| 2004 | typedef struct _LUID_AND_ATTRIBUTES { |
| 2005 | LUID Luid; |
| 2006 | ULONG Attributes; |
| 2007 | } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; |
| 2008 | #include <poppack.h> |
| 2009 | |
| 2010 | typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; |
| 2011 | typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; |
| 2012 | |
| 2013 | /* Privilege sets */ |
| 2014 | #define PRIVILEGE_SET_ALL_NECESSARY (1) |
| 2015 | |
| 2016 | typedef struct _PRIVILEGE_SET { |
| 2017 | ULONG PrivilegeCount; |
| 2018 | ULONG Control; |
| 2019 | LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; |
| 2020 | } PRIVILEGE_SET,*PPRIVILEGE_SET; |
| 2021 | |
| 2022 | typedef enum _SECURITY_IMPERSONATION_LEVEL { |
| 2023 | SecurityAnonymous, |
| 2024 | SecurityIdentification, |
| 2025 | SecurityImpersonation, |
| 2026 | SecurityDelegation |
| 2027 | } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; |
| 2028 | |
| 2029 | #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation |
| 2030 | #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous |
| 2031 | #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation |
| 2032 | #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL)) |
| 2033 | |
| 2034 | #define SECURITY_DYNAMIC_TRACKING (TRUE) |
| 2035 | #define SECURITY_STATIC_TRACKING (FALSE) |
| 2036 | |
| 2037 | typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; |
| 2038 | |
| 2039 | typedef struct _SECURITY_QUALITY_OF_SERVICE { |
| 2040 | ULONG Length; |
| 2041 | SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; |
| 2042 | SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; |
| 2043 | BOOLEAN EffectiveOnly; |
| 2044 | } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; |
| 2045 | |
| 2046 | typedef struct _SE_IMPERSONATION_STATE { |
| 2047 | PACCESS_TOKEN Token; |
| 2048 | BOOLEAN CopyOnOpen; |
| 2049 | BOOLEAN EffectiveOnly; |
| 2050 | SECURITY_IMPERSONATION_LEVEL Level; |
| 2051 | } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE; |
| 2052 | |
| 2053 | #define OWNER_SECURITY_INFORMATION (0x00000001L) |
| 2054 | #define GROUP_SECURITY_INFORMATION (0x00000002L) |
| 2055 | #define DACL_SECURITY_INFORMATION (0x00000004L) |
| 2056 | #define SACL_SECURITY_INFORMATION (0x00000008L) |
| 2057 | #define LABEL_SECURITY_INFORMATION (0x00000010L) |
| 2058 | |
| 2059 | #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L) |
| 2060 | #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L) |
| 2061 | #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L) |
| 2062 | #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L) |
| 2063 | |
| 2064 | typedef enum _SECURITY_OPERATION_CODE { |
| 2065 | SetSecurityDescriptor, |
| 2066 | QuerySecurityDescriptor, |
| 2067 | DeleteSecurityDescriptor, |
| 2068 | AssignSecurityDescriptor |
| 2069 | } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; |
| 2070 | |
| 2071 | #define INITIAL_PRIVILEGE_COUNT 3 |
| 2072 | |
| 2073 | typedef struct _INITIAL_PRIVILEGE_SET { |
| 2074 | ULONG PrivilegeCount; |
| 2075 | ULONG Control; |
| 2076 | LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; |
| 2077 | } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; |
| 2078 | |
| 2079 | #define SE_MIN_WELL_KNOWN_PRIVILEGE 2 |
| 2080 | #define SE_CREATE_TOKEN_PRIVILEGE 2 |
| 2081 | #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3 |
| 2082 | #define SE_LOCK_MEMORY_PRIVILEGE 4 |
| 2083 | #define SE_INCREASE_QUOTA_PRIVILEGE 5 |
| 2084 | #define SE_MACHINE_ACCOUNT_PRIVILEGE 6 |
| 2085 | #define SE_TCB_PRIVILEGE 7 |
| 2086 | #define SE_SECURITY_PRIVILEGE 8 |
| 2087 | #define SE_TAKE_OWNERSHIP_PRIVILEGE 9 |
| 2088 | #define SE_LOAD_DRIVER_PRIVILEGE 10 |
| 2089 | #define SE_SYSTEM_PROFILE_PRIVILEGE 11 |
| 2090 | #define SE_SYSTEMTIME_PRIVILEGE 12 |
| 2091 | #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13 |
| 2092 | #define SE_INC_BASE_PRIORITY_PRIVILEGE 14 |
| 2093 | #define SE_CREATE_PAGEFILE_PRIVILEGE 15 |
| 2094 | #define SE_CREATE_PERMANENT_PRIVILEGE 16 |
| 2095 | #define SE_BACKUP_PRIVILEGE 17 |
| 2096 | #define SE_RESTORE_PRIVILEGE 18 |
| 2097 | #define SE_SHUTDOWN_PRIVILEGE 19 |
| 2098 | #define SE_DEBUG_PRIVILEGE 20 |
| 2099 | #define SE_AUDIT_PRIVILEGE 21 |
| 2100 | #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22 |
| 2101 | #define SE_CHANGE_NOTIFY_PRIVILEGE 23 |
| 2102 | #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24 |
| 2103 | #define SE_UNDOCK_PRIVILEGE 25 |
| 2104 | #define SE_SYNC_AGENT_PRIVILEGE 26 |
| 2105 | #define SE_ENABLE_DELEGATION_PRIVILEGE 27 |
| 2106 | #define SE_MANAGE_VOLUME_PRIVILEGE 28 |
| 2107 | #define SE_IMPERSONATE_PRIVILEGE 29 |
| 2108 | #define SE_CREATE_GLOBAL_PRIVILEGE 30 |
| 2109 | #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31 |
| 2110 | #define SE_RELABEL_PRIVILEGE 32 |
| 2111 | #define SE_INC_WORKING_SET_PRIVILEGE 33 |
| 2112 | #define SE_TIME_ZONE_PRIVILEGE 34 |
| 2113 | #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35 |
| 2114 | #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE |
| 2115 | |
| 2116 | typedef struct _SECURITY_SUBJECT_CONTEXT { |
| 2117 | PACCESS_TOKEN ClientToken; |
| 2118 | SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; |
| 2119 | PACCESS_TOKEN PrimaryToken; |
| 2120 | PVOID ProcessAuditId; |
| 2121 | } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; |
| 2122 | |
| 2123 | typedef struct _ACCESS_STATE { |
| 2124 | LUID OperationID; |
| 2125 | BOOLEAN SecurityEvaluated; |
| 2126 | BOOLEAN GenerateAudit; |
| 2127 | BOOLEAN GenerateOnClose; |
| 2128 | BOOLEAN PrivilegesAllocated; |
| 2129 | ULONG Flags; |
| 2130 | ACCESS_MASK RemainingDesiredAccess; |
| 2131 | ACCESS_MASK PreviouslyGrantedAccess; |
| 2132 | ACCESS_MASK OriginalDesiredAccess; |
| 2133 | SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; |
| 2134 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 2135 | PVOID AuxData; |
| 2136 | union { |
| 2137 | INITIAL_PRIVILEGE_SET InitialPrivilegeSet; |
| 2138 | PRIVILEGE_SET PrivilegeSet; |
| 2139 | } Privileges; |
| 2140 | BOOLEAN AuditPrivileges; |
| 2141 | UNICODE_STRING ObjectName; |
| 2142 | UNICODE_STRING ObjectTypeName; |
| 2143 | } ACCESS_STATE, *PACCESS_STATE; |
| 2144 | |
| 2145 | typedef VOID |
| 2146 | (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)( |
| 2147 | IN PVOID Vcb, |
| 2148 | IN PSECURITY_DESCRIPTOR SecurityDescriptor); |
| 2149 | |
| 2150 | #ifndef _NTLSA_IFS_ |
| 2151 | |
| 2152 | #ifndef _NTLSA_AUDIT_ |
| 2153 | #define _NTLSA_AUDIT_ |
| 2154 | |
| 2155 | #define SE_MAX_AUDIT_PARAMETERS 32 |
| 2156 | #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28 |
| 2157 | |
| 2158 | #define SE_ADT_OBJECT_ONLY 0x1 |
| 2159 | |
| 2160 | #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001 |
| 2161 | #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002 |
| 2162 | #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004 |
| 2163 | #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008 |
| 2164 | #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010 |
| 2165 | |
| 2166 | #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \ |
| 2167 | ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \ |
| 2168 | (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) ) |
| 2169 | |
| 2170 | typedef enum _SE_ADT_PARAMETER_TYPE { |
| 2171 | SeAdtParmTypeNone = 0, |
| 2172 | SeAdtParmTypeString, |
| 2173 | SeAdtParmTypeFileSpec, |
| 2174 | SeAdtParmTypeUlong, |
| 2175 | SeAdtParmTypeSid, |
| 2176 | SeAdtParmTypeLogonId, |
| 2177 | SeAdtParmTypeNoLogonId, |
| 2178 | SeAdtParmTypeAccessMask, |
| 2179 | SeAdtParmTypePrivs, |
| 2180 | SeAdtParmTypeObjectTypes, |
| 2181 | SeAdtParmTypeHexUlong, |
| 2182 | SeAdtParmTypePtr, |
| 2183 | SeAdtParmTypeTime, |
| 2184 | SeAdtParmTypeGuid, |
| 2185 | SeAdtParmTypeLuid, |
| 2186 | SeAdtParmTypeHexInt64, |
| 2187 | SeAdtParmTypeStringList, |
| 2188 | SeAdtParmTypeSidList, |
| 2189 | SeAdtParmTypeDuration, |
| 2190 | SeAdtParmTypeUserAccountControl, |
| 2191 | SeAdtParmTypeNoUac, |
| 2192 | SeAdtParmTypeMessage, |
| 2193 | SeAdtParmTypeDateTime, |
| 2194 | SeAdtParmTypeSockAddr, |
| 2195 | SeAdtParmTypeSD, |
| 2196 | SeAdtParmTypeLogonHours, |
| 2197 | SeAdtParmTypeLogonIdNoSid, |
| 2198 | SeAdtParmTypeUlongNoConv, |
| 2199 | SeAdtParmTypeSockAddrNoPort, |
| 2200 | SeAdtParmTypeAccessReason, |
| 2201 | SeAdtParmTypeStagingReason, |
| 2202 | SeAdtParmTypeResourceAttribute, |
| 2203 | SeAdtParmTypeClaims, |
| 2204 | SeAdtParmTypeLogonIdAsSid, |
| 2205 | SeAdtParmTypeMultiSzString, |
| 2206 | SeAdtParmTypeLogonIdEx |
| 2207 | } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE; |
| 2208 | |
| 2209 | typedef struct _SE_ADT_OBJECT_TYPE { |
| 2210 | GUID ObjectType; |
| 2211 | USHORT Flags; |
| 2212 | USHORT Level; |
| 2213 | ACCESS_MASK AccessMask; |
| 2214 | } SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE; |
| 2215 | |
| 2216 | typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY { |
| 2217 | SE_ADT_PARAMETER_TYPE Type; |
| 2218 | ULONG Length; |
| 2219 | ULONG_PTR Data[2]; |
| 2220 | PVOID Address; |
| 2221 | } SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY; |
| 2222 | |
| 2223 | typedef struct _SE_ADT_ACCESS_REASON { |
| 2224 | ACCESS_MASK AccessMask; |
| 2225 | ULONG AccessReasons[32]; |
| 2226 | ULONG ObjectTypeIndex; |
| 2227 | ULONG AccessGranted; |
| 2228 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 2229 | } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON; |
| 2230 | |
| 2231 | typedef struct _SE_ADT_PARAMETER_ARRAY { |
| 2232 | ULONG CategoryId; |
| 2233 | ULONG AuditId; |
| 2234 | ULONG ParameterCount; |
| 2235 | ULONG Length; |
| 2236 | USHORT FlatSubCategoryId; |
| 2237 | USHORT Type; |
| 2238 | ULONG Flags; |
| 2239 | SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ]; |
| 2240 | } SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY; |
| 2241 | |
| 2242 | #endif /* !_NTLSA_AUDIT_ */ |
| 2243 | #endif /* !_NTLSA_IFS_ */ |
| 2244 | |
| 2245 | /****************************************************************************** |
| 2246 | * Power Management Support Types * |
| 2247 | ******************************************************************************/ |
| 2248 | |
| 2249 | #ifndef _PO_DDK_ |
| 2250 | #define _PO_DDK_ |
| 2251 | |
| 2252 | #define PO_CB_SYSTEM_POWER_POLICY 0 |
| 2253 | #define PO_CB_AC_STATUS 1 |
| 2254 | #define PO_CB_BUTTON_COLLISION 2 |
| 2255 | #define PO_CB_SYSTEM_STATE_LOCK 3 |
| 2256 | #define PO_CB_LID_SWITCH_STATE 4 |
| 2257 | #define PO_CB_PROCESSOR_POWER_POLICY 5 |
| 2258 | |
| 2259 | /* Power States/Levels */ |
| 2260 | typedef enum _SYSTEM_POWER_STATE { |
| 2261 | PowerSystemUnspecified = 0, |
| 2262 | PowerSystemWorking, |
| 2263 | PowerSystemSleeping1, |
| 2264 | PowerSystemSleeping2, |
| 2265 | PowerSystemSleeping3, |
| 2266 | PowerSystemHibernate, |
| 2267 | PowerSystemShutdown, |
| 2268 | PowerSystemMaximum |
| 2269 | } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; |
| 2270 | |
| 2271 | #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum |
| 2272 | |
| 2273 | typedef enum _POWER_INFORMATION_LEVEL { |
| 2274 | SystemPowerPolicyAc, |
| 2275 | SystemPowerPolicyDc, |
| 2276 | VerifySystemPolicyAc, |
| 2277 | VerifySystemPolicyDc, |
| 2278 | SystemPowerCapabilities, |
| 2279 | SystemBatteryState, |
| 2280 | SystemPowerStateHandler, |
| 2281 | ProcessorStateHandler, |
| 2282 | SystemPowerPolicyCurrent, |
| 2283 | AdministratorPowerPolicy, |
| 2284 | SystemReserveHiberFile, |
| 2285 | ProcessorInformation, |
| 2286 | SystemPowerInformation, |
| 2287 | ProcessorStateHandler2, |
| 2288 | LastWakeTime, |
| 2289 | LastSleepTime, |
| 2290 | SystemExecutionState, |
| 2291 | SystemPowerStateNotifyHandler, |
| 2292 | ProcessorPowerPolicyAc, |
| 2293 | ProcessorPowerPolicyDc, |
| 2294 | VerifyProcessorPowerPolicyAc, |
| 2295 | VerifyProcessorPowerPolicyDc, |
| 2296 | ProcessorPowerPolicyCurrent, |
| 2297 | SystemPowerStateLogging, |
| 2298 | SystemPowerLoggingEntry, |
| 2299 | SetPowerSettingValue, |
| 2300 | NotifyUserPowerSetting, |
| 2301 | PowerInformationLevelUnused0, |
| 2302 | SystemMonitorHiberBootPowerOff, |
| 2303 | SystemVideoState, |
| 2304 | TraceApplicationPowerMessage, |
| 2305 | TraceApplicationPowerMessageEnd, |
| 2306 | ProcessorPerfStates, |
| 2307 | ProcessorIdleStates, |
| 2308 | ProcessorCap, |
| 2309 | SystemWakeSource, |
| 2310 | SystemHiberFileInformation, |
| 2311 | TraceServicePowerMessage, |
| 2312 | ProcessorLoad, |
| 2313 | PowerShutdownNotification, |
| 2314 | MonitorCapabilities, |
| 2315 | SessionPowerInit, |
| 2316 | SessionDisplayState, |
| 2317 | PowerRequestCreate, |
| 2318 | PowerRequestAction, |
| 2319 | GetPowerRequestList, |
| 2320 | ProcessorInformationEx, |
| 2321 | NotifyUserModeLegacyPowerEvent, |
| 2322 | GroupPark, |
| 2323 | ProcessorIdleDomains, |
| 2324 | WakeTimerList, |
| 2325 | SystemHiberFileSize, |
| 2326 | ProcessorIdleStatesHv, |
| 2327 | ProcessorPerfStatesHv, |
| 2328 | ProcessorPerfCapHv, |
| 2329 | ProcessorSetIdle, |
| 2330 | LogicalProcessorIdling, |
| 2331 | UserPresence, |
| 2332 | PowerSettingNotificationName, |
| 2333 | GetPowerSettingValue, |
| 2334 | IdleResiliency, |
| 2335 | SessionRITState, |
| 2336 | SessionConnectNotification, |
| 2337 | SessionPowerCleanup, |
| 2338 | SessionLockState, |
| 2339 | SystemHiberbootState, |
| 2340 | PlatformInformation, |
| 2341 | PdcInvocation, |
| 2342 | MonitorInvocation, |
| 2343 | FirmwareTableInformationRegistered, |
| 2344 | SetShutdownSelectedTime, |
| 2345 | SuspendResumeInvocation, |
| 2346 | PlmPowerRequestCreate, |
| 2347 | ScreenOff, |
| 2348 | CsDeviceNotification, |
| 2349 | PlatformRole, |
| 2350 | LastResumePerformance, |
| 2351 | DisplayBurst, |
| 2352 | ExitLatencySamplingPercentage, |
| 2353 | RegisterSpmPowerSettings, |
| 2354 | PlatformIdleStates, |
| 2355 | ProcessorIdleVeto, |
| 2356 | PlatformIdleVeto, |
| 2357 | SystemBatteryStatePrecise, |
| 2358 | ThermalEvent, |
| 2359 | PowerRequestActionInternal, |
| 2360 | BatteryDeviceState, |
| 2361 | PowerInformationInternal, |
| 2362 | ThermalStandby, |
| 2363 | SystemHiberFileType, |
| 2364 | PhysicalPowerButtonPress, |
| 2365 | QueryPotentialDripsConstraint, |
| 2366 | EnergyTrackerCreate, |
| 2367 | EnergyTrackerQuery, |
| 2368 | UpdateBlackBoxRecorder, |
| 2369 | SessionAllowExternalDmaDevices, |
| 2370 | PowerInformationLevelMaximum |
| 2371 | } POWER_INFORMATION_LEVEL; |
| 2372 | |
| 2373 | typedef enum { |
| 2374 | PowerActionNone = 0, |
| 2375 | PowerActionReserved, |
| 2376 | PowerActionSleep, |
| 2377 | PowerActionHibernate, |
| 2378 | PowerActionShutdown, |
| 2379 | PowerActionShutdownReset, |
| 2380 | PowerActionShutdownOff, |
| 2381 | PowerActionWarmEject, |
| 2382 | PowerActionDisplayOff |
| 2383 | } POWER_ACTION, *PPOWER_ACTION; |
| 2384 | |
| 2385 | typedef enum _DEVICE_POWER_STATE { |
| 2386 | PowerDeviceUnspecified = 0, |
| 2387 | PowerDeviceD0, |
| 2388 | PowerDeviceD1, |
| 2389 | PowerDeviceD2, |
| 2390 | PowerDeviceD3, |
| 2391 | PowerDeviceMaximum |
| 2392 | } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; |
| 2393 | |
| 2394 | typedef enum _MONITOR_DISPLAY_STATE { |
| 2395 | PowerMonitorOff = 0, |
| 2396 | PowerMonitorOn, |
| 2397 | PowerMonitorDim |
| 2398 | } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE; |
| 2399 | |
| 2400 | typedef union _POWER_STATE { |
| 2401 | SYSTEM_POWER_STATE SystemState; |
| 2402 | DEVICE_POWER_STATE DeviceState; |
| 2403 | } POWER_STATE, *PPOWER_STATE; |
| 2404 | |
| 2405 | typedef enum _POWER_STATE_TYPE { |
| 2406 | SystemPowerState = 0, |
| 2407 | DevicePowerState |
| 2408 | } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; |
| 2409 | |
| 2410 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 2411 | typedef struct _SYSTEM_POWER_STATE_CONTEXT { |
| 2412 | _ANONYMOUS_UNION union { |
| 2413 | _ANONYMOUS_STRUCT struct { |
| 2414 | ULONG Reserved1:8; |
| 2415 | ULONG TargetSystemState:4; |
| 2416 | ULONG EffectiveSystemState:4; |
| 2417 | ULONG CurrentSystemState:4; |
| 2418 | ULONG IgnoreHibernationPath:1; |
| 2419 | ULONG PseudoTransition:1; |
| 2420 | ULONG Reserved2:10; |
| 2421 | } DUMMYSTRUCTNAME; |
| 2422 | ULONG ContextAsUlong; |
| 2423 | } DUMMYUNIONNAME; |
| 2424 | } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT; |
| 2425 | #endif |
| 2426 | |
| 2427 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 2428 | typedef struct _COUNTED_REASON_CONTEXT { |
| 2429 | ULONG Version; |
| 2430 | ULONG Flags; |
| 2431 | _ANONYMOUS_UNION union { |
| 2432 | _ANONYMOUS_STRUCT struct { |
| 2433 | UNICODE_STRING ResourceFileName; |
| 2434 | USHORT ResourceReasonId; |
| 2435 | ULONG StringCount; |
| 2436 | PUNICODE_STRING ReasonStrings; |
| 2437 | } DUMMYSTRUCTNAME; |
| 2438 | UNICODE_STRING SimpleString; |
| 2439 | } DUMMYUNIONNAME; |
| 2440 | } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT; |
| 2441 | #endif |
| 2442 | |
| 2443 | #define IOCTL_QUERY_DEVICE_POWER_STATE \ |
| 2444 | CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS) |
| 2445 | |
| 2446 | #define IOCTL_SET_DEVICE_WAKE \ |
| 2447 | CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
| 2448 | |
| 2449 | #define IOCTL_CANCEL_DEVICE_WAKE \ |
| 2450 | CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
| 2451 | |
| 2452 | #define ES_SYSTEM_REQUIRED 0x00000001 |
| 2453 | #define ES_DISPLAY_REQUIRED 0x00000002 |
| 2454 | #define ES_USER_PRESENT 0x00000004 |
| 2455 | #define ES_CONTINUOUS 0x80000000 |
| 2456 | |
| 2457 | typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE; |
| 2458 | |
| 2459 | typedef enum { |
| 2460 | LT_DONT_CARE, |
| 2461 | LT_LOWEST_LATENCY |
| 2462 | } LATENCY_TIME; |
| 2463 | |
| 2464 | #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) |
| 2465 | #define DIAGNOSTIC_REASON_VERSION 0 |
| 2466 | #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001 |
| 2467 | #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002 |
| 2468 | #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000 |
| 2469 | #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003) |
| 2470 | #endif |
| 2471 | |
| 2472 | #define POWER_REQUEST_CONTEXT_VERSION 0 |
| 2473 | #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001 |
| 2474 | #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002 |
| 2475 | |
| 2476 | #define PowerRequestMaximum 3 |
| 2477 | |
| 2478 | typedef enum _POWER_REQUEST_TYPE { |
| 2479 | PowerRequestDisplayRequired, |
| 2480 | PowerRequestSystemRequired, |
| 2481 | PowerRequestAwayModeRequired, |
| 2482 | PowerRequestExecutionRequired |
| 2483 | } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE; |
| 2484 | |
| 2485 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 2486 | |
| 2487 | #define PDCAP_D0_SUPPORTED 0x00000001 |
| 2488 | #define PDCAP_D1_SUPPORTED 0x00000002 |
| 2489 | #define PDCAP_D2_SUPPORTED 0x00000004 |
| 2490 | #define PDCAP_D3_SUPPORTED 0x00000008 |
| 2491 | #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 |
| 2492 | #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 |
| 2493 | #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 |
| 2494 | #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 |
| 2495 | #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 |
| 2496 | |
| 2497 | typedef struct CM_Power_Data_s { |
| 2498 | ULONG PD_Size; |
| 2499 | DEVICE_POWER_STATE PD_MostRecentPowerState; |
| 2500 | ULONG PD_Capabilities; |
| 2501 | ULONG PD_D1Latency; |
| 2502 | ULONG PD_D2Latency; |
| 2503 | ULONG PD_D3Latency; |
| 2504 | DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; |
| 2505 | SYSTEM_POWER_STATE PD_DeepestSystemWake; |
| 2506 | } CM_POWER_DATA, *PCM_POWER_DATA; |
| 2507 | |
| 2508 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 2509 | |
| 2510 | typedef enum _SYSTEM_POWER_CONDITION { |
| 2511 | PoAc, |
| 2512 | PoDc, |
| 2513 | PoHot, |
| 2514 | PoConditionMaximum |
| 2515 | } SYSTEM_POWER_CONDITION; |
| 2516 | |
| 2517 | typedef struct _SET_POWER_SETTING_VALUE { |
| 2518 | ULONG Version; |
| 2519 | GUID Guid; |
| 2520 | SYSTEM_POWER_CONDITION PowerCondition; |
| 2521 | ULONG DataLength; |
| 2522 | UCHAR Data[ANYSIZE_ARRAY]; |
| 2523 | } SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE; |
| 2524 | |
| 2525 | #define POWER_SETTING_VALUE_VERSION (0x1) |
| 2526 | |
| 2527 | typedef struct _NOTIFY_USER_POWER_SETTING { |
| 2528 | GUID Guid; |
| 2529 | } NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING; |
| 2530 | |
| 2531 | typedef struct _APPLICATIONLAUNCH_SETTING_VALUE { |
| 2532 | LARGE_INTEGER ActivationTime; |
| 2533 | ULONG Flags; |
| 2534 | ULONG ButtonInstanceID; |
| 2535 | } APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE; |
| 2536 | |
| 2537 | typedef enum _POWER_PLATFORM_ROLE { |
| 2538 | PlatformRoleUnspecified = 0, |
| 2539 | PlatformRoleDesktop, |
| 2540 | PlatformRoleMobile, |
| 2541 | PlatformRoleWorkstation, |
| 2542 | PlatformRoleEnterpriseServer, |
| 2543 | PlatformRoleSOHOServer, |
| 2544 | PlatformRoleAppliancePC, |
| 2545 | PlatformRolePerformanceServer, |
| 2546 | PlatformRoleSlate, |
| 2547 | PlatformRoleMaximum |
| 2548 | } POWER_PLATFORM_ROLE; |
| 2549 | |
| 2550 | #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) |
| 2551 | typedef struct { |
| 2552 | ULONG Granularity; |
| 2553 | ULONG Capacity; |
| 2554 | } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE; |
| 2555 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */ |
| 2556 | |
| 2557 | #endif /* !_PO_DDK_ */ |
| 2558 | |
| 2559 | #define CORE_PARKING_POLICY_CHANGE_IDEAL 0 |
| 2560 | #define CORE_PARKING_POLICY_CHANGE_SINGLE 1 |
| 2561 | #define CORE_PARKING_POLICY_CHANGE_ROCKET 2 |
| 2562 | #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET |
| 2563 | |
| 2564 | DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A); |
| 2565 | DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C); |
| 2566 | DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E); |
| 2567 | DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94); |
| 2568 | DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0); |
| 2569 | DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7); |
| 2570 | DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63); |
| 2571 | DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99); |
| 2572 | DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E); |
| 2573 | DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63); |
| 2574 | DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64); |
| 2575 | DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee); |
| 2576 | DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B); |
| 2577 | DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA); |
| 2578 | DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb); |
| 2579 | DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96); |
| 2580 | DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff); |
| 2581 | DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8); |
| 2582 | DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67); |
| 2583 | DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47); |
| 2584 | DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23); |
| 2585 | DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42); |
| 2586 | DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E); |
| 2587 | DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63); |
| 2588 | DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67); |
| 2589 | DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20); |
| 2590 | DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70); |
| 2591 | DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA); |
| 2592 | DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0); |
| 2593 | DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64); |
| 2594 | DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E); |
| 2595 | DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1); |
| 2596 | DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0); |
| 2597 | DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87); |
| 2598 | DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab); |
| 2599 | DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D); |
| 2600 | DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2); |
| 2601 | DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47); |
| 2602 | DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80); |
| 2603 | DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78); |
| 2604 | DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB); |
| 2605 | DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93); |
| 2606 | DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5); |
| 2607 | DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36); |
| 2608 | DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B); |
| 2609 | DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4); |
| 2610 | DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F); |
| 2611 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46); |
| 2612 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69); |
| 2613 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f); |
| 2614 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06); |
| 2615 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A); |
| 2616 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58); |
| 2617 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4); |
| 2618 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA); |
| 2619 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82); |
| 2620 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8); |
| 2621 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65); |
| 2622 | DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3); |
| 2623 | DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00); |
| 2624 | DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36); |
| 2625 | DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC); |
| 2626 | DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C); |
| 2627 | DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb); |
| 2628 | DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c); |
| 2629 | DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0); |
| 2630 | DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d); |
| 2631 | DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6); |
| 2632 | DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18); |
| 2633 | DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6); |
| 2634 | DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa); |
| 2635 | DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8); |
| 2636 | DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5); |
| 2637 | DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59); |
| 2638 | DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6); |
| 2639 | DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad); |
| 2640 | DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b); |
| 2641 | DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19); |
| 2642 | DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c); |
| 2643 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1); |
| 2644 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa); |
| 2645 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6); |
| 2646 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b); |
| 2647 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28); |
| 2648 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83); |
| 2649 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32); |
| 2650 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82); |
| 2651 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82); |
| 2652 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9); |
| 2653 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20); |
| 2654 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d); |
| 2655 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29); |
| 2656 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb); |
| 2657 | DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1); |
| 2658 | DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f); |
| 2659 | DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b); |
| 2660 | DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f); |
| 2661 | DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F); |
| 2662 | DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51); |
| 2663 | DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19); |
| 2664 | DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48); |
| 2665 | DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3); |
| 2666 | DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1); |
| 2667 | DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1); |
| 2668 | DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E); |
| 2669 | DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA); |
| 2670 | DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20); |
| 2671 | DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5); |
| 2672 | DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6); |
| 2673 | |
| 2674 | #define PERFSTATE_POLICY_CHANGE_IDEAL 0 |
| 2675 | #define PERFSTATE_POLICY_CHANGE_SINGLE 1 |
| 2676 | #define PERFSTATE_POLICY_CHANGE_ROCKET 2 |
| 2677 | #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET |
| 2678 | |
| 2679 | #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0 |
| 2680 | #define PROCESSOR_PERF_BOOST_POLICY_MAX 100 |
| 2681 | |
| 2682 | #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0 |
| 2683 | #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1 |
| 2684 | |
| 2685 | typedef VOID |
| 2686 | (NTAPI REQUEST_POWER_COMPLETE)( |
| 2687 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 2688 | IN UCHAR MinorFunction, |
| 2689 | IN POWER_STATE PowerState, |
| 2690 | IN PVOID Context, |
| 2691 | IN struct _IO_STATUS_BLOCK *IoStatus); |
| 2692 | typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE; |
| 2693 | |
| 2694 | typedef |
| 2695 | NTSTATUS |
| 2696 | (NTAPI POWER_SETTING_CALLBACK)( |
| 2697 | IN LPCGUID SettingGuid, |
| 2698 | IN PVOID Value, |
| 2699 | IN ULONG ValueLength, |
| 2700 | IN OUT PVOID Context OPTIONAL); |
| 2701 | typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK; |
| 2702 | |
| 2703 | DECLARE_HANDLE(POHANDLE); |
| 2704 | |
| 2705 | #define PO_FX_VERSION_V1 1 |
| 2706 | #define PO_FX_VERSION_V2 2 |
| 2707 | #define PO_FX_VERSION PO_FX_VERSION_V2 |
| 2708 | |
| 2709 | typedef void (NTAPI PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK)(void *context, ULONG component); |
| 2710 | typedef PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK *PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK; |
| 2711 | |
| 2712 | typedef void (NTAPI PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK)(void *context, ULONG component); |
| 2713 | typedef PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK *PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK; |
| 2714 | |
| 2715 | typedef void (NTAPI PO_FX_COMPONENT_IDLE_STATE_CALLBACK)(void *context, ULONG component, ULONG state); |
| 2716 | typedef PO_FX_COMPONENT_IDLE_STATE_CALLBACK *PPO_FX_COMPONENT_IDLE_STATE_CALLBACK; |
| 2717 | |
| 2718 | typedef NTSTATUS (NTAPI PO_FX_POWER_CONTROL_CALLBACK)(void *context, const GUID *code, void *in, SIZE_T in_size, void *out, SIZE_T out_size, SIZE_T *ret_size); |
| 2719 | typedef PO_FX_POWER_CONTROL_CALLBACK *PPO_FX_POWER_CONTROL_CALLBACK; |
| 2720 | |
| 2721 | typedef struct _PO_FX_COMPONENT_IDLE_STATE |
| 2722 | { |
| 2723 | ULONGLONG TransitionLatency; |
| 2724 | ULONGLONG ResidencyRequirement; |
| 2725 | ULONG NominalPower; |
| 2726 | } PO_FX_COMPONENT_IDLE_STATE, *PPO_FX_COMPONENT_IDLE_STATE; |
| 2727 | |
| 2728 | typedef struct _PO_FX_COMPONENT_V1 |
| 2729 | { |
| 2730 | GUID Id; |
| 2731 | ULONG IdleStateCount; |
| 2732 | ULONG DeepestWakeableIdleState; |
| 2733 | PO_FX_COMPONENT_IDLE_STATE *IdleStates; |
| 2734 | } PO_FX_COMPONENT_V1, *PPO_FX_COMPONENT_V1; |
| 2735 | |
| 2736 | typedef struct _PO_FX_COMPONENT_V2 |
| 2737 | { |
| 2738 | GUID Id; |
| 2739 | ULONGLONG Flags; |
| 2740 | ULONG DeepestWakeableIdleState; |
| 2741 | ULONG IdleStateCount; |
| 2742 | PO_FX_COMPONENT_IDLE_STATE *IdleStates; |
| 2743 | ULONG ProviderCount; |
| 2744 | ULONG *Providers; |
| 2745 | } PO_FX_COMPONENT_V2, *PPO_FX_COMPONENT_V2; |
| 2746 | |
| 2747 | #if PO_FX_VERSION == PO_FX_VERSION_V1 |
| 2748 | typedef PO_FX_COMPONENT_V1 PO_FX_COMPONENT, *PPO_FX_COMPONENT; |
| 2749 | #else |
| 2750 | typedef PO_FX_COMPONENT_V2 PO_FX_COMPONENT, *PPO_FX_COMPONENT; |
| 2751 | #endif |
| 2752 | |
| 2753 | /****************************************************************************** |
| 2754 | * Configuration Manager Types * |
| 2755 | ******************************************************************************/ |
| 2756 | |
| 2757 | /* Resource list definitions */ |
| 2758 | typedef int CM_RESOURCE_TYPE; |
| 2759 | |
| 2760 | #define CmResourceTypeNull 0 |
| 2761 | #define CmResourceTypePort 1 |
| 2762 | #define CmResourceTypeInterrupt 2 |
| 2763 | #define CmResourceTypeMemory 3 |
| 2764 | #define CmResourceTypeDma 4 |
| 2765 | #define CmResourceTypeDeviceSpecific 5 |
| 2766 | #define CmResourceTypeBusNumber 6 |
| 2767 | #define CmResourceTypeNonArbitrated 128 |
| 2768 | #define CmResourceTypeConfigData 128 |
| 2769 | #define CmResourceTypeDevicePrivate 129 |
| 2770 | #define CmResourceTypePcCardConfig 130 |
| 2771 | #define CmResourceTypeMfCardConfig 131 |
| 2772 | |
| 2773 | /* KEY_VALUE_Xxx.Type */ |
| 2774 | #define REG_NONE 0 |
| 2775 | #define REG_SZ 1 |
| 2776 | #define REG_EXPAND_SZ 2 |
| 2777 | #define REG_BINARY 3 |
| 2778 | #define REG_DWORD 4 |
| 2779 | #define REG_DWORD_LITTLE_ENDIAN 4 |
| 2780 | #define REG_DWORD_BIG_ENDIAN 5 |
| 2781 | #define REG_LINK 6 |
| 2782 | #define REG_MULTI_SZ 7 |
| 2783 | #define REG_RESOURCE_LIST 8 |
| 2784 | #define REG_FULL_RESOURCE_DESCRIPTOR 9 |
| 2785 | #define REG_RESOURCE_REQUIREMENTS_LIST 10 |
| 2786 | #define REG_QWORD 11 |
| 2787 | #define REG_QWORD_LITTLE_ENDIAN 11 |
| 2788 | |
| 2789 | /* Registry Access Rights */ |
| 2790 | #define KEY_QUERY_VALUE (0x0001) |
| 2791 | #define KEY_SET_VALUE (0x0002) |
| 2792 | #define KEY_CREATE_SUB_KEY (0x0004) |
| 2793 | #define KEY_ENUMERATE_SUB_KEYS (0x0008) |
| 2794 | #define KEY_NOTIFY (0x0010) |
| 2795 | #define KEY_CREATE_LINK (0x0020) |
| 2796 | #define KEY_WOW64_32KEY (0x0200) |
| 2797 | #define KEY_WOW64_64KEY (0x0100) |
| 2798 | #define KEY_WOW64_RES (0x0300) |
| 2799 | |
| 2800 | #define KEY_READ ((STANDARD_RIGHTS_READ |\ |
| 2801 | KEY_QUERY_VALUE |\ |
| 2802 | KEY_ENUMERATE_SUB_KEYS |\ |
| 2803 | KEY_NOTIFY) \ |
| 2804 | & \ |
| 2805 | (~SYNCHRONIZE)) |
| 2806 | |
| 2807 | #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\ |
| 2808 | KEY_SET_VALUE |\ |
| 2809 | KEY_CREATE_SUB_KEY) \ |
| 2810 | & \ |
| 2811 | (~SYNCHRONIZE)) |
| 2812 | |
| 2813 | #define KEY_EXECUTE ((KEY_READ) \ |
| 2814 | & \ |
| 2815 | (~SYNCHRONIZE)) |
| 2816 | |
| 2817 | #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\ |
| 2818 | KEY_QUERY_VALUE |\ |
| 2819 | KEY_SET_VALUE |\ |
| 2820 | KEY_CREATE_SUB_KEY |\ |
| 2821 | KEY_ENUMERATE_SUB_KEYS |\ |
| 2822 | KEY_NOTIFY |\ |
| 2823 | KEY_CREATE_LINK) \ |
| 2824 | & \ |
| 2825 | (~SYNCHRONIZE)) |
| 2826 | |
| 2827 | /* Registry Open/Create Options */ |
| 2828 | #define REG_OPTION_RESERVED (0x00000000L) |
| 2829 | #define REG_OPTION_NON_VOLATILE (0x00000000L) |
| 2830 | #define REG_OPTION_VOLATILE (0x00000001L) |
| 2831 | #define REG_OPTION_CREATE_LINK (0x00000002L) |
| 2832 | #define REG_OPTION_BACKUP_RESTORE (0x00000004L) |
| 2833 | #define REG_OPTION_OPEN_LINK (0x00000008L) |
| 2834 | |
| 2835 | #define REG_LEGAL_OPTION \ |
| 2836 | (REG_OPTION_RESERVED |\ |
| 2837 | REG_OPTION_NON_VOLATILE |\ |
| 2838 | REG_OPTION_VOLATILE |\ |
| 2839 | REG_OPTION_CREATE_LINK |\ |
| 2840 | REG_OPTION_BACKUP_RESTORE |\ |
| 2841 | REG_OPTION_OPEN_LINK) |
| 2842 | |
| 2843 | #define REG_OPEN_LEGAL_OPTION \ |
| 2844 | (REG_OPTION_RESERVED |\ |
| 2845 | REG_OPTION_BACKUP_RESTORE |\ |
| 2846 | REG_OPTION_OPEN_LINK) |
| 2847 | |
| 2848 | #define REG_STANDARD_FORMAT 1 |
| 2849 | #define REG_LATEST_FORMAT 2 |
| 2850 | #define REG_NO_COMPRESSION 4 |
| 2851 | |
| 2852 | /* Key creation/open disposition */ |
| 2853 | #define REG_CREATED_NEW_KEY (0x00000001L) |
| 2854 | #define REG_OPENED_EXISTING_KEY (0x00000002L) |
| 2855 | |
| 2856 | /* Key restore & hive load flags */ |
| 2857 | #define REG_WHOLE_HIVE_VOLATILE (0x00000001L) |
| 2858 | #define REG_REFRESH_HIVE (0x00000002L) |
| 2859 | #define REG_NO_LAZY_FLUSH (0x00000004L) |
| 2860 | #define REG_FORCE_RESTORE (0x00000008L) |
| 2861 | #define REG_APP_HIVE (0x00000010L) |
| 2862 | #define REG_PROCESS_PRIVATE (0x00000020L) |
| 2863 | #define REG_START_JOURNAL (0x00000040L) |
| 2864 | #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) |
| 2865 | #define REG_HIVE_NO_RM (0x00000100L) |
| 2866 | #define REG_HIVE_SINGLE_LOG (0x00000200L) |
| 2867 | #define REG_BOOT_HIVE (0x00000400L) |
| 2868 | |
| 2869 | /* Unload Flags */ |
| 2870 | #define REG_FORCE_UNLOAD 1 |
| 2871 | |
| 2872 | /* Notify Filter Values */ |
| 2873 | #define REG_NOTIFY_CHANGE_NAME (0x00000001L) |
| 2874 | #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L) |
| 2875 | #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L) |
| 2876 | #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L) |
| 2877 | |
| 2878 | #define REG_LEGAL_CHANGE_FILTER \ |
| 2879 | (REG_NOTIFY_CHANGE_NAME |\ |
| 2880 | REG_NOTIFY_CHANGE_ATTRIBUTES |\ |
| 2881 | REG_NOTIFY_CHANGE_LAST_SET |\ |
| 2882 | REG_NOTIFY_CHANGE_SECURITY) |
| 2883 | |
| 2884 | #include <pshpack4.h> |
| 2885 | typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { |
| 2886 | UCHAR Type; |
| 2887 | UCHAR ShareDisposition; |
| 2888 | USHORT Flags; |
| 2889 | union { |
| 2890 | struct { |
| 2891 | PHYSICAL_ADDRESS Start; |
| 2892 | ULONG Length; |
| 2893 | } Generic; |
| 2894 | struct { |
| 2895 | PHYSICAL_ADDRESS Start; |
| 2896 | ULONG Length; |
| 2897 | } Port; |
| 2898 | struct { |
| 2899 | #if defined(NT_PROCESSOR_GROUPS) |
| 2900 | USHORT Level; |
| 2901 | USHORT Group; |
| 2902 | #else |
| 2903 | ULONG Level; |
| 2904 | #endif |
| 2905 | ULONG Vector; |
| 2906 | KAFFINITY Affinity; |
| 2907 | } Interrupt; |
| 2908 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) |
| 2909 | struct { |
| 2910 | _ANONYMOUS_UNION union { |
| 2911 | struct { |
| 2912 | #if defined(NT_PROCESSOR_GROUPS) |
| 2913 | USHORT Group; |
| 2914 | #else |
| 2915 | USHORT Reserved; |
| 2916 | #endif |
| 2917 | USHORT MessageCount; |
| 2918 | ULONG Vector; |
| 2919 | KAFFINITY Affinity; |
| 2920 | } Raw; |
| 2921 | struct { |
| 2922 | #if defined(NT_PROCESSOR_GROUPS) |
| 2923 | USHORT Level; |
| 2924 | USHORT Group; |
| 2925 | #else |
| 2926 | ULONG Level; |
| 2927 | #endif |
| 2928 | ULONG Vector; |
| 2929 | KAFFINITY Affinity; |
| 2930 | } Translated; |
| 2931 | } DUMMYUNIONNAME; |
| 2932 | } MessageInterrupt; |
| 2933 | #endif |
| 2934 | struct { |
| 2935 | PHYSICAL_ADDRESS Start; |
| 2936 | ULONG Length; |
| 2937 | } Memory; |
| 2938 | struct { |
| 2939 | ULONG Channel; |
| 2940 | ULONG Port; |
| 2941 | ULONG Reserved1; |
| 2942 | } Dma; |
| 2943 | struct { |
| 2944 | ULONG Data[3]; |
| 2945 | } DevicePrivate; |
| 2946 | struct { |
| 2947 | ULONG Start; |
| 2948 | ULONG Length; |
| 2949 | ULONG Reserved; |
| 2950 | } BusNumber; |
| 2951 | struct { |
| 2952 | ULONG DataSize; |
| 2953 | ULONG Reserved1; |
| 2954 | ULONG Reserved2; |
| 2955 | } DeviceSpecificData; |
| 2956 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) |
| 2957 | struct { |
| 2958 | PHYSICAL_ADDRESS Start; |
| 2959 | ULONG Length40; |
| 2960 | } Memory40; |
| 2961 | struct { |
| 2962 | PHYSICAL_ADDRESS Start; |
| 2963 | ULONG Length48; |
| 2964 | } Memory48; |
| 2965 | struct { |
| 2966 | PHYSICAL_ADDRESS Start; |
| 2967 | ULONG Length64; |
| 2968 | } Memory64; |
| 2969 | #endif |
| 2970 | } u; |
| 2971 | } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; |
| 2972 | #include <poppack.h> |
| 2973 | |
| 2974 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */ |
| 2975 | #define CmResourceTypeNull 0 |
| 2976 | #define CmResourceTypePort 1 |
| 2977 | #define CmResourceTypeInterrupt 2 |
| 2978 | #define CmResourceTypeMemory 3 |
| 2979 | #define CmResourceTypeDma 4 |
| 2980 | #define CmResourceTypeDeviceSpecific 5 |
| 2981 | #define CmResourceTypeBusNumber 6 |
| 2982 | #define CmResourceTypeMemoryLarge 7 |
| 2983 | #define CmResourceTypeNonArbitrated 128 |
| 2984 | #define CmResourceTypeConfigData 128 |
| 2985 | #define CmResourceTypeDevicePrivate 129 |
| 2986 | #define CmResourceTypePcCardConfig 130 |
| 2987 | #define CmResourceTypeMfCardConfig 131 |
| 2988 | |
| 2989 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ |
| 2990 | typedef enum _CM_SHARE_DISPOSITION { |
| 2991 | CmResourceShareUndetermined = 0, |
| 2992 | CmResourceShareDeviceExclusive, |
| 2993 | CmResourceShareDriverExclusive, |
| 2994 | CmResourceShareShared |
| 2995 | } CM_SHARE_DISPOSITION; |
| 2996 | |
| 2997 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */ |
| 2998 | #define CM_RESOURCE_PORT_MEMORY 0x0000 |
| 2999 | #define CM_RESOURCE_PORT_IO 0x0001 |
| 3000 | #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 |
| 3001 | #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 |
| 3002 | #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 |
| 3003 | #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 |
| 3004 | #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 |
| 3005 | #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 |
| 3006 | #define CM_RESOURCE_PORT_BAR 0x0100 |
| 3007 | |
| 3008 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */ |
| 3009 | #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 |
| 3010 | #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 |
| 3011 | #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002 |
| 3012 | #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004 |
| 3013 | |
| 3014 | #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001 |
| 3015 | |
| 3016 | #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2) |
| 3017 | |
| 3018 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ |
| 3019 | #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 |
| 3020 | #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 |
| 3021 | #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 |
| 3022 | #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003 |
| 3023 | #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 |
| 3024 | #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 |
| 3025 | #define CM_RESOURCE_MEMORY_24 0x0010 |
| 3026 | #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 |
| 3027 | #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040 |
| 3028 | #define CM_RESOURCE_MEMORY_BAR 0x0080 |
| 3029 | #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100 |
| 3030 | |
| 3031 | #define CM_RESOURCE_MEMORY_LARGE 0x0E00 |
| 3032 | #define CM_RESOURCE_MEMORY_LARGE_40 0x0200 |
| 3033 | #define CM_RESOURCE_MEMORY_LARGE_48 0x0400 |
| 3034 | #define CM_RESOURCE_MEMORY_LARGE_64 0x0800 |
| 3035 | |
| 3036 | #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00 |
| 3037 | #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000 |
| 3038 | #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000 |
| 3039 | |
| 3040 | /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ |
| 3041 | #define CM_RESOURCE_DMA_8 0x0000 |
| 3042 | #define CM_RESOURCE_DMA_16 0x0001 |
| 3043 | #define CM_RESOURCE_DMA_32 0x0002 |
| 3044 | #define CM_RESOURCE_DMA_8_AND_16 0x0004 |
| 3045 | #define CM_RESOURCE_DMA_BUS_MASTER 0x0008 |
| 3046 | #define CM_RESOURCE_DMA_TYPE_A 0x0010 |
| 3047 | #define CM_RESOURCE_DMA_TYPE_B 0x0020 |
| 3048 | #define CM_RESOURCE_DMA_TYPE_F 0x0040 |
| 3049 | |
| 3050 | typedef struct _DEVICE_FLAGS { |
| 3051 | ULONG Failed:1; |
| 3052 | ULONG ReadOnly:1; |
| 3053 | ULONG Removable:1; |
| 3054 | ULONG ConsoleIn:1; |
| 3055 | ULONG ConsoleOut:1; |
| 3056 | ULONG Input:1; |
| 3057 | ULONG Output:1; |
| 3058 | } DEVICE_FLAGS, *PDEVICE_FLAGS; |
| 3059 | |
| 3060 | typedef enum _INTERFACE_TYPE { |
| 3061 | InterfaceTypeUndefined = -1, |
| 3062 | Internal, |
| 3063 | Isa, |
| 3064 | Eisa, |
| 3065 | MicroChannel, |
| 3066 | TurboChannel, |
| 3067 | PCIBus, |
| 3068 | VMEBus, |
| 3069 | NuBus, |
| 3070 | PCMCIABus, |
| 3071 | CBus, |
| 3072 | MPIBus, |
| 3073 | MPSABus, |
| 3074 | ProcessorInternal, |
| 3075 | InternalPowerBus, |
| 3076 | PNPISABus, |
| 3077 | PNPBus, |
| 3078 | Vmcs, |
| 3079 | ACPIBus, |
| 3080 | MaximumInterfaceType |
| 3081 | } INTERFACE_TYPE, *PINTERFACE_TYPE; |
| 3082 | |
| 3083 | typedef struct _CM_COMPONENT_INFORMATION { |
| 3084 | DEVICE_FLAGS Flags; |
| 3085 | ULONG Version; |
| 3086 | ULONG Key; |
| 3087 | KAFFINITY AffinityMask; |
| 3088 | } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION; |
| 3089 | |
| 3090 | typedef struct _CM_ROM_BLOCK { |
| 3091 | ULONG Address; |
| 3092 | ULONG Size; |
| 3093 | } CM_ROM_BLOCK, *PCM_ROM_BLOCK; |
| 3094 | |
| 3095 | typedef struct _CM_PARTIAL_RESOURCE_LIST { |
| 3096 | USHORT Version; |
| 3097 | USHORT Revision; |
| 3098 | ULONG Count; |
| 3099 | CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; |
| 3100 | } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; |
| 3101 | |
| 3102 | typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { |
| 3103 | INTERFACE_TYPE InterfaceType; |
| 3104 | ULONG BusNumber; |
| 3105 | CM_PARTIAL_RESOURCE_LIST PartialResourceList; |
| 3106 | } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; |
| 3107 | |
| 3108 | typedef struct _CM_RESOURCE_LIST { |
| 3109 | ULONG Count; |
| 3110 | CM_FULL_RESOURCE_DESCRIPTOR List[1]; |
| 3111 | } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; |
| 3112 | |
| 3113 | typedef struct _PNP_BUS_INFORMATION { |
| 3114 | GUID BusTypeGuid; |
| 3115 | INTERFACE_TYPE LegacyBusType; |
| 3116 | ULONG BusNumber; |
| 3117 | } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; |
| 3118 | |
| 3119 | #include <pshpack1.h> |
| 3120 | |
| 3121 | typedef struct _CM_INT13_DRIVE_PARAMETER { |
| 3122 | USHORT DriveSelect; |
| 3123 | ULONG MaxCylinders; |
| 3124 | USHORT SectorsPerTrack; |
| 3125 | USHORT MaxHeads; |
| 3126 | USHORT NumberDrives; |
| 3127 | } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; |
| 3128 | |
| 3129 | typedef struct _CM_MCA_POS_DATA { |
| 3130 | USHORT AdapterId; |
| 3131 | UCHAR PosData1; |
| 3132 | UCHAR PosData2; |
| 3133 | UCHAR PosData3; |
| 3134 | UCHAR PosData4; |
| 3135 | } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; |
| 3136 | |
| 3137 | typedef struct _CM_PNP_BIOS_DEVICE_NODE { |
| 3138 | USHORT Size; |
| 3139 | UCHAR Node; |
| 3140 | ULONG ProductId; |
| 3141 | UCHAR DeviceType[3]; |
| 3142 | USHORT DeviceAttributes; |
| 3143 | } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE; |
| 3144 | |
| 3145 | typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK { |
| 3146 | UCHAR Signature[4]; |
| 3147 | UCHAR Revision; |
| 3148 | UCHAR Length; |
| 3149 | USHORT ControlField; |
| 3150 | UCHAR Checksum; |
| 3151 | ULONG EventFlagAddress; |
| 3152 | USHORT RealModeEntryOffset; |
| 3153 | USHORT RealModeEntrySegment; |
| 3154 | USHORT ProtectedModeEntryOffset; |
| 3155 | ULONG ProtectedModeCodeBaseAddress; |
| 3156 | ULONG OemDeviceId; |
| 3157 | USHORT RealModeDataBaseAddress; |
| 3158 | ULONG ProtectedModeDataBaseAddress; |
| 3159 | } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; |
| 3160 | |
| 3161 | #include <poppack.h> |
| 3162 | |
| 3163 | typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA { |
| 3164 | ULONG BytesPerSector; |
| 3165 | ULONG NumberOfCylinders; |
| 3166 | ULONG SectorsPerTrack; |
| 3167 | ULONG NumberOfHeads; |
| 3168 | } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA; |
| 3169 | |
| 3170 | typedef struct _CM_KEYBOARD_DEVICE_DATA { |
| 3171 | USHORT Version; |
| 3172 | USHORT Revision; |
| 3173 | UCHAR Type; |
| 3174 | UCHAR Subtype; |
| 3175 | USHORT KeyboardFlags; |
| 3176 | } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; |
| 3177 | |
| 3178 | typedef struct _CM_SCSI_DEVICE_DATA { |
| 3179 | USHORT Version; |
| 3180 | USHORT Revision; |
| 3181 | UCHAR HostIdentifier; |
| 3182 | } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; |
| 3183 | |
| 3184 | typedef struct _CM_VIDEO_DEVICE_DATA { |
| 3185 | USHORT Version; |
| 3186 | USHORT Revision; |
| 3187 | ULONG VideoClock; |
| 3188 | } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA; |
| 3189 | |
| 3190 | typedef struct _CM_SONIC_DEVICE_DATA { |
| 3191 | USHORT Version; |
| 3192 | USHORT Revision; |
| 3193 | USHORT DataConfigurationRegister; |
| 3194 | UCHAR EthernetAddress[8]; |
| 3195 | } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA; |
| 3196 | |
| 3197 | typedef struct _CM_SERIAL_DEVICE_DATA { |
| 3198 | USHORT Version; |
| 3199 | USHORT Revision; |
| 3200 | ULONG BaudClock; |
| 3201 | } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; |
| 3202 | |
| 3203 | typedef struct _CM_MONITOR_DEVICE_DATA { |
| 3204 | USHORT Version; |
| 3205 | USHORT Revision; |
| 3206 | USHORT HorizontalScreenSize; |
| 3207 | USHORT VerticalScreenSize; |
| 3208 | USHORT HorizontalResolution; |
| 3209 | USHORT VerticalResolution; |
| 3210 | USHORT HorizontalDisplayTimeLow; |
| 3211 | USHORT HorizontalDisplayTime; |
| 3212 | USHORT HorizontalDisplayTimeHigh; |
| 3213 | USHORT HorizontalBackPorchLow; |
| 3214 | USHORT HorizontalBackPorch; |
| 3215 | USHORT HorizontalBackPorchHigh; |
| 3216 | USHORT HorizontalFrontPorchLow; |
| 3217 | USHORT HorizontalFrontPorch; |
| 3218 | USHORT HorizontalFrontPorchHigh; |
| 3219 | USHORT HorizontalSyncLow; |
| 3220 | USHORT HorizontalSync; |
| 3221 | USHORT HorizontalSyncHigh; |
| 3222 | USHORT VerticalBackPorchLow; |
| 3223 | USHORT VerticalBackPorch; |
| 3224 | USHORT VerticalBackPorchHigh; |
| 3225 | USHORT VerticalFrontPorchLow; |
| 3226 | USHORT VerticalFrontPorch; |
| 3227 | USHORT VerticalFrontPorchHigh; |
| 3228 | USHORT VerticalSyncLow; |
| 3229 | USHORT VerticalSync; |
| 3230 | USHORT VerticalSyncHigh; |
| 3231 | } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA; |
| 3232 | |
| 3233 | typedef struct _CM_FLOPPY_DEVICE_DATA { |
| 3234 | USHORT Version; |
| 3235 | USHORT Revision; |
| 3236 | CHAR Size[8]; |
| 3237 | ULONG MaxDensity; |
| 3238 | ULONG MountDensity; |
| 3239 | UCHAR StepRateHeadUnloadTime; |
| 3240 | UCHAR HeadLoadTime; |
| 3241 | UCHAR MotorOffTime; |
| 3242 | UCHAR SectorLengthCode; |
| 3243 | UCHAR SectorPerTrack; |
| 3244 | UCHAR ReadWriteGapLength; |
| 3245 | UCHAR DataTransferLength; |
| 3246 | UCHAR FormatGapLength; |
| 3247 | UCHAR FormatFillCharacter; |
| 3248 | UCHAR HeadSettleTime; |
| 3249 | UCHAR MotorSettleTime; |
| 3250 | UCHAR MaximumTrackValue; |
| 3251 | UCHAR DataTransferRate; |
| 3252 | } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; |
| 3253 | |
| 3254 | typedef enum _KEY_INFORMATION_CLASS { |
| 3255 | KeyBasicInformation, |
| 3256 | KeyNodeInformation, |
| 3257 | KeyFullInformation, |
| 3258 | KeyNameInformation, |
| 3259 | KeyCachedInformation, |
| 3260 | KeyFlagsInformation, |
| 3261 | KeyVirtualizationInformation, |
| 3262 | KeyHandleTagsInformation, |
| 3263 | KeyTrustInformation, |
| 3264 | KeyLayerInformation, |
| 3265 | MaxKeyInfoClass |
| 3266 | } KEY_INFORMATION_CLASS; |
| 3267 | |
| 3268 | typedef struct _KEY_BASIC_INFORMATION { |
| 3269 | LARGE_INTEGER LastWriteTime; |
| 3270 | ULONG TitleIndex; |
| 3271 | ULONG NameLength; |
| 3272 | WCHAR Name[1]; |
| 3273 | } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; |
| 3274 | |
| 3275 | typedef struct _KEY_CONTROL_FLAGS_INFORMATION { |
| 3276 | ULONG ControlFlags; |
| 3277 | } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION; |
| 3278 | |
| 3279 | typedef struct _KEY_FULL_INFORMATION { |
| 3280 | LARGE_INTEGER LastWriteTime; |
| 3281 | ULONG TitleIndex; |
| 3282 | ULONG ClassOffset; |
| 3283 | ULONG ClassLength; |
| 3284 | ULONG SubKeys; |
| 3285 | ULONG MaxNameLen; |
| 3286 | ULONG MaxClassLen; |
| 3287 | ULONG Values; |
| 3288 | ULONG MaxValueNameLen; |
| 3289 | ULONG MaxValueDataLen; |
| 3290 | WCHAR Class[1]; |
| 3291 | } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; |
| 3292 | |
| 3293 | typedef struct _KEY_HANDLE_TAGS_INFORMATION { |
| 3294 | ULONG HandleTags; |
| 3295 | } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION; |
| 3296 | |
| 3297 | typedef struct _KEY_NODE_INFORMATION { |
| 3298 | LARGE_INTEGER LastWriteTime; |
| 3299 | ULONG TitleIndex; |
| 3300 | ULONG ClassOffset; |
| 3301 | ULONG ClassLength; |
| 3302 | ULONG NameLength; |
| 3303 | WCHAR Name[1]; |
| 3304 | } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; |
| 3305 | |
| 3306 | typedef enum _KEY_SET_INFORMATION_CLASS { |
| 3307 | KeyWriteTimeInformation, |
| 3308 | KeyWow64FlagsInformation, |
| 3309 | KeyControlFlagsInformation, |
| 3310 | KeySetVirtualizationInformation, |
| 3311 | KeySetDebugInformation, |
| 3312 | KeySetHandleTagsInformation, |
| 3313 | KeySetLayerInformation, |
| 3314 | MaxKeySetInfoClass |
| 3315 | } KEY_SET_INFORMATION_CLASS; |
| 3316 | |
| 3317 | typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION { |
| 3318 | ULONG VirtualTarget:1; |
| 3319 | ULONG VirtualStore:1; |
| 3320 | ULONG VirtualSource:1; |
| 3321 | ULONG Reserved:29; |
| 3322 | } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION; |
| 3323 | |
| 3324 | typedef struct _KEY_VALUE_BASIC_INFORMATION { |
| 3325 | ULONG TitleIndex; |
| 3326 | ULONG Type; |
| 3327 | ULONG NameLength; |
| 3328 | WCHAR Name[1]; |
| 3329 | } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; |
| 3330 | |
| 3331 | typedef struct _KEY_VALUE_FULL_INFORMATION { |
| 3332 | ULONG TitleIndex; |
| 3333 | ULONG Type; |
| 3334 | ULONG DataOffset; |
| 3335 | ULONG DataLength; |
| 3336 | ULONG NameLength; |
| 3337 | WCHAR Name[1]; |
| 3338 | } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; |
| 3339 | |
| 3340 | typedef struct _KEY_VALUE_PARTIAL_INFORMATION { |
| 3341 | ULONG TitleIndex; |
| 3342 | ULONG Type; |
| 3343 | ULONG DataLength; |
| 3344 | UCHAR Data[1]; |
| 3345 | } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; |
| 3346 | |
| 3347 | typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { |
| 3348 | ULONG Type; |
| 3349 | ULONG DataLength; |
| 3350 | UCHAR Data[1]; |
| 3351 | } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; |
| 3352 | |
| 3353 | typedef struct _KEY_VALUE_ENTRY { |
| 3354 | PUNICODE_STRING ValueName; |
| 3355 | ULONG DataLength; |
| 3356 | ULONG DataOffset; |
| 3357 | ULONG Type; |
| 3358 | } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; |
| 3359 | |
| 3360 | typedef enum _KEY_VALUE_INFORMATION_CLASS { |
| 3361 | KeyValueBasicInformation, |
| 3362 | KeyValueFullInformation, |
| 3363 | KeyValuePartialInformation, |
| 3364 | KeyValueFullInformationAlign64, |
| 3365 | KeyValuePartialInformationAlign64, |
| 3366 | KeyValueLayerInformation, |
| 3367 | MaxKeyValueInfoClass |
| 3368 | } KEY_VALUE_INFORMATION_CLASS; |
| 3369 | |
| 3370 | typedef struct _KEY_WOW64_FLAGS_INFORMATION { |
| 3371 | ULONG UserFlags; |
| 3372 | } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION; |
| 3373 | |
| 3374 | typedef struct _KEY_WRITE_TIME_INFORMATION { |
| 3375 | LARGE_INTEGER LastWriteTime; |
| 3376 | } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; |
| 3377 | |
| 3378 | typedef enum _REG_NOTIFY_CLASS { |
| 3379 | RegNtDeleteKey, |
| 3380 | RegNtPreDeleteKey = RegNtDeleteKey, |
| 3381 | RegNtSetValueKey, |
| 3382 | RegNtPreSetValueKey = RegNtSetValueKey, |
| 3383 | RegNtDeleteValueKey, |
| 3384 | RegNtPreDeleteValueKey = RegNtDeleteValueKey, |
| 3385 | RegNtSetInformationKey, |
| 3386 | RegNtPreSetInformationKey = RegNtSetInformationKey, |
| 3387 | RegNtRenameKey, |
| 3388 | RegNtPreRenameKey = RegNtRenameKey, |
| 3389 | RegNtEnumerateKey, |
| 3390 | RegNtPreEnumerateKey = RegNtEnumerateKey, |
| 3391 | RegNtEnumerateValueKey, |
| 3392 | RegNtPreEnumerateValueKey = RegNtEnumerateValueKey, |
| 3393 | RegNtQueryKey, |
| 3394 | RegNtPreQueryKey = RegNtQueryKey, |
| 3395 | RegNtQueryValueKey, |
| 3396 | RegNtPreQueryValueKey = RegNtQueryValueKey, |
| 3397 | RegNtQueryMultipleValueKey, |
| 3398 | RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey, |
| 3399 | RegNtPreCreateKey, |
| 3400 | RegNtPostCreateKey, |
| 3401 | RegNtPreOpenKey, |
| 3402 | RegNtPostOpenKey, |
| 3403 | RegNtKeyHandleClose, |
| 3404 | RegNtPreKeyHandleClose = RegNtKeyHandleClose, |
| 3405 | RegNtPostDeleteKey, |
| 3406 | RegNtPostSetValueKey, |
| 3407 | RegNtPostDeleteValueKey, |
| 3408 | RegNtPostSetInformationKey, |
| 3409 | RegNtPostRenameKey, |
| 3410 | RegNtPostEnumerateKey, |
| 3411 | RegNtPostEnumerateValueKey, |
| 3412 | RegNtPostQueryKey, |
| 3413 | RegNtPostQueryValueKey, |
| 3414 | RegNtPostQueryMultipleValueKey, |
| 3415 | RegNtPostKeyHandleClose, |
| 3416 | RegNtPreCreateKeyEx, |
| 3417 | RegNtPostCreateKeyEx, |
| 3418 | RegNtPreOpenKeyEx, |
| 3419 | RegNtPostOpenKeyEx, |
| 3420 | RegNtPreFlushKey, |
| 3421 | RegNtPostFlushKey, |
| 3422 | RegNtPreLoadKey, |
| 3423 | RegNtPostLoadKey, |
| 3424 | RegNtPreUnLoadKey, |
| 3425 | RegNtPostUnLoadKey, |
| 3426 | RegNtPreQueryKeySecurity, |
| 3427 | RegNtPostQueryKeySecurity, |
| 3428 | RegNtPreSetKeySecurity, |
| 3429 | RegNtPostSetKeySecurity, |
| 3430 | RegNtCallbackObjectContextCleanup, |
| 3431 | RegNtPreRestoreKey, |
| 3432 | RegNtPostRestoreKey, |
| 3433 | RegNtPreSaveKey, |
| 3434 | RegNtPostSaveKey, |
| 3435 | RegNtPreReplaceKey, |
| 3436 | RegNtPostReplaceKey, |
| 3437 | RegNtPreQueryKeyName, |
| 3438 | RegNtPostQueryKeyName, |
| 3439 | MaxRegNtNotifyClass |
| 3440 | } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS; |
| 3441 | |
| 3442 | typedef NTSTATUS |
| 3443 | (NTAPI EX_CALLBACK_FUNCTION)( |
| 3444 | IN PVOID CallbackContext, |
| 3445 | IN PVOID Argument1, |
| 3446 | IN PVOID Argument2); |
| 3447 | typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION; |
| 3448 | |
| 3449 | typedef struct _REG_DELETE_KEY_INFORMATION { |
| 3450 | PVOID Object; |
| 3451 | PVOID CallContext; |
| 3452 | PVOID ObjectContext; |
| 3453 | PVOID Reserved; |
| 3454 | } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION |
| 3455 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 3456 | , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION |
| 3457 | #endif |
| 3458 | ; |
| 3459 | |
| 3460 | typedef struct _REG_SET_VALUE_KEY_INFORMATION { |
| 3461 | PVOID Object; |
| 3462 | PUNICODE_STRING ValueName; |
| 3463 | ULONG TitleIndex; |
| 3464 | ULONG Type; |
| 3465 | PVOID Data; |
| 3466 | ULONG DataSize; |
| 3467 | PVOID CallContext; |
| 3468 | PVOID ObjectContext; |
| 3469 | PVOID Reserved; |
| 3470 | } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION; |
| 3471 | |
| 3472 | typedef struct _REG_DELETE_VALUE_KEY_INFORMATION { |
| 3473 | PVOID Object; |
| 3474 | PUNICODE_STRING ValueName; |
| 3475 | PVOID CallContext; |
| 3476 | PVOID ObjectContext; |
| 3477 | PVOID Reserved; |
| 3478 | } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION; |
| 3479 | |
| 3480 | typedef struct _REG_SET_INFORMATION_KEY_INFORMATION { |
| 3481 | PVOID Object; |
| 3482 | KEY_SET_INFORMATION_CLASS KeySetInformationClass; |
| 3483 | PVOID KeySetInformation; |
| 3484 | ULONG KeySetInformationLength; |
| 3485 | PVOID CallContext; |
| 3486 | PVOID ObjectContext; |
| 3487 | PVOID Reserved; |
| 3488 | } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION; |
| 3489 | |
| 3490 | typedef struct _REG_ENUMERATE_KEY_INFORMATION { |
| 3491 | PVOID Object; |
| 3492 | ULONG Index; |
| 3493 | KEY_INFORMATION_CLASS KeyInformationClass; |
| 3494 | PVOID KeyInformation; |
| 3495 | ULONG Length; |
| 3496 | PULONG ResultLength; |
| 3497 | PVOID CallContext; |
| 3498 | PVOID ObjectContext; |
| 3499 | PVOID Reserved; |
| 3500 | } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION; |
| 3501 | |
| 3502 | typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION { |
| 3503 | PVOID Object; |
| 3504 | ULONG Index; |
| 3505 | KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; |
| 3506 | PVOID KeyValueInformation; |
| 3507 | ULONG Length; |
| 3508 | PULONG ResultLength; |
| 3509 | PVOID CallContext; |
| 3510 | PVOID ObjectContext; |
| 3511 | PVOID Reserved; |
| 3512 | } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION; |
| 3513 | |
| 3514 | typedef struct _REG_QUERY_KEY_INFORMATION { |
| 3515 | PVOID Object; |
| 3516 | KEY_INFORMATION_CLASS KeyInformationClass; |
| 3517 | PVOID KeyInformation; |
| 3518 | ULONG Length; |
| 3519 | PULONG ResultLength; |
| 3520 | PVOID CallContext; |
| 3521 | PVOID ObjectContext; |
| 3522 | PVOID Reserved; |
| 3523 | } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION; |
| 3524 | |
| 3525 | typedef struct _REG_QUERY_VALUE_KEY_INFORMATION { |
| 3526 | PVOID Object; |
| 3527 | PUNICODE_STRING ValueName; |
| 3528 | KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; |
| 3529 | PVOID KeyValueInformation; |
| 3530 | ULONG Length; |
| 3531 | PULONG ResultLength; |
| 3532 | PVOID CallContext; |
| 3533 | PVOID ObjectContext; |
| 3534 | PVOID Reserved; |
| 3535 | } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION; |
| 3536 | |
| 3537 | typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION { |
| 3538 | PVOID Object; |
| 3539 | PKEY_VALUE_ENTRY ValueEntries; |
| 3540 | ULONG EntryCount; |
| 3541 | PVOID ValueBuffer; |
| 3542 | PULONG BufferLength; |
| 3543 | PULONG RequiredBufferLength; |
| 3544 | PVOID CallContext; |
| 3545 | PVOID ObjectContext; |
| 3546 | PVOID Reserved; |
| 3547 | } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION; |
| 3548 | |
| 3549 | typedef struct _REG_RENAME_KEY_INFORMATION { |
| 3550 | PVOID Object; |
| 3551 | PUNICODE_STRING NewName; |
| 3552 | PVOID CallContext; |
| 3553 | PVOID ObjectContext; |
| 3554 | PVOID Reserved; |
| 3555 | } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION; |
| 3556 | |
| 3557 | typedef struct _REG_CREATE_KEY_INFORMATION { |
| 3558 | PUNICODE_STRING CompleteName; |
| 3559 | PVOID RootObject; |
| 3560 | PVOID ObjectType; |
| 3561 | ULONG CreateOptions; |
| 3562 | PUNICODE_STRING Class; |
| 3563 | PVOID SecurityDescriptor; |
| 3564 | PVOID SecurityQualityOfService; |
| 3565 | ACCESS_MASK DesiredAccess; |
| 3566 | ACCESS_MASK GrantedAccess; |
| 3567 | PULONG Disposition; |
| 3568 | PVOID *ResultObject; |
| 3569 | PVOID CallContext; |
| 3570 | PVOID RootObjectContext; |
| 3571 | PVOID Transaction; |
| 3572 | PVOID Reserved; |
| 3573 | } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION; |
| 3574 | |
| 3575 | typedef struct _REG_CREATE_KEY_INFORMATION_V1 { |
| 3576 | PUNICODE_STRING CompleteName; |
| 3577 | PVOID RootObject; |
| 3578 | PVOID ObjectType; |
| 3579 | ULONG Options; |
| 3580 | PUNICODE_STRING Class; |
| 3581 | PVOID SecurityDescriptor; |
| 3582 | PVOID SecurityQualityOfService; |
| 3583 | ACCESS_MASK DesiredAccess; |
| 3584 | ACCESS_MASK GrantedAccess; |
| 3585 | PULONG Disposition; |
| 3586 | PVOID *ResultObject; |
| 3587 | PVOID CallContext; |
| 3588 | PVOID RootObjectContext; |
| 3589 | PVOID Transaction; |
| 3590 | ULONG_PTR Version; |
| 3591 | PUNICODE_STRING RemainingName; |
| 3592 | ULONG Wow64Flags; |
| 3593 | ULONG Attributes; |
| 3594 | KPROCESSOR_MODE CheckAccessMode; |
| 3595 | } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1; |
| 3596 | |
| 3597 | typedef struct _REG_PRE_CREATE_KEY_INFORMATION { |
| 3598 | PUNICODE_STRING CompleteName; |
| 3599 | } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION; |
| 3600 | |
| 3601 | typedef struct _REG_POST_CREATE_KEY_INFORMATION { |
| 3602 | PUNICODE_STRING CompleteName; |
| 3603 | PVOID Object; |
| 3604 | NTSTATUS Status; |
| 3605 | } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION; |
| 3606 | |
| 3607 | typedef struct _REG_POST_OPERATION_INFORMATION { |
| 3608 | PVOID Object; |
| 3609 | NTSTATUS Status; |
| 3610 | PVOID PreInformation; |
| 3611 | NTSTATUS ReturnStatus; |
| 3612 | PVOID CallContext; |
| 3613 | PVOID ObjectContext; |
| 3614 | PVOID Reserved; |
| 3615 | } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION; |
| 3616 | |
| 3617 | typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION { |
| 3618 | PVOID Object; |
| 3619 | PVOID CallContext; |
| 3620 | PVOID ObjectContext; |
| 3621 | PVOID Reserved; |
| 3622 | } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION; |
| 3623 | |
| 3624 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 3625 | |
| 3626 | typedef struct _REG_LOAD_KEY_INFORMATION { |
| 3627 | PVOID Object; |
| 3628 | PUNICODE_STRING KeyName; |
| 3629 | PUNICODE_STRING SourceFile; |
| 3630 | ULONG Flags; |
| 3631 | PVOID TrustClassObject; |
| 3632 | PVOID UserEvent; |
| 3633 | ACCESS_MASK DesiredAccess; |
| 3634 | PHANDLE RootHandle; |
| 3635 | PVOID CallContext; |
| 3636 | PVOID ObjectContext; |
| 3637 | PVOID Reserved; |
| 3638 | } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION; |
| 3639 | |
| 3640 | typedef struct _REG_UNLOAD_KEY_INFORMATION { |
| 3641 | PVOID Object; |
| 3642 | PVOID UserEvent; |
| 3643 | PVOID CallContext; |
| 3644 | PVOID ObjectContext; |
| 3645 | PVOID Reserved; |
| 3646 | } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION; |
| 3647 | |
| 3648 | typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION { |
| 3649 | PVOID Object; |
| 3650 | PVOID ObjectContext; |
| 3651 | PVOID Reserved; |
| 3652 | } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION; |
| 3653 | |
| 3654 | typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION { |
| 3655 | PVOID Object; |
| 3656 | PSECURITY_INFORMATION SecurityInformation; |
| 3657 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 3658 | PULONG Length; |
| 3659 | PVOID CallContext; |
| 3660 | PVOID ObjectContext; |
| 3661 | PVOID Reserved; |
| 3662 | } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION; |
| 3663 | |
| 3664 | typedef struct _REG_SET_KEY_SECURITY_INFORMATION { |
| 3665 | PVOID Object; |
| 3666 | PSECURITY_INFORMATION SecurityInformation; |
| 3667 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 3668 | PVOID CallContext; |
| 3669 | PVOID ObjectContext; |
| 3670 | PVOID Reserved; |
| 3671 | } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION; |
| 3672 | |
| 3673 | typedef struct _REG_RESTORE_KEY_INFORMATION { |
| 3674 | PVOID Object; |
| 3675 | HANDLE FileHandle; |
| 3676 | ULONG Flags; |
| 3677 | PVOID CallContext; |
| 3678 | PVOID ObjectContext; |
| 3679 | PVOID Reserved; |
| 3680 | } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION; |
| 3681 | |
| 3682 | typedef struct _REG_SAVE_KEY_INFORMATION { |
| 3683 | PVOID Object; |
| 3684 | HANDLE FileHandle; |
| 3685 | ULONG Format; |
| 3686 | PVOID CallContext; |
| 3687 | PVOID ObjectContext; |
| 3688 | PVOID Reserved; |
| 3689 | } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION; |
| 3690 | |
| 3691 | typedef struct _REG_REPLACE_KEY_INFORMATION { |
| 3692 | PVOID Object; |
| 3693 | PUNICODE_STRING OldFileName; |
| 3694 | PUNICODE_STRING NewFileName; |
| 3695 | PVOID CallContext; |
| 3696 | PVOID ObjectContext; |
| 3697 | PVOID Reserved; |
| 3698 | } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION; |
| 3699 | |
| 3700 | #endif /* NTDDI_VERSION >= NTDDI_VISTA */ |
| 3701 | |
| 3702 | #define SERVICE_KERNEL_DRIVER 0x00000001 |
| 3703 | #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 |
| 3704 | #define SERVICE_ADAPTER 0x00000004 |
| 3705 | #define SERVICE_RECOGNIZER_DRIVER 0x00000008 |
| 3706 | |
| 3707 | #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \ |
| 3708 | SERVICE_FILE_SYSTEM_DRIVER | \ |
| 3709 | SERVICE_RECOGNIZER_DRIVER) |
| 3710 | |
| 3711 | #define SERVICE_WIN32_OWN_PROCESS 0x00000010 |
| 3712 | #define SERVICE_WIN32_SHARE_PROCESS 0x00000020 |
| 3713 | #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \ |
| 3714 | SERVICE_WIN32_SHARE_PROCESS) |
| 3715 | |
| 3716 | #define SERVICE_INTERACTIVE_PROCESS 0x00000100 |
| 3717 | |
| 3718 | #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \ |
| 3719 | SERVICE_ADAPTER | \ |
| 3720 | SERVICE_DRIVER | \ |
| 3721 | SERVICE_INTERACTIVE_PROCESS) |
| 3722 | |
| 3723 | /* Service Start Types */ |
| 3724 | #define SERVICE_BOOT_START 0x00000000 |
| 3725 | #define SERVICE_SYSTEM_START 0x00000001 |
| 3726 | #define SERVICE_AUTO_START 0x00000002 |
| 3727 | #define SERVICE_DEMAND_START 0x00000003 |
| 3728 | #define SERVICE_DISABLED 0x00000004 |
| 3729 | |
| 3730 | #define SERVICE_ERROR_IGNORE 0x00000000 |
| 3731 | #define SERVICE_ERROR_NORMAL 0x00000001 |
| 3732 | #define SERVICE_ERROR_SEVERE 0x00000002 |
| 3733 | #define SERVICE_ERROR_CRITICAL 0x00000003 |
| 3734 | |
| 3735 | typedef enum _CM_SERVICE_NODE_TYPE { |
| 3736 | DriverType = SERVICE_KERNEL_DRIVER, |
| 3737 | FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, |
| 3738 | Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, |
| 3739 | Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, |
| 3740 | AdapterType = SERVICE_ADAPTER, |
| 3741 | RecognizerType = SERVICE_RECOGNIZER_DRIVER |
| 3742 | } SERVICE_NODE_TYPE; |
| 3743 | |
| 3744 | typedef enum _CM_SERVICE_LOAD_TYPE { |
| 3745 | BootLoad = SERVICE_BOOT_START, |
| 3746 | SystemLoad = SERVICE_SYSTEM_START, |
| 3747 | AutoLoad = SERVICE_AUTO_START, |
| 3748 | DemandLoad = SERVICE_DEMAND_START, |
| 3749 | DisableLoad = SERVICE_DISABLED |
| 3750 | } SERVICE_LOAD_TYPE; |
| 3751 | |
| 3752 | typedef enum _CM_ERROR_CONTROL_TYPE { |
| 3753 | IgnoreError = SERVICE_ERROR_IGNORE, |
| 3754 | NormalError = SERVICE_ERROR_NORMAL, |
| 3755 | SevereError = SERVICE_ERROR_SEVERE, |
| 3756 | CriticalError = SERVICE_ERROR_CRITICAL |
| 3757 | } SERVICE_ERROR_TYPE; |
| 3758 | |
| 3759 | #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001 |
| 3760 | #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002 |
| 3761 | #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004 |
| 3762 | |
| 3763 | #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \ |
| 3764 | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \ |
| 3765 | CM_SERVICE_USB_DISK_BOOT_LOAD) |
| 3766 | |
| 3767 | |
| 3768 | /****************************************************************************** |
| 3769 | * I/O Manager Types * |
| 3770 | ******************************************************************************/ |
| 3771 | |
| 3772 | #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS |
| 3773 | |
| 3774 | #define CONNECT_FULLY_SPECIFIED 0x1 |
| 3775 | #define CONNECT_LINE_BASED 0x2 |
| 3776 | #define CONNECT_MESSAGE_BASED 0x3 |
| 3777 | #define CONNECT_FULLY_SPECIFIED_GROUP 0x4 |
| 3778 | #define CONNECT_CURRENT_VERSION 0x4 |
| 3779 | |
| 3780 | #define POOL_COLD_ALLOCATION 256 |
| 3781 | #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8 |
| 3782 | #define POOL_RAISE_IF_ALLOCATION_FAILURE 16 |
| 3783 | |
| 3784 | #define IO_TYPE_ADAPTER 1 |
| 3785 | #define IO_TYPE_CONTROLLER 2 |
| 3786 | #define IO_TYPE_DEVICE 3 |
| 3787 | #define IO_TYPE_DRIVER 4 |
| 3788 | #define IO_TYPE_FILE 5 |
| 3789 | #define IO_TYPE_IRP 6 |
| 3790 | #define IO_TYPE_MASTER_ADAPTER 7 |
| 3791 | #define IO_TYPE_OPEN_PACKET 8 |
| 3792 | #define IO_TYPE_TIMER 9 |
| 3793 | #define IO_TYPE_VPB 10 |
| 3794 | #define IO_TYPE_ERROR_LOG 11 |
| 3795 | #define IO_TYPE_ERROR_MESSAGE 12 |
| 3796 | #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13 |
| 3797 | |
| 3798 | #define IO_TYPE_CSQ_IRP_CONTEXT 1 |
| 3799 | #define IO_TYPE_CSQ 2 |
| 3800 | #define IO_TYPE_CSQ_EX 3 |
| 3801 | |
| 3802 | /* IO_RESOURCE_DESCRIPTOR.Option */ |
| 3803 | #define IO_RESOURCE_PREFERRED 0x01 |
| 3804 | #define IO_RESOURCE_DEFAULT 0x02 |
| 3805 | #define IO_RESOURCE_ALTERNATIVE 0x08 |
| 3806 | |
| 3807 | #define FILE_DEVICE_BEEP 0x00000001 |
| 3808 | #define FILE_DEVICE_CD_ROM 0x00000002 |
| 3809 | #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 |
| 3810 | #define FILE_DEVICE_CONTROLLER 0x00000004 |
| 3811 | #define FILE_DEVICE_DATALINK 0x00000005 |
| 3812 | #define FILE_DEVICE_DFS 0x00000006 |
| 3813 | #define FILE_DEVICE_DISK 0x00000007 |
| 3814 | #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 |
| 3815 | #define FILE_DEVICE_FILE_SYSTEM 0x00000009 |
| 3816 | #define FILE_DEVICE_INPORT_PORT 0x0000000a |
| 3817 | #define FILE_DEVICE_KEYBOARD 0x0000000b |
| 3818 | #define FILE_DEVICE_MAILSLOT 0x0000000c |
| 3819 | #define FILE_DEVICE_MIDI_IN 0x0000000d |
| 3820 | #define FILE_DEVICE_MIDI_OUT 0x0000000e |
| 3821 | #define FILE_DEVICE_MOUSE 0x0000000f |
| 3822 | #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 |
| 3823 | #define FILE_DEVICE_NAMED_PIPE 0x00000011 |
| 3824 | #define FILE_DEVICE_NETWORK 0x00000012 |
| 3825 | #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 |
| 3826 | #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 |
| 3827 | #define FILE_DEVICE_NULL 0x00000015 |
| 3828 | #define FILE_DEVICE_PARALLEL_PORT 0x00000016 |
| 3829 | #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 |
| 3830 | #define FILE_DEVICE_PRINTER 0x00000018 |
| 3831 | #define FILE_DEVICE_SCANNER 0x00000019 |
| 3832 | #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a |
| 3833 | #define FILE_DEVICE_SERIAL_PORT 0x0000001b |
| 3834 | #define FILE_DEVICE_SCREEN 0x0000001c |
| 3835 | #define FILE_DEVICE_SOUND 0x0000001d |
| 3836 | #define FILE_DEVICE_STREAMS 0x0000001e |
| 3837 | #define FILE_DEVICE_TAPE 0x0000001f |
| 3838 | #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 |
| 3839 | #define FILE_DEVICE_TRANSPORT 0x00000021 |
| 3840 | #define FILE_DEVICE_UNKNOWN 0x00000022 |
| 3841 | #define FILE_DEVICE_VIDEO 0x00000023 |
| 3842 | #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 |
| 3843 | #define FILE_DEVICE_WAVE_IN 0x00000025 |
| 3844 | #define FILE_DEVICE_WAVE_OUT 0x00000026 |
| 3845 | #define FILE_DEVICE_8042_PORT 0x00000027 |
| 3846 | #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 |
| 3847 | #define FILE_DEVICE_BATTERY 0x00000029 |
| 3848 | #define FILE_DEVICE_BUS_EXTENDER 0x0000002a |
| 3849 | #define FILE_DEVICE_MODEM 0x0000002b |
| 3850 | #define FILE_DEVICE_VDM 0x0000002c |
| 3851 | #define FILE_DEVICE_MASS_STORAGE 0x0000002d |
| 3852 | #define FILE_DEVICE_SMB 0x0000002e |
| 3853 | #define FILE_DEVICE_KS 0x0000002f |
| 3854 | #define FILE_DEVICE_CHANGER 0x00000030 |
| 3855 | #define FILE_DEVICE_SMARTCARD 0x00000031 |
| 3856 | #define FILE_DEVICE_ACPI 0x00000032 |
| 3857 | #define FILE_DEVICE_DVD 0x00000033 |
| 3858 | #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 |
| 3859 | #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 |
| 3860 | #define FILE_DEVICE_DFS_VOLUME 0x00000036 |
| 3861 | #define FILE_DEVICE_SERENUM 0x00000037 |
| 3862 | #define FILE_DEVICE_TERMSRV 0x00000038 |
| 3863 | #define FILE_DEVICE_KSEC 0x00000039 |
| 3864 | #define FILE_DEVICE_FIPS 0x0000003A |
| 3865 | #define FILE_DEVICE_INFINIBAND 0x0000003B |
| 3866 | #define FILE_DEVICE_VMBUS 0x0000003E |
| 3867 | #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F |
| 3868 | #define FILE_DEVICE_WPD 0x00000040 |
| 3869 | #define FILE_DEVICE_BLUETOOTH 0x00000041 |
| 3870 | #define FILE_DEVICE_MT_COMPOSITE 0x00000042 |
| 3871 | #define FILE_DEVICE_MT_TRANSPORT 0x00000043 |
| 3872 | #define FILE_DEVICE_BIOMETRIC 0x00000044 |
| 3873 | #define FILE_DEVICE_PMI 0x00000045 |
| 3874 | |
| 3875 | #if defined(NT_PROCESSOR_GROUPS) |
| 3876 | |
| 3877 | typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; |
| 3878 | |
| 3879 | typedef enum _IRQ_DEVICE_POLICY_USHORT { |
| 3880 | IrqPolicyMachineDefault = 0, |
| 3881 | IrqPolicyAllCloseProcessors = 1, |
| 3882 | IrqPolicyOneCloseProcessor = 2, |
| 3883 | IrqPolicyAllProcessorsInMachine = 3, |
| 3884 | IrqPolicyAllProcessorsInGroup = 3, |
| 3885 | IrqPolicySpecifiedProcessors = 4, |
| 3886 | IrqPolicySpreadMessagesAcrossAllProcessors = 5, |
| 3887 | IrqPolicyAllProcessorsInMachineWhenSteered = 6, |
| 3888 | IrqPolicyAllProcessorsInGroupWhenSteered = 6 |
| 3889 | }; |
| 3890 | |
| 3891 | #else /* defined(NT_PROCESSOR_GROUPS) */ |
| 3892 | |
| 3893 | typedef enum _IRQ_DEVICE_POLICY { |
| 3894 | IrqPolicyMachineDefault = 0, |
| 3895 | IrqPolicyAllCloseProcessors, |
| 3896 | IrqPolicyOneCloseProcessor, |
| 3897 | IrqPolicyAllProcessorsInMachine, |
| 3898 | IrqPolicySpecifiedProcessors, |
| 3899 | IrqPolicySpreadMessagesAcrossAllProcessors, |
| 3900 | IrqPolicyAllProcessorsInMachineWhenSteered |
| 3901 | } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; |
| 3902 | |
| 3903 | #endif |
| 3904 | |
| 3905 | typedef enum _IRQ_PRIORITY { |
| 3906 | IrqPriorityUndefined = 0, |
| 3907 | IrqPriorityLow, |
| 3908 | IrqPriorityNormal, |
| 3909 | IrqPriorityHigh |
| 3910 | } IRQ_PRIORITY, *PIRQ_PRIORITY; |
| 3911 | |
| 3912 | typedef enum _IRQ_GROUP_POLICY { |
| 3913 | GroupAffinityAllGroupZero = 0, |
| 3914 | GroupAffinityDontCare |
| 3915 | } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY; |
| 3916 | |
| 3917 | #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) |
| 3918 | |
| 3919 | typedef struct _OBJECT_HANDLE_INFORMATION { |
| 3920 | ULONG HandleAttributes; |
| 3921 | ACCESS_MASK GrantedAccess; |
| 3922 | } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; |
| 3923 | |
| 3924 | typedef struct _CLIENT_ID { |
| 3925 | HANDLE UniqueProcess; |
| 3926 | HANDLE UniqueThread; |
| 3927 | } CLIENT_ID, *PCLIENT_ID; |
| 3928 | |
| 3929 | typedef struct _VPB { |
| 3930 | CSHORT Type; |
| 3931 | CSHORT Size; |
| 3932 | USHORT Flags; |
| 3933 | USHORT VolumeLabelLength; |
| 3934 | struct _DEVICE_OBJECT *DeviceObject; |
| 3935 | struct _DEVICE_OBJECT *RealDevice; |
| 3936 | ULONG SerialNumber; |
| 3937 | ULONG ReferenceCount; |
| 3938 | WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; |
| 3939 | } VPB, *PVPB; |
| 3940 | |
| 3941 | typedef enum _IO_ALLOCATION_ACTION { |
| 3942 | KeepObject = 1, |
| 3943 | DeallocateObject, |
| 3944 | DeallocateObjectKeepRegisters |
| 3945 | } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; |
| 3946 | |
| 3947 | typedef IO_ALLOCATION_ACTION |
| 3948 | (NTAPI DRIVER_CONTROL)( |
| 3949 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 3950 | IN struct _IRP *Irp, |
| 3951 | IN PVOID MapRegisterBase, |
| 3952 | IN PVOID Context); |
| 3953 | typedef DRIVER_CONTROL *PDRIVER_CONTROL; |
| 3954 | |
| 3955 | typedef struct _WAIT_CONTEXT_BLOCK { |
| 3956 | KDEVICE_QUEUE_ENTRY WaitQueueEntry; |
| 3957 | PDRIVER_CONTROL DeviceRoutine; |
| 3958 | PVOID DeviceContext; |
| 3959 | ULONG NumberOfMapRegisters; |
| 3960 | PVOID DeviceObject; |
| 3961 | PVOID CurrentIrp; |
| 3962 | PKDPC BufferChainingDpc; |
| 3963 | } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; |
| 3964 | |
| 3965 | /* DEVICE_OBJECT.Flags */ |
| 3966 | #define DO_VERIFY_VOLUME 0x00000002 |
| 3967 | #define DO_BUFFERED_IO 0x00000004 |
| 3968 | #define DO_EXCLUSIVE 0x00000008 |
| 3969 | #define DO_DIRECT_IO 0x00000010 |
| 3970 | #define DO_MAP_IO_BUFFER 0x00000020 |
| 3971 | #define DO_DEVICE_INITIALIZING 0x00000080 |
| 3972 | #define DO_SHUTDOWN_REGISTERED 0x00000800 |
| 3973 | #define DO_BUS_ENUMERATED_DEVICE 0x00001000 |
| 3974 | #define DO_POWER_PAGABLE 0x00002000 |
| 3975 | #define DO_POWER_INRUSH 0x00004000 |
| 3976 | |
| 3977 | /* DEVICE_OBJECT.Characteristics */ |
| 3978 | #define FILE_REMOVABLE_MEDIA 0x00000001 |
| 3979 | #define FILE_READ_ONLY_DEVICE 0x00000002 |
| 3980 | #define FILE_FLOPPY_DISKETTE 0x00000004 |
| 3981 | #define FILE_WRITE_ONCE_MEDIA 0x00000008 |
| 3982 | #define FILE_REMOTE_DEVICE 0x00000010 |
| 3983 | #define FILE_DEVICE_IS_MOUNTED 0x00000020 |
| 3984 | #define FILE_VIRTUAL_VOLUME 0x00000040 |
| 3985 | #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 |
| 3986 | #define FILE_DEVICE_SECURE_OPEN 0x00000100 |
| 3987 | #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 |
| 3988 | #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 |
| 3989 | #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 |
| 3990 | |
| 3991 | /* DEVICE_OBJECT.AlignmentRequirement */ |
| 3992 | #define FILE_BYTE_ALIGNMENT 0x00000000 |
| 3993 | #define FILE_WORD_ALIGNMENT 0x00000001 |
| 3994 | #define FILE_LONG_ALIGNMENT 0x00000003 |
| 3995 | #define FILE_QUAD_ALIGNMENT 0x00000007 |
| 3996 | #define FILE_OCTA_ALIGNMENT 0x0000000f |
| 3997 | #define FILE_32_BYTE_ALIGNMENT 0x0000001f |
| 3998 | #define FILE_64_BYTE_ALIGNMENT 0x0000003f |
| 3999 | #define FILE_128_BYTE_ALIGNMENT 0x0000007f |
| 4000 | #define FILE_256_BYTE_ALIGNMENT 0x000000ff |
| 4001 | #define FILE_512_BYTE_ALIGNMENT 0x000001ff |
| 4002 | |
| 4003 | /* DEVICE_OBJECT.DeviceType */ |
| 4004 | #define DEVICE_TYPE ULONG |
| 4005 | |
| 4006 | typedef struct _DEVICE_OBJECT { |
| 4007 | CSHORT Type; |
| 4008 | USHORT Size; |
| 4009 | LONG ReferenceCount; |
| 4010 | struct _DRIVER_OBJECT *DriverObject; |
| 4011 | struct _DEVICE_OBJECT *NextDevice; |
| 4012 | struct _DEVICE_OBJECT *AttachedDevice; |
| 4013 | struct _IRP *CurrentIrp; |
| 4014 | PIO_TIMER Timer; |
| 4015 | ULONG Flags; |
| 4016 | ULONG Characteristics; |
| 4017 | volatile PVPB Vpb; |
| 4018 | PVOID DeviceExtension; |
| 4019 | DEVICE_TYPE DeviceType; |
| 4020 | CCHAR StackSize; |
| 4021 | union { |
| 4022 | LIST_ENTRY ListEntry; |
| 4023 | WAIT_CONTEXT_BLOCK Wcb; |
| 4024 | } Queue; |
| 4025 | ULONG AlignmentRequirement; |
| 4026 | KDEVICE_QUEUE DeviceQueue; |
| 4027 | KDPC Dpc; |
| 4028 | ULONG ActiveThreadCount; |
| 4029 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 4030 | KEVENT DeviceLock; |
| 4031 | USHORT SectorSize; |
| 4032 | USHORT Spare1; |
| 4033 | struct _DEVOBJ_EXTENSION *DeviceObjectExtension; |
| 4034 | PVOID Reserved; |
| 4035 | } DEVICE_OBJECT, *PDEVICE_OBJECT; |
| 4036 | |
| 4037 | typedef enum _IO_SESSION_STATE { |
| 4038 | IoSessionStateCreated = 1, |
| 4039 | IoSessionStateInitialized, |
| 4040 | IoSessionStateConnected, |
| 4041 | IoSessionStateDisconnected, |
| 4042 | IoSessionStateDisconnectedLoggedOn, |
| 4043 | IoSessionStateLoggedOn, |
| 4044 | IoSessionStateLoggedOff, |
| 4045 | IoSessionStateTerminated, |
| 4046 | IoSessionStateMax |
| 4047 | } IO_SESSION_STATE, *PIO_SESSION_STATE; |
| 4048 | |
| 4049 | typedef enum _IO_COMPLETION_ROUTINE_RESULT { |
| 4050 | ContinueCompletion = STATUS_CONTINUE_COMPLETION, |
| 4051 | StopCompletion = STATUS_MORE_PROCESSING_REQUIRED |
| 4052 | } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT; |
| 4053 | |
| 4054 | typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY { |
| 4055 | PHYSICAL_ADDRESS MessageAddress; |
| 4056 | KAFFINITY TargetProcessorSet; |
| 4057 | PKINTERRUPT InterruptObject; |
| 4058 | ULONG MessageData; |
| 4059 | ULONG Vector; |
| 4060 | KIRQL Irql; |
| 4061 | KINTERRUPT_MODE Mode; |
| 4062 | KINTERRUPT_POLARITY Polarity; |
| 4063 | } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY; |
| 4064 | |
| 4065 | typedef struct _IO_INTERRUPT_MESSAGE_INFO { |
| 4066 | KIRQL UnifiedIrql; |
| 4067 | ULONG MessageCount; |
| 4068 | IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1]; |
| 4069 | } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO; |
| 4070 | |
| 4071 | typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS { |
| 4072 | IN PDEVICE_OBJECT PhysicalDeviceObject; |
| 4073 | OUT PKINTERRUPT *InterruptObject; |
| 4074 | IN PKSERVICE_ROUTINE ServiceRoutine; |
| 4075 | IN PVOID ServiceContext; |
| 4076 | IN PKSPIN_LOCK SpinLock OPTIONAL; |
| 4077 | IN KIRQL SynchronizeIrql; |
| 4078 | IN BOOLEAN FloatingSave; |
| 4079 | IN BOOLEAN ShareVector; |
| 4080 | IN ULONG Vector; |
| 4081 | IN KIRQL Irql; |
| 4082 | IN KINTERRUPT_MODE InterruptMode; |
| 4083 | IN KAFFINITY ProcessorEnableMask; |
| 4084 | IN USHORT Group; |
| 4085 | } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS; |
| 4086 | |
| 4087 | typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS { |
| 4088 | IN PDEVICE_OBJECT PhysicalDeviceObject; |
| 4089 | OUT PKINTERRUPT *InterruptObject; |
| 4090 | IN PKSERVICE_ROUTINE ServiceRoutine; |
| 4091 | IN PVOID ServiceContext; |
| 4092 | IN PKSPIN_LOCK SpinLock OPTIONAL; |
| 4093 | IN KIRQL SynchronizeIrql OPTIONAL; |
| 4094 | IN BOOLEAN FloatingSave; |
| 4095 | } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS; |
| 4096 | |
| 4097 | typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS { |
| 4098 | IN PDEVICE_OBJECT PhysicalDeviceObject; |
| 4099 | union { |
| 4100 | OUT PVOID *Generic; |
| 4101 | OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; |
| 4102 | OUT PKINTERRUPT *InterruptObject; |
| 4103 | } ConnectionContext; |
| 4104 | IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; |
| 4105 | IN PVOID ServiceContext; |
| 4106 | IN PKSPIN_LOCK SpinLock OPTIONAL; |
| 4107 | IN KIRQL SynchronizeIrql OPTIONAL; |
| 4108 | IN BOOLEAN FloatingSave; |
| 4109 | IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL; |
| 4110 | } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS; |
| 4111 | |
| 4112 | typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { |
| 4113 | IN OUT ULONG Version; |
| 4114 | _ANONYMOUS_UNION union { |
| 4115 | IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified; |
| 4116 | IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased; |
| 4117 | IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased; |
| 4118 | } DUMMYUNIONNAME; |
| 4119 | } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS; |
| 4120 | |
| 4121 | typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS { |
| 4122 | IN ULONG Version; |
| 4123 | union { |
| 4124 | IN PVOID Generic; |
| 4125 | IN PKINTERRUPT InterruptObject; |
| 4126 | IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; |
| 4127 | } ConnectionContext; |
| 4128 | } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS; |
| 4129 | |
| 4130 | typedef enum _IO_ACCESS_TYPE { |
| 4131 | ReadAccess, |
| 4132 | WriteAccess, |
| 4133 | ModifyAccess |
| 4134 | } IO_ACCESS_TYPE; |
| 4135 | |
| 4136 | typedef enum _IO_ACCESS_MODE { |
| 4137 | SequentialAccess, |
| 4138 | RandomAccess |
| 4139 | } IO_ACCESS_MODE; |
| 4140 | |
| 4141 | typedef enum _IO_CONTAINER_NOTIFICATION_CLASS { |
| 4142 | IoSessionStateNotification, |
| 4143 | IoMaxContainerNotificationClass |
| 4144 | } IO_CONTAINER_NOTIFICATION_CLASS; |
| 4145 | |
| 4146 | typedef struct _IO_SESSION_STATE_NOTIFICATION { |
| 4147 | ULONG Size; |
| 4148 | ULONG Flags; |
| 4149 | PVOID IoObject; |
| 4150 | ULONG EventMask; |
| 4151 | PVOID Context; |
| 4152 | } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION; |
| 4153 | |
| 4154 | typedef enum _IO_CONTAINER_INFORMATION_CLASS { |
| 4155 | IoSessionStateInformation, |
| 4156 | IoMaxContainerInformationClass |
| 4157 | } IO_CONTAINER_INFORMATION_CLASS; |
| 4158 | |
| 4159 | typedef struct _IO_SESSION_STATE_INFORMATION { |
| 4160 | ULONG SessionId; |
| 4161 | IO_SESSION_STATE SessionState; |
| 4162 | BOOLEAN LocalSession; |
| 4163 | } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION; |
| 4164 | |
| 4165 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 4166 | |
| 4167 | typedef NTSTATUS |
| 4168 | (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)( |
| 4169 | VOID); |
| 4170 | |
| 4171 | typedef NTSTATUS |
| 4172 | (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( |
| 4173 | IN PVOID SessionObject, |
| 4174 | IN PVOID IoObject, |
| 4175 | IN ULONG Event, |
| 4176 | IN PVOID Context, |
| 4177 | IN PVOID NotificationPayload, |
| 4178 | IN ULONG PayloadLength); |
| 4179 | |
| 4180 | typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION; |
| 4181 | |
| 4182 | #endif |
| 4183 | |
| 4184 | typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; |
| 4185 | |
| 4186 | typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { |
| 4187 | BOOLEAN Removed; |
| 4188 | BOOLEAN Reserved[3]; |
| 4189 | volatile LONG IoCount; |
| 4190 | KEVENT RemoveEvent; |
| 4191 | } IO_REMOVE_LOCK_COMMON_BLOCK; |
| 4192 | |
| 4193 | typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { |
| 4194 | LONG Signature; |
| 4195 | LONG HighWatermark; |
| 4196 | LONGLONG MaxLockedTicks; |
| 4197 | LONG AllocateTag; |
| 4198 | LIST_ENTRY LockList; |
| 4199 | KSPIN_LOCK Spin; |
| 4200 | volatile LONG LowMemoryCount; |
| 4201 | ULONG Reserved1[4]; |
| 4202 | PVOID Reserved2; |
| 4203 | PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; |
| 4204 | } IO_REMOVE_LOCK_DBG_BLOCK; |
| 4205 | |
| 4206 | typedef struct _IO_REMOVE_LOCK { |
| 4207 | IO_REMOVE_LOCK_COMMON_BLOCK Common; |
| 4208 | #if DBG |
| 4209 | IO_REMOVE_LOCK_DBG_BLOCK Dbg; |
| 4210 | #endif |
| 4211 | } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; |
| 4212 | |
| 4213 | typedef struct _IO_WORKITEM *PIO_WORKITEM; |
| 4214 | |
| 4215 | typedef VOID |
| 4216 | (NTAPI IO_WORKITEM_ROUTINE)( |
| 4217 | IN PDEVICE_OBJECT DeviceObject, |
| 4218 | IN PVOID Context); |
| 4219 | typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; |
| 4220 | |
| 4221 | typedef VOID |
| 4222 | (NTAPI IO_WORKITEM_ROUTINE_EX)( |
| 4223 | IN PVOID IoObject, |
| 4224 | IN PVOID Context OPTIONAL, |
| 4225 | IN PIO_WORKITEM IoWorkItem); |
| 4226 | typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX; |
| 4227 | |
| 4228 | typedef struct _SHARE_ACCESS { |
| 4229 | ULONG OpenCount; |
| 4230 | ULONG Readers; |
| 4231 | ULONG Writers; |
| 4232 | ULONG Deleters; |
| 4233 | ULONG SharedRead; |
| 4234 | ULONG SharedWrite; |
| 4235 | ULONG SharedDelete; |
| 4236 | } SHARE_ACCESS, *PSHARE_ACCESS; |
| 4237 | |
| 4238 | /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as |
| 4239 | inheritance, even from a struct renders the type non-POD. So we use |
| 4240 | this hack */ |
| 4241 | #define PCI_COMMON_HEADER_LAYOUT \ |
| 4242 | USHORT VendorID; \ |
| 4243 | USHORT DeviceID; \ |
| 4244 | USHORT Command; \ |
| 4245 | USHORT Status; \ |
| 4246 | UCHAR RevisionID; \ |
| 4247 | UCHAR ProgIf; \ |
| 4248 | UCHAR SubClass; \ |
| 4249 | UCHAR BaseClass; \ |
| 4250 | UCHAR CacheLineSize; \ |
| 4251 | UCHAR LatencyTimer; \ |
| 4252 | UCHAR HeaderType; \ |
| 4253 | UCHAR BIST; \ |
| 4254 | union { \ |
| 4255 | struct /* _PCI_HEADER_TYPE_0 */ { \ |
| 4256 | ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ |
| 4257 | ULONG CIS; \ |
| 4258 | USHORT SubVendorID; \ |
| 4259 | USHORT SubSystemID; \ |
| 4260 | ULONG ROMBaseAddress; \ |
| 4261 | UCHAR CapabilitiesPtr; \ |
| 4262 | UCHAR Reserved1[3]; \ |
| 4263 | ULONG Reserved2; \ |
| 4264 | UCHAR InterruptLine; \ |
| 4265 | UCHAR InterruptPin; \ |
| 4266 | UCHAR MinimumGrant; \ |
| 4267 | UCHAR MaximumLatency; \ |
| 4268 | } type0; \ |
| 4269 | struct /* _PCI_HEADER_TYPE_1 */ { \ |
| 4270 | ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ |
| 4271 | UCHAR PrimaryBus; \ |
| 4272 | UCHAR SecondaryBus; \ |
| 4273 | UCHAR SubordinateBus; \ |
| 4274 | UCHAR SecondaryLatency; \ |
| 4275 | UCHAR IOBase; \ |
| 4276 | UCHAR IOLimit; \ |
| 4277 | USHORT SecondaryStatus; \ |
| 4278 | USHORT MemoryBase; \ |
| 4279 | USHORT MemoryLimit; \ |
| 4280 | USHORT PrefetchBase; \ |
| 4281 | USHORT PrefetchLimit; \ |
| 4282 | ULONG PrefetchBaseUpper32; \ |
| 4283 | ULONG PrefetchLimitUpper32; \ |
| 4284 | USHORT IOBaseUpper16; \ |
| 4285 | USHORT IOLimitUpper16; \ |
| 4286 | UCHAR CapabilitiesPtr; \ |
| 4287 | UCHAR Reserved1[3]; \ |
| 4288 | ULONG ROMBaseAddress; \ |
| 4289 | UCHAR InterruptLine; \ |
| 4290 | UCHAR InterruptPin; \ |
| 4291 | USHORT BridgeControl; \ |
| 4292 | } type1; \ |
| 4293 | struct /* _PCI_HEADER_TYPE_2 */ { \ |
| 4294 | ULONG SocketRegistersBaseAddress; \ |
| 4295 | UCHAR CapabilitiesPtr; \ |
| 4296 | UCHAR Reserved; \ |
| 4297 | USHORT SecondaryStatus; \ |
| 4298 | UCHAR PrimaryBus; \ |
| 4299 | UCHAR SecondaryBus; \ |
| 4300 | UCHAR SubordinateBus; \ |
| 4301 | UCHAR SecondaryLatency; \ |
| 4302 | struct { \ |
| 4303 | ULONG Base; \ |
| 4304 | ULONG Limit; \ |
| 4305 | } Range[PCI_TYPE2_ADDRESSES-1]; \ |
| 4306 | UCHAR InterruptLine; \ |
| 4307 | UCHAR InterruptPin; \ |
| 4308 | USHORT BridgeControl; \ |
| 4309 | } type2; \ |
| 4310 | } u; |
| 4311 | |
| 4312 | typedef enum _CREATE_FILE_TYPE { |
| 4313 | CreateFileTypeNone, |
| 4314 | CreateFileTypeNamedPipe, |
| 4315 | CreateFileTypeMailslot |
| 4316 | } CREATE_FILE_TYPE; |
| 4317 | |
| 4318 | typedef struct _NAMED_PIPE_CREATE_PARAMETERS { |
| 4319 | ULONG NamedPipeType; |
| 4320 | ULONG ReadMode; |
| 4321 | ULONG CompletionMode; |
| 4322 | ULONG MaximumInstances; |
| 4323 | ULONG InboundQuota; |
| 4324 | ULONG OutboundQuota; |
| 4325 | LARGE_INTEGER DefaultTimeout; |
| 4326 | BOOLEAN TimeoutSpecified; |
| 4327 | } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS; |
| 4328 | |
| 4329 | typedef struct _MAILSLOT_CREATE_PARAMETERS { |
| 4330 | ULONG MailslotQuota; |
| 4331 | ULONG MaximumMessageSize; |
| 4332 | LARGE_INTEGER ReadTimeout; |
| 4333 | BOOLEAN TimeoutSpecified; |
| 4334 | } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS; |
| 4335 | |
| 4336 | #define IO_FORCE_ACCESS_CHECK 0x001 |
| 4337 | #define IO_NO_PARAMETER_CHECKING 0x100 |
| 4338 | |
| 4339 | #define IO_REPARSE 0x0 |
| 4340 | #define IO_REMOUNT 0x1 |
| 4341 | |
| 4342 | typedef struct _IO_STATUS_BLOCK { |
| 4343 | _ANONYMOUS_UNION union { |
| 4344 | NTSTATUS Status; |
| 4345 | PVOID Pointer; |
| 4346 | } DUMMYUNIONNAME; |
| 4347 | ULONG_PTR Information; |
| 4348 | } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; |
| 4349 | |
| 4350 | #if defined(_WIN64) |
| 4351 | typedef struct _IO_STATUS_BLOCK32 { |
| 4352 | NTSTATUS Status; |
| 4353 | ULONG Information; |
| 4354 | } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32; |
| 4355 | #endif |
| 4356 | |
| 4357 | typedef VOID |
| 4358 | (NTAPI *PIO_APC_ROUTINE)( |
| 4359 | IN PVOID ApcContext, |
| 4360 | IN PIO_STATUS_BLOCK IoStatusBlock, |
| 4361 | IN ULONG Reserved); |
| 4362 | |
| 4363 | #define PIO_APC_ROUTINE_DEFINED |
| 4364 | |
| 4365 | typedef enum _IO_SESSION_EVENT { |
| 4366 | IoSessionEventIgnore = 0, |
| 4367 | IoSessionEventCreated, |
| 4368 | IoSessionEventTerminated, |
| 4369 | IoSessionEventConnected, |
| 4370 | IoSessionEventDisconnected, |
| 4371 | IoSessionEventLogon, |
| 4372 | IoSessionEventLogoff, |
| 4373 | IoSessionEventMax |
| 4374 | } IO_SESSION_EVENT, *PIO_SESSION_EVENT; |
| 4375 | |
| 4376 | #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff |
| 4377 | #define IO_SESSION_STATE_CREATION_EVENT 0x00000001 |
| 4378 | #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002 |
| 4379 | #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004 |
| 4380 | #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008 |
| 4381 | #define IO_SESSION_STATE_LOGON_EVENT 0x00000010 |
| 4382 | #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020 |
| 4383 | |
| 4384 | #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f |
| 4385 | |
| 4386 | #define IO_SESSION_MAX_PAYLOAD_SIZE 256L |
| 4387 | |
| 4388 | typedef struct _IO_SESSION_CONNECT_INFO { |
| 4389 | ULONG SessionId; |
| 4390 | BOOLEAN LocalSession; |
| 4391 | } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO; |
| 4392 | |
| 4393 | #define EVENT_INCREMENT 1 |
| 4394 | #define IO_NO_INCREMENT 0 |
| 4395 | #define IO_CD_ROM_INCREMENT 1 |
| 4396 | #define IO_DISK_INCREMENT 1 |
| 4397 | #define IO_KEYBOARD_INCREMENT 6 |
| 4398 | #define IO_MAILSLOT_INCREMENT 2 |
| 4399 | #define IO_MOUSE_INCREMENT 6 |
| 4400 | #define IO_NAMED_PIPE_INCREMENT 2 |
| 4401 | #define IO_NETWORK_INCREMENT 2 |
| 4402 | #define IO_PARALLEL_INCREMENT 1 |
| 4403 | #define IO_SERIAL_INCREMENT 2 |
| 4404 | #define IO_SOUND_INCREMENT 8 |
| 4405 | #define IO_VIDEO_INCREMENT 1 |
| 4406 | #define SEMAPHORE_INCREMENT 1 |
| 4407 | |
| 4408 | #define MM_MAXIMUM_DISK_IO_SIZE (0x10000) |
| 4409 | |
| 4410 | typedef struct _BOOTDISK_INFORMATION { |
| 4411 | LONGLONG BootPartitionOffset; |
| 4412 | LONGLONG SystemPartitionOffset; |
| 4413 | ULONG BootDeviceSignature; |
| 4414 | ULONG SystemDeviceSignature; |
| 4415 | } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; |
| 4416 | |
| 4417 | typedef struct _BOOTDISK_INFORMATION_EX { |
| 4418 | LONGLONG BootPartitionOffset; |
| 4419 | LONGLONG SystemPartitionOffset; |
| 4420 | ULONG BootDeviceSignature; |
| 4421 | ULONG SystemDeviceSignature; |
| 4422 | GUID BootDeviceGuid; |
| 4423 | GUID SystemDeviceGuid; |
| 4424 | BOOLEAN BootDeviceIsGpt; |
| 4425 | BOOLEAN SystemDeviceIsGpt; |
| 4426 | } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; |
| 4427 | |
| 4428 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 4429 | |
| 4430 | typedef struct _LOADER_PARTITION_INFORMATION_EX { |
| 4431 | ULONG PartitionStyle; |
| 4432 | ULONG PartitionNumber; |
| 4433 | _ANONYMOUS_UNION union { |
| 4434 | ULONG Signature; |
| 4435 | GUID DeviceId; |
| 4436 | } DUMMYUNIONNAME; |
| 4437 | ULONG Flags; |
| 4438 | } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX; |
| 4439 | |
| 4440 | typedef struct _BOOTDISK_INFORMATION_LITE { |
| 4441 | ULONG NumberEntries; |
| 4442 | LOADER_PARTITION_INFORMATION_EX Entries[1]; |
| 4443 | } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; |
| 4444 | |
| 4445 | #else |
| 4446 | |
| 4447 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 4448 | typedef struct _BOOTDISK_INFORMATION_LITE { |
| 4449 | ULONG BootDeviceSignature; |
| 4450 | ULONG SystemDeviceSignature; |
| 4451 | GUID BootDeviceGuid; |
| 4452 | GUID SystemDeviceGuid; |
| 4453 | BOOLEAN BootDeviceIsGpt; |
| 4454 | BOOLEAN SystemDeviceIsGpt; |
| 4455 | } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; |
| 4456 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 4457 | |
| 4458 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 4459 | |
| 4460 | #include <pshpack1.h> |
| 4461 | |
| 4462 | typedef struct _EISA_MEMORY_TYPE { |
| 4463 | UCHAR ReadWrite:1; |
| 4464 | UCHAR Cached:1; |
| 4465 | UCHAR Reserved0:1; |
| 4466 | UCHAR Type:2; |
| 4467 | UCHAR Shared:1; |
| 4468 | UCHAR Reserved1:1; |
| 4469 | UCHAR MoreEntries:1; |
| 4470 | } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; |
| 4471 | |
| 4472 | typedef struct _EISA_MEMORY_CONFIGURATION { |
| 4473 | EISA_MEMORY_TYPE ConfigurationByte; |
| 4474 | UCHAR DataSize; |
| 4475 | USHORT AddressLowWord; |
| 4476 | UCHAR AddressHighByte; |
| 4477 | USHORT MemorySize; |
| 4478 | } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; |
| 4479 | |
| 4480 | typedef struct _EISA_IRQ_DESCRIPTOR { |
| 4481 | UCHAR Interrupt:4; |
| 4482 | UCHAR Reserved:1; |
| 4483 | UCHAR LevelTriggered:1; |
| 4484 | UCHAR Shared:1; |
| 4485 | UCHAR MoreEntries:1; |
| 4486 | } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; |
| 4487 | |
| 4488 | typedef struct _EISA_IRQ_CONFIGURATION { |
| 4489 | EISA_IRQ_DESCRIPTOR ConfigurationByte; |
| 4490 | UCHAR Reserved; |
| 4491 | } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; |
| 4492 | |
| 4493 | typedef struct _DMA_CONFIGURATION_BYTE0 { |
| 4494 | UCHAR Channel:3; |
| 4495 | UCHAR Reserved:3; |
| 4496 | UCHAR Shared:1; |
| 4497 | UCHAR MoreEntries:1; |
| 4498 | } DMA_CONFIGURATION_BYTE0; |
| 4499 | |
| 4500 | typedef struct _DMA_CONFIGURATION_BYTE1 { |
| 4501 | UCHAR Reserved0:2; |
| 4502 | UCHAR TransferSize:2; |
| 4503 | UCHAR Timing:2; |
| 4504 | UCHAR Reserved1:2; |
| 4505 | } DMA_CONFIGURATION_BYTE1; |
| 4506 | |
| 4507 | typedef struct _EISA_DMA_CONFIGURATION { |
| 4508 | DMA_CONFIGURATION_BYTE0 ConfigurationByte0; |
| 4509 | DMA_CONFIGURATION_BYTE1 ConfigurationByte1; |
| 4510 | } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; |
| 4511 | |
| 4512 | typedef struct _EISA_PORT_DESCRIPTOR { |
| 4513 | UCHAR NumberPorts:5; |
| 4514 | UCHAR Reserved:1; |
| 4515 | UCHAR Shared:1; |
| 4516 | UCHAR MoreEntries:1; |
| 4517 | } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; |
| 4518 | |
| 4519 | typedef struct _EISA_PORT_CONFIGURATION { |
| 4520 | EISA_PORT_DESCRIPTOR Configuration; |
| 4521 | USHORT PortAddress; |
| 4522 | } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; |
| 4523 | |
| 4524 | typedef struct _CM_EISA_SLOT_INFORMATION { |
| 4525 | UCHAR ReturnCode; |
| 4526 | UCHAR ReturnFlags; |
| 4527 | UCHAR MajorRevision; |
| 4528 | UCHAR MinorRevision; |
| 4529 | USHORT Checksum; |
| 4530 | UCHAR NumberFunctions; |
| 4531 | UCHAR FunctionInformation; |
| 4532 | ULONG CompressedId; |
| 4533 | } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; |
| 4534 | |
| 4535 | typedef struct _CM_EISA_FUNCTION_INFORMATION { |
| 4536 | ULONG CompressedId; |
| 4537 | UCHAR IdSlotFlags1; |
| 4538 | UCHAR IdSlotFlags2; |
| 4539 | UCHAR MinorRevision; |
| 4540 | UCHAR MajorRevision; |
| 4541 | UCHAR Selections[26]; |
| 4542 | UCHAR FunctionFlags; |
| 4543 | UCHAR TypeString[80]; |
| 4544 | EISA_MEMORY_CONFIGURATION EisaMemory[9]; |
| 4545 | EISA_IRQ_CONFIGURATION EisaIrq[7]; |
| 4546 | EISA_DMA_CONFIGURATION EisaDma[4]; |
| 4547 | EISA_PORT_CONFIGURATION EisaPort[20]; |
| 4548 | UCHAR InitializationData[60]; |
| 4549 | } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; |
| 4550 | |
| 4551 | #include <poppack.h> |
| 4552 | |
| 4553 | /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ |
| 4554 | |
| 4555 | #define EISA_FUNCTION_ENABLED 0x80 |
| 4556 | #define EISA_FREE_FORM_DATA 0x40 |
| 4557 | #define EISA_HAS_PORT_INIT_ENTRY 0x20 |
| 4558 | #define EISA_HAS_PORT_RANGE 0x10 |
| 4559 | #define EISA_HAS_DMA_ENTRY 0x08 |
| 4560 | #define EISA_HAS_IRQ_ENTRY 0x04 |
| 4561 | #define EISA_HAS_MEMORY_ENTRY 0x02 |
| 4562 | #define EISA_HAS_TYPE_ENTRY 0x01 |
| 4563 | #define EISA_HAS_INFORMATION \ |
| 4564 | (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ |
| 4565 | + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) |
| 4566 | |
| 4567 | #define EISA_MORE_ENTRIES 0x80 |
| 4568 | #define EISA_SYSTEM_MEMORY 0x00 |
| 4569 | #define EISA_MEMORY_TYPE_RAM 0x01 |
| 4570 | |
| 4571 | /* CM_EISA_SLOT_INFORMATION.ReturnCode */ |
| 4572 | |
| 4573 | #define EISA_INVALID_SLOT 0x80 |
| 4574 | #define EISA_INVALID_FUNCTION 0x81 |
| 4575 | #define EISA_INVALID_CONFIGURATION 0x82 |
| 4576 | #define EISA_EMPTY_SLOT 0x83 |
| 4577 | #define EISA_INVALID_BIOS_CALL 0x86 |
| 4578 | |
| 4579 | /* |
| 4580 | ** Plug and Play structures |
| 4581 | */ |
| 4582 | |
| 4583 | typedef VOID |
| 4584 | (NTAPI *PINTERFACE_REFERENCE)( |
| 4585 | PVOID Context); |
| 4586 | |
| 4587 | typedef VOID |
| 4588 | (NTAPI *PINTERFACE_DEREFERENCE)( |
| 4589 | PVOID Context); |
| 4590 | |
| 4591 | typedef BOOLEAN |
| 4592 | (NTAPI TRANSLATE_BUS_ADDRESS)( |
| 4593 | IN PVOID Context, |
| 4594 | IN PHYSICAL_ADDRESS BusAddress, |
| 4595 | IN ULONG Length, |
| 4596 | IN OUT PULONG AddressSpace, |
| 4597 | OUT PPHYSICAL_ADDRESS TranslatedAddress); |
| 4598 | typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS; |
| 4599 | |
| 4600 | typedef struct _DMA_ADAPTER* |
| 4601 | (NTAPI GET_DMA_ADAPTER)( |
| 4602 | IN PVOID Context, |
| 4603 | IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, |
| 4604 | OUT PULONG NumberOfMapRegisters); |
| 4605 | typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER; |
| 4606 | |
| 4607 | typedef ULONG |
| 4608 | (NTAPI GET_SET_DEVICE_DATA)( |
| 4609 | IN PVOID Context, |
| 4610 | IN ULONG DataType, |
| 4611 | IN PVOID Buffer, |
| 4612 | IN ULONG Offset, |
| 4613 | IN ULONG Length); |
| 4614 | typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA; |
| 4615 | |
| 4616 | typedef enum _DEVICE_INSTALL_STATE { |
| 4617 | InstallStateInstalled, |
| 4618 | InstallStateNeedsReinstall, |
| 4619 | InstallStateFailedInstall, |
| 4620 | InstallStateFinishInstall |
| 4621 | } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE; |
| 4622 | |
| 4623 | typedef struct _LEGACY_BUS_INFORMATION { |
| 4624 | GUID BusTypeGuid; |
| 4625 | INTERFACE_TYPE LegacyBusType; |
| 4626 | ULONG BusNumber; |
| 4627 | } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION; |
| 4628 | |
| 4629 | typedef enum _DEVICE_REMOVAL_POLICY { |
| 4630 | RemovalPolicyExpectNoRemoval = 1, |
| 4631 | RemovalPolicyExpectOrderlyRemoval = 2, |
| 4632 | RemovalPolicyExpectSurpriseRemoval = 3 |
| 4633 | } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY; |
| 4634 | |
| 4635 | typedef VOID |
| 4636 | (NTAPI*PREENUMERATE_SELF)( |
| 4637 | IN PVOID Context); |
| 4638 | |
| 4639 | typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { |
| 4640 | USHORT Size; |
| 4641 | USHORT Version; |
| 4642 | PVOID Context; |
| 4643 | PINTERFACE_REFERENCE InterfaceReference; |
| 4644 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 4645 | PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf; |
| 4646 | } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD; |
| 4647 | |
| 4648 | typedef VOID |
| 4649 | (NTAPI *PIO_DEVICE_EJECT_CALLBACK)( |
| 4650 | IN NTSTATUS Status, |
| 4651 | IN OUT PVOID Context OPTIONAL); |
| 4652 | |
| 4653 | #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1 |
| 4654 | |
| 4655 | /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */ |
| 4656 | #define PCI_USE_SUBSYSTEM_IDS 0x00000001 |
| 4657 | #define PCI_USE_REVISION 0x00000002 |
| 4658 | #define PCI_USE_VENDEV_IDS 0x00000004 |
| 4659 | #define PCI_USE_CLASS_SUBCLASS 0x00000008 |
| 4660 | #define PCI_USE_PROGIF 0x00000010 |
| 4661 | #define PCI_USE_LOCAL_BUS 0x00000020 |
| 4662 | #define PCI_USE_LOCAL_DEVICE 0x00000040 |
| 4663 | |
| 4664 | typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { |
| 4665 | ULONG Size; |
| 4666 | ULONG Flags; |
| 4667 | USHORT VendorID; |
| 4668 | USHORT DeviceID; |
| 4669 | UCHAR RevisionID; |
| 4670 | USHORT SubVendorID; |
| 4671 | USHORT SubSystemID; |
| 4672 | UCHAR BaseClass; |
| 4673 | UCHAR SubClass; |
| 4674 | UCHAR ProgIf; |
| 4675 | } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; |
| 4676 | |
| 4677 | typedef BOOLEAN |
| 4678 | (NTAPI PCI_IS_DEVICE_PRESENT)( |
| 4679 | IN USHORT VendorID, |
| 4680 | IN USHORT DeviceID, |
| 4681 | IN UCHAR RevisionID, |
| 4682 | IN USHORT SubVendorID, |
| 4683 | IN USHORT SubSystemID, |
| 4684 | IN ULONG Flags); |
| 4685 | typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT; |
| 4686 | |
| 4687 | typedef BOOLEAN |
| 4688 | (NTAPI PCI_IS_DEVICE_PRESENT_EX)( |
| 4689 | IN PVOID Context, |
| 4690 | IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); |
| 4691 | typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX; |
| 4692 | |
| 4693 | typedef struct _BUS_INTERFACE_STANDARD { |
| 4694 | USHORT Size; |
| 4695 | USHORT Version; |
| 4696 | PVOID Context; |
| 4697 | PINTERFACE_REFERENCE InterfaceReference; |
| 4698 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 4699 | PTRANSLATE_BUS_ADDRESS TranslateBusAddress; |
| 4700 | PGET_DMA_ADAPTER GetDmaAdapter; |
| 4701 | PGET_SET_DEVICE_DATA SetBusData; |
| 4702 | PGET_SET_DEVICE_DATA GetBusData; |
| 4703 | } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; |
| 4704 | |
| 4705 | typedef struct _PCI_DEVICE_PRESENT_INTERFACE { |
| 4706 | USHORT Size; |
| 4707 | USHORT Version; |
| 4708 | PVOID Context; |
| 4709 | PINTERFACE_REFERENCE InterfaceReference; |
| 4710 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 4711 | PPCI_IS_DEVICE_PRESENT IsDevicePresent; |
| 4712 | PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; |
| 4713 | } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; |
| 4714 | |
| 4715 | typedef struct _DEVICE_CAPABILITIES { |
| 4716 | USHORT Size; |
| 4717 | USHORT Version; |
| 4718 | ULONG DeviceD1:1; |
| 4719 | ULONG DeviceD2:1; |
| 4720 | ULONG LockSupported:1; |
| 4721 | ULONG EjectSupported:1; |
| 4722 | ULONG Removable:1; |
| 4723 | ULONG DockDevice:1; |
| 4724 | ULONG UniqueID:1; |
| 4725 | ULONG SilentInstall:1; |
| 4726 | ULONG RawDeviceOK:1; |
| 4727 | ULONG SurpriseRemovalOK:1; |
| 4728 | ULONG WakeFromD0:1; |
| 4729 | ULONG WakeFromD1:1; |
| 4730 | ULONG WakeFromD2:1; |
| 4731 | ULONG WakeFromD3:1; |
| 4732 | ULONG HardwareDisabled:1; |
| 4733 | ULONG NonDynamic:1; |
| 4734 | ULONG WarmEjectSupported:1; |
| 4735 | ULONG NoDisplayInUI:1; |
| 4736 | ULONG Reserved:14; |
| 4737 | ULONG Address; |
| 4738 | ULONG UINumber; |
| 4739 | DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; |
| 4740 | SYSTEM_POWER_STATE SystemWake; |
| 4741 | DEVICE_POWER_STATE DeviceWake; |
| 4742 | ULONG D1Latency; |
| 4743 | ULONG D2Latency; |
| 4744 | ULONG D3Latency; |
| 4745 | } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; |
| 4746 | |
| 4747 | typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { |
| 4748 | USHORT Version; |
| 4749 | USHORT Size; |
| 4750 | GUID Event; |
| 4751 | GUID InterfaceClassGuid; |
| 4752 | PUNICODE_STRING SymbolicLinkName; |
| 4753 | } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; |
| 4754 | |
| 4755 | typedef struct _HWPROFILE_CHANGE_NOTIFICATION { |
| 4756 | USHORT Version; |
| 4757 | USHORT Size; |
| 4758 | GUID Event; |
| 4759 | } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; |
| 4760 | |
| 4761 | #undef INTERFACE |
| 4762 | |
| 4763 | typedef struct _INTERFACE { |
| 4764 | USHORT Size; |
| 4765 | USHORT Version; |
| 4766 | PVOID Context; |
| 4767 | PINTERFACE_REFERENCE InterfaceReference; |
| 4768 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 4769 | } INTERFACE, *PINTERFACE; |
| 4770 | |
| 4771 | typedef struct _PLUGPLAY_NOTIFICATION_HEADER { |
| 4772 | USHORT Version; |
| 4773 | USHORT Size; |
| 4774 | GUID Event; |
| 4775 | } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; |
| 4776 | |
| 4777 | typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; |
| 4778 | |
| 4779 | /* PNP_DEVICE_STATE */ |
| 4780 | |
| 4781 | #define PNP_DEVICE_DISABLED 0x00000001 |
| 4782 | #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 |
| 4783 | #define PNP_DEVICE_FAILED 0x00000004 |
| 4784 | #define PNP_DEVICE_REMOVED 0x00000008 |
| 4785 | #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 |
| 4786 | #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 |
| 4787 | |
| 4788 | typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { |
| 4789 | USHORT Version; |
| 4790 | USHORT Size; |
| 4791 | GUID Event; |
| 4792 | struct _FILE_OBJECT *FileObject; |
| 4793 | LONG NameBufferOffset; |
| 4794 | UCHAR CustomDataBuffer[1]; |
| 4795 | } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; |
| 4796 | |
| 4797 | typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { |
| 4798 | USHORT Version; |
| 4799 | USHORT Size; |
| 4800 | GUID Event; |
| 4801 | struct _FILE_OBJECT *FileObject; |
| 4802 | } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; |
| 4803 | |
| 4804 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 4805 | #include <devpropdef.h> |
| 4806 | #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001 |
| 4807 | #endif |
| 4808 | |
| 4809 | #define PNP_REPLACE_NO_MAP MAXLONGLONG |
| 4810 | |
| 4811 | typedef NTSTATUS |
| 4812 | (NTAPI *PREPLACE_MAP_MEMORY)( |
| 4813 | IN PHYSICAL_ADDRESS TargetPhysicalAddress, |
| 4814 | IN PHYSICAL_ADDRESS SparePhysicalAddress, |
| 4815 | IN OUT PLARGE_INTEGER NumberOfBytes, |
| 4816 | OUT PVOID *TargetAddress, |
| 4817 | OUT PVOID *SpareAddress); |
| 4818 | |
| 4819 | typedef struct _PNP_REPLACE_MEMORY_LIST { |
| 4820 | ULONG AllocatedCount; |
| 4821 | ULONG Count; |
| 4822 | ULONGLONG TotalLength; |
| 4823 | struct { |
| 4824 | PHYSICAL_ADDRESS Address; |
| 4825 | ULONGLONG Length; |
| 4826 | } Ranges[ANYSIZE_ARRAY]; |
| 4827 | } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST; |
| 4828 | |
| 4829 | typedef struct _PNP_REPLACE_PROCESSOR_LIST { |
| 4830 | PKAFFINITY Affinity; |
| 4831 | ULONG GroupCount; |
| 4832 | ULONG AllocatedCount; |
| 4833 | ULONG Count; |
| 4834 | ULONG ApicIds[ANYSIZE_ARRAY]; |
| 4835 | } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST; |
| 4836 | |
| 4837 | typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 { |
| 4838 | KAFFINITY AffinityMask; |
| 4839 | ULONG AllocatedCount; |
| 4840 | ULONG Count; |
| 4841 | ULONG ApicIds[ANYSIZE_ARRAY]; |
| 4842 | } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1; |
| 4843 | |
| 4844 | #define PNP_REPLACE_PARAMETERS_VERSION 2 |
| 4845 | |
| 4846 | typedef struct _PNP_REPLACE_PARAMETERS { |
| 4847 | ULONG Size; |
| 4848 | ULONG Version; |
| 4849 | ULONG64 Target; |
| 4850 | ULONG64 Spare; |
| 4851 | PPNP_REPLACE_PROCESSOR_LIST TargetProcessors; |
| 4852 | PPNP_REPLACE_PROCESSOR_LIST SpareProcessors; |
| 4853 | PPNP_REPLACE_MEMORY_LIST TargetMemory; |
| 4854 | PPNP_REPLACE_MEMORY_LIST SpareMemory; |
| 4855 | PREPLACE_MAP_MEMORY MapMemory; |
| 4856 | } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS; |
| 4857 | |
| 4858 | typedef VOID |
| 4859 | (NTAPI *PREPLACE_UNLOAD)( |
| 4860 | VOID); |
| 4861 | |
| 4862 | typedef NTSTATUS |
| 4863 | (NTAPI *PREPLACE_BEGIN)( |
| 4864 | IN PPNP_REPLACE_PARAMETERS Parameters, |
| 4865 | OUT PVOID *Context); |
| 4866 | |
| 4867 | typedef NTSTATUS |
| 4868 | (NTAPI *PREPLACE_END)( |
| 4869 | IN PVOID Context); |
| 4870 | |
| 4871 | typedef NTSTATUS |
| 4872 | (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( |
| 4873 | IN PVOID Context, |
| 4874 | IN PHYSICAL_ADDRESS PhysicalAddress, |
| 4875 | IN LARGE_INTEGER ByteCount); |
| 4876 | |
| 4877 | typedef NTSTATUS |
| 4878 | (NTAPI *PREPLACE_SET_PROCESSOR_ID)( |
| 4879 | IN PVOID Context, |
| 4880 | IN ULONG ApicId, |
| 4881 | IN BOOLEAN Target); |
| 4882 | |
| 4883 | typedef NTSTATUS |
| 4884 | (NTAPI *PREPLACE_SWAP)( |
| 4885 | IN PVOID Context); |
| 4886 | |
| 4887 | typedef NTSTATUS |
| 4888 | (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( |
| 4889 | IN PVOID Context); |
| 4890 | |
| 4891 | typedef NTSTATUS |
| 4892 | (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( |
| 4893 | IN PVOID Context); |
| 4894 | |
| 4895 | typedef NTSTATUS |
| 4896 | (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( |
| 4897 | IN PVOID Context, |
| 4898 | IN PHYSICAL_ADDRESS SourceAddress, |
| 4899 | OUT PPHYSICAL_ADDRESS DestinationAddress); |
| 4900 | |
| 4901 | typedef NTSTATUS |
| 4902 | (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( |
| 4903 | IN PVOID Context, |
| 4904 | IN BOOLEAN Enable); |
| 4905 | |
| 4906 | #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1 |
| 4907 | #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \ |
| 4908 | FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror) |
| 4909 | |
| 4910 | #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001 |
| 4911 | #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002 |
| 4912 | #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004 |
| 4913 | #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008 |
| 4914 | #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010 |
| 4915 | |
| 4916 | typedef struct _PNP_REPLACE_DRIVER_INTERFACE { |
| 4917 | ULONG Size; |
| 4918 | ULONG Version; |
| 4919 | ULONG Flags; |
| 4920 | PREPLACE_UNLOAD Unload; |
| 4921 | PREPLACE_BEGIN BeginReplace; |
| 4922 | PREPLACE_END EndReplace; |
| 4923 | PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory; |
| 4924 | PREPLACE_SET_PROCESSOR_ID SetProcessorId; |
| 4925 | PREPLACE_SWAP Swap; |
| 4926 | PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror; |
| 4927 | PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory; |
| 4928 | PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination; |
| 4929 | PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce; |
| 4930 | } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE; |
| 4931 | |
| 4932 | typedef NTSTATUS |
| 4933 | (NTAPI *PREPLACE_DRIVER_INIT)( |
| 4934 | IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface, |
| 4935 | IN PVOID Unused); |
| 4936 | |
| 4937 | typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { |
| 4938 | DeviceUsageTypeUndefined, |
| 4939 | DeviceUsageTypePaging, |
| 4940 | DeviceUsageTypeHibernation, |
| 4941 | DeviceUsageTypeDumpFile, |
| 4942 | DeviceUsageTypeBoot, |
| 4943 | DeviceUsageTypePostDisplay, |
| 4944 | DeviceUsageTypeGuestAssigned |
| 4945 | } DEVICE_USAGE_NOTIFICATION_TYPE; |
| 4946 | |
| 4947 | typedef struct _POWER_SEQUENCE { |
| 4948 | ULONG SequenceD1; |
| 4949 | ULONG SequenceD2; |
| 4950 | ULONG SequenceD3; |
| 4951 | } POWER_SEQUENCE, *PPOWER_SEQUENCE; |
| 4952 | |
| 4953 | typedef enum { |
| 4954 | DevicePropertyDeviceDescription = 0x0, |
| 4955 | DevicePropertyHardwareID = 0x1, |
| 4956 | DevicePropertyCompatibleIDs = 0x2, |
| 4957 | DevicePropertyBootConfiguration = 0x3, |
| 4958 | DevicePropertyBootConfigurationTranslated = 0x4, |
| 4959 | DevicePropertyClassName = 0x5, |
| 4960 | DevicePropertyClassGuid = 0x6, |
| 4961 | DevicePropertyDriverKeyName = 0x7, |
| 4962 | DevicePropertyManufacturer = 0x8, |
| 4963 | DevicePropertyFriendlyName = 0x9, |
| 4964 | DevicePropertyLocationInformation = 0xa, |
| 4965 | DevicePropertyPhysicalDeviceObjectName = 0xb, |
| 4966 | DevicePropertyBusTypeGuid = 0xc, |
| 4967 | DevicePropertyLegacyBusType = 0xd, |
| 4968 | DevicePropertyBusNumber = 0xe, |
| 4969 | DevicePropertyEnumeratorName = 0xf, |
| 4970 | DevicePropertyAddress = 0x10, |
| 4971 | DevicePropertyUINumber = 0x11, |
| 4972 | DevicePropertyInstallState = 0x12, |
| 4973 | DevicePropertyRemovalPolicy = 0x13, |
| 4974 | DevicePropertyResourceRequirements = 0x14, |
| 4975 | DevicePropertyAllocatedResources = 0x15, |
| 4976 | DevicePropertyContainerID = 0x16 |
| 4977 | } DEVICE_REGISTRY_PROPERTY; |
| 4978 | |
| 4979 | typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { |
| 4980 | EventCategoryReserved, |
| 4981 | EventCategoryHardwareProfileChange, |
| 4982 | EventCategoryDeviceInterfaceChange, |
| 4983 | EventCategoryTargetDeviceChange, |
| 4984 | EventCategoryKernelSoftRestart |
| 4985 | } IO_NOTIFICATION_EVENT_CATEGORY; |
| 4986 | |
| 4987 | typedef enum _IO_PRIORITY_HINT { |
| 4988 | IoPriorityVeryLow = 0, |
| 4989 | IoPriorityLow, |
| 4990 | IoPriorityNormal, |
| 4991 | IoPriorityHigh, |
| 4992 | IoPriorityCritical, |
| 4993 | MaxIoPriorityTypes |
| 4994 | } IO_PRIORITY_HINT; |
| 4995 | |
| 4996 | #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 |
| 4997 | |
| 4998 | typedef NTSTATUS |
| 4999 | (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( |
| 5000 | IN PVOID NotificationStructure, |
| 5001 | IN PVOID Context); |
| 5002 | typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE; |
| 5003 | |
| 5004 | typedef VOID |
| 5005 | (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( |
| 5006 | IN PVOID Context); |
| 5007 | typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK; |
| 5008 | |
| 5009 | typedef enum _FILE_INFORMATION_CLASS { |
| 5010 | FileDirectoryInformation = 1, |
| 5011 | FileFullDirectoryInformation, |
| 5012 | FileBothDirectoryInformation, |
| 5013 | FileBasicInformation, |
| 5014 | FileStandardInformation, |
| 5015 | FileInternalInformation, |
| 5016 | FileEaInformation, |
| 5017 | FileAccessInformation, |
| 5018 | FileNameInformation, |
| 5019 | FileRenameInformation, |
| 5020 | FileLinkInformation, |
| 5021 | FileNamesInformation, |
| 5022 | FileDispositionInformation, |
| 5023 | FilePositionInformation, |
| 5024 | FileFullEaInformation, |
| 5025 | FileModeInformation, |
| 5026 | FileAlignmentInformation, |
| 5027 | FileAllInformation, |
| 5028 | FileAllocationInformation, |
| 5029 | FileEndOfFileInformation, |
| 5030 | FileAlternateNameInformation, |
| 5031 | FileStreamInformation, |
| 5032 | FilePipeInformation, |
| 5033 | FilePipeLocalInformation, |
| 5034 | FilePipeRemoteInformation, |
| 5035 | FileMailslotQueryInformation, |
| 5036 | FileMailslotSetInformation, |
| 5037 | FileCompressionInformation, |
| 5038 | FileObjectIdInformation, |
| 5039 | FileCompletionInformation, |
| 5040 | FileMoveClusterInformation, |
| 5041 | FileQuotaInformation, |
| 5042 | FileReparsePointInformation, |
| 5043 | FileNetworkOpenInformation, |
| 5044 | FileAttributeTagInformation, |
| 5045 | FileTrackingInformation, |
| 5046 | FileIdBothDirectoryInformation, |
| 5047 | FileIdFullDirectoryInformation, |
| 5048 | FileValidDataLengthInformation, |
| 5049 | FileShortNameInformation, |
| 5050 | FileIoCompletionNotificationInformation, |
| 5051 | FileIoStatusBlockRangeInformation, |
| 5052 | FileIoPriorityHintInformation, |
| 5053 | FileSfioReserveInformation, |
| 5054 | FileSfioVolumeInformation, |
| 5055 | FileHardLinkInformation, |
| 5056 | FileProcessIdsUsingFileInformation, |
| 5057 | FileNormalizedNameInformation, |
| 5058 | FileNetworkPhysicalNameInformation, |
| 5059 | FileIdGlobalTxDirectoryInformation, |
| 5060 | FileIsRemoteDeviceInformation, |
| 5061 | FileUnusedInformation, |
| 5062 | FileNumaNodeInformation, |
| 5063 | FileStandardLinkInformation, |
| 5064 | FileRemoteProtocolInformation, |
| 5065 | FileRenameInformationBypassAccessCheck, |
| 5066 | FileLinkInformationBypassAccessCheck, |
| 5067 | FileVolumeNameInformation, |
| 5068 | FileIdInformation, |
| 5069 | FileIdExtdDirectoryInformation, |
| 5070 | FileReplaceCompletionInformation, |
| 5071 | FileHardLinkFullIdInformation, |
| 5072 | FileIdExtdBothDirectoryInformation, |
| 5073 | FileDispositionInformationEx, |
| 5074 | FileRenameInformationEx, |
| 5075 | FileRenameInformationExBypassAccessCheck, |
| 5076 | FileDesiredStorageClassInformation, |
| 5077 | FileStatInformation, |
| 5078 | FileMemoryPartitionInformation, |
| 5079 | FileStatLxInformation, |
| 5080 | FileCaseSensitiveInformation, |
| 5081 | FileLinkInformationEx, |
| 5082 | FileLinkInformationExBypassAccessCheck, |
| 5083 | FileStorageReserveIdInformation, |
| 5084 | FileCaseSensitiveInformationForceAccessCheck, |
| 5085 | FileMaximumInformation |
| 5086 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; |
| 5087 | |
| 5088 | typedef enum _DIRECTORY_NOTIFY_INFORMATION_CLASS { |
| 5089 | DirectoryNotifyInformation = 1, |
| 5090 | DirectoryNotifyExtendedInformation |
| 5091 | } DIRECTORY_NOTIFY_INFORMATION_CLASS, *PDIRECTORY_NOTIFY_INFORMATION_CLASS; |
| 5092 | |
| 5093 | typedef struct _FILE_POSITION_INFORMATION { |
| 5094 | LARGE_INTEGER CurrentByteOffset; |
| 5095 | } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; |
| 5096 | |
| 5097 | typedef struct _FILE_BASIC_INFORMATION { |
| 5098 | LARGE_INTEGER CreationTime; |
| 5099 | LARGE_INTEGER LastAccessTime; |
| 5100 | LARGE_INTEGER LastWriteTime; |
| 5101 | LARGE_INTEGER ChangeTime; |
| 5102 | ULONG FileAttributes; |
| 5103 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; |
| 5104 | |
| 5105 | typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION { |
| 5106 | IO_PRIORITY_HINT PriorityHint; |
| 5107 | } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION; |
| 5108 | |
| 5109 | typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { |
| 5110 | ULONG Flags; |
| 5111 | } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; |
| 5112 | |
| 5113 | typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION { |
| 5114 | PUCHAR IoStatusBlockRange; |
| 5115 | ULONG Length; |
| 5116 | } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION; |
| 5117 | |
| 5118 | typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION { |
| 5119 | BOOLEAN IsRemote; |
| 5120 | } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION; |
| 5121 | |
| 5122 | typedef struct _FILE_NUMA_NODE_INFORMATION { |
| 5123 | USHORT NodeNumber; |
| 5124 | } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION; |
| 5125 | |
| 5126 | typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION { |
| 5127 | ULONG NumberOfProcessIdsInList; |
| 5128 | ULONG_PTR ProcessIdList[1]; |
| 5129 | } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION; |
| 5130 | |
| 5131 | typedef struct _FILE_STANDARD_INFORMATION { |
| 5132 | LARGE_INTEGER AllocationSize; |
| 5133 | LARGE_INTEGER EndOfFile; |
| 5134 | ULONG NumberOfLinks; |
| 5135 | BOOLEAN DeletePending; |
| 5136 | BOOLEAN Directory; |
| 5137 | } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; |
| 5138 | |
| 5139 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
| 5140 | LARGE_INTEGER CreationTime; |
| 5141 | LARGE_INTEGER LastAccessTime; |
| 5142 | LARGE_INTEGER LastWriteTime; |
| 5143 | LARGE_INTEGER ChangeTime; |
| 5144 | LARGE_INTEGER AllocationSize; |
| 5145 | LARGE_INTEGER EndOfFile; |
| 5146 | ULONG FileAttributes; |
| 5147 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; |
| 5148 | |
| 5149 | typedef enum _FSINFOCLASS { |
| 5150 | FileFsVolumeInformation = 1, |
| 5151 | FileFsLabelInformation, |
| 5152 | FileFsSizeInformation, |
| 5153 | FileFsDeviceInformation, |
| 5154 | FileFsAttributeInformation, |
| 5155 | FileFsControlInformation, |
| 5156 | FileFsFullSizeInformation, |
| 5157 | FileFsObjectIdInformation, |
| 5158 | FileFsDriverPathInformation, |
| 5159 | FileFsVolumeFlagsInformation, |
| 5160 | FileFsSectorSizeInformation, |
| 5161 | FileFsDataCopyInformation, |
| 5162 | FileFsMetadataSizeInformation, |
| 5163 | FileFsFullSizeInformationEx, |
| 5164 | FileFsMaximumInformation |
| 5165 | } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
| 5166 | |
| 5167 | typedef struct _FILE_FS_DEVICE_INFORMATION { |
| 5168 | DEVICE_TYPE DeviceType; |
| 5169 | ULONG Characteristics; |
| 5170 | } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; |
| 5171 | |
| 5172 | typedef struct _FILE_FULL_EA_INFORMATION { |
| 5173 | ULONG NextEntryOffset; |
| 5174 | UCHAR Flags; |
| 5175 | UCHAR EaNameLength; |
| 5176 | USHORT EaValueLength; |
| 5177 | CHAR EaName[1]; |
| 5178 | } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; |
| 5179 | |
| 5180 | typedef struct _FILE_SFIO_RESERVE_INFORMATION { |
| 5181 | ULONG RequestsPerPeriod; |
| 5182 | ULONG Period; |
| 5183 | BOOLEAN RetryFailures; |
| 5184 | BOOLEAN Discardable; |
| 5185 | ULONG RequestSize; |
| 5186 | ULONG NumOutstandingRequests; |
| 5187 | } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION; |
| 5188 | |
| 5189 | typedef struct _FILE_SFIO_VOLUME_INFORMATION { |
| 5190 | ULONG MaximumRequestsPerPeriod; |
| 5191 | ULONG MinimumPeriod; |
| 5192 | ULONG MinimumTransferSize; |
| 5193 | } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION; |
| 5194 | |
| 5195 | #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 |
| 5196 | #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 |
| 5197 | #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 |
| 5198 | |
| 5199 | #define FM_LOCK_BIT (0x1) |
| 5200 | #define FM_LOCK_BIT_V (0x0) |
| 5201 | #define FM_LOCK_WAITER_WOKEN (0x2) |
| 5202 | #define FM_LOCK_WAITER_INC (0x4) |
| 5203 | |
| 5204 | typedef BOOLEAN |
| 5205 | (NTAPI FAST_IO_CHECK_IF_POSSIBLE)( |
| 5206 | IN struct _FILE_OBJECT *FileObject, |
| 5207 | IN PLARGE_INTEGER FileOffset, |
| 5208 | IN ULONG Length, |
| 5209 | IN BOOLEAN Wait, |
| 5210 | IN ULONG LockKey, |
| 5211 | IN BOOLEAN CheckForReadOperation, |
| 5212 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5213 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5214 | typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE; |
| 5215 | |
| 5216 | typedef BOOLEAN |
| 5217 | (NTAPI FAST_IO_READ)( |
| 5218 | IN struct _FILE_OBJECT *FileObject, |
| 5219 | IN PLARGE_INTEGER FileOffset, |
| 5220 | IN ULONG Length, |
| 5221 | IN BOOLEAN Wait, |
| 5222 | IN ULONG LockKey, |
| 5223 | OUT PVOID Buffer, |
| 5224 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5225 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5226 | typedef FAST_IO_READ *PFAST_IO_READ; |
| 5227 | |
| 5228 | typedef BOOLEAN |
| 5229 | (NTAPI FAST_IO_WRITE)( |
| 5230 | IN struct _FILE_OBJECT *FileObject, |
| 5231 | IN PLARGE_INTEGER FileOffset, |
| 5232 | IN ULONG Length, |
| 5233 | IN BOOLEAN Wait, |
| 5234 | IN ULONG LockKey, |
| 5235 | IN PVOID Buffer, |
| 5236 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5237 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5238 | typedef FAST_IO_WRITE *PFAST_IO_WRITE; |
| 5239 | |
| 5240 | typedef BOOLEAN |
| 5241 | (NTAPI FAST_IO_QUERY_BASIC_INFO)( |
| 5242 | IN struct _FILE_OBJECT *FileObject, |
| 5243 | IN BOOLEAN Wait, |
| 5244 | OUT PFILE_BASIC_INFORMATION Buffer, |
| 5245 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5246 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5247 | typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO; |
| 5248 | |
| 5249 | typedef BOOLEAN |
| 5250 | (NTAPI FAST_IO_QUERY_STANDARD_INFO)( |
| 5251 | IN struct _FILE_OBJECT *FileObject, |
| 5252 | IN BOOLEAN Wait, |
| 5253 | OUT PFILE_STANDARD_INFORMATION Buffer, |
| 5254 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5255 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5256 | typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO; |
| 5257 | |
| 5258 | typedef BOOLEAN |
| 5259 | (NTAPI FAST_IO_LOCK)( |
| 5260 | IN struct _FILE_OBJECT *FileObject, |
| 5261 | IN PLARGE_INTEGER FileOffset, |
| 5262 | IN PLARGE_INTEGER Length, |
| 5263 | PEPROCESS ProcessId, |
| 5264 | ULONG Key, |
| 5265 | BOOLEAN FailImmediately, |
| 5266 | BOOLEAN ExclusiveLock, |
| 5267 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5268 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5269 | typedef FAST_IO_LOCK *PFAST_IO_LOCK; |
| 5270 | |
| 5271 | typedef BOOLEAN |
| 5272 | (NTAPI FAST_IO_UNLOCK_SINGLE)( |
| 5273 | IN struct _FILE_OBJECT *FileObject, |
| 5274 | IN PLARGE_INTEGER FileOffset, |
| 5275 | IN PLARGE_INTEGER Length, |
| 5276 | PEPROCESS ProcessId, |
| 5277 | ULONG Key, |
| 5278 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5279 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5280 | typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE; |
| 5281 | |
| 5282 | typedef BOOLEAN |
| 5283 | (NTAPI FAST_IO_UNLOCK_ALL)( |
| 5284 | IN struct _FILE_OBJECT *FileObject, |
| 5285 | PEPROCESS ProcessId, |
| 5286 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5287 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5288 | typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL; |
| 5289 | |
| 5290 | typedef BOOLEAN |
| 5291 | (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( |
| 5292 | IN struct _FILE_OBJECT *FileObject, |
| 5293 | PVOID ProcessId, |
| 5294 | ULONG Key, |
| 5295 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5296 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5297 | typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY; |
| 5298 | |
| 5299 | typedef BOOLEAN |
| 5300 | (NTAPI FAST_IO_DEVICE_CONTROL)( |
| 5301 | IN struct _FILE_OBJECT *FileObject, |
| 5302 | IN BOOLEAN Wait, |
| 5303 | IN PVOID InputBuffer OPTIONAL, |
| 5304 | IN ULONG InputBufferLength, |
| 5305 | OUT PVOID OutputBuffer OPTIONAL, |
| 5306 | IN ULONG OutputBufferLength, |
| 5307 | IN ULONG IoControlCode, |
| 5308 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5309 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5310 | typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL; |
| 5311 | |
| 5312 | typedef VOID |
| 5313 | (NTAPI FAST_IO_ACQUIRE_FILE)( |
| 5314 | IN struct _FILE_OBJECT *FileObject); |
| 5315 | typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE; |
| 5316 | |
| 5317 | typedef VOID |
| 5318 | (NTAPI FAST_IO_RELEASE_FILE)( |
| 5319 | IN struct _FILE_OBJECT *FileObject); |
| 5320 | typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE; |
| 5321 | |
| 5322 | typedef VOID |
| 5323 | (NTAPI FAST_IO_DETACH_DEVICE)( |
| 5324 | IN struct _DEVICE_OBJECT *SourceDevice, |
| 5325 | IN struct _DEVICE_OBJECT *TargetDevice); |
| 5326 | typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE; |
| 5327 | |
| 5328 | typedef BOOLEAN |
| 5329 | (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( |
| 5330 | IN struct _FILE_OBJECT *FileObject, |
| 5331 | IN BOOLEAN Wait, |
| 5332 | OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, |
| 5333 | OUT struct _IO_STATUS_BLOCK *IoStatus, |
| 5334 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5335 | typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO; |
| 5336 | |
| 5337 | typedef NTSTATUS |
| 5338 | (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( |
| 5339 | IN struct _FILE_OBJECT *FileObject, |
| 5340 | IN PLARGE_INTEGER EndingOffset, |
| 5341 | OUT struct _ERESOURCE **ResourceToRelease, |
| 5342 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5343 | typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE; |
| 5344 | |
| 5345 | typedef BOOLEAN |
| 5346 | (NTAPI FAST_IO_MDL_READ)( |
| 5347 | IN struct _FILE_OBJECT *FileObject, |
| 5348 | IN PLARGE_INTEGER FileOffset, |
| 5349 | IN ULONG Length, |
| 5350 | IN ULONG LockKey, |
| 5351 | OUT PMDL *MdlChain, |
| 5352 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5353 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5354 | typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ; |
| 5355 | |
| 5356 | typedef BOOLEAN |
| 5357 | (NTAPI FAST_IO_MDL_READ_COMPLETE)( |
| 5358 | IN struct _FILE_OBJECT *FileObject, |
| 5359 | IN PMDL MdlChain, |
| 5360 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5361 | typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE; |
| 5362 | |
| 5363 | typedef BOOLEAN |
| 5364 | (NTAPI FAST_IO_PREPARE_MDL_WRITE)( |
| 5365 | IN struct _FILE_OBJECT *FileObject, |
| 5366 | IN PLARGE_INTEGER FileOffset, |
| 5367 | IN ULONG Length, |
| 5368 | IN ULONG LockKey, |
| 5369 | OUT PMDL *MdlChain, |
| 5370 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5371 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5372 | typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE; |
| 5373 | |
| 5374 | typedef BOOLEAN |
| 5375 | (NTAPI FAST_IO_MDL_WRITE_COMPLETE)( |
| 5376 | IN struct _FILE_OBJECT *FileObject, |
| 5377 | IN PLARGE_INTEGER FileOffset, |
| 5378 | IN PMDL MdlChain, |
| 5379 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5380 | typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE; |
| 5381 | |
| 5382 | typedef BOOLEAN |
| 5383 | (NTAPI FAST_IO_READ_COMPRESSED)( |
| 5384 | IN struct _FILE_OBJECT *FileObject, |
| 5385 | IN PLARGE_INTEGER FileOffset, |
| 5386 | IN ULONG Length, |
| 5387 | IN ULONG LockKey, |
| 5388 | OUT PVOID Buffer, |
| 5389 | OUT PMDL *MdlChain, |
| 5390 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5391 | OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, |
| 5392 | IN ULONG CompressedDataInfoLength, |
| 5393 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5394 | typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED; |
| 5395 | |
| 5396 | typedef BOOLEAN |
| 5397 | (NTAPI FAST_IO_WRITE_COMPRESSED)( |
| 5398 | IN struct _FILE_OBJECT *FileObject, |
| 5399 | IN PLARGE_INTEGER FileOffset, |
| 5400 | IN ULONG Length, |
| 5401 | IN ULONG LockKey, |
| 5402 | IN PVOID Buffer, |
| 5403 | OUT PMDL *MdlChain, |
| 5404 | OUT PIO_STATUS_BLOCK IoStatus, |
| 5405 | IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, |
| 5406 | IN ULONG CompressedDataInfoLength, |
| 5407 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5408 | typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED; |
| 5409 | |
| 5410 | typedef BOOLEAN |
| 5411 | (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( |
| 5412 | IN struct _FILE_OBJECT *FileObject, |
| 5413 | IN PMDL MdlChain, |
| 5414 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5415 | typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED; |
| 5416 | |
| 5417 | typedef BOOLEAN |
| 5418 | (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( |
| 5419 | IN struct _FILE_OBJECT *FileObject, |
| 5420 | IN PLARGE_INTEGER FileOffset, |
| 5421 | IN PMDL MdlChain, |
| 5422 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5423 | typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED; |
| 5424 | |
| 5425 | typedef BOOLEAN |
| 5426 | (NTAPI FAST_IO_QUERY_OPEN)( |
| 5427 | IN struct _IRP *Irp, |
| 5428 | OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, |
| 5429 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5430 | typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN; |
| 5431 | |
| 5432 | typedef NTSTATUS |
| 5433 | (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( |
| 5434 | IN struct _FILE_OBJECT *FileObject, |
| 5435 | IN struct _ERESOURCE *ResourceToRelease, |
| 5436 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5437 | typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE; |
| 5438 | |
| 5439 | typedef NTSTATUS |
| 5440 | (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( |
| 5441 | IN struct _FILE_OBJECT *FileObject, |
| 5442 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5443 | typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH; |
| 5444 | |
| 5445 | typedef NTSTATUS |
| 5446 | (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( |
| 5447 | IN struct _FILE_OBJECT *FileObject, |
| 5448 | IN struct _DEVICE_OBJECT *DeviceObject); |
| 5449 | typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH; |
| 5450 | |
| 5451 | typedef struct _FAST_IO_DISPATCH { |
| 5452 | ULONG SizeOfFastIoDispatch; |
| 5453 | PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; |
| 5454 | PFAST_IO_READ FastIoRead; |
| 5455 | PFAST_IO_WRITE FastIoWrite; |
| 5456 | PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; |
| 5457 | PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; |
| 5458 | PFAST_IO_LOCK FastIoLock; |
| 5459 | PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; |
| 5460 | PFAST_IO_UNLOCK_ALL FastIoUnlockAll; |
| 5461 | PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; |
| 5462 | PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; |
| 5463 | PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; |
| 5464 | PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; |
| 5465 | PFAST_IO_DETACH_DEVICE FastIoDetachDevice; |
| 5466 | PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; |
| 5467 | PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; |
| 5468 | PFAST_IO_MDL_READ MdlRead; |
| 5469 | PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; |
| 5470 | PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; |
| 5471 | PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; |
| 5472 | PFAST_IO_READ_COMPRESSED FastIoReadCompressed; |
| 5473 | PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; |
| 5474 | PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; |
| 5475 | PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; |
| 5476 | PFAST_IO_QUERY_OPEN FastIoQueryOpen; |
| 5477 | PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; |
| 5478 | PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; |
| 5479 | PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; |
| 5480 | } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; |
| 5481 | |
| 5482 | typedef struct _SECTION_OBJECT_POINTERS { |
| 5483 | PVOID DataSectionObject; |
| 5484 | PVOID SharedCacheMap; |
| 5485 | PVOID ImageSectionObject; |
| 5486 | } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; |
| 5487 | |
| 5488 | typedef struct _IO_COMPLETION_CONTEXT { |
| 5489 | PVOID Port; |
| 5490 | PVOID Key; |
| 5491 | } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; |
| 5492 | |
| 5493 | /* FILE_OBJECT.Flags */ |
| 5494 | #define FO_FILE_OPEN 0x00000001 |
| 5495 | #define FO_SYNCHRONOUS_IO 0x00000002 |
| 5496 | #define FO_ALERTABLE_IO 0x00000004 |
| 5497 | #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 |
| 5498 | #define FO_WRITE_THROUGH 0x00000010 |
| 5499 | #define FO_SEQUENTIAL_ONLY 0x00000020 |
| 5500 | #define FO_CACHE_SUPPORTED 0x00000040 |
| 5501 | #define FO_NAMED_PIPE 0x00000080 |
| 5502 | #define FO_STREAM_FILE 0x00000100 |
| 5503 | #define FO_MAILSLOT 0x00000200 |
| 5504 | #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 |
| 5505 | #define FO_QUEUE_IRP_TO_THREAD 0x00000400 |
| 5506 | #define FO_DIRECT_DEVICE_OPEN 0x00000800 |
| 5507 | #define FO_FILE_MODIFIED 0x00001000 |
| 5508 | #define FO_FILE_SIZE_CHANGED 0x00002000 |
| 5509 | #define FO_CLEANUP_COMPLETE 0x00004000 |
| 5510 | #define FO_TEMPORARY_FILE 0x00008000 |
| 5511 | #define FO_DELETE_ON_CLOSE 0x00010000 |
| 5512 | #define FO_OPENED_CASE_SENSITIVE 0x00020000 |
| 5513 | #define FO_HANDLE_CREATED 0x00040000 |
| 5514 | #define FO_FILE_FAST_IO_READ 0x00080000 |
| 5515 | #define FO_RANDOM_ACCESS 0x00100000 |
| 5516 | #define FO_FILE_OPEN_CANCELLED 0x00200000 |
| 5517 | #define FO_VOLUME_OPEN 0x00400000 |
| 5518 | #define FO_REMOTE_ORIGIN 0x01000000 |
| 5519 | #define FO_DISALLOW_EXCLUSIVE 0x02000000 |
| 5520 | #define FO_SKIP_COMPLETION_PORT 0x02000000 |
| 5521 | #define FO_SKIP_SET_EVENT 0x04000000 |
| 5522 | #define FO_SKIP_SET_FAST_IO 0x08000000 |
| 5523 | #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE |
| 5524 | |
| 5525 | /* VPB.Flags */ |
| 5526 | #define VPB_MOUNTED 0x0001 |
| 5527 | #define VPB_LOCKED 0x0002 |
| 5528 | #define VPB_PERSISTENT 0x0004 |
| 5529 | #define VPB_REMOVE_PENDING 0x0008 |
| 5530 | #define VPB_RAW_MOUNT 0x0010 |
| 5531 | #define VPB_DIRECT_WRITES_ALLOWED 0x0020 |
| 5532 | |
| 5533 | /* IRP.Flags */ |
| 5534 | |
| 5535 | #define SL_FORCE_ACCESS_CHECK 0x01 |
| 5536 | #define SL_OPEN_PAGING_FILE 0x02 |
| 5537 | #define SL_OPEN_TARGET_DIRECTORY 0x04 |
| 5538 | #define SL_STOP_ON_SYMLINK 0x08 |
| 5539 | #define SL_CASE_SENSITIVE 0x80 |
| 5540 | |
| 5541 | #define SL_KEY_SPECIFIED 0x01 |
| 5542 | #define SL_OVERRIDE_VERIFY_VOLUME 0x02 |
| 5543 | #define SL_WRITE_THROUGH 0x04 |
| 5544 | #define SL_FT_SEQUENTIAL_WRITE 0x08 |
| 5545 | #define SL_FORCE_DIRECT_WRITE 0x10 |
| 5546 | #define SL_REALTIME_STREAM 0x20 |
| 5547 | |
| 5548 | #define SL_READ_ACCESS_GRANTED 0x01 |
| 5549 | #define SL_WRITE_ACCESS_GRANTED 0x04 |
| 5550 | |
| 5551 | #define SL_FAIL_IMMEDIATELY 0x01 |
| 5552 | #define SL_EXCLUSIVE_LOCK 0x02 |
| 5553 | |
| 5554 | #define SL_RESTART_SCAN 0x01 |
| 5555 | #define SL_RETURN_SINGLE_ENTRY 0x02 |
| 5556 | #define SL_INDEX_SPECIFIED 0x04 |
| 5557 | |
| 5558 | #define SL_WATCH_TREE 0x01 |
| 5559 | |
| 5560 | #define SL_ALLOW_RAW_MOUNT 0x01 |
| 5561 | |
| 5562 | #define CTL_CODE(DeviceType, Function, Method, Access) \ |
| 5563 | (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) |
| 5564 | |
| 5565 | #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) |
| 5566 | |
| 5567 | #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) |
| 5568 | |
| 5569 | #define IRP_NOCACHE 0x00000001 |
| 5570 | #define IRP_PAGING_IO 0x00000002 |
| 5571 | #define IRP_MOUNT_COMPLETION 0x00000002 |
| 5572 | #define IRP_SYNCHRONOUS_API 0x00000004 |
| 5573 | #define IRP_ASSOCIATED_IRP 0x00000008 |
| 5574 | #define IRP_BUFFERED_IO 0x00000010 |
| 5575 | #define IRP_DEALLOCATE_BUFFER 0x00000020 |
| 5576 | #define IRP_INPUT_OPERATION 0x00000040 |
| 5577 | #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040 |
| 5578 | #define IRP_CREATE_OPERATION 0x00000080 |
| 5579 | #define IRP_READ_OPERATION 0x00000100 |
| 5580 | #define IRP_WRITE_OPERATION 0x00000200 |
| 5581 | #define IRP_CLOSE_OPERATION 0x00000400 |
| 5582 | #define IRP_DEFER_IO_COMPLETION 0x00000800 |
| 5583 | #define IRP_OB_QUERY_NAME 0x00001000 |
| 5584 | #define IRP_HOLD_DEVICE_QUEUE 0x00002000 |
| 5585 | #define IRP_RETRY_IO_COMPLETION 0x00004000 |
| 5586 | #define IRP_CLASS_CACHE_OPERATION 0x00008000 |
| 5587 | |
| 5588 | #define IRP_QUOTA_CHARGED 0x01 |
| 5589 | #define IRP_ALLOCATED_MUST_SUCCEED 0x02 |
| 5590 | #define IRP_ALLOCATED_FIXED_SIZE 0x04 |
| 5591 | #define IRP_LOOKASIDE_ALLOCATION 0x08 |
| 5592 | |
| 5593 | /* |
| 5594 | ** IRP function codes |
| 5595 | */ |
| 5596 | |
| 5597 | #define IRP_MJ_CREATE 0x00 |
| 5598 | #define IRP_MJ_CREATE_NAMED_PIPE 0x01 |
| 5599 | #define IRP_MJ_CLOSE 0x02 |
| 5600 | #define IRP_MJ_READ 0x03 |
| 5601 | #define IRP_MJ_WRITE 0x04 |
| 5602 | #define IRP_MJ_QUERY_INFORMATION 0x05 |
| 5603 | #define IRP_MJ_SET_INFORMATION 0x06 |
| 5604 | #define IRP_MJ_QUERY_EA 0x07 |
| 5605 | #define IRP_MJ_SET_EA 0x08 |
| 5606 | #define IRP_MJ_FLUSH_BUFFERS 0x09 |
| 5607 | #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a |
| 5608 | #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b |
| 5609 | #define IRP_MJ_DIRECTORY_CONTROL 0x0c |
| 5610 | #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d |
| 5611 | #define IRP_MJ_DEVICE_CONTROL 0x0e |
| 5612 | #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f |
| 5613 | #define IRP_MJ_SCSI 0x0f |
| 5614 | #define IRP_MJ_SHUTDOWN 0x10 |
| 5615 | #define IRP_MJ_LOCK_CONTROL 0x11 |
| 5616 | #define IRP_MJ_CLEANUP 0x12 |
| 5617 | #define IRP_MJ_CREATE_MAILSLOT 0x13 |
| 5618 | #define IRP_MJ_QUERY_SECURITY 0x14 |
| 5619 | #define IRP_MJ_SET_SECURITY 0x15 |
| 5620 | #define IRP_MJ_POWER 0x16 |
| 5621 | #define IRP_MJ_SYSTEM_CONTROL 0x17 |
| 5622 | #define IRP_MJ_DEVICE_CHANGE 0x18 |
| 5623 | #define IRP_MJ_QUERY_QUOTA 0x19 |
| 5624 | #define IRP_MJ_SET_QUOTA 0x1a |
| 5625 | #define IRP_MJ_PNP 0x1b |
| 5626 | #define IRP_MJ_PNP_POWER 0x1b |
| 5627 | #define IRP_MJ_MAXIMUM_FUNCTION 0x1b |
| 5628 | |
| 5629 | #define IRP_MN_SCSI_CLASS 0x01 |
| 5630 | |
| 5631 | #define IRP_MN_START_DEVICE 0x00 |
| 5632 | #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 |
| 5633 | #define IRP_MN_REMOVE_DEVICE 0x02 |
| 5634 | #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 |
| 5635 | #define IRP_MN_STOP_DEVICE 0x04 |
| 5636 | #define IRP_MN_QUERY_STOP_DEVICE 0x05 |
| 5637 | #define IRP_MN_CANCEL_STOP_DEVICE 0x06 |
| 5638 | |
| 5639 | #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 |
| 5640 | #define IRP_MN_QUERY_INTERFACE 0x08 |
| 5641 | #define IRP_MN_QUERY_CAPABILITIES 0x09 |
| 5642 | #define IRP_MN_QUERY_RESOURCES 0x0A |
| 5643 | #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B |
| 5644 | #define IRP_MN_QUERY_DEVICE_TEXT 0x0C |
| 5645 | #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D |
| 5646 | |
| 5647 | #define IRP_MN_READ_CONFIG 0x0F |
| 5648 | #define IRP_MN_WRITE_CONFIG 0x10 |
| 5649 | #define IRP_MN_EJECT 0x11 |
| 5650 | #define IRP_MN_SET_LOCK 0x12 |
| 5651 | #define IRP_MN_QUERY_ID 0x13 |
| 5652 | #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 |
| 5653 | #define IRP_MN_QUERY_BUS_INFORMATION 0x15 |
| 5654 | #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 |
| 5655 | #define IRP_MN_SURPRISE_REMOVAL 0x17 |
| 5656 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 5657 | #define IRP_MN_DEVICE_ENUMERATED 0x19 |
| 5658 | #endif |
| 5659 | |
| 5660 | #define IRP_MN_WAIT_WAKE 0x00 |
| 5661 | #define IRP_MN_POWER_SEQUENCE 0x01 |
| 5662 | #define IRP_MN_SET_POWER 0x02 |
| 5663 | #define IRP_MN_QUERY_POWER 0x03 |
| 5664 | |
| 5665 | #define IRP_MN_QUERY_ALL_DATA 0x00 |
| 5666 | #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 |
| 5667 | #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 |
| 5668 | #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 |
| 5669 | #define IRP_MN_ENABLE_EVENTS 0x04 |
| 5670 | #define IRP_MN_DISABLE_EVENTS 0x05 |
| 5671 | #define IRP_MN_ENABLE_COLLECTION 0x06 |
| 5672 | #define IRP_MN_DISABLE_COLLECTION 0x07 |
| 5673 | #define IRP_MN_REGINFO 0x08 |
| 5674 | #define IRP_MN_EXECUTE_METHOD 0x09 |
| 5675 | |
| 5676 | #define IRP_MN_REGINFO_EX 0x0b |
| 5677 | |
| 5678 | typedef struct _FILE_OBJECT { |
| 5679 | CSHORT Type; |
| 5680 | CSHORT Size; |
| 5681 | PDEVICE_OBJECT DeviceObject; |
| 5682 | PVPB Vpb; |
| 5683 | PVOID FsContext; |
| 5684 | PVOID FsContext2; |
| 5685 | PSECTION_OBJECT_POINTERS SectionObjectPointer; |
| 5686 | PVOID PrivateCacheMap; |
| 5687 | NTSTATUS FinalStatus; |
| 5688 | struct _FILE_OBJECT *RelatedFileObject; |
| 5689 | BOOLEAN LockOperation; |
| 5690 | BOOLEAN DeletePending; |
| 5691 | BOOLEAN ReadAccess; |
| 5692 | BOOLEAN WriteAccess; |
| 5693 | BOOLEAN DeleteAccess; |
| 5694 | BOOLEAN SharedRead; |
| 5695 | BOOLEAN SharedWrite; |
| 5696 | BOOLEAN SharedDelete; |
| 5697 | ULONG Flags; |
| 5698 | UNICODE_STRING FileName; |
| 5699 | LARGE_INTEGER CurrentByteOffset; |
| 5700 | volatile ULONG Waiters; |
| 5701 | volatile ULONG Busy; |
| 5702 | PVOID LastLock; |
| 5703 | KEVENT Lock; |
| 5704 | KEVENT Event; |
| 5705 | volatile PIO_COMPLETION_CONTEXT CompletionContext; |
| 5706 | KSPIN_LOCK IrpListLock; |
| 5707 | LIST_ENTRY IrpList; |
| 5708 | volatile PVOID FileObjectExtension; |
| 5709 | } FILE_OBJECT, *PFILE_OBJECT; |
| 5710 | |
| 5711 | typedef struct _IO_ERROR_LOG_PACKET { |
| 5712 | UCHAR MajorFunctionCode; |
| 5713 | UCHAR RetryCount; |
| 5714 | USHORT DumpDataSize; |
| 5715 | USHORT NumberOfStrings; |
| 5716 | USHORT StringOffset; |
| 5717 | USHORT EventCategory; |
| 5718 | NTSTATUS ErrorCode; |
| 5719 | ULONG UniqueErrorValue; |
| 5720 | NTSTATUS FinalStatus; |
| 5721 | ULONG SequenceNumber; |
| 5722 | ULONG IoControlCode; |
| 5723 | LARGE_INTEGER DeviceOffset; |
| 5724 | ULONG DumpData[1]; |
| 5725 | } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; |
| 5726 | |
| 5727 | typedef struct _IO_ERROR_LOG_MESSAGE { |
| 5728 | USHORT Type; |
| 5729 | USHORT Size; |
| 5730 | USHORT DriverNameLength; |
| 5731 | LARGE_INTEGER TimeStamp; |
| 5732 | ULONG DriverNameOffset; |
| 5733 | IO_ERROR_LOG_PACKET EntryData; |
| 5734 | } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; |
| 5735 | |
| 5736 | #define ERROR_LOG_LIMIT_SIZE 240 |
| 5737 | |
| 5738 | #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \ |
| 5739 | sizeof(IO_ERROR_LOG_PACKET) + \ |
| 5740 | (sizeof(WCHAR) * 40)) |
| 5741 | |
| 5742 | #define ERROR_LOG_MESSAGE_LIMIT_SIZE \ |
| 5743 | (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) |
| 5744 | |
| 5745 | #define IO_ERROR_LOG_MESSAGE_LENGTH \ |
| 5746 | ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \ |
| 5747 | ERROR_LOG_MESSAGE_LIMIT_SIZE : \ |
| 5748 | PORT_MAXIMUM_MESSAGE_LENGTH) |
| 5749 | |
| 5750 | #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ |
| 5751 | IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) |
| 5752 | |
| 5753 | #ifdef _WIN64 |
| 5754 | #define PORT_MAXIMUM_MESSAGE_LENGTH 512 |
| 5755 | #else |
| 5756 | #define PORT_MAXIMUM_MESSAGE_LENGTH 256 |
| 5757 | #endif |
| 5758 | |
| 5759 | typedef enum _DMA_WIDTH { |
| 5760 | Width8Bits, |
| 5761 | Width16Bits, |
| 5762 | Width32Bits, |
| 5763 | Width64Bits, |
| 5764 | WidthNoWrap, |
| 5765 | MaximumDmaWidth |
| 5766 | } DMA_WIDTH, *PDMA_WIDTH; |
| 5767 | |
| 5768 | typedef enum _DMA_SPEED { |
| 5769 | Compatible, |
| 5770 | TypeA, |
| 5771 | TypeB, |
| 5772 | TypeC, |
| 5773 | TypeF, |
| 5774 | MaximumDmaSpeed |
| 5775 | } DMA_SPEED, *PDMA_SPEED; |
| 5776 | |
| 5777 | /* DEVICE_DESCRIPTION.Version */ |
| 5778 | |
| 5779 | #define DEVICE_DESCRIPTION_VERSION 0x0000 |
| 5780 | #define DEVICE_DESCRIPTION_VERSION1 0x0001 |
| 5781 | #define DEVICE_DESCRIPTION_VERSION2 0x0002 |
| 5782 | |
| 5783 | typedef struct _DEVICE_DESCRIPTION { |
| 5784 | ULONG Version; |
| 5785 | BOOLEAN Master; |
| 5786 | BOOLEAN ScatterGather; |
| 5787 | BOOLEAN DemandMode; |
| 5788 | BOOLEAN AutoInitialize; |
| 5789 | BOOLEAN Dma32BitAddresses; |
| 5790 | BOOLEAN IgnoreCount; |
| 5791 | BOOLEAN Reserved1; |
| 5792 | BOOLEAN Dma64BitAddresses; |
| 5793 | ULONG BusNumber; |
| 5794 | ULONG DmaChannel; |
| 5795 | INTERFACE_TYPE InterfaceType; |
| 5796 | DMA_WIDTH DmaWidth; |
| 5797 | DMA_SPEED DmaSpeed; |
| 5798 | ULONG MaximumLength; |
| 5799 | ULONG DmaPort; |
| 5800 | } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; |
| 5801 | |
| 5802 | typedef enum _DEVICE_RELATION_TYPE { |
| 5803 | BusRelations, |
| 5804 | EjectionRelations, |
| 5805 | PowerRelations, |
| 5806 | RemovalRelations, |
| 5807 | TargetDeviceRelation, |
| 5808 | SingleBusRelations, |
| 5809 | TransportRelations |
| 5810 | } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; |
| 5811 | |
| 5812 | typedef struct _DEVICE_RELATIONS { |
| 5813 | ULONG Count; |
| 5814 | PDEVICE_OBJECT Objects[1]; |
| 5815 | } DEVICE_RELATIONS, *PDEVICE_RELATIONS; |
| 5816 | |
| 5817 | typedef struct _DEVOBJ_EXTENSION { |
| 5818 | CSHORT Type; |
| 5819 | USHORT Size; |
| 5820 | PDEVICE_OBJECT DeviceObject; |
| 5821 | } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; |
| 5822 | |
| 5823 | typedef struct _SCATTER_GATHER_ELEMENT { |
| 5824 | PHYSICAL_ADDRESS Address; |
| 5825 | ULONG Length; |
| 5826 | ULONG_PTR Reserved; |
| 5827 | } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; |
| 5828 | |
| 5829 | #if defined(_MSC_EXTENSIONS) || defined(__GNUC__) |
| 5830 | |
| 5831 | #if defined(_MSC_VER) |
| 5832 | #if _MSC_VER >= 1200 |
| 5833 | #pragma warning(push) |
| 5834 | #endif |
| 5835 | #pragma warning(disable:4200) |
| 5836 | #endif /* _MSC_VER */ |
| 5837 | |
| 5838 | typedef struct _SCATTER_GATHER_LIST { |
| 5839 | ULONG NumberOfElements; |
| 5840 | ULONG_PTR Reserved; |
| 5841 | SCATTER_GATHER_ELEMENT Elements[1]; |
| 5842 | } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; |
| 5843 | |
| 5844 | #if defined(_MSC_VER) |
| 5845 | #if _MSC_VER >= 1200 |
| 5846 | #pragma warning(pop) |
| 5847 | #else |
| 5848 | #pragma warning(default:4200) |
| 5849 | #endif |
| 5850 | #endif /* _MSC_VER */ |
| 5851 | |
| 5852 | #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ |
| 5853 | |
| 5854 | struct _SCATTER_GATHER_LIST; |
| 5855 | typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; |
| 5856 | |
| 5857 | #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ |
| 5858 | |
| 5859 | typedef NTSTATUS |
| 5860 | (NTAPI DRIVER_ADD_DEVICE)( |
| 5861 | IN struct _DRIVER_OBJECT *DriverObject, |
| 5862 | IN struct _DEVICE_OBJECT *PhysicalDeviceObject); |
| 5863 | typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; |
| 5864 | |
| 5865 | typedef struct _DRIVER_EXTENSION { |
| 5866 | struct _DRIVER_OBJECT *DriverObject; |
| 5867 | PDRIVER_ADD_DEVICE AddDevice; |
| 5868 | ULONG Count; |
| 5869 | UNICODE_STRING ServiceKeyName; |
| 5870 | } DRIVER_EXTENSION, *PDRIVER_EXTENSION; |
| 5871 | |
| 5872 | #define DRVO_UNLOAD_INVOKED 0x00000001 |
| 5873 | #define DRVO_LEGACY_DRIVER 0x00000002 |
| 5874 | #define DRVO_BUILTIN_DRIVER 0x00000004 |
| 5875 | |
| 5876 | typedef NTSTATUS |
| 5877 | (NTAPI DRIVER_INITIALIZE)( |
| 5878 | IN struct _DRIVER_OBJECT *DriverObject, |
| 5879 | IN PUNICODE_STRING RegistryPath); |
| 5880 | typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; |
| 5881 | |
| 5882 | typedef VOID |
| 5883 | (NTAPI DRIVER_STARTIO)( |
| 5884 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 5885 | IN struct _IRP *Irp); |
| 5886 | typedef DRIVER_STARTIO *PDRIVER_STARTIO; |
| 5887 | |
| 5888 | typedef VOID |
| 5889 | (NTAPI DRIVER_UNLOAD)( |
| 5890 | IN struct _DRIVER_OBJECT *DriverObject); |
| 5891 | typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; |
| 5892 | |
| 5893 | typedef NTSTATUS |
| 5894 | (NTAPI DRIVER_DISPATCH)( |
| 5895 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 5896 | IN struct _IRP *Irp); |
| 5897 | typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; |
| 5898 | |
| 5899 | typedef struct _DRIVER_OBJECT { |
| 5900 | CSHORT Type; |
| 5901 | CSHORT Size; |
| 5902 | PDEVICE_OBJECT DeviceObject; |
| 5903 | ULONG Flags; |
| 5904 | PVOID DriverStart; |
| 5905 | ULONG DriverSize; |
| 5906 | PVOID DriverSection; |
| 5907 | PDRIVER_EXTENSION DriverExtension; |
| 5908 | UNICODE_STRING DriverName; |
| 5909 | PUNICODE_STRING HardwareDatabase; |
| 5910 | struct _FAST_IO_DISPATCH *FastIoDispatch; |
| 5911 | PDRIVER_INITIALIZE DriverInit; |
| 5912 | PDRIVER_STARTIO DriverStartIo; |
| 5913 | PDRIVER_UNLOAD DriverUnload; |
| 5914 | PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; |
| 5915 | } DRIVER_OBJECT, *PDRIVER_OBJECT; |
| 5916 | |
| 5917 | typedef struct _DMA_ADAPTER { |
| 5918 | USHORT Version; |
| 5919 | USHORT Size; |
| 5920 | struct _DMA_OPERATIONS* DmaOperations; |
| 5921 | } DMA_ADAPTER, *PDMA_ADAPTER; |
| 5922 | |
| 5923 | typedef enum |
| 5924 | { |
| 5925 | DmaComplete, |
| 5926 | DmaAborted, |
| 5927 | DmaError, |
| 5928 | DmaCancelled, |
| 5929 | } DMA_COMPLETION_STATUS; |
| 5930 | |
| 5931 | typedef VOID |
| 5932 | (NTAPI *PPUT_DMA_ADAPTER)( |
| 5933 | IN PDMA_ADAPTER DmaAdapter); |
| 5934 | |
| 5935 | typedef PVOID |
| 5936 | (NTAPI *PALLOCATE_COMMON_BUFFER)( |
| 5937 | IN PDMA_ADAPTER DmaAdapter, |
| 5938 | IN ULONG Length, |
| 5939 | OUT PPHYSICAL_ADDRESS LogicalAddress, |
| 5940 | IN BOOLEAN CacheEnabled); |
| 5941 | |
| 5942 | typedef VOID |
| 5943 | (NTAPI *PFREE_COMMON_BUFFER)( |
| 5944 | IN PDMA_ADAPTER DmaAdapter, |
| 5945 | IN ULONG Length, |
| 5946 | IN PHYSICAL_ADDRESS LogicalAddress, |
| 5947 | IN PVOID VirtualAddress, |
| 5948 | IN BOOLEAN CacheEnabled); |
| 5949 | |
| 5950 | typedef NTSTATUS |
| 5951 | (NTAPI *PALLOCATE_ADAPTER_CHANNEL)( |
| 5952 | IN PDMA_ADAPTER DmaAdapter, |
| 5953 | IN PDEVICE_OBJECT DeviceObject, |
| 5954 | IN ULONG NumberOfMapRegisters, |
| 5955 | IN PDRIVER_CONTROL ExecutionRoutine, |
| 5956 | IN PVOID Context); |
| 5957 | |
| 5958 | typedef BOOLEAN |
| 5959 | (NTAPI *PFLUSH_ADAPTER_BUFFERS)( |
| 5960 | IN PDMA_ADAPTER DmaAdapter, |
| 5961 | IN PMDL Mdl, |
| 5962 | IN PVOID MapRegisterBase, |
| 5963 | IN PVOID CurrentVa, |
| 5964 | IN ULONG Length, |
| 5965 | IN BOOLEAN WriteToDevice); |
| 5966 | |
| 5967 | typedef VOID |
| 5968 | (NTAPI *PFREE_ADAPTER_CHANNEL)( |
| 5969 | IN PDMA_ADAPTER DmaAdapter); |
| 5970 | |
| 5971 | typedef VOID |
| 5972 | (NTAPI *PFREE_MAP_REGISTERS)( |
| 5973 | IN PDMA_ADAPTER DmaAdapter, |
| 5974 | PVOID MapRegisterBase, |
| 5975 | ULONG NumberOfMapRegisters); |
| 5976 | |
| 5977 | typedef PHYSICAL_ADDRESS |
| 5978 | (NTAPI *PMAP_TRANSFER)( |
| 5979 | IN PDMA_ADAPTER DmaAdapter, |
| 5980 | IN PMDL Mdl, |
| 5981 | IN PVOID MapRegisterBase, |
| 5982 | IN PVOID CurrentVa, |
| 5983 | IN OUT PULONG Length, |
| 5984 | IN BOOLEAN WriteToDevice); |
| 5985 | |
| 5986 | typedef ULONG |
| 5987 | (NTAPI *PGET_DMA_ALIGNMENT)( |
| 5988 | IN PDMA_ADAPTER DmaAdapter); |
| 5989 | |
| 5990 | typedef ULONG |
| 5991 | (NTAPI *PREAD_DMA_COUNTER)( |
| 5992 | IN PDMA_ADAPTER DmaAdapter); |
| 5993 | |
| 5994 | typedef VOID |
| 5995 | (NTAPI DRIVER_LIST_CONTROL)( |
| 5996 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 5997 | IN struct _IRP *Irp, |
| 5998 | IN struct _SCATTER_GATHER_LIST *ScatterGather, |
| 5999 | IN PVOID Context); |
| 6000 | typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL; |
| 6001 | |
| 6002 | typedef NTSTATUS |
| 6003 | (NTAPI *PGET_SCATTER_GATHER_LIST)( |
| 6004 | IN PDMA_ADAPTER DmaAdapter, |
| 6005 | IN PDEVICE_OBJECT DeviceObject, |
| 6006 | IN PMDL Mdl, |
| 6007 | IN PVOID CurrentVa, |
| 6008 | IN ULONG Length, |
| 6009 | IN PDRIVER_LIST_CONTROL ExecutionRoutine, |
| 6010 | IN PVOID Context, |
| 6011 | IN BOOLEAN WriteToDevice); |
| 6012 | |
| 6013 | typedef VOID |
| 6014 | (NTAPI *PPUT_SCATTER_GATHER_LIST)( |
| 6015 | IN PDMA_ADAPTER DmaAdapter, |
| 6016 | IN PSCATTER_GATHER_LIST ScatterGather, |
| 6017 | IN BOOLEAN WriteToDevice); |
| 6018 | |
| 6019 | typedef NTSTATUS |
| 6020 | (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( |
| 6021 | IN PDMA_ADAPTER DmaAdapter, |
| 6022 | IN PMDL Mdl OPTIONAL, |
| 6023 | IN PVOID CurrentVa, |
| 6024 | IN ULONG Length, |
| 6025 | OUT PULONG ScatterGatherListSize, |
| 6026 | OUT PULONG pNumberOfMapRegisters OPTIONAL); |
| 6027 | |
| 6028 | typedef NTSTATUS |
| 6029 | (NTAPI *PBUILD_SCATTER_GATHER_LIST)( |
| 6030 | IN PDMA_ADAPTER DmaAdapter, |
| 6031 | IN PDEVICE_OBJECT DeviceObject, |
| 6032 | IN PMDL Mdl, |
| 6033 | IN PVOID CurrentVa, |
| 6034 | IN ULONG Length, |
| 6035 | IN PDRIVER_LIST_CONTROL ExecutionRoutine, |
| 6036 | IN PVOID Context, |
| 6037 | IN BOOLEAN WriteToDevice, |
| 6038 | IN PVOID ScatterGatherBuffer, |
| 6039 | IN ULONG ScatterGatherLength); |
| 6040 | |
| 6041 | typedef NTSTATUS |
| 6042 | (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( |
| 6043 | IN PDMA_ADAPTER DmaAdapter, |
| 6044 | IN PSCATTER_GATHER_LIST ScatterGather, |
| 6045 | IN PMDL OriginalMdl, |
| 6046 | OUT PMDL *TargetMdl); |
| 6047 | |
| 6048 | typedef struct _DMA_OPERATIONS { |
| 6049 | ULONG Size; |
| 6050 | PPUT_DMA_ADAPTER PutDmaAdapter; |
| 6051 | PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; |
| 6052 | PFREE_COMMON_BUFFER FreeCommonBuffer; |
| 6053 | PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; |
| 6054 | PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; |
| 6055 | PFREE_ADAPTER_CHANNEL FreeAdapterChannel; |
| 6056 | PFREE_MAP_REGISTERS FreeMapRegisters; |
| 6057 | PMAP_TRANSFER MapTransfer; |
| 6058 | PGET_DMA_ALIGNMENT GetDmaAlignment; |
| 6059 | PREAD_DMA_COUNTER ReadDmaCounter; |
| 6060 | PGET_SCATTER_GATHER_LIST GetScatterGatherList; |
| 6061 | PPUT_SCATTER_GATHER_LIST PutScatterGatherList; |
| 6062 | PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; |
| 6063 | PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; |
| 6064 | PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; |
| 6065 | } DMA_OPERATIONS, *PDMA_OPERATIONS; |
| 6066 | |
| 6067 | typedef struct _IO_RESOURCE_DESCRIPTOR { |
| 6068 | UCHAR Option; |
| 6069 | UCHAR Type; |
| 6070 | UCHAR ShareDisposition; |
| 6071 | UCHAR Spare1; |
| 6072 | USHORT Flags; |
| 6073 | USHORT Spare2; |
| 6074 | union { |
| 6075 | struct { |
| 6076 | ULONG Length; |
| 6077 | ULONG Alignment; |
| 6078 | PHYSICAL_ADDRESS MinimumAddress; |
| 6079 | PHYSICAL_ADDRESS MaximumAddress; |
| 6080 | } Port; |
| 6081 | struct { |
| 6082 | ULONG Length; |
| 6083 | ULONG Alignment; |
| 6084 | PHYSICAL_ADDRESS MinimumAddress; |
| 6085 | PHYSICAL_ADDRESS MaximumAddress; |
| 6086 | } Memory; |
| 6087 | struct { |
| 6088 | ULONG MinimumVector; |
| 6089 | ULONG MaximumVector; |
| 6090 | } Interrupt; |
| 6091 | struct { |
| 6092 | ULONG MinimumChannel; |
| 6093 | ULONG MaximumChannel; |
| 6094 | } Dma; |
| 6095 | struct { |
| 6096 | ULONG Length; |
| 6097 | ULONG Alignment; |
| 6098 | PHYSICAL_ADDRESS MinimumAddress; |
| 6099 | PHYSICAL_ADDRESS MaximumAddress; |
| 6100 | } Generic; |
| 6101 | struct { |
| 6102 | ULONG Data[3]; |
| 6103 | } DevicePrivate; |
| 6104 | struct { |
| 6105 | ULONG Length; |
| 6106 | ULONG MinBusNumber; |
| 6107 | ULONG MaxBusNumber; |
| 6108 | ULONG Reserved; |
| 6109 | } BusNumber; |
| 6110 | struct { |
| 6111 | ULONG Priority; |
| 6112 | ULONG Reserved1; |
| 6113 | ULONG Reserved2; |
| 6114 | } ConfigData; |
| 6115 | } u; |
| 6116 | } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; |
| 6117 | |
| 6118 | typedef struct _IO_RESOURCE_LIST { |
| 6119 | USHORT Version; |
| 6120 | USHORT Revision; |
| 6121 | ULONG Count; |
| 6122 | IO_RESOURCE_DESCRIPTOR Descriptors[1]; |
| 6123 | } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; |
| 6124 | |
| 6125 | typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { |
| 6126 | ULONG ListSize; |
| 6127 | INTERFACE_TYPE InterfaceType; |
| 6128 | ULONG BusNumber; |
| 6129 | ULONG SlotNumber; |
| 6130 | ULONG Reserved[3]; |
| 6131 | ULONG AlternativeLists; |
| 6132 | IO_RESOURCE_LIST List[1]; |
| 6133 | } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; |
| 6134 | |
| 6135 | typedef VOID |
| 6136 | (NTAPI DRIVER_CANCEL)( |
| 6137 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 6138 | IN struct _IRP *Irp); |
| 6139 | typedef DRIVER_CANCEL *PDRIVER_CANCEL; |
| 6140 | |
| 6141 | typedef struct _IRP { |
| 6142 | CSHORT Type; |
| 6143 | USHORT Size; |
| 6144 | struct _MDL *MdlAddress; |
| 6145 | ULONG Flags; |
| 6146 | union { |
| 6147 | struct _IRP *MasterIrp; |
| 6148 | volatile LONG IrpCount; |
| 6149 | PVOID SystemBuffer; |
| 6150 | } AssociatedIrp; |
| 6151 | LIST_ENTRY ThreadListEntry; |
| 6152 | IO_STATUS_BLOCK IoStatus; |
| 6153 | KPROCESSOR_MODE RequestorMode; |
| 6154 | BOOLEAN PendingReturned; |
| 6155 | CHAR StackCount; |
| 6156 | CHAR CurrentLocation; |
| 6157 | BOOLEAN Cancel; |
| 6158 | KIRQL CancelIrql; |
| 6159 | CCHAR ApcEnvironment; |
| 6160 | UCHAR AllocationFlags; |
| 6161 | PIO_STATUS_BLOCK UserIosb; |
| 6162 | PKEVENT UserEvent; |
| 6163 | union { |
| 6164 | struct { |
| 6165 | _ANONYMOUS_UNION union { |
| 6166 | PIO_APC_ROUTINE UserApcRoutine; |
| 6167 | PVOID IssuingProcess; |
| 6168 | } DUMMYUNIONNAME; |
| 6169 | PVOID UserApcContext; |
| 6170 | } AsynchronousParameters; |
| 6171 | LARGE_INTEGER AllocationSize; |
| 6172 | } Overlay; |
| 6173 | volatile PDRIVER_CANCEL CancelRoutine; |
| 6174 | PVOID UserBuffer; |
| 6175 | union { |
| 6176 | struct { |
| 6177 | _ANONYMOUS_UNION union { |
| 6178 | KDEVICE_QUEUE_ENTRY DeviceQueueEntry; |
| 6179 | _ANONYMOUS_STRUCT struct { |
| 6180 | PVOID DriverContext[4]; |
| 6181 | } DUMMYSTRUCTNAME; |
| 6182 | } DUMMYUNIONNAME; |
| 6183 | PETHREAD Thread; |
| 6184 | PCHAR AuxiliaryBuffer; |
| 6185 | _ANONYMOUS_STRUCT struct { |
| 6186 | LIST_ENTRY ListEntry; |
| 6187 | _ANONYMOUS_UNION union { |
| 6188 | struct _IO_STACK_LOCATION *CurrentStackLocation; |
| 6189 | ULONG PacketType; |
| 6190 | } DUMMYUNIONNAME; |
| 6191 | } DUMMYSTRUCTNAME; |
| 6192 | struct _FILE_OBJECT *OriginalFileObject; |
| 6193 | } Overlay; |
| 6194 | KAPC Apc; |
| 6195 | PVOID CompletionKey; |
| 6196 | } Tail; |
| 6197 | } IRP, *PIRP; |
| 6198 | |
| 6199 | typedef enum _IO_PAGING_PRIORITY { |
| 6200 | IoPagingPriorityInvalid, |
| 6201 | IoPagingPriorityNormal, |
| 6202 | IoPagingPriorityHigh, |
| 6203 | IoPagingPriorityReserved1, |
| 6204 | IoPagingPriorityReserved2 |
| 6205 | } IO_PAGING_PRIORITY; |
| 6206 | |
| 6207 | typedef NTSTATUS |
| 6208 | (NTAPI IO_COMPLETION_ROUTINE)( |
| 6209 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 6210 | IN struct _IRP *Irp, |
| 6211 | IN PVOID Context); |
| 6212 | typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; |
| 6213 | |
| 6214 | typedef VOID |
| 6215 | (NTAPI IO_DPC_ROUTINE)( |
| 6216 | IN struct _KDPC *Dpc, |
| 6217 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 6218 | IN struct _IRP *Irp, |
| 6219 | IN PVOID Context); |
| 6220 | typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE; |
| 6221 | |
| 6222 | typedef NTSTATUS |
| 6223 | (NTAPI *PMM_DLL_INITIALIZE)( |
| 6224 | IN PUNICODE_STRING RegistryPath); |
| 6225 | |
| 6226 | typedef NTSTATUS |
| 6227 | (NTAPI *PMM_DLL_UNLOAD)( |
| 6228 | VOID); |
| 6229 | |
| 6230 | typedef VOID |
| 6231 | (NTAPI IO_TIMER_ROUTINE)( |
| 6232 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 6233 | IN PVOID Context); |
| 6234 | typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE; |
| 6235 | |
| 6236 | typedef struct _IO_SECURITY_CONTEXT { |
| 6237 | PSECURITY_QUALITY_OF_SERVICE SecurityQos; |
| 6238 | PACCESS_STATE AccessState; |
| 6239 | ACCESS_MASK DesiredAccess; |
| 6240 | ULONG FullCreateOptions; |
| 6241 | } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; |
| 6242 | |
| 6243 | struct _IO_CSQ; |
| 6244 | |
| 6245 | typedef struct _IO_CSQ_IRP_CONTEXT { |
| 6246 | ULONG Type; |
| 6247 | struct _IRP *Irp; |
| 6248 | struct _IO_CSQ *Csq; |
| 6249 | } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; |
| 6250 | |
| 6251 | typedef VOID |
| 6252 | (NTAPI *PIO_CSQ_INSERT_IRP)( |
| 6253 | IN struct _IO_CSQ *Csq, |
| 6254 | IN PIRP Irp); |
| 6255 | |
| 6256 | typedef NTSTATUS |
| 6257 | (NTAPI IO_CSQ_INSERT_IRP_EX)( |
| 6258 | IN struct _IO_CSQ *Csq, |
| 6259 | IN PIRP Irp, |
| 6260 | IN PVOID InsertContext); |
| 6261 | typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX; |
| 6262 | |
| 6263 | typedef VOID |
| 6264 | (NTAPI *PIO_CSQ_REMOVE_IRP)( |
| 6265 | IN struct _IO_CSQ *Csq, |
| 6266 | IN PIRP Irp); |
| 6267 | |
| 6268 | typedef PIRP |
| 6269 | (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)( |
| 6270 | IN struct _IO_CSQ *Csq, |
| 6271 | IN PIRP Irp, |
| 6272 | IN PVOID PeekContext); |
| 6273 | |
| 6274 | typedef VOID |
| 6275 | (NTAPI *PIO_CSQ_ACQUIRE_LOCK)( |
| 6276 | IN struct _IO_CSQ *Csq, |
| 6277 | OUT PKIRQL Irql); |
| 6278 | |
| 6279 | typedef VOID |
| 6280 | (NTAPI *PIO_CSQ_RELEASE_LOCK)( |
| 6281 | IN struct _IO_CSQ *Csq, |
| 6282 | IN KIRQL Irql); |
| 6283 | |
| 6284 | typedef VOID |
| 6285 | (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( |
| 6286 | IN struct _IO_CSQ *Csq, |
| 6287 | IN PIRP Irp); |
| 6288 | |
| 6289 | typedef struct _IO_CSQ { |
| 6290 | ULONG Type; |
| 6291 | PIO_CSQ_INSERT_IRP CsqInsertIrp; |
| 6292 | PIO_CSQ_REMOVE_IRP CsqRemoveIrp; |
| 6293 | PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; |
| 6294 | PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; |
| 6295 | PIO_CSQ_RELEASE_LOCK CsqReleaseLock; |
| 6296 | PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; |
| 6297 | PVOID ReservePointer; |
| 6298 | } IO_CSQ, *PIO_CSQ; |
| 6299 | |
| 6300 | typedef enum _BUS_QUERY_ID_TYPE { |
| 6301 | BusQueryDeviceID, |
| 6302 | BusQueryHardwareIDs, |
| 6303 | BusQueryCompatibleIDs, |
| 6304 | BusQueryInstanceID, |
| 6305 | BusQueryDeviceSerialNumber, |
| 6306 | BusQueryContainerID |
| 6307 | } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; |
| 6308 | |
| 6309 | typedef enum _DEVICE_TEXT_TYPE { |
| 6310 | DeviceTextDescription, |
| 6311 | DeviceTextLocationInformation |
| 6312 | } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; |
| 6313 | |
| 6314 | typedef BOOLEAN |
| 6315 | (NTAPI *PGPE_SERVICE_ROUTINE)( |
| 6316 | PVOID, |
| 6317 | PVOID); |
| 6318 | |
| 6319 | typedef NTSTATUS |
| 6320 | (NTAPI *PGPE_CONNECT_VECTOR)( |
| 6321 | PDEVICE_OBJECT, |
| 6322 | ULONG, |
| 6323 | KINTERRUPT_MODE, |
| 6324 | BOOLEAN, |
| 6325 | PGPE_SERVICE_ROUTINE, |
| 6326 | PVOID, |
| 6327 | PVOID); |
| 6328 | |
| 6329 | typedef NTSTATUS |
| 6330 | (NTAPI *PGPE_DISCONNECT_VECTOR)( |
| 6331 | PVOID); |
| 6332 | |
| 6333 | typedef NTSTATUS |
| 6334 | (NTAPI *PGPE_ENABLE_EVENT)( |
| 6335 | PDEVICE_OBJECT, |
| 6336 | PVOID); |
| 6337 | |
| 6338 | typedef NTSTATUS |
| 6339 | (NTAPI *PGPE_DISABLE_EVENT)( |
| 6340 | PDEVICE_OBJECT, |
| 6341 | PVOID); |
| 6342 | |
| 6343 | typedef NTSTATUS |
| 6344 | (NTAPI *PGPE_CLEAR_STATUS)( |
| 6345 | PDEVICE_OBJECT, |
| 6346 | PVOID); |
| 6347 | |
| 6348 | typedef VOID |
| 6349 | (NTAPI *PDEVICE_NOTIFY_CALLBACK)( |
| 6350 | PVOID, |
| 6351 | ULONG); |
| 6352 | |
| 6353 | typedef NTSTATUS |
| 6354 | (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( |
| 6355 | PDEVICE_OBJECT, |
| 6356 | PDEVICE_NOTIFY_CALLBACK, |
| 6357 | PVOID); |
| 6358 | |
| 6359 | typedef VOID |
| 6360 | (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( |
| 6361 | PDEVICE_OBJECT, |
| 6362 | PDEVICE_NOTIFY_CALLBACK); |
| 6363 | |
| 6364 | typedef struct _ACPI_INTERFACE_STANDARD { |
| 6365 | USHORT Size; |
| 6366 | USHORT Version; |
| 6367 | PVOID Context; |
| 6368 | PINTERFACE_REFERENCE InterfaceReference; |
| 6369 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 6370 | PGPE_CONNECT_VECTOR GpeConnectVector; |
| 6371 | PGPE_DISCONNECT_VECTOR GpeDisconnectVector; |
| 6372 | PGPE_ENABLE_EVENT GpeEnableEvent; |
| 6373 | PGPE_DISABLE_EVENT GpeDisableEvent; |
| 6374 | PGPE_CLEAR_STATUS GpeClearStatus; |
| 6375 | PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications; |
| 6376 | PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications; |
| 6377 | } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD; |
| 6378 | |
| 6379 | typedef BOOLEAN |
| 6380 | (NTAPI *PGPE_SERVICE_ROUTINE2)( |
| 6381 | PVOID ObjectContext, |
| 6382 | PVOID ServiceContext); |
| 6383 | |
| 6384 | typedef NTSTATUS |
| 6385 | (NTAPI *PGPE_CONNECT_VECTOR2)( |
| 6386 | PVOID Context, |
| 6387 | ULONG GpeNumber, |
| 6388 | KINTERRUPT_MODE Mode, |
| 6389 | BOOLEAN Shareable, |
| 6390 | PGPE_SERVICE_ROUTINE ServiceRoutine, |
| 6391 | PVOID ServiceContext, |
| 6392 | PVOID *ObjectContext); |
| 6393 | |
| 6394 | typedef NTSTATUS |
| 6395 | (NTAPI *PGPE_DISCONNECT_VECTOR2)( |
| 6396 | PVOID Context, |
| 6397 | PVOID ObjectContext); |
| 6398 | |
| 6399 | typedef NTSTATUS |
| 6400 | (NTAPI *PGPE_ENABLE_EVENT2)( |
| 6401 | PVOID Context, |
| 6402 | PVOID ObjectContext); |
| 6403 | |
| 6404 | typedef NTSTATUS |
| 6405 | (NTAPI *PGPE_DISABLE_EVENT2)( |
| 6406 | PVOID Context, |
| 6407 | PVOID ObjectContext); |
| 6408 | |
| 6409 | typedef NTSTATUS |
| 6410 | (NTAPI *PGPE_CLEAR_STATUS2)( |
| 6411 | PVOID Context, |
| 6412 | PVOID ObjectContext); |
| 6413 | |
| 6414 | typedef VOID |
| 6415 | (NTAPI *PDEVICE_NOTIFY_CALLBACK2)( |
| 6416 | PVOID NotificationContext, |
| 6417 | ULONG NotifyCode); |
| 6418 | |
| 6419 | typedef NTSTATUS |
| 6420 | (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( |
| 6421 | PVOID Context, |
| 6422 | PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, |
| 6423 | PVOID NotificationContext); |
| 6424 | |
| 6425 | typedef VOID |
| 6426 | (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( |
| 6427 | PVOID Context); |
| 6428 | |
| 6429 | typedef struct _ACPI_INTERFACE_STANDARD2 { |
| 6430 | USHORT Size; |
| 6431 | USHORT Version; |
| 6432 | PVOID Context; |
| 6433 | PINTERFACE_REFERENCE InterfaceReference; |
| 6434 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 6435 | PGPE_CONNECT_VECTOR2 GpeConnectVector; |
| 6436 | PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector; |
| 6437 | PGPE_ENABLE_EVENT2 GpeEnableEvent; |
| 6438 | PGPE_DISABLE_EVENT2 GpeDisableEvent; |
| 6439 | PGPE_CLEAR_STATUS2 GpeClearStatus; |
| 6440 | PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications; |
| 6441 | PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications; |
| 6442 | } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2; |
| 6443 | |
| 6444 | #if !defined(_AMD64_) && !defined(_IA64_) |
| 6445 | #include <pshpack4.h> |
| 6446 | #endif |
| 6447 | typedef struct _IO_STACK_LOCATION { |
| 6448 | UCHAR MajorFunction; |
| 6449 | UCHAR MinorFunction; |
| 6450 | UCHAR Flags; |
| 6451 | UCHAR Control; |
| 6452 | union { |
| 6453 | struct { |
| 6454 | PIO_SECURITY_CONTEXT SecurityContext; |
| 6455 | ULONG Options; |
| 6456 | USHORT POINTER_ALIGNMENT FileAttributes; |
| 6457 | USHORT ShareAccess; |
| 6458 | ULONG POINTER_ALIGNMENT EaLength; |
| 6459 | } Create; |
| 6460 | struct { |
| 6461 | PIO_SECURITY_CONTEXT SecurityContext; |
| 6462 | ULONG Options; |
| 6463 | USHORT POINTER_ALIGNMENT Reserved; |
| 6464 | USHORT ShareAccess; |
| 6465 | PNAMED_PIPE_CREATE_PARAMETERS Parameters; |
| 6466 | } CreatePipe; |
| 6467 | struct { |
| 6468 | PIO_SECURITY_CONTEXT SecurityContext; |
| 6469 | ULONG Options; |
| 6470 | USHORT POINTER_ALIGNMENT Reserved; |
| 6471 | USHORT ShareAccess; |
| 6472 | PMAILSLOT_CREATE_PARAMETERS Parameters; |
| 6473 | } CreateMailslot; |
| 6474 | struct { |
| 6475 | ULONG Length; |
| 6476 | ULONG POINTER_ALIGNMENT Key; |
| 6477 | #ifdef _WIN64 |
| 6478 | ULONG Flags; |
| 6479 | #endif |
| 6480 | LARGE_INTEGER ByteOffset; |
| 6481 | } Read; |
| 6482 | struct { |
| 6483 | ULONG Length; |
| 6484 | ULONG POINTER_ALIGNMENT Key; |
| 6485 | #ifdef _WIN64 |
| 6486 | ULONG Flags; |
| 6487 | #endif |
| 6488 | LARGE_INTEGER ByteOffset; |
| 6489 | } Write; |
| 6490 | struct { |
| 6491 | ULONG Length; |
| 6492 | PUNICODE_STRING FileName; |
| 6493 | FILE_INFORMATION_CLASS FileInformationClass; |
| 6494 | ULONG POINTER_ALIGNMENT FileIndex; |
| 6495 | } QueryDirectory; |
| 6496 | struct { |
| 6497 | ULONG Length; |
| 6498 | ULONG POINTER_ALIGNMENT CompletionFilter; |
| 6499 | } NotifyDirectory; |
| 6500 | struct { |
| 6501 | ULONG Length; |
| 6502 | ULONG POINTER_ALIGNMENT CompletionFilter; |
| 6503 | DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass; |
| 6504 | } NotifyDirectoryEx; |
| 6505 | struct { |
| 6506 | ULONG Length; |
| 6507 | FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; |
| 6508 | } QueryFile; |
| 6509 | struct { |
| 6510 | ULONG Length; |
| 6511 | FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; |
| 6512 | PFILE_OBJECT FileObject; |
| 6513 | _ANONYMOUS_UNION union { |
| 6514 | _ANONYMOUS_STRUCT struct { |
| 6515 | BOOLEAN ReplaceIfExists; |
| 6516 | BOOLEAN AdvanceOnly; |
| 6517 | } DUMMYSTRUCTNAME; |
| 6518 | ULONG ClusterCount; |
| 6519 | HANDLE DeleteHandle; |
| 6520 | } DUMMYUNIONNAME; |
| 6521 | } SetFile; |
| 6522 | struct { |
| 6523 | ULONG Length; |
| 6524 | PVOID EaList; |
| 6525 | ULONG EaListLength; |
| 6526 | ULONG POINTER_ALIGNMENT EaIndex; |
| 6527 | } QueryEa; |
| 6528 | struct { |
| 6529 | ULONG Length; |
| 6530 | } SetEa; |
| 6531 | struct { |
| 6532 | ULONG Length; |
| 6533 | FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; |
| 6534 | } QueryVolume; |
| 6535 | struct { |
| 6536 | ULONG Length; |
| 6537 | FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; |
| 6538 | } SetVolume; |
| 6539 | struct { |
| 6540 | ULONG OutputBufferLength; |
| 6541 | ULONG POINTER_ALIGNMENT InputBufferLength; |
| 6542 | ULONG POINTER_ALIGNMENT FsControlCode; |
| 6543 | PVOID Type3InputBuffer; |
| 6544 | } FileSystemControl; |
| 6545 | struct { |
| 6546 | PLARGE_INTEGER Length; |
| 6547 | ULONG POINTER_ALIGNMENT Key; |
| 6548 | LARGE_INTEGER ByteOffset; |
| 6549 | } LockControl; |
| 6550 | struct { |
| 6551 | ULONG OutputBufferLength; |
| 6552 | ULONG POINTER_ALIGNMENT InputBufferLength; |
| 6553 | ULONG POINTER_ALIGNMENT IoControlCode; |
| 6554 | PVOID Type3InputBuffer; |
| 6555 | } DeviceIoControl; |
| 6556 | struct { |
| 6557 | SECURITY_INFORMATION SecurityInformation; |
| 6558 | ULONG POINTER_ALIGNMENT Length; |
| 6559 | } QuerySecurity; |
| 6560 | struct { |
| 6561 | SECURITY_INFORMATION SecurityInformation; |
| 6562 | PSECURITY_DESCRIPTOR SecurityDescriptor; |
| 6563 | } SetSecurity; |
| 6564 | struct { |
| 6565 | PVPB Vpb; |
| 6566 | PDEVICE_OBJECT DeviceObject; |
| 6567 | } MountVolume; |
| 6568 | struct { |
| 6569 | PVPB Vpb; |
| 6570 | PDEVICE_OBJECT DeviceObject; |
| 6571 | } VerifyVolume; |
| 6572 | struct { |
| 6573 | struct _SCSI_REQUEST_BLOCK *Srb; |
| 6574 | } Scsi; |
| 6575 | struct { |
| 6576 | ULONG Length; |
| 6577 | PSID StartSid; |
| 6578 | struct _FILE_GET_QUOTA_INFORMATION *SidList; |
| 6579 | ULONG SidListLength; |
| 6580 | } QueryQuota; |
| 6581 | struct { |
| 6582 | ULONG Length; |
| 6583 | } SetQuota; |
| 6584 | struct { |
| 6585 | DEVICE_RELATION_TYPE Type; |
| 6586 | } QueryDeviceRelations; |
| 6587 | struct { |
| 6588 | CONST GUID *InterfaceType; |
| 6589 | USHORT Size; |
| 6590 | USHORT Version; |
| 6591 | PINTERFACE Interface; |
| 6592 | PVOID InterfaceSpecificData; |
| 6593 | } QueryInterface; |
| 6594 | struct { |
| 6595 | PDEVICE_CAPABILITIES Capabilities; |
| 6596 | } DeviceCapabilities; |
| 6597 | struct { |
| 6598 | PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; |
| 6599 | } FilterResourceRequirements; |
| 6600 | struct { |
| 6601 | ULONG WhichSpace; |
| 6602 | PVOID Buffer; |
| 6603 | ULONG Offset; |
| 6604 | ULONG POINTER_ALIGNMENT Length; |
| 6605 | } ReadWriteConfig; |
| 6606 | struct { |
| 6607 | BOOLEAN Lock; |
| 6608 | } SetLock; |
| 6609 | struct { |
| 6610 | BUS_QUERY_ID_TYPE IdType; |
| 6611 | } QueryId; |
| 6612 | struct { |
| 6613 | DEVICE_TEXT_TYPE DeviceTextType; |
| 6614 | LCID POINTER_ALIGNMENT LocaleId; |
| 6615 | } QueryDeviceText; |
| 6616 | struct { |
| 6617 | BOOLEAN InPath; |
| 6618 | BOOLEAN Reserved[3]; |
| 6619 | DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; |
| 6620 | } UsageNotification; |
| 6621 | struct { |
| 6622 | SYSTEM_POWER_STATE PowerState; |
| 6623 | } WaitWake; |
| 6624 | struct { |
| 6625 | PPOWER_SEQUENCE PowerSequence; |
| 6626 | } PowerSequence; |
| 6627 | struct { |
| 6628 | #if (NTDDI_VERSION >= NTDDI_WINVISTA) |
| 6629 | _ANONYMOUS_UNION union { |
| 6630 | #endif |
| 6631 | ULONG SystemContext; |
| 6632 | #if (NTDDI_VERSION >= NTDDI_WINVISTA) |
| 6633 | SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext; |
| 6634 | } DUMMYUNIONNAME; |
| 6635 | #endif |
| 6636 | POWER_STATE_TYPE POINTER_ALIGNMENT Type; |
| 6637 | POWER_STATE POINTER_ALIGNMENT State; |
| 6638 | POWER_ACTION POINTER_ALIGNMENT ShutdownType; |
| 6639 | } Power; |
| 6640 | struct { |
| 6641 | PCM_RESOURCE_LIST AllocatedResources; |
| 6642 | PCM_RESOURCE_LIST AllocatedResourcesTranslated; |
| 6643 | } StartDevice; |
| 6644 | struct { |
| 6645 | ULONG_PTR ProviderId; |
| 6646 | PVOID DataPath; |
| 6647 | ULONG BufferSize; |
| 6648 | PVOID Buffer; |
| 6649 | } WMI; |
| 6650 | struct { |
| 6651 | PVOID Argument1; |
| 6652 | PVOID Argument2; |
| 6653 | PVOID Argument3; |
| 6654 | PVOID Argument4; |
| 6655 | } Others; |
| 6656 | } Parameters; |
| 6657 | PDEVICE_OBJECT DeviceObject; |
| 6658 | PFILE_OBJECT FileObject; |
| 6659 | PIO_COMPLETION_ROUTINE CompletionRoutine; |
| 6660 | PVOID Context; |
| 6661 | } IO_STACK_LOCATION, *PIO_STACK_LOCATION; |
| 6662 | #if !defined(_AMD64_) && !defined(_IA64_) |
| 6663 | #include <poppack.h> |
| 6664 | #endif |
| 6665 | |
| 6666 | /* IO_STACK_LOCATION.Control */ |
| 6667 | |
| 6668 | #define SL_PENDING_RETURNED 0x01 |
| 6669 | #define SL_ERROR_RETURNED 0x02 |
| 6670 | #define SL_INVOKE_ON_CANCEL 0x20 |
| 6671 | #define SL_INVOKE_ON_SUCCESS 0x40 |
| 6672 | #define SL_INVOKE_ON_ERROR 0x80 |
| 6673 | |
| 6674 | #define METHOD_BUFFERED 0 |
| 6675 | #define METHOD_IN_DIRECT 1 |
| 6676 | #define METHOD_OUT_DIRECT 2 |
| 6677 | #define METHOD_NEITHER 3 |
| 6678 | |
| 6679 | #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT |
| 6680 | #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT |
| 6681 | |
| 6682 | #define FILE_SUPERSEDED 0x00000000 |
| 6683 | #define FILE_OPENED 0x00000001 |
| 6684 | #define FILE_CREATED 0x00000002 |
| 6685 | #define FILE_OVERWRITTEN 0x00000003 |
| 6686 | #define FILE_EXISTS 0x00000004 |
| 6687 | #define FILE_DOES_NOT_EXIST 0x00000005 |
| 6688 | |
| 6689 | #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe |
| 6690 | #define FILE_WRITE_TO_END_OF_FILE 0xffffffff |
| 6691 | |
| 6692 | /* also in winnt.h */ |
| 6693 | #define FILE_LIST_DIRECTORY 0x00000001 |
| 6694 | #define FILE_READ_DATA 0x00000001 |
| 6695 | #define FILE_ADD_FILE 0x00000002 |
| 6696 | #define FILE_WRITE_DATA 0x00000002 |
| 6697 | #define FILE_ADD_SUBDIRECTORY 0x00000004 |
| 6698 | #define FILE_APPEND_DATA 0x00000004 |
| 6699 | #define FILE_CREATE_PIPE_INSTANCE 0x00000004 |
| 6700 | #define FILE_READ_EA 0x00000008 |
| 6701 | #define FILE_WRITE_EA 0x00000010 |
| 6702 | #define FILE_EXECUTE 0x00000020 |
| 6703 | #define FILE_TRAVERSE 0x00000020 |
| 6704 | #define FILE_DELETE_CHILD 0x00000040 |
| 6705 | #define FILE_READ_ATTRIBUTES 0x00000080 |
| 6706 | #define FILE_WRITE_ATTRIBUTES 0x00000100 |
| 6707 | |
| 6708 | #define FILE_SHARE_READ 0x00000001 |
| 6709 | #define FILE_SHARE_WRITE 0x00000002 |
| 6710 | #define FILE_SHARE_DELETE 0x00000004 |
| 6711 | #define FILE_SHARE_VALID_FLAGS 0x00000007 |
| 6712 | |
| 6713 | #define FILE_ATTRIBUTE_READONLY 0x00000001 |
| 6714 | #define FILE_ATTRIBUTE_HIDDEN 0x00000002 |
| 6715 | #define FILE_ATTRIBUTE_SYSTEM 0x00000004 |
| 6716 | #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 |
| 6717 | #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 |
| 6718 | #define FILE_ATTRIBUTE_DEVICE 0x00000040 |
| 6719 | #define FILE_ATTRIBUTE_NORMAL 0x00000080 |
| 6720 | #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 |
| 6721 | #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 |
| 6722 | #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 |
| 6723 | #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 |
| 6724 | #define FILE_ATTRIBUTE_OFFLINE 0x00001000 |
| 6725 | #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 |
| 6726 | #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 |
| 6727 | #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 |
| 6728 | |
| 6729 | #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 |
| 6730 | #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 |
| 6731 | |
| 6732 | #define FILE_VALID_OPTION_FLAGS 0x00ffffff |
| 6733 | #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 |
| 6734 | #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 |
| 6735 | #define FILE_VALID_SET_FLAGS 0x00000036 |
| 6736 | |
| 6737 | #define FILE_SUPERSEDE 0x00000000 |
| 6738 | #define FILE_OPEN 0x00000001 |
| 6739 | #define FILE_CREATE 0x00000002 |
| 6740 | #define FILE_OPEN_IF 0x00000003 |
| 6741 | #define FILE_OVERWRITE 0x00000004 |
| 6742 | #define FILE_OVERWRITE_IF 0x00000005 |
| 6743 | #define FILE_MAXIMUM_DISPOSITION 0x00000005 |
| 6744 | |
| 6745 | #define FILE_DIRECTORY_FILE 0x00000001 |
| 6746 | #define FILE_WRITE_THROUGH 0x00000002 |
| 6747 | #define FILE_SEQUENTIAL_ONLY 0x00000004 |
| 6748 | #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 |
| 6749 | #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 |
| 6750 | #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 |
| 6751 | #define FILE_NON_DIRECTORY_FILE 0x00000040 |
| 6752 | #define FILE_CREATE_TREE_CONNECTION 0x00000080 |
| 6753 | #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 |
| 6754 | #define FILE_NO_EA_KNOWLEDGE 0x00000200 |
| 6755 | #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 |
| 6756 | #define FILE_RANDOM_ACCESS 0x00000800 |
| 6757 | #define FILE_DELETE_ON_CLOSE 0x00001000 |
| 6758 | #define FILE_OPEN_BY_FILE_ID 0x00002000 |
| 6759 | #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 |
| 6760 | #define FILE_NO_COMPRESSION 0x00008000 |
| 6761 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 6762 | #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 |
| 6763 | #define FILE_DISALLOW_EXCLUSIVE 0x00020000 |
| 6764 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 6765 | #define FILE_RESERVE_OPFILTER 0x00100000 |
| 6766 | #define FILE_OPEN_REPARSE_POINT 0x00200000 |
| 6767 | #define FILE_OPEN_NO_RECALL 0x00400000 |
| 6768 | #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 |
| 6769 | |
| 6770 | #define FILE_ANY_ACCESS 0x00000000 |
| 6771 | #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS |
| 6772 | #define FILE_READ_ACCESS 0x00000001 |
| 6773 | #define FILE_WRITE_ACCESS 0x00000002 |
| 6774 | |
| 6775 | #define FILE_ALL_ACCESS \ |
| 6776 | (STANDARD_RIGHTS_REQUIRED | \ |
| 6777 | SYNCHRONIZE | \ |
| 6778 | 0x1FF) |
| 6779 | |
| 6780 | #define FILE_GENERIC_EXECUTE \ |
| 6781 | (STANDARD_RIGHTS_EXECUTE | \ |
| 6782 | FILE_READ_ATTRIBUTES | \ |
| 6783 | FILE_EXECUTE | \ |
| 6784 | SYNCHRONIZE) |
| 6785 | |
| 6786 | #define FILE_GENERIC_READ \ |
| 6787 | (STANDARD_RIGHTS_READ | \ |
| 6788 | FILE_READ_DATA | \ |
| 6789 | FILE_READ_ATTRIBUTES | \ |
| 6790 | FILE_READ_EA | \ |
| 6791 | SYNCHRONIZE) |
| 6792 | |
| 6793 | #define FILE_GENERIC_WRITE \ |
| 6794 | (STANDARD_RIGHTS_WRITE | \ |
| 6795 | FILE_WRITE_DATA | \ |
| 6796 | FILE_WRITE_ATTRIBUTES | \ |
| 6797 | FILE_WRITE_EA | \ |
| 6798 | FILE_APPEND_DATA | \ |
| 6799 | SYNCHRONIZE) |
| 6800 | |
| 6801 | /* end winnt.h */ |
| 6802 | |
| 6803 | #define WMIREG_ACTION_REGISTER 1 |
| 6804 | #define WMIREG_ACTION_DEREGISTER 2 |
| 6805 | #define WMIREG_ACTION_REREGISTER 3 |
| 6806 | #define WMIREG_ACTION_UPDATE_GUIDS 4 |
| 6807 | #define WMIREG_ACTION_BLOCK_IRPS 5 |
| 6808 | |
| 6809 | #define WMIREGISTER 0 |
| 6810 | #define WMIUPDATE 1 |
| 6811 | |
| 6812 | typedef VOID |
| 6813 | (NTAPI FWMI_NOTIFICATION_CALLBACK)( |
| 6814 | PVOID Wnode, |
| 6815 | PVOID Context); |
| 6816 | typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK; |
| 6817 | |
| 6818 | #ifndef _PCI_X_ |
| 6819 | #define _PCI_X_ |
| 6820 | |
| 6821 | typedef struct _PCI_SLOT_NUMBER { |
| 6822 | union { |
| 6823 | struct { |
| 6824 | ULONG DeviceNumber:5; |
| 6825 | ULONG FunctionNumber:3; |
| 6826 | ULONG Reserved:24; |
| 6827 | } bits; |
| 6828 | ULONG AsULONG; |
| 6829 | } u; |
| 6830 | } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; |
| 6831 | |
| 6832 | #define PCI_TYPE0_ADDRESSES 6 |
| 6833 | #define PCI_TYPE1_ADDRESSES 2 |
| 6834 | #define PCI_TYPE2_ADDRESSES 5 |
| 6835 | |
| 6836 | typedef struct _PCI_COMMON_HEADER { |
| 6837 | PCI_COMMON_HEADER_LAYOUT |
| 6838 | } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; |
| 6839 | |
| 6840 | #ifdef __cplusplus |
| 6841 | typedef struct _PCI_COMMON_CONFIG { |
| 6842 | PCI_COMMON_HEADER_LAYOUT |
| 6843 | UCHAR DeviceSpecific[192]; |
| 6844 | } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; |
| 6845 | #else |
| 6846 | typedef struct _PCI_COMMON_CONFIG { |
| 6847 | __extension__ struct { |
| 6848 | PCI_COMMON_HEADER_LAYOUT |
| 6849 | }; |
| 6850 | UCHAR DeviceSpecific[192]; |
| 6851 | } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; |
| 6852 | #endif |
| 6853 | |
| 6854 | #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) |
| 6855 | |
| 6856 | #define PCI_EXTENDED_CONFIG_LENGTH 0x1000 |
| 6857 | |
| 6858 | #define PCI_MAX_DEVICES 32 |
| 6859 | #define PCI_MAX_FUNCTION 8 |
| 6860 | #define PCI_MAX_BRIDGE_NUMBER 0xFF |
| 6861 | #define PCI_INVALID_VENDORID 0xFFFF |
| 6862 | |
| 6863 | /* PCI_COMMON_CONFIG.HeaderType */ |
| 6864 | #define PCI_MULTIFUNCTION 0x80 |
| 6865 | #define PCI_DEVICE_TYPE 0x00 |
| 6866 | #define PCI_BRIDGE_TYPE 0x01 |
| 6867 | #define PCI_CARDBUS_BRIDGE_TYPE 0x02 |
| 6868 | |
| 6869 | #define PCI_CONFIGURATION_TYPE(PciData) \ |
| 6870 | (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) |
| 6871 | |
| 6872 | #define PCI_MULTIFUNCTION_DEVICE(PciData) \ |
| 6873 | ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) |
| 6874 | |
| 6875 | /* PCI_COMMON_CONFIG.Command */ |
| 6876 | #define PCI_ENABLE_IO_SPACE 0x0001 |
| 6877 | #define PCI_ENABLE_MEMORY_SPACE 0x0002 |
| 6878 | #define PCI_ENABLE_BUS_MASTER 0x0004 |
| 6879 | #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 |
| 6880 | #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 |
| 6881 | #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 |
| 6882 | #define PCI_ENABLE_PARITY 0x0040 |
| 6883 | #define PCI_ENABLE_WAIT_CYCLE 0x0080 |
| 6884 | #define PCI_ENABLE_SERR 0x0100 |
| 6885 | #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 |
| 6886 | #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 |
| 6887 | |
| 6888 | /* PCI_COMMON_CONFIG.Status */ |
| 6889 | #define PCI_STATUS_INTERRUPT_PENDING 0x0008 |
| 6890 | #define PCI_STATUS_CAPABILITIES_LIST 0x0010 |
| 6891 | #define PCI_STATUS_66MHZ_CAPABLE 0x0020 |
| 6892 | #define PCI_STATUS_UDF_SUPPORTED 0x0040 |
| 6893 | #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 |
| 6894 | #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 |
| 6895 | #define PCI_STATUS_DEVSEL 0x0600 |
| 6896 | #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 |
| 6897 | #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 |
| 6898 | #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 |
| 6899 | #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 |
| 6900 | #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 |
| 6901 | |
| 6902 | /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ |
| 6903 | |
| 6904 | #define PCI_WHICHSPACE_CONFIG 0x0 |
| 6905 | #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ |
| 6906 | |
| 6907 | #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01 |
| 6908 | #define PCI_CAPABILITY_ID_AGP 0x02 |
| 6909 | #define PCI_CAPABILITY_ID_VPD 0x03 |
| 6910 | #define PCI_CAPABILITY_ID_SLOT_ID 0x04 |
| 6911 | #define PCI_CAPABILITY_ID_MSI 0x05 |
| 6912 | #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06 |
| 6913 | #define PCI_CAPABILITY_ID_PCIX 0x07 |
| 6914 | #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08 |
| 6915 | #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09 |
| 6916 | #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A |
| 6917 | #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B |
| 6918 | #define PCI_CAPABILITY_ID_SHPC 0x0C |
| 6919 | #define PCI_CAPABILITY_ID_P2P_SSID 0x0D |
| 6920 | #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E |
| 6921 | #define PCI_CAPABILITY_ID_SECURE 0x0F |
| 6922 | #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10 |
| 6923 | #define PCI_CAPABILITY_ID_MSIX 0x11 |
| 6924 | |
| 6925 | typedef struct _PCI_CAPABILITIES_HEADER { |
| 6926 | UCHAR CapabilityID; |
| 6927 | UCHAR Next; |
| 6928 | } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER; |
| 6929 | |
| 6930 | typedef struct _PCI_PMC { |
| 6931 | UCHAR Version:3; |
| 6932 | UCHAR PMEClock:1; |
| 6933 | UCHAR Rsvd1:1; |
| 6934 | UCHAR DeviceSpecificInitialization:1; |
| 6935 | UCHAR Rsvd2:2; |
| 6936 | struct _PM_SUPPORT { |
| 6937 | UCHAR Rsvd2:1; |
| 6938 | UCHAR D1:1; |
| 6939 | UCHAR D2:1; |
| 6940 | UCHAR PMED0:1; |
| 6941 | UCHAR PMED1:1; |
| 6942 | UCHAR PMED2:1; |
| 6943 | UCHAR PMED3Hot:1; |
| 6944 | UCHAR PMED3Cold:1; |
| 6945 | } Support; |
| 6946 | } PCI_PMC, *PPCI_PMC; |
| 6947 | |
| 6948 | typedef struct _PCI_PMCSR { |
| 6949 | USHORT PowerState:2; |
| 6950 | USHORT Rsvd1:6; |
| 6951 | USHORT PMEEnable:1; |
| 6952 | USHORT DataSelect:4; |
| 6953 | USHORT DataScale:2; |
| 6954 | USHORT PMEStatus:1; |
| 6955 | } PCI_PMCSR, *PPCI_PMCSR; |
| 6956 | |
| 6957 | typedef struct _PCI_PMCSR_BSE { |
| 6958 | UCHAR Rsvd1:6; |
| 6959 | UCHAR D3HotSupportsStopClock:1; |
| 6960 | UCHAR BusPowerClockControlEnabled:1; |
| 6961 | } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE; |
| 6962 | |
| 6963 | typedef struct _PCI_PM_CAPABILITY { |
| 6964 | PCI_CAPABILITIES_HEADER Header; |
| 6965 | union { |
| 6966 | PCI_PMC Capabilities; |
| 6967 | USHORT AsUSHORT; |
| 6968 | } PMC; |
| 6969 | union { |
| 6970 | PCI_PMCSR ControlStatus; |
| 6971 | USHORT AsUSHORT; |
| 6972 | } PMCSR; |
| 6973 | union { |
| 6974 | PCI_PMCSR_BSE BridgeSupport; |
| 6975 | UCHAR AsUCHAR; |
| 6976 | } PMCSR_BSE; |
| 6977 | UCHAR Data; |
| 6978 | } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY; |
| 6979 | |
| 6980 | typedef struct { |
| 6981 | PCI_CAPABILITIES_HEADER Header; |
| 6982 | union { |
| 6983 | struct { |
| 6984 | USHORT DataParityErrorRecoveryEnable:1; |
| 6985 | USHORT EnableRelaxedOrdering:1; |
| 6986 | USHORT MaxMemoryReadByteCount:2; |
| 6987 | USHORT MaxOutstandingSplitTransactions:3; |
| 6988 | USHORT Reserved:9; |
| 6989 | } bits; |
| 6990 | USHORT AsUSHORT; |
| 6991 | } Command; |
| 6992 | union { |
| 6993 | struct { |
| 6994 | ULONG FunctionNumber:3; |
| 6995 | ULONG DeviceNumber:5; |
| 6996 | ULONG BusNumber:8; |
| 6997 | ULONG Device64Bit:1; |
| 6998 | ULONG Capable133MHz:1; |
| 6999 | ULONG SplitCompletionDiscarded:1; |
| 7000 | ULONG UnexpectedSplitCompletion:1; |
| 7001 | ULONG DeviceComplexity:1; |
| 7002 | ULONG DesignedMaxMemoryReadByteCount:2; |
| 7003 | ULONG DesignedMaxOutstandingSplitTransactions:3; |
| 7004 | ULONG DesignedMaxCumulativeReadSize:3; |
| 7005 | ULONG ReceivedSplitCompletionErrorMessage:1; |
| 7006 | ULONG CapablePCIX266:1; |
| 7007 | ULONG CapablePCIX533:1; |
| 7008 | } bits; |
| 7009 | ULONG AsULONG; |
| 7010 | } Status; |
| 7011 | } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY; |
| 7012 | |
| 7013 | #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001 |
| 7014 | #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002 |
| 7015 | #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003 |
| 7016 | #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004 |
| 7017 | #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005 |
| 7018 | #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006 |
| 7019 | #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007 |
| 7020 | #define PCI_EXPRESS_MFVC_CAP_ID 0x0008 |
| 7021 | #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009 |
| 7022 | #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A |
| 7023 | #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010 |
| 7024 | |
| 7025 | typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER { |
| 7026 | USHORT CapabilityID; |
| 7027 | USHORT Version:4; |
| 7028 | USHORT Next:12; |
| 7029 | } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER; |
| 7030 | |
| 7031 | typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY { |
| 7032 | PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; |
| 7033 | ULONG LowSerialNumber; |
| 7034 | ULONG HighSerialNumber; |
| 7035 | } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY; |
| 7036 | |
| 7037 | typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS { |
| 7038 | _ANONYMOUS_STRUCT struct { |
| 7039 | ULONG Undefined:1; |
| 7040 | ULONG Reserved1:3; |
| 7041 | ULONG DataLinkProtocolError:1; |
| 7042 | ULONG SurpriseDownError:1; |
| 7043 | ULONG Reserved2:6; |
| 7044 | ULONG PoisonedTLP:1; |
| 7045 | ULONG FlowControlProtocolError:1; |
| 7046 | ULONG CompletionTimeout:1; |
| 7047 | ULONG CompleterAbort:1; |
| 7048 | ULONG UnexpectedCompletion:1; |
| 7049 | ULONG ReceiverOverflow:1; |
| 7050 | ULONG MalformedTLP:1; |
| 7051 | ULONG ECRCError:1; |
| 7052 | ULONG UnsupportedRequestError:1; |
| 7053 | ULONG Reserved3:11; |
| 7054 | } DUMMYSTRUCTNAME; |
| 7055 | ULONG AsULONG; |
| 7056 | } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS; |
| 7057 | |
| 7058 | typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK { |
| 7059 | _ANONYMOUS_STRUCT struct { |
| 7060 | ULONG Undefined:1; |
| 7061 | ULONG Reserved1:3; |
| 7062 | ULONG DataLinkProtocolError:1; |
| 7063 | ULONG SurpriseDownError:1; |
| 7064 | ULONG Reserved2:6; |
| 7065 | ULONG PoisonedTLP:1; |
| 7066 | ULONG FlowControlProtocolError:1; |
| 7067 | ULONG CompletionTimeout:1; |
| 7068 | ULONG CompleterAbort:1; |
| 7069 | ULONG UnexpectedCompletion:1; |
| 7070 | ULONG ReceiverOverflow:1; |
| 7071 | ULONG MalformedTLP:1; |
| 7072 | ULONG ECRCError:1; |
| 7073 | ULONG UnsupportedRequestError:1; |
| 7074 | ULONG Reserved3:11; |
| 7075 | } DUMMYSTRUCTNAME; |
| 7076 | ULONG AsULONG; |
| 7077 | } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK; |
| 7078 | |
| 7079 | typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY { |
| 7080 | _ANONYMOUS_STRUCT struct { |
| 7081 | ULONG Undefined:1; |
| 7082 | ULONG Reserved1:3; |
| 7083 | ULONG DataLinkProtocolError:1; |
| 7084 | ULONG SurpriseDownError:1; |
| 7085 | ULONG Reserved2:6; |
| 7086 | ULONG PoisonedTLP:1; |
| 7087 | ULONG FlowControlProtocolError:1; |
| 7088 | ULONG CompletionTimeout:1; |
| 7089 | ULONG CompleterAbort:1; |
| 7090 | ULONG UnexpectedCompletion:1; |
| 7091 | ULONG ReceiverOverflow:1; |
| 7092 | ULONG MalformedTLP:1; |
| 7093 | ULONG ECRCError:1; |
| 7094 | ULONG UnsupportedRequestError:1; |
| 7095 | ULONG Reserved3:11; |
| 7096 | } DUMMYSTRUCTNAME; |
| 7097 | ULONG AsULONG; |
| 7098 | } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY; |
| 7099 | |
| 7100 | typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS { |
| 7101 | _ANONYMOUS_STRUCT struct { |
| 7102 | ULONG ReceiverError:1; |
| 7103 | ULONG Reserved1:5; |
| 7104 | ULONG BadTLP:1; |
| 7105 | ULONG BadDLLP:1; |
| 7106 | ULONG ReplayNumRollover:1; |
| 7107 | ULONG Reserved2:3; |
| 7108 | ULONG ReplayTimerTimeout:1; |
| 7109 | ULONG AdvisoryNonFatalError:1; |
| 7110 | ULONG Reserved3:18; |
| 7111 | } DUMMYSTRUCTNAME; |
| 7112 | ULONG AsULONG; |
| 7113 | } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS; |
| 7114 | |
| 7115 | typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK { |
| 7116 | _ANONYMOUS_STRUCT struct { |
| 7117 | ULONG ReceiverError:1; |
| 7118 | ULONG Reserved1:5; |
| 7119 | ULONG BadTLP:1; |
| 7120 | ULONG BadDLLP:1; |
| 7121 | ULONG ReplayNumRollover:1; |
| 7122 | ULONG Reserved2:3; |
| 7123 | ULONG ReplayTimerTimeout:1; |
| 7124 | ULONG AdvisoryNonFatalError:1; |
| 7125 | ULONG Reserved3:18; |
| 7126 | } DUMMYSTRUCTNAME; |
| 7127 | ULONG AsULONG; |
| 7128 | } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK; |
| 7129 | |
| 7130 | typedef union _PCI_EXPRESS_AER_CAPABILITIES { |
| 7131 | _ANONYMOUS_STRUCT struct { |
| 7132 | ULONG FirstErrorPointer:5; |
| 7133 | ULONG ECRCGenerationCapable:1; |
| 7134 | ULONG ECRCGenerationEnable:1; |
| 7135 | ULONG ECRCCheckCapable:1; |
| 7136 | ULONG ECRCCheckEnable:1; |
| 7137 | ULONG Reserved:23; |
| 7138 | } DUMMYSTRUCTNAME; |
| 7139 | ULONG AsULONG; |
| 7140 | } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES; |
| 7141 | |
| 7142 | typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND { |
| 7143 | _ANONYMOUS_STRUCT struct { |
| 7144 | ULONG CorrectableErrorReportingEnable:1; |
| 7145 | ULONG NonFatalErrorReportingEnable:1; |
| 7146 | ULONG FatalErrorReportingEnable:1; |
| 7147 | ULONG Reserved:29; |
| 7148 | } DUMMYSTRUCTNAME; |
| 7149 | ULONG AsULONG; |
| 7150 | } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND; |
| 7151 | |
| 7152 | typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS { |
| 7153 | _ANONYMOUS_STRUCT struct { |
| 7154 | ULONG CorrectableErrorReceived:1; |
| 7155 | ULONG MultipleCorrectableErrorsReceived:1; |
| 7156 | ULONG UncorrectableErrorReceived:1; |
| 7157 | ULONG MultipleUncorrectableErrorsReceived:1; |
| 7158 | ULONG FirstUncorrectableFatal:1; |
| 7159 | ULONG NonFatalErrorMessagesReceived:1; |
| 7160 | ULONG FatalErrorMessagesReceived:1; |
| 7161 | ULONG Reserved:20; |
| 7162 | ULONG AdvancedErrorInterruptMessageNumber:5; |
| 7163 | } DUMMYSTRUCTNAME; |
| 7164 | ULONG AsULONG; |
| 7165 | } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS; |
| 7166 | |
| 7167 | typedef union _PCI_EXPRESS_ERROR_SOURCE_ID { |
| 7168 | _ANONYMOUS_STRUCT struct { |
| 7169 | USHORT CorrectableSourceIdFun:3; |
| 7170 | USHORT CorrectableSourceIdDev:5; |
| 7171 | USHORT CorrectableSourceIdBus:8; |
| 7172 | USHORT UncorrectableSourceIdFun:3; |
| 7173 | USHORT UncorrectableSourceIdDev:5; |
| 7174 | USHORT UncorrectableSourceIdBus:8; |
| 7175 | } DUMMYSTRUCTNAME; |
| 7176 | ULONG AsULONG; |
| 7177 | } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID; |
| 7178 | |
| 7179 | typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS { |
| 7180 | _ANONYMOUS_STRUCT struct { |
| 7181 | ULONG TargetAbortOnSplitCompletion:1; |
| 7182 | ULONG MasterAbortOnSplitCompletion:1; |
| 7183 | ULONG ReceivedTargetAbort:1; |
| 7184 | ULONG ReceivedMasterAbort:1; |
| 7185 | ULONG RsvdZ:1; |
| 7186 | ULONG UnexpectedSplitCompletionError:1; |
| 7187 | ULONG UncorrectableSplitCompletion:1; |
| 7188 | ULONG UncorrectableDataError:1; |
| 7189 | ULONG UncorrectableAttributeError:1; |
| 7190 | ULONG UncorrectableAddressError:1; |
| 7191 | ULONG DelayedTransactionDiscardTimerExpired:1; |
| 7192 | ULONG PERRAsserted:1; |
| 7193 | ULONG SERRAsserted:1; |
| 7194 | ULONG InternalBridgeError:1; |
| 7195 | ULONG Reserved:18; |
| 7196 | } DUMMYSTRUCTNAME; |
| 7197 | ULONG AsULONG; |
| 7198 | } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS; |
| 7199 | |
| 7200 | typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK { |
| 7201 | _ANONYMOUS_STRUCT struct { |
| 7202 | ULONG TargetAbortOnSplitCompletion:1; |
| 7203 | ULONG MasterAbortOnSplitCompletion:1; |
| 7204 | ULONG ReceivedTargetAbort:1; |
| 7205 | ULONG ReceivedMasterAbort:1; |
| 7206 | ULONG RsvdZ:1; |
| 7207 | ULONG UnexpectedSplitCompletionError:1; |
| 7208 | ULONG UncorrectableSplitCompletion:1; |
| 7209 | ULONG UncorrectableDataError:1; |
| 7210 | ULONG UncorrectableAttributeError:1; |
| 7211 | ULONG UncorrectableAddressError:1; |
| 7212 | ULONG DelayedTransactionDiscardTimerExpired:1; |
| 7213 | ULONG PERRAsserted:1; |
| 7214 | ULONG SERRAsserted:1; |
| 7215 | ULONG InternalBridgeError:1; |
| 7216 | ULONG Reserved:18; |
| 7217 | } DUMMYSTRUCTNAME; |
| 7218 | ULONG AsULONG; |
| 7219 | } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK; |
| 7220 | |
| 7221 | typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY { |
| 7222 | _ANONYMOUS_STRUCT struct { |
| 7223 | ULONG TargetAbortOnSplitCompletion:1; |
| 7224 | ULONG MasterAbortOnSplitCompletion:1; |
| 7225 | ULONG ReceivedTargetAbort:1; |
| 7226 | ULONG ReceivedMasterAbort:1; |
| 7227 | ULONG RsvdZ:1; |
| 7228 | ULONG UnexpectedSplitCompletionError:1; |
| 7229 | ULONG UncorrectableSplitCompletion:1; |
| 7230 | ULONG UncorrectableDataError:1; |
| 7231 | ULONG UncorrectableAttributeError:1; |
| 7232 | ULONG UncorrectableAddressError:1; |
| 7233 | ULONG DelayedTransactionDiscardTimerExpired:1; |
| 7234 | ULONG PERRAsserted:1; |
| 7235 | ULONG SERRAsserted:1; |
| 7236 | ULONG InternalBridgeError:1; |
| 7237 | ULONG Reserved:18; |
| 7238 | } DUMMYSTRUCTNAME; |
| 7239 | ULONG AsULONG; |
| 7240 | } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY; |
| 7241 | |
| 7242 | typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES { |
| 7243 | _ANONYMOUS_STRUCT struct { |
| 7244 | ULONG SecondaryUncorrectableFirstErrorPtr:5; |
| 7245 | ULONG Reserved:27; |
| 7246 | } DUMMYSTRUCTNAME; |
| 7247 | ULONG AsULONG; |
| 7248 | } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES; |
| 7249 | |
| 7250 | #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001 |
| 7251 | #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002 |
| 7252 | #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004 |
| 7253 | |
| 7254 | #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \ |
| 7255 | (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \ |
| 7256 | ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \ |
| 7257 | ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING) |
| 7258 | |
| 7259 | typedef struct _PCI_EXPRESS_AER_CAPABILITY { |
| 7260 | PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; |
| 7261 | PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; |
| 7262 | PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; |
| 7263 | PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; |
| 7264 | PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; |
| 7265 | PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; |
| 7266 | PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; |
| 7267 | ULONG HeaderLog[4]; |
| 7268 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; |
| 7269 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; |
| 7270 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; |
| 7271 | PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; |
| 7272 | ULONG SecHeaderLog[4]; |
| 7273 | } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY; |
| 7274 | |
| 7275 | typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY { |
| 7276 | PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; |
| 7277 | PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; |
| 7278 | PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; |
| 7279 | PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; |
| 7280 | PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; |
| 7281 | PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; |
| 7282 | PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; |
| 7283 | ULONG HeaderLog[4]; |
| 7284 | PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand; |
| 7285 | PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus; |
| 7286 | PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId; |
| 7287 | } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY; |
| 7288 | |
| 7289 | typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY { |
| 7290 | PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; |
| 7291 | PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; |
| 7292 | PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; |
| 7293 | PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; |
| 7294 | PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; |
| 7295 | PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; |
| 7296 | PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; |
| 7297 | ULONG HeaderLog[4]; |
| 7298 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; |
| 7299 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; |
| 7300 | PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; |
| 7301 | PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; |
| 7302 | ULONG SecHeaderLog[4]; |
| 7303 | } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY; |
| 7304 | |
| 7305 | typedef union _PCI_EXPRESS_SRIOV_CAPS { |
| 7306 | _ANONYMOUS_STRUCT struct { |
| 7307 | ULONG VFMigrationCapable:1; |
| 7308 | ULONG Reserved1:20; |
| 7309 | ULONG VFMigrationInterruptNumber:11; |
| 7310 | } DUMMYSTRUCTNAME; |
| 7311 | ULONG AsULONG; |
| 7312 | } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS; |
| 7313 | |
| 7314 | typedef union _PCI_EXPRESS_SRIOV_CONTROL { |
| 7315 | _ANONYMOUS_STRUCT struct { |
| 7316 | USHORT VFEnable:1; |
| 7317 | USHORT VFMigrationEnable:1; |
| 7318 | USHORT VFMigrationInterruptEnable:1; |
| 7319 | USHORT VFMemorySpaceEnable:1; |
| 7320 | USHORT ARICapableHierarchy:1; |
| 7321 | USHORT Reserved1:11; |
| 7322 | } DUMMYSTRUCTNAME; |
| 7323 | USHORT AsUSHORT; |
| 7324 | } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL; |
| 7325 | |
| 7326 | typedef union _PCI_EXPRESS_SRIOV_STATUS { |
| 7327 | _ANONYMOUS_STRUCT struct { |
| 7328 | USHORT VFMigrationStatus:1; |
| 7329 | USHORT Reserved1:15; |
| 7330 | } DUMMYSTRUCTNAME; |
| 7331 | USHORT AsUSHORT; |
| 7332 | } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS; |
| 7333 | |
| 7334 | typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY { |
| 7335 | _ANONYMOUS_STRUCT struct { |
| 7336 | ULONG VFMigrationStateBIR:3; |
| 7337 | ULONG VFMigrationStateOffset:29; |
| 7338 | } DUMMYSTRUCTNAME; |
| 7339 | ULONG AsULONG; |
| 7340 | } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY; |
| 7341 | |
| 7342 | typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY { |
| 7343 | PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; |
| 7344 | PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities; |
| 7345 | PCI_EXPRESS_SRIOV_CONTROL SRIOVControl; |
| 7346 | PCI_EXPRESS_SRIOV_STATUS SRIOVStatus; |
| 7347 | USHORT InitialVFs; |
| 7348 | USHORT TotalVFs; |
| 7349 | USHORT NumVFs; |
| 7350 | UCHAR FunctionDependencyLink; |
| 7351 | UCHAR RsvdP1; |
| 7352 | USHORT FirstVFOffset; |
| 7353 | USHORT VFStride; |
| 7354 | USHORT RsvdP2; |
| 7355 | USHORT VFDeviceId; |
| 7356 | ULONG SupportedPageSizes; |
| 7357 | ULONG SystemPageSize; |
| 7358 | ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; |
| 7359 | PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset; |
| 7360 | } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY; |
| 7361 | |
| 7362 | /* PCI device classes */ |
| 7363 | #define PCI_CLASS_PRE_20 0x00 |
| 7364 | #define PCI_CLASS_MASS_STORAGE_CTLR 0x01 |
| 7365 | #define PCI_CLASS_NETWORK_CTLR 0x02 |
| 7366 | #define PCI_CLASS_DISPLAY_CTLR 0x03 |
| 7367 | #define PCI_CLASS_MULTIMEDIA_DEV 0x04 |
| 7368 | #define PCI_CLASS_MEMORY_CTLR 0x05 |
| 7369 | #define PCI_CLASS_BRIDGE_DEV 0x06 |
| 7370 | #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 |
| 7371 | #define PCI_CLASS_BASE_SYSTEM_DEV 0x08 |
| 7372 | #define PCI_CLASS_INPUT_DEV 0x09 |
| 7373 | #define PCI_CLASS_DOCKING_STATION 0x0a |
| 7374 | #define PCI_CLASS_PROCESSOR 0x0b |
| 7375 | #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c |
| 7376 | #define PCI_CLASS_WIRELESS_CTLR 0x0d |
| 7377 | #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e |
| 7378 | #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f |
| 7379 | #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10 |
| 7380 | #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 |
| 7381 | #define PCI_CLASS_NOT_DEFINED 0xff |
| 7382 | |
| 7383 | /* PCI device subclasses for class 0 */ |
| 7384 | #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 |
| 7385 | #define PCI_SUBCLASS_PRE_20_VGA 0x01 |
| 7386 | |
| 7387 | /* PCI device subclasses for class 1 (mass storage controllers)*/ |
| 7388 | #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 |
| 7389 | #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 |
| 7390 | #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 |
| 7391 | #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 |
| 7392 | #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 |
| 7393 | #define PCI_SUBCLASS_MSC_OTHER 0x80 |
| 7394 | |
| 7395 | /* PCI device subclasses for class 2 (network controllers)*/ |
| 7396 | #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 |
| 7397 | #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 |
| 7398 | #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 |
| 7399 | #define PCI_SUBCLASS_NET_ATM_CTLR 0x03 |
| 7400 | #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04 |
| 7401 | #define PCI_SUBCLASS_NET_OTHER 0x80 |
| 7402 | |
| 7403 | /* PCI device subclasses for class 3 (display controllers)*/ |
| 7404 | #define PCI_SUBCLASS_VID_VGA_CTLR 0x00 |
| 7405 | #define PCI_SUBCLASS_VID_XGA_CTLR 0x01 |
| 7406 | #define PCI_SUBCLASS_VID_3D_CTLR 0x02 |
| 7407 | #define PCI_SUBCLASS_VID_OTHER 0x80 |
| 7408 | |
| 7409 | /* PCI device subclasses for class 4 (multimedia device)*/ |
| 7410 | #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 |
| 7411 | #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 |
| 7412 | #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 |
| 7413 | #define PCI_SUBCLASS_MM_OTHER 0x80 |
| 7414 | |
| 7415 | /* PCI device subclasses for class 5 (memory controller)*/ |
| 7416 | #define PCI_SUBCLASS_MEM_RAM 0x00 |
| 7417 | #define PCI_SUBCLASS_MEM_FLASH 0x01 |
| 7418 | #define PCI_SUBCLASS_MEM_OTHER 0x80 |
| 7419 | |
| 7420 | /* PCI device subclasses for class 6 (bridge device)*/ |
| 7421 | #define PCI_SUBCLASS_BR_HOST 0x00 |
| 7422 | #define PCI_SUBCLASS_BR_ISA 0x01 |
| 7423 | #define PCI_SUBCLASS_BR_EISA 0x02 |
| 7424 | #define PCI_SUBCLASS_BR_MCA 0x03 |
| 7425 | #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 |
| 7426 | #define PCI_SUBCLASS_BR_PCMCIA 0x05 |
| 7427 | #define PCI_SUBCLASS_BR_NUBUS 0x06 |
| 7428 | #define PCI_SUBCLASS_BR_CARDBUS 0x07 |
| 7429 | #define PCI_SUBCLASS_BR_RACEWAY 0x08 |
| 7430 | #define PCI_SUBCLASS_BR_OTHER 0x80 |
| 7431 | |
| 7432 | #define PCI_SUBCLASS_COM_SERIAL 0x00 |
| 7433 | #define PCI_SUBCLASS_COM_PARALLEL 0x01 |
| 7434 | #define PCI_SUBCLASS_COM_MULTIPORT 0x02 |
| 7435 | #define PCI_SUBCLASS_COM_MODEM 0x03 |
| 7436 | #define PCI_SUBCLASS_COM_OTHER 0x80 |
| 7437 | |
| 7438 | #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00 |
| 7439 | #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01 |
| 7440 | #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02 |
| 7441 | #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03 |
| 7442 | #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04 |
| 7443 | #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05 |
| 7444 | #define PCI_SUBCLASS_SYS_OTHER 0x80 |
| 7445 | |
| 7446 | #define PCI_SUBCLASS_INP_KEYBOARD 0x00 |
| 7447 | #define PCI_SUBCLASS_INP_DIGITIZER 0x01 |
| 7448 | #define PCI_SUBCLASS_INP_MOUSE 0x02 |
| 7449 | #define PCI_SUBCLASS_INP_SCANNER 0x03 |
| 7450 | #define PCI_SUBCLASS_INP_GAMEPORT 0x04 |
| 7451 | #define PCI_SUBCLASS_INP_OTHER 0x80 |
| 7452 | |
| 7453 | #define PCI_SUBCLASS_DOC_GENERIC 0x00 |
| 7454 | #define PCI_SUBCLASS_DOC_OTHER 0x80 |
| 7455 | |
| 7456 | #define PCI_SUBCLASS_PROC_386 0x00 |
| 7457 | #define PCI_SUBCLASS_PROC_486 0x01 |
| 7458 | #define PCI_SUBCLASS_PROC_PENTIUM 0x02 |
| 7459 | #define PCI_SUBCLASS_PROC_ALPHA 0x10 |
| 7460 | #define PCI_SUBCLASS_PROC_POWERPC 0x20 |
| 7461 | #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40 |
| 7462 | |
| 7463 | /* PCI device subclasses for class C (serial bus controller)*/ |
| 7464 | #define PCI_SUBCLASS_SB_IEEE1394 0x00 |
| 7465 | #define PCI_SUBCLASS_SB_ACCESS 0x01 |
| 7466 | #define PCI_SUBCLASS_SB_SSA 0x02 |
| 7467 | #define PCI_SUBCLASS_SB_USB 0x03 |
| 7468 | #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 |
| 7469 | #define PCI_SUBCLASS_SB_SMBUS 0x05 |
| 7470 | |
| 7471 | #define PCI_SUBCLASS_WIRELESS_IRDA 0x00 |
| 7472 | #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01 |
| 7473 | #define PCI_SUBCLASS_WIRELESS_RF 0x10 |
| 7474 | #define PCI_SUBCLASS_WIRELESS_OTHER 0x80 |
| 7475 | |
| 7476 | #define PCI_SUBCLASS_INTIO_I2O 0x00 |
| 7477 | |
| 7478 | #define PCI_SUBCLASS_SAT_TV 0x01 |
| 7479 | #define PCI_SUBCLASS_SAT_AUDIO 0x02 |
| 7480 | #define PCI_SUBCLASS_SAT_VOICE 0x03 |
| 7481 | #define PCI_SUBCLASS_SAT_DATA 0x04 |
| 7482 | |
| 7483 | #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00 |
| 7484 | #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10 |
| 7485 | #define PCI_SUBCLASS_CRYPTO_OTHER 0x80 |
| 7486 | |
| 7487 | #define PCI_SUBCLASS_DASP_DPIO 0x00 |
| 7488 | #define PCI_SUBCLASS_DASP_OTHER 0x80 |
| 7489 | |
| 7490 | #define PCI_ADDRESS_IO_SPACE 0x00000001 |
| 7491 | #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 |
| 7492 | #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 |
| 7493 | #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc |
| 7494 | #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 |
| 7495 | #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 |
| 7496 | |
| 7497 | #define PCI_TYPE_32BIT 0 |
| 7498 | #define PCI_TYPE_20BIT 2 |
| 7499 | #define PCI_TYPE_64BIT 4 |
| 7500 | |
| 7501 | #define PCI_ROMADDRESS_ENABLED 0x00000001 |
| 7502 | |
| 7503 | #endif /* _PCI_X_ */ |
| 7504 | |
| 7505 | #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1 |
| 7506 | |
| 7507 | typedef NTSTATUS |
| 7508 | (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( |
| 7509 | IN OUT PVOID Context); |
| 7510 | typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE; |
| 7511 | |
| 7512 | typedef NTSTATUS |
| 7513 | (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( |
| 7514 | IN OUT PVOID Context); |
| 7515 | typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE; |
| 7516 | |
| 7517 | typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { |
| 7518 | USHORT Size; |
| 7519 | USHORT Version; |
| 7520 | PVOID Context; |
| 7521 | PINTERFACE_REFERENCE InterfaceReference; |
| 7522 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 7523 | PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode; |
| 7524 | PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode; |
| 7525 | } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE; |
| 7526 | |
| 7527 | #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1 |
| 7528 | |
| 7529 | typedef ULONG |
| 7530 | (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( |
| 7531 | IN PVOID Context, |
| 7532 | OUT PVOID Buffer, |
| 7533 | IN ULONG Offset, |
| 7534 | IN ULONG Length); |
| 7535 | |
| 7536 | typedef ULONG |
| 7537 | (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( |
| 7538 | IN PVOID Context, |
| 7539 | IN PVOID Buffer, |
| 7540 | IN ULONG Offset, |
| 7541 | IN ULONG Length); |
| 7542 | |
| 7543 | typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { |
| 7544 | USHORT Size; |
| 7545 | USHORT Version; |
| 7546 | PVOID Context; |
| 7547 | PINTERFACE_REFERENCE InterfaceReference; |
| 7548 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 7549 | PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace; |
| 7550 | PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace; |
| 7551 | } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE; |
| 7552 | |
| 7553 | #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1 |
| 7554 | |
| 7555 | typedef NTSTATUS |
| 7556 | (NTAPI PCI_MSIX_SET_ENTRY)( |
| 7557 | IN PVOID Context, |
| 7558 | IN ULONG TableEntry, |
| 7559 | IN ULONG MessageNumber); |
| 7560 | typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY; |
| 7561 | |
| 7562 | typedef NTSTATUS |
| 7563 | (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( |
| 7564 | IN PVOID Context, |
| 7565 | IN ULONG TableEntry); |
| 7566 | typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY; |
| 7567 | |
| 7568 | typedef NTSTATUS |
| 7569 | (NTAPI PCI_MSIX_GET_ENTRY)( |
| 7570 | IN PVOID Context, |
| 7571 | IN ULONG TableEntry, |
| 7572 | OUT PULONG MessageNumber, |
| 7573 | OUT PBOOLEAN Masked); |
| 7574 | typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY; |
| 7575 | |
| 7576 | typedef NTSTATUS |
| 7577 | (NTAPI PCI_MSIX_GET_TABLE_SIZE)( |
| 7578 | IN PVOID Context, |
| 7579 | OUT PULONG TableSize); |
| 7580 | typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE; |
| 7581 | |
| 7582 | typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE { |
| 7583 | USHORT Size; |
| 7584 | USHORT Version; |
| 7585 | PVOID Context; |
| 7586 | PINTERFACE_REFERENCE InterfaceReference; |
| 7587 | PINTERFACE_DEREFERENCE InterfaceDereference; |
| 7588 | PPCI_MSIX_SET_ENTRY SetTableEntry; |
| 7589 | PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry; |
| 7590 | PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry; |
| 7591 | PPCI_MSIX_GET_ENTRY GetTableEntry; |
| 7592 | PPCI_MSIX_GET_TABLE_SIZE GetTableSize; |
| 7593 | } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE; |
| 7594 | |
| 7595 | #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \ |
| 7596 | RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry) |
| 7597 | |
| 7598 | /****************************************************************************** |
| 7599 | * Object Manager Types * |
| 7600 | ******************************************************************************/ |
| 7601 | |
| 7602 | #define MAXIMUM_FILENAME_LENGTH 256 |
| 7603 | #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') |
| 7604 | |
| 7605 | #define OBJECT_TYPE_CREATE 0x0001 |
| 7606 | #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) |
| 7607 | |
| 7608 | #define DIRECTORY_QUERY 0x0001 |
| 7609 | #define DIRECTORY_TRAVERSE 0x0002 |
| 7610 | #define DIRECTORY_CREATE_OBJECT 0x0004 |
| 7611 | #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008 |
| 7612 | #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) |
| 7613 | |
| 7614 | #define SYMBOLIC_LINK_QUERY 0x0001 |
| 7615 | #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) |
| 7616 | |
| 7617 | #define DUPLICATE_CLOSE_SOURCE 0x00000001 |
| 7618 | #define DUPLICATE_SAME_ACCESS 0x00000002 |
| 7619 | #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 |
| 7620 | |
| 7621 | #define OB_FLT_REGISTRATION_VERSION_0100 0x0100 |
| 7622 | #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100 |
| 7623 | |
| 7624 | typedef ULONG OB_OPERATION; |
| 7625 | |
| 7626 | #define OB_OPERATION_HANDLE_CREATE 0x00000001 |
| 7627 | #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002 |
| 7628 | |
| 7629 | typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION { |
| 7630 | IN OUT ACCESS_MASK DesiredAccess; |
| 7631 | IN ACCESS_MASK OriginalDesiredAccess; |
| 7632 | } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION; |
| 7633 | |
| 7634 | typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION { |
| 7635 | IN OUT ACCESS_MASK DesiredAccess; |
| 7636 | IN ACCESS_MASK OriginalDesiredAccess; |
| 7637 | IN PVOID SourceProcess; |
| 7638 | IN PVOID TargetProcess; |
| 7639 | } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION; |
| 7640 | |
| 7641 | typedef union _OB_PRE_OPERATION_PARAMETERS { |
| 7642 | IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation; |
| 7643 | IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; |
| 7644 | } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS; |
| 7645 | |
| 7646 | typedef struct _OB_PRE_OPERATION_INFORMATION { |
| 7647 | IN OB_OPERATION Operation; |
| 7648 | _ANONYMOUS_UNION union { |
| 7649 | IN ULONG Flags; |
| 7650 | _ANONYMOUS_STRUCT struct { |
| 7651 | IN ULONG KernelHandle:1; |
| 7652 | IN ULONG Reserved:31; |
| 7653 | } DUMMYSTRUCTNAME; |
| 7654 | } DUMMYUNIONNAME; |
| 7655 | IN PVOID Object; |
| 7656 | IN POBJECT_TYPE ObjectType; |
| 7657 | OUT PVOID CallContext; |
| 7658 | IN POB_PRE_OPERATION_PARAMETERS Parameters; |
| 7659 | } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION; |
| 7660 | |
| 7661 | typedef struct _OB_POST_CREATE_HANDLE_INFORMATION { |
| 7662 | IN ACCESS_MASK GrantedAccess; |
| 7663 | } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION; |
| 7664 | |
| 7665 | typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION { |
| 7666 | IN ACCESS_MASK GrantedAccess; |
| 7667 | } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION; |
| 7668 | |
| 7669 | typedef union _OB_POST_OPERATION_PARAMETERS { |
| 7670 | IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation; |
| 7671 | IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; |
| 7672 | } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS; |
| 7673 | |
| 7674 | typedef struct _OB_POST_OPERATION_INFORMATION { |
| 7675 | IN OB_OPERATION Operation; |
| 7676 | _ANONYMOUS_UNION union { |
| 7677 | IN ULONG Flags; |
| 7678 | _ANONYMOUS_STRUCT struct { |
| 7679 | IN ULONG KernelHandle:1; |
| 7680 | IN ULONG Reserved:31; |
| 7681 | } DUMMYSTRUCTNAME; |
| 7682 | } DUMMYUNIONNAME; |
| 7683 | IN PVOID Object; |
| 7684 | IN POBJECT_TYPE ObjectType; |
| 7685 | IN PVOID CallContext; |
| 7686 | IN NTSTATUS ReturnStatus; |
| 7687 | IN POB_POST_OPERATION_PARAMETERS Parameters; |
| 7688 | } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION; |
| 7689 | |
| 7690 | typedef enum _OB_PREOP_CALLBACK_STATUS { |
| 7691 | OB_PREOP_SUCCESS |
| 7692 | } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS; |
| 7693 | |
| 7694 | typedef OB_PREOP_CALLBACK_STATUS |
| 7695 | (NTAPI *POB_PRE_OPERATION_CALLBACK)( |
| 7696 | IN PVOID RegistrationContext, |
| 7697 | IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation); |
| 7698 | |
| 7699 | typedef VOID |
| 7700 | (NTAPI *POB_POST_OPERATION_CALLBACK)( |
| 7701 | IN PVOID RegistrationContext, |
| 7702 | IN POB_POST_OPERATION_INFORMATION OperationInformation); |
| 7703 | |
| 7704 | typedef struct _OB_OPERATION_REGISTRATION { |
| 7705 | IN POBJECT_TYPE *ObjectType; |
| 7706 | IN OB_OPERATION Operations; |
| 7707 | IN POB_PRE_OPERATION_CALLBACK PreOperation; |
| 7708 | IN POB_POST_OPERATION_CALLBACK PostOperation; |
| 7709 | } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION; |
| 7710 | |
| 7711 | typedef struct _OB_CALLBACK_REGISTRATION { |
| 7712 | IN USHORT Version; |
| 7713 | IN USHORT OperationRegistrationCount; |
| 7714 | IN UNICODE_STRING Altitude; |
| 7715 | IN PVOID RegistrationContext; |
| 7716 | IN OB_OPERATION_REGISTRATION *OperationRegistration; |
| 7717 | } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION; |
| 7718 | |
| 7719 | typedef struct _OBJECT_NAME_INFORMATION { |
| 7720 | UNICODE_STRING Name; |
| 7721 | } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; |
| 7722 | |
| 7723 | /* Exported object types */ |
| 7724 | extern POBJECT_TYPE NTSYSAPI *CmKeyObjectType; |
| 7725 | extern POBJECT_TYPE NTSYSAPI *ExEventObjectType; |
| 7726 | extern POBJECT_TYPE NTSYSAPI *ExSemaphoreObjectType; |
| 7727 | extern POBJECT_TYPE NTSYSAPI *IoFileObjectType; |
| 7728 | extern POBJECT_TYPE NTSYSAPI *PsThreadType; |
| 7729 | extern POBJECT_TYPE NTSYSAPI *SeTokenObjectType; |
| 7730 | extern POBJECT_TYPE NTSYSAPI *PsProcessType; |
| 7731 | extern POBJECT_TYPE NTSYSAPI *TmEnlistmentObjectType; |
| 7732 | extern POBJECT_TYPE NTSYSAPI *TmResourceManagerObjectType; |
| 7733 | extern POBJECT_TYPE NTSYSAPI *TmTransactionManagerObjectType; |
| 7734 | extern POBJECT_TYPE NTSYSAPI *TmTransactionObjectType; |
| 7735 | |
| 7736 | /****************************************************************************** |
| 7737 | * Process Manager Types * |
| 7738 | ******************************************************************************/ |
| 7739 | |
| 7740 | #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 |
| 7741 | #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 |
| 7742 | #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 |
| 7743 | #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 |
| 7744 | #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 |
| 7745 | |
| 7746 | /* Thread Access Rights */ |
| 7747 | #define THREAD_TERMINATE 0x0001 |
| 7748 | #define THREAD_SUSPEND_RESUME 0x0002 |
| 7749 | #define THREAD_ALERT 0x0004 |
| 7750 | #define THREAD_GET_CONTEXT 0x0008 |
| 7751 | #define THREAD_SET_CONTEXT 0x0010 |
| 7752 | #define THREAD_SET_INFORMATION 0x0020 |
| 7753 | #define THREAD_SET_LIMITED_INFORMATION 0x0400 |
| 7754 | #define THREAD_QUERY_LIMITED_INFORMATION 0x0800 |
| 7755 | |
| 7756 | #define PROCESS_DUP_HANDLE (0x0040) |
| 7757 | |
| 7758 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 7759 | #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) |
| 7760 | #else |
| 7761 | #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) |
| 7762 | #endif |
| 7763 | |
| 7764 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 7765 | #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) |
| 7766 | #else |
| 7767 | #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) |
| 7768 | #endif |
| 7769 | |
| 7770 | #define LOW_PRIORITY 0 |
| 7771 | #define LOW_REALTIME_PRIORITY 16 |
| 7772 | #define HIGH_PRIORITY 31 |
| 7773 | #define MAXIMUM_PRIORITY 32 |
| 7774 | |
| 7775 | |
| 7776 | /****************************************************************************** |
| 7777 | * WMI Library Support Types * |
| 7778 | ******************************************************************************/ |
| 7779 | |
| 7780 | #ifdef RUN_WPP |
| 7781 | #include <evntrace.h> |
| 7782 | #include <stdarg.h> |
| 7783 | #endif |
| 7784 | |
| 7785 | #ifndef _TRACEHANDLE_DEFINED |
| 7786 | #define _TRACEHANDLE_DEFINED |
| 7787 | typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; |
| 7788 | #endif |
| 7789 | |
| 7790 | #ifndef TRACE_INFORMATION_CLASS_DEFINE |
| 7791 | |
| 7792 | typedef struct _ETW_TRACE_SESSION_SETTINGS { |
| 7793 | ULONG Version; |
| 7794 | ULONG BufferSize; |
| 7795 | ULONG MinimumBuffers; |
| 7796 | ULONG MaximumBuffers; |
| 7797 | ULONG LoggerMode; |
| 7798 | ULONG FlushTimer; |
| 7799 | ULONG FlushThreshold; |
| 7800 | ULONG ClockType; |
| 7801 | } ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS; |
| 7802 | |
| 7803 | typedef enum _TRACE_INFORMATION_CLASS { |
| 7804 | TraceIdClass, |
| 7805 | TraceHandleClass, |
| 7806 | TraceEnableFlagsClass, |
| 7807 | TraceEnableLevelClass, |
| 7808 | GlobalLoggerHandleClass, |
| 7809 | EventLoggerHandleClass, |
| 7810 | AllLoggerHandlesClass, |
| 7811 | TraceHandleByNameClass, |
| 7812 | LoggerEventsLostClass, |
| 7813 | TraceSessionSettingsClass, |
| 7814 | LoggerEventsLoggedClass, |
| 7815 | DiskIoNotifyRoutinesClass, |
| 7816 | TraceInformationClassReserved1, |
| 7817 | FltIoNotifyRoutinesClass, |
| 7818 | TraceInformationClassReserved2, |
| 7819 | WdfNotifyRoutinesClass, |
| 7820 | MaxTraceInformationClass |
| 7821 | } TRACE_INFORMATION_CLASS; |
| 7822 | |
| 7823 | #endif /* TRACE_INFORMATION_CLASS_DEFINE */ |
| 7824 | |
| 7825 | #ifndef _ETW_KM_ |
| 7826 | #define _ETW_KM_ |
| 7827 | #endif |
| 7828 | |
| 7829 | #include <evntprov.h> |
| 7830 | |
| 7831 | typedef VOID |
| 7832 | (NTAPI *PETWENABLECALLBACK)( |
| 7833 | IN LPCGUID SourceId, |
| 7834 | IN ULONG ControlCode, |
| 7835 | IN UCHAR Level, |
| 7836 | IN ULONGLONG MatchAnyKeyword, |
| 7837 | IN ULONGLONG MatchAllKeyword, |
| 7838 | IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL, |
| 7839 | IN OUT PVOID CallbackContext OPTIONAL); |
| 7840 | |
| 7841 | #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001 |
| 7842 | |
| 7843 | |
| 7844 | #if defined(_M_IX86) |
| 7845 | /** Kernel definitions for x86 **/ |
| 7846 | |
| 7847 | /* Interrupt request levels */ |
| 7848 | #define PASSIVE_LEVEL 0 |
| 7849 | #define LOW_LEVEL 0 |
| 7850 | #define APC_LEVEL 1 |
| 7851 | #define DISPATCH_LEVEL 2 |
| 7852 | #define CMCI_LEVEL 5 |
| 7853 | #define PROFILE_LEVEL 27 |
| 7854 | #define CLOCK1_LEVEL 28 |
| 7855 | #define CLOCK2_LEVEL 28 |
| 7856 | #define IPI_LEVEL 29 |
| 7857 | #define POWER_LEVEL 30 |
| 7858 | #define HIGH_LEVEL 31 |
| 7859 | #define CLOCK_LEVEL CLOCK2_LEVEL |
| 7860 | |
| 7861 | #define KIP0PCRADDRESS 0xffdff000 |
| 7862 | #define KI_USER_SHARED_DATA 0xffdf0000 |
| 7863 | #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) |
| 7864 | |
| 7865 | #define PAGE_SIZE 0x1000 |
| 7866 | #define PAGE_SHIFT 12L |
| 7867 | #define KeGetDcacheFillSize() 1L |
| 7868 | |
| 7869 | #define EFLAG_SIGN 0x8000 |
| 7870 | #define EFLAG_ZERO 0x4000 |
| 7871 | #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) |
| 7872 | |
| 7873 | #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) |
| 7874 | #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) |
| 7875 | #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) |
| 7876 | |
| 7877 | |
| 7878 | typedef struct _KFLOATING_SAVE { |
| 7879 | ULONG ControlWord; |
| 7880 | ULONG StatusWord; |
| 7881 | ULONG ErrorOffset; |
| 7882 | ULONG ErrorSelector; |
| 7883 | ULONG DataOffset; |
| 7884 | ULONG DataSelector; |
| 7885 | ULONG Cr0NpxState; |
| 7886 | ULONG Spare1; |
| 7887 | } KFLOATING_SAVE, *PKFLOATING_SAVE; |
| 7888 | |
| 7889 | extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; |
| 7890 | |
| 7891 | #define YieldProcessor _mm_pause |
| 7892 | |
| 7893 | FORCEINLINE |
| 7894 | VOID |
| 7895 | KeMemoryBarrier(VOID) |
| 7896 | { |
| 7897 | volatile LONG Barrier; |
| 7898 | #if defined(__GNUC__) |
| 7899 | __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); |
| 7900 | #elif defined(_MSC_VER) |
| 7901 | __asm xchg [Barrier], eax |
| 7902 | #endif |
| 7903 | } |
| 7904 | |
| 7905 | NTHALAPI |
| 7906 | KIRQL |
| 7907 | NTAPI |
| 7908 | KeGetCurrentIrql(VOID); |
| 7909 | |
| 7910 | NTHALAPI |
| 7911 | VOID |
| 7912 | FASTCALL |
| 7913 | KfLowerIrql( |
| 7914 | IN KIRQL NewIrql); |
| 7915 | #define KeLowerIrql(a) KfLowerIrql(a) |
| 7916 | |
| 7917 | NTHALAPI |
| 7918 | KIRQL |
| 7919 | FASTCALL |
| 7920 | KfRaiseIrql( |
| 7921 | IN KIRQL NewIrql); |
| 7922 | #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) |
| 7923 | |
| 7924 | NTHALAPI |
| 7925 | KIRQL |
| 7926 | NTAPI |
| 7927 | KeRaiseIrqlToDpcLevel(VOID); |
| 7928 | |
| 7929 | NTHALAPI |
| 7930 | KIRQL |
| 7931 | NTAPI |
| 7932 | KeRaiseIrqlToSynchLevel(VOID); |
| 7933 | |
| 7934 | NTHALAPI |
| 7935 | KIRQL |
| 7936 | FASTCALL |
| 7937 | KfAcquireSpinLock( |
| 7938 | IN OUT PKSPIN_LOCK SpinLock); |
| 7939 | #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) |
| 7940 | |
| 7941 | NTHALAPI |
| 7942 | VOID |
| 7943 | FASTCALL |
| 7944 | KfReleaseSpinLock( |
| 7945 | IN OUT PKSPIN_LOCK SpinLock, |
| 7946 | IN KIRQL NewIrql); |
| 7947 | #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) |
| 7948 | |
| 7949 | NTKERNELAPI |
| 7950 | VOID |
| 7951 | FASTCALL |
| 7952 | KefAcquireSpinLockAtDpcLevel( |
| 7953 | IN OUT PKSPIN_LOCK SpinLock); |
| 7954 | #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) |
| 7955 | |
| 7956 | NTKERNELAPI |
| 7957 | VOID |
| 7958 | FASTCALL |
| 7959 | KefReleaseSpinLockFromDpcLevel( |
| 7960 | IN OUT PKSPIN_LOCK SpinLock); |
| 7961 | #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) |
| 7962 | |
| 7963 | NTSYSAPI |
| 7964 | PKTHREAD |
| 7965 | NTAPI |
| 7966 | KeGetCurrentThread(VOID); |
| 7967 | |
| 7968 | NTKERNELAPI |
| 7969 | NTSTATUS |
| 7970 | NTAPI |
| 7971 | KeSaveFloatingPointState( |
| 7972 | OUT PKFLOATING_SAVE FloatSave); |
| 7973 | |
| 7974 | NTKERNELAPI |
| 7975 | NTSTATUS |
| 7976 | NTAPI |
| 7977 | KeRestoreFloatingPointState( |
| 7978 | IN PKFLOATING_SAVE FloatSave); |
| 7979 | |
| 7980 | /* VOID |
| 7981 | * KeFlushIoBuffers( |
| 7982 | * IN PMDL Mdl, |
| 7983 | * IN BOOLEAN ReadOperation, |
| 7984 | * IN BOOLEAN DmaOperation) |
| 7985 | */ |
| 7986 | #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) |
| 7987 | |
| 7988 | /* x86 and x64 performs a 0x2C interrupt */ |
| 7989 | #define DbgRaiseAssertionFailure __int2c |
| 7990 | |
| 7991 | FORCEINLINE |
| 7992 | VOID |
| 7993 | _KeQueryTickCount( |
| 7994 | OUT PLARGE_INTEGER CurrentCount) |
| 7995 | { |
| 7996 | for (;;) { |
| 7997 | #ifdef NONAMELESSUNION |
| 7998 | CurrentCount->s.HighPart = KeTickCount.High1Time; |
| 7999 | CurrentCount->s.LowPart = KeTickCount.LowPart; |
| 8000 | if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; |
| 8001 | #else |
| 8002 | CurrentCount->HighPart = KeTickCount.High1Time; |
| 8003 | CurrentCount->LowPart = KeTickCount.LowPart; |
| 8004 | if (CurrentCount->HighPart == KeTickCount.High2Time) break; |
| 8005 | #endif |
| 8006 | YieldProcessor(); |
| 8007 | } |
| 8008 | } |
| 8009 | #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) |
| 8010 | |
| 8011 | |
| 8012 | #elif defined(_M_AMD64) |
| 8013 | /** Kernel definitions for AMD64 **/ |
| 8014 | |
| 8015 | /* Interrupt request levels */ |
| 8016 | #define PASSIVE_LEVEL 0 |
| 8017 | #define LOW_LEVEL 0 |
| 8018 | #define APC_LEVEL 1 |
| 8019 | #define DISPATCH_LEVEL 2 |
| 8020 | #define CMCI_LEVEL 5 |
| 8021 | #define CLOCK_LEVEL 13 |
| 8022 | #define IPI_LEVEL 14 |
| 8023 | #define DRS_LEVEL 14 |
| 8024 | #define POWER_LEVEL 14 |
| 8025 | #define PROFILE_LEVEL 15 |
| 8026 | #define HIGH_LEVEL 15 |
| 8027 | |
| 8028 | #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL |
| 8029 | #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) |
| 8030 | #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8) |
| 8031 | #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14) |
| 8032 | #define SharedTickCount (KI_USER_SHARED_DATA + 0x320) |
| 8033 | |
| 8034 | #define PAGE_SIZE 0x1000 |
| 8035 | #define PAGE_SHIFT 12L |
| 8036 | |
| 8037 | #define EFLAG_SIGN 0x8000 |
| 8038 | #define EFLAG_ZERO 0x4000 |
| 8039 | #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) |
| 8040 | |
| 8041 | typedef struct _KFLOATING_SAVE { |
| 8042 | ULONG Dummy; |
| 8043 | } KFLOATING_SAVE, *PKFLOATING_SAVE; |
| 8044 | |
| 8045 | typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; |
| 8046 | |
| 8047 | #define KeQueryInterruptTime() \ |
| 8048 | (*(volatile ULONG64*)SharedInterruptTime) |
| 8049 | |
| 8050 | #define KeQuerySystemTime(CurrentCount) \ |
| 8051 | *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime |
| 8052 | |
| 8053 | #define KeQueryTickCount(CurrentCount) \ |
| 8054 | *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount |
| 8055 | |
| 8056 | #define KeGetDcacheFillSize() 1L |
| 8057 | |
| 8058 | #define YieldProcessor _mm_pause |
| 8059 | |
| 8060 | FORCEINLINE |
| 8061 | KIRQL |
| 8062 | KeGetCurrentIrql(VOID) |
| 8063 | { |
| 8064 | return (KIRQL)__readcr8(); |
| 8065 | } |
| 8066 | |
| 8067 | FORCEINLINE |
| 8068 | VOID |
| 8069 | KeLowerIrql(IN KIRQL NewIrql) |
| 8070 | { |
| 8071 | //ASSERT(KeGetCurrentIrql() >= NewIrql); |
| 8072 | __writecr8(NewIrql); |
| 8073 | } |
| 8074 | |
| 8075 | FORCEINLINE |
| 8076 | KIRQL |
| 8077 | KfRaiseIrql(IN KIRQL NewIrql) |
| 8078 | { |
| 8079 | KIRQL OldIrql; |
| 8080 | |
| 8081 | OldIrql = (KIRQL)__readcr8(); |
| 8082 | //ASSERT(OldIrql <= NewIrql); |
| 8083 | __writecr8(NewIrql); |
| 8084 | return OldIrql; |
| 8085 | } |
| 8086 | #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) |
| 8087 | |
| 8088 | FORCEINLINE |
| 8089 | KIRQL |
| 8090 | KeRaiseIrqlToDpcLevel(VOID) |
| 8091 | { |
| 8092 | return KfRaiseIrql(DISPATCH_LEVEL); |
| 8093 | } |
| 8094 | |
| 8095 | FORCEINLINE |
| 8096 | KIRQL |
| 8097 | KeRaiseIrqlToSynchLevel(VOID) |
| 8098 | { |
| 8099 | return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 |
| 8100 | } |
| 8101 | |
| 8102 | FORCEINLINE |
| 8103 | PKTHREAD |
| 8104 | KeGetCurrentThread(VOID) |
| 8105 | { |
| 8106 | return (struct _KTHREAD *)__readgsqword(0x188); |
| 8107 | } |
| 8108 | |
| 8109 | /* VOID |
| 8110 | * KeFlushIoBuffers( |
| 8111 | * IN PMDL Mdl, |
| 8112 | * IN BOOLEAN ReadOperation, |
| 8113 | * IN BOOLEAN DmaOperation) |
| 8114 | */ |
| 8115 | #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) |
| 8116 | |
| 8117 | /* x86 and x64 performs a 0x2C interrupt */ |
| 8118 | #define DbgRaiseAssertionFailure __int2c |
| 8119 | |
| 8120 | #elif defined(_M_IA64) |
| 8121 | /** Kernel definitions for IA64 **/ |
| 8122 | |
| 8123 | /* Interrupt request levels */ |
| 8124 | #define PASSIVE_LEVEL 0 |
| 8125 | #define LOW_LEVEL 0 |
| 8126 | #define APC_LEVEL 1 |
| 8127 | #define DISPATCH_LEVEL 2 |
| 8128 | #define CMC_LEVEL 3 |
| 8129 | #define DEVICE_LEVEL_BASE 4 |
| 8130 | #define PC_LEVEL 12 |
| 8131 | #define IPI_LEVEL 14 |
| 8132 | #define DRS_LEVEL 14 |
| 8133 | #define CLOCK_LEVEL 13 |
| 8134 | #define POWER_LEVEL 15 |
| 8135 | #define PROFILE_LEVEL 15 |
| 8136 | #define HIGH_LEVEL 15 |
| 8137 | |
| 8138 | #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) |
| 8139 | extern volatile LARGE_INTEGER KeTickCount; |
| 8140 | |
| 8141 | #define PAUSE_PROCESSOR __yield(); |
| 8142 | |
| 8143 | FORCEINLINE |
| 8144 | VOID |
| 8145 | KeFlushWriteBuffer(VOID) |
| 8146 | { |
| 8147 | __mf (); |
| 8148 | return; |
| 8149 | } |
| 8150 | |
| 8151 | NTSYSAPI |
| 8152 | PKTHREAD |
| 8153 | NTAPI |
| 8154 | KeGetCurrentThread(VOID); |
| 8155 | |
| 8156 | |
| 8157 | #elif defined(_M_PPC) |
| 8158 | |
| 8159 | /* Interrupt request levels */ |
| 8160 | #define PASSIVE_LEVEL 0 |
| 8161 | #define LOW_LEVEL 0 |
| 8162 | #define APC_LEVEL 1 |
| 8163 | #define DISPATCH_LEVEL 2 |
| 8164 | #define PROFILE_LEVEL 27 |
| 8165 | #define CLOCK1_LEVEL 28 |
| 8166 | #define CLOCK2_LEVEL 28 |
| 8167 | #define IPI_LEVEL 29 |
| 8168 | #define POWER_LEVEL 30 |
| 8169 | #define HIGH_LEVEL 31 |
| 8170 | |
| 8171 | // |
| 8172 | // Used to contain PFNs and PFN counts |
| 8173 | // |
| 8174 | typedef ULONG PFN_COUNT; |
| 8175 | typedef ULONG PFN_NUMBER, *PPFN_NUMBER; |
| 8176 | typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; |
| 8177 | |
| 8178 | |
| 8179 | typedef struct _KFLOATING_SAVE { |
| 8180 | ULONG Dummy; |
| 8181 | } KFLOATING_SAVE, *PKFLOATING_SAVE; |
| 8182 | |
| 8183 | typedef struct _KPCR_TIB { |
| 8184 | PVOID ExceptionList; /* 00 */ |
| 8185 | PVOID StackBase; /* 04 */ |
| 8186 | PVOID StackLimit; /* 08 */ |
| 8187 | PVOID SubSystemTib; /* 0C */ |
| 8188 | _ANONYMOUS_UNION union { |
| 8189 | PVOID FiberData; /* 10 */ |
| 8190 | ULONG Version; /* 10 */ |
| 8191 | } DUMMYUNIONNAME; |
| 8192 | PVOID ArbitraryUserPointer; /* 14 */ |
| 8193 | struct _KPCR_TIB *Self; /* 18 */ |
| 8194 | } KPCR_TIB, *PKPCR_TIB; /* 1C */ |
| 8195 | |
| 8196 | #define PCR_MINOR_VERSION 1 |
| 8197 | #define PCR_MAJOR_VERSION 1 |
| 8198 | |
| 8199 | typedef struct _KPCR { |
| 8200 | KPCR_TIB Tib; /* 00 */ |
| 8201 | struct _KPCR *Self; /* 1C */ |
| 8202 | struct _KPRCB *Prcb; /* 20 */ |
| 8203 | KIRQL Irql; /* 24 */ |
| 8204 | ULONG IRR; /* 28 */ |
| 8205 | ULONG IrrActive; /* 2C */ |
| 8206 | ULONG IDR; /* 30 */ |
| 8207 | PVOID KdVersionBlock; /* 34 */ |
| 8208 | PUSHORT IDT; /* 38 */ |
| 8209 | PUSHORT GDT; /* 3C */ |
| 8210 | struct _KTSS *TSS; /* 40 */ |
| 8211 | USHORT MajorVersion; /* 44 */ |
| 8212 | USHORT MinorVersion; /* 46 */ |
| 8213 | KAFFINITY SetMember; /* 48 */ |
| 8214 | ULONG StallScaleFactor; /* 4C */ |
| 8215 | UCHAR SpareUnused; /* 50 */ |
| 8216 | UCHAR Number; /* 51 */ |
| 8217 | } KPCR, *PKPCR; /* 54 */ |
| 8218 | |
| 8219 | #define KeGetPcr() PCR |
| 8220 | |
| 8221 | #define YieldProcessor() __asm__ __volatile__("nop"); |
| 8222 | |
| 8223 | FORCEINLINE |
| 8224 | ULONG |
| 8225 | NTAPI |
| 8226 | KeGetCurrentProcessorNumber(VOID) |
| 8227 | { |
| 8228 | ULONG Number; |
| 8229 | __asm__ __volatile__ ( |
| 8230 | "lwz %0, %c1(12)\n" |
| 8231 | : "=r" (Number) |
| 8232 | : "i" (FIELD_OFFSET(KPCR, Number)) |
| 8233 | ); |
| 8234 | return Number; |
| 8235 | } |
| 8236 | |
| 8237 | NTHALAPI |
| 8238 | VOID |
| 8239 | FASTCALL |
| 8240 | KfLowerIrql( |
| 8241 | IN KIRQL NewIrql); |
| 8242 | #define KeLowerIrql(a) KfLowerIrql(a) |
| 8243 | |
| 8244 | NTHALAPI |
| 8245 | KIRQL |
| 8246 | FASTCALL |
| 8247 | KfRaiseIrql( |
| 8248 | IN KIRQL NewIrql); |
| 8249 | #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) |
| 8250 | |
| 8251 | NTHALAPI |
| 8252 | KIRQL |
| 8253 | NTAPI |
| 8254 | KeRaiseIrqlToDpcLevel(VOID); |
| 8255 | |
| 8256 | NTHALAPI |
| 8257 | KIRQL |
| 8258 | NTAPI |
| 8259 | KeRaiseIrqlToSynchLevel(VOID); |
| 8260 | |
| 8261 | |
| 8262 | |
| 8263 | #elif defined(_M_MIPS) |
| 8264 | #error MIPS Headers are totally incorrect |
| 8265 | |
| 8266 | // |
| 8267 | // Used to contain PFNs and PFN counts |
| 8268 | // |
| 8269 | typedef ULONG PFN_COUNT; |
| 8270 | typedef ULONG PFN_NUMBER, *PPFN_NUMBER; |
| 8271 | typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; |
| 8272 | |
| 8273 | #define PASSIVE_LEVEL 0 |
| 8274 | #define APC_LEVEL 1 |
| 8275 | #define DISPATCH_LEVEL 2 |
| 8276 | #define PROFILE_LEVEL 27 |
| 8277 | #define IPI_LEVEL 29 |
| 8278 | #define HIGH_LEVEL 31 |
| 8279 | |
| 8280 | typedef struct _KPCR { |
| 8281 | struct _KPRCB *Prcb; /* 20 */ |
| 8282 | KIRQL Irql; /* 24 */ |
| 8283 | ULONG IRR; /* 28 */ |
| 8284 | ULONG IDR; /* 30 */ |
| 8285 | } KPCR, *PKPCR; |
| 8286 | |
| 8287 | #define KeGetPcr() PCR |
| 8288 | |
| 8289 | typedef struct _KFLOATING_SAVE { |
| 8290 | } KFLOATING_SAVE, *PKFLOATING_SAVE; |
| 8291 | |
| 8292 | static __inline |
| 8293 | ULONG |
| 8294 | NTAPI |
| 8295 | KeGetCurrentProcessorNumber(VOID) |
| 8296 | { |
| 8297 | return 0; |
| 8298 | } |
| 8299 | |
| 8300 | #define YieldProcessor() __asm__ __volatile__("nop"); |
| 8301 | |
| 8302 | #define KeLowerIrql(a) KfLowerIrql(a) |
| 8303 | #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) |
| 8304 | |
| 8305 | NTKERNELAPI |
| 8306 | VOID |
| 8307 | NTAPI |
| 8308 | KfLowerIrql( |
| 8309 | IN KIRQL NewIrql); |
| 8310 | |
| 8311 | NTKERNELAPI |
| 8312 | KIRQL |
| 8313 | NTAPI |
| 8314 | KfRaiseIrql( |
| 8315 | IN KIRQL NewIrql); |
| 8316 | |
| 8317 | NTKERNELAPI |
| 8318 | KIRQL |
| 8319 | NTAPI |
| 8320 | KeRaiseIrqlToDpcLevel(VOID); |
| 8321 | |
| 8322 | NTKERNELAPI |
| 8323 | KIRQL |
| 8324 | NTAPI |
| 8325 | KeRaiseIrqlToSynchLevel(VOID); |
| 8326 | |
| 8327 | |
| 8328 | #elif defined(_M_ARM) |
| 8329 | #include <armddk.h> |
| 8330 | #else |
| 8331 | #error Unknown Architecture |
| 8332 | #endif |
| 8333 | |
| 8334 | |
| 8335 | /****************************************************************************** |
| 8336 | * Runtime Library Functions * |
| 8337 | ******************************************************************************/ |
| 8338 | |
| 8339 | #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) |
| 8340 | |
| 8341 | #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x } |
| 8342 | |
| 8343 | FORCEINLINE |
| 8344 | VOID |
| 8345 | InitializeListHead( |
| 8346 | OUT PLIST_ENTRY ListHead) |
| 8347 | { |
| 8348 | ListHead->Flink = ListHead->Blink = ListHead; |
| 8349 | } |
| 8350 | |
| 8351 | FORCEINLINE |
| 8352 | BOOLEAN |
| 8353 | IsListEmpty( |
| 8354 | IN CONST LIST_ENTRY * ListHead) |
| 8355 | { |
| 8356 | return (BOOLEAN)(ListHead->Flink == ListHead); |
| 8357 | } |
| 8358 | |
| 8359 | FORCEINLINE |
| 8360 | BOOLEAN |
| 8361 | RemoveEntryList( |
| 8362 | IN PLIST_ENTRY Entry) |
| 8363 | { |
| 8364 | PLIST_ENTRY OldFlink; |
| 8365 | PLIST_ENTRY OldBlink; |
| 8366 | |
| 8367 | OldFlink = Entry->Flink; |
| 8368 | OldBlink = Entry->Blink; |
| 8369 | OldFlink->Blink = OldBlink; |
| 8370 | OldBlink->Flink = OldFlink; |
| 8371 | return (BOOLEAN)(OldFlink == OldBlink); |
| 8372 | } |
| 8373 | |
| 8374 | FORCEINLINE |
| 8375 | PLIST_ENTRY |
| 8376 | RemoveHeadList( |
| 8377 | IN OUT PLIST_ENTRY ListHead) |
| 8378 | { |
| 8379 | PLIST_ENTRY Flink; |
| 8380 | PLIST_ENTRY Entry; |
| 8381 | |
| 8382 | Entry = ListHead->Flink; |
| 8383 | Flink = Entry->Flink; |
| 8384 | ListHead->Flink = Flink; |
| 8385 | Flink->Blink = ListHead; |
| 8386 | return Entry; |
| 8387 | } |
| 8388 | |
| 8389 | FORCEINLINE |
| 8390 | PLIST_ENTRY |
| 8391 | RemoveTailList( |
| 8392 | IN OUT PLIST_ENTRY ListHead) |
| 8393 | { |
| 8394 | PLIST_ENTRY Blink; |
| 8395 | PLIST_ENTRY Entry; |
| 8396 | |
| 8397 | Entry = ListHead->Blink; |
| 8398 | Blink = Entry->Blink; |
| 8399 | ListHead->Blink = Blink; |
| 8400 | Blink->Flink = ListHead; |
| 8401 | return Entry; |
| 8402 | } |
| 8403 | |
| 8404 | FORCEINLINE |
| 8405 | VOID |
| 8406 | InsertTailList( |
| 8407 | IN OUT PLIST_ENTRY ListHead, |
| 8408 | IN OUT PLIST_ENTRY Entry) |
| 8409 | { |
| 8410 | PLIST_ENTRY OldBlink; |
| 8411 | OldBlink = ListHead->Blink; |
| 8412 | Entry->Flink = ListHead; |
| 8413 | Entry->Blink = OldBlink; |
| 8414 | OldBlink->Flink = Entry; |
| 8415 | ListHead->Blink = Entry; |
| 8416 | } |
| 8417 | |
| 8418 | FORCEINLINE |
| 8419 | VOID |
| 8420 | InsertHeadList( |
| 8421 | IN OUT PLIST_ENTRY ListHead, |
| 8422 | IN OUT PLIST_ENTRY Entry) |
| 8423 | { |
| 8424 | PLIST_ENTRY OldFlink; |
| 8425 | OldFlink = ListHead->Flink; |
| 8426 | Entry->Flink = OldFlink; |
| 8427 | Entry->Blink = ListHead; |
| 8428 | OldFlink->Blink = Entry; |
| 8429 | ListHead->Flink = Entry; |
| 8430 | } |
| 8431 | |
| 8432 | FORCEINLINE |
| 8433 | VOID |
| 8434 | AppendTailList( |
| 8435 | IN OUT PLIST_ENTRY ListHead, |
| 8436 | IN OUT PLIST_ENTRY ListToAppend) |
| 8437 | { |
| 8438 | PLIST_ENTRY ListEnd = ListHead->Blink; |
| 8439 | |
| 8440 | ListHead->Blink->Flink = ListToAppend; |
| 8441 | ListHead->Blink = ListToAppend->Blink; |
| 8442 | ListToAppend->Blink->Flink = ListHead; |
| 8443 | ListToAppend->Blink = ListEnd; |
| 8444 | } |
| 8445 | |
| 8446 | FORCEINLINE |
| 8447 | PSINGLE_LIST_ENTRY |
| 8448 | PopEntryList( |
| 8449 | IN OUT PSINGLE_LIST_ENTRY ListHead) |
| 8450 | { |
| 8451 | PSINGLE_LIST_ENTRY FirstEntry; |
| 8452 | FirstEntry = ListHead->Next; |
| 8453 | if (FirstEntry != NULL) { |
| 8454 | ListHead->Next = FirstEntry->Next; |
| 8455 | } |
| 8456 | return FirstEntry; |
| 8457 | } |
| 8458 | |
| 8459 | FORCEINLINE |
| 8460 | VOID |
| 8461 | PushEntryList( |
| 8462 | IN OUT PSINGLE_LIST_ENTRY ListHead, |
| 8463 | IN OUT PSINGLE_LIST_ENTRY Entry) |
| 8464 | { |
| 8465 | Entry->Next = ListHead->Next; |
| 8466 | ListHead->Next = Entry; |
| 8467 | } |
| 8468 | |
| 8469 | #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ |
| 8470 | |
| 8471 | NTSYSAPI |
| 8472 | VOID |
| 8473 | NTAPI |
| 8474 | RtlAssert( |
| 8475 | IN PVOID FailedAssertion, |
| 8476 | IN PVOID FileName, |
| 8477 | IN ULONG LineNumber, |
| 8478 | IN PSTR Message); |
| 8479 | |
| 8480 | /* VOID |
| 8481 | * RtlCopyMemory( |
| 8482 | * IN VOID UNALIGNED *Destination, |
| 8483 | * IN CONST VOID UNALIGNED *Source, |
| 8484 | * IN SIZE_T Length) |
| 8485 | */ |
| 8486 | #define RtlCopyMemory(Destination, Source, Length) \ |
| 8487 | memcpy(Destination, Source, Length) |
| 8488 | |
| 8489 | #define RtlCopyBytes RtlCopyMemory |
| 8490 | |
| 8491 | #if defined(_M_AMD64) |
| 8492 | NTSYSAPI |
| 8493 | VOID |
| 8494 | NTAPI |
| 8495 | RtlCopyMemoryNonTemporal( |
| 8496 | VOID UNALIGNED *Destination, |
| 8497 | CONST VOID UNALIGNED *Source, |
| 8498 | SIZE_T Length); |
| 8499 | #else |
| 8500 | #define RtlCopyMemoryNonTemporal RtlCopyMemory |
| 8501 | #endif |
| 8502 | |
| 8503 | /* BOOLEAN |
| 8504 | * RtlEqualLuid( |
| 8505 | * IN PLUID Luid1, |
| 8506 | * IN PLUID Luid2) |
| 8507 | */ |
| 8508 | #define RtlEqualLuid(Luid1, Luid2) \ |
| 8509 | (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart)) |
| 8510 | |
| 8511 | /* ULONG |
| 8512 | * RtlEqualMemory( |
| 8513 | * IN VOID UNALIGNED *Destination, |
| 8514 | * IN CONST VOID UNALIGNED *Source, |
| 8515 | * IN SIZE_T Length) |
| 8516 | */ |
| 8517 | #define RtlEqualMemory(Destination, Source, Length) \ |
| 8518 | (!memcmp(Destination, Source, Length)) |
| 8519 | |
| 8520 | /* VOID |
| 8521 | * RtlFillMemory( |
| 8522 | * IN VOID UNALIGNED *Destination, |
| 8523 | * IN SIZE_T Length, |
| 8524 | * IN UCHAR Fill) |
| 8525 | */ |
| 8526 | #define RtlFillMemory(Destination, Length, Fill) \ |
| 8527 | memset(Destination, Fill, Length) |
| 8528 | |
| 8529 | #define RtlFillBytes RtlFillMemory |
| 8530 | |
| 8531 | NTSYSAPI |
| 8532 | VOID |
| 8533 | NTAPI |
| 8534 | RtlFreeUnicodeString( |
| 8535 | IN OUT PUNICODE_STRING UnicodeString); |
| 8536 | |
| 8537 | NTSYSAPI |
| 8538 | NTSTATUS |
| 8539 | NTAPI |
| 8540 | RtlGUIDFromString( |
| 8541 | IN PUNICODE_STRING GuidString, |
| 8542 | OUT GUID *Guid); |
| 8543 | |
| 8544 | NTSYSAPI |
| 8545 | VOID |
| 8546 | NTAPI |
| 8547 | RtlInitUnicodeString( |
| 8548 | IN OUT PUNICODE_STRING DestinationString, |
| 8549 | IN PCWSTR SourceString OPTIONAL); |
| 8550 | |
| 8551 | /* VOID |
| 8552 | * RtlMoveMemory( |
| 8553 | * IN VOID UNALIGNED *Destination, |
| 8554 | * IN CONST VOID UNALIGNED *Source, |
| 8555 | * IN SIZE_T Length) |
| 8556 | */ |
| 8557 | #define RtlMoveMemory(Destination, Source, Length) \ |
| 8558 | memmove(Destination, Source, Length) |
| 8559 | |
| 8560 | NTSYSAPI |
| 8561 | NTSTATUS |
| 8562 | NTAPI |
| 8563 | RtlStringFromGUID( |
| 8564 | IN REFGUID Guid, |
| 8565 | OUT PUNICODE_STRING GuidString); |
| 8566 | |
| 8567 | /* VOID |
| 8568 | * RtlZeroMemory( |
| 8569 | * IN VOID UNALIGNED *Destination, |
| 8570 | * IN SIZE_T Length) |
| 8571 | */ |
| 8572 | #define RtlZeroMemory(Destination, Length) \ |
| 8573 | memset(Destination, 0, Length) |
| 8574 | |
| 8575 | #define RtlZeroBytes RtlZeroMemory |
| 8576 | |
| 8577 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 8578 | |
| 8579 | NTSYSAPI |
| 8580 | BOOLEAN |
| 8581 | NTAPI |
| 8582 | RtlAreBitsClear( |
| 8583 | IN PRTL_BITMAP BitMapHeader, |
| 8584 | IN ULONG StartingIndex, |
| 8585 | IN ULONG Length); |
| 8586 | |
| 8587 | NTSYSAPI |
| 8588 | BOOLEAN |
| 8589 | NTAPI |
| 8590 | RtlAreBitsSet( |
| 8591 | IN PRTL_BITMAP BitMapHeader, |
| 8592 | IN ULONG StartingIndex, |
| 8593 | IN ULONG Length); |
| 8594 | |
| 8595 | NTSYSAPI |
| 8596 | NTSTATUS |
| 8597 | NTAPI |
| 8598 | RtlAnsiStringToUnicodeString( |
| 8599 | IN OUT PUNICODE_STRING DestinationString, |
| 8600 | IN PANSI_STRING SourceString, |
| 8601 | IN BOOLEAN AllocateDestinationString); |
| 8602 | |
| 8603 | NTSYSAPI |
| 8604 | ULONG |
| 8605 | NTAPI |
| 8606 | RtlxAnsiStringToUnicodeSize( |
| 8607 | IN PCANSI_STRING AnsiString); |
| 8608 | |
| 8609 | #define RtlAnsiStringToUnicodeSize(String) ( \ |
| 8610 | NLS_MB_CODE_PAGE_TAG ? \ |
| 8611 | RtlxAnsiStringToUnicodeSize(String) : \ |
| 8612 | ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ |
| 8613 | ) |
| 8614 | |
| 8615 | NTSYSAPI |
| 8616 | NTSTATUS |
| 8617 | NTAPI |
| 8618 | RtlAppendUnicodeStringToString( |
| 8619 | IN OUT PUNICODE_STRING Destination, |
| 8620 | IN PCUNICODE_STRING Source); |
| 8621 | |
| 8622 | NTSYSAPI |
| 8623 | NTSTATUS |
| 8624 | NTAPI |
| 8625 | RtlAppendUnicodeToString( |
| 8626 | IN OUT PUNICODE_STRING Destination, |
| 8627 | IN PCWSTR Source); |
| 8628 | |
| 8629 | NTSYSAPI |
| 8630 | NTSTATUS |
| 8631 | NTAPI |
| 8632 | RtlCheckRegistryKey( |
| 8633 | IN ULONG RelativeTo, |
| 8634 | IN PWSTR Path); |
| 8635 | |
| 8636 | NTSYSAPI |
| 8637 | VOID |
| 8638 | NTAPI |
| 8639 | RtlClearAllBits( |
| 8640 | IN PRTL_BITMAP BitMapHeader); |
| 8641 | |
| 8642 | NTSYSAPI |
| 8643 | VOID |
| 8644 | NTAPI |
| 8645 | RtlClearBits( |
| 8646 | IN PRTL_BITMAP BitMapHeader, |
| 8647 | IN ULONG StartingIndex, |
| 8648 | IN ULONG NumberToClear); |
| 8649 | |
| 8650 | NTSYSAPI |
| 8651 | SIZE_T |
| 8652 | NTAPI |
| 8653 | RtlCompareMemory( |
| 8654 | IN CONST VOID *Source1, |
| 8655 | IN CONST VOID *Source2, |
| 8656 | IN SIZE_T Length); |
| 8657 | |
| 8658 | NTSYSAPI |
| 8659 | LONG |
| 8660 | NTAPI |
| 8661 | RtlCompareUnicodeString( |
| 8662 | IN PCUNICODE_STRING String1, |
| 8663 | IN PCUNICODE_STRING String2, |
| 8664 | IN BOOLEAN CaseInSensitive); |
| 8665 | |
| 8666 | NTSYSAPI |
| 8667 | LONG |
| 8668 | NTAPI |
| 8669 | RtlCompareUnicodeStrings( |
| 8670 | IN PCWCH String1, |
| 8671 | IN SIZE_T String1Length, |
| 8672 | IN PCWCH String2, |
| 8673 | IN SIZE_T String2Length, |
| 8674 | IN BOOLEAN CaseInSensitive); |
| 8675 | |
| 8676 | NTSYSAPI |
| 8677 | VOID |
| 8678 | NTAPI |
| 8679 | RtlCopyUnicodeString( |
| 8680 | IN OUT PUNICODE_STRING DestinationString, |
| 8681 | IN PCUNICODE_STRING SourceString OPTIONAL); |
| 8682 | |
| 8683 | NTSYSAPI |
| 8684 | NTSTATUS |
| 8685 | NTAPI |
| 8686 | RtlCreateRegistryKey( |
| 8687 | IN ULONG RelativeTo, |
| 8688 | IN PWSTR Path); |
| 8689 | |
| 8690 | NTSYSAPI |
| 8691 | NTSTATUS |
| 8692 | NTAPI |
| 8693 | RtlCreateSecurityDescriptor( |
| 8694 | IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, |
| 8695 | IN ULONG Revision); |
| 8696 | |
| 8697 | NTSYSAPI |
| 8698 | NTSTATUS |
| 8699 | NTAPI |
| 8700 | RtlDeleteRegistryValue( |
| 8701 | IN ULONG RelativeTo, |
| 8702 | IN PCWSTR Path, |
| 8703 | IN PCWSTR ValueName); |
| 8704 | |
| 8705 | NTSYSAPI |
| 8706 | BOOLEAN |
| 8707 | NTAPI |
| 8708 | RtlEqualUnicodeString( |
| 8709 | IN CONST UNICODE_STRING *String1, |
| 8710 | IN CONST UNICODE_STRING *String2, |
| 8711 | IN BOOLEAN CaseInSensitive); |
| 8712 | |
| 8713 | #if !defined(_AMD64_) && !defined(_IA64_) |
| 8714 | NTSYSAPI |
| 8715 | LARGE_INTEGER |
| 8716 | NTAPI |
| 8717 | RtlExtendedIntegerMultiply( |
| 8718 | IN LARGE_INTEGER Multiplicand, |
| 8719 | IN LONG Multiplier); |
| 8720 | |
| 8721 | NTSYSAPI |
| 8722 | LARGE_INTEGER |
| 8723 | NTAPI |
| 8724 | RtlExtendedLargeIntegerDivide( |
| 8725 | IN LARGE_INTEGER Dividend, |
| 8726 | IN ULONG Divisor, |
| 8727 | OUT PULONG Remainder OPTIONAL); |
| 8728 | #endif |
| 8729 | |
| 8730 | #if defined(_X86_) || defined(_IA64_) |
| 8731 | NTSYSAPI |
| 8732 | LARGE_INTEGER |
| 8733 | NTAPI |
| 8734 | RtlExtendedMagicDivide( |
| 8735 | IN LARGE_INTEGER Dividend, |
| 8736 | IN LARGE_INTEGER MagicDivisor, |
| 8737 | IN CCHAR ShiftCount); |
| 8738 | #endif |
| 8739 | |
| 8740 | NTSYSAPI |
| 8741 | VOID |
| 8742 | NTAPI |
| 8743 | RtlFreeAnsiString( |
| 8744 | IN PANSI_STRING AnsiString); |
| 8745 | |
| 8746 | NTSYSAPI |
| 8747 | ULONG |
| 8748 | NTAPI |
| 8749 | RtlFindClearBits( |
| 8750 | IN PRTL_BITMAP BitMapHeader, |
| 8751 | IN ULONG NumberToFind, |
| 8752 | IN ULONG HintIndex); |
| 8753 | |
| 8754 | NTSYSAPI |
| 8755 | ULONG |
| 8756 | NTAPI |
| 8757 | RtlFindClearBitsAndSet( |
| 8758 | IN PRTL_BITMAP BitMapHeader, |
| 8759 | IN ULONG NumberToFind, |
| 8760 | IN ULONG HintIndex); |
| 8761 | |
| 8762 | NTSYSAPI |
| 8763 | ULONG |
| 8764 | NTAPI |
| 8765 | RtlFindFirstRunClear( |
| 8766 | IN PRTL_BITMAP BitMapHeader, |
| 8767 | OUT PULONG StartingIndex); |
| 8768 | |
| 8769 | NTSYSAPI |
| 8770 | ULONG |
| 8771 | NTAPI |
| 8772 | RtlFindClearRuns( |
| 8773 | IN PRTL_BITMAP BitMapHeader, |
| 8774 | OUT PRTL_BITMAP_RUN RunArray, |
| 8775 | IN ULONG SizeOfRunArray, |
| 8776 | IN BOOLEAN LocateLongestRuns); |
| 8777 | |
| 8778 | NTSYSAPI |
| 8779 | ULONG |
| 8780 | NTAPI |
| 8781 | RtlFindLastBackwardRunClear( |
| 8782 | IN PRTL_BITMAP BitMapHeader, |
| 8783 | IN ULONG FromIndex, |
| 8784 | OUT PULONG StartingRunIndex); |
| 8785 | |
| 8786 | NTSYSAPI |
| 8787 | CCHAR |
| 8788 | NTAPI |
| 8789 | RtlFindLeastSignificantBit( |
| 8790 | IN ULONGLONG Set); |
| 8791 | |
| 8792 | NTSYSAPI |
| 8793 | ULONG |
| 8794 | NTAPI |
| 8795 | RtlFindLongestRunClear( |
| 8796 | IN PRTL_BITMAP BitMapHeader, |
| 8797 | OUT PULONG StartingIndex); |
| 8798 | |
| 8799 | NTSYSAPI |
| 8800 | CCHAR |
| 8801 | NTAPI |
| 8802 | RtlFindMostSignificantBit( |
| 8803 | IN ULONGLONG Set); |
| 8804 | |
| 8805 | NTSYSAPI |
| 8806 | ULONG |
| 8807 | NTAPI |
| 8808 | RtlFindNextForwardRunClear( |
| 8809 | IN PRTL_BITMAP BitMapHeader, |
| 8810 | IN ULONG FromIndex, |
| 8811 | OUT PULONG StartingRunIndex); |
| 8812 | |
| 8813 | NTSYSAPI |
| 8814 | ULONG |
| 8815 | NTAPI |
| 8816 | RtlFindSetBits( |
| 8817 | IN PRTL_BITMAP BitMapHeader, |
| 8818 | IN ULONG NumberToFind, |
| 8819 | IN ULONG HintIndex); |
| 8820 | |
| 8821 | NTSYSAPI |
| 8822 | ULONG |
| 8823 | NTAPI |
| 8824 | RtlFindSetBitsAndClear( |
| 8825 | IN PRTL_BITMAP BitMapHeader, |
| 8826 | IN ULONG NumberToFind, |
| 8827 | IN ULONG HintIndex); |
| 8828 | |
| 8829 | NTSYSAPI |
| 8830 | VOID |
| 8831 | NTAPI |
| 8832 | RtlInitAnsiString( |
| 8833 | IN OUT PANSI_STRING DestinationString, |
| 8834 | IN PCSZ SourceString); |
| 8835 | |
| 8836 | NTSYSAPI |
| 8837 | VOID |
| 8838 | NTAPI |
| 8839 | RtlInitializeBitMap( |
| 8840 | IN PRTL_BITMAP BitMapHeader, |
| 8841 | IN PULONG BitMapBuffer, |
| 8842 | IN ULONG SizeOfBitMap); |
| 8843 | |
| 8844 | NTSYSAPI |
| 8845 | VOID |
| 8846 | NTAPI |
| 8847 | RtlInitString( |
| 8848 | IN OUT PSTRING DestinationString, |
| 8849 | IN PCSZ SourceString); |
| 8850 | |
| 8851 | NTSYSAPI |
| 8852 | NTSTATUS |
| 8853 | NTAPI |
| 8854 | RtlIntegerToUnicodeString( |
| 8855 | IN ULONG Value, |
| 8856 | IN ULONG Base OPTIONAL, |
| 8857 | IN OUT PUNICODE_STRING String); |
| 8858 | |
| 8859 | NTSYSAPI |
| 8860 | NTSTATUS |
| 8861 | NTAPI |
| 8862 | RtlInt64ToUnicodeString( |
| 8863 | IN ULONGLONG Value, |
| 8864 | IN ULONG Base OPTIONAL, |
| 8865 | IN OUT PUNICODE_STRING String); |
| 8866 | |
| 8867 | #ifdef _WIN64 |
| 8868 | #define RtlIntPtrToUnicodeString(Value, Base, String) \ |
| 8869 | RtlInt64ToUnicodeString(Value, Base, String) |
| 8870 | #else |
| 8871 | #define RtlIntPtrToUnicodeString(Value, Base, String) \ |
| 8872 | RtlIntegerToUnicodeString(Value, Base, String) |
| 8873 | #endif |
| 8874 | |
| 8875 | /* BOOLEAN |
| 8876 | * RtlIsZeroLuid( |
| 8877 | * IN PLUID L1); |
| 8878 | */ |
| 8879 | #define RtlIsZeroLuid(_L1) \ |
| 8880 | ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart))) |
| 8881 | |
| 8882 | NTSYSAPI |
| 8883 | ULONG |
| 8884 | NTAPI |
| 8885 | RtlLengthSecurityDescriptor( |
| 8886 | IN PSECURITY_DESCRIPTOR SecurityDescriptor); |
| 8887 | |
| 8888 | NTSYSAPI |
| 8889 | ULONG |
| 8890 | NTAPI |
| 8891 | RtlNumberOfClearBits( |
| 8892 | IN PRTL_BITMAP BitMapHeader); |
| 8893 | |
| 8894 | NTSYSAPI |
| 8895 | ULONG |
| 8896 | NTAPI |
| 8897 | RtlNumberOfSetBits( |
| 8898 | IN PRTL_BITMAP BitMapHeader); |
| 8899 | |
| 8900 | NTSYSAPI |
| 8901 | NTSTATUS |
| 8902 | NTAPI |
| 8903 | RtlQueryRegistryValues( |
| 8904 | IN ULONG RelativeTo, |
| 8905 | IN PCWSTR Path, |
| 8906 | IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable, |
| 8907 | IN PVOID Context OPTIONAL, |
| 8908 | IN PVOID Environment OPTIONAL); |
| 8909 | |
| 8910 | #define SHORT_SIZE (sizeof(USHORT)) |
| 8911 | #define SHORT_MASK (SHORT_SIZE - 1) |
| 8912 | #define LONG_SIZE (sizeof(LONG)) |
| 8913 | #define LONGLONG_SIZE (sizeof(LONGLONG)) |
| 8914 | #define LONG_MASK (LONG_SIZE - 1) |
| 8915 | #define LONGLONG_MASK (LONGLONG_SIZE - 1) |
| 8916 | #define LOWBYTE_MASK 0x00FF |
| 8917 | |
| 8918 | #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK) |
| 8919 | #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK) |
| 8920 | #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK) |
| 8921 | #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK) |
| 8922 | |
| 8923 | NTSYSAPI |
| 8924 | VOID |
| 8925 | NTAPI |
| 8926 | RtlSetAllBits( |
| 8927 | IN PRTL_BITMAP BitMapHeader); |
| 8928 | |
| 8929 | NTSYSAPI |
| 8930 | VOID |
| 8931 | NTAPI |
| 8932 | RtlSetBits( |
| 8933 | IN PRTL_BITMAP BitMapHeader, |
| 8934 | IN ULONG StartingIndex, |
| 8935 | IN ULONG NumberToSet); |
| 8936 | |
| 8937 | NTSYSAPI |
| 8938 | NTSTATUS |
| 8939 | NTAPI |
| 8940 | RtlSetDaclSecurityDescriptor( |
| 8941 | IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, |
| 8942 | IN BOOLEAN DaclPresent, |
| 8943 | IN PACL Dacl OPTIONAL, |
| 8944 | IN BOOLEAN DaclDefaulted OPTIONAL); |
| 8945 | |
| 8946 | #if defined(_AMD64_) |
| 8947 | |
| 8948 | /* VOID |
| 8949 | * RtlStoreUlong( |
| 8950 | * IN PULONG Address, |
| 8951 | * IN ULONG Value); |
| 8952 | */ |
| 8953 | #define RtlStoreUlong(Address,Value) \ |
| 8954 | *(ULONG UNALIGNED *)(Address) = (Value) |
| 8955 | |
| 8956 | /* VOID |
| 8957 | * RtlStoreUlonglong( |
| 8958 | * IN OUT PULONGLONG Address, |
| 8959 | * ULONGLONG Value); |
| 8960 | */ |
| 8961 | #define RtlStoreUlonglong(Address,Value) \ |
| 8962 | *(ULONGLONG UNALIGNED *)(Address) = (Value) |
| 8963 | |
| 8964 | /* VOID |
| 8965 | * RtlStoreUshort( |
| 8966 | * IN PUSHORT Address, |
| 8967 | * IN USHORT Value); |
| 8968 | */ |
| 8969 | #define RtlStoreUshort(Address,Value) \ |
| 8970 | *(USHORT UNALIGNED *)(Address) = (Value) |
| 8971 | |
| 8972 | /* VOID |
| 8973 | * RtlRetrieveUshort( |
| 8974 | * PUSHORT DestinationAddress, |
| 8975 | * PUSHORT SourceAddress); |
| 8976 | */ |
| 8977 | #define RtlRetrieveUshort(DestAddress,SrcAddress) \ |
| 8978 | *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress) |
| 8979 | |
| 8980 | /* VOID |
| 8981 | * RtlRetrieveUlong( |
| 8982 | * PULONG DestinationAddress, |
| 8983 | * PULONG SourceAddress); |
| 8984 | */ |
| 8985 | #define RtlRetrieveUlong(DestAddress,SrcAddress) \ |
| 8986 | *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress) |
| 8987 | |
| 8988 | #else |
| 8989 | |
| 8990 | #define RtlStoreUlong(Address,Value) \ |
| 8991 | if ((ULONG_PTR)(Address) & LONG_MASK) { \ |
| 8992 | ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ |
| 8993 | ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \ |
| 8994 | ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \ |
| 8995 | ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \ |
| 8996 | } \ |
| 8997 | else { \ |
| 8998 | *((PULONG)(Address)) = (ULONG) (Value); \ |
| 8999 | } |
| 9000 | |
| 9001 | #define RtlStoreUlonglong(Address,Value) \ |
| 9002 | if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \ |
| 9003 | RtlStoreUlong((ULONG_PTR)(Address), \ |
| 9004 | (ULONGLONG)(Value) & 0xFFFFFFFF); \ |
| 9005 | RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \ |
| 9006 | (ULONGLONG)(Value) >> 32); \ |
| 9007 | } else { \ |
| 9008 | *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \ |
| 9009 | } |
| 9010 | |
| 9011 | #define RtlStoreUshort(Address,Value) \ |
| 9012 | if ((ULONG_PTR)(Address) & SHORT_MASK) { \ |
| 9013 | ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ |
| 9014 | ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \ |
| 9015 | } \ |
| 9016 | else { \ |
| 9017 | *((PUSHORT) (Address)) = (USHORT)Value; \ |
| 9018 | } |
| 9019 | |
| 9020 | #define RtlRetrieveUshort(DestAddress,SrcAddress) \ |
| 9021 | if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ |
| 9022 | { \ |
| 9023 | ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ |
| 9024 | ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ |
| 9025 | } \ |
| 9026 | else \ |
| 9027 | { \ |
| 9028 | *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \ |
| 9029 | } |
| 9030 | |
| 9031 | #define RtlRetrieveUlong(DestAddress,SrcAddress) \ |
| 9032 | if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ |
| 9033 | { \ |
| 9034 | ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ |
| 9035 | ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ |
| 9036 | ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \ |
| 9037 | ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \ |
| 9038 | } \ |
| 9039 | else \ |
| 9040 | { \ |
| 9041 | *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \ |
| 9042 | } |
| 9043 | |
| 9044 | #endif /* defined(_AMD64_) */ |
| 9045 | |
| 9046 | #ifdef _WIN64 |
| 9047 | /* VOID |
| 9048 | * RtlStoreUlongPtr( |
| 9049 | * IN OUT PULONG_PTR Address, |
| 9050 | * IN ULONG_PTR Value); |
| 9051 | */ |
| 9052 | #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value) |
| 9053 | #else |
| 9054 | #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value) |
| 9055 | #endif /* _WIN64 */ |
| 9056 | |
| 9057 | NTSYSAPI |
| 9058 | BOOLEAN |
| 9059 | NTAPI |
| 9060 | RtlTimeFieldsToTime( |
| 9061 | IN PTIME_FIELDS TimeFields, |
| 9062 | IN PLARGE_INTEGER Time); |
| 9063 | |
| 9064 | NTSYSAPI |
| 9065 | VOID |
| 9066 | NTAPI |
| 9067 | RtlTimeToTimeFields( |
| 9068 | IN PLARGE_INTEGER Time, |
| 9069 | IN PTIME_FIELDS TimeFields); |
| 9070 | |
| 9071 | NTSYSAPI |
| 9072 | ULONG |
| 9073 | FASTCALL |
| 9074 | RtlUlongByteSwap( |
| 9075 | IN ULONG Source); |
| 9076 | |
| 9077 | NTSYSAPI |
| 9078 | ULONGLONG |
| 9079 | FASTCALL |
| 9080 | RtlUlonglongByteSwap( |
| 9081 | IN ULONGLONG Source); |
| 9082 | |
| 9083 | NTSYSAPI |
| 9084 | NTSTATUS |
| 9085 | NTAPI |
| 9086 | RtlUnicodeStringToAnsiString( |
| 9087 | IN OUT PANSI_STRING DestinationString, |
| 9088 | IN PCUNICODE_STRING SourceString, |
| 9089 | IN BOOLEAN AllocateDestinationString); |
| 9090 | |
| 9091 | NTSYSAPI |
| 9092 | ULONG |
| 9093 | NTAPI |
| 9094 | RtlxUnicodeStringToAnsiSize( |
| 9095 | IN PCUNICODE_STRING UnicodeString); |
| 9096 | |
| 9097 | #define RtlUnicodeStringToAnsiSize(String) ( \ |
| 9098 | NLS_MB_CODE_PAGE_TAG ? \ |
| 9099 | RtlxUnicodeStringToAnsiSize(String) : \ |
| 9100 | ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ |
| 9101 | ) |
| 9102 | |
| 9103 | NTSYSAPI |
| 9104 | NTSTATUS |
| 9105 | NTAPI |
| 9106 | RtlUnicodeStringToInteger( |
| 9107 | IN PCUNICODE_STRING String, |
| 9108 | IN ULONG Base OPTIONAL, |
| 9109 | OUT PULONG Value); |
| 9110 | |
| 9111 | NTSYSAPI |
| 9112 | WCHAR |
| 9113 | NTAPI |
| 9114 | RtlUpcaseUnicodeChar( |
| 9115 | IN WCHAR SourceCharacter); |
| 9116 | |
| 9117 | NTSYSAPI |
| 9118 | USHORT |
| 9119 | FASTCALL |
| 9120 | RtlUshortByteSwap( |
| 9121 | IN USHORT Source); |
| 9122 | |
| 9123 | NTSYSAPI |
| 9124 | BOOLEAN |
| 9125 | NTAPI |
| 9126 | RtlValidRelativeSecurityDescriptor( |
| 9127 | IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, |
| 9128 | IN ULONG SecurityDescriptorLength, |
| 9129 | IN SECURITY_INFORMATION RequiredInformation); |
| 9130 | |
| 9131 | NTSYSAPI |
| 9132 | BOOLEAN |
| 9133 | NTAPI |
| 9134 | RtlValidSecurityDescriptor( |
| 9135 | IN PSECURITY_DESCRIPTOR SecurityDescriptor); |
| 9136 | |
| 9137 | NTSYSAPI |
| 9138 | NTSTATUS |
| 9139 | NTAPI |
| 9140 | RtlWriteRegistryValue( |
| 9141 | IN ULONG RelativeTo, |
| 9142 | IN PCWSTR Path, |
| 9143 | IN PCWSTR ValueName, |
| 9144 | IN ULONG ValueType, |
| 9145 | IN PVOID ValueData, |
| 9146 | IN ULONG ValueLength); |
| 9147 | |
| 9148 | |
| 9149 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 9150 | |
| 9151 | |
| 9152 | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) |
| 9153 | NTSYSAPI |
| 9154 | VOID |
| 9155 | FASTCALL |
| 9156 | RtlPrefetchMemoryNonTemporal( |
| 9157 | IN PVOID Source, |
| 9158 | IN SIZE_T Length); |
| 9159 | #endif |
| 9160 | |
| 9161 | |
| 9162 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 9163 | |
| 9164 | |
| 9165 | NTSYSAPI |
| 9166 | VOID |
| 9167 | NTAPI |
| 9168 | RtlClearBit( |
| 9169 | PRTL_BITMAP BitMapHeader, |
| 9170 | ULONG BitNumber); |
| 9171 | |
| 9172 | NTSYSAPI |
| 9173 | WCHAR |
| 9174 | NTAPI |
| 9175 | RtlDowncaseUnicodeChar( |
| 9176 | IN WCHAR SourceCharacter); |
| 9177 | |
| 9178 | NTSYSAPI |
| 9179 | VOID |
| 9180 | NTAPI |
| 9181 | RtlSetBit( |
| 9182 | PRTL_BITMAP BitMapHeader, |
| 9183 | ULONG BitNumber); |
| 9184 | |
| 9185 | NTSYSAPI |
| 9186 | BOOLEAN |
| 9187 | NTAPI |
| 9188 | RtlTestBit( |
| 9189 | IN PRTL_BITMAP BitMapHeader, |
| 9190 | IN ULONG BitNumber); |
| 9191 | |
| 9192 | NTSYSAPI |
| 9193 | NTSTATUS |
| 9194 | NTAPI |
| 9195 | RtlHashUnicodeString( |
| 9196 | IN CONST UNICODE_STRING *String, |
| 9197 | IN BOOLEAN CaseInSensitive, |
| 9198 | IN ULONG HashAlgorithm, |
| 9199 | OUT PULONG HashValue); |
| 9200 | |
| 9201 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 9202 | |
| 9203 | |
| 9204 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 9205 | |
| 9206 | NTSYSAPI |
| 9207 | ULONG |
| 9208 | NTAPI |
| 9209 | RtlNumberOfSetBitsUlongPtr( |
| 9210 | IN ULONG_PTR Target); |
| 9211 | |
| 9212 | NTSYSAPI |
| 9213 | ULONGLONG |
| 9214 | NTAPI |
| 9215 | RtlIoDecodeMemIoResource( |
| 9216 | IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, |
| 9217 | OUT PULONGLONG Alignment OPTIONAL, |
| 9218 | OUT PULONGLONG MinimumAddress OPTIONAL, |
| 9219 | OUT PULONGLONG MaximumAddress OPTIONAL); |
| 9220 | |
| 9221 | NTSYSAPI |
| 9222 | NTSTATUS |
| 9223 | NTAPI |
| 9224 | RtlIoEncodeMemIoResource( |
| 9225 | IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, |
| 9226 | IN UCHAR Type, |
| 9227 | IN ULONGLONG Length, |
| 9228 | IN ULONGLONG Alignment, |
| 9229 | IN ULONGLONG MinimumAddress, |
| 9230 | IN ULONGLONG MaximumAddress); |
| 9231 | |
| 9232 | NTSYSAPI |
| 9233 | ULONGLONG |
| 9234 | NTAPI |
| 9235 | RtlCmDecodeMemIoResource( |
| 9236 | IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, |
| 9237 | OUT PULONGLONG Start OPTIONAL); |
| 9238 | |
| 9239 | NTSYSAPI |
| 9240 | NTSTATUS |
| 9241 | NTAPI |
| 9242 | RtlFindClosestEncodableLength( |
| 9243 | IN ULONGLONG SourceLength, |
| 9244 | OUT PULONGLONG TargetLength); |
| 9245 | |
| 9246 | NTSYSAPI |
| 9247 | NTSTATUS |
| 9248 | NTAPI |
| 9249 | RtlCmEncodeMemIoResource( |
| 9250 | IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, |
| 9251 | IN UCHAR Type, |
| 9252 | IN ULONGLONG Length, |
| 9253 | IN ULONGLONG Start); |
| 9254 | |
| 9255 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 9256 | |
| 9257 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 9258 | |
| 9259 | NTSYSAPI |
| 9260 | NTSTATUS |
| 9261 | NTAPI |
| 9262 | RtlUnicodeToUTF8N( |
| 9263 | OUT PCHAR UTF8StringDestination, |
| 9264 | IN ULONG UTF8StringMaxByteCount, |
| 9265 | OUT PULONG UTF8StringActualByteCount, |
| 9266 | IN PCWCH UnicodeStringSource, |
| 9267 | IN ULONG UnicodeStringByteCount); |
| 9268 | |
| 9269 | NTSYSAPI |
| 9270 | NTSTATUS |
| 9271 | NTAPI |
| 9272 | RtlUTF8ToUnicodeN( |
| 9273 | OUT PWSTR UnicodeStringDestination, |
| 9274 | IN ULONG UnicodeStringMaxByteCount, |
| 9275 | OUT PULONG UnicodeStringActualByteCount, |
| 9276 | IN PCCH UTF8StringSource, |
| 9277 | IN ULONG UTF8StringByteCount); |
| 9278 | |
| 9279 | NTSYSAPI |
| 9280 | ULONG64 |
| 9281 | NTAPI |
| 9282 | RtlGetEnabledExtendedFeatures( |
| 9283 | IN ULONG64 FeatureMask); |
| 9284 | |
| 9285 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 9286 | |
| 9287 | |
| 9288 | #if !defined(MIDL_PASS) |
| 9289 | /* inline funftions */ |
| 9290 | //DECLSPEC_DEPRECATED_DDK_WINXP |
| 9291 | static __inline |
| 9292 | LARGE_INTEGER |
| 9293 | NTAPI_INLINE |
| 9294 | RtlConvertLongToLargeInteger( |
| 9295 | IN LONG SignedInteger) |
| 9296 | { |
| 9297 | LARGE_INTEGER ret; |
| 9298 | ret.QuadPart = SignedInteger; |
| 9299 | return ret; |
| 9300 | } |
| 9301 | |
| 9302 | //DECLSPEC_DEPRECATED_DDK_WINXP |
| 9303 | static __inline |
| 9304 | LARGE_INTEGER |
| 9305 | NTAPI_INLINE |
| 9306 | RtlConvertUlongToLargeInteger( |
| 9307 | IN ULONG UnsignedInteger) |
| 9308 | { |
| 9309 | LARGE_INTEGER ret; |
| 9310 | ret.QuadPart = UnsignedInteger; |
| 9311 | return ret; |
| 9312 | } |
| 9313 | |
| 9314 | //DECLSPEC_DEPRECATED_DDK_WINXP |
| 9315 | static __inline |
| 9316 | LARGE_INTEGER |
| 9317 | NTAPI_INLINE |
| 9318 | RtlLargeIntegerShiftLeft( |
| 9319 | IN LARGE_INTEGER LargeInteger, |
| 9320 | IN CCHAR ShiftCount) |
| 9321 | { |
| 9322 | LARGE_INTEGER Result; |
| 9323 | |
| 9324 | Result.QuadPart = LargeInteger.QuadPart << ShiftCount; |
| 9325 | return Result; |
| 9326 | } |
| 9327 | |
| 9328 | //DECLSPEC_DEPRECATED_DDK_WINXP |
| 9329 | static __inline |
| 9330 | LARGE_INTEGER |
| 9331 | NTAPI_INLINE |
| 9332 | RtlLargeIntegerShiftRight( |
| 9333 | IN LARGE_INTEGER LargeInteger, |
| 9334 | IN CCHAR ShiftCount) |
| 9335 | { |
| 9336 | LARGE_INTEGER Result; |
| 9337 | |
| 9338 | Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount; |
| 9339 | return Result; |
| 9340 | } |
| 9341 | |
| 9342 | //DECLSPEC_DEPRECATED_DDK |
| 9343 | static __inline |
| 9344 | ULONG |
| 9345 | NTAPI_INLINE |
| 9346 | RtlEnlargedUnsignedDivide( |
| 9347 | IN ULARGE_INTEGER Dividend, |
| 9348 | IN ULONG Divisor, |
| 9349 | IN OUT PULONG Remainder) |
| 9350 | { |
| 9351 | if (Remainder) |
| 9352 | *Remainder = (ULONG)(Dividend.QuadPart % Divisor); |
| 9353 | return (ULONG)(Dividend.QuadPart / Divisor); |
| 9354 | } |
| 9355 | |
| 9356 | //DECLSPEC_DEPRECATED_DDK |
| 9357 | static __inline |
| 9358 | LARGE_INTEGER |
| 9359 | NTAPI_INLINE |
| 9360 | RtlLargeIntegerNegate( |
| 9361 | IN LARGE_INTEGER Subtrahend) |
| 9362 | { |
| 9363 | LARGE_INTEGER Difference; |
| 9364 | |
| 9365 | Difference.QuadPart = -Subtrahend.QuadPart; |
| 9366 | return Difference; |
| 9367 | } |
| 9368 | |
| 9369 | //DECLSPEC_DEPRECATED_DDK |
| 9370 | static __inline |
| 9371 | LARGE_INTEGER |
| 9372 | NTAPI_INLINE |
| 9373 | RtlLargeIntegerSubtract( |
| 9374 | IN LARGE_INTEGER Minuend, |
| 9375 | IN LARGE_INTEGER Subtrahend) |
| 9376 | { |
| 9377 | LARGE_INTEGER Difference; |
| 9378 | |
| 9379 | Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart; |
| 9380 | return Difference; |
| 9381 | } |
| 9382 | |
| 9383 | //DECLSPEC_DEPRECATED_DDK |
| 9384 | static __inline |
| 9385 | LARGE_INTEGER |
| 9386 | NTAPI_INLINE |
| 9387 | RtlEnlargedUnsignedMultiply( |
| 9388 | IN ULONG Multiplicand, |
| 9389 | IN ULONG Multiplier) |
| 9390 | { |
| 9391 | LARGE_INTEGER ret; |
| 9392 | ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; |
| 9393 | return ret; |
| 9394 | } |
| 9395 | |
| 9396 | //DECLSPEC_DEPRECATED_DDK |
| 9397 | static __inline |
| 9398 | LARGE_INTEGER |
| 9399 | NTAPI_INLINE |
| 9400 | RtlEnlargedIntegerMultiply( |
| 9401 | IN LONG Multiplicand, |
| 9402 | IN LONG Multiplier) |
| 9403 | { |
| 9404 | LARGE_INTEGER ret; |
| 9405 | ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; |
| 9406 | return ret; |
| 9407 | } |
| 9408 | |
| 9409 | FORCEINLINE |
| 9410 | VOID |
| 9411 | RtlInitEmptyAnsiString( |
| 9412 | OUT PANSI_STRING AnsiString, |
| 9413 | IN PCHAR Buffer, |
| 9414 | IN USHORT BufferSize) |
| 9415 | { |
| 9416 | AnsiString->Length = 0; |
| 9417 | AnsiString->MaximumLength = BufferSize; |
| 9418 | AnsiString->Buffer = Buffer; |
| 9419 | } |
| 9420 | |
| 9421 | FORCEINLINE |
| 9422 | VOID |
| 9423 | RtlInitEmptyUnicodeString( |
| 9424 | OUT PUNICODE_STRING UnicodeString, |
| 9425 | IN PWSTR Buffer, |
| 9426 | IN USHORT BufferSize) |
| 9427 | { |
| 9428 | UnicodeString->Length = 0; |
| 9429 | UnicodeString->MaximumLength = BufferSize; |
| 9430 | UnicodeString->Buffer = Buffer; |
| 9431 | } |
| 9432 | |
| 9433 | #if defined(_AMD64_) || defined(_IA64_) |
| 9434 | |
| 9435 | static __inline |
| 9436 | LARGE_INTEGER |
| 9437 | NTAPI_INLINE |
| 9438 | RtlExtendedIntegerMultiply( |
| 9439 | IN LARGE_INTEGER Multiplicand, |
| 9440 | IN LONG Multiplier) |
| 9441 | { |
| 9442 | LARGE_INTEGER ret; |
| 9443 | ret.QuadPart = Multiplicand.QuadPart * Multiplier; |
| 9444 | return ret; |
| 9445 | } |
| 9446 | |
| 9447 | static __inline |
| 9448 | LARGE_INTEGER |
| 9449 | NTAPI_INLINE |
| 9450 | RtlExtendedLargeIntegerDivide( |
| 9451 | IN LARGE_INTEGER Dividend, |
| 9452 | IN ULONG Divisor, |
| 9453 | OUT PULONG Remainder OPTIONAL) |
| 9454 | { |
| 9455 | LARGE_INTEGER ret; |
| 9456 | ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; |
| 9457 | if (Remainder) |
| 9458 | *Remainder = (ULONG)(Dividend.QuadPart % Divisor); |
| 9459 | return ret; |
| 9460 | } |
| 9461 | |
| 9462 | #endif /* defined(_AMD64_) || defined(_IA64_) */ |
| 9463 | |
| 9464 | |
| 9465 | #if defined(_AMD64_) |
| 9466 | |
| 9467 | #define MultiplyHigh __mulh |
| 9468 | #define UnsignedMultiplyHigh __umulh |
| 9469 | |
| 9470 | //DECLSPEC_DEPRECATED_DDK |
| 9471 | static __inline |
| 9472 | LARGE_INTEGER |
| 9473 | NTAPI_INLINE |
| 9474 | RtlExtendedMagicDivide( |
| 9475 | IN LARGE_INTEGER Dividend, |
| 9476 | IN LARGE_INTEGER MagicDivisor, |
| 9477 | IN CCHAR ShiftCount) |
| 9478 | { |
| 9479 | LARGE_INTEGER ret; |
| 9480 | ULONG64 ret64; |
| 9481 | BOOLEAN Pos; |
| 9482 | Pos = (Dividend.QuadPart >= 0); |
| 9483 | ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, |
| 9484 | MagicDivisor.QuadPart); |
| 9485 | ret64 >>= ShiftCount; |
| 9486 | ret.QuadPart = Pos ? (LONG64)ret64 : -(LONG64)ret64; |
| 9487 | return ret; |
| 9488 | } |
| 9489 | #endif |
| 9490 | |
| 9491 | //DECLSPEC_DEPRECATED_DDK |
| 9492 | static __inline |
| 9493 | LARGE_INTEGER |
| 9494 | NTAPI_INLINE |
| 9495 | RtlLargeIntegerAdd( |
| 9496 | IN LARGE_INTEGER Addend1, |
| 9497 | IN LARGE_INTEGER Addend2) |
| 9498 | { |
| 9499 | LARGE_INTEGER ret; |
| 9500 | ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart; |
| 9501 | return ret; |
| 9502 | } |
| 9503 | |
| 9504 | /* VOID |
| 9505 | * RtlLargeIntegerAnd( |
| 9506 | * IN OUT LARGE_INTEGER Result, |
| 9507 | * IN LARGE_INTEGER Source, |
| 9508 | * IN LARGE_INTEGER Mask); |
| 9509 | */ |
| 9510 | #define RtlLargeIntegerAnd(Result, Source, Mask) \ |
| 9511 | Result.QuadPart = Source.QuadPart & Mask.QuadPart |
| 9512 | |
| 9513 | //DECLSPEC_DEPRECATED_DDK |
| 9514 | static __inline |
| 9515 | LARGE_INTEGER |
| 9516 | NTAPI_INLINE |
| 9517 | RtlLargeIntegerArithmeticShift( |
| 9518 | IN LARGE_INTEGER LargeInteger, |
| 9519 | IN CCHAR ShiftCount) |
| 9520 | { |
| 9521 | LARGE_INTEGER ret; |
| 9522 | ret.QuadPart = LargeInteger.QuadPart >> ShiftCount; |
| 9523 | return ret; |
| 9524 | } |
| 9525 | |
| 9526 | /* BOOLEAN |
| 9527 | * RtlLargeIntegerEqualTo( |
| 9528 | * IN LARGE_INTEGER Operand1, |
| 9529 | * IN LARGE_INTEGER Operand2); |
| 9530 | */ |
| 9531 | #define RtlLargeIntegerEqualTo(X,Y) \ |
| 9532 | (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart))) |
| 9533 | |
| 9534 | FORCEINLINE |
| 9535 | PVOID |
| 9536 | RtlSecureZeroMemory( |
| 9537 | OUT PVOID Pointer, |
| 9538 | IN SIZE_T Size) |
| 9539 | { |
| 9540 | volatile char* vptr = (volatile char*)Pointer; |
| 9541 | #if defined(_M_AMD64) |
| 9542 | __stosb((PUCHAR)vptr, 0, Size); |
| 9543 | #else |
| 9544 | char * endptr = (char *)vptr + Size; |
| 9545 | while (vptr < endptr) { |
| 9546 | *vptr = 0; vptr++; |
| 9547 | } |
| 9548 | #endif |
| 9549 | return Pointer; |
| 9550 | } |
| 9551 | |
| 9552 | #if defined(_M_AMD64) |
| 9553 | FORCEINLINE |
| 9554 | BOOLEAN |
| 9555 | RtlCheckBit( |
| 9556 | IN PRTL_BITMAP BitMapHeader, |
| 9557 | IN ULONG BitPosition) |
| 9558 | { |
| 9559 | return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition); |
| 9560 | } |
| 9561 | #else |
| 9562 | #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1) |
| 9563 | #endif /* defined(_M_AMD64) */ |
| 9564 | |
| 9565 | #define RtlLargeIntegerGreaterThan(X,Y) ( \ |
| 9566 | (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \ |
| 9567 | ((X).HighPart > (Y).HighPart) \ |
| 9568 | ) |
| 9569 | |
| 9570 | #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \ |
| 9571 | (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \ |
| 9572 | ((X).HighPart > (Y).HighPart) \ |
| 9573 | ) |
| 9574 | |
| 9575 | #define RtlLargeIntegerNotEqualTo(X,Y) ( \ |
| 9576 | (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \ |
| 9577 | ) |
| 9578 | |
| 9579 | #define RtlLargeIntegerLessThan(X,Y) ( \ |
| 9580 | (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \ |
| 9581 | ((X).HighPart < (Y).HighPart) \ |
| 9582 | ) |
| 9583 | |
| 9584 | #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \ |
| 9585 | (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \ |
| 9586 | ((X).HighPart < (Y).HighPart) \ |
| 9587 | ) |
| 9588 | |
| 9589 | #define RtlLargeIntegerGreaterThanZero(X) ( \ |
| 9590 | (((X).HighPart == 0) && ((X).LowPart > 0)) || \ |
| 9591 | ((X).HighPart > 0 ) \ |
| 9592 | ) |
| 9593 | |
| 9594 | #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 ) |
| 9595 | |
| 9596 | #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) ) |
| 9597 | |
| 9598 | #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) ) |
| 9599 | |
| 9600 | #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) ) |
| 9601 | |
| 9602 | #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) ) |
| 9603 | |
| 9604 | #endif /* !defined(MIDL_PASS) */ |
| 9605 | |
| 9606 | /* Byte Swap Functions */ |
| 9607 | #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \ |
| 9608 | ((defined(_M_AMD64) || defined(_M_IA64)) \ |
| 9609 | && (_MSC_FULL_VER > 13009175 || defined(__GNUC__))) |
| 9610 | |
| 9611 | #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x)) |
| 9612 | #define RtlUlongByteSwap(_x) _byteswap_ulong((_x)) |
| 9613 | #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x)) |
| 9614 | |
| 9615 | #endif |
| 9616 | |
| 9617 | #if DBG |
| 9618 | |
| 9619 | #define ASSERT(exp) \ |
| 9620 | (VOID)((!(exp)) ? \ |
| 9621 | RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) |
| 9622 | |
| 9623 | #define ASSERTMSG(msg, exp) \ |
| 9624 | (VOID)((!(exp)) ? \ |
| 9625 | RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE) |
| 9626 | |
| 9627 | #define RTL_SOFT_ASSERT(exp) \ |
| 9628 | (VOID)((!(exp)) ? \ |
| 9629 | DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE) |
| 9630 | |
| 9631 | #define RTL_SOFT_ASSERTMSG(msg, exp) \ |
| 9632 | (VOID)((!(exp)) ? \ |
| 9633 | DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE) |
| 9634 | |
| 9635 | #define RTL_VERIFY(exp) ASSERT(exp) |
| 9636 | #define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp) |
| 9637 | |
| 9638 | #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) |
| 9639 | #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) |
| 9640 | |
| 9641 | #if defined(_MSC_VER) |
| 9642 | |
| 9643 | #define NT_ASSERT(exp) \ |
| 9644 | ((!(exp)) ? \ |
| 9645 | (__annotation(L"Debug", L"AssertFail", L#exp), \ |
| 9646 | DbgRaiseAssertionFailure(), FALSE) : TRUE) |
| 9647 | |
| 9648 | #define NT_ASSERTMSG(msg, exp) \ |
| 9649 | ((!(exp)) ? \ |
| 9650 | (__annotation(L"Debug", L"AssertFail", L##msg), \ |
| 9651 | DbgRaiseAssertionFailure(), FALSE) : TRUE) |
| 9652 | |
| 9653 | #define NT_ASSERTMSGW(msg, exp) \ |
| 9654 | ((!(exp)) ? \ |
| 9655 | (__annotation(L"Debug", L"AssertFail", msg), \ |
| 9656 | DbgRaiseAssertionFailure(), FALSE) : TRUE) |
| 9657 | |
| 9658 | #define NT_VERIFY NT_ASSERT |
| 9659 | #define NT_VERIFYMSG NT_ASSERTMSG |
| 9660 | #define NT_VERIFYMSGW NT_ASSERTMSGW |
| 9661 | |
| 9662 | #else |
| 9663 | |
| 9664 | /* GCC doesn't support __annotation (nor PDB) */ |
| 9665 | #define NT_ASSERT(exp) \ |
| 9666 | (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE) |
| 9667 | |
| 9668 | #define NT_ASSERTMSG NT_ASSERT |
| 9669 | #define NT_ASSERTMSGW NT_ASSERT |
| 9670 | |
| 9671 | #endif |
| 9672 | |
| 9673 | #else /* !DBG */ |
| 9674 | |
| 9675 | #define ASSERT(exp) ((VOID) 0) |
| 9676 | #define ASSERTMSG(msg, exp) ((VOID) 0) |
| 9677 | |
| 9678 | #define RTL_SOFT_ASSERT(exp) ((VOID) 0) |
| 9679 | #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) |
| 9680 | |
| 9681 | #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) |
| 9682 | #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) |
| 9683 | |
| 9684 | #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) |
| 9685 | #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) |
| 9686 | |
| 9687 | #define NT_ASSERT(exp) ((VOID)0) |
| 9688 | #define NT_ASSERTMSG(msg, exp) ((VOID)0) |
| 9689 | #define NT_ASSERTMSGW(msg, exp) ((VOID)0) |
| 9690 | |
| 9691 | #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE) |
| 9692 | #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE) |
| 9693 | #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE) |
| 9694 | |
| 9695 | #endif /* DBG */ |
| 9696 | |
| 9697 | #define InitializeListHead32(ListHead) (\ |
| 9698 | (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead))) |
| 9699 | |
| 9700 | #if !defined(_WINBASE_) |
| 9701 | |
| 9702 | #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_)) |
| 9703 | |
| 9704 | NTKERNELAPI |
| 9705 | VOID |
| 9706 | InitializeSListHead( |
| 9707 | OUT PSLIST_HEADER SListHead); |
| 9708 | |
| 9709 | #else |
| 9710 | |
| 9711 | FORCEINLINE |
| 9712 | VOID |
| 9713 | InitializeSListHead( |
| 9714 | OUT PSLIST_HEADER SListHead) |
| 9715 | { |
| 9716 | #if defined(_IA64_) |
| 9717 | ULONG64 FeatureBits; |
| 9718 | #endif |
| 9719 | |
| 9720 | #if defined(_WIN64) |
| 9721 | if (((ULONG_PTR)SListHead & 0xf) != 0) { |
| 9722 | RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT); |
| 9723 | } |
| 9724 | #endif |
| 9725 | RtlZeroMemory(SListHead, sizeof(SLIST_HEADER)); |
| 9726 | #if defined(_IA64_) |
| 9727 | FeatureBits = __getReg(CV_IA64_CPUID4); |
| 9728 | if ((FeatureBits & KF_16BYTE_INSTR) != 0) { |
| 9729 | SListHead->Header16.HeaderType = 1; |
| 9730 | SListHead->Header16.Init = 1; |
| 9731 | } |
| 9732 | #endif |
| 9733 | } |
| 9734 | |
| 9735 | #endif |
| 9736 | |
| 9737 | #if defined(_WIN64) |
| 9738 | |
| 9739 | #define InterlockedPopEntrySList(Head) \ |
| 9740 | ExpInterlockedPopEntrySList(Head) |
| 9741 | |
| 9742 | #define InterlockedPushEntrySList(Head, Entry) \ |
| 9743 | ExpInterlockedPushEntrySList(Head, Entry) |
| 9744 | |
| 9745 | #define InterlockedFlushSList(Head) \ |
| 9746 | ExpInterlockedFlushSList(Head) |
| 9747 | |
| 9748 | #define QueryDepthSList(Head) \ |
| 9749 | ExQueryDepthSList(Head) |
| 9750 | |
| 9751 | #else /* !defined(_WIN64) */ |
| 9752 | |
| 9753 | NTKERNELAPI |
| 9754 | PSLIST_ENTRY |
| 9755 | FASTCALL |
| 9756 | InterlockedPopEntrySList( |
| 9757 | IN PSLIST_HEADER ListHead); |
| 9758 | |
| 9759 | NTKERNELAPI |
| 9760 | PSLIST_ENTRY |
| 9761 | FASTCALL |
| 9762 | InterlockedPushEntrySList( |
| 9763 | IN PSLIST_HEADER ListHead, |
| 9764 | IN PSLIST_ENTRY ListEntry); |
| 9765 | |
| 9766 | #define InterlockedFlushSList(ListHead) \ |
| 9767 | ExInterlockedFlushSList(ListHead) |
| 9768 | |
| 9769 | #define QueryDepthSList(Head) \ |
| 9770 | ExQueryDepthSList(Head) |
| 9771 | |
| 9772 | #endif /* !defined(_WIN64) */ |
| 9773 | |
| 9774 | #endif /* !defined(_WINBASE_) */ |
| 9775 | |
| 9776 | #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset) |
| 9777 | #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length) |
| 9778 | #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \ |
| 9779 | ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk))) |
| 9780 | #define RTL_CONTEXT_OFFSET(Context, Chunk) \ |
| 9781 | RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk) |
| 9782 | #define RTL_CONTEXT_LENGTH(Context, Chunk) \ |
| 9783 | RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk) |
| 9784 | #define RTL_CONTEXT_CHUNK(Context, Chunk) \ |
| 9785 | RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \ |
| 9786 | (PCONTEXT_EX)(Context + 1), \ |
| 9787 | Chunk) |
| 9788 | |
| 9789 | BOOLEAN |
| 9790 | RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)( |
| 9791 | IN ULONG Version); |
| 9792 | |
| 9793 | BOOLEAN |
| 9794 | RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)( |
| 9795 | IN ULONG Version); |
| 9796 | |
| 9797 | #ifndef RtlIsNtDdiVersionAvailable |
| 9798 | #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable |
| 9799 | #endif |
| 9800 | |
| 9801 | #ifndef RtlIsServicePackVersionInstalled |
| 9802 | #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled |
| 9803 | #endif |
| 9804 | |
| 9805 | #define RtlInterlockedSetBits(Flags, Flag) \ |
| 9806 | InterlockedOr((PLONG)(Flags), Flag) |
| 9807 | |
| 9808 | #define RtlInterlockedAndBits(Flags, Flag) \ |
| 9809 | InterlockedAnd((PLONG)(Flags), Flag) |
| 9810 | |
| 9811 | #define RtlInterlockedClearBits(Flags, Flag) \ |
| 9812 | RtlInterlockedAndBits(Flags, ~(Flag)) |
| 9813 | |
| 9814 | #define RtlInterlockedXorBits(Flags, Flag) \ |
| 9815 | InterlockedXor(Flags, Flag) |
| 9816 | |
| 9817 | #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \ |
| 9818 | (VOID) RtlInterlockedSetBits(Flags, Flag) |
| 9819 | |
| 9820 | #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \ |
| 9821 | (VOID) RtlInterlockedAndBits(Flags, Flag) |
| 9822 | |
| 9823 | #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ |
| 9824 | RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag)) |
| 9825 | |
| 9826 | |
| 9827 | /****************************************************************************** |
| 9828 | * Kernel Functions * |
| 9829 | ******************************************************************************/ |
| 9830 | NTKERNELAPI |
| 9831 | VOID |
| 9832 | NTAPI |
| 9833 | KeInitializeEvent( |
| 9834 | OUT PRKEVENT Event, |
| 9835 | IN EVENT_TYPE Type, |
| 9836 | IN BOOLEAN State); |
| 9837 | |
| 9838 | NTKERNELAPI |
| 9839 | VOID |
| 9840 | NTAPI |
| 9841 | KeClearEvent( |
| 9842 | IN OUT PRKEVENT Event); |
| 9843 | |
| 9844 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 9845 | |
| 9846 | #if defined(_NTDDK_) || defined(_NTIFS_) |
| 9847 | NTKERNELAPI |
| 9848 | VOID |
| 9849 | NTAPI |
| 9850 | ProbeForRead( |
| 9851 | IN CONST VOID *Address, /* CONST is added */ |
| 9852 | IN SIZE_T Length, |
| 9853 | IN ULONG Alignment); |
| 9854 | #endif /* defined(_NTDDK_) || defined(_NTIFS_) */ |
| 9855 | |
| 9856 | NTKERNELAPI |
| 9857 | VOID |
| 9858 | NTAPI |
| 9859 | ProbeForWrite( |
| 9860 | IN PVOID Address, |
| 9861 | IN SIZE_T Length, |
| 9862 | IN ULONG Alignment); |
| 9863 | |
| 9864 | #if defined(SINGLE_GROUP_LEGACY_API) |
| 9865 | |
| 9866 | NTKERNELAPI |
| 9867 | VOID |
| 9868 | NTAPI |
| 9869 | KeRevertToUserAffinityThread(VOID); |
| 9870 | |
| 9871 | NTKERNELAPI |
| 9872 | VOID |
| 9873 | NTAPI |
| 9874 | KeSetSystemAffinityThread( |
| 9875 | IN KAFFINITY Affinity); |
| 9876 | |
| 9877 | NTKERNELAPI |
| 9878 | VOID |
| 9879 | NTAPI |
| 9880 | KeSetTargetProcessorDpc( |
| 9881 | IN OUT PRKDPC Dpc, |
| 9882 | IN CCHAR Number); |
| 9883 | |
| 9884 | NTKERNELAPI |
| 9885 | KAFFINITY |
| 9886 | NTAPI |
| 9887 | KeQueryActiveProcessors(VOID); |
| 9888 | #endif /* defined(SINGLE_GROUP_LEGACY_API) */ |
| 9889 | |
| 9890 | #if !defined(_M_AMD64) |
| 9891 | NTKERNELAPI |
| 9892 | ULONGLONG |
| 9893 | NTAPI |
| 9894 | KeQueryInterruptTime(VOID); |
| 9895 | |
| 9896 | NTKERNELAPI |
| 9897 | VOID |
| 9898 | NTAPI |
| 9899 | KeQuerySystemTime( |
| 9900 | OUT PLARGE_INTEGER CurrentTime); |
| 9901 | #endif /* !_M_AMD64 */ |
| 9902 | |
| 9903 | #if !defined(_X86_) && !defined(_M_ARM) |
| 9904 | NTKERNELAPI |
| 9905 | KIRQL |
| 9906 | NTAPI |
| 9907 | KeAcquireSpinLockRaiseToDpc( |
| 9908 | IN OUT PKSPIN_LOCK SpinLock); |
| 9909 | |
| 9910 | #define KeAcquireSpinLock(SpinLock, OldIrql) \ |
| 9911 | *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) |
| 9912 | |
| 9913 | NTKERNELAPI |
| 9914 | VOID |
| 9915 | NTAPI |
| 9916 | KeAcquireSpinLockAtDpcLevel( |
| 9917 | IN OUT PKSPIN_LOCK SpinLock); |
| 9918 | |
| 9919 | NTKERNELAPI |
| 9920 | VOID |
| 9921 | NTAPI |
| 9922 | KeReleaseSpinLock( |
| 9923 | IN OUT PKSPIN_LOCK SpinLock, |
| 9924 | IN KIRQL NewIrql); |
| 9925 | |
| 9926 | NTKERNELAPI |
| 9927 | VOID |
| 9928 | NTAPI |
| 9929 | KeReleaseSpinLockFromDpcLevel( |
| 9930 | IN OUT PKSPIN_LOCK SpinLock); |
| 9931 | #endif /* !_X86_ */ |
| 9932 | |
| 9933 | #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK)) |
| 9934 | NTKERNELAPI |
| 9935 | VOID |
| 9936 | NTAPI |
| 9937 | KeInitializeSpinLock( |
| 9938 | IN PKSPIN_LOCK SpinLock); |
| 9939 | #else |
| 9940 | FORCEINLINE |
| 9941 | VOID |
| 9942 | KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) |
| 9943 | { |
| 9944 | /* Clear the lock */ |
| 9945 | *SpinLock = 0; |
| 9946 | } |
| 9947 | #endif |
| 9948 | |
| 9949 | NTKERNELAPI |
| 9950 | DECLSPEC_NORETURN |
| 9951 | VOID |
| 9952 | NTAPI |
| 9953 | KeBugCheckEx( |
| 9954 | IN ULONG BugCheckCode, |
| 9955 | IN ULONG_PTR BugCheckParameter1, |
| 9956 | IN ULONG_PTR BugCheckParameter2, |
| 9957 | IN ULONG_PTR BugCheckParameter3, |
| 9958 | IN ULONG_PTR BugCheckParameter4); |
| 9959 | |
| 9960 | NTKERNELAPI |
| 9961 | BOOLEAN |
| 9962 | NTAPI |
| 9963 | KeCancelTimer( |
| 9964 | IN OUT PKTIMER); |
| 9965 | |
| 9966 | NTKERNELAPI |
| 9967 | NTSTATUS |
| 9968 | NTAPI |
| 9969 | KeDelayExecutionThread( |
| 9970 | IN KPROCESSOR_MODE WaitMode, |
| 9971 | IN BOOLEAN Alertable, |
| 9972 | IN PLARGE_INTEGER Interval); |
| 9973 | |
| 9974 | NTKERNELAPI |
| 9975 | BOOLEAN |
| 9976 | NTAPI |
| 9977 | KeDeregisterBugCheckCallback( |
| 9978 | IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord); |
| 9979 | |
| 9980 | NTKERNELAPI |
| 9981 | VOID |
| 9982 | NTAPI |
| 9983 | KeEnterCriticalRegion(VOID); |
| 9984 | |
| 9985 | NTKERNELAPI |
| 9986 | VOID |
| 9987 | NTAPI |
| 9988 | KeInitializeDeviceQueue( |
| 9989 | OUT PKDEVICE_QUEUE DeviceQueue); |
| 9990 | |
| 9991 | NTKERNELAPI |
| 9992 | VOID |
| 9993 | NTAPI |
| 9994 | KeInitializeDpc( |
| 9995 | OUT PRKDPC Dpc, |
| 9996 | IN PKDEFERRED_ROUTINE DeferredRoutine, |
| 9997 | IN PVOID DeferredContext OPTIONAL); |
| 9998 | |
| 9999 | NTKERNELAPI |
| 10000 | VOID |
| 10001 | NTAPI |
| 10002 | KeInitializeMutex( |
| 10003 | OUT PRKMUTEX Mutex, |
| 10004 | IN ULONG Level); |
| 10005 | |
| 10006 | NTKERNELAPI |
| 10007 | VOID |
| 10008 | NTAPI |
| 10009 | KeInitializeSemaphore( |
| 10010 | OUT PRKSEMAPHORE Semaphore, |
| 10011 | IN LONG Count, |
| 10012 | IN LONG Limit); |
| 10013 | |
| 10014 | NTKERNELAPI |
| 10015 | VOID |
| 10016 | NTAPI |
| 10017 | KeInitializeTimer( |
| 10018 | OUT PKTIMER Timer); |
| 10019 | |
| 10020 | NTKERNELAPI |
| 10021 | VOID |
| 10022 | NTAPI |
| 10023 | KeInitializeTimerEx( |
| 10024 | OUT PKTIMER Timer, |
| 10025 | IN TIMER_TYPE Type); |
| 10026 | |
| 10027 | NTKERNELAPI |
| 10028 | BOOLEAN |
| 10029 | NTAPI |
| 10030 | KeInsertByKeyDeviceQueue( |
| 10031 | IN OUT PKDEVICE_QUEUE DeviceQueue, |
| 10032 | IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, |
| 10033 | IN ULONG SortKey); |
| 10034 | |
| 10035 | NTKERNELAPI |
| 10036 | BOOLEAN |
| 10037 | NTAPI |
| 10038 | KeInsertDeviceQueue( |
| 10039 | IN OUT PKDEVICE_QUEUE DeviceQueue, |
| 10040 | IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); |
| 10041 | |
| 10042 | NTKERNELAPI |
| 10043 | BOOLEAN |
| 10044 | NTAPI |
| 10045 | KeInsertQueueDpc( |
| 10046 | IN OUT PRKDPC Dpc, |
| 10047 | IN PVOID SystemArgument1 OPTIONAL, |
| 10048 | IN PVOID SystemArgument2 OPTIONAL); |
| 10049 | |
| 10050 | NTKERNELAPI |
| 10051 | VOID |
| 10052 | NTAPI |
| 10053 | KeLeaveCriticalRegion(VOID); |
| 10054 | |
| 10055 | NTHALAPI |
| 10056 | LARGE_INTEGER |
| 10057 | NTAPI |
| 10058 | KeQueryPerformanceCounter( |
| 10059 | OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL); |
| 10060 | |
| 10061 | NTKERNELAPI |
| 10062 | KPRIORITY |
| 10063 | NTAPI |
| 10064 | KeQueryPriorityThread( |
| 10065 | IN PRKTHREAD Thread); |
| 10066 | |
| 10067 | NTKERNELAPI |
| 10068 | ULONG |
| 10069 | NTAPI |
| 10070 | KeQueryTimeIncrement(VOID); |
| 10071 | |
| 10072 | NTKERNELAPI |
| 10073 | LONG |
| 10074 | NTAPI |
| 10075 | KeReadStateEvent( |
| 10076 | IN PRKEVENT Event); |
| 10077 | |
| 10078 | NTKERNELAPI |
| 10079 | LONG |
| 10080 | NTAPI |
| 10081 | KeReadStateMutex( |
| 10082 | IN PRKMUTEX Mutex); |
| 10083 | |
| 10084 | NTKERNELAPI |
| 10085 | LONG |
| 10086 | NTAPI |
| 10087 | KeReadStateSemaphore( |
| 10088 | IN PRKSEMAPHORE Semaphore); |
| 10089 | |
| 10090 | NTKERNELAPI |
| 10091 | BOOLEAN |
| 10092 | NTAPI |
| 10093 | KeReadStateTimer( |
| 10094 | IN PKTIMER Timer); |
| 10095 | |
| 10096 | NTKERNELAPI |
| 10097 | BOOLEAN |
| 10098 | NTAPI |
| 10099 | KeRegisterBugCheckCallback( |
| 10100 | OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord, |
| 10101 | IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, |
| 10102 | IN PVOID Buffer, |
| 10103 | IN ULONG Length, |
| 10104 | IN PUCHAR Component); |
| 10105 | |
| 10106 | NTKERNELAPI |
| 10107 | LONG |
| 10108 | NTAPI |
| 10109 | KeReleaseMutex( |
| 10110 | IN OUT PRKMUTEX Mutex, |
| 10111 | IN BOOLEAN Wait); |
| 10112 | |
| 10113 | NTKERNELAPI |
| 10114 | LONG |
| 10115 | NTAPI |
| 10116 | KeReleaseSemaphore( |
| 10117 | IN OUT PRKSEMAPHORE Semaphore, |
| 10118 | IN KPRIORITY Increment, |
| 10119 | IN LONG Adjustment, |
| 10120 | IN BOOLEAN Wait); |
| 10121 | |
| 10122 | NTKERNELAPI |
| 10123 | PKDEVICE_QUEUE_ENTRY |
| 10124 | NTAPI |
| 10125 | KeRemoveByKeyDeviceQueue( |
| 10126 | IN OUT PKDEVICE_QUEUE DeviceQueue, |
| 10127 | IN ULONG SortKey); |
| 10128 | |
| 10129 | NTKERNELAPI |
| 10130 | PKDEVICE_QUEUE_ENTRY |
| 10131 | NTAPI |
| 10132 | KeRemoveDeviceQueue( |
| 10133 | IN OUT PKDEVICE_QUEUE DeviceQueue); |
| 10134 | |
| 10135 | NTKERNELAPI |
| 10136 | BOOLEAN |
| 10137 | NTAPI |
| 10138 | KeRemoveEntryDeviceQueue( |
| 10139 | IN OUT PKDEVICE_QUEUE DeviceQueue, |
| 10140 | IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); |
| 10141 | |
| 10142 | NTKERNELAPI |
| 10143 | BOOLEAN |
| 10144 | NTAPI |
| 10145 | KeRemoveQueueDpc( |
| 10146 | IN OUT PRKDPC Dpc); |
| 10147 | |
| 10148 | NTKERNELAPI |
| 10149 | LONG |
| 10150 | NTAPI |
| 10151 | KeResetEvent( |
| 10152 | IN OUT PRKEVENT Event); |
| 10153 | |
| 10154 | NTKERNELAPI |
| 10155 | LONG |
| 10156 | NTAPI |
| 10157 | KeSetEvent( |
| 10158 | IN OUT PRKEVENT Event, |
| 10159 | IN KPRIORITY Increment, |
| 10160 | IN BOOLEAN Wait); |
| 10161 | |
| 10162 | NTKERNELAPI |
| 10163 | VOID |
| 10164 | NTAPI |
| 10165 | KeSetImportanceDpc( |
| 10166 | IN OUT PRKDPC Dpc, |
| 10167 | IN KDPC_IMPORTANCE Importance); |
| 10168 | |
| 10169 | NTKERNELAPI |
| 10170 | KPRIORITY |
| 10171 | NTAPI |
| 10172 | KeSetPriorityThread( |
| 10173 | IN OUT PKTHREAD Thread, |
| 10174 | IN KPRIORITY Priority); |
| 10175 | |
| 10176 | NTKERNELAPI |
| 10177 | BOOLEAN |
| 10178 | NTAPI |
| 10179 | KeSetTimer( |
| 10180 | IN OUT PKTIMER Timer, |
| 10181 | IN LARGE_INTEGER DueTime, |
| 10182 | IN PKDPC Dpc OPTIONAL); |
| 10183 | |
| 10184 | NTKERNELAPI |
| 10185 | BOOLEAN |
| 10186 | NTAPI |
| 10187 | KeSetTimerEx( |
| 10188 | IN OUT PKTIMER Timer, |
| 10189 | IN LARGE_INTEGER DueTime, |
| 10190 | IN LONG Period OPTIONAL, |
| 10191 | IN PKDPC Dpc OPTIONAL); |
| 10192 | |
| 10193 | NTHALAPI |
| 10194 | VOID |
| 10195 | NTAPI |
| 10196 | KeStallExecutionProcessor( |
| 10197 | IN ULONG MicroSeconds); |
| 10198 | |
| 10199 | NTKERNELAPI |
| 10200 | BOOLEAN |
| 10201 | NTAPI |
| 10202 | KeSynchronizeExecution( |
| 10203 | IN OUT PKINTERRUPT Interrupt, |
| 10204 | IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, |
| 10205 | IN PVOID SynchronizeContext OPTIONAL); |
| 10206 | |
| 10207 | NTKERNELAPI |
| 10208 | NTSTATUS |
| 10209 | NTAPI |
| 10210 | KeWaitForMultipleObjects( |
| 10211 | IN ULONG Count, |
| 10212 | IN PVOID Object[], |
| 10213 | IN WAIT_TYPE WaitType, |
| 10214 | IN KWAIT_REASON WaitReason, |
| 10215 | IN KPROCESSOR_MODE WaitMode, |
| 10216 | IN BOOLEAN Alertable, |
| 10217 | IN PLARGE_INTEGER Timeout OPTIONAL, |
| 10218 | OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL); |
| 10219 | |
| 10220 | #define KeWaitForMutexObject KeWaitForSingleObject |
| 10221 | |
| 10222 | NTKERNELAPI |
| 10223 | NTSTATUS |
| 10224 | NTAPI |
| 10225 | KeWaitForSingleObject( |
| 10226 | IN PVOID Object, |
| 10227 | IN KWAIT_REASON WaitReason, |
| 10228 | IN KPROCESSOR_MODE WaitMode, |
| 10229 | IN BOOLEAN Alertable, |
| 10230 | IN PLARGE_INTEGER Timeout OPTIONAL); |
| 10231 | |
| 10232 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 10233 | |
| 10234 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 10235 | |
| 10236 | _DECL_HAL_KE_IMPORT |
| 10237 | VOID |
| 10238 | FASTCALL |
| 10239 | KeAcquireInStackQueuedSpinLock( |
| 10240 | IN OUT PKSPIN_LOCK SpinLock, |
| 10241 | OUT PKLOCK_QUEUE_HANDLE LockHandle); |
| 10242 | |
| 10243 | NTKERNELAPI |
| 10244 | VOID |
| 10245 | FASTCALL |
| 10246 | KeAcquireInStackQueuedSpinLockAtDpcLevel( |
| 10247 | IN OUT PKSPIN_LOCK SpinLock, |
| 10248 | OUT PKLOCK_QUEUE_HANDLE LockHandle); |
| 10249 | |
| 10250 | NTKERNELAPI |
| 10251 | KIRQL |
| 10252 | NTAPI |
| 10253 | KeAcquireInterruptSpinLock( |
| 10254 | IN OUT PKINTERRUPT Interrupt); |
| 10255 | |
| 10256 | NTKERNELAPI |
| 10257 | BOOLEAN |
| 10258 | NTAPI |
| 10259 | KeAreApcsDisabled(VOID); |
| 10260 | |
| 10261 | NTKERNELAPI |
| 10262 | ULONG |
| 10263 | NTAPI |
| 10264 | KeGetRecommendedSharedDataAlignment(VOID); |
| 10265 | |
| 10266 | NTKERNELAPI |
| 10267 | ULONG |
| 10268 | NTAPI |
| 10269 | KeQueryRuntimeThread( |
| 10270 | IN PKTHREAD Thread, |
| 10271 | OUT PULONG UserTime); |
| 10272 | |
| 10273 | NTKERNELAPI |
| 10274 | VOID |
| 10275 | FASTCALL |
| 10276 | KeReleaseInStackQueuedSpinLockFromDpcLevel( |
| 10277 | IN PKLOCK_QUEUE_HANDLE LockHandle); |
| 10278 | |
| 10279 | NTKERNELAPI |
| 10280 | VOID |
| 10281 | NTAPI |
| 10282 | KeReleaseInterruptSpinLock( |
| 10283 | IN OUT PKINTERRUPT Interrupt, |
| 10284 | IN KIRQL OldIrql); |
| 10285 | |
| 10286 | NTKERNELAPI |
| 10287 | PKDEVICE_QUEUE_ENTRY |
| 10288 | NTAPI |
| 10289 | KeRemoveByKeyDeviceQueueIfBusy( |
| 10290 | IN OUT PKDEVICE_QUEUE DeviceQueue, |
| 10291 | IN ULONG SortKey); |
| 10292 | |
| 10293 | _DECL_HAL_KE_IMPORT |
| 10294 | VOID |
| 10295 | FASTCALL |
| 10296 | KeReleaseInStackQueuedSpinLock( |
| 10297 | IN PKLOCK_QUEUE_HANDLE LockHandle); |
| 10298 | |
| 10299 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 10300 | |
| 10301 | #if (NTDDI_VERSION >= NTDDI_WINXPSP1) |
| 10302 | |
| 10303 | NTKERNELAPI |
| 10304 | BOOLEAN |
| 10305 | NTAPI |
| 10306 | KeDeregisterBugCheckReasonCallback( |
| 10307 | IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord); |
| 10308 | |
| 10309 | NTKERNELAPI |
| 10310 | BOOLEAN |
| 10311 | NTAPI |
| 10312 | KeRegisterBugCheckReasonCallback( |
| 10313 | OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, |
| 10314 | IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, |
| 10315 | IN KBUGCHECK_CALLBACK_REASON Reason, |
| 10316 | IN PUCHAR Component); |
| 10317 | |
| 10318 | #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */ |
| 10319 | |
| 10320 | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) |
| 10321 | NTKERNELAPI |
| 10322 | VOID |
| 10323 | NTAPI |
| 10324 | KeFlushQueuedDpcs(VOID); |
| 10325 | #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ |
| 10326 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 10327 | |
| 10328 | NTKERNELAPI |
| 10329 | PVOID |
| 10330 | NTAPI |
| 10331 | KeRegisterNmiCallback( |
| 10332 | IN PNMI_CALLBACK CallbackRoutine, |
| 10333 | IN PVOID Context OPTIONAL); |
| 10334 | |
| 10335 | NTKERNELAPI |
| 10336 | NTSTATUS |
| 10337 | NTAPI |
| 10338 | KeDeregisterNmiCallback( |
| 10339 | IN PVOID Handle); |
| 10340 | |
| 10341 | NTKERNELAPI |
| 10342 | VOID |
| 10343 | NTAPI |
| 10344 | KeInitializeThreadedDpc( |
| 10345 | OUT PRKDPC Dpc, |
| 10346 | IN PKDEFERRED_ROUTINE DeferredRoutine, |
| 10347 | IN PVOID DeferredContext OPTIONAL); |
| 10348 | |
| 10349 | NTKERNELAPI |
| 10350 | ULONG_PTR |
| 10351 | NTAPI |
| 10352 | KeIpiGenericCall( |
| 10353 | IN PKIPI_BROADCAST_WORKER BroadcastFunction, |
| 10354 | IN ULONG_PTR Context); |
| 10355 | |
| 10356 | NTKERNELAPI |
| 10357 | KIRQL |
| 10358 | FASTCALL |
| 10359 | KeAcquireSpinLockForDpc( |
| 10360 | IN OUT PKSPIN_LOCK SpinLock); |
| 10361 | |
| 10362 | NTKERNELAPI |
| 10363 | VOID |
| 10364 | FASTCALL |
| 10365 | KeReleaseSpinLockForDpc( |
| 10366 | IN OUT PKSPIN_LOCK SpinLock, |
| 10367 | IN KIRQL OldIrql); |
| 10368 | |
| 10369 | NTKERNELAPI |
| 10370 | BOOLEAN |
| 10371 | FASTCALL |
| 10372 | KeTestSpinLock( |
| 10373 | IN PKSPIN_LOCK SpinLock); |
| 10374 | |
| 10375 | #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ |
| 10376 | |
| 10377 | #if (NTDDI_VERSION >= NTDDI_WS03SP1) |
| 10378 | |
| 10379 | NTKERNELAPI |
| 10380 | BOOLEAN |
| 10381 | FASTCALL |
| 10382 | KeTryToAcquireSpinLockAtDpcLevel( |
| 10383 | IN OUT PKSPIN_LOCK SpinLock); |
| 10384 | |
| 10385 | NTKERNELAPI |
| 10386 | BOOLEAN |
| 10387 | NTAPI |
| 10388 | KeAreAllApcsDisabled(VOID); |
| 10389 | |
| 10390 | NTKERNELAPI |
| 10391 | VOID |
| 10392 | FASTCALL |
| 10393 | KeAcquireGuardedMutex( |
| 10394 | IN OUT PKGUARDED_MUTEX GuardedMutex); |
| 10395 | |
| 10396 | NTKERNELAPI |
| 10397 | VOID |
| 10398 | FASTCALL |
| 10399 | KeAcquireGuardedMutexUnsafe( |
| 10400 | IN OUT PKGUARDED_MUTEX GuardedMutex); |
| 10401 | |
| 10402 | NTKERNELAPI |
| 10403 | VOID |
| 10404 | NTAPI |
| 10405 | KeEnterGuardedRegion(VOID); |
| 10406 | |
| 10407 | NTKERNELAPI |
| 10408 | VOID |
| 10409 | NTAPI |
| 10410 | KeLeaveGuardedRegion(VOID); |
| 10411 | |
| 10412 | NTKERNELAPI |
| 10413 | VOID |
| 10414 | FASTCALL |
| 10415 | KeInitializeGuardedMutex( |
| 10416 | OUT PKGUARDED_MUTEX GuardedMutex); |
| 10417 | |
| 10418 | NTKERNELAPI |
| 10419 | VOID |
| 10420 | FASTCALL |
| 10421 | KeReleaseGuardedMutexUnsafe( |
| 10422 | IN OUT PKGUARDED_MUTEX GuardedMutex); |
| 10423 | |
| 10424 | NTKERNELAPI |
| 10425 | VOID |
| 10426 | FASTCALL |
| 10427 | KeReleaseGuardedMutex( |
| 10428 | IN OUT PKGUARDED_MUTEX GuardedMutex); |
| 10429 | |
| 10430 | NTKERNELAPI |
| 10431 | BOOLEAN |
| 10432 | FASTCALL |
| 10433 | KeTryToAcquireGuardedMutex( |
| 10434 | IN OUT PKGUARDED_MUTEX GuardedMutex); |
| 10435 | #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ |
| 10436 | |
| 10437 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 10438 | NTKERNELAPI |
| 10439 | VOID |
| 10440 | FASTCALL |
| 10441 | KeAcquireInStackQueuedSpinLockForDpc( |
| 10442 | IN OUT PKSPIN_LOCK SpinLock, |
| 10443 | OUT PKLOCK_QUEUE_HANDLE LockHandle); |
| 10444 | |
| 10445 | NTKERNELAPI |
| 10446 | VOID |
| 10447 | FASTCALL |
| 10448 | KeReleaseInStackQueuedSpinLockForDpc( |
| 10449 | IN PKLOCK_QUEUE_HANDLE LockHandle); |
| 10450 | |
| 10451 | NTKERNELAPI |
| 10452 | NTSTATUS |
| 10453 | NTAPI |
| 10454 | KeQueryDpcWatchdogInformation( |
| 10455 | OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation); |
| 10456 | #if defined(SINGLE_GROUP_LEGACY_API) |
| 10457 | |
| 10458 | NTKERNELAPI |
| 10459 | KAFFINITY |
| 10460 | NTAPI |
| 10461 | KeSetSystemAffinityThreadEx( |
| 10462 | IN KAFFINITY Affinity); |
| 10463 | |
| 10464 | NTKERNELAPI |
| 10465 | VOID |
| 10466 | NTAPI |
| 10467 | KeRevertToUserAffinityThreadEx( |
| 10468 | IN KAFFINITY Affinity); |
| 10469 | |
| 10470 | NTKERNELAPI |
| 10471 | ULONG |
| 10472 | NTAPI |
| 10473 | KeQueryActiveProcessorCount( |
| 10474 | OUT PKAFFINITY ActiveProcessors OPTIONAL); |
| 10475 | |
| 10476 | NTKERNELAPI |
| 10477 | ULONG |
| 10478 | NTAPI |
| 10479 | KeQueryMaximumProcessorCount(VOID); |
| 10480 | #endif /* SINGLE_GROUP_LEGACY_API */ |
| 10481 | |
| 10482 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 10483 | |
| 10484 | #if (NTDDI_VERSION >= NTDDI_WS08) |
| 10485 | |
| 10486 | PVOID |
| 10487 | KeRegisterProcessorChangeCallback( |
| 10488 | IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction, |
| 10489 | IN PVOID CallbackContext OPTIONAL, |
| 10490 | IN ULONG Flags); |
| 10491 | |
| 10492 | VOID |
| 10493 | KeDeregisterProcessorChangeCallback( |
| 10494 | IN PVOID CallbackHandle); |
| 10495 | |
| 10496 | #endif /* (NTDDI_VERSION >= NTDDI_WS08) */ |
| 10497 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 10498 | |
| 10499 | ULONG64 |
| 10500 | NTAPI |
| 10501 | KeQueryTotalCycleTimeProcess( |
| 10502 | IN OUT PKPROCESS Process, |
| 10503 | OUT PULONG64 CycleTimeStamp); |
| 10504 | |
| 10505 | ULONG64 |
| 10506 | NTAPI |
| 10507 | KeQueryTotalCycleTimeThread( |
| 10508 | IN OUT PKTHREAD Thread, |
| 10509 | OUT PULONG64 CycleTimeStamp); |
| 10510 | |
| 10511 | NTKERNELAPI |
| 10512 | NTSTATUS |
| 10513 | NTAPI |
| 10514 | KeSetTargetProcessorDpcEx( |
| 10515 | IN OUT PKDPC Dpc, |
| 10516 | IN PPROCESSOR_NUMBER ProcNumber); |
| 10517 | |
| 10518 | NTKERNELAPI |
| 10519 | VOID |
| 10520 | NTAPI |
| 10521 | KeSetSystemGroupAffinityThread( |
| 10522 | IN PGROUP_AFFINITY Affinity, |
| 10523 | OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL); |
| 10524 | |
| 10525 | NTKERNELAPI |
| 10526 | VOID |
| 10527 | NTAPI |
| 10528 | KeRevertToUserGroupAffinityThread( |
| 10529 | IN PGROUP_AFFINITY PreviousAffinity); |
| 10530 | |
| 10531 | NTKERNELAPI |
| 10532 | BOOLEAN |
| 10533 | NTAPI |
| 10534 | KeSetCoalescableTimer( |
| 10535 | IN OUT PKTIMER Timer, |
| 10536 | IN LARGE_INTEGER DueTime, |
| 10537 | IN ULONG Period, |
| 10538 | IN ULONG TolerableDelay, |
| 10539 | IN PKDPC Dpc OPTIONAL); |
| 10540 | |
| 10541 | NTKERNELAPI |
| 10542 | ULONGLONG |
| 10543 | NTAPI |
| 10544 | KeQueryUnbiasedInterruptTime(VOID); |
| 10545 | |
| 10546 | NTKERNELAPI |
| 10547 | ULONG |
| 10548 | NTAPI |
| 10549 | KeQueryActiveProcessorCountEx( |
| 10550 | IN USHORT GroupNumber); |
| 10551 | |
| 10552 | NTKERNELAPI |
| 10553 | ULONG |
| 10554 | NTAPI |
| 10555 | KeQueryMaximumProcessorCountEx( |
| 10556 | IN USHORT GroupNumber); |
| 10557 | |
| 10558 | NTKERNELAPI |
| 10559 | USHORT |
| 10560 | NTAPI |
| 10561 | KeQueryActiveGroupCount(VOID); |
| 10562 | |
| 10563 | NTKERNELAPI |
| 10564 | USHORT |
| 10565 | NTAPI |
| 10566 | KeQueryMaximumGroupCount(VOID); |
| 10567 | |
| 10568 | NTKERNELAPI |
| 10569 | KAFFINITY |
| 10570 | NTAPI |
| 10571 | KeQueryGroupAffinity( |
| 10572 | IN USHORT GroupNumber); |
| 10573 | |
| 10574 | NTKERNELAPI |
| 10575 | ULONG |
| 10576 | NTAPI |
| 10577 | KeGetCurrentProcessorNumberEx( |
| 10578 | OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL); |
| 10579 | |
| 10580 | NTKERNELAPI |
| 10581 | VOID |
| 10582 | NTAPI |
| 10583 | KeQueryNodeActiveAffinity( |
| 10584 | IN USHORT NodeNumber, |
| 10585 | OUT PGROUP_AFFINITY Affinity OPTIONAL, |
| 10586 | OUT PUSHORT Count OPTIONAL); |
| 10587 | |
| 10588 | NTKERNELAPI |
| 10589 | USHORT |
| 10590 | NTAPI |
| 10591 | KeQueryNodeMaximumProcessorCount( |
| 10592 | IN USHORT NodeNumber); |
| 10593 | |
| 10594 | NTKERNELAPI |
| 10595 | USHORT |
| 10596 | NTAPI |
| 10597 | KeQueryHighestNodeNumber(VOID); |
| 10598 | |
| 10599 | NTKERNELAPI |
| 10600 | USHORT |
| 10601 | NTAPI |
| 10602 | KeGetCurrentNodeNumber(VOID); |
| 10603 | |
| 10604 | NTKERNELAPI |
| 10605 | NTSTATUS |
| 10606 | NTAPI |
| 10607 | KeQueryLogicalProcessorRelationship( |
| 10608 | IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, |
| 10609 | IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, |
| 10610 | OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, |
| 10611 | IN OUT PULONG Length); |
| 10612 | |
| 10613 | NTKERNELAPI |
| 10614 | NTSTATUS |
| 10615 | NTAPI |
| 10616 | KeSaveExtendedProcessorState( |
| 10617 | IN ULONG64 Mask, |
| 10618 | OUT PXSTATE_SAVE XStateSave); |
| 10619 | |
| 10620 | NTKERNELAPI |
| 10621 | VOID |
| 10622 | NTAPI |
| 10623 | KeRestoreExtendedProcessorState( |
| 10624 | IN PXSTATE_SAVE XStateSave); |
| 10625 | |
| 10626 | NTSTATUS |
| 10627 | NTAPI |
| 10628 | KeGetProcessorNumberFromIndex( |
| 10629 | IN ULONG ProcIndex, |
| 10630 | OUT PPROCESSOR_NUMBER ProcNumber); |
| 10631 | |
| 10632 | ULONG |
| 10633 | NTAPI |
| 10634 | KeGetProcessorIndexFromNumber( |
| 10635 | IN PPROCESSOR_NUMBER ProcNumber); |
| 10636 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 10637 | #if !defined(_IA64_) |
| 10638 | NTHALAPI |
| 10639 | VOID |
| 10640 | NTAPI |
| 10641 | KeFlushWriteBuffer(VOID); |
| 10642 | #endif |
| 10643 | |
| 10644 | /* VOID |
| 10645 | * KeInitializeCallbackRecord( |
| 10646 | * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) |
| 10647 | */ |
| 10648 | #define KeInitializeCallbackRecord(CallbackRecord) \ |
| 10649 | CallbackRecord->State = BufferEmpty; |
| 10650 | |
| 10651 | #if DBG |
| 10652 | |
| 10653 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 10654 | #define PAGED_ASSERT( exp ) NT_ASSERT( exp ) |
| 10655 | #else |
| 10656 | #define PAGED_ASSERT( exp ) ASSERT( exp ) |
| 10657 | #endif |
| 10658 | |
| 10659 | #define PAGED_CODE() { \ |
| 10660 | if (KeGetCurrentIrql() > APC_LEVEL) { \ |
| 10661 | KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ |
| 10662 | PAGED_ASSERT(FALSE); \ |
| 10663 | } \ |
| 10664 | } |
| 10665 | |
| 10666 | #else |
| 10667 | |
| 10668 | #define PAGED_CODE() |
| 10669 | |
| 10670 | #endif /* DBG */ |
| 10671 | |
| 10672 | #define PAGED_CODE_LOCKED() NOP_FUNCTION; |
| 10673 | |
| 10674 | /****************************************************************************** |
| 10675 | * Memory manager Functions * |
| 10676 | ******************************************************************************/ |
| 10677 | /* Alignment Macros */ |
| 10678 | #define ALIGN_DOWN_BY(size, align) \ |
| 10679 | ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1)) |
| 10680 | |
| 10681 | #define ALIGN_UP_BY(size, align) \ |
| 10682 | (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align)) |
| 10683 | |
| 10684 | #define ALIGN_DOWN_POINTER_BY(ptr, align) \ |
| 10685 | ((PVOID)ALIGN_DOWN_BY(ptr, align)) |
| 10686 | |
| 10687 | #define ALIGN_UP_POINTER_BY(ptr, align) \ |
| 10688 | ((PVOID)ALIGN_UP_BY(ptr, align)) |
| 10689 | |
| 10690 | #define ALIGN_DOWN(size, type) \ |
| 10691 | ALIGN_DOWN_BY(size, sizeof(type)) |
| 10692 | |
| 10693 | #define ALIGN_UP(size, type) \ |
| 10694 | ALIGN_UP_BY(size, sizeof(type)) |
| 10695 | |
| 10696 | #define ALIGN_DOWN_POINTER(ptr, type) \ |
| 10697 | ALIGN_DOWN_POINTER_BY(ptr, sizeof(type)) |
| 10698 | |
| 10699 | #define ALIGN_UP_POINTER(ptr, type) \ |
| 10700 | ALIGN_UP_POINTER_BY(ptr, sizeof(type)) |
| 10701 | |
| 10702 | #ifndef FIELD_OFFSET |
| 10703 | #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field)) |
| 10704 | #endif |
| 10705 | |
| 10706 | #ifndef FIELD_SIZE |
| 10707 | #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) |
| 10708 | #endif |
| 10709 | |
| 10710 | #define POOL_TAGGING 1 |
| 10711 | |
| 10712 | #if DBG |
| 10713 | #define IF_DEBUG if (TRUE) |
| 10714 | #else |
| 10715 | #define IF_DEBUG if (FALSE) |
| 10716 | #endif /* DBG */ |
| 10717 | |
| 10718 | /* ULONG |
| 10719 | * BYTE_OFFSET( |
| 10720 | * IN PVOID Va) |
| 10721 | */ |
| 10722 | #define BYTE_OFFSET(Va) \ |
| 10723 | ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) |
| 10724 | |
| 10725 | /* ULONG |
| 10726 | * BYTES_TO_PAGES( |
| 10727 | * IN ULONG Size) |
| 10728 | * |
| 10729 | * Note: This needs to be like this to avoid overflows! |
| 10730 | */ |
| 10731 | #define BYTES_TO_PAGES(Size) \ |
| 10732 | (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0)) |
| 10733 | |
| 10734 | /* PVOID |
| 10735 | * PAGE_ALIGN( |
| 10736 | * IN PVOID Va) |
| 10737 | */ |
| 10738 | #define PAGE_ALIGN(Va) \ |
| 10739 | ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) |
| 10740 | |
| 10741 | /* ULONG_PTR |
| 10742 | * ROUND_TO_PAGES( |
| 10743 | * IN ULONG_PTR Size) |
| 10744 | */ |
| 10745 | #define ROUND_TO_PAGES(Size) \ |
| 10746 | (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) |
| 10747 | |
| 10748 | /* ULONG |
| 10749 | * ADDRESS_AND_SIZE_TO_SPAN_PAGES( |
| 10750 | * IN PVOID Va, |
| 10751 | * IN ULONG Size) |
| 10752 | */ |
| 10753 | #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \ |
| 10754 | ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ |
| 10755 | + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) |
| 10756 | |
| 10757 | #define COMPUTE_PAGES_SPANNED(Va, Size) \ |
| 10758 | ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) |
| 10759 | |
| 10760 | /* |
| 10761 | * ULONG |
| 10762 | * MmGetMdlByteCount( |
| 10763 | * IN PMDL Mdl) |
| 10764 | */ |
| 10765 | #define MmGetMdlByteCount(_Mdl) \ |
| 10766 | ((_Mdl)->ByteCount) |
| 10767 | |
| 10768 | /* |
| 10769 | * ULONG |
| 10770 | * MmGetMdlByteOffset( |
| 10771 | * IN PMDL Mdl) |
| 10772 | */ |
| 10773 | #define MmGetMdlByteOffset(_Mdl) \ |
| 10774 | ((_Mdl)->ByteOffset) |
| 10775 | |
| 10776 | #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa) |
| 10777 | |
| 10778 | /* |
| 10779 | * PPFN_NUMBER |
| 10780 | * MmGetMdlPfnArray( |
| 10781 | * IN PMDL Mdl) |
| 10782 | */ |
| 10783 | #define MmGetMdlPfnArray(_Mdl) \ |
| 10784 | ((PPFN_NUMBER) ((_Mdl) + 1)) |
| 10785 | |
| 10786 | /* |
| 10787 | * PVOID |
| 10788 | * MmGetMdlVirtualAddress( |
| 10789 | * IN PMDL Mdl) |
| 10790 | */ |
| 10791 | #define MmGetMdlVirtualAddress(_Mdl) \ |
| 10792 | ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) |
| 10793 | |
| 10794 | #define MmGetProcedureAddress(Address) (Address) |
| 10795 | #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) |
| 10796 | |
| 10797 | /* PVOID MmGetSystemAddressForMdl( |
| 10798 | * IN PMDL Mdl); |
| 10799 | */ |
| 10800 | #define MmGetSystemAddressForMdl(Mdl) \ |
| 10801 | (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \ |
| 10802 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ |
| 10803 | ((Mdl)->MappedSystemVa) : \ |
| 10804 | (MmMapLockedPages((Mdl), KernelMode))) |
| 10805 | |
| 10806 | /* PVOID |
| 10807 | * MmGetSystemAddressForMdlSafe( |
| 10808 | * IN PMDL Mdl, |
| 10809 | * IN MM_PAGE_PRIORITY Priority) |
| 10810 | */ |
| 10811 | #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ |
| 10812 | (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ |
| 10813 | | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ |
| 10814 | (_Mdl)->MappedSystemVa : \ |
| 10815 | (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ |
| 10816 | KernelMode, MmCached, NULL, FALSE, (_Priority))) |
| 10817 | |
| 10818 | /* |
| 10819 | * VOID |
| 10820 | * MmInitializeMdl( |
| 10821 | * IN PMDL MemoryDescriptorList, |
| 10822 | * IN PVOID BaseVa, |
| 10823 | * IN SIZE_T Length) |
| 10824 | */ |
| 10825 | #define MmInitializeMdl(_MemoryDescriptorList, \ |
| 10826 | _BaseVa, \ |
| 10827 | _Length) \ |
| 10828 | { \ |
| 10829 | (_MemoryDescriptorList)->Next = (PMDL) NULL; \ |
| 10830 | (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ |
| 10831 | (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ |
| 10832 | (_MemoryDescriptorList)->MdlFlags = 0; \ |
| 10833 | (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ |
| 10834 | (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ |
| 10835 | (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ |
| 10836 | } |
| 10837 | |
| 10838 | /* |
| 10839 | * VOID |
| 10840 | * MmPrepareMdlForReuse( |
| 10841 | * IN PMDL Mdl) |
| 10842 | */ |
| 10843 | #define MmPrepareMdlForReuse(_Mdl) \ |
| 10844 | { \ |
| 10845 | if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ |
| 10846 | ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ |
| 10847 | MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ |
| 10848 | } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ |
| 10849 | ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ |
| 10850 | } \ |
| 10851 | } |
| 10852 | |
| 10853 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 10854 | NTKERNELAPI |
| 10855 | PVOID |
| 10856 | NTAPI |
| 10857 | MmAllocateContiguousMemory( |
| 10858 | IN SIZE_T NumberOfBytes, |
| 10859 | IN PHYSICAL_ADDRESS HighestAcceptableAddress); |
| 10860 | |
| 10861 | NTKERNELAPI |
| 10862 | PVOID |
| 10863 | NTAPI |
| 10864 | MmAllocateContiguousMemorySpecifyCache( |
| 10865 | IN SIZE_T NumberOfBytes, |
| 10866 | IN PHYSICAL_ADDRESS LowestAcceptableAddress, |
| 10867 | IN PHYSICAL_ADDRESS HighestAcceptableAddress, |
| 10868 | IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, |
| 10869 | IN MEMORY_CACHING_TYPE CacheType); |
| 10870 | |
| 10871 | NTKERNELAPI |
| 10872 | PMDL |
| 10873 | NTAPI |
| 10874 | MmAllocatePagesForMdl( |
| 10875 | IN PHYSICAL_ADDRESS LowAddress, |
| 10876 | IN PHYSICAL_ADDRESS HighAddress, |
| 10877 | IN PHYSICAL_ADDRESS SkipBytes, |
| 10878 | IN SIZE_T TotalBytes); |
| 10879 | |
| 10880 | NTKERNELAPI |
| 10881 | VOID |
| 10882 | NTAPI |
| 10883 | MmBuildMdlForNonPagedPool( |
| 10884 | IN OUT PMDLX MemoryDescriptorList); |
| 10885 | |
| 10886 | //DECLSPEC_DEPRECATED_DDK |
| 10887 | NTKERNELAPI |
| 10888 | PMDL |
| 10889 | NTAPI |
| 10890 | MmCreateMdl( |
| 10891 | IN PMDL MemoryDescriptorList OPTIONAL, |
| 10892 | IN PVOID Base, |
| 10893 | IN SIZE_T Length); |
| 10894 | |
| 10895 | NTKERNELAPI |
| 10896 | VOID |
| 10897 | NTAPI |
| 10898 | MmFreeContiguousMemory( |
| 10899 | IN PVOID BaseAddress); |
| 10900 | |
| 10901 | NTKERNELAPI |
| 10902 | VOID |
| 10903 | NTAPI |
| 10904 | MmFreeContiguousMemorySpecifyCache( |
| 10905 | IN PVOID BaseAddress, |
| 10906 | IN SIZE_T NumberOfBytes, |
| 10907 | IN MEMORY_CACHING_TYPE CacheType); |
| 10908 | |
| 10909 | NTKERNELAPI |
| 10910 | VOID |
| 10911 | NTAPI |
| 10912 | MmFreePagesFromMdl( |
| 10913 | IN PMDLX MemoryDescriptorList); |
| 10914 | |
| 10915 | NTKERNELAPI |
| 10916 | PVOID |
| 10917 | NTAPI |
| 10918 | MmGetSystemRoutineAddress( |
| 10919 | IN PUNICODE_STRING SystemRoutineName); |
| 10920 | |
| 10921 | NTKERNELAPI |
| 10922 | LOGICAL |
| 10923 | NTAPI |
| 10924 | MmIsDriverVerifying( |
| 10925 | IN struct _DRIVER_OBJECT *DriverObject); |
| 10926 | |
| 10927 | NTKERNELAPI |
| 10928 | PVOID |
| 10929 | NTAPI |
| 10930 | MmLockPagableDataSection( |
| 10931 | IN PVOID AddressWithinSection); |
| 10932 | |
| 10933 | NTKERNELAPI |
| 10934 | PVOID |
| 10935 | NTAPI |
| 10936 | MmMapIoSpace( |
| 10937 | IN PHYSICAL_ADDRESS PhysicalAddress, |
| 10938 | IN SIZE_T NumberOfBytes, |
| 10939 | IN MEMORY_CACHING_TYPE CacheEnable); |
| 10940 | |
| 10941 | NTKERNELAPI |
| 10942 | PVOID |
| 10943 | NTAPI |
| 10944 | MmMapLockedPages( |
| 10945 | IN PMDL MemoryDescriptorList, |
| 10946 | IN KPROCESSOR_MODE AccessMode); |
| 10947 | |
| 10948 | NTKERNELAPI |
| 10949 | PVOID |
| 10950 | NTAPI |
| 10951 | MmMapLockedPagesSpecifyCache( |
| 10952 | IN PMDLX MemoryDescriptorList, |
| 10953 | IN KPROCESSOR_MODE AccessMode, |
| 10954 | IN MEMORY_CACHING_TYPE CacheType, |
| 10955 | IN PVOID BaseAddress OPTIONAL, |
| 10956 | IN ULONG BugCheckOnFailure, |
| 10957 | IN MM_PAGE_PRIORITY Priority); |
| 10958 | |
| 10959 | NTKERNELAPI |
| 10960 | PVOID |
| 10961 | NTAPI |
| 10962 | MmPageEntireDriver( |
| 10963 | IN PVOID AddressWithinSection); |
| 10964 | |
| 10965 | NTKERNELAPI |
| 10966 | VOID |
| 10967 | NTAPI |
| 10968 | MmProbeAndLockPages( |
| 10969 | IN OUT PMDL MemoryDescriptorList, |
| 10970 | IN KPROCESSOR_MODE AccessMode, |
| 10971 | IN LOCK_OPERATION Operation); |
| 10972 | |
| 10973 | NTKERNELAPI |
| 10974 | MM_SYSTEMSIZE |
| 10975 | NTAPI |
| 10976 | MmQuerySystemSize(VOID); |
| 10977 | |
| 10978 | NTKERNELAPI |
| 10979 | VOID |
| 10980 | NTAPI |
| 10981 | MmResetDriverPaging( |
| 10982 | IN PVOID AddressWithinSection); |
| 10983 | |
| 10984 | NTKERNELAPI |
| 10985 | SIZE_T |
| 10986 | NTAPI |
| 10987 | MmSizeOfMdl( |
| 10988 | IN PVOID Base, |
| 10989 | IN SIZE_T Length); |
| 10990 | |
| 10991 | NTKERNELAPI |
| 10992 | VOID |
| 10993 | NTAPI |
| 10994 | MmUnlockPagableImageSection( |
| 10995 | IN PVOID ImageSectionHandle); |
| 10996 | |
| 10997 | NTKERNELAPI |
| 10998 | VOID |
| 10999 | NTAPI |
| 11000 | MmUnlockPages( |
| 11001 | IN OUT PMDL MemoryDescriptorList); |
| 11002 | |
| 11003 | NTKERNELAPI |
| 11004 | VOID |
| 11005 | NTAPI |
| 11006 | MmUnmapIoSpace( |
| 11007 | IN PVOID BaseAddress, |
| 11008 | IN SIZE_T NumberOfBytes); |
| 11009 | |
| 11010 | NTKERNELAPI |
| 11011 | VOID |
| 11012 | NTAPI |
| 11013 | MmProbeAndLockProcessPages( |
| 11014 | IN OUT PMDL MemoryDescriptorList, |
| 11015 | IN PEPROCESS Process, |
| 11016 | IN KPROCESSOR_MODE AccessMode, |
| 11017 | IN LOCK_OPERATION Operation); |
| 11018 | |
| 11019 | NTKERNELAPI |
| 11020 | VOID |
| 11021 | NTAPI |
| 11022 | MmUnmapLockedPages( |
| 11023 | IN PVOID BaseAddress, |
| 11024 | IN PMDL MemoryDescriptorList); |
| 11025 | |
| 11026 | NTKERNELAPI |
| 11027 | PVOID |
| 11028 | NTAPI |
| 11029 | MmAllocateContiguousMemorySpecifyCacheNode( |
| 11030 | IN SIZE_T NumberOfBytes, |
| 11031 | IN PHYSICAL_ADDRESS LowestAcceptableAddress, |
| 11032 | IN PHYSICAL_ADDRESS HighestAcceptableAddress, |
| 11033 | IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, |
| 11034 | IN MEMORY_CACHING_TYPE CacheType, |
| 11035 | IN NODE_REQUIREMENT PreferredNode); |
| 11036 | |
| 11037 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 11038 | |
| 11039 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 11040 | |
| 11041 | NTKERNELAPI |
| 11042 | NTSTATUS |
| 11043 | NTAPI |
| 11044 | MmAdvanceMdl( |
| 11045 | IN OUT PMDL Mdl, |
| 11046 | IN ULONG NumberOfBytes); |
| 11047 | |
| 11048 | NTKERNELAPI |
| 11049 | PVOID |
| 11050 | NTAPI |
| 11051 | MmAllocateMappingAddress( |
| 11052 | IN SIZE_T NumberOfBytes, |
| 11053 | IN ULONG PoolTag); |
| 11054 | |
| 11055 | NTKERNELAPI |
| 11056 | VOID |
| 11057 | NTAPI |
| 11058 | MmFreeMappingAddress( |
| 11059 | IN PVOID BaseAddress, |
| 11060 | IN ULONG PoolTag); |
| 11061 | |
| 11062 | NTKERNELAPI |
| 11063 | NTSTATUS |
| 11064 | NTAPI |
| 11065 | MmIsVerifierEnabled( |
| 11066 | OUT PULONG VerifierFlags); |
| 11067 | |
| 11068 | NTKERNELAPI |
| 11069 | PVOID |
| 11070 | NTAPI |
| 11071 | MmMapLockedPagesWithReservedMapping( |
| 11072 | IN PVOID MappingAddress, |
| 11073 | IN ULONG PoolTag, |
| 11074 | IN PMDL MemoryDescriptorList, |
| 11075 | IN MEMORY_CACHING_TYPE CacheType); |
| 11076 | |
| 11077 | NTKERNELAPI |
| 11078 | NTSTATUS |
| 11079 | NTAPI |
| 11080 | MmProtectMdlSystemAddress( |
| 11081 | IN PMDL MemoryDescriptorList, |
| 11082 | IN ULONG NewProtect); |
| 11083 | |
| 11084 | NTKERNELAPI |
| 11085 | VOID |
| 11086 | NTAPI |
| 11087 | MmUnmapReservedMapping( |
| 11088 | IN PVOID BaseAddress, |
| 11089 | IN ULONG PoolTag, |
| 11090 | IN PMDL MemoryDescriptorList); |
| 11091 | |
| 11092 | NTKERNELAPI |
| 11093 | NTSTATUS |
| 11094 | NTAPI |
| 11095 | MmAddVerifierThunks( |
| 11096 | IN PVOID ThunkBuffer, |
| 11097 | IN ULONG ThunkBufferSize); |
| 11098 | |
| 11099 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 11100 | |
| 11101 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 11102 | NTKERNELAPI |
| 11103 | LOGICAL |
| 11104 | NTAPI |
| 11105 | MmIsIoSpaceActive( |
| 11106 | IN PHYSICAL_ADDRESS StartAddress, |
| 11107 | IN SIZE_T NumberOfBytes); |
| 11108 | |
| 11109 | #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ |
| 11110 | #if (NTDDI_VERSION >= NTDDI_WS03SP1) |
| 11111 | NTKERNELAPI |
| 11112 | PMDL |
| 11113 | NTAPI |
| 11114 | MmAllocatePagesForMdlEx( |
| 11115 | IN PHYSICAL_ADDRESS LowAddress, |
| 11116 | IN PHYSICAL_ADDRESS HighAddress, |
| 11117 | IN PHYSICAL_ADDRESS SkipBytes, |
| 11118 | IN SIZE_T TotalBytes, |
| 11119 | IN MEMORY_CACHING_TYPE CacheType, |
| 11120 | IN ULONG Flags); |
| 11121 | #endif |
| 11122 | |
| 11123 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 11124 | NTKERNELAPI |
| 11125 | LOGICAL |
| 11126 | NTAPI |
| 11127 | MmIsDriverVerifyingByAddress( |
| 11128 | IN PVOID AddressWithinSection); |
| 11129 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 11130 | |
| 11131 | /****************************************************************************** |
| 11132 | * Security Manager Functions * |
| 11133 | ******************************************************************************/ |
| 11134 | |
| 11135 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 11136 | NTKERNELAPI |
| 11137 | BOOLEAN |
| 11138 | NTAPI |
| 11139 | SeAccessCheck( |
| 11140 | IN PSECURITY_DESCRIPTOR SecurityDescriptor, |
| 11141 | IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, |
| 11142 | IN BOOLEAN SubjectContextLocked, |
| 11143 | IN ACCESS_MASK DesiredAccess, |
| 11144 | IN ACCESS_MASK PreviouslyGrantedAccess, |
| 11145 | OUT PPRIVILEGE_SET *Privileges OPTIONAL, |
| 11146 | IN PGENERIC_MAPPING GenericMapping, |
| 11147 | IN KPROCESSOR_MODE AccessMode, |
| 11148 | OUT PACCESS_MASK GrantedAccess, |
| 11149 | OUT PNTSTATUS AccessStatus); |
| 11150 | |
| 11151 | NTKERNELAPI |
| 11152 | NTSTATUS |
| 11153 | NTAPI |
| 11154 | SeAssignSecurity( |
| 11155 | IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, |
| 11156 | IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, |
| 11157 | OUT PSECURITY_DESCRIPTOR *NewDescriptor, |
| 11158 | IN BOOLEAN IsDirectoryObject, |
| 11159 | IN PSECURITY_SUBJECT_CONTEXT SubjectContext, |
| 11160 | IN PGENERIC_MAPPING GenericMapping, |
| 11161 | IN POOL_TYPE PoolType); |
| 11162 | |
| 11163 | NTKERNELAPI |
| 11164 | NTSTATUS |
| 11165 | NTAPI |
| 11166 | SeAssignSecurityEx( |
| 11167 | IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, |
| 11168 | IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, |
| 11169 | OUT PSECURITY_DESCRIPTOR *NewDescriptor, |
| 11170 | IN GUID *ObjectType OPTIONAL, |
| 11171 | IN BOOLEAN IsDirectoryObject, |
| 11172 | IN ULONG AutoInheritFlags, |
| 11173 | IN PSECURITY_SUBJECT_CONTEXT SubjectContext, |
| 11174 | IN PGENERIC_MAPPING GenericMapping, |
| 11175 | IN POOL_TYPE PoolType); |
| 11176 | |
| 11177 | NTKERNELAPI |
| 11178 | NTSTATUS |
| 11179 | NTAPI |
| 11180 | SeDeassignSecurity( |
| 11181 | IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor); |
| 11182 | |
| 11183 | NTKERNELAPI |
| 11184 | BOOLEAN |
| 11185 | NTAPI |
| 11186 | SeValidSecurityDescriptor( |
| 11187 | IN ULONG Length, |
| 11188 | IN PSECURITY_DESCRIPTOR SecurityDescriptor); |
| 11189 | |
| 11190 | NTKERNELAPI |
| 11191 | ULONG |
| 11192 | NTAPI |
| 11193 | SeObjectCreateSaclAccessBits( |
| 11194 | IN PSECURITY_DESCRIPTOR SecurityDescriptor); |
| 11195 | |
| 11196 | NTKERNELAPI |
| 11197 | VOID |
| 11198 | NTAPI |
| 11199 | SeReleaseSubjectContext( |
| 11200 | IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext); |
| 11201 | |
| 11202 | NTKERNELAPI |
| 11203 | VOID |
| 11204 | NTAPI |
| 11205 | SeUnlockSubjectContext( |
| 11206 | IN PSECURITY_SUBJECT_CONTEXT SubjectContext); |
| 11207 | |
| 11208 | NTKERNELAPI |
| 11209 | VOID |
| 11210 | NTAPI |
| 11211 | SeCaptureSubjectContext( |
| 11212 | OUT PSECURITY_SUBJECT_CONTEXT SubjectContext); |
| 11213 | |
| 11214 | NTKERNELAPI |
| 11215 | VOID |
| 11216 | NTAPI |
| 11217 | SeLockSubjectContext( |
| 11218 | IN PSECURITY_SUBJECT_CONTEXT SubjectContext); |
| 11219 | |
| 11220 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 11221 | |
| 11222 | #if (NTDDI_VERSION >= NTDDI_WS03SP1) |
| 11223 | |
| 11224 | NTSTATUS |
| 11225 | NTAPI |
| 11226 | SeSetAuditParameter( |
| 11227 | IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters, |
| 11228 | IN SE_ADT_PARAMETER_TYPE Type, |
| 11229 | IN ULONG Index, |
| 11230 | IN PVOID Data); |
| 11231 | |
| 11232 | NTSTATUS |
| 11233 | NTAPI |
| 11234 | SeReportSecurityEvent( |
| 11235 | IN ULONG Flags, |
| 11236 | IN PUNICODE_STRING SourceName, |
| 11237 | IN PSID UserSid OPTIONAL, |
| 11238 | IN PSE_ADT_PARAMETER_ARRAY AuditParameters); |
| 11239 | |
| 11240 | #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ |
| 11241 | |
| 11242 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 11243 | NTKERNELAPI |
| 11244 | ULONG |
| 11245 | NTAPI |
| 11246 | SeComputeAutoInheritByObjectType( |
| 11247 | IN PVOID ObjectType, |
| 11248 | IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, |
| 11249 | IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL); |
| 11250 | |
| 11251 | #ifdef SE_NTFS_WORLD_CACHE |
| 11252 | VOID |
| 11253 | NTAPI |
| 11254 | SeGetWorldRights( |
| 11255 | IN PSECURITY_DESCRIPTOR SecurityDescriptor, |
| 11256 | IN PGENERIC_MAPPING GenericMapping, |
| 11257 | OUT PACCESS_MASK GrantedAccess); |
| 11258 | #endif /* SE_NTFS_WORLD_CACHE */ |
| 11259 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 11260 | |
| 11261 | /****************************************************************************** |
| 11262 | * Configuration Manager Functions * |
| 11263 | ******************************************************************************/ |
| 11264 | |
| 11265 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 11266 | NTKERNELAPI |
| 11267 | NTSTATUS |
| 11268 | NTAPI |
| 11269 | CmRegisterCallback( |
| 11270 | IN PEX_CALLBACK_FUNCTION Function, |
| 11271 | IN PVOID Context OPTIONAL, |
| 11272 | OUT PLARGE_INTEGER Cookie); |
| 11273 | |
| 11274 | NTKERNELAPI |
| 11275 | NTSTATUS |
| 11276 | NTAPI |
| 11277 | CmUnRegisterCallback( |
| 11278 | IN LARGE_INTEGER Cookie); |
| 11279 | #endif |
| 11280 | |
| 11281 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 11282 | |
| 11283 | NTKERNELAPI |
| 11284 | NTSTATUS |
| 11285 | NTAPI |
| 11286 | CmRegisterCallbackEx( |
| 11287 | PEX_CALLBACK_FUNCTION Function, |
| 11288 | PCUNICODE_STRING Altitude, |
| 11289 | PVOID Driver, |
| 11290 | PVOID Context, |
| 11291 | PLARGE_INTEGER Cookie, |
| 11292 | PVOID Reserved); |
| 11293 | |
| 11294 | NTKERNELAPI |
| 11295 | VOID |
| 11296 | NTAPI |
| 11297 | CmGetCallbackVersion( |
| 11298 | OUT PULONG Major OPTIONAL, |
| 11299 | OUT PULONG Minor OPTIONAL); |
| 11300 | |
| 11301 | NTKERNELAPI |
| 11302 | NTSTATUS |
| 11303 | NTAPI |
| 11304 | CmSetCallbackObjectContext( |
| 11305 | IN OUT PVOID Object, |
| 11306 | IN PLARGE_INTEGER Cookie, |
| 11307 | IN PVOID NewContext, |
| 11308 | OUT PVOID *OldContext OPTIONAL); |
| 11309 | |
| 11310 | NTKERNELAPI |
| 11311 | NTSTATUS |
| 11312 | NTAPI |
| 11313 | CmCallbackGetKeyObjectID( |
| 11314 | IN PLARGE_INTEGER Cookie, |
| 11315 | IN PVOID Object, |
| 11316 | OUT PULONG_PTR ObjectID OPTIONAL, |
| 11317 | OUT PCUNICODE_STRING *ObjectName OPTIONAL); |
| 11318 | |
| 11319 | NTKERNELAPI |
| 11320 | PVOID |
| 11321 | NTAPI |
| 11322 | CmGetBoundTransaction( |
| 11323 | IN PLARGE_INTEGER Cookie, |
| 11324 | IN PVOID Object); |
| 11325 | |
| 11326 | #endif // NTDDI_VERSION >= NTDDI_VISTA |
| 11327 | |
| 11328 | |
| 11329 | /****************************************************************************** |
| 11330 | * I/O Manager Functions * |
| 11331 | ******************************************************************************/ |
| 11332 | |
| 11333 | /* |
| 11334 | * NTSTATUS |
| 11335 | * IoAcquireRemoveLock( |
| 11336 | * IN PIO_REMOVE_LOCK RemoveLock, |
| 11337 | * IN OPTIONAL PVOID Tag) |
| 11338 | */ |
| 11339 | #if DBG |
| 11340 | #define IoAcquireRemoveLock(RemoveLock, Tag) \ |
| 11341 | IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK)) |
| 11342 | #else |
| 11343 | #define IoAcquireRemoveLock(RemoveLock, Tag) \ |
| 11344 | IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK)) |
| 11345 | #endif |
| 11346 | |
| 11347 | /* |
| 11348 | * VOID |
| 11349 | * IoAdjustPagingPathCount( |
| 11350 | * IN PLONG Count, |
| 11351 | * IN BOOLEAN Increment) |
| 11352 | */ |
| 11353 | #define IoAdjustPagingPathCount(_Count, \ |
| 11354 | _Increment) \ |
| 11355 | { \ |
| 11356 | if (_Increment) \ |
| 11357 | { \ |
| 11358 | InterlockedIncrement(_Count); \ |
| 11359 | } \ |
| 11360 | else \ |
| 11361 | { \ |
| 11362 | InterlockedDecrement(_Count); \ |
| 11363 | } \ |
| 11364 | } |
| 11365 | |
| 11366 | #if !defined(_M_AMD64) |
| 11367 | NTHALAPI |
| 11368 | VOID |
| 11369 | NTAPI |
| 11370 | READ_PORT_BUFFER_UCHAR( |
| 11371 | IN PUCHAR Port, |
| 11372 | IN PUCHAR Buffer, |
| 11373 | IN ULONG Count); |
| 11374 | |
| 11375 | NTHALAPI |
| 11376 | VOID |
| 11377 | NTAPI |
| 11378 | READ_PORT_BUFFER_ULONG( |
| 11379 | IN PULONG Port, |
| 11380 | IN PULONG Buffer, |
| 11381 | IN ULONG Count); |
| 11382 | |
| 11383 | NTHALAPI |
| 11384 | VOID |
| 11385 | NTAPI |
| 11386 | READ_PORT_BUFFER_USHORT( |
| 11387 | IN PUSHORT Port, |
| 11388 | IN PUSHORT Buffer, |
| 11389 | IN ULONG Count); |
| 11390 | |
| 11391 | NTHALAPI |
| 11392 | UCHAR |
| 11393 | NTAPI |
| 11394 | READ_PORT_UCHAR( |
| 11395 | IN PUCHAR Port); |
| 11396 | |
| 11397 | NTHALAPI |
| 11398 | ULONG |
| 11399 | NTAPI |
| 11400 | READ_PORT_ULONG( |
| 11401 | IN PULONG Port); |
| 11402 | |
| 11403 | NTHALAPI |
| 11404 | USHORT |
| 11405 | NTAPI |
| 11406 | READ_PORT_USHORT( |
| 11407 | IN PUSHORT Port); |
| 11408 | |
| 11409 | NTKERNELAPI |
| 11410 | VOID |
| 11411 | NTAPI |
| 11412 | READ_REGISTER_BUFFER_UCHAR( |
| 11413 | IN PUCHAR Register, |
| 11414 | IN PUCHAR Buffer, |
| 11415 | IN ULONG Count); |
| 11416 | |
| 11417 | NTKERNELAPI |
| 11418 | VOID |
| 11419 | NTAPI |
| 11420 | READ_REGISTER_BUFFER_ULONG( |
| 11421 | IN PULONG Register, |
| 11422 | IN PULONG Buffer, |
| 11423 | IN ULONG Count); |
| 11424 | |
| 11425 | NTKERNELAPI |
| 11426 | VOID |
| 11427 | NTAPI |
| 11428 | READ_REGISTER_BUFFER_USHORT( |
| 11429 | IN PUSHORT Register, |
| 11430 | IN PUSHORT Buffer, |
| 11431 | IN ULONG Count); |
| 11432 | |
| 11433 | NTKERNELAPI |
| 11434 | UCHAR |
| 11435 | NTAPI |
| 11436 | READ_REGISTER_UCHAR( |
| 11437 | IN PUCHAR Register); |
| 11438 | |
| 11439 | NTKERNELAPI |
| 11440 | ULONG |
| 11441 | NTAPI |
| 11442 | READ_REGISTER_ULONG( |
| 11443 | IN PULONG Register); |
| 11444 | |
| 11445 | NTKERNELAPI |
| 11446 | USHORT |
| 11447 | NTAPI |
| 11448 | READ_REGISTER_USHORT( |
| 11449 | IN PUSHORT Register); |
| 11450 | |
| 11451 | NTHALAPI |
| 11452 | VOID |
| 11453 | NTAPI |
| 11454 | WRITE_PORT_BUFFER_UCHAR( |
| 11455 | IN PUCHAR Port, |
| 11456 | IN PUCHAR Buffer, |
| 11457 | IN ULONG Count); |
| 11458 | |
| 11459 | NTHALAPI |
| 11460 | VOID |
| 11461 | NTAPI |
| 11462 | WRITE_PORT_BUFFER_ULONG( |
| 11463 | IN PULONG Port, |
| 11464 | IN PULONG Buffer, |
| 11465 | IN ULONG Count); |
| 11466 | |
| 11467 | NTHALAPI |
| 11468 | VOID |
| 11469 | NTAPI |
| 11470 | WRITE_PORT_BUFFER_USHORT( |
| 11471 | IN PUSHORT Port, |
| 11472 | IN PUSHORT Buffer, |
| 11473 | IN ULONG Count); |
| 11474 | |
| 11475 | NTHALAPI |
| 11476 | VOID |
| 11477 | NTAPI |
| 11478 | WRITE_PORT_UCHAR( |
| 11479 | IN PUCHAR Port, |
| 11480 | IN UCHAR Value); |
| 11481 | |
| 11482 | NTHALAPI |
| 11483 | VOID |
| 11484 | NTAPI |
| 11485 | WRITE_PORT_ULONG( |
| 11486 | IN PULONG Port, |
| 11487 | IN ULONG Value); |
| 11488 | |
| 11489 | NTHALAPI |
| 11490 | VOID |
| 11491 | NTAPI |
| 11492 | WRITE_PORT_USHORT( |
| 11493 | IN PUSHORT Port, |
| 11494 | IN USHORT Value); |
| 11495 | |
| 11496 | NTKERNELAPI |
| 11497 | VOID |
| 11498 | NTAPI |
| 11499 | WRITE_REGISTER_BUFFER_UCHAR( |
| 11500 | IN PUCHAR Register, |
| 11501 | IN PUCHAR Buffer, |
| 11502 | IN ULONG Count); |
| 11503 | |
| 11504 | NTKERNELAPI |
| 11505 | VOID |
| 11506 | NTAPI |
| 11507 | WRITE_REGISTER_BUFFER_ULONG( |
| 11508 | IN PULONG Register, |
| 11509 | IN PULONG Buffer, |
| 11510 | IN ULONG Count); |
| 11511 | |
| 11512 | NTKERNELAPI |
| 11513 | VOID |
| 11514 | NTAPI |
| 11515 | WRITE_REGISTER_BUFFER_USHORT( |
| 11516 | IN PUSHORT Register, |
| 11517 | IN PUSHORT Buffer, |
| 11518 | IN ULONG Count); |
| 11519 | |
| 11520 | NTKERNELAPI |
| 11521 | VOID |
| 11522 | NTAPI |
| 11523 | WRITE_REGISTER_UCHAR( |
| 11524 | IN PUCHAR Register, |
| 11525 | IN UCHAR Value); |
| 11526 | |
| 11527 | NTKERNELAPI |
| 11528 | VOID |
| 11529 | NTAPI |
| 11530 | WRITE_REGISTER_ULONG( |
| 11531 | IN PULONG Register, |
| 11532 | IN ULONG Value); |
| 11533 | |
| 11534 | NTKERNELAPI |
| 11535 | VOID |
| 11536 | NTAPI |
| 11537 | WRITE_REGISTER_USHORT( |
| 11538 | IN PUSHORT Register, |
| 11539 | IN USHORT Value); |
| 11540 | |
| 11541 | #else |
| 11542 | |
| 11543 | FORCEINLINE |
| 11544 | VOID |
| 11545 | READ_PORT_BUFFER_UCHAR( |
| 11546 | IN PUCHAR Port, |
| 11547 | IN PUCHAR Buffer, |
| 11548 | IN ULONG Count) |
| 11549 | { |
| 11550 | __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11551 | } |
| 11552 | |
| 11553 | FORCEINLINE |
| 11554 | VOID |
| 11555 | READ_PORT_BUFFER_ULONG( |
| 11556 | IN PULONG Port, |
| 11557 | IN PULONG Buffer, |
| 11558 | IN ULONG Count) |
| 11559 | { |
| 11560 | __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11561 | } |
| 11562 | |
| 11563 | FORCEINLINE |
| 11564 | VOID |
| 11565 | READ_PORT_BUFFER_USHORT( |
| 11566 | IN PUSHORT Port, |
| 11567 | IN PUSHORT Buffer, |
| 11568 | IN ULONG Count) |
| 11569 | { |
| 11570 | __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11571 | } |
| 11572 | |
| 11573 | FORCEINLINE |
| 11574 | UCHAR |
| 11575 | READ_PORT_UCHAR( |
| 11576 | IN PUCHAR Port) |
| 11577 | { |
| 11578 | return __inbyte((USHORT)(ULONG_PTR)Port); |
| 11579 | } |
| 11580 | |
| 11581 | FORCEINLINE |
| 11582 | ULONG |
| 11583 | READ_PORT_ULONG( |
| 11584 | IN PULONG Port) |
| 11585 | { |
| 11586 | return __indword((USHORT)(ULONG_PTR)Port); |
| 11587 | } |
| 11588 | |
| 11589 | FORCEINLINE |
| 11590 | USHORT |
| 11591 | READ_PORT_USHORT( |
| 11592 | IN PUSHORT Port) |
| 11593 | { |
| 11594 | return __inword((USHORT)(ULONG_PTR)Port); |
| 11595 | } |
| 11596 | |
| 11597 | FORCEINLINE |
| 11598 | VOID |
| 11599 | READ_REGISTER_BUFFER_UCHAR( |
| 11600 | IN PUCHAR Register, |
| 11601 | IN PUCHAR Buffer, |
| 11602 | IN ULONG Count) |
| 11603 | { |
| 11604 | __movsb(Register, Buffer, Count); |
| 11605 | } |
| 11606 | |
| 11607 | FORCEINLINE |
| 11608 | VOID |
| 11609 | READ_REGISTER_BUFFER_ULONG( |
| 11610 | IN PULONG Register, |
| 11611 | IN PULONG Buffer, |
| 11612 | IN ULONG Count) |
| 11613 | { |
| 11614 | __movsd(Register, Buffer, Count); |
| 11615 | } |
| 11616 | |
| 11617 | FORCEINLINE |
| 11618 | VOID |
| 11619 | READ_REGISTER_BUFFER_USHORT( |
| 11620 | IN PUSHORT Register, |
| 11621 | IN PUSHORT Buffer, |
| 11622 | IN ULONG Count) |
| 11623 | { |
| 11624 | __movsw(Register, Buffer, Count); |
| 11625 | } |
| 11626 | |
| 11627 | FORCEINLINE |
| 11628 | UCHAR |
| 11629 | READ_REGISTER_UCHAR( |
| 11630 | IN volatile UCHAR *Register) |
| 11631 | { |
| 11632 | return *Register; |
| 11633 | } |
| 11634 | |
| 11635 | FORCEINLINE |
| 11636 | ULONG |
| 11637 | READ_REGISTER_ULONG( |
| 11638 | IN volatile ULONG *Register) |
| 11639 | { |
| 11640 | return *Register; |
| 11641 | } |
| 11642 | |
| 11643 | FORCEINLINE |
| 11644 | USHORT |
| 11645 | READ_REGISTER_USHORT( |
| 11646 | IN volatile USHORT *Register) |
| 11647 | { |
| 11648 | return *Register; |
| 11649 | } |
| 11650 | |
| 11651 | FORCEINLINE |
| 11652 | VOID |
| 11653 | WRITE_PORT_BUFFER_UCHAR( |
| 11654 | IN PUCHAR Port, |
| 11655 | IN PUCHAR Buffer, |
| 11656 | IN ULONG Count) |
| 11657 | { |
| 11658 | __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11659 | } |
| 11660 | |
| 11661 | FORCEINLINE |
| 11662 | VOID |
| 11663 | WRITE_PORT_BUFFER_ULONG( |
| 11664 | IN PULONG Port, |
| 11665 | IN PULONG Buffer, |
| 11666 | IN ULONG Count) |
| 11667 | { |
| 11668 | __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11669 | } |
| 11670 | |
| 11671 | FORCEINLINE |
| 11672 | VOID |
| 11673 | WRITE_PORT_BUFFER_USHORT( |
| 11674 | IN PUSHORT Port, |
| 11675 | IN PUSHORT Buffer, |
| 11676 | IN ULONG Count) |
| 11677 | { |
| 11678 | __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); |
| 11679 | } |
| 11680 | |
| 11681 | FORCEINLINE |
| 11682 | VOID |
| 11683 | WRITE_PORT_UCHAR( |
| 11684 | IN PUCHAR Port, |
| 11685 | IN UCHAR Value) |
| 11686 | { |
| 11687 | __outbyte((USHORT)(ULONG_PTR)Port, Value); |
| 11688 | } |
| 11689 | |
| 11690 | FORCEINLINE |
| 11691 | VOID |
| 11692 | WRITE_PORT_ULONG( |
| 11693 | IN PULONG Port, |
| 11694 | IN ULONG Value) |
| 11695 | { |
| 11696 | __outdword((USHORT)(ULONG_PTR)Port, Value); |
| 11697 | } |
| 11698 | |
| 11699 | FORCEINLINE |
| 11700 | VOID |
| 11701 | WRITE_PORT_USHORT( |
| 11702 | IN PUSHORT Port, |
| 11703 | IN USHORT Value) |
| 11704 | { |
| 11705 | __outword((USHORT)(ULONG_PTR)Port, Value); |
| 11706 | } |
| 11707 | |
| 11708 | FORCEINLINE |
| 11709 | VOID |
| 11710 | WRITE_REGISTER_BUFFER_UCHAR( |
| 11711 | IN PUCHAR Register, |
| 11712 | IN PUCHAR Buffer, |
| 11713 | IN ULONG Count) |
| 11714 | { |
| 11715 | LONG Synch; |
| 11716 | __movsb(Register, Buffer, Count); |
| 11717 | InterlockedOr(&Synch, 1); |
| 11718 | } |
| 11719 | |
| 11720 | FORCEINLINE |
| 11721 | VOID |
| 11722 | WRITE_REGISTER_BUFFER_ULONG( |
| 11723 | IN PULONG Register, |
| 11724 | IN PULONG Buffer, |
| 11725 | IN ULONG Count) |
| 11726 | { |
| 11727 | LONG Synch; |
| 11728 | __movsd(Register, Buffer, Count); |
| 11729 | InterlockedOr(&Synch, 1); |
| 11730 | } |
| 11731 | |
| 11732 | FORCEINLINE |
| 11733 | VOID |
| 11734 | WRITE_REGISTER_BUFFER_USHORT( |
| 11735 | IN PUSHORT Register, |
| 11736 | IN PUSHORT Buffer, |
| 11737 | IN ULONG Count) |
| 11738 | { |
| 11739 | LONG Synch; |
| 11740 | __movsw(Register, Buffer, Count); |
| 11741 | InterlockedOr(&Synch, 1); |
| 11742 | } |
| 11743 | |
| 11744 | FORCEINLINE |
| 11745 | VOID |
| 11746 | WRITE_REGISTER_UCHAR( |
| 11747 | IN volatile UCHAR *Register, |
| 11748 | IN UCHAR Value) |
| 11749 | { |
| 11750 | LONG Synch; |
| 11751 | *Register = Value; |
| 11752 | InterlockedOr(&Synch, 1); |
| 11753 | } |
| 11754 | |
| 11755 | FORCEINLINE |
| 11756 | VOID |
| 11757 | WRITE_REGISTER_ULONG( |
| 11758 | IN volatile ULONG *Register, |
| 11759 | IN ULONG Value) |
| 11760 | { |
| 11761 | LONG Synch; |
| 11762 | *Register = Value; |
| 11763 | InterlockedOr(&Synch, 1); |
| 11764 | } |
| 11765 | |
| 11766 | FORCEINLINE |
| 11767 | VOID |
| 11768 | WRITE_REGISTER_USHORT( |
| 11769 | IN volatile USHORT *Register, |
| 11770 | IN USHORT Value) |
| 11771 | { |
| 11772 | LONG Sync; |
| 11773 | *Register = Value; |
| 11774 | InterlockedOr(&Sync, 1); |
| 11775 | } |
| 11776 | #endif |
| 11777 | |
| 11778 | #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \ |
| 11779 | (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) |
| 11780 | |
| 11781 | #define DMA_MACROS_DEFINED |
| 11782 | |
| 11783 | FORCEINLINE |
| 11784 | NTSTATUS |
| 11785 | IoAllocateAdapterChannel( |
| 11786 | IN PDMA_ADAPTER DmaAdapter, |
| 11787 | IN PDEVICE_OBJECT DeviceObject, |
| 11788 | IN ULONG NumberOfMapRegisters, |
| 11789 | IN PDRIVER_CONTROL ExecutionRoutine, |
| 11790 | IN PVOID Context) |
| 11791 | { |
| 11792 | PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; |
| 11793 | AllocateAdapterChannel = |
| 11794 | *(DmaAdapter)->DmaOperations->AllocateAdapterChannel; |
| 11795 | ASSERT(AllocateAdapterChannel); |
| 11796 | return AllocateAdapterChannel(DmaAdapter, |
| 11797 | DeviceObject, |
| 11798 | NumberOfMapRegisters, |
| 11799 | ExecutionRoutine, |
| 11800 | Context ); |
| 11801 | } |
| 11802 | |
| 11803 | FORCEINLINE |
| 11804 | BOOLEAN |
| 11805 | NTAPI |
| 11806 | IoFlushAdapterBuffers( |
| 11807 | IN PDMA_ADAPTER DmaAdapter, |
| 11808 | IN PMDL Mdl, |
| 11809 | IN PVOID MapRegisterBase, |
| 11810 | IN PVOID CurrentVa, |
| 11811 | IN ULONG Length, |
| 11812 | IN BOOLEAN WriteToDevice) |
| 11813 | { |
| 11814 | PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; |
| 11815 | FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers; |
| 11816 | ASSERT(FlushAdapterBuffers); |
| 11817 | return FlushAdapterBuffers(DmaAdapter, |
| 11818 | Mdl, |
| 11819 | MapRegisterBase, |
| 11820 | CurrentVa, |
| 11821 | Length, |
| 11822 | WriteToDevice); |
| 11823 | } |
| 11824 | |
| 11825 | FORCEINLINE |
| 11826 | VOID |
| 11827 | NTAPI |
| 11828 | IoFreeAdapterChannel( |
| 11829 | IN PDMA_ADAPTER DmaAdapter) |
| 11830 | { |
| 11831 | PFREE_ADAPTER_CHANNEL FreeAdapterChannel; |
| 11832 | FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; |
| 11833 | ASSERT(FreeAdapterChannel); |
| 11834 | FreeAdapterChannel(DmaAdapter); |
| 11835 | } |
| 11836 | |
| 11837 | FORCEINLINE |
| 11838 | VOID |
| 11839 | NTAPI |
| 11840 | IoFreeMapRegisters( |
| 11841 | IN PDMA_ADAPTER DmaAdapter, |
| 11842 | IN PVOID MapRegisterBase, |
| 11843 | IN ULONG NumberOfMapRegisters) |
| 11844 | { |
| 11845 | PFREE_MAP_REGISTERS FreeMapRegisters; |
| 11846 | FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters; |
| 11847 | ASSERT(FreeMapRegisters); |
| 11848 | FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters); |
| 11849 | } |
| 11850 | |
| 11851 | FORCEINLINE |
| 11852 | PHYSICAL_ADDRESS |
| 11853 | NTAPI |
| 11854 | IoMapTransfer( |
| 11855 | IN PDMA_ADAPTER DmaAdapter, |
| 11856 | IN PMDL Mdl, |
| 11857 | IN PVOID MapRegisterBase, |
| 11858 | IN PVOID CurrentVa, |
| 11859 | IN OUT PULONG Length, |
| 11860 | IN BOOLEAN WriteToDevice) |
| 11861 | { |
| 11862 | PMAP_TRANSFER MapTransfer; |
| 11863 | |
| 11864 | MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer; |
| 11865 | ASSERT(MapTransfer); |
| 11866 | return MapTransfer(DmaAdapter, |
| 11867 | Mdl, |
| 11868 | MapRegisterBase, |
| 11869 | CurrentVa, |
| 11870 | Length, |
| 11871 | WriteToDevice); |
| 11872 | } |
| 11873 | #endif |
| 11874 | |
| 11875 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 11876 | |
| 11877 | NTKERNELAPI |
| 11878 | VOID |
| 11879 | NTAPI |
| 11880 | IoAcquireCancelSpinLock( |
| 11881 | OUT PKIRQL Irql); |
| 11882 | |
| 11883 | NTKERNELAPI |
| 11884 | NTSTATUS |
| 11885 | NTAPI |
| 11886 | IoAcquireRemoveLockEx( |
| 11887 | IN PIO_REMOVE_LOCK RemoveLock, |
| 11888 | IN PVOID Tag OPTIONAL, |
| 11889 | IN PCSTR File, |
| 11890 | IN ULONG Line, |
| 11891 | IN ULONG RemlockSize); |
| 11892 | NTKERNELAPI |
| 11893 | NTSTATUS |
| 11894 | NTAPI |
| 11895 | IoAllocateDriverObjectExtension( |
| 11896 | IN PDRIVER_OBJECT DriverObject, |
| 11897 | IN PVOID ClientIdentificationAddress, |
| 11898 | IN ULONG DriverObjectExtensionSize, |
| 11899 | OUT PVOID *DriverObjectExtension); |
| 11900 | |
| 11901 | NTKERNELAPI |
| 11902 | PVOID |
| 11903 | NTAPI |
| 11904 | IoAllocateErrorLogEntry( |
| 11905 | IN PVOID IoObject, |
| 11906 | IN UCHAR EntrySize); |
| 11907 | |
| 11908 | NTKERNELAPI |
| 11909 | PIRP |
| 11910 | NTAPI |
| 11911 | IoAllocateIrp( |
| 11912 | IN CCHAR StackSize, |
| 11913 | IN BOOLEAN ChargeQuota); |
| 11914 | |
| 11915 | NTKERNELAPI |
| 11916 | PMDL |
| 11917 | NTAPI |
| 11918 | IoAllocateMdl( |
| 11919 | IN PVOID VirtualAddress OPTIONAL, |
| 11920 | IN ULONG Length, |
| 11921 | IN BOOLEAN SecondaryBuffer, |
| 11922 | IN BOOLEAN ChargeQuota, |
| 11923 | IN OUT PIRP Irp OPTIONAL); |
| 11924 | |
| 11925 | NTKERNELAPI |
| 11926 | PIO_WORKITEM |
| 11927 | NTAPI |
| 11928 | IoAllocateWorkItem( |
| 11929 | IN PDEVICE_OBJECT DeviceObject); |
| 11930 | |
| 11931 | NTKERNELAPI |
| 11932 | NTSTATUS |
| 11933 | NTAPI |
| 11934 | IoAttachDevice( |
| 11935 | IN PDEVICE_OBJECT SourceDevice, |
| 11936 | IN PUNICODE_STRING TargetDevice, |
| 11937 | OUT PDEVICE_OBJECT *AttachedDevice); |
| 11938 | |
| 11939 | NTKERNELAPI |
| 11940 | PDEVICE_OBJECT |
| 11941 | NTAPI |
| 11942 | IoAttachDeviceToDeviceStack( |
| 11943 | IN PDEVICE_OBJECT SourceDevice, |
| 11944 | IN PDEVICE_OBJECT TargetDevice); |
| 11945 | |
| 11946 | NTKERNELAPI |
| 11947 | PIRP |
| 11948 | NTAPI |
| 11949 | IoBuildAsynchronousFsdRequest( |
| 11950 | IN ULONG MajorFunction, |
| 11951 | IN PDEVICE_OBJECT DeviceObject, |
| 11952 | IN OUT PVOID Buffer OPTIONAL, |
| 11953 | IN ULONG Length OPTIONAL, |
| 11954 | IN PLARGE_INTEGER StartingOffset OPTIONAL, |
| 11955 | IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL); |
| 11956 | |
| 11957 | NTKERNELAPI |
| 11958 | PIRP |
| 11959 | NTAPI |
| 11960 | IoBuildDeviceIoControlRequest( |
| 11961 | IN ULONG IoControlCode, |
| 11962 | IN PDEVICE_OBJECT DeviceObject, |
| 11963 | IN PVOID InputBuffer OPTIONAL, |
| 11964 | IN ULONG InputBufferLength, |
| 11965 | OUT PVOID OutputBuffer OPTIONAL, |
| 11966 | IN ULONG OutputBufferLength, |
| 11967 | IN BOOLEAN InternalDeviceIoControl, |
| 11968 | IN PKEVENT Event, |
| 11969 | OUT PIO_STATUS_BLOCK IoStatusBlock); |
| 11970 | |
| 11971 | NTKERNELAPI |
| 11972 | VOID |
| 11973 | NTAPI |
| 11974 | IoBuildPartialMdl( |
| 11975 | IN PMDL SourceMdl, |
| 11976 | IN OUT PMDL TargetMdl, |
| 11977 | IN PVOID VirtualAddress, |
| 11978 | IN ULONG Length); |
| 11979 | |
| 11980 | NTKERNELAPI |
| 11981 | PIRP |
| 11982 | NTAPI |
| 11983 | IoBuildSynchronousFsdRequest( |
| 11984 | IN ULONG MajorFunction, |
| 11985 | IN PDEVICE_OBJECT DeviceObject, |
| 11986 | IN OUT PVOID Buffer OPTIONAL, |
| 11987 | IN ULONG Length OPTIONAL, |
| 11988 | IN PLARGE_INTEGER StartingOffset OPTIONAL, |
| 11989 | IN PKEVENT Event, |
| 11990 | OUT PIO_STATUS_BLOCK IoStatusBlock); |
| 11991 | |
| 11992 | NTKERNELAPI |
| 11993 | NTSTATUS |
| 11994 | FASTCALL |
| 11995 | IofCallDriver( |
| 11996 | IN PDEVICE_OBJECT DeviceObject, |
| 11997 | IN OUT PIRP Irp); |
| 11998 | #define IoCallDriver IofCallDriver |
| 11999 | |
| 12000 | NTKERNELAPI |
| 12001 | VOID |
| 12002 | FASTCALL |
| 12003 | IofCompleteRequest( |
| 12004 | IN PIRP Irp, |
| 12005 | IN CCHAR PriorityBoost); |
| 12006 | #define IoCompleteRequest IofCompleteRequest |
| 12007 | |
| 12008 | NTKERNELAPI |
| 12009 | BOOLEAN |
| 12010 | NTAPI |
| 12011 | IoCancelIrp( |
| 12012 | IN PIRP Irp); |
| 12013 | |
| 12014 | NTKERNELAPI |
| 12015 | NTSTATUS |
| 12016 | NTAPI |
| 12017 | IoCheckShareAccess( |
| 12018 | IN ACCESS_MASK DesiredAccess, |
| 12019 | IN ULONG DesiredShareAccess, |
| 12020 | IN OUT PFILE_OBJECT FileObject, |
| 12021 | IN OUT PSHARE_ACCESS ShareAccess, |
| 12022 | IN BOOLEAN Update); |
| 12023 | |
| 12024 | NTKERNELAPI |
| 12025 | VOID |
| 12026 | FASTCALL |
| 12027 | IofCompleteRequest( |
| 12028 | IN PIRP Irp, |
| 12029 | IN CCHAR PriorityBoost); |
| 12030 | |
| 12031 | NTKERNELAPI |
| 12032 | NTSTATUS |
| 12033 | NTAPI |
| 12034 | IoConnectInterrupt( |
| 12035 | OUT PKINTERRUPT *InterruptObject, |
| 12036 | IN PKSERVICE_ROUTINE ServiceRoutine, |
| 12037 | IN PVOID ServiceContext OPTIONAL, |
| 12038 | IN PKSPIN_LOCK SpinLock OPTIONAL, |
| 12039 | IN ULONG Vector, |
| 12040 | IN KIRQL Irql, |
| 12041 | IN KIRQL SynchronizeIrql, |
| 12042 | IN KINTERRUPT_MODE InterruptMode, |
| 12043 | IN BOOLEAN ShareVector, |
| 12044 | IN KAFFINITY ProcessorEnableMask, |
| 12045 | IN BOOLEAN FloatingSave); |
| 12046 | |
| 12047 | NTKERNELAPI |
| 12048 | NTSTATUS |
| 12049 | NTAPI |
| 12050 | IoCreateDevice( |
| 12051 | IN PDRIVER_OBJECT DriverObject, |
| 12052 | IN ULONG DeviceExtensionSize, |
| 12053 | IN PUNICODE_STRING DeviceName OPTIONAL, |
| 12054 | IN DEVICE_TYPE DeviceType, |
| 12055 | IN ULONG DeviceCharacteristics, |
| 12056 | IN BOOLEAN Exclusive, |
| 12057 | OUT PDEVICE_OBJECT *DeviceObject); |
| 12058 | |
| 12059 | NTKERNELAPI |
| 12060 | NTSTATUS |
| 12061 | NTAPI |
| 12062 | IoCreateFile( |
| 12063 | OUT PHANDLE FileHandle, |
| 12064 | IN ACCESS_MASK DesiredAccess, |
| 12065 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 12066 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 12067 | IN PLARGE_INTEGER AllocationSize OPTIONAL, |
| 12068 | IN ULONG FileAttributes, |
| 12069 | IN ULONG ShareAccess, |
| 12070 | IN ULONG Disposition, |
| 12071 | IN ULONG CreateOptions, |
| 12072 | IN PVOID EaBuffer OPTIONAL, |
| 12073 | IN ULONG EaLength, |
| 12074 | IN CREATE_FILE_TYPE CreateFileType, |
| 12075 | IN PVOID InternalParameters OPTIONAL, |
| 12076 | IN ULONG Options); |
| 12077 | |
| 12078 | NTKERNELAPI |
| 12079 | PKEVENT |
| 12080 | NTAPI |
| 12081 | IoCreateNotificationEvent( |
| 12082 | IN PUNICODE_STRING EventName, |
| 12083 | OUT PHANDLE EventHandle); |
| 12084 | |
| 12085 | NTKERNELAPI |
| 12086 | NTSTATUS |
| 12087 | NTAPI |
| 12088 | IoCreateSymbolicLink( |
| 12089 | IN PUNICODE_STRING SymbolicLinkName, |
| 12090 | IN PUNICODE_STRING DeviceName); |
| 12091 | |
| 12092 | NTKERNELAPI |
| 12093 | PKEVENT |
| 12094 | NTAPI |
| 12095 | IoCreateSynchronizationEvent( |
| 12096 | IN PUNICODE_STRING EventName, |
| 12097 | OUT PHANDLE EventHandle); |
| 12098 | |
| 12099 | NTKERNELAPI |
| 12100 | NTSTATUS |
| 12101 | NTAPI |
| 12102 | IoCreateUnprotectedSymbolicLink( |
| 12103 | IN PUNICODE_STRING SymbolicLinkName, |
| 12104 | IN PUNICODE_STRING DeviceName); |
| 12105 | |
| 12106 | NTKERNELAPI |
| 12107 | VOID |
| 12108 | NTAPI |
| 12109 | IoDeleteDevice( |
| 12110 | IN PDEVICE_OBJECT DeviceObject); |
| 12111 | |
| 12112 | NTKERNELAPI |
| 12113 | NTSTATUS |
| 12114 | NTAPI |
| 12115 | IoDeleteSymbolicLink( |
| 12116 | IN PUNICODE_STRING SymbolicLinkName); |
| 12117 | |
| 12118 | NTKERNELAPI |
| 12119 | VOID |
| 12120 | NTAPI |
| 12121 | IoDetachDevice( |
| 12122 | IN OUT PDEVICE_OBJECT TargetDevice); |
| 12123 | |
| 12124 | NTKERNELAPI |
| 12125 | VOID |
| 12126 | NTAPI |
| 12127 | IoDisconnectInterrupt( |
| 12128 | IN PKINTERRUPT InterruptObject); |
| 12129 | |
| 12130 | NTKERNELAPI |
| 12131 | VOID |
| 12132 | NTAPI |
| 12133 | IoFreeIrp( |
| 12134 | IN PIRP Irp); |
| 12135 | |
| 12136 | NTKERNELAPI |
| 12137 | VOID |
| 12138 | NTAPI |
| 12139 | IoFreeMdl( |
| 12140 | IN PMDL Mdl); |
| 12141 | |
| 12142 | NTKERNELAPI |
| 12143 | VOID |
| 12144 | NTAPI |
| 12145 | IoFreeWorkItem( |
| 12146 | IN PIO_WORKITEM IoWorkItem); |
| 12147 | |
| 12148 | NTKERNELAPI |
| 12149 | PDEVICE_OBJECT |
| 12150 | NTAPI |
| 12151 | IoGetAttachedDevice( |
| 12152 | IN PDEVICE_OBJECT DeviceObject); |
| 12153 | |
| 12154 | NTKERNELAPI |
| 12155 | PDEVICE_OBJECT |
| 12156 | NTAPI |
| 12157 | IoGetAttachedDeviceReference( |
| 12158 | IN PDEVICE_OBJECT DeviceObject); |
| 12159 | |
| 12160 | NTKERNELAPI |
| 12161 | NTSTATUS |
| 12162 | NTAPI |
| 12163 | IoGetBootDiskInformation( |
| 12164 | IN OUT PBOOTDISK_INFORMATION BootDiskInformation, |
| 12165 | IN ULONG Size); |
| 12166 | |
| 12167 | NTKERNELAPI |
| 12168 | NTSTATUS |
| 12169 | NTAPI |
| 12170 | IoGetDeviceInterfaceAlias( |
| 12171 | IN PUNICODE_STRING SymbolicLinkName, |
| 12172 | IN CONST GUID *AliasInterfaceClassGuid, |
| 12173 | OUT PUNICODE_STRING AliasSymbolicLinkName); |
| 12174 | |
| 12175 | NTKERNELAPI |
| 12176 | PEPROCESS |
| 12177 | NTAPI |
| 12178 | IoGetCurrentProcess(VOID); |
| 12179 | |
| 12180 | NTKERNELAPI |
| 12181 | NTSTATUS |
| 12182 | NTAPI |
| 12183 | IoGetDeviceInterfaces( |
| 12184 | IN CONST GUID *InterfaceClassGuid, |
| 12185 | IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, |
| 12186 | IN ULONG Flags, |
| 12187 | OUT PWSTR *SymbolicLinkList); |
| 12188 | |
| 12189 | NTKERNELAPI |
| 12190 | NTSTATUS |
| 12191 | NTAPI |
| 12192 | IoGetDeviceObjectPointer( |
| 12193 | IN PUNICODE_STRING ObjectName, |
| 12194 | IN ACCESS_MASK DesiredAccess, |
| 12195 | OUT PFILE_OBJECT *FileObject, |
| 12196 | OUT PDEVICE_OBJECT *DeviceObject); |
| 12197 | |
| 12198 | NTKERNELAPI |
| 12199 | NTSTATUS |
| 12200 | NTAPI |
| 12201 | IoGetDeviceProperty( |
| 12202 | IN PDEVICE_OBJECT DeviceObject, |
| 12203 | IN DEVICE_REGISTRY_PROPERTY DeviceProperty, |
| 12204 | IN ULONG BufferLength, |
| 12205 | OUT PVOID PropertyBuffer, |
| 12206 | OUT PULONG ResultLength); |
| 12207 | |
| 12208 | NTKERNELAPI |
| 12209 | PDMA_ADAPTER |
| 12210 | NTAPI |
| 12211 | IoGetDmaAdapter( |
| 12212 | IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, |
| 12213 | IN PDEVICE_DESCRIPTION DeviceDescription, |
| 12214 | IN OUT PULONG NumberOfMapRegisters); |
| 12215 | |
| 12216 | NTKERNELAPI |
| 12217 | PVOID |
| 12218 | NTAPI |
| 12219 | IoGetDriverObjectExtension( |
| 12220 | IN PDRIVER_OBJECT DriverObject, |
| 12221 | IN PVOID ClientIdentificationAddress); |
| 12222 | |
| 12223 | NTKERNELAPI |
| 12224 | PVOID |
| 12225 | NTAPI |
| 12226 | IoGetInitialStack(VOID); |
| 12227 | |
| 12228 | NTKERNELAPI |
| 12229 | PDEVICE_OBJECT |
| 12230 | NTAPI |
| 12231 | IoGetRelatedDeviceObject( |
| 12232 | IN PFILE_OBJECT FileObject); |
| 12233 | |
| 12234 | NTKERNELAPI |
| 12235 | VOID |
| 12236 | NTAPI |
| 12237 | IoQueueWorkItem( |
| 12238 | IN PIO_WORKITEM IoWorkItem, |
| 12239 | IN PIO_WORKITEM_ROUTINE WorkerRoutine, |
| 12240 | IN WORK_QUEUE_TYPE QueueType, |
| 12241 | IN PVOID Context OPTIONAL); |
| 12242 | |
| 12243 | NTKERNELAPI |
| 12244 | VOID |
| 12245 | NTAPI |
| 12246 | IoInitializeIrp( |
| 12247 | IN OUT PIRP Irp, |
| 12248 | IN USHORT PacketSize, |
| 12249 | IN CCHAR StackSize); |
| 12250 | |
| 12251 | NTKERNELAPI |
| 12252 | VOID |
| 12253 | NTAPI |
| 12254 | IoInitializeRemoveLockEx( |
| 12255 | IN PIO_REMOVE_LOCK Lock, |
| 12256 | IN ULONG AllocateTag, |
| 12257 | IN ULONG MaxLockedMinutes, |
| 12258 | IN ULONG HighWatermark, |
| 12259 | IN ULONG RemlockSize); |
| 12260 | |
| 12261 | NTKERNELAPI |
| 12262 | NTSTATUS |
| 12263 | NTAPI |
| 12264 | IoInitializeTimer( |
| 12265 | IN PDEVICE_OBJECT DeviceObject, |
| 12266 | IN PIO_TIMER_ROUTINE TimerRoutine, |
| 12267 | IN PVOID Context OPTIONAL); |
| 12268 | |
| 12269 | NTKERNELAPI |
| 12270 | VOID |
| 12271 | NTAPI |
| 12272 | IoInvalidateDeviceRelations( |
| 12273 | IN PDEVICE_OBJECT DeviceObject, |
| 12274 | IN DEVICE_RELATION_TYPE Type); |
| 12275 | |
| 12276 | NTKERNELAPI |
| 12277 | VOID |
| 12278 | NTAPI |
| 12279 | IoInvalidateDeviceState( |
| 12280 | IN PDEVICE_OBJECT PhysicalDeviceObject); |
| 12281 | |
| 12282 | NTKERNELAPI |
| 12283 | BOOLEAN |
| 12284 | NTAPI |
| 12285 | IoIsWdmVersionAvailable( |
| 12286 | IN UCHAR MajorVersion, |
| 12287 | IN UCHAR MinorVersion); |
| 12288 | |
| 12289 | NTKERNELAPI |
| 12290 | NTSTATUS |
| 12291 | NTAPI |
| 12292 | IoOpenDeviceInterfaceRegistryKey( |
| 12293 | IN PUNICODE_STRING SymbolicLinkName, |
| 12294 | IN ACCESS_MASK DesiredAccess, |
| 12295 | OUT PHANDLE DeviceInterfaceKey); |
| 12296 | |
| 12297 | NTKERNELAPI |
| 12298 | NTSTATUS |
| 12299 | NTAPI |
| 12300 | IoOpenDeviceRegistryKey( |
| 12301 | IN PDEVICE_OBJECT DeviceObject, |
| 12302 | IN ULONG DevInstKeyType, |
| 12303 | IN ACCESS_MASK DesiredAccess, |
| 12304 | OUT PHANDLE DevInstRegKey); |
| 12305 | |
| 12306 | NTKERNELAPI |
| 12307 | NTSTATUS |
| 12308 | NTAPI |
| 12309 | IoRegisterDeviceInterface( |
| 12310 | IN PDEVICE_OBJECT PhysicalDeviceObject, |
| 12311 | IN CONST GUID *InterfaceClassGuid, |
| 12312 | IN PUNICODE_STRING ReferenceString OPTIONAL, |
| 12313 | OUT PUNICODE_STRING SymbolicLinkName); |
| 12314 | |
| 12315 | NTKERNELAPI |
| 12316 | NTSTATUS |
| 12317 | NTAPI |
| 12318 | IoRegisterPlugPlayNotification( |
| 12319 | IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, |
| 12320 | IN ULONG EventCategoryFlags, |
| 12321 | IN PVOID EventCategoryData OPTIONAL, |
| 12322 | IN PDRIVER_OBJECT DriverObject, |
| 12323 | IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, |
| 12324 | IN OUT PVOID Context OPTIONAL, |
| 12325 | OUT PVOID *NotificationEntry); |
| 12326 | |
| 12327 | NTKERNELAPI |
| 12328 | NTSTATUS |
| 12329 | NTAPI |
| 12330 | IoRegisterShutdownNotification( |
| 12331 | IN PDEVICE_OBJECT DeviceObject); |
| 12332 | |
| 12333 | NTKERNELAPI |
| 12334 | VOID |
| 12335 | NTAPI |
| 12336 | IoReleaseCancelSpinLock( |
| 12337 | IN KIRQL Irql); |
| 12338 | |
| 12339 | NTKERNELAPI |
| 12340 | VOID |
| 12341 | NTAPI |
| 12342 | IoReleaseRemoveLockAndWaitEx( |
| 12343 | IN PIO_REMOVE_LOCK RemoveLock, |
| 12344 | IN PVOID Tag OPTIONAL, |
| 12345 | IN ULONG RemlockSize); |
| 12346 | |
| 12347 | NTKERNELAPI |
| 12348 | VOID |
| 12349 | NTAPI |
| 12350 | IoReleaseRemoveLockEx( |
| 12351 | IN PIO_REMOVE_LOCK RemoveLock, |
| 12352 | IN PVOID Tag OPTIONAL, |
| 12353 | IN ULONG RemlockSize); |
| 12354 | |
| 12355 | NTKERNELAPI |
| 12356 | VOID |
| 12357 | NTAPI |
| 12358 | IoRemoveShareAccess( |
| 12359 | IN PFILE_OBJECT FileObject, |
| 12360 | IN OUT PSHARE_ACCESS ShareAccess); |
| 12361 | |
| 12362 | NTKERNELAPI |
| 12363 | NTSTATUS |
| 12364 | NTAPI |
| 12365 | IoReportTargetDeviceChange( |
| 12366 | IN PDEVICE_OBJECT PhysicalDeviceObject, |
| 12367 | IN PVOID NotificationStructure); |
| 12368 | |
| 12369 | NTKERNELAPI |
| 12370 | NTSTATUS |
| 12371 | NTAPI |
| 12372 | IoReportTargetDeviceChangeAsynchronous( |
| 12373 | IN PDEVICE_OBJECT PhysicalDeviceObject, |
| 12374 | IN PVOID NotificationStructure, |
| 12375 | IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL, |
| 12376 | IN PVOID Context OPTIONAL); |
| 12377 | |
| 12378 | NTKERNELAPI |
| 12379 | VOID |
| 12380 | NTAPI |
| 12381 | IoRequestDeviceEject( |
| 12382 | IN PDEVICE_OBJECT PhysicalDeviceObject); |
| 12383 | |
| 12384 | NTKERNELAPI |
| 12385 | VOID |
| 12386 | NTAPI |
| 12387 | IoReuseIrp( |
| 12388 | IN OUT PIRP Irp, |
| 12389 | IN NTSTATUS Status); |
| 12390 | |
| 12391 | NTKERNELAPI |
| 12392 | NTSTATUS |
| 12393 | NTAPI |
| 12394 | IoSetDeviceInterfaceState( |
| 12395 | IN PUNICODE_STRING SymbolicLinkName, |
| 12396 | IN BOOLEAN Enable); |
| 12397 | |
| 12398 | NTKERNELAPI |
| 12399 | VOID |
| 12400 | NTAPI |
| 12401 | IoSetShareAccess( |
| 12402 | IN ACCESS_MASK DesiredAccess, |
| 12403 | IN ULONG DesiredShareAccess, |
| 12404 | IN OUT PFILE_OBJECT FileObject, |
| 12405 | OUT PSHARE_ACCESS ShareAccess); |
| 12406 | |
| 12407 | NTKERNELAPI |
| 12408 | VOID |
| 12409 | NTAPI |
| 12410 | IoStartNextPacket( |
| 12411 | IN PDEVICE_OBJECT DeviceObject, |
| 12412 | IN BOOLEAN Cancelable); |
| 12413 | |
| 12414 | NTKERNELAPI |
| 12415 | VOID |
| 12416 | NTAPI |
| 12417 | IoStartNextPacketByKey( |
| 12418 | IN PDEVICE_OBJECT DeviceObject, |
| 12419 | IN BOOLEAN Cancelable, |
| 12420 | IN ULONG Key); |
| 12421 | |
| 12422 | NTKERNELAPI |
| 12423 | VOID |
| 12424 | NTAPI |
| 12425 | IoStartPacket( |
| 12426 | IN PDEVICE_OBJECT DeviceObject, |
| 12427 | IN PIRP Irp, |
| 12428 | IN PULONG Key OPTIONAL, |
| 12429 | IN PDRIVER_CANCEL CancelFunction OPTIONAL); |
| 12430 | |
| 12431 | NTKERNELAPI |
| 12432 | VOID |
| 12433 | NTAPI |
| 12434 | IoStartTimer( |
| 12435 | IN PDEVICE_OBJECT DeviceObject); |
| 12436 | |
| 12437 | NTKERNELAPI |
| 12438 | VOID |
| 12439 | NTAPI |
| 12440 | IoStopTimer( |
| 12441 | IN PDEVICE_OBJECT DeviceObject); |
| 12442 | |
| 12443 | NTKERNELAPI |
| 12444 | NTSTATUS |
| 12445 | NTAPI |
| 12446 | IoUnregisterPlugPlayNotification( |
| 12447 | IN PVOID NotificationEntry); |
| 12448 | |
| 12449 | NTKERNELAPI |
| 12450 | VOID |
| 12451 | NTAPI |
| 12452 | IoUnregisterShutdownNotification( |
| 12453 | IN PDEVICE_OBJECT DeviceObject); |
| 12454 | |
| 12455 | NTKERNELAPI |
| 12456 | VOID |
| 12457 | NTAPI |
| 12458 | IoUpdateShareAccess( |
| 12459 | IN PFILE_OBJECT FileObject, |
| 12460 | IN OUT PSHARE_ACCESS ShareAccess); |
| 12461 | |
| 12462 | NTKERNELAPI |
| 12463 | NTSTATUS |
| 12464 | NTAPI |
| 12465 | IoWMIAllocateInstanceIds( |
| 12466 | IN GUID *Guid, |
| 12467 | IN ULONG InstanceCount, |
| 12468 | OUT ULONG *FirstInstanceId); |
| 12469 | |
| 12470 | NTKERNELAPI |
| 12471 | NTSTATUS |
| 12472 | NTAPI |
| 12473 | IoWMIQuerySingleInstanceMultiple( |
| 12474 | IN PVOID *DataBlockObjectList, |
| 12475 | IN PUNICODE_STRING InstanceNames, |
| 12476 | IN ULONG ObjectCount, |
| 12477 | IN OUT ULONG *InOutBufferSize, |
| 12478 | OUT PVOID OutBuffer); |
| 12479 | |
| 12480 | NTKERNELAPI |
| 12481 | NTSTATUS |
| 12482 | NTAPI |
| 12483 | IoWMIRegistrationControl( |
| 12484 | IN PDEVICE_OBJECT DeviceObject, |
| 12485 | IN ULONG Action); |
| 12486 | |
| 12487 | NTKERNELAPI |
| 12488 | NTSTATUS |
| 12489 | NTAPI |
| 12490 | IoWMISuggestInstanceName( |
| 12491 | IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, |
| 12492 | IN PUNICODE_STRING SymbolicLinkName OPTIONAL, |
| 12493 | IN BOOLEAN CombineNames, |
| 12494 | OUT PUNICODE_STRING SuggestedInstanceName); |
| 12495 | |
| 12496 | NTKERNELAPI |
| 12497 | NTSTATUS |
| 12498 | NTAPI |
| 12499 | IoWMIWriteEvent( |
| 12500 | IN OUT PVOID WnodeEventItem); |
| 12501 | |
| 12502 | NTKERNELAPI |
| 12503 | VOID |
| 12504 | NTAPI |
| 12505 | IoWriteErrorLogEntry( |
| 12506 | IN PVOID ElEntry); |
| 12507 | |
| 12508 | NTKERNELAPI |
| 12509 | PIRP |
| 12510 | NTAPI |
| 12511 | IoGetTopLevelIrp(VOID); |
| 12512 | |
| 12513 | NTKERNELAPI |
| 12514 | NTSTATUS |
| 12515 | NTAPI |
| 12516 | IoRegisterLastChanceShutdownNotification( |
| 12517 | IN PDEVICE_OBJECT DeviceObject); |
| 12518 | |
| 12519 | NTKERNELAPI |
| 12520 | VOID |
| 12521 | NTAPI |
| 12522 | IoSetTopLevelIrp( |
| 12523 | IN PIRP Irp OPTIONAL); |
| 12524 | |
| 12525 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 12526 | |
| 12527 | |
| 12528 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 12529 | |
| 12530 | NTKERNELAPI |
| 12531 | NTSTATUS |
| 12532 | NTAPI |
| 12533 | IoCsqInitialize( |
| 12534 | IN PIO_CSQ Csq, |
| 12535 | IN PIO_CSQ_INSERT_IRP CsqInsertIrp, |
| 12536 | IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, |
| 12537 | IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, |
| 12538 | IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, |
| 12539 | IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, |
| 12540 | IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); |
| 12541 | |
| 12542 | NTKERNELAPI |
| 12543 | VOID |
| 12544 | NTAPI |
| 12545 | IoCsqInsertIrp( |
| 12546 | IN PIO_CSQ Csq, |
| 12547 | IN PIRP Irp, |
| 12548 | IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL); |
| 12549 | |
| 12550 | NTKERNELAPI |
| 12551 | PIRP |
| 12552 | NTAPI |
| 12553 | IoCsqRemoveIrp( |
| 12554 | IN PIO_CSQ Csq, |
| 12555 | IN PIO_CSQ_IRP_CONTEXT Context); |
| 12556 | |
| 12557 | NTKERNELAPI |
| 12558 | PIRP |
| 12559 | NTAPI |
| 12560 | IoCsqRemoveNextIrp( |
| 12561 | IN PIO_CSQ Csq, |
| 12562 | IN PVOID PeekContext OPTIONAL); |
| 12563 | |
| 12564 | NTKERNELAPI |
| 12565 | BOOLEAN |
| 12566 | NTAPI |
| 12567 | IoForwardIrpSynchronously( |
| 12568 | IN PDEVICE_OBJECT DeviceObject, |
| 12569 | IN PIRP Irp); |
| 12570 | |
| 12571 | #define IoForwardAndCatchIrp IoForwardIrpSynchronously |
| 12572 | |
| 12573 | NTKERNELAPI |
| 12574 | VOID |
| 12575 | NTAPI |
| 12576 | IoFreeErrorLogEntry( |
| 12577 | PVOID ElEntry); |
| 12578 | |
| 12579 | NTKERNELAPI |
| 12580 | NTSTATUS |
| 12581 | NTAPI |
| 12582 | IoSetCompletionRoutineEx( |
| 12583 | IN PDEVICE_OBJECT DeviceObject, |
| 12584 | IN PIRP Irp, |
| 12585 | IN PIO_COMPLETION_ROUTINE CompletionRoutine, |
| 12586 | IN PVOID Context, |
| 12587 | IN BOOLEAN InvokeOnSuccess, |
| 12588 | IN BOOLEAN InvokeOnError, |
| 12589 | IN BOOLEAN InvokeOnCancel); |
| 12590 | |
| 12591 | VOID |
| 12592 | NTAPI |
| 12593 | IoSetStartIoAttributes( |
| 12594 | IN PDEVICE_OBJECT DeviceObject, |
| 12595 | IN BOOLEAN DeferredStartIo, |
| 12596 | IN BOOLEAN NonCancelable); |
| 12597 | |
| 12598 | NTKERNELAPI |
| 12599 | NTSTATUS |
| 12600 | NTAPI |
| 12601 | IoWMIDeviceObjectToInstanceName( |
| 12602 | IN PVOID DataBlockObject, |
| 12603 | IN PDEVICE_OBJECT DeviceObject, |
| 12604 | OUT PUNICODE_STRING InstanceName); |
| 12605 | |
| 12606 | NTKERNELAPI |
| 12607 | NTSTATUS |
| 12608 | NTAPI |
| 12609 | IoWMIExecuteMethod( |
| 12610 | IN PVOID DataBlockObject, |
| 12611 | IN PUNICODE_STRING InstanceName, |
| 12612 | IN ULONG MethodId, |
| 12613 | IN ULONG InBufferSize, |
| 12614 | IN OUT PULONG OutBufferSize, |
| 12615 | IN OUT PUCHAR InOutBuffer); |
| 12616 | |
| 12617 | NTKERNELAPI |
| 12618 | NTSTATUS |
| 12619 | NTAPI |
| 12620 | IoWMIHandleToInstanceName( |
| 12621 | IN PVOID DataBlockObject, |
| 12622 | IN HANDLE FileHandle, |
| 12623 | OUT PUNICODE_STRING InstanceName); |
| 12624 | |
| 12625 | NTKERNELAPI |
| 12626 | NTSTATUS |
| 12627 | NTAPI |
| 12628 | IoWMIOpenBlock( |
| 12629 | IN GUID *DataBlockGuid, |
| 12630 | IN ULONG DesiredAccess, |
| 12631 | OUT PVOID *DataBlockObject); |
| 12632 | |
| 12633 | NTKERNELAPI |
| 12634 | NTSTATUS |
| 12635 | NTAPI |
| 12636 | IoWMIQueryAllData( |
| 12637 | IN PVOID DataBlockObject, |
| 12638 | IN OUT ULONG *InOutBufferSize, |
| 12639 | OUT PVOID OutBuffer); |
| 12640 | |
| 12641 | NTKERNELAPI |
| 12642 | NTSTATUS |
| 12643 | NTAPI |
| 12644 | IoWMIQueryAllDataMultiple( |
| 12645 | IN PVOID *DataBlockObjectList, |
| 12646 | IN ULONG ObjectCount, |
| 12647 | IN OUT ULONG *InOutBufferSize, |
| 12648 | OUT PVOID OutBuffer); |
| 12649 | |
| 12650 | NTKERNELAPI |
| 12651 | NTSTATUS |
| 12652 | NTAPI |
| 12653 | IoWMIQuerySingleInstance( |
| 12654 | IN PVOID DataBlockObject, |
| 12655 | IN PUNICODE_STRING InstanceName, |
| 12656 | IN OUT ULONG *InOutBufferSize, |
| 12657 | OUT PVOID OutBuffer); |
| 12658 | |
| 12659 | NTKERNELAPI |
| 12660 | NTSTATUS |
| 12661 | NTAPI |
| 12662 | IoWMISetNotificationCallback( |
| 12663 | IN OUT PVOID Object, |
| 12664 | IN WMI_NOTIFICATION_CALLBACK Callback, |
| 12665 | IN PVOID Context OPTIONAL); |
| 12666 | |
| 12667 | NTKERNELAPI |
| 12668 | NTSTATUS |
| 12669 | NTAPI |
| 12670 | IoWMISetSingleInstance( |
| 12671 | IN PVOID DataBlockObject, |
| 12672 | IN PUNICODE_STRING InstanceName, |
| 12673 | IN ULONG Version, |
| 12674 | IN ULONG ValueBufferSize, |
| 12675 | IN PVOID ValueBuffer); |
| 12676 | |
| 12677 | NTKERNELAPI |
| 12678 | NTSTATUS |
| 12679 | NTAPI |
| 12680 | IoWMISetSingleItem( |
| 12681 | IN PVOID DataBlockObject, |
| 12682 | IN PUNICODE_STRING InstanceName, |
| 12683 | IN ULONG DataItemId, |
| 12684 | IN ULONG Version, |
| 12685 | IN ULONG ValueBufferSize, |
| 12686 | IN PVOID ValueBuffer); |
| 12687 | |
| 12688 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 12689 | |
| 12690 | #if (NTDDI_VERSION >= NTDDI_WINXPSP1) |
| 12691 | NTKERNELAPI |
| 12692 | NTSTATUS |
| 12693 | NTAPI |
| 12694 | IoValidateDeviceIoControlAccess( |
| 12695 | IN PIRP Irp, |
| 12696 | IN ULONG RequiredAccess); |
| 12697 | #endif |
| 12698 | |
| 12699 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 12700 | NTKERNELAPI |
| 12701 | NTSTATUS |
| 12702 | NTAPI |
| 12703 | IoCsqInitializeEx( |
| 12704 | IN PIO_CSQ Csq, |
| 12705 | IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp, |
| 12706 | IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, |
| 12707 | IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, |
| 12708 | IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, |
| 12709 | IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, |
| 12710 | IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); |
| 12711 | |
| 12712 | NTKERNELAPI |
| 12713 | NTSTATUS |
| 12714 | NTAPI |
| 12715 | IoCsqInsertIrpEx( |
| 12716 | IN PIO_CSQ Csq, |
| 12717 | IN PIRP Irp, |
| 12718 | IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL, |
| 12719 | IN PVOID InsertContext OPTIONAL); |
| 12720 | #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ |
| 12721 | |
| 12722 | |
| 12723 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 12724 | NTKERNELAPI |
| 12725 | NTSTATUS |
| 12726 | NTAPI |
| 12727 | IoGetBootDiskInformationLite( |
| 12728 | OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation); |
| 12729 | |
| 12730 | NTKERNELAPI |
| 12731 | NTSTATUS |
| 12732 | NTAPI |
| 12733 | IoCheckShareAccessEx( |
| 12734 | IN ACCESS_MASK DesiredAccess, |
| 12735 | IN ULONG DesiredShareAccess, |
| 12736 | IN OUT PFILE_OBJECT FileObject, |
| 12737 | IN OUT PSHARE_ACCESS ShareAccess, |
| 12738 | IN BOOLEAN Update, |
| 12739 | IN PBOOLEAN WritePermission); |
| 12740 | |
| 12741 | NTKERNELAPI |
| 12742 | NTSTATUS |
| 12743 | NTAPI |
| 12744 | IoConnectInterruptEx( |
| 12745 | IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters); |
| 12746 | |
| 12747 | NTKERNELAPI |
| 12748 | VOID |
| 12749 | NTAPI |
| 12750 | IoDisconnectInterruptEx( |
| 12751 | IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters); |
| 12752 | |
| 12753 | LOGICAL |
| 12754 | NTAPI |
| 12755 | IoWithinStackLimits( |
| 12756 | IN ULONG_PTR RegionStart, |
| 12757 | IN SIZE_T RegionSize); |
| 12758 | |
| 12759 | NTKERNELAPI |
| 12760 | VOID |
| 12761 | NTAPI |
| 12762 | IoSetShareAccessEx( |
| 12763 | IN ACCESS_MASK DesiredAccess, |
| 12764 | IN ULONG DesiredShareAccess, |
| 12765 | IN OUT PFILE_OBJECT FileObject, |
| 12766 | OUT PSHARE_ACCESS ShareAccess, |
| 12767 | IN PBOOLEAN WritePermission); |
| 12768 | |
| 12769 | ULONG |
| 12770 | NTAPI |
| 12771 | IoSizeofWorkItem(VOID); |
| 12772 | |
| 12773 | VOID |
| 12774 | NTAPI |
| 12775 | IoInitializeWorkItem( |
| 12776 | IN PVOID IoObject, |
| 12777 | IN PIO_WORKITEM IoWorkItem); |
| 12778 | |
| 12779 | VOID |
| 12780 | NTAPI |
| 12781 | IoUninitializeWorkItem( |
| 12782 | IN PIO_WORKITEM IoWorkItem); |
| 12783 | |
| 12784 | VOID |
| 12785 | NTAPI |
| 12786 | IoQueueWorkItemEx( |
| 12787 | IN PIO_WORKITEM IoWorkItem, |
| 12788 | IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine, |
| 12789 | IN WORK_QUEUE_TYPE QueueType, |
| 12790 | IN PVOID Context OPTIONAL); |
| 12791 | |
| 12792 | IO_PRIORITY_HINT |
| 12793 | NTAPI |
| 12794 | IoGetIoPriorityHint( |
| 12795 | IN PIRP Irp); |
| 12796 | |
| 12797 | NTSTATUS |
| 12798 | NTAPI |
| 12799 | IoSetIoPriorityHint( |
| 12800 | IN PIRP Irp, |
| 12801 | IN IO_PRIORITY_HINT PriorityHint); |
| 12802 | |
| 12803 | NTSTATUS |
| 12804 | NTAPI |
| 12805 | IoAllocateSfioStreamIdentifier( |
| 12806 | IN PFILE_OBJECT FileObject, |
| 12807 | IN ULONG Length, |
| 12808 | IN PVOID Signature, |
| 12809 | OUT PVOID *StreamIdentifier); |
| 12810 | |
| 12811 | PVOID |
| 12812 | NTAPI |
| 12813 | IoGetSfioStreamIdentifier( |
| 12814 | IN PFILE_OBJECT FileObject, |
| 12815 | IN PVOID Signature); |
| 12816 | |
| 12817 | NTSTATUS |
| 12818 | NTAPI |
| 12819 | IoFreeSfioStreamIdentifier( |
| 12820 | IN PFILE_OBJECT FileObject, |
| 12821 | IN PVOID Signature); |
| 12822 | |
| 12823 | NTKERNELAPI |
| 12824 | NTSTATUS |
| 12825 | NTAPI |
| 12826 | IoRequestDeviceEjectEx( |
| 12827 | IN PDEVICE_OBJECT PhysicalDeviceObject, |
| 12828 | IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL, |
| 12829 | IN PVOID Context OPTIONAL, |
| 12830 | IN PDRIVER_OBJECT DriverObject OPTIONAL); |
| 12831 | |
| 12832 | NTKERNELAPI |
| 12833 | NTSTATUS |
| 12834 | NTAPI |
| 12835 | IoSetDevicePropertyData( |
| 12836 | IN PDEVICE_OBJECT Pdo, |
| 12837 | IN CONST DEVPROPKEY *PropertyKey, |
| 12838 | IN LCID Lcid, |
| 12839 | IN ULONG Flags, |
| 12840 | IN DEVPROPTYPE Type, |
| 12841 | IN ULONG Size, |
| 12842 | IN PVOID Data OPTIONAL); |
| 12843 | |
| 12844 | NTKERNELAPI |
| 12845 | NTSTATUS |
| 12846 | NTAPI |
| 12847 | IoGetDevicePropertyData( |
| 12848 | PDEVICE_OBJECT Pdo, |
| 12849 | CONST DEVPROPKEY *PropertyKey, |
| 12850 | LCID Lcid, |
| 12851 | ULONG Flags, |
| 12852 | ULONG Size, |
| 12853 | PVOID Data, |
| 12854 | PULONG RequiredSize, |
| 12855 | PDEVPROPTYPE Type); |
| 12856 | |
| 12857 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 12858 | |
| 12859 | #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b) |
| 12860 | |
| 12861 | #if (NTDDI_VERSION >= NTDDI_WS08) |
| 12862 | NTKERNELAPI |
| 12863 | NTSTATUS |
| 12864 | NTAPI |
| 12865 | IoReplacePartitionUnit( |
| 12866 | IN PDEVICE_OBJECT TargetPdo, |
| 12867 | IN PDEVICE_OBJECT SparePdo, |
| 12868 | IN ULONG Flags); |
| 12869 | #endif |
| 12870 | |
| 12871 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 12872 | |
| 12873 | NTKERNELAPI |
| 12874 | NTSTATUS |
| 12875 | NTAPI |
| 12876 | IoGetAffinityInterrupt( |
| 12877 | IN PKINTERRUPT InterruptObject, |
| 12878 | OUT PGROUP_AFFINITY GroupAffinity); |
| 12879 | |
| 12880 | NTSTATUS |
| 12881 | NTAPI |
| 12882 | IoGetContainerInformation( |
| 12883 | IN IO_CONTAINER_INFORMATION_CLASS InformationClass, |
| 12884 | IN PVOID ContainerObject OPTIONAL, |
| 12885 | IN OUT PVOID Buffer OPTIONAL, |
| 12886 | IN ULONG BufferLength); |
| 12887 | |
| 12888 | NTSTATUS |
| 12889 | NTAPI |
| 12890 | IoRegisterContainerNotification( |
| 12891 | IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass, |
| 12892 | IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction, |
| 12893 | IN PVOID NotificationInformation OPTIONAL, |
| 12894 | IN ULONG NotificationInformationLength, |
| 12895 | OUT PVOID CallbackRegistration); |
| 12896 | |
| 12897 | VOID |
| 12898 | NTAPI |
| 12899 | IoUnregisterContainerNotification( |
| 12900 | IN PVOID CallbackRegistration); |
| 12901 | |
| 12902 | NTKERNELAPI |
| 12903 | NTSTATUS |
| 12904 | NTAPI |
| 12905 | IoUnregisterPlugPlayNotificationEx( |
| 12906 | IN PVOID NotificationEntry); |
| 12907 | |
| 12908 | NTKERNELAPI |
| 12909 | NTSTATUS |
| 12910 | NTAPI |
| 12911 | IoGetDeviceNumaNode( |
| 12912 | IN PDEVICE_OBJECT Pdo, |
| 12913 | OUT PUSHORT NodeNumber); |
| 12914 | |
| 12915 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 12916 | |
| 12917 | #if defined(_WIN64) |
| 12918 | NTKERNELAPI |
| 12919 | ULONG |
| 12920 | NTAPI |
| 12921 | IoWMIDeviceObjectToProviderId( |
| 12922 | IN PDEVICE_OBJECT DeviceObject); |
| 12923 | #else |
| 12924 | #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject)) |
| 12925 | #endif |
| 12926 | |
| 12927 | /* |
| 12928 | * USHORT |
| 12929 | * IoSizeOfIrp( |
| 12930 | * IN CCHAR StackSize) |
| 12931 | */ |
| 12932 | #define IoSizeOfIrp(_StackSize) \ |
| 12933 | ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION))))) |
| 12934 | |
| 12935 | FORCEINLINE |
| 12936 | VOID |
| 12937 | IoSkipCurrentIrpStackLocation( |
| 12938 | IN OUT PIRP Irp) |
| 12939 | { |
| 12940 | ASSERT(Irp->CurrentLocation <= Irp->StackCount); |
| 12941 | Irp->CurrentLocation++; |
| 12942 | #ifdef NONAMELESSUNION |
| 12943 | Irp->Tail.Overlay.s.u.CurrentStackLocation++; |
| 12944 | #else |
| 12945 | Irp->Tail.Overlay.CurrentStackLocation++; |
| 12946 | #endif |
| 12947 | } |
| 12948 | |
| 12949 | FORCEINLINE |
| 12950 | VOID |
| 12951 | IoSetNextIrpStackLocation( |
| 12952 | IN OUT PIRP Irp) |
| 12953 | { |
| 12954 | ASSERT(Irp->CurrentLocation > 0); |
| 12955 | Irp->CurrentLocation--; |
| 12956 | #ifdef NONAMELESSUNION |
| 12957 | Irp->Tail.Overlay.s.u.CurrentStackLocation--; |
| 12958 | #else |
| 12959 | Irp->Tail.Overlay.CurrentStackLocation--; |
| 12960 | #endif |
| 12961 | } |
| 12962 | |
| 12963 | FORCEINLINE |
| 12964 | PIO_STACK_LOCATION |
| 12965 | IoGetNextIrpStackLocation( |
| 12966 | IN PIRP Irp) |
| 12967 | { |
| 12968 | ASSERT(Irp->CurrentLocation > 0); |
| 12969 | #ifdef NONAMELESSUNION |
| 12970 | return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 ); |
| 12971 | #else |
| 12972 | return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 ); |
| 12973 | #endif |
| 12974 | } |
| 12975 | |
| 12976 | FORCEINLINE |
| 12977 | VOID |
| 12978 | IoSetCompletionRoutine( |
| 12979 | IN PIRP Irp, |
| 12980 | IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, |
| 12981 | IN PVOID Context OPTIONAL, |
| 12982 | IN BOOLEAN InvokeOnSuccess, |
| 12983 | IN BOOLEAN InvokeOnError, |
| 12984 | IN BOOLEAN InvokeOnCancel) |
| 12985 | { |
| 12986 | PIO_STACK_LOCATION irpSp; |
| 12987 | ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE ); |
| 12988 | irpSp = IoGetNextIrpStackLocation(Irp); |
| 12989 | irpSp->CompletionRoutine = CompletionRoutine; |
| 12990 | irpSp->Context = Context; |
| 12991 | irpSp->Control = 0; |
| 12992 | |
| 12993 | if (InvokeOnSuccess) { |
| 12994 | irpSp->Control = SL_INVOKE_ON_SUCCESS; |
| 12995 | } |
| 12996 | |
| 12997 | if (InvokeOnError) { |
| 12998 | irpSp->Control |= SL_INVOKE_ON_ERROR; |
| 12999 | } |
| 13000 | |
| 13001 | if (InvokeOnCancel) { |
| 13002 | irpSp->Control |= SL_INVOKE_ON_CANCEL; |
| 13003 | } |
| 13004 | } |
| 13005 | |
| 13006 | /* |
| 13007 | * PDRIVER_CANCEL |
| 13008 | * IoSetCancelRoutine( |
| 13009 | * IN PIRP Irp, |
| 13010 | * IN PDRIVER_CANCEL CancelRoutine) |
| 13011 | */ |
| 13012 | #define IoSetCancelRoutine(_Irp, \ |
| 13013 | _CancelRoutine) \ |
| 13014 | ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \ |
| 13015 | (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine))) |
| 13016 | |
| 13017 | /* |
| 13018 | * VOID |
| 13019 | * IoRequestDpc( |
| 13020 | * IN PDEVICE_OBJECT DeviceObject, |
| 13021 | * IN PIRP Irp, |
| 13022 | * IN PVOID Context); |
| 13023 | */ |
| 13024 | #define IoRequestDpc(DeviceObject, Irp, Context)( \ |
| 13025 | KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context))) |
| 13026 | |
| 13027 | /* |
| 13028 | * VOID |
| 13029 | * IoReleaseRemoveLock( |
| 13030 | * IN PIO_REMOVE_LOCK RemoveLock, |
| 13031 | * IN PVOID Tag) |
| 13032 | */ |
| 13033 | #define IoReleaseRemoveLock(_RemoveLock, \ |
| 13034 | _Tag) \ |
| 13035 | IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) |
| 13036 | |
| 13037 | /* |
| 13038 | * VOID |
| 13039 | * IoReleaseRemoveLockAndWait( |
| 13040 | * IN PIO_REMOVE_LOCK RemoveLock, |
| 13041 | * IN PVOID Tag) |
| 13042 | */ |
| 13043 | #define IoReleaseRemoveLockAndWait(_RemoveLock, \ |
| 13044 | _Tag) \ |
| 13045 | IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) |
| 13046 | |
| 13047 | #if defined(_WIN64) |
| 13048 | NTKERNELAPI |
| 13049 | BOOLEAN |
| 13050 | IoIs32bitProcess( |
| 13051 | IN PIRP Irp OPTIONAL); |
| 13052 | #endif |
| 13053 | |
| 13054 | #define PLUGPLAY_REGKEY_DEVICE 1 |
| 13055 | #define PLUGPLAY_REGKEY_DRIVER 2 |
| 13056 | #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 |
| 13057 | |
| 13058 | FORCEINLINE |
| 13059 | PIO_STACK_LOCATION |
| 13060 | IoGetCurrentIrpStackLocation( |
| 13061 | IN PIRP Irp) |
| 13062 | { |
| 13063 | ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1); |
| 13064 | #ifdef NONAMELESSUNION |
| 13065 | return Irp->Tail.Overlay.s.u.CurrentStackLocation; |
| 13066 | #else |
| 13067 | return Irp->Tail.Overlay.CurrentStackLocation; |
| 13068 | #endif |
| 13069 | } |
| 13070 | |
| 13071 | FORCEINLINE |
| 13072 | VOID |
| 13073 | IoMarkIrpPending( |
| 13074 | IN OUT PIRP Irp) |
| 13075 | { |
| 13076 | IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED; |
| 13077 | } |
| 13078 | |
| 13079 | /* |
| 13080 | * BOOLEAN |
| 13081 | * IoIsErrorUserInduced( |
| 13082 | * IN NTSTATUS Status); |
| 13083 | */ |
| 13084 | #define IoIsErrorUserInduced(Status) \ |
| 13085 | ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \ |
| 13086 | ((Status) == STATUS_IO_TIMEOUT) || \ |
| 13087 | ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ |
| 13088 | ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ |
| 13089 | ((Status) == STATUS_VERIFY_REQUIRED) || \ |
| 13090 | ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ |
| 13091 | ((Status) == STATUS_WRONG_VOLUME))) |
| 13092 | |
| 13093 | /* VOID |
| 13094 | * IoInitializeRemoveLock( |
| 13095 | * IN PIO_REMOVE_LOCK Lock, |
| 13096 | * IN ULONG AllocateTag, |
| 13097 | * IN ULONG MaxLockedMinutes, |
| 13098 | * IN ULONG HighWatermark) |
| 13099 | */ |
| 13100 | #define IoInitializeRemoveLock( \ |
| 13101 | Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ |
| 13102 | IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ |
| 13103 | HighWatermark, sizeof(IO_REMOVE_LOCK)) |
| 13104 | |
| 13105 | FORCEINLINE |
| 13106 | VOID |
| 13107 | IoInitializeDpcRequest( |
| 13108 | IN PDEVICE_OBJECT DeviceObject, |
| 13109 | IN PIO_DPC_ROUTINE DpcRoutine) |
| 13110 | { |
| 13111 | KeInitializeDpc( &DeviceObject->Dpc, |
| 13112 | (PKDEFERRED_ROUTINE) DpcRoutine, |
| 13113 | DeviceObject ); |
| 13114 | } |
| 13115 | |
| 13116 | #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 |
| 13117 | |
| 13118 | /* |
| 13119 | * ULONG |
| 13120 | * IoGetFunctionCodeFromCtlCode( |
| 13121 | * IN ULONG ControlCode) |
| 13122 | */ |
| 13123 | #define IoGetFunctionCodeFromCtlCode(_ControlCode) \ |
| 13124 | (((_ControlCode) >> 2) & 0x00000FFF) |
| 13125 | |
| 13126 | FORCEINLINE |
| 13127 | VOID |
| 13128 | IoCopyCurrentIrpStackLocationToNext( |
| 13129 | IN OUT PIRP Irp) |
| 13130 | { |
| 13131 | PIO_STACK_LOCATION irpSp; |
| 13132 | PIO_STACK_LOCATION nextIrpSp; |
| 13133 | irpSp = IoGetCurrentIrpStackLocation(Irp); |
| 13134 | nextIrpSp = IoGetNextIrpStackLocation(Irp); |
| 13135 | RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); |
| 13136 | nextIrpSp->Control = 0; |
| 13137 | } |
| 13138 | |
| 13139 | NTKERNELAPI |
| 13140 | VOID |
| 13141 | NTAPI |
| 13142 | IoGetStackLimits( |
| 13143 | OUT PULONG_PTR LowLimit, |
| 13144 | OUT PULONG_PTR HighLimit); |
| 13145 | |
| 13146 | FORCEINLINE |
| 13147 | ULONG_PTR |
| 13148 | IoGetRemainingStackSize(VOID) |
| 13149 | { |
| 13150 | ULONG_PTR End, Begin; |
| 13151 | ULONG_PTR Result; |
| 13152 | |
| 13153 | IoGetStackLimits(&Begin, &End); |
| 13154 | Result = (ULONG_PTR)(&End) - Begin; |
| 13155 | return Result; |
| 13156 | } |
| 13157 | |
| 13158 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 13159 | FORCEINLINE |
| 13160 | VOID |
| 13161 | IoInitializeThreadedDpcRequest( |
| 13162 | IN PDEVICE_OBJECT DeviceObject, |
| 13163 | IN PIO_DPC_ROUTINE DpcRoutine) |
| 13164 | { |
| 13165 | KeInitializeThreadedDpc(&DeviceObject->Dpc, |
| 13166 | (PKDEFERRED_ROUTINE) DpcRoutine, |
| 13167 | DeviceObject ); |
| 13168 | } |
| 13169 | #endif |
| 13170 | |
| 13171 | /****************************************************************************** |
| 13172 | * Power Management Support Functions * |
| 13173 | ******************************************************************************/ |
| 13174 | |
| 13175 | #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0)) |
| 13176 | |
| 13177 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 13178 | |
| 13179 | NTKERNELAPI |
| 13180 | NTSTATUS |
| 13181 | NTAPI |
| 13182 | PoCallDriver( |
| 13183 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 13184 | IN OUT struct _IRP *Irp); |
| 13185 | |
| 13186 | NTKERNELAPI |
| 13187 | PULONG |
| 13188 | NTAPI |
| 13189 | PoRegisterDeviceForIdleDetection( |
| 13190 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 13191 | IN ULONG ConservationIdleTime, |
| 13192 | IN ULONG PerformanceIdleTime, |
| 13193 | IN DEVICE_POWER_STATE State); |
| 13194 | |
| 13195 | NTKERNELAPI |
| 13196 | PVOID |
| 13197 | NTAPI |
| 13198 | PoRegisterSystemState( |
| 13199 | IN OUT PVOID StateHandle OPTIONAL, |
| 13200 | IN EXECUTION_STATE Flags); |
| 13201 | |
| 13202 | NTKERNELAPI |
| 13203 | NTSTATUS |
| 13204 | NTAPI |
| 13205 | PoRequestPowerIrp( |
| 13206 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 13207 | IN UCHAR MinorFunction, |
| 13208 | IN POWER_STATE PowerState, |
| 13209 | IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL, |
| 13210 | IN PVOID Context OPTIONAL, |
| 13211 | OUT struct _IRP **Irp OPTIONAL); |
| 13212 | |
| 13213 | NTKERNELAPI |
| 13214 | POWER_STATE |
| 13215 | NTAPI |
| 13216 | PoSetPowerState( |
| 13217 | IN struct _DEVICE_OBJECT *DeviceObject, |
| 13218 | IN POWER_STATE_TYPE Type, |
| 13219 | IN POWER_STATE State); |
| 13220 | |
| 13221 | NTKERNELAPI |
| 13222 | VOID |
| 13223 | NTAPI |
| 13224 | PoSetSystemState( |
| 13225 | IN EXECUTION_STATE Flags); |
| 13226 | |
| 13227 | NTKERNELAPI |
| 13228 | VOID |
| 13229 | NTAPI |
| 13230 | PoStartNextPowerIrp( |
| 13231 | IN OUT struct _IRP *Irp); |
| 13232 | |
| 13233 | NTKERNELAPI |
| 13234 | VOID |
| 13235 | NTAPI |
| 13236 | PoUnregisterSystemState( |
| 13237 | IN OUT PVOID StateHandle); |
| 13238 | |
| 13239 | NTKERNELAPI |
| 13240 | NTSTATUS |
| 13241 | NTAPI |
| 13242 | PoRequestShutdownEvent( |
| 13243 | OUT PVOID *Event); |
| 13244 | |
| 13245 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 13246 | |
| 13247 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 13248 | |
| 13249 | NTKERNELAPI |
| 13250 | VOID |
| 13251 | NTAPI |
| 13252 | PoSetSystemWake( |
| 13253 | IN OUT struct _IRP *Irp); |
| 13254 | |
| 13255 | NTKERNELAPI |
| 13256 | BOOLEAN |
| 13257 | NTAPI |
| 13258 | PoGetSystemWake( |
| 13259 | IN struct _IRP *Irp); |
| 13260 | |
| 13261 | NTKERNELAPI |
| 13262 | NTSTATUS |
| 13263 | NTAPI |
| 13264 | PoRegisterPowerSettingCallback( |
| 13265 | IN PDEVICE_OBJECT DeviceObject OPTIONAL, |
| 13266 | IN LPCGUID SettingGuid, |
| 13267 | IN PPOWER_SETTING_CALLBACK Callback, |
| 13268 | IN PVOID Context OPTIONAL, |
| 13269 | OUT PVOID *Handle OPTIONAL); |
| 13270 | |
| 13271 | NTKERNELAPI |
| 13272 | NTSTATUS |
| 13273 | NTAPI |
| 13274 | PoUnregisterPowerSettingCallback( |
| 13275 | IN OUT PVOID Handle); |
| 13276 | |
| 13277 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 13278 | |
| 13279 | #if (NTDDI_VERSION >= NTDDI_VISTASP1) |
| 13280 | NTKERNELAPI |
| 13281 | VOID |
| 13282 | NTAPI |
| 13283 | PoSetDeviceBusyEx( |
| 13284 | IN OUT PULONG IdlePointer); |
| 13285 | #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ |
| 13286 | |
| 13287 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 13288 | |
| 13289 | NTKERNELAPI |
| 13290 | VOID |
| 13291 | NTAPI |
| 13292 | PoStartDeviceBusy( |
| 13293 | IN OUT PULONG IdlePointer); |
| 13294 | |
| 13295 | NTKERNELAPI |
| 13296 | VOID |
| 13297 | NTAPI |
| 13298 | PoEndDeviceBusy( |
| 13299 | IN OUT PULONG IdlePointer); |
| 13300 | |
| 13301 | NTKERNELAPI |
| 13302 | BOOLEAN |
| 13303 | NTAPI |
| 13304 | PoQueryWatchdogTime( |
| 13305 | IN PDEVICE_OBJECT Pdo, |
| 13306 | OUT PULONG SecondsRemaining); |
| 13307 | |
| 13308 | NTKERNELAPI |
| 13309 | VOID |
| 13310 | NTAPI |
| 13311 | PoDeletePowerRequest( |
| 13312 | IN OUT PVOID PowerRequest); |
| 13313 | |
| 13314 | NTKERNELAPI |
| 13315 | NTSTATUS |
| 13316 | NTAPI |
| 13317 | PoSetPowerRequest( |
| 13318 | IN OUT PVOID PowerRequest, |
| 13319 | IN POWER_REQUEST_TYPE Type); |
| 13320 | |
| 13321 | NTKERNELAPI |
| 13322 | NTSTATUS |
| 13323 | NTAPI |
| 13324 | PoClearPowerRequest( |
| 13325 | IN OUT PVOID PowerRequest, |
| 13326 | IN POWER_REQUEST_TYPE Type); |
| 13327 | |
| 13328 | NTKERNELAPI |
| 13329 | NTSTATUS |
| 13330 | NTAPI |
| 13331 | PoCreatePowerRequest( |
| 13332 | OUT PVOID *PowerRequest, |
| 13333 | IN PDEVICE_OBJECT DeviceObject, |
| 13334 | IN PCOUNTED_REASON_CONTEXT Context); |
| 13335 | |
| 13336 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 13337 | |
| 13338 | /****************************************************************************** |
| 13339 | * Executive Functions * |
| 13340 | ******************************************************************************/ |
| 13341 | |
| 13342 | #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend) |
| 13343 | #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend) |
| 13344 | #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value) |
| 13345 | |
| 13346 | #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) |
| 13347 | #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) |
| 13348 | #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) |
| 13349 | #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) |
| 13350 | |
| 13351 | #define ExInitializeSListHead InitializeSListHead |
| 13352 | |
| 13353 | #if defined(_NTHAL_) && defined(_X86_) |
| 13354 | |
| 13355 | NTKERNELAPI |
| 13356 | VOID |
| 13357 | FASTCALL |
| 13358 | ExiAcquireFastMutex( |
| 13359 | IN OUT PFAST_MUTEX FastMutex); |
| 13360 | |
| 13361 | NTKERNELAPI |
| 13362 | VOID |
| 13363 | FASTCALL |
| 13364 | ExiReleaseFastMutex( |
| 13365 | IN OUT PFAST_MUTEX FastMutex); |
| 13366 | |
| 13367 | NTKERNELAPI |
| 13368 | BOOLEAN |
| 13369 | FASTCALL |
| 13370 | ExiTryToAcquireFastMutex( |
| 13371 | IN OUT PFAST_MUTEX FastMutex); |
| 13372 | |
| 13373 | #define ExAcquireFastMutex ExiAcquireFastMutex |
| 13374 | #define ExReleaseFastMutex ExiReleaseFastMutex |
| 13375 | #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex |
| 13376 | |
| 13377 | #else |
| 13378 | |
| 13379 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 13380 | |
| 13381 | NTKERNELAPI |
| 13382 | VOID |
| 13383 | FASTCALL |
| 13384 | ExAcquireFastMutex( |
| 13385 | IN OUT PFAST_MUTEX FastMutex); |
| 13386 | |
| 13387 | NTKERNELAPI |
| 13388 | VOID |
| 13389 | FASTCALL |
| 13390 | ExReleaseFastMutex( |
| 13391 | IN OUT PFAST_MUTEX FastMutex); |
| 13392 | |
| 13393 | NTKERNELAPI |
| 13394 | BOOLEAN |
| 13395 | FASTCALL |
| 13396 | ExTryToAcquireFastMutex( |
| 13397 | IN OUT PFAST_MUTEX FastMutex); |
| 13398 | |
| 13399 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 13400 | |
| 13401 | #endif /* defined(_NTHAL_) && defined(_X86_) */ |
| 13402 | |
| 13403 | #if defined(_X86_) |
| 13404 | #define ExInterlockedAddUlong ExfInterlockedAddUlong |
| 13405 | #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList |
| 13406 | #define ExInterlockedInsertTailList ExfInterlockedInsertTailList |
| 13407 | #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList |
| 13408 | #define ExInterlockedPopEntryList ExfInterlockedPopEntryList |
| 13409 | #define ExInterlockedPushEntryList ExfInterlockedPushEntryList |
| 13410 | #endif /* defined(_X86_) */ |
| 13411 | |
| 13412 | #if defined(_WIN64) |
| 13413 | |
| 13414 | #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \ |
| 13415 | defined(_NTHAL_) || defined(_NTOSP_) |
| 13416 | NTKERNELAPI |
| 13417 | USHORT |
| 13418 | ExQueryDepthSList(IN PSLIST_HEADER ListHead); |
| 13419 | #else |
| 13420 | FORCEINLINE |
| 13421 | USHORT |
| 13422 | ExQueryDepthSList(IN PSLIST_HEADER ListHead) |
| 13423 | { |
| 13424 | return (USHORT)(ListHead->Alignment & 0xffff); |
| 13425 | } |
| 13426 | #endif |
| 13427 | |
| 13428 | NTKERNELAPI |
| 13429 | PSLIST_ENTRY |
| 13430 | ExpInterlockedFlushSList( |
| 13431 | PSLIST_HEADER ListHead); |
| 13432 | |
| 13433 | NTKERNELAPI |
| 13434 | PSLIST_ENTRY |
| 13435 | ExpInterlockedPopEntrySList( |
| 13436 | PSLIST_HEADER ListHead); |
| 13437 | |
| 13438 | NTKERNELAPI |
| 13439 | PSLIST_ENTRY |
| 13440 | ExpInterlockedPushEntrySList( |
| 13441 | PSLIST_HEADER ListHead, |
| 13442 | PSLIST_ENTRY ListEntry); |
| 13443 | |
| 13444 | #define ExInterlockedFlushSList(Head) \ |
| 13445 | ExpInterlockedFlushSList(Head) |
| 13446 | #define ExInterlockedPopEntrySList(Head, Lock) \ |
| 13447 | ExpInterlockedPopEntrySList(Head) |
| 13448 | #define ExInterlockedPushEntrySList(Head, Entry, Lock) \ |
| 13449 | ExpInterlockedPushEntrySList(Head, Entry) |
| 13450 | |
| 13451 | #else /* !defined(_WIN64) */ |
| 13452 | |
| 13453 | #ifdef NONAMELESSUNION |
| 13454 | #define ExQueryDepthSList(listhead) (listhead)->s.Depth |
| 13455 | #else |
| 13456 | #define ExQueryDepthSList(listhead) (listhead)->Depth |
| 13457 | #endif |
| 13458 | |
| 13459 | NTKERNELAPI |
| 13460 | PSINGLE_LIST_ENTRY |
| 13461 | FASTCALL |
| 13462 | ExInterlockedFlushSList( |
| 13463 | IN OUT PSLIST_HEADER ListHead); |
| 13464 | |
| 13465 | #endif /* !defined(_WIN64) */ |
| 13466 | |
| 13467 | #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) |
| 13468 | |
| 13469 | NTKERNELAPI |
| 13470 | PSINGLE_LIST_ENTRY |
| 13471 | FASTCALL |
| 13472 | ExInterlockedPopEntrySList( |
| 13473 | IN PSLIST_HEADER ListHead, |
| 13474 | IN PKSPIN_LOCK Lock); |
| 13475 | |
| 13476 | NTKERNELAPI |
| 13477 | PSINGLE_LIST_ENTRY |
| 13478 | FASTCALL |
| 13479 | ExInterlockedPushEntrySList( |
| 13480 | IN PSLIST_HEADER ListHead, |
| 13481 | IN PSINGLE_LIST_ENTRY ListEntry, |
| 13482 | IN PKSPIN_LOCK Lock); |
| 13483 | |
| 13484 | NTKERNELAPI |
| 13485 | PVOID |
| 13486 | NTAPI |
| 13487 | ExAllocateFromPagedLookasideList( |
| 13488 | IN OUT PPAGED_LOOKASIDE_LIST Lookaside); |
| 13489 | |
| 13490 | NTKERNELAPI |
| 13491 | VOID |
| 13492 | NTAPI |
| 13493 | ExFreeToPagedLookasideList( |
| 13494 | IN OUT PPAGED_LOOKASIDE_LIST Lookaside, |
| 13495 | IN PVOID Entry); |
| 13496 | |
| 13497 | #else /* !_WIN2K_COMPAT_SLIST_USAGE */ |
| 13498 | |
| 13499 | #if !defined(_WIN64) |
| 13500 | #define ExInterlockedPopEntrySList(_ListHead, _Lock) \ |
| 13501 | InterlockedPopEntrySList(_ListHead) |
| 13502 | #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \ |
| 13503 | InterlockedPushEntrySList(_ListHead, _ListEntry) |
| 13504 | #endif |
| 13505 | |
| 13506 | static __inline |
| 13507 | PVOID |
| 13508 | ExAllocateFromPagedLookasideList( |
| 13509 | IN OUT PPAGED_LOOKASIDE_LIST Lookaside) |
| 13510 | { |
| 13511 | PVOID Entry; |
| 13512 | |
| 13513 | Lookaside->L.TotalAllocates++; |
| 13514 | #ifdef NONAMELESSUNION |
| 13515 | Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); |
| 13516 | if (Entry == NULL) { |
| 13517 | Lookaside->L.u2.AllocateMisses++; |
| 13518 | Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, |
| 13519 | Lookaside->L.Size, |
| 13520 | Lookaside->L.Tag); |
| 13521 | } |
| 13522 | #else /* NONAMELESSUNION */ |
| 13523 | Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); |
| 13524 | if (Entry == NULL) { |
| 13525 | Lookaside->L.AllocateMisses++; |
| 13526 | Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, |
| 13527 | Lookaside->L.Size, |
| 13528 | Lookaside->L.Tag); |
| 13529 | } |
| 13530 | #endif /* NONAMELESSUNION */ |
| 13531 | return Entry; |
| 13532 | } |
| 13533 | |
| 13534 | static __inline |
| 13535 | VOID |
| 13536 | ExFreeToPagedLookasideList( |
| 13537 | IN OUT PPAGED_LOOKASIDE_LIST Lookaside, |
| 13538 | IN PVOID Entry) |
| 13539 | { |
| 13540 | Lookaside->L.TotalFrees++; |
| 13541 | #ifdef NONAMELESSUNION |
| 13542 | if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { |
| 13543 | Lookaside->L.u3.FreeMisses++; |
| 13544 | (Lookaside->L.u5.Free)(Entry); |
| 13545 | } else { |
| 13546 | InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); |
| 13547 | } |
| 13548 | #else /* NONAMELESSUNION */ |
| 13549 | if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { |
| 13550 | Lookaside->L.FreeMisses++; |
| 13551 | (Lookaside->L.Free)(Entry); |
| 13552 | } else { |
| 13553 | InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); |
| 13554 | } |
| 13555 | #endif /* NONAMELESSUNION */ |
| 13556 | } |
| 13557 | |
| 13558 | #endif /* _WIN2K_COMPAT_SLIST_USAGE */ |
| 13559 | |
| 13560 | |
| 13561 | /* ERESOURCE_THREAD |
| 13562 | * ExGetCurrentResourceThread( |
| 13563 | * VOID); |
| 13564 | */ |
| 13565 | #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread()) |
| 13566 | |
| 13567 | #define ExReleaseResource(R) (ExReleaseResourceLite(R)) |
| 13568 | |
| 13569 | /* VOID |
| 13570 | * ExInitializeWorkItem( |
| 13571 | * IN PWORK_QUEUE_ITEM Item, |
| 13572 | * IN PWORKER_THREAD_ROUTINE Routine, |
| 13573 | * IN PVOID Context) |
| 13574 | */ |
| 13575 | #define ExInitializeWorkItem(Item, Routine, Context) \ |
| 13576 | { \ |
| 13577 | (Item)->WorkerRoutine = Routine; \ |
| 13578 | (Item)->Parameter = Context; \ |
| 13579 | (Item)->List.Flink = NULL; \ |
| 13580 | } |
| 13581 | |
| 13582 | FORCEINLINE |
| 13583 | VOID |
| 13584 | ExInitializeFastMutex( |
| 13585 | OUT PFAST_MUTEX FastMutex) |
| 13586 | { |
| 13587 | FastMutex->Count = FM_LOCK_BIT; |
| 13588 | FastMutex->Owner = NULL; |
| 13589 | FastMutex->Contention = 0; |
| 13590 | KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE); |
| 13591 | return; |
| 13592 | } |
| 13593 | |
| 13594 | typedef void *PEXT_CANCEL_PARAMETERS; |
| 13595 | |
| 13596 | typedef void (NTAPI EXT_DELETE_CALLBACK)(void *context); |
| 13597 | typedef EXT_DELETE_CALLBACK *PEXT_DELETE_CALLBACK; |
| 13598 | |
| 13599 | typedef struct _EXT_DELETE_PARAMETERS |
| 13600 | { |
| 13601 | ULONG Version; |
| 13602 | ULONG Reserved; |
| 13603 | PEXT_DELETE_CALLBACK DeleteCallback; |
| 13604 | void *DeleteContext; |
| 13605 | } EXT_DELETE_PARAMETERS, *PEXT_DELETE_PARAMETERS; |
| 13606 | |
| 13607 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 13608 | |
| 13609 | typedef struct _EX_TIMER *PEX_TIMER; |
| 13610 | |
| 13611 | typedef void (NTAPI EXT_CALLBACK)(PEX_TIMER, PVOID); |
| 13612 | typedef EXT_CALLBACK *PEXT_CALLBACK; |
| 13613 | |
| 13614 | NTKERNELAPI |
| 13615 | VOID |
| 13616 | FASTCALL |
| 13617 | ExAcquireFastMutexUnsafe( |
| 13618 | IN OUT PFAST_MUTEX FastMutex); |
| 13619 | |
| 13620 | NTKERNELAPI |
| 13621 | VOID |
| 13622 | FASTCALL |
| 13623 | ExReleaseFastMutexUnsafe( |
| 13624 | IN OUT PFAST_MUTEX FastMutex); |
| 13625 | |
| 13626 | NTKERNELAPI |
| 13627 | BOOLEAN |
| 13628 | NTAPI |
| 13629 | ExAcquireResourceExclusiveLite( |
| 13630 | IN OUT PERESOURCE Resource, |
| 13631 | IN BOOLEAN Wait); |
| 13632 | |
| 13633 | NTKERNELAPI |
| 13634 | BOOLEAN |
| 13635 | NTAPI |
| 13636 | ExAcquireResourceSharedLite( |
| 13637 | IN OUT PERESOURCE Resource, |
| 13638 | IN BOOLEAN Wait); |
| 13639 | |
| 13640 | NTKERNELAPI |
| 13641 | BOOLEAN |
| 13642 | NTAPI |
| 13643 | ExAcquireSharedStarveExclusive( |
| 13644 | IN OUT PERESOURCE Resource, |
| 13645 | IN BOOLEAN Wait); |
| 13646 | |
| 13647 | NTKERNELAPI |
| 13648 | BOOLEAN |
| 13649 | NTAPI |
| 13650 | ExAcquireSharedWaitForExclusive( |
| 13651 | IN OUT PERESOURCE Resource, |
| 13652 | IN BOOLEAN Wait); |
| 13653 | |
| 13654 | NTKERNELAPI |
| 13655 | PVOID |
| 13656 | NTAPI |
| 13657 | ExAllocatePool( |
| 13658 | IN POOL_TYPE PoolType, |
| 13659 | IN SIZE_T NumberOfBytes); |
| 13660 | |
| 13661 | NTKERNELAPI |
| 13662 | PVOID |
| 13663 | NTAPI |
| 13664 | ExAllocatePoolWithQuota( |
| 13665 | IN POOL_TYPE PoolType, |
| 13666 | IN SIZE_T NumberOfBytes); |
| 13667 | |
| 13668 | NTKERNELAPI |
| 13669 | PVOID |
| 13670 | NTAPI |
| 13671 | ExAllocatePoolWithQuotaTag( |
| 13672 | IN POOL_TYPE PoolType, |
| 13673 | IN SIZE_T NumberOfBytes, |
| 13674 | IN ULONG Tag); |
| 13675 | |
| 13676 | #ifndef POOL_TAGGING |
| 13677 | #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b) |
| 13678 | #endif |
| 13679 | |
| 13680 | NTKERNELAPI |
| 13681 | PVOID |
| 13682 | NTAPI |
| 13683 | ExAllocatePoolWithTag( |
| 13684 | IN POOL_TYPE PoolType, |
| 13685 | IN SIZE_T NumberOfBytes, |
| 13686 | IN ULONG Tag); |
| 13687 | |
| 13688 | #ifndef POOL_TAGGING |
| 13689 | #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b) |
| 13690 | #endif |
| 13691 | |
| 13692 | NTKERNELAPI |
| 13693 | PVOID |
| 13694 | NTAPI |
| 13695 | ExAllocatePoolWithTagPriority( |
| 13696 | IN POOL_TYPE PoolType, |
| 13697 | IN SIZE_T NumberOfBytes, |
| 13698 | IN ULONG Tag, |
| 13699 | IN EX_POOL_PRIORITY Priority); |
| 13700 | |
| 13701 | NTKERNELAPI |
| 13702 | VOID |
| 13703 | NTAPI |
| 13704 | ExConvertExclusiveToSharedLite( |
| 13705 | IN OUT PERESOURCE Resource); |
| 13706 | |
| 13707 | NTKERNELAPI |
| 13708 | NTSTATUS |
| 13709 | NTAPI |
| 13710 | ExCreateCallback( |
| 13711 | OUT PCALLBACK_OBJECT *CallbackObject, |
| 13712 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 13713 | IN BOOLEAN Create, |
| 13714 | IN BOOLEAN AllowMultipleCallbacks); |
| 13715 | |
| 13716 | NTKERNELAPI |
| 13717 | VOID |
| 13718 | NTAPI |
| 13719 | ExDeleteNPagedLookasideList( |
| 13720 | IN OUT PNPAGED_LOOKASIDE_LIST Lookaside); |
| 13721 | |
| 13722 | NTKERNELAPI |
| 13723 | VOID |
| 13724 | NTAPI |
| 13725 | ExDeletePagedLookasideList( |
| 13726 | IN PPAGED_LOOKASIDE_LIST Lookaside); |
| 13727 | |
| 13728 | NTKERNELAPI |
| 13729 | NTSTATUS |
| 13730 | NTAPI |
| 13731 | ExDeleteResourceLite( |
| 13732 | IN OUT PERESOURCE Resource); |
| 13733 | |
| 13734 | NTKERNELAPI |
| 13735 | VOID |
| 13736 | NTAPI |
| 13737 | ExFreePool( |
| 13738 | IN PVOID P); |
| 13739 | |
| 13740 | NTKERNELAPI |
| 13741 | VOID |
| 13742 | NTAPI |
| 13743 | ExFreePoolWithTag( |
| 13744 | IN PVOID P, |
| 13745 | IN ULONG Tag); |
| 13746 | |
| 13747 | NTKERNELAPI |
| 13748 | ULONG |
| 13749 | NTAPI |
| 13750 | ExGetExclusiveWaiterCount( |
| 13751 | IN PERESOURCE Resource); |
| 13752 | |
| 13753 | NTKERNELAPI |
| 13754 | KPROCESSOR_MODE |
| 13755 | NTAPI |
| 13756 | ExGetPreviousMode(VOID); |
| 13757 | |
| 13758 | NTKERNELAPI |
| 13759 | ULONG |
| 13760 | NTAPI |
| 13761 | ExGetSharedWaiterCount( |
| 13762 | IN PERESOURCE Resource); |
| 13763 | |
| 13764 | NTKERNELAPI |
| 13765 | VOID |
| 13766 | NTAPI |
| 13767 | ExInitializeNPagedLookasideList( |
| 13768 | IN PNPAGED_LOOKASIDE_LIST Lookaside, |
| 13769 | IN PALLOCATE_FUNCTION Allocate OPTIONAL, |
| 13770 | IN PFREE_FUNCTION Free OPTIONAL, |
| 13771 | IN ULONG Flags, |
| 13772 | IN SIZE_T Size, |
| 13773 | IN ULONG Tag, |
| 13774 | IN USHORT Depth); |
| 13775 | |
| 13776 | NTKERNELAPI |
| 13777 | VOID |
| 13778 | NTAPI |
| 13779 | ExInitializePagedLookasideList( |
| 13780 | IN PPAGED_LOOKASIDE_LIST Lookaside, |
| 13781 | IN PALLOCATE_FUNCTION Allocate OPTIONAL, |
| 13782 | IN PFREE_FUNCTION Free OPTIONAL, |
| 13783 | IN ULONG Flags, |
| 13784 | IN SIZE_T Size, |
| 13785 | IN ULONG Tag, |
| 13786 | IN USHORT Depth); |
| 13787 | |
| 13788 | NTKERNELAPI |
| 13789 | NTSTATUS |
| 13790 | NTAPI |
| 13791 | ExInitializeResourceLite( |
| 13792 | OUT PERESOURCE Resource); |
| 13793 | |
| 13794 | NTKERNELAPI |
| 13795 | LARGE_INTEGER |
| 13796 | NTAPI |
| 13797 | ExInterlockedAddLargeInteger( |
| 13798 | IN PLARGE_INTEGER Addend, |
| 13799 | IN LARGE_INTEGER Increment, |
| 13800 | IN PKSPIN_LOCK Lock); |
| 13801 | |
| 13802 | #if defined(_WIN64) |
| 13803 | #define ExInterlockedAddLargeStatistic(Addend, Increment) \ |
| 13804 | (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment) |
| 13805 | #else |
| 13806 | #define ExInterlockedAddLargeStatistic(Addend, Increment) \ |
| 13807 | _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment) |
| 13808 | #endif |
| 13809 | |
| 13810 | NTKERNELAPI |
| 13811 | ULONG |
| 13812 | FASTCALL |
| 13813 | ExInterlockedAddUlong( |
| 13814 | IN PULONG Addend, |
| 13815 | IN ULONG Increment, |
| 13816 | IN OUT PKSPIN_LOCK Lock); |
| 13817 | |
| 13818 | #if defined(_AMD64_) || defined(_IA64_) |
| 13819 | |
| 13820 | #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ |
| 13821 | InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand)) |
| 13822 | |
| 13823 | #elif defined(_X86_) |
| 13824 | |
| 13825 | NTKERNELAPI |
| 13826 | LONGLONG |
| 13827 | FASTCALL |
| 13828 | ExfInterlockedCompareExchange64( |
| 13829 | IN OUT LONGLONG volatile *Destination, |
| 13830 | IN PLONGLONG Exchange, |
| 13831 | IN PLONGLONG Comperand); |
| 13832 | |
| 13833 | #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ |
| 13834 | ExfInterlockedCompareExchange64(Destination, Exchange, Comperand) |
| 13835 | |
| 13836 | #else |
| 13837 | |
| 13838 | NTKERNELAPI |
| 13839 | LONGLONG |
| 13840 | FASTCALL |
| 13841 | ExInterlockedCompareExchange64( |
| 13842 | IN OUT LONGLONG volatile *Destination, |
| 13843 | IN PLONGLONG Exchange, |
| 13844 | IN PLONGLONG Comparand, |
| 13845 | IN PKSPIN_LOCK Lock); |
| 13846 | |
| 13847 | #endif /* defined(_AMD64_) || defined(_IA64_) */ |
| 13848 | |
| 13849 | NTKERNELAPI |
| 13850 | PLIST_ENTRY |
| 13851 | FASTCALL |
| 13852 | ExInterlockedInsertHeadList( |
| 13853 | IN OUT PLIST_ENTRY ListHead, |
| 13854 | IN OUT PLIST_ENTRY ListEntry, |
| 13855 | IN OUT PKSPIN_LOCK Lock); |
| 13856 | |
| 13857 | NTKERNELAPI |
| 13858 | PLIST_ENTRY |
| 13859 | FASTCALL |
| 13860 | ExInterlockedInsertTailList( |
| 13861 | IN OUT PLIST_ENTRY ListHead, |
| 13862 | IN OUT PLIST_ENTRY ListEntry, |
| 13863 | IN OUT PKSPIN_LOCK Lock); |
| 13864 | |
| 13865 | NTKERNELAPI |
| 13866 | PSINGLE_LIST_ENTRY |
| 13867 | FASTCALL |
| 13868 | ExInterlockedPopEntryList( |
| 13869 | IN OUT PSINGLE_LIST_ENTRY ListHead, |
| 13870 | IN OUT PKSPIN_LOCK Lock); |
| 13871 | |
| 13872 | NTKERNELAPI |
| 13873 | PSINGLE_LIST_ENTRY |
| 13874 | FASTCALL |
| 13875 | ExInterlockedPushEntryList( |
| 13876 | IN OUT PSINGLE_LIST_ENTRY ListHead, |
| 13877 | IN OUT PSINGLE_LIST_ENTRY ListEntry, |
| 13878 | IN OUT PKSPIN_LOCK Lock); |
| 13879 | |
| 13880 | NTKERNELAPI |
| 13881 | PLIST_ENTRY |
| 13882 | FASTCALL |
| 13883 | ExInterlockedRemoveHeadList( |
| 13884 | IN OUT PLIST_ENTRY ListHead, |
| 13885 | IN OUT PKSPIN_LOCK Lock); |
| 13886 | |
| 13887 | NTKERNELAPI |
| 13888 | BOOLEAN |
| 13889 | NTAPI |
| 13890 | ExIsProcessorFeaturePresent( |
| 13891 | IN ULONG ProcessorFeature); |
| 13892 | |
| 13893 | NTKERNELAPI |
| 13894 | BOOLEAN |
| 13895 | NTAPI |
| 13896 | ExIsResourceAcquiredExclusiveLite( |
| 13897 | IN PERESOURCE Resource); |
| 13898 | |
| 13899 | NTKERNELAPI |
| 13900 | ULONG |
| 13901 | NTAPI |
| 13902 | ExIsResourceAcquiredSharedLite( |
| 13903 | IN PERESOURCE Resource); |
| 13904 | |
| 13905 | #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite |
| 13906 | |
| 13907 | NTKERNELAPI |
| 13908 | VOID |
| 13909 | NTAPI |
| 13910 | ExLocalTimeToSystemTime( |
| 13911 | IN PLARGE_INTEGER LocalTime, |
| 13912 | OUT PLARGE_INTEGER SystemTime); |
| 13913 | |
| 13914 | NTKERNELAPI |
| 13915 | VOID |
| 13916 | NTAPI |
| 13917 | ExNotifyCallback( |
| 13918 | IN PCALLBACK_OBJECT CallbackObject, |
| 13919 | IN PVOID Argument1 OPTIONAL, |
| 13920 | IN PVOID Argument2 OPTIONAL); |
| 13921 | |
| 13922 | NTKERNELAPI |
| 13923 | VOID |
| 13924 | NTAPI |
| 13925 | ExQueueWorkItem( |
| 13926 | IN OUT PWORK_QUEUE_ITEM WorkItem, |
| 13927 | IN WORK_QUEUE_TYPE QueueType); |
| 13928 | |
| 13929 | NTKERNELAPI |
| 13930 | DECLSPEC_NORETURN |
| 13931 | VOID |
| 13932 | NTAPI |
| 13933 | ExRaiseStatus( |
| 13934 | IN NTSTATUS Status); |
| 13935 | |
| 13936 | NTKERNELAPI |
| 13937 | PVOID |
| 13938 | NTAPI |
| 13939 | ExRegisterCallback( |
| 13940 | IN PCALLBACK_OBJECT CallbackObject, |
| 13941 | IN PCALLBACK_FUNCTION CallbackFunction, |
| 13942 | IN PVOID CallbackContext OPTIONAL); |
| 13943 | |
| 13944 | NTKERNELAPI |
| 13945 | NTSTATUS |
| 13946 | NTAPI |
| 13947 | ExReinitializeResourceLite( |
| 13948 | IN OUT PERESOURCE Resource); |
| 13949 | |
| 13950 | NTKERNELAPI |
| 13951 | VOID |
| 13952 | NTAPI |
| 13953 | ExReleaseResourceForThreadLite( |
| 13954 | IN OUT PERESOURCE Resource, |
| 13955 | IN ERESOURCE_THREAD ResourceThreadId); |
| 13956 | |
| 13957 | NTKERNELAPI |
| 13958 | VOID |
| 13959 | FASTCALL |
| 13960 | ExReleaseResourceLite( |
| 13961 | IN OUT PERESOURCE Resource); |
| 13962 | |
| 13963 | NTKERNELAPI |
| 13964 | VOID |
| 13965 | NTAPI |
| 13966 | ExSetResourceOwnerPointer( |
| 13967 | IN OUT PERESOURCE Resource, |
| 13968 | IN PVOID OwnerPointer); |
| 13969 | |
| 13970 | NTKERNELAPI |
| 13971 | ULONG |
| 13972 | NTAPI |
| 13973 | ExSetTimerResolution( |
| 13974 | IN ULONG DesiredTime, |
| 13975 | IN BOOLEAN SetResolution); |
| 13976 | |
| 13977 | NTKERNELAPI |
| 13978 | VOID |
| 13979 | NTAPI |
| 13980 | ExSystemTimeToLocalTime( |
| 13981 | IN PLARGE_INTEGER SystemTime, |
| 13982 | OUT PLARGE_INTEGER LocalTime); |
| 13983 | |
| 13984 | NTKERNELAPI |
| 13985 | VOID |
| 13986 | NTAPI |
| 13987 | ExUnregisterCallback( |
| 13988 | IN OUT PVOID CbRegistration); |
| 13989 | |
| 13990 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 13991 | |
| 13992 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 13993 | |
| 13994 | NTKERNELAPI |
| 13995 | BOOLEAN |
| 13996 | FASTCALL |
| 13997 | ExAcquireRundownProtection( |
| 13998 | IN OUT PEX_RUNDOWN_REF RunRef); |
| 13999 | |
| 14000 | NTKERNELAPI |
| 14001 | VOID |
| 14002 | FASTCALL |
| 14003 | ExInitializeRundownProtection( |
| 14004 | OUT PEX_RUNDOWN_REF RunRef); |
| 14005 | |
| 14006 | NTKERNELAPI |
| 14007 | VOID |
| 14008 | FASTCALL |
| 14009 | ExReInitializeRundownProtection( |
| 14010 | IN OUT PEX_RUNDOWN_REF RunRef); |
| 14011 | |
| 14012 | NTKERNELAPI |
| 14013 | VOID |
| 14014 | FASTCALL |
| 14015 | ExReleaseRundownProtection( |
| 14016 | IN OUT PEX_RUNDOWN_REF RunRef); |
| 14017 | |
| 14018 | NTKERNELAPI |
| 14019 | VOID |
| 14020 | FASTCALL |
| 14021 | ExRundownCompleted( |
| 14022 | OUT PEX_RUNDOWN_REF RunRef); |
| 14023 | |
| 14024 | NTKERNELAPI |
| 14025 | BOOLEAN |
| 14026 | NTAPI |
| 14027 | ExVerifySuite( |
| 14028 | IN SUITE_TYPE SuiteType); |
| 14029 | |
| 14030 | NTKERNELAPI |
| 14031 | VOID |
| 14032 | FASTCALL |
| 14033 | ExWaitForRundownProtectionRelease( |
| 14034 | IN OUT PEX_RUNDOWN_REF RunRef); |
| 14035 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 14036 | |
| 14037 | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) |
| 14038 | |
| 14039 | NTKERNELAPI |
| 14040 | BOOLEAN |
| 14041 | FASTCALL |
| 14042 | ExAcquireRundownProtectionEx( |
| 14043 | IN OUT PEX_RUNDOWN_REF RunRef, |
| 14044 | IN ULONG Count); |
| 14045 | |
| 14046 | NTKERNELAPI |
| 14047 | VOID |
| 14048 | FASTCALL |
| 14049 | ExReleaseRundownProtectionEx( |
| 14050 | IN OUT PEX_RUNDOWN_REF RunRef, |
| 14051 | IN ULONG Count); |
| 14052 | |
| 14053 | #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ |
| 14054 | |
| 14055 | #if (NTDDI_VERSION >= NTDDI_WS03SP1) |
| 14056 | |
| 14057 | NTKERNELAPI |
| 14058 | PEX_RUNDOWN_REF_CACHE_AWARE |
| 14059 | NTAPI |
| 14060 | ExAllocateCacheAwareRundownProtection( |
| 14061 | IN POOL_TYPE PoolType, |
| 14062 | IN ULONG PoolTag); |
| 14063 | |
| 14064 | NTKERNELAPI |
| 14065 | SIZE_T |
| 14066 | NTAPI |
| 14067 | ExSizeOfRundownProtectionCacheAware(VOID); |
| 14068 | |
| 14069 | NTKERNELAPI |
| 14070 | PVOID |
| 14071 | NTAPI |
| 14072 | ExEnterCriticalRegionAndAcquireResourceShared( |
| 14073 | IN OUT PERESOURCE Resource); |
| 14074 | |
| 14075 | NTKERNELAPI |
| 14076 | PVOID |
| 14077 | NTAPI |
| 14078 | ExEnterCriticalRegionAndAcquireResourceExclusive( |
| 14079 | IN OUT PERESOURCE Resource); |
| 14080 | |
| 14081 | NTKERNELAPI |
| 14082 | PVOID |
| 14083 | NTAPI |
| 14084 | ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( |
| 14085 | IN OUT PERESOURCE Resource); |
| 14086 | |
| 14087 | NTKERNELAPI |
| 14088 | VOID |
| 14089 | FASTCALL |
| 14090 | ExReleaseResourceAndLeaveCriticalRegion( |
| 14091 | IN OUT PERESOURCE Resource); |
| 14092 | |
| 14093 | NTKERNELAPI |
| 14094 | VOID |
| 14095 | NTAPI |
| 14096 | ExInitializeRundownProtectionCacheAware( |
| 14097 | OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, |
| 14098 | IN SIZE_T RunRefSize); |
| 14099 | |
| 14100 | NTKERNELAPI |
| 14101 | VOID |
| 14102 | NTAPI |
| 14103 | ExFreeCacheAwareRundownProtection( |
| 14104 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); |
| 14105 | |
| 14106 | NTKERNELAPI |
| 14107 | BOOLEAN |
| 14108 | FASTCALL |
| 14109 | ExAcquireRundownProtectionCacheAware( |
| 14110 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); |
| 14111 | |
| 14112 | NTKERNELAPI |
| 14113 | VOID |
| 14114 | FASTCALL |
| 14115 | ExReleaseRundownProtectionCacheAware( |
| 14116 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); |
| 14117 | |
| 14118 | NTKERNELAPI |
| 14119 | BOOLEAN |
| 14120 | FASTCALL |
| 14121 | ExAcquireRundownProtectionCacheAwareEx( |
| 14122 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, |
| 14123 | IN ULONG Count); |
| 14124 | |
| 14125 | NTKERNELAPI |
| 14126 | VOID |
| 14127 | FASTCALL |
| 14128 | ExReleaseRundownProtectionCacheAwareEx( |
| 14129 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef, |
| 14130 | IN ULONG Count); |
| 14131 | |
| 14132 | NTKERNELAPI |
| 14133 | VOID |
| 14134 | FASTCALL |
| 14135 | ExWaitForRundownProtectionReleaseCacheAware( |
| 14136 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef); |
| 14137 | |
| 14138 | NTKERNELAPI |
| 14139 | VOID |
| 14140 | FASTCALL |
| 14141 | ExReInitializeRundownProtectionCacheAware( |
| 14142 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); |
| 14143 | |
| 14144 | NTKERNELAPI |
| 14145 | VOID |
| 14146 | FASTCALL |
| 14147 | ExRundownCompletedCacheAware( |
| 14148 | IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); |
| 14149 | |
| 14150 | #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ |
| 14151 | |
| 14152 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 14153 | |
| 14154 | NTKERNELAPI |
| 14155 | NTSTATUS |
| 14156 | NTAPI |
| 14157 | ExInitializeLookasideListEx( |
| 14158 | OUT PLOOKASIDE_LIST_EX Lookaside, |
| 14159 | IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL, |
| 14160 | IN PFREE_FUNCTION_EX Free OPTIONAL, |
| 14161 | IN POOL_TYPE PoolType, |
| 14162 | IN ULONG Flags, |
| 14163 | IN SIZE_T Size, |
| 14164 | IN ULONG Tag, |
| 14165 | IN USHORT Depth); |
| 14166 | |
| 14167 | NTKERNELAPI |
| 14168 | VOID |
| 14169 | NTAPI |
| 14170 | ExDeleteLookasideListEx( |
| 14171 | IN OUT PLOOKASIDE_LIST_EX Lookaside); |
| 14172 | |
| 14173 | NTKERNELAPI |
| 14174 | VOID |
| 14175 | NTAPI |
| 14176 | ExFlushLookasideListEx( |
| 14177 | IN OUT PLOOKASIDE_LIST_EX Lookaside); |
| 14178 | |
| 14179 | FORCEINLINE |
| 14180 | PVOID |
| 14181 | ExAllocateFromLookasideListEx( |
| 14182 | IN OUT PLOOKASIDE_LIST_EX Lookaside) |
| 14183 | { |
| 14184 | PVOID Entry; |
| 14185 | |
| 14186 | Lookaside->L.TotalAllocates += 1; |
| 14187 | #ifdef NONAMELESSUNION |
| 14188 | Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); |
| 14189 | if (Entry == NULL) { |
| 14190 | Lookaside->L.u2.AllocateMisses += 1; |
| 14191 | Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type, |
| 14192 | Lookaside->L.Size, |
| 14193 | Lookaside->L.Tag, |
| 14194 | Lookaside); |
| 14195 | } |
| 14196 | #else /* NONAMELESSUNION */ |
| 14197 | Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); |
| 14198 | if (Entry == NULL) { |
| 14199 | Lookaside->L.AllocateMisses += 1; |
| 14200 | Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type, |
| 14201 | Lookaside->L.Size, |
| 14202 | Lookaside->L.Tag, |
| 14203 | Lookaside); |
| 14204 | } |
| 14205 | #endif /* NONAMELESSUNION */ |
| 14206 | return Entry; |
| 14207 | } |
| 14208 | |
| 14209 | FORCEINLINE |
| 14210 | VOID |
| 14211 | ExFreeToLookasideListEx( |
| 14212 | IN OUT PLOOKASIDE_LIST_EX Lookaside, |
| 14213 | IN PVOID Entry) |
| 14214 | { |
| 14215 | Lookaside->L.TotalFrees += 1; |
| 14216 | if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { |
| 14217 | Lookaside->L.FreeMisses += 1; |
| 14218 | (Lookaside->L.FreeEx)(Entry, Lookaside); |
| 14219 | } else { |
| 14220 | InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); |
| 14221 | } |
| 14222 | return; |
| 14223 | } |
| 14224 | |
| 14225 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 14226 | |
| 14227 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 14228 | |
| 14229 | typedef struct _EXT_SET_PARAMETERS_V0 |
| 14230 | { |
| 14231 | ULONG Version; |
| 14232 | ULONG Reserved; |
| 14233 | LONGLONG NoWakeTolerance; |
| 14234 | } EXT_SET_PARAMETERS, *PEXT_SET_PARAMETERS, KT2_SET_PARAMETERS, *PKT2_SET_PARAMETERS; |
| 14235 | |
| 14236 | NTKERNELAPI |
| 14237 | VOID |
| 14238 | NTAPI |
| 14239 | ExSetResourceOwnerPointerEx( |
| 14240 | IN OUT PERESOURCE Resource, |
| 14241 | IN PVOID OwnerPointer, |
| 14242 | IN ULONG Flags); |
| 14243 | |
| 14244 | #define FLAG_OWNER_POINTER_IS_THREAD 0x1 |
| 14245 | |
| 14246 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 14247 | |
| 14248 | #if NTDDI_VERSION >= NTDDI_WINBLUE |
| 14249 | |
| 14250 | #define EX_TIMER_HIGH_RESOLUTION 4 |
| 14251 | #define EX_TIMER_NO_WAKE 8 |
| 14252 | #define EX_TIMER_UNLIMITED_TOLERANCE ((LONGLONG)-1) |
| 14253 | #define EX_TIMER_NOTIFICATION (1ul << 31) |
| 14254 | |
| 14255 | NTKERNELAPI PEX_TIMER NTAPI ExAllocateTimer(PEXT_CALLBACK callback, void *context, ULONG attr); |
| 14256 | NTKERNELAPI BOOLEAN NTAPI ExCancelTimer(PEX_TIMER timer, PEXT_CANCEL_PARAMETERS params); |
| 14257 | NTKERNELAPI BOOLEAN NTAPI ExDeleteTimer(PEX_TIMER timer, BOOLEAN cancel, BOOLEAN wait, PEXT_DELETE_PARAMETERS params); |
| 14258 | NTKERNELAPI BOOLEAN NTAPI ExSetTimer(PEX_TIMER timer, LONGLONG due, LONGLONG period, EXT_SET_PARAMETERS *params); |
| 14259 | |
| 14260 | FORCEINLINE void KeInitializeTimer2SetParameters(KT2_SET_PARAMETERS *params) |
| 14261 | { |
| 14262 | memset(params, 0, sizeof(*params)); |
| 14263 | } |
| 14264 | |
| 14265 | FORCEINLINE void ExInitializeSetTimerParameters(EXT_SET_PARAMETERS *params) |
| 14266 | { |
| 14267 | KeInitializeTimer2SetParameters(params); |
| 14268 | } |
| 14269 | |
| 14270 | #endif |
| 14271 | |
| 14272 | static __inline PVOID |
| 14273 | ExAllocateFromNPagedLookasideList( |
| 14274 | IN OUT PNPAGED_LOOKASIDE_LIST Lookaside) |
| 14275 | { |
| 14276 | PVOID Entry; |
| 14277 | |
| 14278 | Lookaside->L.TotalAllocates++; |
| 14279 | #ifdef NONAMELESSUNION |
| 14280 | #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) |
| 14281 | Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead, |
| 14282 | &Lookaside->Lock__ObsoleteButDoNotDelete); |
| 14283 | #else |
| 14284 | Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); |
| 14285 | #endif |
| 14286 | if (Entry == NULL) { |
| 14287 | Lookaside->L.u2.AllocateMisses++; |
| 14288 | Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, |
| 14289 | Lookaside->L.Size, |
| 14290 | Lookaside->L.Tag); |
| 14291 | } |
| 14292 | #else /* NONAMELESSUNION */ |
| 14293 | #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) |
| 14294 | Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, |
| 14295 | &Lookaside->Lock__ObsoleteButDoNotDelete); |
| 14296 | #else |
| 14297 | Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); |
| 14298 | #endif |
| 14299 | if (Entry == NULL) { |
| 14300 | Lookaside->L.AllocateMisses++; |
| 14301 | Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, |
| 14302 | Lookaside->L.Size, |
| 14303 | Lookaside->L.Tag); |
| 14304 | } |
| 14305 | #endif /* NONAMELESSUNION */ |
| 14306 | return Entry; |
| 14307 | } |
| 14308 | |
| 14309 | static __inline VOID |
| 14310 | ExFreeToNPagedLookasideList( |
| 14311 | IN OUT PNPAGED_LOOKASIDE_LIST Lookaside, |
| 14312 | IN PVOID Entry) |
| 14313 | { |
| 14314 | Lookaside->L.TotalFrees++; |
| 14315 | #ifdef NONAMELESSUNION |
| 14316 | if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { |
| 14317 | Lookaside->L.u3.FreeMisses++; |
| 14318 | (Lookaside->L.u5.Free)(Entry); |
| 14319 | } else { |
| 14320 | #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) |
| 14321 | ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead, |
| 14322 | (PSLIST_ENTRY)Entry, |
| 14323 | &Lookaside->Lock__ObsoleteButDoNotDelete); |
| 14324 | #else |
| 14325 | InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); |
| 14326 | #endif |
| 14327 | } |
| 14328 | #else /* NONAMELESSUNION */ |
| 14329 | if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { |
| 14330 | Lookaside->L.FreeMisses++; |
| 14331 | (Lookaside->L.Free)(Entry); |
| 14332 | } else { |
| 14333 | #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) |
| 14334 | ExInterlockedPushEntrySList(&Lookaside->L.ListHead, |
| 14335 | (PSLIST_ENTRY)Entry, |
| 14336 | &Lookaside->Lock__ObsoleteButDoNotDelete); |
| 14337 | #else |
| 14338 | InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); |
| 14339 | #endif |
| 14340 | } |
| 14341 | #endif /* NONAMELESSUNION */ |
| 14342 | } |
| 14343 | |
| 14344 | /****************************************************************************** |
| 14345 | * Object Manager Functions * |
| 14346 | ******************************************************************************/ |
| 14347 | |
| 14348 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 14349 | NTKERNELAPI |
| 14350 | LONG_PTR |
| 14351 | FASTCALL |
| 14352 | ObfDereferenceObject( |
| 14353 | IN PVOID Object); |
| 14354 | #define ObDereferenceObject ObfDereferenceObject |
| 14355 | |
| 14356 | NTKERNELAPI |
| 14357 | NTSTATUS |
| 14358 | NTAPI |
| 14359 | ObGetObjectSecurity( |
| 14360 | IN PVOID Object, |
| 14361 | OUT PSECURITY_DESCRIPTOR *SecurityDescriptor, |
| 14362 | OUT PBOOLEAN MemoryAllocated); |
| 14363 | |
| 14364 | NTKERNELAPI |
| 14365 | LONG_PTR |
| 14366 | FASTCALL |
| 14367 | ObfReferenceObject( |
| 14368 | IN PVOID Object); |
| 14369 | #define ObReferenceObject ObfReferenceObject |
| 14370 | |
| 14371 | NTKERNELAPI |
| 14372 | NTSTATUS |
| 14373 | NTAPI |
| 14374 | ObReferenceObjectByHandle( |
| 14375 | IN HANDLE Handle, |
| 14376 | IN ACCESS_MASK DesiredAccess, |
| 14377 | IN POBJECT_TYPE ObjectType OPTIONAL, |
| 14378 | IN KPROCESSOR_MODE AccessMode, |
| 14379 | OUT PVOID *Object, |
| 14380 | OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); |
| 14381 | |
| 14382 | NTKERNELAPI |
| 14383 | NTSTATUS |
| 14384 | NTAPI |
| 14385 | ObReferenceObjectByPointer( |
| 14386 | IN PVOID Object, |
| 14387 | IN ACCESS_MASK DesiredAccess, |
| 14388 | IN POBJECT_TYPE ObjectType OPTIONAL, |
| 14389 | IN KPROCESSOR_MODE AccessMode); |
| 14390 | |
| 14391 | NTKERNELAPI |
| 14392 | VOID |
| 14393 | NTAPI |
| 14394 | ObReleaseObjectSecurity( |
| 14395 | IN PSECURITY_DESCRIPTOR SecurityDescriptor, |
| 14396 | IN BOOLEAN MemoryAllocated); |
| 14397 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 14398 | |
| 14399 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 14400 | NTKERNELAPI |
| 14401 | VOID |
| 14402 | NTAPI |
| 14403 | ObDereferenceObjectDeferDelete( |
| 14404 | IN PVOID Object); |
| 14405 | #endif |
| 14406 | |
| 14407 | #if (NTDDI_VERSION >= NTDDI_VISTASP1) |
| 14408 | NTKERNELAPI |
| 14409 | NTSTATUS |
| 14410 | NTAPI |
| 14411 | ObRegisterCallbacks( |
| 14412 | IN POB_CALLBACK_REGISTRATION CallbackRegistration, |
| 14413 | OUT PVOID *RegistrationHandle); |
| 14414 | |
| 14415 | NTKERNELAPI |
| 14416 | VOID |
| 14417 | NTAPI |
| 14418 | ObUnRegisterCallbacks( |
| 14419 | IN PVOID RegistrationHandle); |
| 14420 | |
| 14421 | NTKERNELAPI |
| 14422 | USHORT |
| 14423 | NTAPI |
| 14424 | ObGetFilterVersion(VOID); |
| 14425 | |
| 14426 | #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ |
| 14427 | |
| 14428 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 14429 | NTKERNELAPI |
| 14430 | NTSTATUS |
| 14431 | NTAPI |
| 14432 | ObReferenceObjectByHandleWithTag( |
| 14433 | IN HANDLE Handle, |
| 14434 | IN ACCESS_MASK DesiredAccess, |
| 14435 | IN POBJECT_TYPE ObjectType OPTIONAL, |
| 14436 | IN KPROCESSOR_MODE AccessMode, |
| 14437 | IN ULONG Tag, |
| 14438 | OUT PVOID *Object, |
| 14439 | OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); |
| 14440 | |
| 14441 | NTKERNELAPI |
| 14442 | LONG_PTR |
| 14443 | FASTCALL |
| 14444 | ObfReferenceObjectWithTag( |
| 14445 | IN PVOID Object, |
| 14446 | IN ULONG Tag); |
| 14447 | |
| 14448 | NTKERNELAPI |
| 14449 | NTSTATUS |
| 14450 | NTAPI |
| 14451 | ObReferenceObjectByPointerWithTag( |
| 14452 | IN PVOID Object, |
| 14453 | IN ACCESS_MASK DesiredAccess, |
| 14454 | IN POBJECT_TYPE ObjectType OPTIONAL, |
| 14455 | IN KPROCESSOR_MODE AccessMode, |
| 14456 | IN ULONG Tag); |
| 14457 | |
| 14458 | NTKERNELAPI |
| 14459 | LONG_PTR |
| 14460 | FASTCALL |
| 14461 | ObfDereferenceObjectWithTag( |
| 14462 | IN PVOID Object, |
| 14463 | IN ULONG Tag); |
| 14464 | |
| 14465 | NTKERNELAPI |
| 14466 | VOID |
| 14467 | NTAPI |
| 14468 | ObDereferenceObjectDeferDeleteWithTag( |
| 14469 | IN PVOID Object, |
| 14470 | IN ULONG Tag); |
| 14471 | |
| 14472 | #define ObDereferenceObject ObfDereferenceObject |
| 14473 | #define ObReferenceObject ObfReferenceObject |
| 14474 | #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag |
| 14475 | #define ObReferenceObjectWithTag ObfReferenceObjectWithTag |
| 14476 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 14477 | |
| 14478 | /****************************************************************************** |
| 14479 | * Process Manager Functions * |
| 14480 | ******************************************************************************/ |
| 14481 | |
| 14482 | NTKERNELAPI |
| 14483 | NTSTATUS |
| 14484 | NTAPI |
| 14485 | PsWrapApcWow64Thread( |
| 14486 | IN OUT PVOID *ApcContext, |
| 14487 | IN OUT PVOID *ApcRoutine); |
| 14488 | |
| 14489 | /* |
| 14490 | * PEPROCESS |
| 14491 | * PsGetCurrentProcess(VOID) |
| 14492 | */ |
| 14493 | #define PsGetCurrentProcess IoGetCurrentProcess |
| 14494 | |
| 14495 | #if !defined(_PSGETCURRENTTHREAD_) |
| 14496 | #define _PSGETCURRENTTHREAD_ |
| 14497 | FORCEINLINE |
| 14498 | PETHREAD |
| 14499 | NTAPI |
| 14500 | PsGetCurrentThread(VOID) |
| 14501 | { |
| 14502 | return (PETHREAD)KeGetCurrentThread(); |
| 14503 | } |
| 14504 | #endif /* !_PSGETCURRENTTHREAD_ */ |
| 14505 | |
| 14506 | |
| 14507 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 14508 | |
| 14509 | NTKERNELAPI |
| 14510 | NTSTATUS |
| 14511 | NTAPI |
| 14512 | PsCreateSystemThread( |
| 14513 | OUT PHANDLE ThreadHandle, |
| 14514 | IN ULONG DesiredAccess, |
| 14515 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 14516 | IN HANDLE ProcessHandle OPTIONAL, |
| 14517 | OUT PCLIENT_ID ClientId OPTIONAL, |
| 14518 | IN PKSTART_ROUTINE StartRoutine, |
| 14519 | IN PVOID StartContext OPTIONAL); |
| 14520 | |
| 14521 | NTKERNELAPI |
| 14522 | NTSTATUS |
| 14523 | NTAPI |
| 14524 | PsTerminateSystemThread( |
| 14525 | IN NTSTATUS ExitStatus); |
| 14526 | |
| 14527 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 14528 | |
| 14529 | |
| 14530 | /****************************************************************************** |
| 14531 | * WMI Library Support Functions * |
| 14532 | ******************************************************************************/ |
| 14533 | |
| 14534 | #ifdef RUN_WPP |
| 14535 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 14536 | NTKERNELAPI |
| 14537 | NTSTATUS |
| 14538 | __cdecl |
| 14539 | WmiTraceMessage( |
| 14540 | IN TRACEHANDLE LoggerHandle, |
| 14541 | IN ULONG MessageFlags, |
| 14542 | IN LPGUID MessageGuid, |
| 14543 | IN USHORT MessageNumber, |
| 14544 | IN ...); |
| 14545 | #endif |
| 14546 | #endif /* RUN_WPP */ |
| 14547 | |
| 14548 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 14549 | |
| 14550 | NTKERNELAPI |
| 14551 | NTSTATUS |
| 14552 | NTAPI |
| 14553 | WmiQueryTraceInformation( |
| 14554 | IN TRACE_INFORMATION_CLASS TraceInformationClass, |
| 14555 | OUT PVOID TraceInformation, |
| 14556 | IN ULONG TraceInformationLength, |
| 14557 | OUT PULONG RequiredLength OPTIONAL, |
| 14558 | IN PVOID Buffer OPTIONAL); |
| 14559 | |
| 14560 | #if 0 |
| 14561 | /* FIXME: Get va_list from where? */ |
| 14562 | NTKERNELAPI |
| 14563 | NTSTATUS |
| 14564 | NTAPI |
| 14565 | WmiTraceMessageVa( |
| 14566 | IN TRACEHANDLE LoggerHandle, |
| 14567 | IN ULONG MessageFlags, |
| 14568 | IN LPGUID MessageGuid, |
| 14569 | IN USHORT MessageNumber, |
| 14570 | IN va_list MessageArgList); |
| 14571 | #endif |
| 14572 | |
| 14573 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 14574 | |
| 14575 | #ifndef TRACE_INFORMATION_CLASS_DEFINE |
| 14576 | |
| 14577 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 14578 | NTKERNELAPI |
| 14579 | NTSTATUS |
| 14580 | NTAPI |
| 14581 | WmiQueryTraceInformation( |
| 14582 | IN TRACE_INFORMATION_CLASS TraceInformationClass, |
| 14583 | OUT PVOID TraceInformation, |
| 14584 | IN ULONG TraceInformationLength, |
| 14585 | OUT PULONG RequiredLength OPTIONAL, |
| 14586 | IN PVOID Buffer OPTIONAL); |
| 14587 | #endif |
| 14588 | |
| 14589 | #define TRACE_INFORMATION_CLASS_DEFINE |
| 14590 | |
| 14591 | #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */ |
| 14592 | |
| 14593 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 14594 | |
| 14595 | NTSTATUS |
| 14596 | NTKERNELAPI |
| 14597 | NTAPI |
| 14598 | EtwRegister( |
| 14599 | IN LPCGUID ProviderId, |
| 14600 | IN PETWENABLECALLBACK EnableCallback OPTIONAL, |
| 14601 | IN PVOID CallbackContext OPTIONAL, |
| 14602 | OUT PREGHANDLE RegHandle); |
| 14603 | |
| 14604 | NTSTATUS |
| 14605 | NTKERNELAPI |
| 14606 | NTAPI |
| 14607 | EtwUnregister( |
| 14608 | IN REGHANDLE RegHandle); |
| 14609 | |
| 14610 | BOOLEAN |
| 14611 | NTKERNELAPI |
| 14612 | NTAPI |
| 14613 | EtwEventEnabled( |
| 14614 | IN REGHANDLE RegHandle, |
| 14615 | IN PCEVENT_DESCRIPTOR EventDescriptor); |
| 14616 | |
| 14617 | BOOLEAN |
| 14618 | NTKERNELAPI |
| 14619 | NTAPI |
| 14620 | EtwProviderEnabled( |
| 14621 | IN REGHANDLE RegHandle, |
| 14622 | IN UCHAR Level, |
| 14623 | IN ULONGLONG Keyword); |
| 14624 | |
| 14625 | NTSTATUS |
| 14626 | NTKERNELAPI |
| 14627 | NTAPI |
| 14628 | EtwActivityIdControl( |
| 14629 | IN ULONG ControlCode, |
| 14630 | IN OUT LPGUID ActivityId); |
| 14631 | |
| 14632 | NTSTATUS |
| 14633 | NTKERNELAPI |
| 14634 | NTAPI |
| 14635 | EtwWrite( |
| 14636 | IN REGHANDLE RegHandle, |
| 14637 | IN PCEVENT_DESCRIPTOR EventDescriptor, |
| 14638 | IN LPCGUID ActivityId OPTIONAL, |
| 14639 | IN ULONG UserDataCount, |
| 14640 | IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); |
| 14641 | |
| 14642 | NTSTATUS |
| 14643 | NTKERNELAPI |
| 14644 | NTAPI |
| 14645 | EtwWriteTransfer( |
| 14646 | IN REGHANDLE RegHandle, |
| 14647 | IN PCEVENT_DESCRIPTOR EventDescriptor, |
| 14648 | IN LPCGUID ActivityId OPTIONAL, |
| 14649 | IN LPCGUID RelatedActivityId OPTIONAL, |
| 14650 | IN ULONG UserDataCount, |
| 14651 | IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); |
| 14652 | |
| 14653 | NTSTATUS |
| 14654 | NTKERNELAPI |
| 14655 | NTAPI |
| 14656 | EtwWriteString( |
| 14657 | IN REGHANDLE RegHandle, |
| 14658 | IN UCHAR Level, |
| 14659 | IN ULONGLONG Keyword, |
| 14660 | IN LPCGUID ActivityId OPTIONAL, |
| 14661 | IN PCWSTR String); |
| 14662 | |
| 14663 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 14664 | |
| 14665 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 14666 | NTSTATUS |
| 14667 | NTKERNELAPI |
| 14668 | NTAPI |
| 14669 | EtwWriteEx( |
| 14670 | IN REGHANDLE RegHandle, |
| 14671 | IN PCEVENT_DESCRIPTOR EventDescriptor, |
| 14672 | IN ULONG64 Filter, |
| 14673 | IN ULONG Flags, |
| 14674 | IN LPCGUID ActivityId OPTIONAL, |
| 14675 | IN LPCGUID RelatedActivityId OPTIONAL, |
| 14676 | IN ULONG UserDataCount, |
| 14677 | IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); |
| 14678 | #endif |
| 14679 | |
| 14680 | |
| 14681 | |
| 14682 | /****************************************************************************** |
| 14683 | * Kernel Debugger Functions * |
| 14684 | ******************************************************************************/ |
| 14685 | |
| 14686 | #ifndef _DBGNT_ |
| 14687 | |
| 14688 | ULONG |
| 14689 | __cdecl |
| 14690 | DbgPrint( |
| 14691 | IN PCSTR Format, |
| 14692 | IN ...); |
| 14693 | |
| 14694 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 14695 | NTSYSAPI |
| 14696 | ULONG |
| 14697 | __cdecl |
| 14698 | DbgPrintReturnControlC( |
| 14699 | IN PCCH Format, |
| 14700 | IN ...); |
| 14701 | #endif |
| 14702 | |
| 14703 | #if (NTDDI_VERSION >= NTDDI_WINXP) |
| 14704 | |
| 14705 | NTSYSAPI |
| 14706 | ULONG |
| 14707 | __cdecl |
| 14708 | DbgPrintEx( |
| 14709 | IN ULONG ComponentId, |
| 14710 | IN ULONG Level, |
| 14711 | IN PCSTR Format, |
| 14712 | IN ...); |
| 14713 | |
| 14714 | #ifdef _VA_LIST_DEFINED |
| 14715 | |
| 14716 | NTSYSAPI |
| 14717 | ULONG |
| 14718 | NTAPI |
| 14719 | vDbgPrintEx( |
| 14720 | IN ULONG ComponentId, |
| 14721 | IN ULONG Level, |
| 14722 | IN PCCH Format, |
| 14723 | IN va_list ap); |
| 14724 | |
| 14725 | NTSYSAPI |
| 14726 | ULONG |
| 14727 | NTAPI |
| 14728 | vDbgPrintExWithPrefix( |
| 14729 | IN PCCH Prefix, |
| 14730 | IN ULONG ComponentId, |
| 14731 | IN ULONG Level, |
| 14732 | IN PCCH Format, |
| 14733 | IN va_list ap); |
| 14734 | |
| 14735 | #endif /* _VA_LIST_DEFINED */ |
| 14736 | |
| 14737 | NTSYSAPI |
| 14738 | NTSTATUS |
| 14739 | NTAPI |
| 14740 | DbgQueryDebugFilterState( |
| 14741 | IN ULONG ComponentId, |
| 14742 | IN ULONG Level); |
| 14743 | |
| 14744 | NTSYSAPI |
| 14745 | NTSTATUS |
| 14746 | NTAPI |
| 14747 | DbgSetDebugFilterState( |
| 14748 | IN ULONG ComponentId, |
| 14749 | IN ULONG Level, |
| 14750 | IN BOOLEAN State); |
| 14751 | |
| 14752 | #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ |
| 14753 | |
| 14754 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 14755 | |
| 14756 | typedef VOID |
| 14757 | (*PDEBUG_PRINT_CALLBACK)( |
| 14758 | IN PSTRING Output, |
| 14759 | IN ULONG ComponentId, |
| 14760 | IN ULONG Level); |
| 14761 | |
| 14762 | NTSYSAPI |
| 14763 | NTSTATUS |
| 14764 | NTAPI |
| 14765 | DbgSetDebugPrintCallback( |
| 14766 | IN PDEBUG_PRINT_CALLBACK DebugPrintCallback, |
| 14767 | IN BOOLEAN Enable); |
| 14768 | |
| 14769 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 14770 | |
| 14771 | #endif /* _DBGNT_ */ |
| 14772 | |
| 14773 | #if DBG |
| 14774 | |
| 14775 | #define KdPrint(_x_) DbgPrint _x_ |
| 14776 | #define KdPrintEx(_x_) DbgPrintEx _x_ |
| 14777 | #define vKdPrintEx(_x_) vDbgPrintEx _x_ |
| 14778 | #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_ |
| 14779 | #define KdBreakPoint() DbgBreakPoint() |
| 14780 | #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) |
| 14781 | |
| 14782 | #else /* !DBG */ |
| 14783 | |
| 14784 | #define KdPrint(_x_) |
| 14785 | #define KdPrintEx(_x_) |
| 14786 | #define vKdPrintEx(_x_) |
| 14787 | #define vKdPrintExWithPrefix(_x_) |
| 14788 | #define KdBreakPoint() |
| 14789 | #define KdBreakPointWithStatus(s) |
| 14790 | |
| 14791 | #endif /* !DBG */ |
| 14792 | |
| 14793 | #if defined(__GNUC__) |
| 14794 | |
| 14795 | extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; |
| 14796 | extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; |
| 14797 | #define KD_DEBUGGER_ENABLED KdDebuggerEnabled |
| 14798 | #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent |
| 14799 | |
| 14800 | #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) |
| 14801 | |
| 14802 | extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; |
| 14803 | extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; |
| 14804 | #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled |
| 14805 | #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent |
| 14806 | |
| 14807 | #else |
| 14808 | |
| 14809 | extern BOOLEAN KdDebuggerNotPresent; |
| 14810 | extern BOOLEAN KdDebuggerEnabled; |
| 14811 | #define KD_DEBUGGER_ENABLED KdDebuggerEnabled |
| 14812 | #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent |
| 14813 | |
| 14814 | #endif |
| 14815 | |
| 14816 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 14817 | |
| 14818 | NTKERNELAPI |
| 14819 | NTSTATUS |
| 14820 | NTAPI |
| 14821 | KdDisableDebugger(VOID); |
| 14822 | |
| 14823 | NTKERNELAPI |
| 14824 | NTSTATUS |
| 14825 | NTAPI |
| 14826 | KdEnableDebugger(VOID); |
| 14827 | |
| 14828 | #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK) |
| 14829 | #define DbgBreakPoint __debugbreak |
| 14830 | #else |
| 14831 | VOID |
| 14832 | NTAPI |
| 14833 | DbgBreakPoint(VOID); |
| 14834 | #endif |
| 14835 | |
| 14836 | NTSYSAPI |
| 14837 | VOID |
| 14838 | NTAPI |
| 14839 | DbgBreakPointWithStatus( |
| 14840 | IN ULONG Status); |
| 14841 | |
| 14842 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 14843 | |
| 14844 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 14845 | NTKERNELAPI |
| 14846 | BOOLEAN |
| 14847 | NTAPI |
| 14848 | KdRefreshDebuggerNotPresent(VOID); |
| 14849 | #endif |
| 14850 | |
| 14851 | #if (NTDDI_VERSION >= NTDDI_WS03SP1) |
| 14852 | NTKERNELAPI |
| 14853 | NTSTATUS |
| 14854 | NTAPI |
| 14855 | KdChangeOption( |
| 14856 | IN KD_OPTION Option, |
| 14857 | IN ULONG InBufferBytes OPTIONAL, |
| 14858 | IN PVOID InBuffer, |
| 14859 | IN ULONG OutBufferBytes OPTIONAL, |
| 14860 | OUT PVOID OutBuffer, |
| 14861 | OUT PULONG OutBufferNeeded OPTIONAL); |
| 14862 | #endif |
| 14863 | /* Hardware Abstraction Layer Functions */ |
| 14864 | |
| 14865 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 14866 | |
| 14867 | #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) |
| 14868 | |
| 14869 | FORCEINLINE |
| 14870 | PVOID |
| 14871 | NTAPI |
| 14872 | HalAllocateCommonBuffer( |
| 14873 | IN PDMA_ADAPTER DmaAdapter, |
| 14874 | IN ULONG Length, |
| 14875 | OUT PPHYSICAL_ADDRESS LogicalAddress, |
| 14876 | IN BOOLEAN CacheEnabled) |
| 14877 | { |
| 14878 | PALLOCATE_COMMON_BUFFER allocateCommonBuffer; |
| 14879 | PVOID commonBuffer; |
| 14880 | |
| 14881 | allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer; |
| 14882 | ASSERT( allocateCommonBuffer != NULL ); |
| 14883 | commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled ); |
| 14884 | return commonBuffer; |
| 14885 | } |
| 14886 | |
| 14887 | FORCEINLINE |
| 14888 | VOID |
| 14889 | NTAPI |
| 14890 | HalFreeCommonBuffer( |
| 14891 | IN PDMA_ADAPTER DmaAdapter, |
| 14892 | IN ULONG Length, |
| 14893 | IN PHYSICAL_ADDRESS LogicalAddress, |
| 14894 | IN PVOID VirtualAddress, |
| 14895 | IN BOOLEAN CacheEnabled) |
| 14896 | { |
| 14897 | PFREE_COMMON_BUFFER freeCommonBuffer; |
| 14898 | |
| 14899 | freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer; |
| 14900 | ASSERT( freeCommonBuffer != NULL ); |
| 14901 | freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled ); |
| 14902 | } |
| 14903 | |
| 14904 | FORCEINLINE |
| 14905 | ULONG |
| 14906 | NTAPI |
| 14907 | HalReadDmaCounter( |
| 14908 | IN PDMA_ADAPTER DmaAdapter) |
| 14909 | { |
| 14910 | PREAD_DMA_COUNTER readDmaCounter; |
| 14911 | ULONG counter; |
| 14912 | |
| 14913 | readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter; |
| 14914 | ASSERT( readDmaCounter != NULL ); |
| 14915 | counter = readDmaCounter( DmaAdapter ); |
| 14916 | return counter; |
| 14917 | } |
| 14918 | |
| 14919 | FORCEINLINE |
| 14920 | ULONG |
| 14921 | HalGetDmaAlignment( |
| 14922 | IN PDMA_ADAPTER DmaAdapter) |
| 14923 | { |
| 14924 | PGET_DMA_ALIGNMENT getDmaAlignment; |
| 14925 | ULONG alignment; |
| 14926 | |
| 14927 | getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment; |
| 14928 | ASSERT( getDmaAlignment != NULL ); |
| 14929 | alignment = getDmaAlignment( DmaAdapter ); |
| 14930 | return alignment; |
| 14931 | } |
| 14932 | |
| 14933 | #endif /* USE_DMA_MACROS ... */ |
| 14934 | |
| 14935 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 14936 | |
| 14937 | #ifndef _NTTMAPI_ |
| 14938 | #define _NTTMAPI_ |
| 14939 | |
| 14940 | #include <ktmtypes.h> |
| 14941 | |
| 14942 | #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001) |
| 14943 | #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002) |
| 14944 | #define TRANSACTIONMANAGER_RECOVER (0x0004) |
| 14945 | #define TRANSACTIONMANAGER_RENAME (0x0008) |
| 14946 | #define TRANSACTIONMANAGER_CREATE_RM (0x0010) |
| 14947 | #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020) |
| 14948 | |
| 14949 | #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ |
| 14950 | TRANSACTIONMANAGER_QUERY_INFORMATION) |
| 14951 | |
| 14952 | #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ |
| 14953 | TRANSACTIONMANAGER_SET_INFORMATION |\ |
| 14954 | TRANSACTIONMANAGER_RECOVER |\ |
| 14955 | TRANSACTIONMANAGER_RENAME |\ |
| 14956 | TRANSACTIONMANAGER_CREATE_RM) |
| 14957 | |
| 14958 | #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE) |
| 14959 | |
| 14960 | #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ |
| 14961 | TRANSACTIONMANAGER_GENERIC_READ |\ |
| 14962 | TRANSACTIONMANAGER_GENERIC_WRITE |\ |
| 14963 | TRANSACTIONMANAGER_GENERIC_EXECUTE |\ |
| 14964 | TRANSACTIONMANAGER_BIND_TRANSACTION) |
| 14965 | |
| 14966 | #define TRANSACTION_QUERY_INFORMATION (0x0001) |
| 14967 | #define TRANSACTION_SET_INFORMATION (0x0002) |
| 14968 | #define TRANSACTION_ENLIST (0x0004) |
| 14969 | #define TRANSACTION_COMMIT (0x0008) |
| 14970 | #define TRANSACTION_ROLLBACK (0x0010) |
| 14971 | #define TRANSACTION_PROPAGATE (0x0020) |
| 14972 | #define TRANSACTION_RIGHT_RESERVED1 (0x0040) |
| 14973 | |
| 14974 | #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\ |
| 14975 | TRANSACTION_QUERY_INFORMATION |\ |
| 14976 | SYNCHRONIZE) |
| 14977 | |
| 14978 | #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ |
| 14979 | TRANSACTION_SET_INFORMATION |\ |
| 14980 | TRANSACTION_COMMIT |\ |
| 14981 | TRANSACTION_ENLIST |\ |
| 14982 | TRANSACTION_ROLLBACK |\ |
| 14983 | TRANSACTION_PROPAGATE |\ |
| 14984 | SYNCHRONIZE) |
| 14985 | |
| 14986 | #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ |
| 14987 | TRANSACTION_COMMIT |\ |
| 14988 | TRANSACTION_ROLLBACK |\ |
| 14989 | SYNCHRONIZE) |
| 14990 | |
| 14991 | #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ |
| 14992 | TRANSACTION_GENERIC_READ |\ |
| 14993 | TRANSACTION_GENERIC_WRITE |\ |
| 14994 | TRANSACTION_GENERIC_EXECUTE) |
| 14995 | |
| 14996 | #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\ |
| 14997 | STANDARD_RIGHTS_WRITE |\ |
| 14998 | TRANSACTION_SET_INFORMATION |\ |
| 14999 | TRANSACTION_ENLIST |\ |
| 15000 | TRANSACTION_ROLLBACK |\ |
| 15001 | TRANSACTION_PROPAGATE |\ |
| 15002 | SYNCHRONIZE) |
| 15003 | |
| 15004 | #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001) |
| 15005 | #define RESOURCEMANAGER_SET_INFORMATION (0x0002) |
| 15006 | #define RESOURCEMANAGER_RECOVER (0x0004) |
| 15007 | #define RESOURCEMANAGER_ENLIST (0x0008) |
| 15008 | #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010) |
| 15009 | #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020) |
| 15010 | #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040) |
| 15011 | |
| 15012 | #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ |
| 15013 | RESOURCEMANAGER_QUERY_INFORMATION |\ |
| 15014 | SYNCHRONIZE) |
| 15015 | |
| 15016 | #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ |
| 15017 | RESOURCEMANAGER_SET_INFORMATION |\ |
| 15018 | RESOURCEMANAGER_RECOVER |\ |
| 15019 | RESOURCEMANAGER_ENLIST |\ |
| 15020 | RESOURCEMANAGER_GET_NOTIFICATION |\ |
| 15021 | RESOURCEMANAGER_REGISTER_PROTOCOL |\ |
| 15022 | RESOURCEMANAGER_COMPLETE_PROPAGATION |\ |
| 15023 | SYNCHRONIZE) |
| 15024 | |
| 15025 | #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ |
| 15026 | RESOURCEMANAGER_RECOVER |\ |
| 15027 | RESOURCEMANAGER_ENLIST |\ |
| 15028 | RESOURCEMANAGER_GET_NOTIFICATION |\ |
| 15029 | RESOURCEMANAGER_COMPLETE_PROPAGATION |\ |
| 15030 | SYNCHRONIZE) |
| 15031 | |
| 15032 | #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ |
| 15033 | RESOURCEMANAGER_GENERIC_READ |\ |
| 15034 | RESOURCEMANAGER_GENERIC_WRITE |\ |
| 15035 | RESOURCEMANAGER_GENERIC_EXECUTE) |
| 15036 | |
| 15037 | #define ENLISTMENT_QUERY_INFORMATION (0x0001) |
| 15038 | #define ENLISTMENT_SET_INFORMATION (0x0002) |
| 15039 | #define ENLISTMENT_RECOVER (0x0004) |
| 15040 | #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008) |
| 15041 | #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010) |
| 15042 | |
| 15043 | #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\ |
| 15044 | ENLISTMENT_QUERY_INFORMATION) |
| 15045 | |
| 15046 | #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ |
| 15047 | ENLISTMENT_SET_INFORMATION |\ |
| 15048 | ENLISTMENT_RECOVER |\ |
| 15049 | ENLISTMENT_SUBORDINATE_RIGHTS |\ |
| 15050 | ENLISTMENT_SUPERIOR_RIGHTS) |
| 15051 | |
| 15052 | #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ |
| 15053 | ENLISTMENT_RECOVER |\ |
| 15054 | ENLISTMENT_SUBORDINATE_RIGHTS |\ |
| 15055 | ENLISTMENT_SUPERIOR_RIGHTS) |
| 15056 | |
| 15057 | #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ |
| 15058 | ENLISTMENT_GENERIC_READ |\ |
| 15059 | ENLISTMENT_GENERIC_WRITE |\ |
| 15060 | ENLISTMENT_GENERIC_EXECUTE) |
| 15061 | |
| 15062 | typedef enum _TRANSACTION_OUTCOME { |
| 15063 | TransactionOutcomeUndetermined = 1, |
| 15064 | TransactionOutcomeCommitted, |
| 15065 | TransactionOutcomeAborted, |
| 15066 | } TRANSACTION_OUTCOME; |
| 15067 | |
| 15068 | |
| 15069 | typedef enum _TRANSACTION_STATE { |
| 15070 | TransactionStateNormal = 1, |
| 15071 | TransactionStateIndoubt, |
| 15072 | TransactionStateCommittedNotify, |
| 15073 | } TRANSACTION_STATE; |
| 15074 | |
| 15075 | |
| 15076 | typedef struct _TRANSACTION_BASIC_INFORMATION { |
| 15077 | GUID TransactionId; |
| 15078 | ULONG State; |
| 15079 | ULONG Outcome; |
| 15080 | } TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION; |
| 15081 | |
| 15082 | typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION { |
| 15083 | GUID TmIdentity; |
| 15084 | LARGE_INTEGER VirtualClock; |
| 15085 | } TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION; |
| 15086 | |
| 15087 | typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { |
| 15088 | GUID LogIdentity; |
| 15089 | } TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION; |
| 15090 | |
| 15091 | typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { |
| 15092 | ULONG LogPathLength; |
| 15093 | WCHAR LogPath[1]; |
| 15094 | } TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION; |
| 15095 | |
| 15096 | typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { |
| 15097 | ULONGLONG LastRecoveredLsn; |
| 15098 | } TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION; |
| 15099 | |
| 15100 | typedef struct _TRANSACTION_PROPERTIES_INFORMATION { |
| 15101 | ULONG IsolationLevel; |
| 15102 | ULONG IsolationFlags; |
| 15103 | LARGE_INTEGER Timeout; |
| 15104 | ULONG Outcome; |
| 15105 | ULONG DescriptionLength; |
| 15106 | WCHAR Description[1]; |
| 15107 | } TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION; |
| 15108 | |
| 15109 | typedef struct _TRANSACTION_BIND_INFORMATION { |
| 15110 | HANDLE TmHandle; |
| 15111 | } TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION; |
| 15112 | |
| 15113 | typedef struct _TRANSACTION_ENLISTMENT_PAIR { |
| 15114 | GUID EnlistmentId; |
| 15115 | GUID ResourceManagerId; |
| 15116 | } TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR; |
| 15117 | |
| 15118 | typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION { |
| 15119 | ULONG NumberOfEnlistments; |
| 15120 | TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1]; |
| 15121 | } TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION; |
| 15122 | |
| 15123 | typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION { |
| 15124 | TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair; |
| 15125 | } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION; |
| 15126 | |
| 15127 | typedef struct _RESOURCEMANAGER_BASIC_INFORMATION { |
| 15128 | GUID ResourceManagerId; |
| 15129 | ULONG DescriptionLength; |
| 15130 | WCHAR Description[1]; |
| 15131 | } RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION; |
| 15132 | |
| 15133 | typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION { |
| 15134 | HANDLE IoCompletionPortHandle; |
| 15135 | ULONG_PTR CompletionKey; |
| 15136 | } RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION; |
| 15137 | |
| 15138 | typedef enum _KTMOBJECT_TYPE { |
| 15139 | KTMOBJECT_TRANSACTION, |
| 15140 | KTMOBJECT_TRANSACTION_MANAGER, |
| 15141 | KTMOBJECT_RESOURCE_MANAGER, |
| 15142 | KTMOBJECT_ENLISTMENT, |
| 15143 | KTMOBJECT_INVALID |
| 15144 | } KTMOBJECT_TYPE, *PKTMOBJECT_TYPE; |
| 15145 | |
| 15146 | typedef struct _KTMOBJECT_CURSOR { |
| 15147 | GUID LastQuery; |
| 15148 | ULONG ObjectIdCount; |
| 15149 | GUID ObjectIds[1]; |
| 15150 | } KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR; |
| 15151 | |
| 15152 | typedef enum _TRANSACTION_INFORMATION_CLASS { |
| 15153 | TransactionBasicInformation, |
| 15154 | TransactionPropertiesInformation, |
| 15155 | TransactionEnlistmentInformation, |
| 15156 | TransactionSuperiorEnlistmentInformation |
| 15157 | } TRANSACTION_INFORMATION_CLASS; |
| 15158 | |
| 15159 | typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS { |
| 15160 | TransactionManagerBasicInformation, |
| 15161 | TransactionManagerLogInformation, |
| 15162 | TransactionManagerLogPathInformation, |
| 15163 | TransactionManagerRecoveryInformation = 4 |
| 15164 | } TRANSACTIONMANAGER_INFORMATION_CLASS; |
| 15165 | |
| 15166 | typedef enum _RESOURCEMANAGER_INFORMATION_CLASS { |
| 15167 | ResourceManagerBasicInformation, |
| 15168 | ResourceManagerCompletionInformation, |
| 15169 | } RESOURCEMANAGER_INFORMATION_CLASS; |
| 15170 | |
| 15171 | typedef struct _ENLISTMENT_BASIC_INFORMATION { |
| 15172 | GUID EnlistmentId; |
| 15173 | GUID TransactionId; |
| 15174 | GUID ResourceManagerId; |
| 15175 | } ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION; |
| 15176 | |
| 15177 | typedef struct _ENLISTMENT_CRM_INFORMATION { |
| 15178 | GUID CrmTransactionManagerId; |
| 15179 | GUID CrmResourceManagerId; |
| 15180 | GUID CrmEnlistmentId; |
| 15181 | } ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION; |
| 15182 | |
| 15183 | typedef enum _ENLISTMENT_INFORMATION_CLASS { |
| 15184 | EnlistmentBasicInformation, |
| 15185 | EnlistmentRecoveryInformation, |
| 15186 | EnlistmentCrmInformation |
| 15187 | } ENLISTMENT_INFORMATION_CLASS; |
| 15188 | |
| 15189 | typedef struct _TRANSACTION_LIST_ENTRY { |
| 15190 | /* UOW is typedef'ed as GUID just above. Changed type of UOW |
| 15191 | * member from UOW to GUID for C++ compat. Using ::UOW for C++ |
| 15192 | * works too but we were reported some problems in corner cases |
| 15193 | */ |
| 15194 | GUID UOW; |
| 15195 | } TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY; |
| 15196 | |
| 15197 | typedef struct _TRANSACTION_LIST_INFORMATION { |
| 15198 | ULONG NumberOfTransactions; |
| 15199 | TRANSACTION_LIST_ENTRY TransactionInformation[1]; |
| 15200 | } TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION; |
| 15201 | |
| 15202 | typedef NTSTATUS |
| 15203 | (NTAPI *PFN_NT_CREATE_TRANSACTION)( |
| 15204 | OUT PHANDLE TransactionHandle, |
| 15205 | IN ACCESS_MASK DesiredAccess, |
| 15206 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15207 | IN LPGUID Uow OPTIONAL, |
| 15208 | IN HANDLE TmHandle OPTIONAL, |
| 15209 | IN ULONG CreateOptions OPTIONAL, |
| 15210 | IN ULONG IsolationLevel OPTIONAL, |
| 15211 | IN ULONG IsolationFlags OPTIONAL, |
| 15212 | IN PLARGE_INTEGER Timeout OPTIONAL, |
| 15213 | IN PUNICODE_STRING Description OPTIONAL); |
| 15214 | |
| 15215 | typedef NTSTATUS |
| 15216 | (NTAPI *PFN_NT_OPEN_TRANSACTION)( |
| 15217 | OUT PHANDLE TransactionHandle, |
| 15218 | IN ACCESS_MASK DesiredAccess, |
| 15219 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15220 | IN LPGUID Uow OPTIONAL, |
| 15221 | IN HANDLE TmHandle OPTIONAL); |
| 15222 | |
| 15223 | typedef NTSTATUS |
| 15224 | (NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)( |
| 15225 | IN HANDLE TransactionHandle, |
| 15226 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 15227 | OUT PVOID TransactionInformation, |
| 15228 | IN ULONG TransactionInformationLength, |
| 15229 | OUT PULONG ReturnLength OPTIONAL); |
| 15230 | |
| 15231 | typedef NTSTATUS |
| 15232 | (NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)( |
| 15233 | IN HANDLE TransactionHandle, |
| 15234 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 15235 | IN PVOID TransactionInformation, |
| 15236 | IN ULONG TransactionInformationLength); |
| 15237 | |
| 15238 | typedef NTSTATUS |
| 15239 | (NTAPI *PFN_NT_COMMIT_TRANSACTION)( |
| 15240 | IN HANDLE TransactionHandle, |
| 15241 | IN BOOLEAN Wait); |
| 15242 | |
| 15243 | typedef NTSTATUS |
| 15244 | (NTAPI *PFN_NT_ROLLBACK_TRANSACTION)( |
| 15245 | IN HANDLE TransactionHandle, |
| 15246 | IN BOOLEAN Wait); |
| 15247 | |
| 15248 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 15249 | |
| 15250 | NTSYSCALLAPI |
| 15251 | NTSTATUS |
| 15252 | NTAPI |
| 15253 | NtCreateTransactionManager( |
| 15254 | OUT PHANDLE TmHandle, |
| 15255 | IN ACCESS_MASK DesiredAccess, |
| 15256 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15257 | IN PUNICODE_STRING LogFileName OPTIONAL, |
| 15258 | IN ULONG CreateOptions OPTIONAL, |
| 15259 | IN ULONG CommitStrength OPTIONAL); |
| 15260 | |
| 15261 | NTSYSCALLAPI |
| 15262 | NTSTATUS |
| 15263 | NTAPI |
| 15264 | NtOpenTransactionManager( |
| 15265 | OUT PHANDLE TmHandle, |
| 15266 | IN ACCESS_MASK DesiredAccess, |
| 15267 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15268 | IN PUNICODE_STRING LogFileName OPTIONAL, |
| 15269 | IN LPGUID TmIdentity OPTIONAL, |
| 15270 | IN ULONG OpenOptions OPTIONAL); |
| 15271 | |
| 15272 | NTSYSCALLAPI |
| 15273 | NTSTATUS |
| 15274 | NTAPI |
| 15275 | NtRenameTransactionManager( |
| 15276 | IN PUNICODE_STRING LogFileName, |
| 15277 | IN LPGUID ExistingTransactionManagerGuid); |
| 15278 | |
| 15279 | NTSYSCALLAPI |
| 15280 | NTSTATUS |
| 15281 | NTAPI |
| 15282 | NtRollforwardTransactionManager( |
| 15283 | IN HANDLE TransactionManagerHandle, |
| 15284 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15285 | |
| 15286 | NTSYSCALLAPI |
| 15287 | NTSTATUS |
| 15288 | NTAPI |
| 15289 | NtRecoverTransactionManager( |
| 15290 | IN HANDLE TransactionManagerHandle); |
| 15291 | |
| 15292 | NTSYSCALLAPI |
| 15293 | NTSTATUS |
| 15294 | NTAPI |
| 15295 | NtQueryInformationTransactionManager( |
| 15296 | IN HANDLE TransactionManagerHandle, |
| 15297 | IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, |
| 15298 | OUT PVOID TransactionManagerInformation, |
| 15299 | IN ULONG TransactionManagerInformationLength, |
| 15300 | OUT PULONG ReturnLength); |
| 15301 | |
| 15302 | NTSYSCALLAPI |
| 15303 | NTSTATUS |
| 15304 | NTAPI |
| 15305 | NtSetInformationTransactionManager( |
| 15306 | IN HANDLE TmHandle OPTIONAL, |
| 15307 | IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, |
| 15308 | IN PVOID TransactionManagerInformation, |
| 15309 | IN ULONG TransactionManagerInformationLength); |
| 15310 | |
| 15311 | NTSYSCALLAPI |
| 15312 | NTSTATUS |
| 15313 | NTAPI |
| 15314 | NtEnumerateTransactionObject( |
| 15315 | IN HANDLE RootObjectHandle OPTIONAL, |
| 15316 | IN KTMOBJECT_TYPE QueryType, |
| 15317 | IN OUT PKTMOBJECT_CURSOR ObjectCursor, |
| 15318 | IN ULONG ObjectCursorLength, |
| 15319 | OUT PULONG ReturnLength); |
| 15320 | |
| 15321 | NTSYSCALLAPI |
| 15322 | NTSTATUS |
| 15323 | NTAPI |
| 15324 | NtCreateTransaction( |
| 15325 | OUT PHANDLE TransactionHandle, |
| 15326 | IN ACCESS_MASK DesiredAccess, |
| 15327 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15328 | IN LPGUID Uow OPTIONAL, |
| 15329 | IN HANDLE TmHandle OPTIONAL, |
| 15330 | IN ULONG CreateOptions OPTIONAL, |
| 15331 | IN ULONG IsolationLevel OPTIONAL, |
| 15332 | IN ULONG IsolationFlags OPTIONAL, |
| 15333 | IN PLARGE_INTEGER Timeout OPTIONAL, |
| 15334 | IN PUNICODE_STRING Description OPTIONAL); |
| 15335 | |
| 15336 | NTSYSCALLAPI |
| 15337 | NTSTATUS |
| 15338 | NTAPI |
| 15339 | NtOpenTransaction( |
| 15340 | OUT PHANDLE TransactionHandle, |
| 15341 | IN ACCESS_MASK DesiredAccess, |
| 15342 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15343 | IN LPGUID Uow, |
| 15344 | IN HANDLE TmHandle OPTIONAL); |
| 15345 | |
| 15346 | NTSYSCALLAPI |
| 15347 | NTSTATUS |
| 15348 | NTAPI |
| 15349 | NtQueryInformationTransaction( |
| 15350 | IN HANDLE TransactionHandle, |
| 15351 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 15352 | OUT PVOID TransactionInformation, |
| 15353 | IN ULONG TransactionInformationLength, |
| 15354 | OUT PULONG ReturnLength OPTIONAL); |
| 15355 | |
| 15356 | NTSYSCALLAPI |
| 15357 | NTSTATUS |
| 15358 | NTAPI |
| 15359 | NtSetInformationTransaction( |
| 15360 | IN HANDLE TransactionHandle, |
| 15361 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 15362 | IN PVOID TransactionInformation, |
| 15363 | IN ULONG TransactionInformationLength); |
| 15364 | |
| 15365 | NTSYSCALLAPI |
| 15366 | NTSTATUS |
| 15367 | NTAPI |
| 15368 | NtCommitTransaction( |
| 15369 | IN HANDLE TransactionHandle, |
| 15370 | IN BOOLEAN Wait); |
| 15371 | |
| 15372 | NTSYSCALLAPI |
| 15373 | NTSTATUS |
| 15374 | NTAPI |
| 15375 | NtRollbackTransaction( |
| 15376 | IN HANDLE TransactionHandle, |
| 15377 | IN BOOLEAN Wait); |
| 15378 | |
| 15379 | NTSYSCALLAPI |
| 15380 | NTSTATUS |
| 15381 | NTAPI |
| 15382 | NtCreateEnlistment( |
| 15383 | OUT PHANDLE EnlistmentHandle, |
| 15384 | IN ACCESS_MASK DesiredAccess, |
| 15385 | IN HANDLE ResourceManagerHandle, |
| 15386 | IN HANDLE TransactionHandle, |
| 15387 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15388 | IN ULONG CreateOptions OPTIONAL, |
| 15389 | IN NOTIFICATION_MASK NotificationMask, |
| 15390 | IN PVOID EnlistmentKey OPTIONAL); |
| 15391 | |
| 15392 | NTSYSCALLAPI |
| 15393 | NTSTATUS |
| 15394 | NTAPI |
| 15395 | NtOpenEnlistment( |
| 15396 | OUT PHANDLE EnlistmentHandle, |
| 15397 | IN ACCESS_MASK DesiredAccess, |
| 15398 | IN HANDLE ResourceManagerHandle, |
| 15399 | IN LPGUID EnlistmentGuid, |
| 15400 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); |
| 15401 | |
| 15402 | NTSYSCALLAPI |
| 15403 | NTSTATUS |
| 15404 | NTAPI |
| 15405 | NtQueryInformationEnlistment( |
| 15406 | IN HANDLE EnlistmentHandle, |
| 15407 | IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, |
| 15408 | OUT PVOID EnlistmentInformation, |
| 15409 | IN ULONG EnlistmentInformationLength, |
| 15410 | OUT PULONG ReturnLength); |
| 15411 | |
| 15412 | NTSYSCALLAPI |
| 15413 | NTSTATUS |
| 15414 | NTAPI |
| 15415 | NtSetInformationEnlistment( |
| 15416 | IN HANDLE EnlistmentHandle OPTIONAL, |
| 15417 | IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, |
| 15418 | IN PVOID EnlistmentInformation, |
| 15419 | IN ULONG EnlistmentInformationLength); |
| 15420 | |
| 15421 | NTSYSCALLAPI |
| 15422 | NTSTATUS |
| 15423 | NTAPI |
| 15424 | NtRecoverEnlistment( |
| 15425 | IN HANDLE EnlistmentHandle, |
| 15426 | IN PVOID EnlistmentKey OPTIONAL); |
| 15427 | |
| 15428 | NTSYSCALLAPI |
| 15429 | NTSTATUS |
| 15430 | NTAPI |
| 15431 | NtPrePrepareEnlistment( |
| 15432 | IN HANDLE EnlistmentHandle, |
| 15433 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15434 | |
| 15435 | NTSYSCALLAPI |
| 15436 | NTSTATUS |
| 15437 | NTAPI |
| 15438 | NtPrepareEnlistment( |
| 15439 | IN HANDLE EnlistmentHandle, |
| 15440 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15441 | |
| 15442 | NTSYSCALLAPI |
| 15443 | NTSTATUS |
| 15444 | NTAPI |
| 15445 | NtCommitEnlistment( |
| 15446 | IN HANDLE EnlistmentHandle, |
| 15447 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15448 | |
| 15449 | NTSYSCALLAPI |
| 15450 | NTSTATUS |
| 15451 | NTAPI |
| 15452 | NtRollbackEnlistment( |
| 15453 | IN HANDLE EnlistmentHandle, |
| 15454 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15455 | |
| 15456 | NTSYSCALLAPI |
| 15457 | NTSTATUS |
| 15458 | NTAPI |
| 15459 | NtPrePrepareComplete( |
| 15460 | IN HANDLE EnlistmentHandle, |
| 15461 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15462 | |
| 15463 | NTSYSCALLAPI |
| 15464 | NTSTATUS |
| 15465 | NTAPI |
| 15466 | NtPrepareComplete( |
| 15467 | IN HANDLE EnlistmentHandle, |
| 15468 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15469 | |
| 15470 | NTSYSCALLAPI |
| 15471 | NTSTATUS |
| 15472 | NTAPI |
| 15473 | NtCommitComplete( |
| 15474 | IN HANDLE EnlistmentHandle, |
| 15475 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15476 | |
| 15477 | NTSYSCALLAPI |
| 15478 | NTSTATUS |
| 15479 | NTAPI |
| 15480 | NtReadOnlyEnlistment( |
| 15481 | IN HANDLE EnlistmentHandle, |
| 15482 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15483 | |
| 15484 | NTSYSCALLAPI |
| 15485 | NTSTATUS |
| 15486 | NTAPI |
| 15487 | NtRollbackComplete( |
| 15488 | IN HANDLE EnlistmentHandle, |
| 15489 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15490 | |
| 15491 | NTSYSCALLAPI |
| 15492 | NTSTATUS |
| 15493 | NTAPI |
| 15494 | NtSinglePhaseReject( |
| 15495 | IN HANDLE EnlistmentHandle, |
| 15496 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15497 | |
| 15498 | NTSYSCALLAPI |
| 15499 | NTSTATUS |
| 15500 | NTAPI |
| 15501 | NtCreateResourceManager( |
| 15502 | OUT PHANDLE ResourceManagerHandle, |
| 15503 | IN ACCESS_MASK DesiredAccess, |
| 15504 | IN HANDLE TmHandle, |
| 15505 | IN LPGUID RmGuid, |
| 15506 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15507 | IN ULONG CreateOptions OPTIONAL, |
| 15508 | IN PUNICODE_STRING Description OPTIONAL); |
| 15509 | |
| 15510 | NTSYSCALLAPI |
| 15511 | NTSTATUS |
| 15512 | NTAPI |
| 15513 | NtOpenResourceManager( |
| 15514 | OUT PHANDLE ResourceManagerHandle, |
| 15515 | IN ACCESS_MASK DesiredAccess, |
| 15516 | IN HANDLE TmHandle, |
| 15517 | IN LPGUID ResourceManagerGuid OPTIONAL, |
| 15518 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); |
| 15519 | |
| 15520 | NTSYSCALLAPI |
| 15521 | NTSTATUS |
| 15522 | NTAPI |
| 15523 | NtRecoverResourceManager( |
| 15524 | IN HANDLE ResourceManagerHandle); |
| 15525 | |
| 15526 | NTSYSCALLAPI |
| 15527 | NTSTATUS |
| 15528 | NTAPI |
| 15529 | NtGetNotificationResourceManager( |
| 15530 | IN HANDLE ResourceManagerHandle, |
| 15531 | OUT PTRANSACTION_NOTIFICATION TransactionNotification, |
| 15532 | IN ULONG NotificationLength, |
| 15533 | IN PLARGE_INTEGER Timeout OPTIONAL, |
| 15534 | OUT PULONG ReturnLength OPTIONAL, |
| 15535 | IN ULONG Asynchronous, |
| 15536 | IN ULONG_PTR AsynchronousContext OPTIONAL); |
| 15537 | |
| 15538 | NTSYSCALLAPI |
| 15539 | NTSTATUS |
| 15540 | NTAPI |
| 15541 | NtQueryInformationResourceManager( |
| 15542 | IN HANDLE ResourceManagerHandle, |
| 15543 | IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, |
| 15544 | OUT PVOID ResourceManagerInformation, |
| 15545 | IN ULONG ResourceManagerInformationLength, |
| 15546 | OUT PULONG ReturnLength OPTIONAL); |
| 15547 | |
| 15548 | NTSYSCALLAPI |
| 15549 | NTSTATUS |
| 15550 | NTAPI |
| 15551 | NtSetInformationResourceManager( |
| 15552 | IN HANDLE ResourceManagerHandle, |
| 15553 | IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, |
| 15554 | IN PVOID ResourceManagerInformation, |
| 15555 | IN ULONG ResourceManagerInformationLength); |
| 15556 | |
| 15557 | NTSYSCALLAPI |
| 15558 | NTSTATUS |
| 15559 | NTAPI |
| 15560 | NtRegisterProtocolAddressInformation( |
| 15561 | IN HANDLE ResourceManager, |
| 15562 | IN PCRM_PROTOCOL_ID ProtocolId, |
| 15563 | IN ULONG ProtocolInformationSize, |
| 15564 | IN PVOID ProtocolInformation, |
| 15565 | IN ULONG CreateOptions OPTIONAL); |
| 15566 | |
| 15567 | NTSYSCALLAPI |
| 15568 | NTSTATUS |
| 15569 | NTAPI |
| 15570 | NtPropagationComplete( |
| 15571 | IN HANDLE ResourceManagerHandle, |
| 15572 | IN ULONG RequestCookie, |
| 15573 | IN ULONG BufferLength, |
| 15574 | IN PVOID Buffer); |
| 15575 | |
| 15576 | NTSYSCALLAPI |
| 15577 | NTSTATUS |
| 15578 | NTAPI |
| 15579 | NtPropagationFailed( |
| 15580 | IN HANDLE ResourceManagerHandle, |
| 15581 | IN ULONG RequestCookie, |
| 15582 | IN NTSTATUS PropStatus); |
| 15583 | |
| 15584 | #endif /* NTDDI_VERSION >= NTDDI_VISTA */ |
| 15585 | |
| 15586 | #endif /* !_NTTMAPI_ */ |
| 15587 | |
| 15588 | /****************************************************************************** |
| 15589 | * ZwXxx Functions * |
| 15590 | ******************************************************************************/ |
| 15591 | |
| 15592 | /* Constants */ |
| 15593 | #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) |
| 15594 | #define ZwCurrentProcess() NtCurrentProcess() |
| 15595 | #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) |
| 15596 | #define ZwCurrentThread() NtCurrentThread() |
| 15597 | |
| 15598 | |
| 15599 | #if (NTDDI_VERSION >= NTDDI_WIN2K) |
| 15600 | |
| 15601 | NTSYSAPI |
| 15602 | NTSTATUS |
| 15603 | NTAPI |
| 15604 | ZwClose( |
| 15605 | IN HANDLE Handle); |
| 15606 | |
| 15607 | NTSYSAPI |
| 15608 | NTSTATUS |
| 15609 | NTAPI |
| 15610 | ZwCreateDirectoryObject( |
| 15611 | OUT PHANDLE DirectoryHandle, |
| 15612 | IN ACCESS_MASK DesiredAccess, |
| 15613 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
| 15614 | |
| 15615 | NTSYSAPI |
| 15616 | NTSTATUS |
| 15617 | NTAPI |
| 15618 | ZwCreateFile( |
| 15619 | OUT PHANDLE FileHandle, |
| 15620 | IN ACCESS_MASK DesiredAccess, |
| 15621 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15622 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15623 | IN PLARGE_INTEGER AllocationSize OPTIONAL, |
| 15624 | IN ULONG FileAttributes, |
| 15625 | IN ULONG ShareAccess, |
| 15626 | IN ULONG CreateDisposition, |
| 15627 | IN ULONG CreateOptions, |
| 15628 | IN PVOID EaBuffer OPTIONAL, |
| 15629 | IN ULONG EaLength); |
| 15630 | |
| 15631 | NTSYSAPI |
| 15632 | NTSTATUS |
| 15633 | NTAPI |
| 15634 | ZwCreateKey( |
| 15635 | OUT PHANDLE KeyHandle, |
| 15636 | IN ACCESS_MASK DesiredAccess, |
| 15637 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15638 | IN ULONG TitleIndex, |
| 15639 | IN PUNICODE_STRING Class OPTIONAL, |
| 15640 | IN ULONG CreateOptions, |
| 15641 | OUT PULONG Disposition OPTIONAL); |
| 15642 | |
| 15643 | NTSYSAPI |
| 15644 | NTSTATUS |
| 15645 | NTAPI |
| 15646 | ZwCreateSection( |
| 15647 | OUT PHANDLE SectionHandle, |
| 15648 | IN ACCESS_MASK DesiredAccess, |
| 15649 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15650 | IN PLARGE_INTEGER MaximumSize OPTIONAL, |
| 15651 | IN ULONG SectionPageProtection, |
| 15652 | IN ULONG AllocationAttributes, |
| 15653 | IN HANDLE FileHandle OPTIONAL); |
| 15654 | |
| 15655 | NTSYSAPI |
| 15656 | NTSTATUS |
| 15657 | NTAPI |
| 15658 | ZwDeleteKey( |
| 15659 | IN HANDLE KeyHandle); |
| 15660 | |
| 15661 | NTSYSAPI |
| 15662 | NTSTATUS |
| 15663 | NTAPI |
| 15664 | ZwDeleteValueKey( |
| 15665 | IN HANDLE KeyHandle, |
| 15666 | IN PUNICODE_STRING ValueName); |
| 15667 | |
| 15668 | NTSYSAPI |
| 15669 | NTSTATUS |
| 15670 | NTAPI |
| 15671 | ZwEnumerateKey( |
| 15672 | IN HANDLE KeyHandle, |
| 15673 | IN ULONG Index, |
| 15674 | IN KEY_INFORMATION_CLASS KeyInformationClass, |
| 15675 | OUT PVOID KeyInformation OPTIONAL, |
| 15676 | IN ULONG Length, |
| 15677 | OUT PULONG ResultLength); |
| 15678 | |
| 15679 | NTSYSAPI |
| 15680 | NTSTATUS |
| 15681 | NTAPI |
| 15682 | ZwEnumerateValueKey( |
| 15683 | IN HANDLE KeyHandle, |
| 15684 | IN ULONG Index, |
| 15685 | IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| 15686 | OUT PVOID KeyValueInformation OPTIONAL, |
| 15687 | IN ULONG Length, |
| 15688 | OUT PULONG ResultLength); |
| 15689 | |
| 15690 | NTSYSAPI |
| 15691 | NTSTATUS |
| 15692 | NTAPI |
| 15693 | ZwFlushKey( |
| 15694 | IN HANDLE KeyHandle); |
| 15695 | |
| 15696 | NTSYSAPI |
| 15697 | NTSTATUS |
| 15698 | NTAPI |
| 15699 | ZwLoadDriver( |
| 15700 | IN PUNICODE_STRING DriverServiceName); |
| 15701 | |
| 15702 | NTSYSAPI |
| 15703 | NTSTATUS |
| 15704 | NTAPI |
| 15705 | ZwMakeTemporaryObject( |
| 15706 | IN HANDLE Handle); |
| 15707 | |
| 15708 | NTSYSAPI |
| 15709 | NTSTATUS |
| 15710 | NTAPI |
| 15711 | ZwMapViewOfSection( |
| 15712 | IN HANDLE SectionHandle, |
| 15713 | IN HANDLE ProcessHandle, |
| 15714 | IN OUT PVOID *BaseAddress, |
| 15715 | IN ULONG_PTR ZeroBits, |
| 15716 | IN SIZE_T CommitSize, |
| 15717 | IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, |
| 15718 | IN OUT PSIZE_T ViewSize, |
| 15719 | IN SECTION_INHERIT InheritDisposition, |
| 15720 | IN ULONG AllocationType, |
| 15721 | IN ULONG Protect); |
| 15722 | |
| 15723 | NTSYSAPI |
| 15724 | NTSTATUS |
| 15725 | NTAPI |
| 15726 | ZwOpenFile( |
| 15727 | OUT PHANDLE FileHandle, |
| 15728 | IN ACCESS_MASK DesiredAccess, |
| 15729 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15730 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15731 | IN ULONG ShareAccess, |
| 15732 | IN ULONG OpenOptions); |
| 15733 | |
| 15734 | NTSYSAPI |
| 15735 | NTSTATUS |
| 15736 | NTAPI |
| 15737 | ZwOpenKey( |
| 15738 | OUT PHANDLE KeyHandle, |
| 15739 | IN ACCESS_MASK DesiredAccess, |
| 15740 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
| 15741 | |
| 15742 | NTSYSAPI |
| 15743 | NTSTATUS |
| 15744 | NTAPI |
| 15745 | ZwOpenSection( |
| 15746 | OUT PHANDLE SectionHandle, |
| 15747 | IN ACCESS_MASK DesiredAccess, |
| 15748 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
| 15749 | |
| 15750 | NTSYSAPI |
| 15751 | NTSTATUS |
| 15752 | NTAPI |
| 15753 | ZwOpenSymbolicLinkObject( |
| 15754 | OUT PHANDLE LinkHandle, |
| 15755 | IN ACCESS_MASK DesiredAccess, |
| 15756 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
| 15757 | |
| 15758 | NTSYSAPI |
| 15759 | NTSTATUS |
| 15760 | NTAPI |
| 15761 | ZwQueryInformationFile( |
| 15762 | IN HANDLE FileHandle, |
| 15763 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15764 | OUT PVOID FileInformation, |
| 15765 | IN ULONG Length, |
| 15766 | IN FILE_INFORMATION_CLASS FileInformationClass); |
| 15767 | |
| 15768 | NTSYSAPI |
| 15769 | NTSTATUS |
| 15770 | NTAPI |
| 15771 | ZwQueryKey( |
| 15772 | IN HANDLE KeyHandle, |
| 15773 | IN KEY_INFORMATION_CLASS KeyInformationClass, |
| 15774 | OUT PVOID KeyInformation OPTIONAL, |
| 15775 | IN ULONG Length, |
| 15776 | OUT PULONG ResultLength); |
| 15777 | |
| 15778 | NTSYSAPI |
| 15779 | NTSTATUS |
| 15780 | NTAPI |
| 15781 | ZwQuerySymbolicLinkObject( |
| 15782 | IN HANDLE LinkHandle, |
| 15783 | IN OUT PUNICODE_STRING LinkTarget, |
| 15784 | OUT PULONG ReturnedLength OPTIONAL); |
| 15785 | |
| 15786 | NTSYSAPI |
| 15787 | NTSTATUS |
| 15788 | NTAPI |
| 15789 | ZwQueryValueKey( |
| 15790 | IN HANDLE KeyHandle, |
| 15791 | IN PUNICODE_STRING ValueName, |
| 15792 | IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| 15793 | OUT PVOID KeyValueInformation OPTIONAL, |
| 15794 | IN ULONG Length, |
| 15795 | OUT PULONG ResultLength); |
| 15796 | |
| 15797 | NTSYSAPI |
| 15798 | NTSTATUS |
| 15799 | NTAPI |
| 15800 | ZwReadFile( |
| 15801 | IN HANDLE FileHandle, |
| 15802 | IN HANDLE Event OPTIONAL, |
| 15803 | IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, |
| 15804 | IN PVOID ApcContext OPTIONAL, |
| 15805 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15806 | OUT PVOID Buffer, |
| 15807 | IN ULONG Length, |
| 15808 | IN PLARGE_INTEGER ByteOffset OPTIONAL, |
| 15809 | IN PULONG Key OPTIONAL); |
| 15810 | |
| 15811 | NTSYSAPI |
| 15812 | NTSTATUS |
| 15813 | NTAPI |
| 15814 | ZwSetInformationFile( |
| 15815 | IN HANDLE FileHandle, |
| 15816 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15817 | IN PVOID FileInformation, |
| 15818 | IN ULONG Length, |
| 15819 | IN FILE_INFORMATION_CLASS FileInformationClass); |
| 15820 | |
| 15821 | NTSYSAPI |
| 15822 | NTSTATUS |
| 15823 | NTAPI |
| 15824 | ZwSetValueKey( |
| 15825 | IN HANDLE KeyHandle, |
| 15826 | IN PUNICODE_STRING ValueName, |
| 15827 | IN ULONG TitleIndex OPTIONAL, |
| 15828 | IN ULONG Type, |
| 15829 | IN PVOID Data OPTIONAL, |
| 15830 | IN ULONG DataSize); |
| 15831 | |
| 15832 | NTSYSAPI |
| 15833 | NTSTATUS |
| 15834 | NTAPI |
| 15835 | ZwUnloadDriver( |
| 15836 | IN PUNICODE_STRING DriverServiceName); |
| 15837 | |
| 15838 | NTSYSAPI |
| 15839 | NTSTATUS |
| 15840 | NTAPI |
| 15841 | ZwUnmapViewOfSection( |
| 15842 | IN HANDLE ProcessHandle, |
| 15843 | IN PVOID BaseAddress OPTIONAL); |
| 15844 | |
| 15845 | NTSYSAPI |
| 15846 | NTSTATUS |
| 15847 | NTAPI |
| 15848 | ZwWriteFile( |
| 15849 | IN HANDLE FileHandle, |
| 15850 | IN HANDLE Event OPTIONAL, |
| 15851 | IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, |
| 15852 | IN PVOID ApcContext OPTIONAL, |
| 15853 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 15854 | IN PVOID Buffer, |
| 15855 | IN ULONG Length, |
| 15856 | IN PLARGE_INTEGER ByteOffset OPTIONAL, |
| 15857 | IN PULONG Key OPTIONAL); |
| 15858 | |
| 15859 | NTSYSAPI |
| 15860 | NTSTATUS |
| 15861 | NTAPI |
| 15862 | ZwQueryFullAttributesFile( |
| 15863 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15864 | OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation); |
| 15865 | |
| 15866 | #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ |
| 15867 | |
| 15868 | |
| 15869 | #if (NTDDI_VERSION >= NTDDI_WS03) |
| 15870 | NTSYSCALLAPI |
| 15871 | NTSTATUS |
| 15872 | NTAPI |
| 15873 | ZwOpenEvent( |
| 15874 | OUT PHANDLE EventHandle, |
| 15875 | IN ACCESS_MASK DesiredAccess, |
| 15876 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
| 15877 | #endif |
| 15878 | |
| 15879 | #if (NTDDI_VERSION >= NTDDI_VISTA) |
| 15880 | |
| 15881 | NTSYSAPI |
| 15882 | NTSTATUS |
| 15883 | ZwCreateKeyTransacted( |
| 15884 | OUT PHANDLE KeyHandle, |
| 15885 | IN ACCESS_MASK DesiredAccess, |
| 15886 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15887 | IN ULONG TitleIndex, |
| 15888 | IN PUNICODE_STRING Class OPTIONAL, |
| 15889 | IN ULONG CreateOptions, |
| 15890 | IN HANDLE TransactionHandle, |
| 15891 | OUT PULONG Disposition OPTIONAL); |
| 15892 | |
| 15893 | NTSYSAPI |
| 15894 | NTSTATUS |
| 15895 | NTAPI |
| 15896 | ZwOpenKeyTransacted( |
| 15897 | OUT PHANDLE KeyHandle, |
| 15898 | IN ACCESS_MASK DesiredAccess, |
| 15899 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 15900 | IN HANDLE TransactionHandle); |
| 15901 | |
| 15902 | NTSYSCALLAPI |
| 15903 | NTSTATUS |
| 15904 | NTAPI |
| 15905 | ZwCreateTransactionManager( |
| 15906 | OUT PHANDLE TmHandle, |
| 15907 | IN ACCESS_MASK DesiredAccess, |
| 15908 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15909 | IN PUNICODE_STRING LogFileName OPTIONAL, |
| 15910 | IN ULONG CreateOptions OPTIONAL, |
| 15911 | IN ULONG CommitStrength OPTIONAL); |
| 15912 | |
| 15913 | NTSYSCALLAPI |
| 15914 | NTSTATUS |
| 15915 | NTAPI |
| 15916 | ZwOpenTransactionManager( |
| 15917 | OUT PHANDLE TmHandle, |
| 15918 | IN ACCESS_MASK DesiredAccess, |
| 15919 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15920 | IN PUNICODE_STRING LogFileName OPTIONAL, |
| 15921 | IN LPGUID TmIdentity OPTIONAL, |
| 15922 | IN ULONG OpenOptions OPTIONAL); |
| 15923 | |
| 15924 | NTSYSCALLAPI |
| 15925 | NTSTATUS |
| 15926 | NTAPI |
| 15927 | ZwRollforwardTransactionManager( |
| 15928 | IN HANDLE TransactionManagerHandle, |
| 15929 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 15930 | |
| 15931 | NTSYSCALLAPI |
| 15932 | NTSTATUS |
| 15933 | NTAPI |
| 15934 | ZwRecoverTransactionManager( |
| 15935 | IN HANDLE TransactionManagerHandle); |
| 15936 | |
| 15937 | NTSYSCALLAPI |
| 15938 | NTSTATUS |
| 15939 | NTAPI |
| 15940 | ZwQueryInformationTransactionManager( |
| 15941 | IN HANDLE TransactionManagerHandle, |
| 15942 | IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, |
| 15943 | OUT PVOID TransactionManagerInformation, |
| 15944 | IN ULONG TransactionManagerInformationLength, |
| 15945 | OUT PULONG ReturnLength OPTIONAL); |
| 15946 | |
| 15947 | NTSYSCALLAPI |
| 15948 | NTSTATUS |
| 15949 | NTAPI |
| 15950 | ZwSetInformationTransactionManager( |
| 15951 | IN HANDLE TmHandle, |
| 15952 | IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, |
| 15953 | IN PVOID TransactionManagerInformation, |
| 15954 | IN ULONG TransactionManagerInformationLength); |
| 15955 | |
| 15956 | NTSYSCALLAPI |
| 15957 | NTSTATUS |
| 15958 | NTAPI |
| 15959 | ZwEnumerateTransactionObject( |
| 15960 | IN HANDLE RootObjectHandle OPTIONAL, |
| 15961 | IN KTMOBJECT_TYPE QueryType, |
| 15962 | IN OUT PKTMOBJECT_CURSOR ObjectCursor, |
| 15963 | IN ULONG ObjectCursorLength, |
| 15964 | OUT PULONG ReturnLength); |
| 15965 | |
| 15966 | NTSYSCALLAPI |
| 15967 | NTSTATUS |
| 15968 | NTAPI |
| 15969 | ZwCreateTransaction( |
| 15970 | OUT PHANDLE TransactionHandle, |
| 15971 | IN ACCESS_MASK DesiredAccess, |
| 15972 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15973 | IN LPGUID Uow OPTIONAL, |
| 15974 | IN HANDLE TmHandle OPTIONAL, |
| 15975 | IN ULONG CreateOptions OPTIONAL, |
| 15976 | IN ULONG IsolationLevel OPTIONAL, |
| 15977 | IN ULONG IsolationFlags OPTIONAL, |
| 15978 | IN PLARGE_INTEGER Timeout OPTIONAL, |
| 15979 | IN PUNICODE_STRING Description OPTIONAL); |
| 15980 | |
| 15981 | NTSYSCALLAPI |
| 15982 | NTSTATUS |
| 15983 | NTAPI |
| 15984 | ZwOpenTransaction( |
| 15985 | OUT PHANDLE TransactionHandle, |
| 15986 | IN ACCESS_MASK DesiredAccess, |
| 15987 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 15988 | IN LPGUID Uow, |
| 15989 | IN HANDLE TmHandle OPTIONAL); |
| 15990 | |
| 15991 | NTSYSCALLAPI |
| 15992 | NTSTATUS |
| 15993 | NTAPI |
| 15994 | ZwQueryInformationTransaction( |
| 15995 | IN HANDLE TransactionHandle, |
| 15996 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 15997 | OUT PVOID TransactionInformation, |
| 15998 | IN ULONG TransactionInformationLength, |
| 15999 | OUT PULONG ReturnLength OPTIONAL); |
| 16000 | |
| 16001 | NTSYSCALLAPI |
| 16002 | NTSTATUS |
| 16003 | NTAPI |
| 16004 | ZwSetInformationTransaction( |
| 16005 | IN HANDLE TransactionHandle, |
| 16006 | IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, |
| 16007 | IN PVOID TransactionInformation, |
| 16008 | IN ULONG TransactionInformationLength); |
| 16009 | |
| 16010 | NTSYSCALLAPI |
| 16011 | NTSTATUS |
| 16012 | NTAPI |
| 16013 | ZwCommitTransaction( |
| 16014 | IN HANDLE TransactionHandle, |
| 16015 | IN BOOLEAN Wait); |
| 16016 | |
| 16017 | NTSYSCALLAPI |
| 16018 | NTSTATUS |
| 16019 | NTAPI |
| 16020 | ZwRollbackTransaction( |
| 16021 | IN HANDLE TransactionHandle, |
| 16022 | IN BOOLEAN Wait); |
| 16023 | |
| 16024 | NTSYSCALLAPI |
| 16025 | NTSTATUS |
| 16026 | NTAPI |
| 16027 | ZwCreateResourceManager( |
| 16028 | OUT PHANDLE ResourceManagerHandle, |
| 16029 | IN ACCESS_MASK DesiredAccess, |
| 16030 | IN HANDLE TmHandle, |
| 16031 | IN LPGUID ResourceManagerGuid OPTIONAL, |
| 16032 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 16033 | IN ULONG CreateOptions OPTIONAL, |
| 16034 | IN PUNICODE_STRING Description OPTIONAL); |
| 16035 | |
| 16036 | NTSYSCALLAPI |
| 16037 | NTSTATUS |
| 16038 | NTAPI |
| 16039 | ZwOpenResourceManager( |
| 16040 | OUT PHANDLE ResourceManagerHandle, |
| 16041 | IN ACCESS_MASK DesiredAccess, |
| 16042 | IN HANDLE TmHandle, |
| 16043 | IN LPGUID ResourceManagerGuid, |
| 16044 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); |
| 16045 | |
| 16046 | NTSYSCALLAPI |
| 16047 | NTSTATUS |
| 16048 | NTAPI |
| 16049 | ZwRecoverResourceManager( |
| 16050 | IN HANDLE ResourceManagerHandle); |
| 16051 | |
| 16052 | NTSYSCALLAPI |
| 16053 | NTSTATUS |
| 16054 | NTAPI |
| 16055 | ZwGetNotificationResourceManager( |
| 16056 | IN HANDLE ResourceManagerHandle, |
| 16057 | OUT PTRANSACTION_NOTIFICATION TransactionNotification, |
| 16058 | IN ULONG NotificationLength, |
| 16059 | IN PLARGE_INTEGER Timeout, |
| 16060 | IN PULONG ReturnLength OPTIONAL, |
| 16061 | IN ULONG Asynchronous, |
| 16062 | IN ULONG_PTR AsynchronousContext OPTIONAL); |
| 16063 | |
| 16064 | NTSYSCALLAPI |
| 16065 | NTSTATUS |
| 16066 | NTAPI |
| 16067 | ZwQueryInformationResourceManager( |
| 16068 | IN HANDLE ResourceManagerHandle, |
| 16069 | IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, |
| 16070 | OUT PVOID ResourceManagerInformation, |
| 16071 | IN ULONG ResourceManagerInformationLength, |
| 16072 | IN PULONG ReturnLength OPTIONAL); |
| 16073 | |
| 16074 | NTSYSCALLAPI |
| 16075 | NTSTATUS |
| 16076 | NTAPI |
| 16077 | ZwSetInformationResourceManager( |
| 16078 | IN HANDLE ResourceManagerHandle, |
| 16079 | IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, |
| 16080 | IN PVOID ResourceManagerInformation, |
| 16081 | IN ULONG ResourceManagerInformationLength); |
| 16082 | |
| 16083 | NTSYSCALLAPI |
| 16084 | NTSTATUS |
| 16085 | NTAPI |
| 16086 | ZwCreateEnlistment( |
| 16087 | OUT PHANDLE EnlistmentHandle, |
| 16088 | IN ACCESS_MASK DesiredAccess, |
| 16089 | IN HANDLE ResourceManagerHandle, |
| 16090 | IN HANDLE TransactionHandle, |
| 16091 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
| 16092 | IN ULONG CreateOptions OPTIONAL, |
| 16093 | IN NOTIFICATION_MASK NotificationMask, |
| 16094 | IN PVOID EnlistmentKey OPTIONAL); |
| 16095 | |
| 16096 | NTSYSCALLAPI |
| 16097 | NTSTATUS |
| 16098 | NTAPI |
| 16099 | ZwOpenEnlistment( |
| 16100 | OUT PHANDLE EnlistmentHandle, |
| 16101 | IN ACCESS_MASK DesiredAccess, |
| 16102 | IN HANDLE RmHandle, |
| 16103 | IN LPGUID EnlistmentGuid, |
| 16104 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); |
| 16105 | |
| 16106 | NTSYSCALLAPI |
| 16107 | NTSTATUS |
| 16108 | NTAPI |
| 16109 | ZwQueryInformationEnlistment( |
| 16110 | IN HANDLE EnlistmentHandle, |
| 16111 | IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, |
| 16112 | OUT PVOID EnlistmentInformation, |
| 16113 | IN ULONG EnlistmentInformationLength, |
| 16114 | IN PULONG ReturnLength OPTIONAL); |
| 16115 | |
| 16116 | NTSYSCALLAPI |
| 16117 | NTSTATUS |
| 16118 | NTAPI |
| 16119 | ZwSetInformationEnlistment( |
| 16120 | IN HANDLE EnlistmentHandle, |
| 16121 | IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, |
| 16122 | IN PVOID EnlistmentInformation, |
| 16123 | IN ULONG EnlistmentInformationLength); |
| 16124 | |
| 16125 | NTSYSCALLAPI |
| 16126 | NTSTATUS |
| 16127 | NTAPI |
| 16128 | ZwRecoverEnlistment( |
| 16129 | IN HANDLE EnlistmentHandle, |
| 16130 | IN PVOID EnlistmentKey OPTIONAL); |
| 16131 | |
| 16132 | NTSYSCALLAPI |
| 16133 | NTSTATUS |
| 16134 | NTAPI |
| 16135 | ZwPrePrepareEnlistment( |
| 16136 | IN HANDLE EnlistmentHandle, |
| 16137 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16138 | |
| 16139 | NTSYSCALLAPI |
| 16140 | NTSTATUS |
| 16141 | NTAPI |
| 16142 | ZwPrepareEnlistment( |
| 16143 | IN HANDLE EnlistmentHandle, |
| 16144 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16145 | |
| 16146 | NTSYSCALLAPI |
| 16147 | NTSTATUS |
| 16148 | NTAPI |
| 16149 | ZwCommitEnlistment( |
| 16150 | IN HANDLE EnlistmentHandle, |
| 16151 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16152 | |
| 16153 | NTSYSCALLAPI |
| 16154 | NTSTATUS |
| 16155 | NTAPI |
| 16156 | ZwRollbackEnlistment( |
| 16157 | IN HANDLE EnlistmentHandle, |
| 16158 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16159 | |
| 16160 | NTSYSCALLAPI |
| 16161 | NTSTATUS |
| 16162 | NTAPI |
| 16163 | ZwPrePrepareComplete( |
| 16164 | IN HANDLE EnlistmentHandle, |
| 16165 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16166 | |
| 16167 | NTSYSCALLAPI |
| 16168 | NTSTATUS |
| 16169 | NTAPI |
| 16170 | ZwPrepareComplete( |
| 16171 | IN HANDLE EnlistmentHandle, |
| 16172 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16173 | |
| 16174 | NTSYSCALLAPI |
| 16175 | NTSTATUS |
| 16176 | NTAPI |
| 16177 | ZwCommitComplete( |
| 16178 | IN HANDLE EnlistmentHandle, |
| 16179 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16180 | |
| 16181 | NTSYSCALLAPI |
| 16182 | NTSTATUS |
| 16183 | NTAPI |
| 16184 | ZwReadOnlyEnlistment( |
| 16185 | IN HANDLE EnlistmentHandle, |
| 16186 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16187 | |
| 16188 | NTSYSCALLAPI |
| 16189 | NTSTATUS |
| 16190 | NTAPI |
| 16191 | ZwRollbackComplete( |
| 16192 | IN HANDLE EnlistmentHandle, |
| 16193 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16194 | |
| 16195 | NTSYSCALLAPI |
| 16196 | NTSTATUS |
| 16197 | NTAPI |
| 16198 | ZwSinglePhaseReject( |
| 16199 | IN HANDLE EnlistmentHandle, |
| 16200 | IN PLARGE_INTEGER TmVirtualClock OPTIONAL); |
| 16201 | #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ |
| 16202 | |
| 16203 | #if (NTDDI_VERSION >= NTDDI_WIN7) |
| 16204 | NTSYSAPI |
| 16205 | NTSTATUS |
| 16206 | NTAPI |
| 16207 | ZwOpenKeyEx( |
| 16208 | OUT PHANDLE KeyHandle, |
| 16209 | IN ACCESS_MASK DesiredAccess, |
| 16210 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 16211 | IN ULONG OpenOptions); |
| 16212 | |
| 16213 | NTSYSAPI |
| 16214 | NTSTATUS |
| 16215 | NTAPI |
| 16216 | ZwOpenKeyTransactedEx( |
| 16217 | OUT PHANDLE KeyHandle, |
| 16218 | IN ACCESS_MASK DesiredAccess, |
| 16219 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 16220 | IN ULONG OpenOptions, |
| 16221 | IN HANDLE TransactionHandle); |
| 16222 | |
| 16223 | NTSYSAPI |
| 16224 | NTSTATUS |
| 16225 | NTAPI |
| 16226 | ZwNotifyChangeMultipleKeys( |
| 16227 | IN HANDLE MasterKeyHandle, |
| 16228 | IN ULONG Count OPTIONAL, |
| 16229 | IN OBJECT_ATTRIBUTES SubordinateObjects[] OPTIONAL, |
| 16230 | IN HANDLE Event OPTIONAL, |
| 16231 | IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, |
| 16232 | IN PVOID ApcContext OPTIONAL, |
| 16233 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
| 16234 | IN ULONG CompletionFilter, |
| 16235 | IN BOOLEAN WatchTree, |
| 16236 | OUT PVOID Buffer OPTIONAL, |
| 16237 | IN ULONG BufferSize, |
| 16238 | IN BOOLEAN Asynchronous); |
| 16239 | |
| 16240 | NTSYSAPI |
| 16241 | NTSTATUS |
| 16242 | NTAPI |
| 16243 | ZwQueryMultipleValueKey( |
| 16244 | IN HANDLE KeyHandle, |
| 16245 | IN OUT PKEY_VALUE_ENTRY ValueEntries, |
| 16246 | IN ULONG EntryCount, |
| 16247 | OUT PVOID ValueBuffer, |
| 16248 | IN OUT PULONG BufferLength, |
| 16249 | OUT PULONG RequiredBufferLength OPTIONAL); |
| 16250 | |
| 16251 | NTSYSAPI |
| 16252 | NTSTATUS |
| 16253 | NTAPI |
| 16254 | ZwRenameKey( |
| 16255 | IN HANDLE KeyHandle, |
| 16256 | IN PUNICODE_STRING NewName); |
| 16257 | |
| 16258 | NTSYSAPI |
| 16259 | NTSTATUS |
| 16260 | NTAPI |
| 16261 | ZwSetInformationKey( |
| 16262 | IN HANDLE KeyHandle, |
| 16263 | IN KEY_SET_INFORMATION_CLASS KeySetInformationClass, |
| 16264 | IN PVOID KeySetInformation, |
| 16265 | IN ULONG KeySetInformationLength); |
| 16266 | |
| 16267 | #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ |
| 16268 | |
| 16269 | #ifndef _CLFS_PUBLIC_H_ |
| 16270 | #define _CLFS_PUBLIC_H_ |
| 16271 | |
| 16272 | #ifndef CLFSUSER_API |
| 16273 | #ifdef __CLFSUSER_EXPORTS__ |
| 16274 | #define CLFSUSER_API |
| 16275 | #else |
| 16276 | #define CLFSUSER_API __declspec(dllimport) |
| 16277 | #endif |
| 16278 | #endif |
| 16279 | |
| 16280 | #if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03 |
| 16281 | |
| 16282 | #define FILE_ATTRIBUTE_DEDICATED FILE_ATTRIBUTE_TEMPORARY |
| 16283 | #define EA_CONTAINER_NAME "ContainerName" |
| 16284 | #define EA_CONTAINER_SIZE "ContainerSize" |
| 16285 | #define CLFS_BASELOG_EXTENSION L".blf" |
| 16286 | #define CLFS_FLAG_NO_FLAGS 0x00000000 |
| 16287 | #define CLFS_FLAG_FORCE_APPEND 0x00000001 |
| 16288 | #define CLFS_FLAG_FORCE_FLUSH 0x00000002 |
| 16289 | #define CLFS_FLAG_USE_RESERVATION 0x00000004 |
| 16290 | #define CLFS_FLAG_REENTRANT_FILE_SYSTEM 0x00000008 |
| 16291 | #define CLFS_FLAG_NON_REENTRANT_FILTER 0x00000010 |
| 16292 | #define CLFS_FLAG_REENTRANT_FILTER 0x00000020 |
| 16293 | #define CLFS_FLAG_IGNORE_SHARE_ACCESS 0x00000040 |
| 16294 | #define CLFS_FLAG_READ_IN_PROGRESS 0x00000080 |
| 16295 | #define CLFS_FLAG_MINIFILTER_LEVEL 0x00000100 |
| 16296 | #define CLFS_FLAG_HIDDEN_SYSTEM_LOG 0x00000200 |
| 16297 | #define CLFS_FLAG_FILTER_INTERMEDIATE_LEVEL CLFS_FLAG_NON_REENTRANT_FILTER |
| 16298 | #define CLFS_FLAG_FILTER_TOP_LEVEL CLFS_FLAG_REENTRANT_FILTER |
| 16299 | #define CLFS_MARSHALLING_FLAG_NONE 0x00000000 |
| 16300 | #define CLFS_MARSHALLING_FLAG_DISABLE_BUFF_INIT 0x00000001 |
| 16301 | |
| 16302 | typedef ULONG CLFS_CONTAINER_ID, *PCLFS_CONTAINER_ID, **PPCLFS_CONTAINER_ID; |
| 16303 | |
| 16304 | typedef struct _CLS_LSN { |
| 16305 | ULONGLONG Internal; |
| 16306 | } CLS_LSN, *PCLS_LSN, **PPCLS_LSN; |
| 16307 | |
| 16308 | typedef CLS_LSN CLFS_LSN, *PCLFS_LSN, **PPCLFS_LSN; |
| 16309 | |
| 16310 | extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_INVALID; |
| 16311 | extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_NULL; |
| 16312 | |
| 16313 | #define ClfsNullRecord 0x00 |
| 16314 | #define ClfsDataRecord 0x01 |
| 16315 | #define ClfsRestartRecord 0x02 |
| 16316 | #define ClfsClientRecord (ClfsDataRecord | ClfsRestartRecord) |
| 16317 | |
| 16318 | #define CLFS_CONTAINER_STREAM_PREFIX L"%BLF%:" |
| 16319 | #define CLFS_CONTAINER_RELATIVE_PREFIX L"%BLF%\\" |
| 16320 | |
| 16321 | typedef UCHAR CLS_RECORD_TYPE, *PCLS_RECORD_TYPE, **PPCLS_RECORD_TYPE; |
| 16322 | typedef CLS_RECORD_TYPE CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE, **PPCLFS_RECORD_TYPE; |
| 16323 | |
| 16324 | typedef enum _CLS_CONTEXT_MODE { |
| 16325 | ClsContextNone, |
| 16326 | ClsContextUndoNext, |
| 16327 | ClsContextPrevious, |
| 16328 | ClsContextForward |
| 16329 | } CLS_CONTEXT_MODE, *PCLS_CONTEXT_MODE, **PPCLS_CONTEXT_MODE; |
| 16330 | |
| 16331 | typedef enum _CLFS_CONTEXT_MODE { |
| 16332 | ClfsContextNone, |
| 16333 | ClfsContextUndoNext, |
| 16334 | ClfsContextPrevious, |
| 16335 | ClfsContextForward |
| 16336 | } CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE; |
| 16337 | |
| 16338 | typedef struct _CLFS_NODE_ID { |
| 16339 | ULONG cType; |
| 16340 | ULONG cbNode; |
| 16341 | } CLFS_NODE_ID, *PCLFS_NODE_ID; |
| 16342 | |
| 16343 | typedef struct _CLS_WRITE_ENTRY { |
| 16344 | PVOID Buffer; |
| 16345 | ULONG ByteLength; |
| 16346 | } CLS_WRITE_ENTRY, *PCLS_WRITE_ENTRY, **PPCLS_WRITE_ENTRY; |
| 16347 | |
| 16348 | typedef CLS_WRITE_ENTRY CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY, **PPCLFS_WRITE_ENTRY; |
| 16349 | |
| 16350 | typedef GUID CLFS_LOG_ID; |
| 16351 | |
| 16352 | typedef struct _CLS_INFORMATION { |
| 16353 | LONGLONG TotalAvailable; |
| 16354 | LONGLONG CurrentAvailable; |
| 16355 | LONGLONG TotalReservation; |
| 16356 | ULONGLONG BaseFileSize; |
| 16357 | ULONGLONG ContainerSize; |
| 16358 | ULONG TotalContainers; |
| 16359 | ULONG FreeContainers; |
| 16360 | ULONG TotalClients; |
| 16361 | ULONG Attributes; |
| 16362 | ULONG FlushThreshold; |
| 16363 | ULONG SectorSize; |
| 16364 | CLS_LSN MinArchiveTailLsn; |
| 16365 | CLS_LSN BaseLsn; |
| 16366 | CLS_LSN LastFlushedLsn; |
| 16367 | CLS_LSN LastLsn; |
| 16368 | CLS_LSN RestartLsn; |
| 16369 | GUID Identity; |
| 16370 | } CLS_INFORMATION, *PCLS_INFORMATION, *PPCLS_INFORMATION; |
| 16371 | |
| 16372 | typedef CLS_INFORMATION CLFS_INFORMATION, *PCLFS_INFORMATION, *PPCLFS_INFORMATION; |
| 16373 | |
| 16374 | typedef struct _CLFS_LOG_NAME_INFORMATION { |
| 16375 | USHORT NameLengthInBytes; |
| 16376 | WCHAR Name[1]; |
| 16377 | } CLFS_LOG_NAME_INFORMATION, *PCLFS_LOG_NAME_INFORMATION, **PPCLFS_LOG_NAME_INFORMATION; |
| 16378 | |
| 16379 | typedef struct _CLFS_STREAM_ID_INFORMATION { |
| 16380 | UCHAR StreamIdentifier; |
| 16381 | } CLFS_STREAM_ID_INFORMATION, *PCLFS_STREAM_ID_INFORMATION, **PPCLFS_STREAM_ID_INFORMATION; |
| 16382 | |
| 16383 | typedef UINT32 CLS_CONTAINER_STATE, *PCLS_CONTAINER_STATE, *PPCLS_CONTAINER_STATE; |
| 16384 | typedef CLS_CONTAINER_STATE CLFS_CONTAINER_STATE, *PCLFS_CONTAINER_STATE, *PPCLFS_CONTAINER_STATE; |
| 16385 | |
| 16386 | #define ClsContainerInitializing 0x01 |
| 16387 | #define ClsContainerInactive 0x02 |
| 16388 | #define ClsContainerActive 0x04 |
| 16389 | #define ClsContainerActivePendingDelete 0x08 |
| 16390 | #define ClsContainerPendingArchive 0x10 |
| 16391 | #define ClsContainerPendingArchiveAndDelete 0x20 |
| 16392 | |
| 16393 | #define ClfsContainerInitializing 0x01 |
| 16394 | #define ClfsContainerInactive 0x02 |
| 16395 | #define ClfsContainerActive 0x04 |
| 16396 | #define ClfsContainerActivePendingDelete 0x08 |
| 16397 | #define ClfsContainerPendingArchive 0x10 |
| 16398 | #define ClfsContainerPendingArchiveAndDelete 0x20 |
| 16399 | |
| 16400 | #define CLFS_MAX_CONTAINER_INFO 256 |
| 16401 | |
| 16402 | typedef struct _CLS_CONTAINER_INFORMATION { |
| 16403 | ULONG FileAttributes; |
| 16404 | ULONGLONG CreationTime; |
| 16405 | ULONGLONG LastAccessTime; |
| 16406 | ULONGLONG LastWriteTime; |
| 16407 | LONGLONG ContainerSize; |
| 16408 | ULONG FileNameActualLength; |
| 16409 | ULONG FileNameLength; |
| 16410 | WCHAR FileName[CLFS_MAX_CONTAINER_INFO]; |
| 16411 | CLFS_CONTAINER_STATE State; |
| 16412 | CLFS_CONTAINER_ID PhysicalContainerId; |
| 16413 | CLFS_CONTAINER_ID LogicalContainerId; |
| 16414 | } CLS_CONTAINER_INFORMATION, *PCLS_CONTAINER_INFORMATION, **PPCLS_CONTAINER_INFORMATION; |
| 16415 | |
| 16416 | typedef CLS_CONTAINER_INFORMATION CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION; |
| 16417 | |
| 16418 | typedef enum _CLS_LOG_INFORMATION_CLASS { |
| 16419 | ClfsLogBasicInformation, |
| 16420 | ClfsLogBasicInformationPhysical, |
| 16421 | ClfsLogPhysicalNameInformation, |
| 16422 | ClfsLogStreamIdentifierInformation, |
| 16423 | #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA |
| 16424 | ClfsLogSystemMarkingInformation, |
| 16425 | ClfsLogPhysicalLsnInformation |
| 16426 | #endif |
| 16427 | } CLS_LOG_INFORMATION_CLASS, *PCLS_LOG_INFORMATION_CLASS, **PPCLS_LOG_INFORMATION_CLASS; |
| 16428 | |
| 16429 | typedef CLS_LOG_INFORMATION_CLASS CLFS_LOG_INFORMATION_CLASS, *PCLFS_LOG_INFORMATION_CLASS, **PPCLFS_LOG_INFORMATION_CLASS; |
| 16430 | |
| 16431 | typedef enum _CLS_IOSTATS_CLASS { |
| 16432 | ClsIoStatsDefault = 0x0000, |
| 16433 | ClsIoStatsMax = 0xffff |
| 16434 | } CLS_IOSTATS_CLASS, *PCLS_IOSTATS_CLASS, **PPCLS_IOSTATS_CLASS; |
| 16435 | |
| 16436 | typedef enum _CLFS_IOSTATS_CLASS { |
| 16437 | ClfsIoStatsDefault = 0x0000, |
| 16438 | ClfsIoStatsMax = 0xffff |
| 16439 | } CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS; |
| 16440 | |
| 16441 | typedef struct _CLS_IO_STATISTICS_HEADER { |
| 16442 | UCHAR ubMajorVersion; |
| 16443 | UCHAR ubMinorVersion; |
| 16444 | CLFS_IOSTATS_CLASS eStatsClass; |
| 16445 | USHORT cbLength; |
| 16446 | ULONG coffData; |
| 16447 | } CLS_IO_STATISTICS_HEADER, *PCLS_IO_STATISTICS_HEADER, **PPCLS_IO_STATISTICS_HEADER; |
| 16448 | |
| 16449 | typedef CLS_IO_STATISTICS_HEADER CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER; |
| 16450 | |
| 16451 | typedef struct _CLS_IO_STATISTICS { |
| 16452 | CLS_IO_STATISTICS_HEADER hdrIoStats; |
| 16453 | ULONGLONG cFlush; |
| 16454 | ULONGLONG cbFlush; |
| 16455 | ULONGLONG cMetaFlush; |
| 16456 | ULONGLONG cbMetaFlush; |
| 16457 | } CLS_IO_STATISTICS, *PCLS_IO_STATISTICS, **PPCLS_IO_STATISTICS; |
| 16458 | |
| 16459 | typedef CLS_IO_STATISTICS CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS; |
| 16460 | |
| 16461 | #define CLFS_SCAN_INIT 0x01 |
| 16462 | #define CLFS_SCAN_FORWARD 0x02 |
| 16463 | #define CLFS_SCAN_BACKWARD 0x04 |
| 16464 | #define CLFS_SCAN_CLOSE 0x08 |
| 16465 | #define CLFS_SCAN_INITIALIZED 0x10 |
| 16466 | #define CLFS_SCAN_BUFFERED 0x20 |
| 16467 | |
| 16468 | typedef UCHAR CLFS_SCAN_MODE, *PCLFS_SCAN_MODE; |
| 16469 | |
| 16470 | typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT; |
| 16471 | |
| 16472 | typedef struct _CLS_SCAN_CONTEXT { |
| 16473 | CLFS_NODE_ID cidNode; |
| 16474 | PLOG_FILE_OBJECT plfoLog; |
| 16475 | ULONG cIndex __attribute__((aligned(8))); |
| 16476 | ULONG cContainers __attribute__((aligned(8))); |
| 16477 | ULONG cContainersReturned __attribute__((aligned(8))); |
| 16478 | CLFS_SCAN_MODE eScanMode __attribute__((aligned(8))); |
| 16479 | PCLS_CONTAINER_INFORMATION pinfoContainer __attribute__((aligned(8))); |
| 16480 | } CLS_SCAN_CONTEXT, *PCLS_SCAN_CONTEXT, **PPCLS_SCAN_CONTEXT; |
| 16481 | |
| 16482 | typedef CLS_SCAN_CONTEXT CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT, **PPCLFS_SCAN_CONTEXT; |
| 16483 | |
| 16484 | typedef struct _CLS_ARCHIVE_DESCRIPTOR { |
| 16485 | ULONGLONG coffLow; |
| 16486 | ULONGLONG coffHigh; |
| 16487 | CLS_CONTAINER_INFORMATION infoContainer; |
| 16488 | } CLS_ARCHIVE_DESCRIPTOR, *PCLS_ARCHIVE_DESCRIPTOR, **PPCLS_ARCHIVE_DESCRIPTOR; |
| 16489 | |
| 16490 | typedef CLS_ARCHIVE_DESCRIPTOR CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR; |
| 16491 | |
| 16492 | typedef PVOID (*CLFS_BLOCK_ALLOCATION)(ULONG cbBufferLength, PVOID pvUserContext); |
| 16493 | typedef void (*CLFS_BLOCK_DEALLOCATION)(PVOID pvBuffer, PVOID pvUserContext); |
| 16494 | |
| 16495 | typedef enum _CLFS_LOG_ARCHIVE_MODE { |
| 16496 | ClfsLogArchiveEnabled = 1, |
| 16497 | ClfsLogArchiveDisabled = 2 |
| 16498 | } CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE; |
| 16499 | |
| 16500 | CLFSUSER_API |
| 16501 | BOOLEAN |
| 16502 | NTAPI |
| 16503 | ClfsLsnEqual( |
| 16504 | const CLFS_LSN* plsn1, |
| 16505 | const CLFS_LSN* plsn2); |
| 16506 | |
| 16507 | CLFSUSER_API |
| 16508 | BOOLEAN |
| 16509 | NTAPI |
| 16510 | ClfsLsnLess( |
| 16511 | const CLFS_LSN* plsn1, |
| 16512 | const CLFS_LSN* plsn2); |
| 16513 | |
| 16514 | CLFSUSER_API |
| 16515 | BOOLEAN |
| 16516 | NTAPI |
| 16517 | ClfsLsnGreater( |
| 16518 | const CLFS_LSN* plsn1, |
| 16519 | const CLFS_LSN* plsn2); |
| 16520 | |
| 16521 | CLFSUSER_API |
| 16522 | BOOLEAN |
| 16523 | NTAPI |
| 16524 | ClfsLsnNull( |
| 16525 | const CLFS_LSN* plsn); |
| 16526 | |
| 16527 | CLFSUSER_API |
| 16528 | CLFS_CONTAINER_ID |
| 16529 | NTAPI |
| 16530 | ClfsLsnContainer( |
| 16531 | const CLFS_LSN* plsn); |
| 16532 | |
| 16533 | CLFSUSER_API |
| 16534 | CLFS_LSN |
| 16535 | NTAPI |
| 16536 | ClfsLsnCreate( |
| 16537 | CLFS_CONTAINER_ID cidContainer, |
| 16538 | ULONG offBlock, |
| 16539 | ULONG cRecord); |
| 16540 | |
| 16541 | CLFSUSER_API |
| 16542 | ULONG |
| 16543 | NTAPI |
| 16544 | ClfsLsnBlockOffset( |
| 16545 | const CLFS_LSN* plsn); |
| 16546 | |
| 16547 | CLFSUSER_API |
| 16548 | ULONG |
| 16549 | NTAPI |
| 16550 | ClfsLsnRecordSequence( |
| 16551 | const CLFS_LSN* plsn); |
| 16552 | |
| 16553 | CLFSUSER_API |
| 16554 | BOOLEAN |
| 16555 | NTAPI |
| 16556 | ClfsLsnInvalid( |
| 16557 | const CLFS_LSN* plsn); |
| 16558 | |
| 16559 | CLFSUSER_API |
| 16560 | CLFS_LSN |
| 16561 | NTAPI |
| 16562 | ClfsLsnIncrement( |
| 16563 | PCLFS_LSN plsn); |
| 16564 | |
| 16565 | #ifdef __cplusplus |
| 16566 | #ifdef CLFS_OPERATORS |
| 16567 | |
| 16568 | inline CLFS_LSN operator++(CLFS_LSN& refLsn) { |
| 16569 | refLsn = ClfsLsnIncrement (&refLsn); |
| 16570 | return refLsn; |
| 16571 | } |
| 16572 | |
| 16573 | inline BOOLEAN operator<(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16574 | return ClfsLsnLess(&refLsn1, &refLsn2); |
| 16575 | } |
| 16576 | |
| 16577 | inline BOOLEAN operator>(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16578 | return ClfsLsnGreater(&refLsn1, &refLsn2); |
| 16579 | } |
| 16580 | |
| 16581 | inline BOOLEAN operator==(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16582 | return ClfsLsnEqual(&refLsn1, &refLsn2); |
| 16583 | } |
| 16584 | |
| 16585 | inline BOOLEAN operator!=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16586 | return !ClfsLsnEqual(&refLsn1, &refLsn2); |
| 16587 | } |
| 16588 | |
| 16589 | inline BOOLEAN operator<=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16590 | return !ClfsLsnGreater(&refLsn1, &refLsn2); |
| 16591 | } |
| 16592 | |
| 16593 | inline BOOLEAN operator>=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { |
| 16594 | return !ClfsLsnLess(&refLsn1, &refLsn2); |
| 16595 | } |
| 16596 | |
| 16597 | #endif |
| 16598 | #endif |
| 16599 | #endif |
| 16600 | |
| 16601 | #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA |
| 16602 | |
| 16603 | #pragma pack(push,8) |
| 16604 | |
| 16605 | typedef struct _CLFS_PHYSICAL_LSN_INFORMATION { |
| 16606 | UCHAR StreamIdentifier; |
| 16607 | CLFS_LSN VirtualLsn; |
| 16608 | CLFS_LSN PhysicalLsn; |
| 16609 | } CLFS_PHYSICAL_LSN_INFORMATION, *PCLFS_PHYSICAL_LSN_INFORMATION; |
| 16610 | |
| 16611 | #pragma pack(pop) |
| 16612 | |
| 16613 | #endif |
| 16614 | |
| 16615 | #endif /* _CLFS_PUBLIC_H_ */ |
| 16616 | |
| 16617 | #if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03 |
| 16618 | |
| 16619 | typedef enum _CLFS_MGMT_POLICY_TYPE { |
| 16620 | ClfsMgmtPolicyMaximumSize, |
| 16621 | ClfsMgmtPolicyMinimumSize, |
| 16622 | ClfsMgmtPolicyNewContainerSize, |
| 16623 | ClfsMgmtPolicyGrowthRate, |
| 16624 | ClfsMgmtPolicyLogTail, |
| 16625 | ClfsMgmtPolicyAutoShrink, |
| 16626 | ClfsMgmtPolicyAutoGrow, |
| 16627 | ClfsMgmtPolicyNewContainerPrefix, |
| 16628 | ClfsMgmtPolicyNewContainerSuffix, |
| 16629 | ClfsMgmtPolicyNewContainerExtension, |
| 16630 | ClfsMgmtPolicyInvalid |
| 16631 | } CLFS_MGMT_POLICY_TYPE, *PCLFS_MGMT_POLICY_TYPE; |
| 16632 | |
| 16633 | #define CLFS_MGMT_NUM_POLICIES (ULONG)ClfsMgmtPolicyInvalid |
| 16634 | |
| 16635 | #define CLFS_LOG_SIZE_MINIMUM (ULONGLONG)0 |
| 16636 | #define CLFS_LOG_SIZE_MAXIMUM (ULONGLONG)-1 |
| 16637 | |
| 16638 | #define CLFS_MGMT_POLICY_VERSION 1 |
| 16639 | |
| 16640 | #define LOG_POLICY_OVERWRITE 0x01 |
| 16641 | #define LOG_POLICY_PERSIST 0x02 |
| 16642 | |
| 16643 | typedef struct _CLFS_MGMT_POLICY { |
| 16644 | ULONG Version; |
| 16645 | ULONG LengthInBytes; |
| 16646 | ULONG PolicyFlags; |
| 16647 | CLFS_MGMT_POLICY_TYPE PolicyType; |
| 16648 | union { |
| 16649 | struct { |
| 16650 | ULONG Containers; |
| 16651 | } MaximumSize; |
| 16652 | struct { |
| 16653 | ULONG Containers; |
| 16654 | } MinimumSize; |
| 16655 | struct { |
| 16656 | ULONG SizeInBytes; |
| 16657 | } NewContainerSize; |
| 16658 | struct { |
| 16659 | ULONG AbsoluteGrowthInContainers; |
| 16660 | ULONG RelativeGrowthPercentage; |
| 16661 | } GrowthRate; |
| 16662 | struct { |
| 16663 | ULONG MinimumAvailablePercentage; |
| 16664 | ULONG MinimumAvailableContainers; |
| 16665 | } LogTail; |
| 16666 | struct { |
| 16667 | ULONG Percentage; |
| 16668 | } AutoShrink; |
| 16669 | struct { |
| 16670 | ULONG Enabled; |
| 16671 | } AutoGrow; |
| 16672 | struct { |
| 16673 | USHORT PrefixLengthInBytes; |
| 16674 | WCHAR PrefixString[1]; |
| 16675 | } NewContainerPrefix; |
| 16676 | struct { |
| 16677 | ULONGLONG NextContainerSuffix; |
| 16678 | } NewContainerSuffix; |
| 16679 | struct { |
| 16680 | USHORT ExtensionLengthInBytes; |
| 16681 | WCHAR ExtensionString[1]; |
| 16682 | } NewContainerExtension; |
| 16683 | } PolicyParameters; |
| 16684 | } CLFS_MGMT_POLICY, *PCLFS_MGMT_POLICY; |
| 16685 | |
| 16686 | typedef enum _CLFS_MGMT_NOTIFICATION_TYPE { |
| 16687 | ClfsMgmtAdvanceTailNotification, |
| 16688 | ClfsMgmtLogFullHandlerNotification, |
| 16689 | ClfsMgmtLogUnpinnedNotification, |
| 16690 | ClfsMgmtLogWriteNotification |
| 16691 | } CLFS_MGMT_NOTIFICATION_TYPE, *PCLFS_MGMT_NOTIFICATION_TYPE; |
| 16692 | |
| 16693 | typedef struct _CLFS_MGMT_NOTIFICATION { |
| 16694 | CLFS_MGMT_NOTIFICATION_TYPE Notification; |
| 16695 | CLFS_LSN Lsn; |
| 16696 | USHORT LogIsPinned; |
| 16697 | } CLFS_MGMT_NOTIFICATION, *PCLFS_MGMT_NOTIFICATION; |
| 16698 | |
| 16699 | typedef NTSTATUS (*PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK)( |
| 16700 | PLOG_FILE_OBJECT LogFile, |
| 16701 | PCLFS_LSN TargetLsn, |
| 16702 | PVOID ClientData); |
| 16703 | |
| 16704 | typedef VOID (*PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK)( |
| 16705 | PLOG_FILE_OBJECT LogFile, |
| 16706 | NTSTATUS OperationStatus, |
| 16707 | BOOLEAN LogIsPinned, |
| 16708 | PVOID ClientData); |
| 16709 | |
| 16710 | typedef VOID (*PCLFS_CLIENT_LOG_UNPINNED_CALLBACK)( |
| 16711 | PLOG_FILE_OBJECT LogFile, |
| 16712 | PVOID ClientData); |
| 16713 | |
| 16714 | typedef VOID (*PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK)( |
| 16715 | PLOG_FILE_OBJECT LogFile, |
| 16716 | NTSTATUS OperationStatus, |
| 16717 | PVOID ClientData); |
| 16718 | |
| 16719 | #define CLFS_MGMT_CLIENT_REGISTRATION_VERSION 1 |
| 16720 | |
| 16721 | typedef struct _CLFS_MGMT_CLIENT_REGISTRATION { |
| 16722 | ULONG Version; |
| 16723 | PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK AdvanceTailCallback; |
| 16724 | PVOID AdvanceTailCallbackData; |
| 16725 | PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK LogGrowthCompleteCallback; |
| 16726 | PVOID LogGrowthCompleteCallbackData; |
| 16727 | PCLFS_CLIENT_LOG_UNPINNED_CALLBACK LogUnpinnedCallback; |
| 16728 | PVOID LogUnpinnedCallbackData; |
| 16729 | } CLFS_MGMT_CLIENT_REGISTRATION, *PCLFS_MGMT_CLIENT_REGISTRATION; |
| 16730 | |
| 16731 | typedef PVOID CLFS_MGMT_CLIENT, *PCLFS_MGMT_CLIENT; |
| 16732 | |
| 16733 | CLFSUSER_API |
| 16734 | NTSTATUS |
| 16735 | ClfsMgmtRegisterManagedClient( |
| 16736 | PLOG_FILE_OBJECT LogFile, |
| 16737 | PCLFS_MGMT_CLIENT_REGISTRATION RegistrationData, |
| 16738 | PCLFS_MGMT_CLIENT ClientCookie); |
| 16739 | |
| 16740 | CLFSUSER_API |
| 16741 | NTSTATUS |
| 16742 | ClfsMgmtDeregisterManagedClient( |
| 16743 | CLFS_MGMT_CLIENT ClientCookie); |
| 16744 | |
| 16745 | CLFSUSER_API |
| 16746 | NTSTATUS |
| 16747 | ClfsMgmtTailAdvanceFailure( |
| 16748 | CLFS_MGMT_CLIENT Client, |
| 16749 | NTSTATUS Reason); |
| 16750 | |
| 16751 | CLFSUSER_API |
| 16752 | NTSTATUS |
| 16753 | ClfsMgmtHandleLogFileFull( |
| 16754 | CLFS_MGMT_CLIENT Client); |
| 16755 | |
| 16756 | CLFSUSER_API |
| 16757 | NTSTATUS |
| 16758 | ClfsMgmtInstallPolicy( |
| 16759 | PLOG_FILE_OBJECT LogFile, |
| 16760 | PCLFS_MGMT_POLICY Policy, |
| 16761 | ULONG PolicyLength); |
| 16762 | |
| 16763 | CLFSUSER_API |
| 16764 | NTSTATUS |
| 16765 | ClfsMgmtQueryPolicy( |
| 16766 | PLOG_FILE_OBJECT LogFile, |
| 16767 | CLFS_MGMT_POLICY_TYPE PolicyType, |
| 16768 | PCLFS_MGMT_POLICY Policy, |
| 16769 | PULONG PolicyLength); |
| 16770 | |
| 16771 | CLFSUSER_API |
| 16772 | NTSTATUS |
| 16773 | ClfsMgmtRemovePolicy( |
| 16774 | PLOG_FILE_OBJECT LogFile, |
| 16775 | CLFS_MGMT_POLICY_TYPE PolicyType); |
| 16776 | |
| 16777 | CLFSUSER_API |
| 16778 | NTSTATUS |
| 16779 | ClfsMgmtSetLogFileSize( |
| 16780 | PLOG_FILE_OBJECT LogFile, |
| 16781 | PULONGLONG NewSizeInContainers, |
| 16782 | PULONGLONG ResultingSizeInContainers, |
| 16783 | PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine, |
| 16784 | PVOID CompletionRoutineData); |
| 16785 | |
| 16786 | #endif |
| 16787 | |
| 16788 | #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA |
| 16789 | |
| 16790 | CLFSUSER_API |
| 16791 | NTSTATUS |
| 16792 | ClfsMgmtSetLogFileSizeAsClient( |
| 16793 | PLOG_FILE_OBJECT LogFile, |
| 16794 | PCLFS_MGMT_CLIENT ClientCookie, |
| 16795 | PULONGLONG NewSizeInContainers, |
| 16796 | PULONGLONG ResultingSizeInContainers, |
| 16797 | PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine, |
| 16798 | PVOID CompletionRoutineData); |
| 16799 | |
| 16800 | #endif |
| 16801 | |
| 16802 | #ifndef __CLFSPROC_H__ |
| 16803 | #define __CLFSPROC_H__ |
| 16804 | |
| 16805 | #if NTDDI_VERSION >= NTDDI_WS03SP1 |
| 16806 | |
| 16807 | CLFSUSER_API NTSTATUS ClfsInitialize(void); |
| 16808 | |
| 16809 | CLFSUSER_API void ClfsFinalize(void); |
| 16810 | |
| 16811 | CLFSUSER_API |
| 16812 | NTSTATUS |
| 16813 | ClfsCreateLogFile( |
| 16814 | PPLOG_FILE_OBJECT pplfoLog, |
| 16815 | PUNICODE_STRING puszLogFileName, |
| 16816 | ACCESS_MASK fDesiredAccess, |
| 16817 | ULONG dwShareMode, |
| 16818 | PSECURITY_DESCRIPTOR psdLogFile, |
| 16819 | ULONG fCreateDisposition, |
| 16820 | ULONG fCreateOptions, |
| 16821 | ULONG fFlagsAndAttributes, |
| 16822 | ULONG fLogOptionFlag, |
| 16823 | PVOID pvContext, |
| 16824 | ULONG cbContext); |
| 16825 | |
| 16826 | CLFSUSER_API |
| 16827 | NTSTATUS |
| 16828 | ClfsDeleteLogByPointer( |
| 16829 | PLOG_FILE_OBJECT plfoLog); |
| 16830 | |
| 16831 | CLFSUSER_API |
| 16832 | NTSTATUS |
| 16833 | ClfsDeleteLogFile( |
| 16834 | PUNICODE_STRING puszLogFileName, |
| 16835 | PVOID pvReserved, |
| 16836 | ULONG fLogOptionFlag, |
| 16837 | PVOID pvContext, |
| 16838 | ULONG cbContext); |
| 16839 | |
| 16840 | CLFSUSER_API |
| 16841 | NTSTATUS |
| 16842 | ClfsAddLogContainer( |
| 16843 | PLOG_FILE_OBJECT plfoLog, |
| 16844 | PULONGLONG pcbContainer, |
| 16845 | PUNICODE_STRING puszContainerPath); |
| 16846 | |
| 16847 | CLFSUSER_API |
| 16848 | NTSTATUS |
| 16849 | ClfsAddLogContainerSet( |
| 16850 | PLOG_FILE_OBJECT plfoLog, |
| 16851 | USHORT cContainers, |
| 16852 | PULONGLONG pcbContainer, |
| 16853 | PUNICODE_STRING rguszContainerPath); |
| 16854 | |
| 16855 | CLFSUSER_API |
| 16856 | NTSTATUS |
| 16857 | ClfsRemoveLogContainer( |
| 16858 | PLOG_FILE_OBJECT plfoLog, |
| 16859 | PUNICODE_STRING puszContainerPath, |
| 16860 | BOOLEAN fForce); |
| 16861 | |
| 16862 | CLFSUSER_API |
| 16863 | NTSTATUS |
| 16864 | ClfsRemoveLogContainerSet( |
| 16865 | PLOG_FILE_OBJECT plfoLog, |
| 16866 | USHORT cContainers, |
| 16867 | PUNICODE_STRING rgwszContainerPath, |
| 16868 | BOOLEAN fForce); |
| 16869 | |
| 16870 | CLFSUSER_API |
| 16871 | NTSTATUS |
| 16872 | ClfsSetArchiveTail( |
| 16873 | PLOG_FILE_OBJECT plfoLog, |
| 16874 | PCLFS_LSN plsnArchiveTail); |
| 16875 | |
| 16876 | CLFSUSER_API |
| 16877 | NTSTATUS |
| 16878 | ClfsSetEndOfLog( |
| 16879 | PLOG_FILE_OBJECT plfoLog, |
| 16880 | PCLFS_LSN plsnEnd); |
| 16881 | |
| 16882 | CLFSUSER_API |
| 16883 | NTSTATUS |
| 16884 | ClfsCreateScanContext( |
| 16885 | PLOG_FILE_OBJECT plfoLog, |
| 16886 | ULONG cFromContainer, |
| 16887 | ULONG cContainers, |
| 16888 | CLFS_SCAN_MODE eScanMode, |
| 16889 | PCLFS_SCAN_CONTEXT pcxScan); |
| 16890 | |
| 16891 | CLFSUSER_API |
| 16892 | NTSTATUS |
| 16893 | ClfsScanLogContainers( |
| 16894 | PCLFS_SCAN_CONTEXT pcxScan, |
| 16895 | CLFS_SCAN_MODE eScanMode); |
| 16896 | |
| 16897 | CLFSUSER_API |
| 16898 | NTSTATUS |
| 16899 | ClfsGetContainerName( |
| 16900 | PLOG_FILE_OBJECT plfoLog, |
| 16901 | CLFS_CONTAINER_ID cidLogicalContainer, |
| 16902 | PUNICODE_STRING puszContainerName, |
| 16903 | PULONG pcActualLenContainerName); |
| 16904 | |
| 16905 | CLFSUSER_API |
| 16906 | NTSTATUS |
| 16907 | ClfsGetLogFileInformation( |
| 16908 | PLOG_FILE_OBJECT plfoLog, |
| 16909 | PCLFS_INFORMATION pinfoBuffer, |
| 16910 | PULONG pcbInfoBuffer); |
| 16911 | |
| 16912 | CLFSUSER_API |
| 16913 | NTSTATUS |
| 16914 | ClfsSetLogFileInformation( |
| 16915 | PLOG_FILE_OBJECT plfoLog, |
| 16916 | CLFS_LOG_INFORMATION_CLASS eInformationClass, |
| 16917 | PVOID pinfoBuffer, |
| 16918 | ULONG cbBuffer); |
| 16919 | |
| 16920 | CLFSUSER_API |
| 16921 | NTSTATUS |
| 16922 | ClfsReadRestartArea( |
| 16923 | PVOID pvMarshalContext, |
| 16924 | PVOID* ppvRestartBuffer, |
| 16925 | PULONG pcbRestartBuffer, |
| 16926 | PCLFS_LSN plsn, |
| 16927 | PVOID* ppvReadContext); |
| 16928 | |
| 16929 | CLFSUSER_API |
| 16930 | NTSTATUS |
| 16931 | ClfsReadPreviousRestartArea( |
| 16932 | PVOID pvReadContext, |
| 16933 | PVOID* ppvRestartBuffer, |
| 16934 | PULONG pcbRestartBuffer, |
| 16935 | PCLFS_LSN plsnRestart); |
| 16936 | |
| 16937 | CLFSUSER_API |
| 16938 | NTSTATUS |
| 16939 | ClfsWriteRestartArea( |
| 16940 | PVOID pvMarshalContext, |
| 16941 | PVOID pvRestartBuffer, |
| 16942 | ULONG cbRestartBuffer, |
| 16943 | PCLFS_LSN plsnBase, |
| 16944 | ULONG fFlags, |
| 16945 | PULONG pcbWritten, |
| 16946 | PCLFS_LSN plsnNext); |
| 16947 | |
| 16948 | CLFSUSER_API |
| 16949 | NTSTATUS |
| 16950 | ClfsAdvanceLogBase( |
| 16951 | PVOID pvMarshalContext, |
| 16952 | PCLFS_LSN plsnBase, |
| 16953 | ULONG fFlags); |
| 16954 | |
| 16955 | CLFSUSER_API |
| 16956 | NTSTATUS |
| 16957 | ClfsCloseAndResetLogFile( |
| 16958 | PLOG_FILE_OBJECT plfoLog); |
| 16959 | |
| 16960 | CLFSUSER_API |
| 16961 | NTSTATUS |
| 16962 | ClfsCloseLogFileObject( |
| 16963 | PLOG_FILE_OBJECT plfoLog); |
| 16964 | |
| 16965 | CLFSUSER_API |
| 16966 | NTSTATUS |
| 16967 | ClfsCreateMarshallingArea( |
| 16968 | PLOG_FILE_OBJECT plfoLog, |
| 16969 | POOL_TYPE ePoolType, |
| 16970 | PALLOCATE_FUNCTION pfnAllocBuffer, |
| 16971 | PFREE_FUNCTION pfnFreeBuffer, |
| 16972 | ULONG cbMarshallingBuffer, |
| 16973 | ULONG cMaxWriteBuffers, |
| 16974 | ULONG cMaxReadBuffers, |
| 16975 | PVOID* ppvMarshalContext); |
| 16976 | |
| 16977 | CLFSUSER_API |
| 16978 | NTSTATUS |
| 16979 | ClfsDeleteMarshallingArea( |
| 16980 | PVOID pvMarshalContext); |
| 16981 | |
| 16982 | CLFSUSER_API |
| 16983 | NTSTATUS |
| 16984 | ClfsReserveAndAppendLog( |
| 16985 | PVOID pvMarshalContext, |
| 16986 | PCLFS_WRITE_ENTRY rgWriteEntries, |
| 16987 | ULONG cWriteEntries, |
| 16988 | PCLFS_LSN plsnUndoNext, |
| 16989 | PCLFS_LSN plsnPrevious, |
| 16990 | ULONG cReserveRecords, |
| 16991 | PLONGLONG rgcbReservation, |
| 16992 | ULONG fFlags, |
| 16993 | PCLFS_LSN plsn); |
| 16994 | |
| 16995 | CLFSUSER_API |
| 16996 | NTSTATUS |
| 16997 | ClfsReserveAndAppendLogAligned( |
| 16998 | PVOID pvMarshalContext, |
| 16999 | PCLFS_WRITE_ENTRY rgWriteEntries, |
| 17000 | ULONG cWriteEntries, |
| 17001 | ULONG cbEntryAlignment, |
| 17002 | PCLFS_LSN plsnUndoNext, |
| 17003 | PCLFS_LSN plsnPrevious, |
| 17004 | ULONG cReserveRecords, |
| 17005 | PLONGLONG rgcbReservation, |
| 17006 | ULONG fFlags, |
| 17007 | PCLFS_LSN plsn); |
| 17008 | |
| 17009 | CLFSUSER_API |
| 17010 | NTSTATUS |
| 17011 | ClfsAlignReservedLog( |
| 17012 | PVOID pvMarshalContext, |
| 17013 | ULONG cRecords, |
| 17014 | LONGLONG rgcbReservation[], |
| 17015 | PLONGLONG pcbAlignReservation); |
| 17016 | |
| 17017 | CLFSUSER_API |
| 17018 | NTSTATUS |
| 17019 | ClfsAllocReservedLog( |
| 17020 | PVOID pvMarshalContext, |
| 17021 | ULONG cRecords, |
| 17022 | PLONGLONG pcbAdjustment); |
| 17023 | |
| 17024 | CLFSUSER_API |
| 17025 | NTSTATUS |
| 17026 | ClfsFreeReservedLog( |
| 17027 | PVOID pvMarshalContext, |
| 17028 | ULONG cRecords, |
| 17029 | PLONGLONG pcbAdjustment); |
| 17030 | |
| 17031 | CLFSUSER_API |
| 17032 | NTSTATUS |
| 17033 | ClfsFlushBuffers( |
| 17034 | PVOID pvMarshalContext); |
| 17035 | |
| 17036 | CLFSUSER_API |
| 17037 | NTSTATUS |
| 17038 | ClfsFlushToLsn( |
| 17039 | PVOID pvMarshalContext, |
| 17040 | PCLFS_LSN plsnFlush, |
| 17041 | PCLFS_LSN plsnLastFlushed); |
| 17042 | |
| 17043 | CLFSUSER_API |
| 17044 | NTSTATUS |
| 17045 | ClfsReadLogRecord( |
| 17046 | PVOID pvMarshalContext, |
| 17047 | PCLFS_LSN plsnFirst, |
| 17048 | CLFS_CONTEXT_MODE peContextMode, |
| 17049 | PVOID* ppvReadBuffer, |
| 17050 | PULONG pcbReadBuffer, |
| 17051 | PCLFS_RECORD_TYPE peRecordType, |
| 17052 | PCLFS_LSN plsnUndoNext, |
| 17053 | PCLFS_LSN plsnPrevious, |
| 17054 | PVOID* ppvReadContext); |
| 17055 | |
| 17056 | CLFSUSER_API |
| 17057 | NTSTATUS |
| 17058 | ClfsReadNextLogRecord( |
| 17059 | PVOID pvReadContext, |
| 17060 | PVOID* ppvBuffer, |
| 17061 | PULONG pcbBuffer, |
| 17062 | PCLFS_RECORD_TYPE peRecordType, |
| 17063 | PCLFS_LSN plsnUser, |
| 17064 | PCLFS_LSN plsnUndoNext, |
| 17065 | PCLFS_LSN plsnPrevious, |
| 17066 | PCLFS_LSN plsnRecord); |
| 17067 | |
| 17068 | CLFSUSER_API |
| 17069 | NTSTATUS |
| 17070 | ClfsTerminateReadLog( |
| 17071 | PVOID pvCursorContext); |
| 17072 | |
| 17073 | CLFSUSER_API |
| 17074 | NTSTATUS |
| 17075 | ClfsGetLastLsn( |
| 17076 | PLOG_FILE_OBJECT plfoLog, |
| 17077 | PCLFS_LSN plsnLast); |
| 17078 | |
| 17079 | CLFSUSER_API |
| 17080 | NTSTATUS |
| 17081 | ClfsGetIoStatistics( |
| 17082 | PLOG_FILE_OBJECT plfoLog, |
| 17083 | PVOID pvStatsBuffer, |
| 17084 | ULONG cbStatsBuffer, |
| 17085 | CLFS_IOSTATS_CLASS eStatsClass, |
| 17086 | PULONG pcbStatsWritten); |
| 17087 | |
| 17088 | CLFSUSER_API |
| 17089 | CLFS_LSN |
| 17090 | ClfsLaterLsn( |
| 17091 | PCLFS_LSN plsn); |
| 17092 | |
| 17093 | CLFSUSER_API |
| 17094 | CLFS_LSN |
| 17095 | ClfsEarlierLsn( |
| 17096 | PCLFS_LSN plsn); |
| 17097 | |
| 17098 | CLFSUSER_API |
| 17099 | NTSTATUS |
| 17100 | ClfsLsnDifference( |
| 17101 | PCLFS_LSN plsnStart, |
| 17102 | PCLFS_LSN plsnFinish, |
| 17103 | ULONG cbContainer, |
| 17104 | ULONG cbMaxBlock, |
| 17105 | PLONGLONG pcbDifference); |
| 17106 | |
| 17107 | #endif |
| 17108 | |
| 17109 | #if NTDDI_VERSION >= NTDDI_VISTA |
| 17110 | |
| 17111 | CLFSUSER_API |
| 17112 | BOOLEAN |
| 17113 | ClfsValidTopLevelContext( |
| 17114 | PIRP pirpTopLevelContext); |
| 17115 | |
| 17116 | CLFSUSER_API |
| 17117 | NTSTATUS |
| 17118 | ClfsQueryLogFileInformation( |
| 17119 | PLOG_FILE_OBJECT plfoLog, |
| 17120 | CLFS_LOG_INFORMATION_CLASS eInformationClass, |
| 17121 | PVOID pinfoInputBuffer, |
| 17122 | ULONG cbinfoInputBuffer, |
| 17123 | PVOID pinfoBuffer, |
| 17124 | PULONG pcbInfoBuffer); |
| 17125 | |
| 17126 | #endif |
| 17127 | |
| 17128 | #if NTDDI_VERSION >= NTDDI_WIN8 |
| 17129 | |
| 17130 | CLFSUSER_API |
| 17131 | NTSTATUS |
| 17132 | ClfsCreateMarshallingAreaEx( |
| 17133 | PLOG_FILE_OBJECT plfoLog, |
| 17134 | POOL_TYPE ePoolType, |
| 17135 | PALLOCATE_FUNCTION pfnAllocBuffer, |
| 17136 | PFREE_FUNCTION pfnFreeBuffer, |
| 17137 | ULONG cbMarshallingBuffer, |
| 17138 | ULONG cMaxWriteBuffers, |
| 17139 | ULONG cMaxReadBuffers, |
| 17140 | ULONG cAlignmentSize, |
| 17141 | ULONGLONG fFlags, |
| 17142 | PVOID* ppvMarshalContext); |
| 17143 | |
| 17144 | #endif |
| 17145 | |
| 17146 | #endif /* __CLFSPROC_H__ */ |
| 17147 | |
| 17148 | #ifdef __cplusplus |
| 17149 | } |
| 17150 | #endif |
| 17151 | |
| 17152 | #endif /* !_WDMDDK_ */ |