Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntddk.h
Go to the documentation of this file.
00001 /* 00002 * ntddk.h 00003 * 00004 * Windows NT Device Driver Kit 00005 * 00006 * This file is part of the ReactOS DDK package. 00007 * 00008 * Contributors: 00009 * Amine Khaldi 00010 * Timo Kreuzer (timo.kreuzer@reactos.org) 00011 * 00012 * THIS SOFTWARE IS NOT COPYRIGHTED 00013 * 00014 * This source code is offered for use in the public domain. You may 00015 * use, modify or distribute it freely. 00016 * 00017 * This code is distributed in the hope that it will be useful but 00018 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00019 * DISCLAIMED. This includes but is not limited to warranties of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00021 * 00022 */ 00023 00024 #pragma once 00025 00026 #define _NTDDK_ 00027 00028 #if !defined(_NTHAL_) && !defined(_NTIFS_) 00029 #define _NTDDK_INCLUDED_ 00030 #define _DDK_DRIVER_ 00031 #endif 00032 00033 /* Dependencies */ 00034 00035 #define NT_INCLUDED 00036 #define _CTYPE_DISABLE_MACROS 00037 00038 #include <wdm.h> 00039 #include <excpt.h> 00040 #include <ntdef.h> 00041 #include <ntstatus.h> 00042 #include <mce.h> 00043 #include <bugcodes.h> 00044 #include <ntiologc.h> 00045 00046 #include <stdarg.h> // FIXME 00047 #include <basetyps.h> // FIXME 00048 00049 00050 #ifdef __cplusplus 00051 extern "C" { 00052 #endif 00053 00054 /* GUID and UUID */ 00055 #ifndef _NTLSA_IFS_ 00056 #ifndef _NTLSA_AUDIT_ 00057 #define _NTLSA_AUDIT_ 00058 00059 #ifndef GUID_DEFINED 00060 #include <guiddef.h> 00061 #endif 00062 00063 #endif /* _NTLSA_AUDIT_ */ 00064 #endif /* _NTLSA_IFS_ */ 00065 00066 typedef GUID UUID; 00067 00068 struct _LOADER_PARAMETER_BLOCK; 00069 struct _CREATE_DISK; 00070 struct _DRIVE_LAYOUT_INFORMATION_EX; 00071 struct _SET_PARTITION_INFORMATION_EX; 00072 00073 typedef struct _BUS_HANDLER *PBUS_HANDLER; 00074 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; 00075 #if defined(_NTHAL_INCLUDED_) 00076 typedef struct _KAFFINITY_EX *PKAFFINITY_EX; 00077 #endif 00078 typedef struct _PEB *PPEB; 00079 00080 #ifndef _NTIMAGE_ 00081 00082 typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32; 00083 typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64; 00084 00085 #ifdef _WIN64 00086 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; 00087 #else 00088 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; 00089 #endif 00090 00091 #endif /* _NTIMAGE_ */ 00092 00093 /****************************************************************************** 00094 * Executive Types * 00095 ******************************************************************************/ 00096 typedef struct _ZONE_SEGMENT_HEADER { 00097 SINGLE_LIST_ENTRY SegmentList; 00098 PVOID Reserved; 00099 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; 00100 00101 typedef struct _ZONE_HEADER { 00102 SINGLE_LIST_ENTRY FreeList; 00103 SINGLE_LIST_ENTRY SegmentList; 00104 ULONG BlockSize; 00105 ULONG TotalSegmentSize; 00106 } ZONE_HEADER, *PZONE_HEADER; 00107 00108 #define PROTECTED_POOL 0x80000000 00109 00110 /****************************************************************************** 00111 * I/O Manager Types * 00112 ******************************************************************************/ 00113 00114 /* DEVICE_OBJECT.Flags */ 00115 #define DO_DEVICE_HAS_NAME 0x00000040 00116 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 00117 #define DO_LONG_TERM_REQUESTS 0x00000200 00118 #define DO_NEVER_LAST_DEVICE 0x00000400 00119 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 00120 #define DO_SUPPORTS_TRANSACTIONS 0x00040000 00121 #define DO_FORCE_NEITHER_IO 0x00080000 00122 #define DO_VOLUME_DEVICE_OBJECT 0x00100000 00123 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 00124 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 00125 #define DO_DISALLOW_EXECUTE 0x00800000 00126 00127 #ifndef _ARC_DDK_ 00128 #define _ARC_DDK_ 00129 typedef enum _CONFIGURATION_TYPE { 00130 ArcSystem, 00131 CentralProcessor, 00132 FloatingPointProcessor, 00133 PrimaryIcache, 00134 PrimaryDcache, 00135 SecondaryIcache, 00136 SecondaryDcache, 00137 SecondaryCache, 00138 EisaAdapter, 00139 TcAdapter, 00140 ScsiAdapter, 00141 DtiAdapter, 00142 MultiFunctionAdapter, 00143 DiskController, 00144 TapeController, 00145 CdromController, 00146 WormController, 00147 SerialController, 00148 NetworkController, 00149 DisplayController, 00150 ParallelController, 00151 PointerController, 00152 KeyboardController, 00153 AudioController, 00154 OtherController, 00155 DiskPeripheral, 00156 FloppyDiskPeripheral, 00157 TapePeripheral, 00158 ModemPeripheral, 00159 MonitorPeripheral, 00160 PrinterPeripheral, 00161 PointerPeripheral, 00162 KeyboardPeripheral, 00163 TerminalPeripheral, 00164 OtherPeripheral, 00165 LinePeripheral, 00166 NetworkPeripheral, 00167 SystemMemory, 00168 DockingInformation, 00169 RealModeIrqRoutingTable, 00170 RealModePCIEnumeration, 00171 MaximumType 00172 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; 00173 #endif /* !_ARC_DDK_ */ 00174 00175 /* 00176 ** IRP function codes 00177 */ 00178 00179 #define IRP_MN_QUERY_DIRECTORY 0x01 00180 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 00181 00182 #define IRP_MN_USER_FS_REQUEST 0x00 00183 #define IRP_MN_MOUNT_VOLUME 0x01 00184 #define IRP_MN_VERIFY_VOLUME 0x02 00185 #define IRP_MN_LOAD_FILE_SYSTEM 0x03 00186 #define IRP_MN_TRACK_LINK 0x04 00187 #define IRP_MN_KERNEL_CALL 0x04 00188 00189 #define IRP_MN_LOCK 0x01 00190 #define IRP_MN_UNLOCK_SINGLE 0x02 00191 #define IRP_MN_UNLOCK_ALL 0x03 00192 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 00193 00194 #define IRP_MN_FLUSH_AND_PURGE 0x01 00195 00196 #define IRP_MN_NORMAL 0x00 00197 #define IRP_MN_DPC 0x01 00198 #define IRP_MN_MDL 0x02 00199 #define IRP_MN_COMPLETE 0x04 00200 #define IRP_MN_COMPRESSED 0x08 00201 00202 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) 00203 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) 00204 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) 00205 00206 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 00207 00208 #define IO_CHECK_CREATE_PARAMETERS 0x0200 00209 #define IO_ATTACH_DEVICE 0x0400 00210 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 00211 00212 typedef NTSTATUS 00213 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)( 00214 _In_ PVOID Context, 00215 _In_ PUNICODE_STRING PathName, 00216 _In_ INTERFACE_TYPE BusType, 00217 _In_ ULONG BusNumber, 00218 _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation, 00219 _In_ CONFIGURATION_TYPE ControllerType, 00220 _In_ ULONG ControllerNumber, 00221 _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, 00222 _In_ CONFIGURATION_TYPE PeripheralType, 00223 _In_ ULONG PeripheralNumber, 00224 _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); 00225 00226 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { 00227 IoQueryDeviceIdentifier = 0, 00228 IoQueryDeviceConfigurationData, 00229 IoQueryDeviceComponentInformation, 00230 IoQueryDeviceMaxData 00231 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; 00232 00233 typedef VOID 00234 (NTAPI *PDRIVER_REINITIALIZE)( 00235 _In_ struct _DRIVER_OBJECT *DriverObject, 00236 _In_opt_ PVOID Context, 00237 _In_ ULONG Count); 00238 00239 typedef struct _CONTROLLER_OBJECT { 00240 CSHORT Type; 00241 CSHORT Size; 00242 PVOID ControllerExtension; 00243 KDEVICE_QUEUE DeviceWaitQueue; 00244 ULONG Spare1; 00245 LARGE_INTEGER Spare2; 00246 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; 00247 00248 #define DRVO_REINIT_REGISTERED 0x00000008 00249 #define DRVO_INITIALIZED 0x00000010 00250 #define DRVO_BOOTREINIT_REGISTERED 0x00000020 00251 #define DRVO_LEGACY_RESOURCES 0x00000040 00252 00253 typedef struct _CONFIGURATION_INFORMATION { 00254 ULONG DiskCount; 00255 ULONG FloppyCount; 00256 ULONG CdRomCount; 00257 ULONG TapeCount; 00258 ULONG ScsiPortCount; 00259 ULONG SerialCount; 00260 ULONG ParallelCount; 00261 BOOLEAN AtDiskPrimaryAddressClaimed; 00262 BOOLEAN AtDiskSecondaryAddressClaimed; 00263 ULONG Version; 00264 ULONG MediumChangerCount; 00265 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; 00266 00267 typedef struct _DISK_SIGNATURE { 00268 ULONG PartitionStyle; 00269 _ANONYMOUS_UNION union { 00270 struct { 00271 ULONG Signature; 00272 ULONG CheckSum; 00273 } Mbr; 00274 struct { 00275 GUID DiskId; 00276 } Gpt; 00277 } DUMMYUNIONNAME; 00278 } DISK_SIGNATURE, *PDISK_SIGNATURE; 00279 00280 typedef struct _TXN_PARAMETER_BLOCK { 00281 USHORT Length; 00282 USHORT TxFsContext; 00283 PVOID TransactionObject; 00284 } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK; 00285 00286 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE) 00287 00288 typedef struct _IO_DRIVER_CREATE_CONTEXT { 00289 CSHORT Size; 00290 struct _ECP_LIST *ExtraCreateParameter; 00291 PVOID DeviceObjectHint; 00292 PTXN_PARAMETER_BLOCK TxnParameters; 00293 } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT; 00294 00295 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { 00296 USHORT Size; 00297 USHORT Version; 00298 PVOID Context; 00299 PINTERFACE_REFERENCE InterfaceReference; 00300 PINTERFACE_DEREFERENCE InterfaceDereference; 00301 PGET_SET_DEVICE_DATA SetBusData; 00302 PGET_SET_DEVICE_DATA GetBusData; 00303 UCHAR CapabilityID; 00304 } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; 00305 00306 _IRQL_requires_max_(PASSIVE_LEVEL) 00307 _Must_inspect_result_ 00308 typedef NTSTATUS 00309 (NTAPI *PGET_LOCATION_STRING)( 00310 _Inout_opt_ PVOID Context, 00311 _Outptr_ 00312 _At_(*LocationStrings, 00313 _When_(return == 0, __drv_allocatesMem(Mem))) 00314 PZZWSTR *LocationStrings); 00315 00316 typedef struct _PNP_LOCATION_INTERFACE { 00317 USHORT Size; 00318 USHORT Version; 00319 PVOID Context; 00320 PINTERFACE_REFERENCE InterfaceReference; 00321 PINTERFACE_DEREFERENCE InterfaceDereference; 00322 PGET_LOCATION_STRING GetLocationString; 00323 } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE; 00324 00325 typedef enum _ARBITER_ACTION { 00326 ArbiterActionTestAllocation, 00327 ArbiterActionRetestAllocation, 00328 ArbiterActionCommitAllocation, 00329 ArbiterActionRollbackAllocation, 00330 ArbiterActionQueryAllocatedResources, 00331 ArbiterActionWriteReservedResources, 00332 ArbiterActionQueryConflict, 00333 ArbiterActionQueryArbitrate, 00334 ArbiterActionAddReserved, 00335 ArbiterActionBootAllocation 00336 } ARBITER_ACTION, *PARBITER_ACTION; 00337 00338 typedef struct _ARBITER_CONFLICT_INFO { 00339 PDEVICE_OBJECT OwningObject; 00340 ULONGLONG Start; 00341 ULONGLONG End; 00342 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; 00343 00344 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { 00345 _Inout_ PLIST_ENTRY ArbitrationList; 00346 _In_ ULONG AllocateFromCount; 00347 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 00348 } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; 00349 00350 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { 00351 _Inout_ PLIST_ENTRY ArbitrationList; 00352 _In_ ULONG AllocateFromCount; 00353 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 00354 } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; 00355 00356 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { 00357 _Inout_ PLIST_ENTRY ArbitrationList; 00358 } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; 00359 00360 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { 00361 _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; 00362 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; 00363 00364 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { 00365 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 00366 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource; 00367 _Out_ PULONG ConflictCount; 00368 _Out_ PARBITER_CONFLICT_INFO *Conflicts; 00369 } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS; 00370 00371 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS { 00372 _In_ PLIST_ENTRY ArbitrationList; 00373 } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; 00374 00375 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { 00376 _In_ PDEVICE_OBJECT ReserveDevice; 00377 } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS; 00378 00379 typedef struct _ARBITER_PARAMETERS { 00380 union { 00381 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation; 00382 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation; 00383 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation; 00384 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources; 00385 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict; 00386 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate; 00387 ARBITER_ADD_RESERVED_PARAMETERS AddReserved; 00388 } Parameters; 00389 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS; 00390 00391 typedef enum _ARBITER_REQUEST_SOURCE { 00392 ArbiterRequestUndefined = -1, 00393 ArbiterRequestLegacyReported, 00394 ArbiterRequestHalReported, 00395 ArbiterRequestLegacyAssigned, 00396 ArbiterRequestPnpDetected, 00397 ArbiterRequestPnpEnumerated 00398 } ARBITER_REQUEST_SOURCE; 00399 00400 typedef enum _ARBITER_RESULT { 00401 ArbiterResultUndefined = -1, 00402 ArbiterResultSuccess, 00403 ArbiterResultExternalConflict, 00404 ArbiterResultNullRequest 00405 } ARBITER_RESULT; 00406 00407 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001 00408 00409 typedef struct _ARBITER_LIST_ENTRY { 00410 LIST_ENTRY ListEntry; 00411 ULONG AlternativeCount; 00412 PIO_RESOURCE_DESCRIPTOR Alternatives; 00413 PDEVICE_OBJECT PhysicalDeviceObject; 00414 ARBITER_REQUEST_SOURCE RequestSource; 00415 ULONG Flags; 00416 LONG_PTR WorkSpace; 00417 INTERFACE_TYPE InterfaceType; 00418 ULONG SlotNumber; 00419 ULONG BusNumber; 00420 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment; 00421 PIO_RESOURCE_DESCRIPTOR SelectedAlternative; 00422 ARBITER_RESULT Result; 00423 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY; 00424 00425 typedef NTSTATUS 00426 (NTAPI *PARBITER_HANDLER)( 00427 _Inout_opt_ PVOID Context, 00428 _In_ ARBITER_ACTION Action, 00429 _Inout_ PARBITER_PARAMETERS Parameters); 00430 00431 #define ARBITER_PARTIAL 0x00000001 00432 00433 typedef struct _ARBITER_INTERFACE { 00434 USHORT Size; 00435 USHORT Version; 00436 PVOID Context; 00437 PINTERFACE_REFERENCE InterfaceReference; 00438 PINTERFACE_DEREFERENCE InterfaceDereference; 00439 PARBITER_HANDLER ArbiterHandler; 00440 ULONG Flags; 00441 } ARBITER_INTERFACE, *PARBITER_INTERFACE; 00442 00443 typedef enum _RESOURCE_TRANSLATION_DIRECTION { 00444 TranslateChildToParent, 00445 TranslateParentToChild 00446 } RESOURCE_TRANSLATION_DIRECTION; 00447 00448 typedef NTSTATUS 00449 (NTAPI *PTRANSLATE_RESOURCE_HANDLER)( 00450 _Inout_opt_ PVOID Context, 00451 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, 00452 _In_ RESOURCE_TRANSLATION_DIRECTION Direction, 00453 _In_opt_ ULONG AlternativesCount, 00454 _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[], 00455 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 00456 _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); 00457 00458 typedef NTSTATUS 00459 (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( 00460 _Inout_opt_ PVOID Context, 00461 _In_ PIO_RESOURCE_DESCRIPTOR Source, 00462 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 00463 _Out_ PULONG TargetCount, 00464 _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target); 00465 00466 typedef struct _TRANSLATOR_INTERFACE { 00467 USHORT Size; 00468 USHORT Version; 00469 PVOID Context; 00470 PINTERFACE_REFERENCE InterfaceReference; 00471 PINTERFACE_DEREFERENCE InterfaceDereference; 00472 PTRANSLATE_RESOURCE_HANDLER TranslateResources; 00473 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; 00474 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; 00475 00476 typedef struct _PCI_AGP_CAPABILITY { 00477 PCI_CAPABILITIES_HEADER Header; 00478 USHORT Minor:4; 00479 USHORT Major:4; 00480 USHORT Rsvd1:8; 00481 struct _PCI_AGP_STATUS { 00482 ULONG Rate:3; 00483 ULONG Agp3Mode:1; 00484 ULONG FastWrite:1; 00485 ULONG FourGB:1; 00486 ULONG HostTransDisable:1; 00487 ULONG Gart64:1; 00488 ULONG ITA_Coherent:1; 00489 ULONG SideBandAddressing:1; 00490 ULONG CalibrationCycle:3; 00491 ULONG AsyncRequestSize:3; 00492 ULONG Rsvd1:1; 00493 ULONG Isoch:1; 00494 ULONG Rsvd2:6; 00495 ULONG RequestQueueDepthMaximum:8; 00496 } AGPStatus; 00497 struct _PCI_AGP_COMMAND { 00498 ULONG Rate:3; 00499 ULONG Rsvd1:1; 00500 ULONG FastWriteEnable:1; 00501 ULONG FourGBEnable:1; 00502 ULONG Rsvd2:1; 00503 ULONG Gart64:1; 00504 ULONG AGPEnable:1; 00505 ULONG SBAEnable:1; 00506 ULONG CalibrationCycle:3; 00507 ULONG AsyncReqSize:3; 00508 ULONG Rsvd3:8; 00509 ULONG RequestQueueDepth:8; 00510 } AGPCommand; 00511 } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY; 00512 00513 typedef enum _EXTENDED_AGP_REGISTER { 00514 IsochStatus, 00515 AgpControl, 00516 ApertureSize, 00517 AperturePageSize, 00518 GartLow, 00519 GartHigh, 00520 IsochCommand 00521 } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER; 00522 00523 typedef struct _PCI_AGP_ISOCH_STATUS { 00524 ULONG ErrorCode:2; 00525 ULONG Rsvd1:1; 00526 ULONG Isoch_L:3; 00527 ULONG Isoch_Y:2; 00528 ULONG Isoch_N:8; 00529 ULONG Rsvd2:16; 00530 } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS; 00531 00532 typedef struct _PCI_AGP_CONTROL { 00533 ULONG Rsvd1:7; 00534 ULONG GTLB_Enable:1; 00535 ULONG AP_Enable:1; 00536 ULONG CAL_Disable:1; 00537 ULONG Rsvd2:22; 00538 } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL; 00539 00540 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE { 00541 USHORT PageSizeMask:11; 00542 USHORT Rsvd1:1; 00543 USHORT PageSizeSelect:4; 00544 } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE; 00545 00546 typedef struct _PCI_AGP_ISOCH_COMMAND { 00547 USHORT Rsvd1:6; 00548 USHORT Isoch_Y:2; 00549 USHORT Isoch_N:8; 00550 } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND; 00551 00552 typedef struct PCI_AGP_EXTENDED_CAPABILITY { 00553 PCI_AGP_ISOCH_STATUS IsochStatus; 00554 PCI_AGP_CONTROL AgpControl; 00555 USHORT ApertureSize; 00556 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize; 00557 ULONG GartLow; 00558 ULONG GartHigh; 00559 PCI_AGP_ISOCH_COMMAND IsochCommand; 00560 } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY; 00561 00562 #define PCI_AGP_RATE_1X 0x1 00563 #define PCI_AGP_RATE_2X 0x2 00564 #define PCI_AGP_RATE_4X 0x4 00565 00566 #define PCIX_MODE_CONVENTIONAL_PCI 0x0 00567 #define PCIX_MODE1_66MHZ 0x1 00568 #define PCIX_MODE1_100MHZ 0x2 00569 #define PCIX_MODE1_133MHZ 0x3 00570 #define PCIX_MODE2_266_66MHZ 0x9 00571 #define PCIX_MODE2_266_100MHZ 0xA 00572 #define PCIX_MODE2_266_133MHZ 0xB 00573 #define PCIX_MODE2_533_66MHZ 0xD 00574 #define PCIX_MODE2_533_100MHZ 0xE 00575 #define PCIX_MODE2_533_133MHZ 0xF 00576 00577 #define PCIX_VERSION_MODE1_ONLY 0x0 00578 #define PCIX_VERSION_MODE2_ECC 0x1 00579 #define PCIX_VERSION_DUAL_MODE_ECC 0x2 00580 00581 typedef struct _PCIX_BRIDGE_CAPABILITY { 00582 PCI_CAPABILITIES_HEADER Header; 00583 union { 00584 _ANONYMOUS_STRUCT struct { 00585 USHORT Bus64Bit:1; 00586 USHORT Bus133MHzCapable:1; 00587 USHORT SplitCompletionDiscarded:1; 00588 USHORT UnexpectedSplitCompletion:1; 00589 USHORT SplitCompletionOverrun:1; 00590 USHORT SplitRequestDelayed:1; 00591 USHORT BusModeFrequency:4; 00592 USHORT Rsvd:2; 00593 USHORT Version:2; 00594 USHORT Bus266MHzCapable:1; 00595 USHORT Bus533MHzCapable:1; 00596 } DUMMYSTRUCTNAME; 00597 USHORT AsUSHORT; 00598 } SecondaryStatus; 00599 union { 00600 _ANONYMOUS_STRUCT struct { 00601 ULONG FunctionNumber:3; 00602 ULONG DeviceNumber:5; 00603 ULONG BusNumber:8; 00604 ULONG Device64Bit:1; 00605 ULONG Device133MHzCapable:1; 00606 ULONG SplitCompletionDiscarded:1; 00607 ULONG UnexpectedSplitCompletion:1; 00608 ULONG SplitCompletionOverrun:1; 00609 ULONG SplitRequestDelayed:1; 00610 ULONG Rsvd:7; 00611 ULONG DIMCapable:1; 00612 ULONG Device266MHzCapable:1; 00613 ULONG Device533MHzCapable:1; 00614 } DUMMYSTRUCTNAME; 00615 ULONG AsULONG; 00616 } BridgeStatus; 00617 USHORT UpstreamSplitTransactionCapacity; 00618 USHORT UpstreamSplitTransactionLimit; 00619 USHORT DownstreamSplitTransactionCapacity; 00620 USHORT DownstreamSplitTransactionLimit; 00621 union { 00622 _ANONYMOUS_STRUCT struct { 00623 ULONG SelectSecondaryRegisters:1; 00624 ULONG ErrorPresentInOtherBank:1; 00625 ULONG AdditionalCorrectableError:1; 00626 ULONG AdditionalUncorrectableError:1; 00627 ULONG ErrorPhase:3; 00628 ULONG ErrorCorrected:1; 00629 ULONG Syndrome:8; 00630 ULONG ErrorFirstCommand:4; 00631 ULONG ErrorSecondCommand:4; 00632 ULONG ErrorUpperAttributes:4; 00633 ULONG ControlUpdateEnable:1; 00634 ULONG Rsvd:1; 00635 ULONG DisableSingleBitCorrection:1; 00636 ULONG EccMode:1; 00637 } DUMMYSTRUCTNAME; 00638 ULONG AsULONG; 00639 } EccControlStatus; 00640 ULONG EccFirstAddress; 00641 ULONG EccSecondAddress; 00642 ULONG EccAttribute; 00643 } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY; 00644 00645 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY { 00646 PCI_CAPABILITIES_HEADER Header; 00647 USHORT Reserved; 00648 USHORT SubVendorID; 00649 USHORT SubSystemID; 00650 } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY; 00651 00652 #define OSC_FIRMWARE_FAILURE 0x02 00653 #define OSC_UNRECOGNIZED_UUID 0x04 00654 #define OSC_UNRECOGNIZED_REVISION 0x08 00655 #define OSC_CAPABILITIES_MASKED 0x10 00656 00657 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01 00658 00659 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD { 00660 union { 00661 _ANONYMOUS_STRUCT struct { 00662 ULONG ExtendedConfigOpRegions:1; 00663 ULONG ActiveStatePowerManagement:1; 00664 ULONG ClockPowerManagement:1; 00665 ULONG SegmentGroups:1; 00666 ULONG MessageSignaledInterrupts:1; 00667 ULONG WindowsHardwareErrorArchitecture:1; 00668 ULONG Reserved:26; 00669 } DUMMYSTRUCTNAME; 00670 ULONG AsULONG; 00671 } u; 00672 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD; 00673 00674 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD { 00675 union { 00676 _ANONYMOUS_STRUCT struct { 00677 ULONG ExpressNativeHotPlug:1; 00678 ULONG ShpcNativeHotPlug:1; 00679 ULONG ExpressNativePME:1; 00680 ULONG ExpressAdvancedErrorReporting:1; 00681 ULONG ExpressCapabilityStructure:1; 00682 ULONG Reserved:27; 00683 } DUMMYSTRUCTNAME; 00684 ULONG AsULONG; 00685 } u; 00686 } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD; 00687 00688 typedef enum _PCI_HARDWARE_INTERFACE { 00689 PciConventional, 00690 PciXMode1, 00691 PciXMode2, 00692 PciExpress 00693 } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE; 00694 00695 typedef enum { 00696 BusWidth32Bits, 00697 BusWidth64Bits 00698 } PCI_BUS_WIDTH; 00699 00700 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY { 00701 PCI_HARDWARE_INTERFACE SecondaryInterface; 00702 _ANONYMOUS_STRUCT struct { 00703 BOOLEAN BusCapabilitiesFound; 00704 ULONG CurrentSpeedAndMode; 00705 ULONG SupportedSpeedsAndModes; 00706 BOOLEAN DeviceIDMessagingCapable; 00707 PCI_BUS_WIDTH SecondaryBusWidth; 00708 } DUMMYSTRUCTNAME; 00709 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport; 00710 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest; 00711 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted; 00712 } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY; 00713 00714 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER { 00715 _ANONYMOUS_STRUCT struct { 00716 USHORT CapabilityVersion:4; 00717 USHORT DeviceType:4; 00718 USHORT SlotImplemented:1; 00719 USHORT InterruptMessageNumber:5; 00720 USHORT Rsvd:2; 00721 } DUMMYSTRUCTNAME; 00722 USHORT AsUSHORT; 00723 } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER; 00724 00725 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER { 00726 _ANONYMOUS_STRUCT struct { 00727 ULONG MaxPayloadSizeSupported:3; 00728 ULONG PhantomFunctionsSupported:2; 00729 ULONG ExtendedTagSupported:1; 00730 ULONG L0sAcceptableLatency:3; 00731 ULONG L1AcceptableLatency:3; 00732 ULONG Undefined:3; 00733 ULONG RoleBasedErrorReporting:1; 00734 ULONG Rsvd1:2; 00735 ULONG CapturedSlotPowerLimit:8; 00736 ULONG CapturedSlotPowerLimitScale:2; 00737 ULONG Rsvd2:4; 00738 } DUMMYSTRUCTNAME; 00739 ULONG AsULONG; 00740 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER; 00741 00742 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07; 00743 00744 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER { 00745 _ANONYMOUS_STRUCT struct { 00746 USHORT CorrectableErrorEnable:1; 00747 USHORT NonFatalErrorEnable:1; 00748 USHORT FatalErrorEnable:1; 00749 USHORT UnsupportedRequestErrorEnable:1; 00750 USHORT EnableRelaxedOrder:1; 00751 USHORT MaxPayloadSize:3; 00752 USHORT ExtendedTagEnable:1; 00753 USHORT PhantomFunctionsEnable:1; 00754 USHORT AuxPowerEnable:1; 00755 USHORT NoSnoopEnable:1; 00756 USHORT MaxReadRequestSize:3; 00757 USHORT BridgeConfigRetryEnable:1; 00758 } DUMMYSTRUCTNAME; 00759 USHORT AsUSHORT; 00760 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER; 00761 00762 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F; 00763 00764 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER { 00765 _ANONYMOUS_STRUCT struct { 00766 USHORT CorrectableErrorDetected:1; 00767 USHORT NonFatalErrorDetected:1; 00768 USHORT FatalErrorDetected:1; 00769 USHORT UnsupportedRequestDetected:1; 00770 USHORT AuxPowerDetected:1; 00771 USHORT TransactionsPending:1; 00772 USHORT Rsvd:10; 00773 } DUMMYSTRUCTNAME; 00774 USHORT AsUSHORT; 00775 } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER; 00776 00777 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER { 00778 _ANONYMOUS_STRUCT struct { 00779 ULONG MaximumLinkSpeed:4; 00780 ULONG MaximumLinkWidth:6; 00781 ULONG ActiveStatePMSupport:2; 00782 ULONG L0sExitLatency:3; 00783 ULONG L1ExitLatency:3; 00784 ULONG ClockPowerManagement:1; 00785 ULONG SurpriseDownErrorReportingCapable:1; 00786 ULONG DataLinkLayerActiveReportingCapable:1; 00787 ULONG Rsvd:3; 00788 ULONG PortNumber:8; 00789 } DUMMYSTRUCTNAME; 00790 ULONG AsULONG; 00791 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER; 00792 00793 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER { 00794 _ANONYMOUS_STRUCT struct { 00795 USHORT ActiveStatePMControl:2; 00796 USHORT Rsvd1:1; 00797 USHORT ReadCompletionBoundary:1; 00798 USHORT LinkDisable:1; 00799 USHORT RetrainLink:1; 00800 USHORT CommonClockConfig:1; 00801 USHORT ExtendedSynch:1; 00802 USHORT EnableClockPowerManagement:1; 00803 USHORT Rsvd2:7; 00804 } DUMMYSTRUCTNAME; 00805 USHORT AsUSHORT; 00806 } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER; 00807 00808 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER { 00809 _ANONYMOUS_STRUCT struct { 00810 USHORT LinkSpeed:4; 00811 USHORT LinkWidth:6; 00812 USHORT Undefined:1; 00813 USHORT LinkTraining:1; 00814 USHORT SlotClockConfig:1; 00815 USHORT DataLinkLayerActive:1; 00816 USHORT Rsvd:2; 00817 } DUMMYSTRUCTNAME; 00818 USHORT AsUSHORT; 00819 } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER; 00820 00821 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER { 00822 _ANONYMOUS_STRUCT struct { 00823 ULONG AttentionButtonPresent:1; 00824 ULONG PowerControllerPresent:1; 00825 ULONG MRLSensorPresent:1; 00826 ULONG AttentionIndicatorPresent:1; 00827 ULONG PowerIndicatorPresent:1; 00828 ULONG HotPlugSurprise:1; 00829 ULONG HotPlugCapable:1; 00830 ULONG SlotPowerLimit:8; 00831 ULONG SlotPowerLimitScale:2; 00832 ULONG ElectromechanicalLockPresent:1; 00833 ULONG NoCommandCompletedSupport:1; 00834 ULONG PhysicalSlotNumber:13; 00835 } DUMMYSTRUCTNAME; 00836 ULONG AsULONG; 00837 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER; 00838 00839 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER { 00840 _ANONYMOUS_STRUCT struct { 00841 USHORT AttentionButtonEnable:1; 00842 USHORT PowerFaultDetectEnable:1; 00843 USHORT MRLSensorEnable:1; 00844 USHORT PresenceDetectEnable:1; 00845 USHORT CommandCompletedEnable:1; 00846 USHORT HotPlugInterruptEnable:1; 00847 USHORT AttentionIndicatorControl:2; 00848 USHORT PowerIndicatorControl:2; 00849 USHORT PowerControllerControl:1; 00850 USHORT ElectromechanicalLockControl:1; 00851 USHORT DataLinkStateChangeEnable:1; 00852 USHORT Rsvd:3; 00853 } DUMMYSTRUCTNAME; 00854 USHORT AsUSHORT; 00855 } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER; 00856 00857 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER { 00858 _ANONYMOUS_STRUCT struct { 00859 USHORT AttentionButtonPressed:1; 00860 USHORT PowerFaultDetected:1; 00861 USHORT MRLSensorChanged:1; 00862 USHORT PresenceDetectChanged:1; 00863 USHORT CommandCompleted:1; 00864 USHORT MRLSensorState:1; 00865 USHORT PresenceDetectState:1; 00866 USHORT ElectromechanicalLockEngaged:1; 00867 USHORT DataLinkStateChanged:1; 00868 USHORT Rsvd:7; 00869 } DUMMYSTRUCTNAME; 00870 USHORT AsUSHORT; 00871 } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER; 00872 00873 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER { 00874 _ANONYMOUS_STRUCT struct { 00875 USHORT CorrectableSerrEnable:1; 00876 USHORT NonFatalSerrEnable:1; 00877 USHORT FatalSerrEnable:1; 00878 USHORT PMEInterruptEnable:1; 00879 USHORT CRSSoftwareVisibilityEnable:1; 00880 USHORT Rsvd:11; 00881 } DUMMYSTRUCTNAME; 00882 USHORT AsUSHORT; 00883 } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER; 00884 00885 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER { 00886 _ANONYMOUS_STRUCT struct { 00887 USHORT CRSSoftwareVisibility:1; 00888 USHORT Rsvd:15; 00889 } DUMMYSTRUCTNAME; 00890 USHORT AsUSHORT; 00891 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER; 00892 00893 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER { 00894 _ANONYMOUS_STRUCT struct { 00895 ULONG PMERequestorId:16; 00896 ULONG PMEStatus:1; 00897 ULONG PMEPending:1; 00898 ULONG Rsvd:14; 00899 } DUMMYSTRUCTNAME; 00900 ULONG AsULONG; 00901 } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER; 00902 00903 typedef struct _PCI_EXPRESS_CAPABILITY { 00904 PCI_CAPABILITIES_HEADER Header; 00905 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities; 00906 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities; 00907 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl; 00908 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus; 00909 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities; 00910 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl; 00911 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus; 00912 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities; 00913 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl; 00914 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus; 00915 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl; 00916 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities; 00917 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus; 00918 } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY; 00919 00920 typedef enum { 00921 MRLClosed = 0, 00922 MRLOpen 00923 } PCI_EXPRESS_MRL_STATE; 00924 00925 typedef enum { 00926 SlotEmpty = 0, 00927 CardPresent 00928 } PCI_EXPRESS_CARD_PRESENCE; 00929 00930 typedef enum { 00931 IndicatorOn = 1, 00932 IndicatorBlink, 00933 IndicatorOff 00934 } PCI_EXPRESS_INDICATOR_STATE; 00935 00936 typedef enum { 00937 PowerOn = 0, 00938 PowerOff 00939 } PCI_EXPRESS_POWER_STATE; 00940 00941 typedef enum { 00942 L0sEntrySupport = 1, 00943 L0sAndL1EntrySupport = 3 00944 } PCI_EXPRESS_ASPM_SUPPORT; 00945 00946 typedef enum { 00947 L0sAndL1EntryDisabled, 00948 L0sEntryEnabled, 00949 L1EntryEnabled, 00950 L0sAndL1EntryEnabled 00951 } PCI_EXPRESS_ASPM_CONTROL; 00952 00953 typedef enum { 00954 L0s_Below64ns = 0, 00955 L0s_64ns_128ns, 00956 L0s_128ns_256ns, 00957 L0s_256ns_512ns, 00958 L0s_512ns_1us, 00959 L0s_1us_2us, 00960 L0s_2us_4us, 00961 L0s_Above4us 00962 } PCI_EXPRESS_L0s_EXIT_LATENCY; 00963 00964 typedef enum { 00965 L1_Below1us = 0, 00966 L1_1us_2us, 00967 L1_2us_4us, 00968 L1_4us_8us, 00969 L1_8us_16us, 00970 L1_16us_32us, 00971 L1_32us_64us, 00972 L1_Above64us 00973 } PCI_EXPRESS_L1_EXIT_LATENCY; 00974 00975 typedef enum { 00976 PciExpressEndpoint = 0, 00977 PciExpressLegacyEndpoint, 00978 PciExpressRootPort = 4, 00979 PciExpressUpstreamSwitchPort, 00980 PciExpressDownstreamSwitchPort, 00981 PciExpressToPciXBridge, 00982 PciXToExpressBridge, 00983 PciExpressRootComplexIntegratedEndpoint, 00984 PciExpressRootComplexEventCollector 00985 } PCI_EXPRESS_DEVICE_TYPE; 00986 00987 typedef enum { 00988 MaxPayload128Bytes = 0, 00989 MaxPayload256Bytes, 00990 MaxPayload512Bytes, 00991 MaxPayload1024Bytes, 00992 MaxPayload2048Bytes, 00993 MaxPayload4096Bytes 00994 } PCI_EXPRESS_MAX_PAYLOAD_SIZE; 00995 00996 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID { 00997 _ANONYMOUS_STRUCT struct { 00998 USHORT FunctionNumber:3; 00999 USHORT DeviceNumber:5; 01000 USHORT BusNumber:8; 01001 } DUMMYSTRUCTNAME; 01002 USHORT AsUSHORT; 01003 } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID; 01004 01005 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE { 01006 ResourceTypeSingle = 0, 01007 ResourceTypeRange, 01008 ResourceTypeExtendedCounterConfiguration, 01009 ResourceTypeOverflow, 01010 ResourceTypeMax 01011 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE; 01012 01013 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR { 01014 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type; 01015 ULONG Flags; 01016 union { 01017 ULONG CounterIndex; 01018 ULONG ExtendedRegisterAddress; 01019 struct { 01020 ULONG Begin; 01021 ULONG End; 01022 } Range; 01023 } u; 01024 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR; 01025 01026 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { 01027 ULONG Count; 01028 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY]; 01029 } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST; 01030 01031 typedef VOID 01032 (NTAPI *PciPin2Line)( 01033 _In_ struct _BUS_HANDLER *BusHandler, 01034 _In_ struct _BUS_HANDLER *RootHandler, 01035 _In_ PCI_SLOT_NUMBER SlotNumber, 01036 _In_ PPCI_COMMON_CONFIG PciData); 01037 01038 typedef VOID 01039 (NTAPI *PciLine2Pin)( 01040 _In_ struct _BUS_HANDLER *BusHandler, 01041 _In_ struct _BUS_HANDLER *RootHandler, 01042 _In_ PCI_SLOT_NUMBER SlotNumber, 01043 _In_ PPCI_COMMON_CONFIG PciNewData, 01044 _In_ PPCI_COMMON_CONFIG PciOldData); 01045 01046 typedef VOID 01047 (NTAPI *PciReadWriteConfig)( 01048 _In_ struct _BUS_HANDLER *BusHandler, 01049 _In_ PCI_SLOT_NUMBER Slot, 01050 _In_reads_bytes_(Length) PVOID Buffer, 01051 _In_ ULONG Offset, 01052 _In_ ULONG Length); 01053 01054 #define PCI_DATA_TAG ' ICP' 01055 #define PCI_DATA_VERSION 1 01056 01057 typedef struct _PCIBUSDATA { 01058 ULONG Tag; 01059 ULONG Version; 01060 PciReadWriteConfig ReadConfig; 01061 PciReadWriteConfig WriteConfig; 01062 PciPin2Line Pin2Line; 01063 PciLine2Pin Line2Pin; 01064 PCI_SLOT_NUMBER ParentSlot; 01065 PVOID Reserved[4]; 01066 } PCIBUSDATA, *PPCIBUSDATA; 01067 01068 #ifndef _PCIINTRF_X_ 01069 #define _PCIINTRF_X_ 01070 01071 typedef ULONG 01072 (NTAPI *PCI_READ_WRITE_CONFIG)( 01073 _In_ PVOID Context, 01074 _In_ ULONG BusOffset, 01075 _In_ ULONG Slot, 01076 _In_reads_bytes_(Length) PVOID Buffer, 01077 _In_ ULONG Offset, 01078 _In_ ULONG Length); 01079 01080 typedef VOID 01081 (NTAPI *PCI_PIN_TO_LINE)( 01082 _In_ PVOID Context, 01083 _In_ PPCI_COMMON_CONFIG PciData); 01084 01085 typedef VOID 01086 (NTAPI *PCI_LINE_TO_PIN)( 01087 _In_ PVOID Context, 01088 _In_ PPCI_COMMON_CONFIG PciNewData, 01089 _In_ PPCI_COMMON_CONFIG PciOldData); 01090 01091 typedef VOID 01092 (NTAPI *PCI_ROOT_BUS_CAPABILITY)( 01093 _In_ PVOID Context, 01094 _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); 01095 01096 typedef VOID 01097 (NTAPI *PCI_EXPRESS_WAKE_CONTROL)( 01098 _In_ PVOID Context, 01099 _In_ BOOLEAN EnableWake); 01100 01101 typedef struct _PCI_BUS_INTERFACE_STANDARD { 01102 USHORT Size; 01103 USHORT Version; 01104 PVOID Context; 01105 PINTERFACE_REFERENCE InterfaceReference; 01106 PINTERFACE_DEREFERENCE InterfaceDereference; 01107 PCI_READ_WRITE_CONFIG ReadConfig; 01108 PCI_READ_WRITE_CONFIG WriteConfig; 01109 PCI_PIN_TO_LINE PinToLine; 01110 PCI_LINE_TO_PIN LineToPin; 01111 PCI_ROOT_BUS_CAPABILITY RootBusCapability; 01112 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl; 01113 } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD; 01114 01115 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1 01116 01117 #endif /* _PCIINTRF_X_ */ 01118 01119 #if (NTDDI_VERSION >= NTDDI_WIN7) 01120 01121 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000 01122 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000 01123 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \ 01124 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \ 01125 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX) 01126 01127 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200 01128 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300 01129 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300 01130 01131 #else 01132 01133 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200 01134 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300 01135 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300 01136 01137 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 01138 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 01139 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 01140 01141 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 01142 01143 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \ 01144 FILE_READ_ONLY_DEVICE | \ 01145 FILE_FLOPPY_DISKETTE | \ 01146 FILE_WRITE_ONCE_MEDIA | \ 01147 FILE_DEVICE_SECURE_OPEN) 01148 01149 typedef struct _FILE_ALIGNMENT_INFORMATION { 01150 ULONG AlignmentRequirement; 01151 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; 01152 01153 typedef struct _FILE_NAME_INFORMATION { 01154 ULONG FileNameLength; 01155 WCHAR FileName[1]; 01156 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 01157 01158 01159 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { 01160 ULONG FileAttributes; 01161 ULONG ReparseTag; 01162 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; 01163 01164 typedef struct _FILE_DISPOSITION_INFORMATION { 01165 BOOLEAN DeleteFile; 01166 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 01167 01168 typedef struct _FILE_END_OF_FILE_INFORMATION { 01169 LARGE_INTEGER EndOfFile; 01170 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 01171 01172 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { 01173 LARGE_INTEGER ValidDataLength; 01174 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; 01175 01176 typedef struct _FILE_FS_LABEL_INFORMATION { 01177 ULONG VolumeLabelLength; 01178 WCHAR VolumeLabel[1]; 01179 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; 01180 01181 typedef struct _FILE_FS_VOLUME_INFORMATION { 01182 LARGE_INTEGER VolumeCreationTime; 01183 ULONG VolumeSerialNumber; 01184 ULONG VolumeLabelLength; 01185 BOOLEAN SupportsObjects; 01186 WCHAR VolumeLabel[1]; 01187 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; 01188 01189 typedef struct _FILE_FS_SIZE_INFORMATION { 01190 LARGE_INTEGER TotalAllocationUnits; 01191 LARGE_INTEGER AvailableAllocationUnits; 01192 ULONG SectorsPerAllocationUnit; 01193 ULONG BytesPerSector; 01194 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; 01195 01196 typedef struct _FILE_FS_FULL_SIZE_INFORMATION { 01197 LARGE_INTEGER TotalAllocationUnits; 01198 LARGE_INTEGER CallerAvailableAllocationUnits; 01199 LARGE_INTEGER ActualAvailableAllocationUnits; 01200 ULONG SectorsPerAllocationUnit; 01201 ULONG BytesPerSector; 01202 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; 01203 01204 typedef struct _FILE_FS_OBJECTID_INFORMATION { 01205 UCHAR ObjectId[16]; 01206 UCHAR ExtendedInfo[48]; 01207 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; 01208 01209 typedef union _FILE_SEGMENT_ELEMENT { 01210 PVOID64 Buffer; 01211 ULONGLONG Alignment; 01212 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; 01213 01214 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 01215 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 01216 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 01217 01218 typedef enum _BUS_DATA_TYPE { 01219 ConfigurationSpaceUndefined = -1, 01220 Cmos, 01221 EisaConfiguration, 01222 Pos, 01223 CbusConfiguration, 01224 PCIConfiguration, 01225 VMEConfiguration, 01226 NuBusConfiguration, 01227 PCMCIAConfiguration, 01228 MPIConfiguration, 01229 MPSAConfiguration, 01230 PNPISAConfiguration, 01231 SgiInternalConfiguration, 01232 MaximumBusDataType 01233 } BUS_DATA_TYPE, *PBUS_DATA_TYPE; 01234 01235 /* Some Server 2003 DDK definitions */ 01236 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1 01237 01238 typedef NTSTATUS 01239 (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)( 01240 IN PVOID Context, 01241 IN INTERFACE_TYPE LegacyBusType, 01242 IN ULONG BusNumber, 01243 IN ULONG SlotNumber, 01244 OUT PDEVICE_OBJECT *PhysicalDeviceObject); 01245 01246 typedef struct _ROUTING_TOKEN { 01247 PVOID LinkNode; 01248 ULONG StaticVector; 01249 UCHAR Flags; 01250 } ROUTING_TOKEN, *PROUTING_TOKEN; 01251 01252 typedef NTSTATUS 01253 (NTAPI *PGET_INTERRUPT_ROUTING)( 01254 IN PDEVICE_OBJECT Pdo, 01255 OUT ULONG *Bus, 01256 OUT ULONG *PciSlot, 01257 OUT UCHAR *InterruptLine, 01258 OUT UCHAR *InterruptPin, 01259 OUT UCHAR *ClassCode, 01260 OUT UCHAR *SubClassCode, 01261 OUT PDEVICE_OBJECT *ParentPdo, 01262 OUT ROUTING_TOKEN *RoutingToken, 01263 OUT UCHAR *Flags); 01264 01265 typedef NTSTATUS 01266 (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)( 01267 IN PDEVICE_OBJECT Pdo, 01268 IN PROUTING_TOKEN RoutingToken); 01269 01270 typedef VOID 01271 (NTAPI *PUPDATE_INTERRUPT_LINE)( 01272 IN PDEVICE_OBJECT Pdo, 01273 IN UCHAR LineRegister); 01274 01275 typedef struct _INT_ROUTE_INTERFACE_STANDARD { 01276 USHORT Size; 01277 USHORT Version; 01278 PVOID Context; 01279 PINTERFACE_REFERENCE InterfaceReference; 01280 PINTERFACE_DEREFERENCE InterfaceDereference; 01281 PGET_INTERRUPT_ROUTING GetInterruptRouting; 01282 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken; 01283 PUPDATE_INTERRUPT_LINE UpdateInterruptLine; 01284 } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD; 01285 01286 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE { 01287 USHORT Size; 01288 USHORT Version; 01289 PVOID Context; 01290 PINTERFACE_REFERENCE InterfaceReference; 01291 PINTERFACE_DEREFERENCE InterfaceDereference; 01292 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection; 01293 } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE; 01294 01295 /* FIXME : These definitions don't exist in public headers */ 01296 01297 #define PCI_CB_INTRF_VERSION 1 01298 #define PCI_PME_INTRF_STANDARD_VER 1 01299 #define PNP_LOCATION_INTERFACE_VERSION 1 01300 01301 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85); 01302 DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b); 01303 01304 typedef NTSTATUS 01305 (NTAPI *PCARDBUSADD)( 01306 IN PDEVICE_OBJECT DeviceObject, 01307 IN OUT PVOID *DeviceContext); 01308 01309 typedef NTSTATUS 01310 (NTAPI *PCARDBUSDELETE)( 01311 IN PVOID DeviceContext); 01312 01313 typedef NTSTATUS 01314 (NTAPI *PCARDBUSPCIDISPATCH)( 01315 IN PVOID DeviceContext, 01316 IN PIRP Irp); 01317 01318 typedef VOID 01319 (NTAPI *PPME_SET_PME_ENABLE)( 01320 IN PDEVICE_OBJECT Pdo, 01321 IN BOOLEAN PmeEnable); 01322 01323 typedef VOID 01324 (NTAPI *PPME_CLEAR_PME_STATUS)( 01325 IN PDEVICE_OBJECT Pdo); 01326 01327 typedef VOID 01328 (NTAPI *PPME_GET_INFORMATION)( 01329 IN PDEVICE_OBJECT Pdo, 01330 OUT PBOOLEAN PmeCapable, 01331 OUT PBOOLEAN PmeStatus, 01332 OUT PBOOLEAN PmeEnable); 01333 01334 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE { 01335 USHORT Size; 01336 USHORT Version; 01337 PVOID Context; 01338 PINTERFACE_REFERENCE InterfaceReference; 01339 PINTERFACE_DEREFERENCE InterfaceDereference; 01340 PDRIVER_OBJECT DriverObject; 01341 PCARDBUSADD AddCardBus; 01342 PCARDBUSDELETE DeleteCardBus; 01343 PCARDBUSPCIDISPATCH DispatchPnp; 01344 } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE; 01345 01346 typedef struct _PCI_PME_INTERFACE { 01347 USHORT Size; 01348 USHORT Version; 01349 PVOID Context; 01350 PINTERFACE_REFERENCE InterfaceReference; 01351 PINTERFACE_DEREFERENCE InterfaceDereference; 01352 PPME_GET_INFORMATION GetPmeInformation; 01353 PPME_CLEAR_PME_STATUS ClearPmeStatus; 01354 PPME_SET_PME_ENABLE UpdateEnable; 01355 } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE; 01356 01357 /* Hardware Abstraction Layer Types */ 01358 01359 typedef BOOLEAN 01360 (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( 01361 _In_ ULONG Columns, 01362 _In_ ULONG Rows); 01363 01364 typedef PBUS_HANDLER 01365 (FASTCALL *pHalHandlerForBus)( 01366 _In_ INTERFACE_TYPE InterfaceType, 01367 _In_ ULONG BusNumber); 01368 01369 typedef VOID 01370 (FASTCALL *pHalReferenceBusHandler)( 01371 _In_ PBUS_HANDLER BusHandler); 01372 01373 typedef enum _HAL_QUERY_INFORMATION_CLASS { 01374 HalInstalledBusInformation, 01375 HalProfileSourceInformation, 01376 HalInformationClassUnused1, 01377 HalPowerInformation, 01378 HalProcessorSpeedInformation, 01379 HalCallbackInformation, 01380 HalMapRegisterInformation, 01381 HalMcaLogInformation, 01382 HalFrameBufferCachingInformation, 01383 HalDisplayBiosInformation, 01384 HalProcessorFeatureInformation, 01385 HalNumaTopologyInterface, 01386 HalErrorInformation, 01387 HalCmcLogInformation, 01388 HalCpeLogInformation, 01389 HalQueryMcaInterface, 01390 HalQueryAMLIIllegalIOPortAddresses, 01391 HalQueryMaxHotPlugMemoryAddress, 01392 HalPartitionIpiInterface, 01393 HalPlatformInformation, 01394 HalQueryProfileSourceList, 01395 HalInitLogInformation, 01396 HalFrequencyInformation, 01397 HalProcessorBrandString, 01398 HalHypervisorInformation, 01399 HalPlatformTimerInformation, 01400 HalAcpiAuditInformation 01401 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; 01402 01403 typedef enum _HAL_SET_INFORMATION_CLASS { 01404 HalProfileSourceInterval, 01405 HalProfileSourceInterruptHandler, 01406 HalMcaRegisterDriver, 01407 HalKernelErrorHandler, 01408 HalCmcRegisterDriver, 01409 HalCpeRegisterDriver, 01410 HalMcaLog, 01411 HalCmcLog, 01412 HalCpeLog, 01413 HalGenerateCmcInterrupt, 01414 HalProfileSourceTimerHandler, 01415 HalEnlightenment, 01416 HalProfileDpgoSourceInterruptHandler 01417 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; 01418 01419 typedef NTSTATUS 01420 (NTAPI *pHalQuerySystemInformation)( 01421 _In_ HAL_QUERY_INFORMATION_CLASS InformationClass, 01422 _In_ ULONG BufferSize, 01423 _Inout_updates_bytes_to_(BufferSize, *ReturnedLength) PVOID Buffer, 01424 _Out_ PULONG ReturnedLength); 01425 01426 typedef NTSTATUS 01427 (NTAPI *pHalSetSystemInformation)( 01428 _In_ HAL_SET_INFORMATION_CLASS InformationClass, 01429 _In_ ULONG BufferSize, 01430 _In_ PVOID Buffer); 01431 01432 typedef VOID 01433 (FASTCALL *pHalExamineMBR)( 01434 _In_ PDEVICE_OBJECT DeviceObject, 01435 _In_ ULONG SectorSize, 01436 _In_ ULONG MBRTypeIdentifier, 01437 _Out_ PVOID *Buffer); 01438 01439 typedef NTSTATUS 01440 (FASTCALL *pHalIoReadPartitionTable)( 01441 _In_ PDEVICE_OBJECT DeviceObject, 01442 _In_ ULONG SectorSize, 01443 _In_ BOOLEAN ReturnRecognizedPartitions, 01444 _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); 01445 01446 typedef NTSTATUS 01447 (FASTCALL *pHalIoSetPartitionInformation)( 01448 _In_ PDEVICE_OBJECT DeviceObject, 01449 _In_ ULONG SectorSize, 01450 _In_ ULONG PartitionNumber, 01451 _In_ ULONG PartitionType); 01452 01453 typedef NTSTATUS 01454 (FASTCALL *pHalIoWritePartitionTable)( 01455 _In_ PDEVICE_OBJECT DeviceObject, 01456 _In_ ULONG SectorSize, 01457 _In_ ULONG SectorsPerTrack, 01458 _In_ ULONG NumberOfHeads, 01459 _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); 01460 01461 typedef NTSTATUS 01462 (NTAPI *pHalQueryBusSlots)( 01463 _In_ PBUS_HANDLER BusHandler, 01464 _In_ ULONG BufferSize, 01465 _Out_ PULONG SlotNumbers, 01466 _Out_ PULONG ReturnedLength); 01467 01468 typedef NTSTATUS 01469 (NTAPI *pHalInitPnpDriver)(VOID); 01470 01471 typedef struct _PM_DISPATCH_TABLE { 01472 ULONG Signature; 01473 ULONG Version; 01474 PVOID Function[1]; 01475 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; 01476 01477 typedef NTSTATUS 01478 (NTAPI *pHalInitPowerManagement)( 01479 _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable, 01480 _Out_ PPM_DISPATCH_TABLE *PmHalDispatchTable); 01481 01482 typedef struct _DMA_ADAPTER* 01483 (NTAPI *pHalGetDmaAdapter)( 01484 _In_ PVOID Context, 01485 _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, 01486 _Out_ PULONG NumberOfMapRegisters); 01487 01488 typedef NTSTATUS 01489 (NTAPI *pHalGetInterruptTranslator)( 01490 _In_ INTERFACE_TYPE ParentInterfaceType, 01491 _In_ ULONG ParentBusNumber, 01492 _In_ INTERFACE_TYPE BridgeInterfaceType, 01493 _In_ USHORT Size, 01494 _In_ USHORT Version, 01495 _Out_ PTRANSLATOR_INTERFACE Translator, 01496 _Out_ PULONG BridgeBusNumber); 01497 01498 typedef NTSTATUS 01499 (NTAPI *pHalStartMirroring)(VOID); 01500 01501 typedef NTSTATUS 01502 (NTAPI *pHalEndMirroring)( 01503 _In_ ULONG PassNumber); 01504 01505 typedef NTSTATUS 01506 (NTAPI *pHalMirrorPhysicalMemory)( 01507 _In_ PHYSICAL_ADDRESS PhysicalAddress, 01508 _In_ LARGE_INTEGER NumberOfBytes); 01509 01510 typedef NTSTATUS 01511 (NTAPI *pHalMirrorVerify)( 01512 _In_ PHYSICAL_ADDRESS PhysicalAddress, 01513 _In_ LARGE_INTEGER NumberOfBytes); 01514 01515 typedef BOOLEAN 01516 (NTAPI *pHalTranslateBusAddress)( 01517 _In_ INTERFACE_TYPE InterfaceType, 01518 _In_ ULONG BusNumber, 01519 _In_ PHYSICAL_ADDRESS BusAddress, 01520 _Inout_ PULONG AddressSpace, 01521 _Out_ PPHYSICAL_ADDRESS TranslatedAddress); 01522 01523 typedef NTSTATUS 01524 (NTAPI *pHalAssignSlotResources)( 01525 _In_ PUNICODE_STRING RegistryPath, 01526 _In_opt_ PUNICODE_STRING DriverClassName, 01527 _In_ PDRIVER_OBJECT DriverObject, 01528 _In_ PDEVICE_OBJECT DeviceObject, 01529 _In_ INTERFACE_TYPE BusType, 01530 _In_ ULONG BusNumber, 01531 _In_ ULONG SlotNumber, 01532 _Inout_ PCM_RESOURCE_LIST *AllocatedResources); 01533 01534 typedef VOID 01535 (NTAPI *pHalHaltSystem)(VOID); 01536 01537 typedef BOOLEAN 01538 (NTAPI *pHalResetDisplay)(VOID); 01539 01540 typedef struct _MAP_REGISTER_ENTRY { 01541 PVOID MapRegister; 01542 BOOLEAN WriteToDevice; 01543 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; 01544 01545 typedef UCHAR 01546 (NTAPI *pHalVectorToIDTEntry)( 01547 ULONG Vector); 01548 01549 typedef BOOLEAN 01550 (NTAPI *pHalFindBusAddressTranslation)( 01551 _In_ PHYSICAL_ADDRESS BusAddress, 01552 _Inout_ PULONG AddressSpace, 01553 _Out_ PPHYSICAL_ADDRESS TranslatedAddress, 01554 _Inout_ PULONG_PTR Context, 01555 _In_ BOOLEAN NextBus); 01556 01557 typedef VOID 01558 (NTAPI *pHalEndOfBoot)(VOID); 01559 01560 typedef PVOID 01561 (NTAPI *pHalGetAcpiTable)( 01562 _In_ ULONG Signature, 01563 _In_opt_ PCSTR OemId, 01564 _In_opt_ PCSTR OemTableId); 01565 01566 #if defined(_IA64_) 01567 typedef NTSTATUS 01568 (*pHalGetErrorCapList)( 01569 _Inout_ PULONG CapsListLength, 01570 _Inout_updates_bytes_(*CapsListLength) PUCHAR ErrorCapList); 01571 01572 typedef NTSTATUS 01573 (*pHalInjectError)( 01574 _In_ ULONG BufferLength, 01575 _In_reads_bytes_(BufferLength) PUCHAR Buffer); 01576 #endif 01577 01578 typedef VOID 01579 (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(VOID); 01580 01581 typedef VOID 01582 (NTAPI *pHalSetPciErrorHandlerCallback)( 01583 _In_ PCI_ERROR_HANDLER_CALLBACK Callback); 01584 01585 #if 1 /* Not present in WDK 7600 */ 01586 typedef VOID 01587 (FASTCALL *pHalIoAssignDriveLetters)( 01588 _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 01589 _In_ PSTRING NtDeviceName, 01590 _Out_ PUCHAR NtSystemPath, 01591 _Out_ PSTRING NtSystemPathString); 01592 #endif 01593 01594 typedef struct { 01595 ULONG Version; 01596 pHalQuerySystemInformation HalQuerySystemInformation; 01597 pHalSetSystemInformation HalSetSystemInformation; 01598 pHalQueryBusSlots HalQueryBusSlots; 01599 ULONG Spare1; 01600 pHalExamineMBR HalExamineMBR; 01601 #if 1 /* Not present in WDK 7600 */ 01602 pHalIoAssignDriveLetters HalIoAssignDriveLetters; 01603 #endif 01604 pHalIoReadPartitionTable HalIoReadPartitionTable; 01605 pHalIoSetPartitionInformation HalIoSetPartitionInformation; 01606 pHalIoWritePartitionTable HalIoWritePartitionTable; 01607 pHalHandlerForBus HalReferenceHandlerForBus; 01608 pHalReferenceBusHandler HalReferenceBusHandler; 01609 pHalReferenceBusHandler HalDereferenceBusHandler; 01610 pHalInitPnpDriver HalInitPnpDriver; 01611 pHalInitPowerManagement HalInitPowerManagement; 01612 pHalGetDmaAdapter HalGetDmaAdapter; 01613 pHalGetInterruptTranslator HalGetInterruptTranslator; 01614 pHalStartMirroring HalStartMirroring; 01615 pHalEndMirroring HalEndMirroring; 01616 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory; 01617 pHalEndOfBoot HalEndOfBoot; 01618 pHalMirrorVerify HalMirrorVerify; 01619 pHalGetAcpiTable HalGetCachedAcpiTable; 01620 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback; 01621 #if defined(_IA64_) 01622 pHalGetErrorCapList HalGetErrorCapList; 01623 pHalInjectError HalInjectError; 01624 #endif 01625 } HAL_DISPATCH, *PHAL_DISPATCH; 01626 01627 /* GCC/MSVC and WDK compatible declaration */ 01628 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable; 01629 01630 #if defined(_NTOSKRNL_) || defined(_BLDR_) 01631 #define HALDISPATCH (&HalDispatchTable) 01632 #else 01633 /* This is a WDK compatibility definition */ 01634 #define HalDispatchTable (&HalDispatchTable) 01635 #define HALDISPATCH HalDispatchTable 01636 #endif 01637 01638 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */ 01639 #define HalDispatchTableVersion HALDISPATCH->Version 01640 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation 01641 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation 01642 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots 01643 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus 01644 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler 01645 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler 01646 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver 01647 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement 01648 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter 01649 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator 01650 #define HalStartMirroring HALDISPATCH->HalStartMirroring 01651 #define HalEndMirroring HALDISPATCH->HalEndMirroring 01652 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory 01653 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot 01654 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify 01655 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable 01656 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback 01657 #if defined(_IA64_) 01658 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList 01659 #define HalInjectError HALDISPATCH->HalInjectError 01660 #endif 01661 01662 typedef struct _HAL_BUS_INFORMATION { 01663 INTERFACE_TYPE BusType; 01664 BUS_DATA_TYPE ConfigurationType; 01665 ULONG BusNumber; 01666 ULONG Reserved; 01667 } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION; 01668 01669 typedef struct _HAL_PROFILE_SOURCE_INFORMATION { 01670 KPROFILE_SOURCE Source; 01671 BOOLEAN Supported; 01672 ULONG Interval; 01673 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; 01674 01675 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX { 01676 KPROFILE_SOURCE Source; 01677 BOOLEAN Supported; 01678 ULONG_PTR Interval; 01679 ULONG_PTR DefInterval; 01680 ULONG_PTR MaxInterval; 01681 ULONG_PTR MinInterval; 01682 } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX; 01683 01684 typedef struct _HAL_PROFILE_SOURCE_INTERVAL { 01685 KPROFILE_SOURCE Source; 01686 ULONG_PTR Interval; 01687 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; 01688 01689 typedef struct _HAL_PROFILE_SOURCE_LIST { 01690 KPROFILE_SOURCE Source; 01691 PWSTR Description; 01692 } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST; 01693 01694 typedef enum _HAL_DISPLAY_BIOS_INFORMATION { 01695 HalDisplayInt10Bios, 01696 HalDisplayEmulatedBios, 01697 HalDisplayNoBios 01698 } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION; 01699 01700 typedef struct _HAL_POWER_INFORMATION { 01701 ULONG TBD; 01702 } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION; 01703 01704 typedef struct _HAL_PROCESSOR_SPEED_INFO { 01705 ULONG ProcessorSpeed; 01706 } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION; 01707 01708 typedef struct _HAL_CALLBACKS { 01709 PCALLBACK_OBJECT SetSystemInformation; 01710 PCALLBACK_OBJECT BusCheck; 01711 } HAL_CALLBACKS, *PHAL_CALLBACKS; 01712 01713 typedef struct _HAL_PROCESSOR_FEATURE { 01714 ULONG UsableFeatureBits; 01715 } HAL_PROCESSOR_FEATURE; 01716 01717 typedef NTSTATUS 01718 (NTAPI *PHALIOREADWRITEHANDLER)( 01719 _In_ BOOLEAN fRead, 01720 _In_ ULONG dwAddr, 01721 _In_ ULONG dwSize, 01722 _Inout_ PULONG pdwData); 01723 01724 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { 01725 ULONG BadAddrBegin; 01726 ULONG BadAddrSize; 01727 ULONG OSVersionTrigger; 01728 PHALIOREADWRITEHANDLER IOHandler; 01729 } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST; 01730 01731 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) 01732 01733 typedef VOID 01734 (NTAPI *PHALMCAINTERFACELOCK)(VOID); 01735 01736 typedef VOID 01737 (NTAPI *PHALMCAINTERFACEUNLOCK)(VOID); 01738 01739 typedef NTSTATUS 01740 (NTAPI *PHALMCAINTERFACEREADREGISTER)( 01741 _In_ UCHAR BankNumber, 01742 _Inout_ PVOID Exception); 01743 01744 typedef struct _HAL_MCA_INTERFACE { 01745 PHALMCAINTERFACELOCK Lock; 01746 PHALMCAINTERFACEUNLOCK Unlock; 01747 PHALMCAINTERFACEREADREGISTER ReadRegister; 01748 } HAL_MCA_INTERFACE; 01749 01750 typedef enum { 01751 ApicDestinationModePhysical = 1, 01752 ApicDestinationModeLogicalFlat, 01753 ApicDestinationModeLogicalClustered, 01754 ApicDestinationModeUnknown 01755 } HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE; 01756 01757 #if defined(_AMD64_) 01758 01759 struct _KTRAP_FRAME; 01760 struct _KEXCEPTION_FRAME; 01761 01762 typedef ERROR_SEVERITY 01763 (NTAPI *PDRIVER_EXCPTN_CALLBACK)( 01764 _In_ PVOID Context, 01765 _In_ struct _KTRAP_FRAME *TrapFrame, 01766 _In_ struct _KEXCEPTION_FRAME *ExceptionFrame, 01767 _In_ PMCA_EXCEPTION Exception); 01768 01769 #endif 01770 01771 #if defined(_X86_) || defined(_IA64_) 01772 typedef 01773 #if defined(_IA64_) 01774 ERROR_SEVERITY 01775 #else 01776 VOID 01777 #endif 01778 (NTAPI *PDRIVER_EXCPTN_CALLBACK)( 01779 _In_ PVOID Context, 01780 _In_ PMCA_EXCEPTION BankLog); 01781 #endif 01782 01783 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK; 01784 01785 typedef struct _MCA_DRIVER_INFO { 01786 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback; 01787 PKDEFERRED_ROUTINE DpcCallback; 01788 PVOID DeviceContext; 01789 } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO; 01790 01791 typedef struct _HAL_ERROR_INFO { 01792 ULONG Version; 01793 ULONG InitMaxSize; 01794 ULONG McaMaxSize; 01795 ULONG McaPreviousEventsCount; 01796 ULONG McaCorrectedEventsCount; 01797 ULONG McaKernelDeliveryFails; 01798 ULONG McaDriverDpcQueueFails; 01799 ULONG McaReserved; 01800 ULONG CmcMaxSize; 01801 ULONG CmcPollingInterval; 01802 ULONG CmcInterruptsCount; 01803 ULONG CmcKernelDeliveryFails; 01804 ULONG CmcDriverDpcQueueFails; 01805 ULONG CmcGetStateFails; 01806 ULONG CmcClearStateFails; 01807 ULONG CmcReserved; 01808 ULONGLONG CmcLogId; 01809 ULONG CpeMaxSize; 01810 ULONG CpePollingInterval; 01811 ULONG CpeInterruptsCount; 01812 ULONG CpeKernelDeliveryFails; 01813 ULONG CpeDriverDpcQueueFails; 01814 ULONG CpeGetStateFails; 01815 ULONG CpeClearStateFails; 01816 ULONG CpeInterruptSources; 01817 ULONGLONG CpeLogId; 01818 ULONGLONG KernelReserved[4]; 01819 } HAL_ERROR_INFO, *PHAL_ERROR_INFO; 01820 01821 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1) 01822 #define HAL_MCE_DISABLED ((ULONG)0) 01823 01824 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 01825 #define HAL_CMC_DISABLED HAL_MCE_DISABLED 01826 01827 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 01828 #define HAL_CPE_DISABLED HAL_MCE_DISABLED 01829 01830 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 01831 #define HAL_MCA_DISABLED HAL_MCE_DISABLED 01832 01833 typedef VOID 01834 (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( 01835 _In_ PVOID Context, 01836 _In_ PCMC_EXCEPTION CmcLog); 01837 01838 typedef VOID 01839 (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( 01840 _In_ PVOID Context, 01841 _In_ PCPE_EXCEPTION CmcLog); 01842 01843 typedef struct _CMC_DRIVER_INFO { 01844 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback; 01845 PKDEFERRED_ROUTINE DpcCallback; 01846 PVOID DeviceContext; 01847 } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO; 01848 01849 typedef struct _CPE_DRIVER_INFO { 01850 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback; 01851 PKDEFERRED_ROUTINE DpcCallback; 01852 PVOID DeviceContext; 01853 } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO; 01854 01855 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_) 01856 01857 #if defined(_IA64_) 01858 01859 typedef NTSTATUS 01860 (*HALSENDCROSSPARTITIONIPI)( 01861 _In_ USHORT ProcessorID, 01862 _In_ UCHAR HardwareVector); 01863 01864 typedef NTSTATUS 01865 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)( 01866 _Out_ PULONG Vector, 01867 _Out_ PKIRQL Irql, 01868 _Inout_ PGROUP_AFFINITY Affinity, 01869 _Out_ PUCHAR HardwareVector); 01870 01871 typedef VOID 01872 (*HALFREECROSSPARTITIONINTERRUPTVECTOR)( 01873 _In_ ULONG Vector, 01874 _In_ PGROUP_AFFINITY Affinity); 01875 01876 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE { 01877 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi; 01878 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector; 01879 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector; 01880 } HAL_CROSS_PARTITION_IPI_INTERFACE; 01881 01882 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \ 01883 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \ 01884 HalFreeCrossPartitionInterruptVector) 01885 01886 #endif /* defined(_IA64_) */ 01887 01888 typedef struct _HAL_PLATFORM_INFORMATION { 01889 ULONG PlatformFlags; 01890 } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION; 01891 01892 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L 01893 #define HAL_PLATFORM_DISABLE_PTCG 0x04L 01894 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L 01895 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L 01896 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L 01897 01898 /****************************************************************************** 01899 * Kernel Types * 01900 ******************************************************************************/ 01901 01902 #define NX_SUPPORT_POLICY_ALWAYSOFF 0 01903 #define NX_SUPPORT_POLICY_ALWAYSON 1 01904 #define NX_SUPPORT_POLICY_OPTIN 2 01905 #define NX_SUPPORT_POLICY_OPTOUT 3 01906 01907 _IRQL_requires_same_ 01908 _Function_class_(EXPAND_STACK_CALLOUT) 01909 typedef VOID 01910 (NTAPI EXPAND_STACK_CALLOUT)( 01911 _In_opt_ PVOID Parameter); 01912 typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT; 01913 01914 typedef VOID 01915 (NTAPI *PTIMER_APC_ROUTINE)( 01916 _In_ PVOID TimerContext, 01917 _In_ ULONG TimerLowValue, 01918 _In_ LONG TimerHighValue); 01919 01920 typedef enum _TIMER_SET_INFORMATION_CLASS { 01921 TimerSetCoalescableTimer, 01922 MaxTimerInfoClass 01923 } TIMER_SET_INFORMATION_CLASS; 01924 01925 #if (NTDDI_VERSION >= NTDDI_WIN7) 01926 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO { 01927 _In_ LARGE_INTEGER DueTime; 01928 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine; 01929 _In_opt_ PVOID TimerContext; 01930 _In_opt_ struct _COUNTED_REASON_CONTEXT *WakeContext; 01931 _In_opt_ ULONG Period; 01932 _In_ ULONG TolerableDelay; 01933 _Out_opt_ PBOOLEAN PreviousState; 01934 } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO; 01935 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 01936 01937 #define XSTATE_LEGACY_FLOATING_POINT 0 01938 #define XSTATE_LEGACY_SSE 1 01939 #define XSTATE_GSSE 2 01940 01941 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT)) 01942 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE)) 01943 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) 01944 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE)) 01945 01946 #define MAXIMUM_XSTATE_FEATURES 64 01947 01948 typedef struct _XSTATE_FEATURE { 01949 ULONG Offset; 01950 ULONG Size; 01951 } XSTATE_FEATURE, *PXSTATE_FEATURE; 01952 01953 typedef struct _XSTATE_CONFIGURATION { 01954 ULONG64 EnabledFeatures; 01955 ULONG Size; 01956 ULONG OptimizedSave:1; 01957 XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; 01958 } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; 01959 01960 #define MAX_WOW64_SHARED_ENTRIES 16 01961 01962 typedef struct _KUSER_SHARED_DATA { 01963 ULONG TickCountLowDeprecated; 01964 ULONG TickCountMultiplier; 01965 volatile KSYSTEM_TIME InterruptTime; 01966 volatile KSYSTEM_TIME SystemTime; 01967 volatile KSYSTEM_TIME TimeZoneBias; 01968 USHORT ImageNumberLow; 01969 USHORT ImageNumberHigh; 01970 WCHAR NtSystemRoot[260]; 01971 ULONG MaxStackTraceDepth; 01972 ULONG CryptoExponent; 01973 ULONG TimeZoneId; 01974 ULONG LargePageMinimum; 01975 ULONG Reserved2[7]; 01976 NT_PRODUCT_TYPE NtProductType; 01977 BOOLEAN ProductTypeIsValid; 01978 ULONG NtMajorVersion; 01979 ULONG NtMinorVersion; 01980 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; 01981 ULONG Reserved1; 01982 ULONG Reserved3; 01983 volatile ULONG TimeSlip; 01984 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; 01985 ULONG AltArchitecturePad[1]; 01986 LARGE_INTEGER SystemExpirationDate; 01987 ULONG SuiteMask; 01988 BOOLEAN KdDebuggerEnabled; 01989 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 01990 UCHAR NXSupportPolicy; 01991 #endif 01992 volatile ULONG ActiveConsoleId; 01993 volatile ULONG DismountCount; 01994 ULONG ComPlusPackage; 01995 ULONG LastSystemRITEventTickCount; 01996 ULONG NumberOfPhysicalPages; 01997 BOOLEAN SafeBootMode; 01998 #if (NTDDI_VERSION >= NTDDI_WIN7) 01999 _ANONYMOUS_UNION union { 02000 UCHAR TscQpcData; 02001 _ANONYMOUS_STRUCT struct { 02002 UCHAR TscQpcEnabled:1; 02003 UCHAR TscQpcSpareFlag:1; 02004 UCHAR TscQpcShift:6; 02005 } DUMMYSTRUCTNAME; 02006 } DUMMYUNIONNAME; 02007 UCHAR TscQpcPad[2]; 02008 #endif 02009 #if (NTDDI_VERSION >= NTDDI_VISTA) 02010 _ANONYMOUS_UNION union { 02011 ULONG SharedDataFlags; 02012 _ANONYMOUS_STRUCT struct { 02013 ULONG DbgErrorPortPresent:1; 02014 ULONG DbgElevationEnabled:1; 02015 ULONG DbgVirtEnabled:1; 02016 ULONG DbgInstallerDetectEnabled:1; 02017 ULONG DbgSystemDllRelocated:1; 02018 ULONG DbgDynProcessorEnabled:1; 02019 ULONG DbgSEHValidationEnabled:1; 02020 ULONG SpareBits:25; 02021 } DUMMYSTRUCTNAME2; 02022 } DUMMYUNIONNAME2; 02023 #else 02024 ULONG TraceLogging; 02025 #endif 02026 ULONG DataFlagsPad[1]; 02027 ULONGLONG TestRetInstruction; 02028 ULONG SystemCall; 02029 ULONG SystemCallReturn; 02030 ULONGLONG SystemCallPad[3]; 02031 _ANONYMOUS_UNION union { 02032 volatile KSYSTEM_TIME TickCount; 02033 volatile ULONG64 TickCountQuad; 02034 _ANONYMOUS_STRUCT struct { 02035 ULONG ReservedTickCountOverlay[3]; 02036 ULONG TickCountPad[1]; 02037 } DUMMYSTRUCTNAME; 02038 } DUMMYUNIONNAME3; 02039 ULONG Cookie; 02040 ULONG CookiePad[1]; 02041 #if (NTDDI_VERSION >= NTDDI_WS03) 02042 LONGLONG ConsoleSessionForegroundProcessId; 02043 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; 02044 #endif 02045 #if (NTDDI_VERSION >= NTDDI_VISTA) 02046 #if (NTDDI_VERSION >= NTDDI_WIN7) 02047 USHORT UserModeGlobalLogger[16]; 02048 #else 02049 USHORT UserModeGlobalLogger[8]; 02050 ULONG HeapTracingPid[2]; 02051 ULONG CritSecTracingPid[2]; 02052 #endif 02053 ULONG ImageFileExecutionOptions; 02054 #if (NTDDI_VERSION >= NTDDI_VISTASP1) 02055 ULONG LangGenerationCount; 02056 #else 02057 /* 4 bytes padding */ 02058 #endif 02059 ULONGLONG Reserved5; 02060 volatile ULONG64 InterruptTimeBias; 02061 #endif 02062 #if (NTDDI_VERSION >= NTDDI_WIN7) 02063 volatile ULONG64 TscQpcBias; 02064 volatile ULONG ActiveProcessorCount; 02065 volatile USHORT ActiveGroupCount; 02066 USHORT Reserved4; 02067 volatile ULONG AitSamplingValue; 02068 volatile ULONG AppCompatFlag; 02069 ULONGLONG SystemDllNativeRelocation; 02070 ULONG SystemDllWowRelocation; 02071 ULONG XStatePad[1]; 02072 XSTATE_CONFIGURATION XState; 02073 #endif 02074 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; 02075 02076 #if (NTDDI_VERSION >= NTDDI_VISTA) 02077 extern NTSYSAPI volatile CCHAR KeNumberProcessors; 02078 #elif (NTDDI_VERSION >= NTDDI_WINXP) 02079 extern NTSYSAPI CCHAR KeNumberProcessors; 02080 #else 02081 extern PCCHAR KeNumberProcessors; 02082 #endif 02083 02084 02085 /****************************************************************************** 02086 * Kernel Debugger Types * 02087 ******************************************************************************/ 02088 typedef struct _DEBUG_DEVICE_ADDRESS { 02089 UCHAR Type; 02090 BOOLEAN Valid; 02091 UCHAR Reserved[2]; 02092 PUCHAR TranslatedAddress; 02093 ULONG Length; 02094 } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; 02095 02096 typedef struct _DEBUG_MEMORY_REQUIREMENTS { 02097 PHYSICAL_ADDRESS Start; 02098 PHYSICAL_ADDRESS MaxEnd; 02099 PVOID VirtualAddress; 02100 ULONG Length; 02101 BOOLEAN Cached; 02102 BOOLEAN Aligned; 02103 } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; 02104 02105 typedef struct _DEBUG_DEVICE_DESCRIPTOR { 02106 ULONG Bus; 02107 ULONG Slot; 02108 USHORT Segment; 02109 USHORT VendorID; 02110 USHORT DeviceID; 02111 UCHAR BaseClass; 02112 UCHAR SubClass; 02113 UCHAR ProgIf; 02114 BOOLEAN Initialized; 02115 BOOLEAN Configured; 02116 DEBUG_DEVICE_ADDRESS BaseAddress[6]; 02117 DEBUG_MEMORY_REQUIREMENTS Memory; 02118 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; 02119 02120 typedef NTSTATUS 02121 (NTAPI *pKdSetupPciDeviceForDebugging)( 02122 _In_opt_ PVOID LoaderBlock, 02123 _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); 02124 02125 typedef NTSTATUS 02126 (NTAPI *pKdReleasePciDeviceForDebugging)( 02127 _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); 02128 02129 typedef PVOID 02130 (NTAPI *pKdGetAcpiTablePhase0)( 02131 _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 02132 _In_ ULONG Signature); 02133 02134 typedef VOID 02135 (NTAPI *pKdCheckPowerButton)(VOID); 02136 02137 #if (NTDDI_VERSION >= NTDDI_VISTA) 02138 typedef PVOID 02139 (NTAPI *pKdMapPhysicalMemory64)( 02140 _In_ PHYSICAL_ADDRESS PhysicalAddress, 02141 _In_ ULONG NumberPages, 02142 _In_ BOOLEAN FlushCurrentTLB); 02143 02144 typedef VOID 02145 (NTAPI *pKdUnmapVirtualAddress)( 02146 _In_ PVOID VirtualAddress, 02147 _In_ ULONG NumberPages, 02148 _In_ BOOLEAN FlushCurrentTLB); 02149 #else 02150 typedef PVOID 02151 (NTAPI *pKdMapPhysicalMemory64)( 02152 _In_ PHYSICAL_ADDRESS PhysicalAddress, 02153 _In_ ULONG NumberPages); 02154 02155 typedef VOID 02156 (NTAPI *pKdUnmapVirtualAddress)( 02157 _In_ PVOID VirtualAddress, 02158 _In_ ULONG NumberPages); 02159 #endif 02160 02161 typedef ULONG 02162 (NTAPI *pKdGetPciDataByOffset)( 02163 _In_ ULONG BusNumber, 02164 _In_ ULONG SlotNumber, 02165 _Out_writes_bytes_(Length) PVOID Buffer, 02166 _In_ ULONG Offset, 02167 _In_ ULONG Length); 02168 02169 typedef ULONG 02170 (NTAPI *pKdSetPciDataByOffset)( 02171 _In_ ULONG BusNumber, 02172 _In_ ULONG SlotNumber, 02173 _In_reads_bytes_(Length) PVOID Buffer, 02174 _In_ ULONG Offset, 02175 _In_ ULONG Length); 02176 /****************************************************************************** 02177 * Memory manager Types * 02178 ******************************************************************************/ 02179 02180 typedef struct _PHYSICAL_MEMORY_RANGE { 02181 PHYSICAL_ADDRESS BaseAddress; 02182 LARGE_INTEGER NumberOfBytes; 02183 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; 02184 02185 typedef NTSTATUS 02186 (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( 02187 _In_ PMDL DestinationMdl, 02188 _In_ PMDL SourceMdl, 02189 _In_ PVOID Context); 02190 02191 typedef enum _MM_ROTATE_DIRECTION { 02192 MmToFrameBuffer, 02193 MmToFrameBufferNoCopy, 02194 MmToRegularMemory, 02195 MmToRegularMemoryNoCopy, 02196 MmMaximumRotateDirection 02197 } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION; 02198 02199 02200 /****************************************************************************** 02201 * Process Manager Types * 02202 ******************************************************************************/ 02203 02204 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 02205 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 02206 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 02207 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 02208 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 02209 02210 typedef struct _QUOTA_LIMITS { 02211 SIZE_T PagedPoolLimit; 02212 SIZE_T NonPagedPoolLimit; 02213 SIZE_T MinimumWorkingSetSize; 02214 SIZE_T MaximumWorkingSetSize; 02215 SIZE_T PagefileLimit; 02216 LARGE_INTEGER TimeLimit; 02217 } QUOTA_LIMITS, *PQUOTA_LIMITS; 02218 02219 typedef union _RATE_QUOTA_LIMIT { 02220 ULONG RateData; 02221 _ANONYMOUS_STRUCT struct { 02222 ULONG RatePercent:7; 02223 ULONG Reserved0:25; 02224 } DUMMYSTRUCTNAME; 02225 } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT; 02226 02227 typedef struct _QUOTA_LIMITS_EX { 02228 SIZE_T PagedPoolLimit; 02229 SIZE_T NonPagedPoolLimit; 02230 SIZE_T MinimumWorkingSetSize; 02231 SIZE_T MaximumWorkingSetSize; 02232 SIZE_T PagefileLimit; 02233 LARGE_INTEGER TimeLimit; 02234 SIZE_T WorkingSetLimit; 02235 SIZE_T Reserved2; 02236 SIZE_T Reserved3; 02237 SIZE_T Reserved4; 02238 ULONG Flags; 02239 RATE_QUOTA_LIMIT CpuRateLimit; 02240 } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; 02241 02242 typedef struct _IO_COUNTERS { 02243 ULONGLONG ReadOperationCount; 02244 ULONGLONG WriteOperationCount; 02245 ULONGLONG OtherOperationCount; 02246 ULONGLONG ReadTransferCount; 02247 ULONGLONG WriteTransferCount; 02248 ULONGLONG OtherTransferCount; 02249 } IO_COUNTERS, *PIO_COUNTERS; 02250 02251 typedef struct _VM_COUNTERS { 02252 SIZE_T PeakVirtualSize; 02253 SIZE_T VirtualSize; 02254 ULONG PageFaultCount; 02255 SIZE_T PeakWorkingSetSize; 02256 SIZE_T WorkingSetSize; 02257 SIZE_T QuotaPeakPagedPoolUsage; 02258 SIZE_T QuotaPagedPoolUsage; 02259 SIZE_T QuotaPeakNonPagedPoolUsage; 02260 SIZE_T QuotaNonPagedPoolUsage; 02261 SIZE_T PagefileUsage; 02262 SIZE_T PeakPagefileUsage; 02263 } VM_COUNTERS, *PVM_COUNTERS; 02264 02265 typedef struct _VM_COUNTERS_EX { 02266 SIZE_T PeakVirtualSize; 02267 SIZE_T VirtualSize; 02268 ULONG PageFaultCount; 02269 SIZE_T PeakWorkingSetSize; 02270 SIZE_T WorkingSetSize; 02271 SIZE_T QuotaPeakPagedPoolUsage; 02272 SIZE_T QuotaPagedPoolUsage; 02273 SIZE_T QuotaPeakNonPagedPoolUsage; 02274 SIZE_T QuotaNonPagedPoolUsage; 02275 SIZE_T PagefileUsage; 02276 SIZE_T PeakPagefileUsage; 02277 SIZE_T PrivateUsage; 02278 } VM_COUNTERS_EX, *PVM_COUNTERS_EX; 02279 02280 #define MAX_HW_COUNTERS 16 02281 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001 02282 02283 typedef enum _HARDWARE_COUNTER_TYPE { 02284 PMCCounter, 02285 MaxHardwareCounterType 02286 } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE; 02287 02288 typedef struct _HARDWARE_COUNTER { 02289 HARDWARE_COUNTER_TYPE Type; 02290 ULONG Reserved; 02291 ULONG64 Index; 02292 } HARDWARE_COUNTER, *PHARDWARE_COUNTER; 02293 02294 typedef struct _POOLED_USAGE_AND_LIMITS { 02295 SIZE_T PeakPagedPoolUsage; 02296 SIZE_T PagedPoolUsage; 02297 SIZE_T PagedPoolLimit; 02298 SIZE_T PeakNonPagedPoolUsage; 02299 SIZE_T NonPagedPoolUsage; 02300 SIZE_T NonPagedPoolLimit; 02301 SIZE_T PeakPagefileUsage; 02302 SIZE_T PagefileUsage; 02303 SIZE_T PagefileLimit; 02304 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; 02305 02306 typedef struct _PROCESS_ACCESS_TOKEN { 02307 HANDLE Token; 02308 HANDLE Thread; 02309 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; 02310 02311 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL 02312 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1)) 02313 02314 typedef struct _PROCESS_EXCEPTION_PORT { 02315 _In_ HANDLE ExceptionPortHandle; 02316 _Inout_ ULONG StateFlags; 02317 } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT; 02318 02319 typedef VOID 02320 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( 02321 _In_ HANDLE ParentId, 02322 _In_ HANDLE ProcessId, 02323 _In_ BOOLEAN Create); 02324 02325 typedef struct _PS_CREATE_NOTIFY_INFO { 02326 _In_ SIZE_T Size; 02327 _ANONYMOUS_UNION union { 02328 _In_ ULONG Flags; 02329 _ANONYMOUS_STRUCT struct { 02330 _In_ ULONG FileOpenNameAvailable:1; 02331 _In_ ULONG Reserved:31; 02332 } DUMMYSTRUCTNAME; 02333 } DUMMYUNIONNAME; 02334 _In_ HANDLE ParentProcessId; 02335 _In_ CLIENT_ID CreatingThreadId; 02336 _Inout_ struct _FILE_OBJECT *FileObject; 02337 _In_ PCUNICODE_STRING ImageFileName; 02338 _In_opt_ PCUNICODE_STRING CommandLine; 02339 _Inout_ NTSTATUS CreationStatus; 02340 } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; 02341 02342 typedef VOID 02343 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( 02344 _Inout_ PEPROCESS Process, 02345 _In_ HANDLE ProcessId, 02346 _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo); 02347 02348 typedef VOID 02349 (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( 02350 _In_ HANDLE ProcessId, 02351 _In_ HANDLE ThreadId, 02352 _In_ BOOLEAN Create); 02353 02354 #define IMAGE_ADDRESSING_MODE_32BIT 3 02355 02356 typedef struct _IMAGE_INFO { 02357 _ANONYMOUS_UNION union { 02358 ULONG Properties; 02359 _ANONYMOUS_STRUCT struct { 02360 ULONG ImageAddressingMode:8; 02361 ULONG SystemModeImage:1; 02362 ULONG ImageMappedToAllPids:1; 02363 ULONG ExtendedInfoPresent:1; 02364 ULONG Reserved:21; 02365 } DUMMYSTRUCTNAME; 02366 } DUMMYUNIONNAME; 02367 PVOID ImageBase; 02368 ULONG ImageSelector; 02369 SIZE_T ImageSize; 02370 ULONG ImageSectionNumber; 02371 } IMAGE_INFO, *PIMAGE_INFO; 02372 02373 typedef struct _IMAGE_INFO_EX { 02374 SIZE_T Size; 02375 IMAGE_INFO ImageInfo; 02376 struct _FILE_OBJECT *FileObject; 02377 } IMAGE_INFO_EX, *PIMAGE_INFO_EX; 02378 02379 typedef VOID 02380 (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( 02381 _In_ PUNICODE_STRING FullImageName, 02382 _In_ HANDLE ProcessId, 02383 _In_ PIMAGE_INFO ImageInfo); 02384 02385 #define THREAD_CSWITCH_PMU_DISABLE FALSE 02386 #define THREAD_CSWITCH_PMU_ENABLE TRUE 02387 02388 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001 02389 02390 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16 02391 02392 typedef struct _NT_TIB { 02393 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; 02394 PVOID StackBase; 02395 PVOID StackLimit; 02396 PVOID SubSystemTib; 02397 _ANONYMOUS_UNION union { 02398 PVOID FiberData; 02399 ULONG Version; 02400 } DUMMYUNIONNAME; 02401 PVOID ArbitraryUserPointer; 02402 struct _NT_TIB *Self; 02403 } NT_TIB, *PNT_TIB; 02404 02405 typedef struct _NT_TIB32 { 02406 ULONG ExceptionList; 02407 ULONG StackBase; 02408 ULONG StackLimit; 02409 ULONG SubSystemTib; 02410 _ANONYMOUS_UNION union { 02411 ULONG FiberData; 02412 ULONG Version; 02413 } DUMMYUNIONNAME; 02414 ULONG ArbitraryUserPointer; 02415 ULONG Self; 02416 } NT_TIB32,*PNT_TIB32; 02417 02418 typedef struct _NT_TIB64 { 02419 ULONG64 ExceptionList; 02420 ULONG64 StackBase; 02421 ULONG64 StackLimit; 02422 ULONG64 SubSystemTib; 02423 _ANONYMOUS_UNION union { 02424 ULONG64 FiberData; 02425 ULONG Version; 02426 } DUMMYUNIONNAME; 02427 ULONG64 ArbitraryUserPointer; 02428 ULONG64 Self; 02429 } NT_TIB64,*PNT_TIB64; 02430 02431 typedef enum _PROCESSINFOCLASS { 02432 ProcessBasicInformation, 02433 ProcessQuotaLimits, 02434 ProcessIoCounters, 02435 ProcessVmCounters, 02436 ProcessTimes, 02437 ProcessBasePriority, 02438 ProcessRaisePriority, 02439 ProcessDebugPort, 02440 ProcessExceptionPort, 02441 ProcessAccessToken, 02442 ProcessLdtInformation, 02443 ProcessLdtSize, 02444 ProcessDefaultHardErrorMode, 02445 ProcessIoPortHandlers, 02446 ProcessPooledUsageAndLimits, 02447 ProcessWorkingSetWatch, 02448 ProcessUserModeIOPL, 02449 ProcessEnableAlignmentFaultFixup, 02450 ProcessPriorityClass, 02451 ProcessWx86Information, 02452 ProcessHandleCount, 02453 ProcessAffinityMask, 02454 ProcessPriorityBoost, 02455 ProcessDeviceMap, 02456 ProcessSessionInformation, 02457 ProcessForegroundInformation, 02458 ProcessWow64Information, 02459 ProcessImageFileName, 02460 ProcessLUIDDeviceMapsEnabled, 02461 ProcessBreakOnTermination, 02462 ProcessDebugObjectHandle, 02463 ProcessDebugFlags, 02464 ProcessHandleTracing, 02465 ProcessIoPriority, 02466 ProcessExecuteFlags, 02467 ProcessTlsInformation, 02468 ProcessCookie, 02469 ProcessImageInformation, 02470 ProcessCycleTime, 02471 ProcessPagePriority, 02472 ProcessInstrumentationCallback, 02473 ProcessThreadStackAllocation, 02474 ProcessWorkingSetWatchEx, 02475 ProcessImageFileNameWin32, 02476 ProcessImageFileMapping, 02477 ProcessAffinityUpdateMode, 02478 ProcessMemoryAllocationMode, 02479 ProcessGroupInformation, 02480 ProcessTokenVirtualizationEnabled, 02481 ProcessConsoleHostProcess, 02482 ProcessWindowInformation, 02483 MaxProcessInfoClass 02484 } PROCESSINFOCLASS; 02485 02486 typedef enum _THREADINFOCLASS { 02487 ThreadBasicInformation, 02488 ThreadTimes, 02489 ThreadPriority, 02490 ThreadBasePriority, 02491 ThreadAffinityMask, 02492 ThreadImpersonationToken, 02493 ThreadDescriptorTableEntry, 02494 ThreadEnableAlignmentFaultFixup, 02495 ThreadEventPair_Reusable, 02496 ThreadQuerySetWin32StartAddress, 02497 ThreadZeroTlsCell, 02498 ThreadPerformanceCount, 02499 ThreadAmILastThread, 02500 ThreadIdealProcessor, 02501 ThreadPriorityBoost, 02502 ThreadSetTlsArrayAddress, 02503 ThreadIsIoPending, 02504 ThreadHideFromDebugger, 02505 ThreadBreakOnTermination, 02506 ThreadSwitchLegacyState, 02507 ThreadIsTerminated, 02508 ThreadLastSystemCall, 02509 ThreadIoPriority, 02510 ThreadCycleTime, 02511 ThreadPagePriority, 02512 ThreadActualBasePriority, 02513 ThreadTebInformation, 02514 ThreadCSwitchMon, 02515 ThreadCSwitchPmu, 02516 ThreadWow64Context, 02517 ThreadGroupInformation, 02518 ThreadUmsInformation, 02519 ThreadCounterProfiling, 02520 ThreadIdealProcessorEx, 02521 MaxThreadInfoClass 02522 } THREADINFOCLASS; 02523 02524 typedef struct _PAGE_PRIORITY_INFORMATION { 02525 ULONG PagePriority; 02526 } PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION; 02527 02528 typedef struct _PROCESS_WS_WATCH_INFORMATION { 02529 PVOID FaultingPc; 02530 PVOID FaultingVa; 02531 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; 02532 02533 typedef struct _PROCESS_BASIC_INFORMATION { 02534 NTSTATUS ExitStatus; 02535 struct _PEB *PebBaseAddress; 02536 ULONG_PTR AffinityMask; 02537 KPRIORITY BasePriority; 02538 ULONG_PTR UniqueProcessId; 02539 ULONG_PTR InheritedFromUniqueProcessId; 02540 } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; 02541 02542 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { 02543 SIZE_T Size; 02544 PROCESS_BASIC_INFORMATION BasicInfo; 02545 _ANONYMOUS_UNION union { 02546 ULONG Flags; 02547 _ANONYMOUS_STRUCT struct { 02548 ULONG IsProtectedProcess:1; 02549 ULONG IsWow64Process:1; 02550 ULONG IsProcessDeleting:1; 02551 ULONG IsCrossSessionCreate:1; 02552 ULONG SpareBits:28; 02553 } DUMMYSTRUCTNAME; 02554 } DUMMYUNIONNAME; 02555 } PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION; 02556 02557 typedef struct _PROCESS_DEVICEMAP_INFORMATION { 02558 _ANONYMOUS_UNION union { 02559 struct { 02560 HANDLE DirectoryHandle; 02561 } Set; 02562 struct { 02563 ULONG DriveMap; 02564 UCHAR DriveType[32]; 02565 } Query; 02566 } DUMMYUNIONNAME; 02567 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; 02568 02569 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { 02570 _ANONYMOUS_UNION union { 02571 struct { 02572 HANDLE DirectoryHandle; 02573 } Set; 02574 struct { 02575 ULONG DriveMap; 02576 UCHAR DriveType[32]; 02577 } Query; 02578 } DUMMYUNIONNAME; 02579 ULONG Flags; 02580 } PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX; 02581 02582 typedef struct _PROCESS_SESSION_INFORMATION { 02583 ULONG SessionId; 02584 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; 02585 02586 typedef struct _PROCESS_HANDLE_TRACING_ENABLE { 02587 ULONG Flags; 02588 } PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE; 02589 02590 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX { 02591 ULONG Flags; 02592 ULONG TotalSlots; 02593 } PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX; 02594 02595 typedef struct _PROCESS_HANDLE_TRACING_ENTRY { 02596 HANDLE Handle; 02597 CLIENT_ID ClientId; 02598 ULONG Type; 02599 PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS]; 02600 } PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY; 02601 02602 typedef struct _PROCESS_HANDLE_TRACING_QUERY { 02603 HANDLE Handle; 02604 ULONG TotalTraces; 02605 PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; 02606 } PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; 02607 02608 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess; 02609 02610 02611 /****************************************************************************** 02612 * Runtime Library Types * 02613 ******************************************************************************/ 02614 02615 02616 #ifndef _RTL_RUN_ONCE_DEF 02617 #define _RTL_RUN_ONCE_DEF 02618 02619 #define RTL_RUN_ONCE_INIT {0} 02620 02621 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL 02622 #define RTL_RUN_ONCE_ASYNC 0x00000002UL 02623 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL 02624 02625 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2 02626 02627 #define RTL_HASH_ALLOCATED_HEADER 0x00000001 02628 02629 #define RTL_HASH_RESERVED_SIGNATURE 0 02630 02631 /* RtlVerifyVersionInfo() ComparisonType */ 02632 02633 #define VER_EQUAL 1 02634 #define VER_GREATER 2 02635 #define VER_GREATER_EQUAL 3 02636 #define VER_LESS 4 02637 #define VER_LESS_EQUAL 5 02638 #define VER_AND 6 02639 #define VER_OR 7 02640 02641 #define VER_CONDITION_MASK 7 02642 #define VER_NUM_BITS_PER_CONDITION_MASK 3 02643 02644 /* RtlVerifyVersionInfo() TypeMask */ 02645 02646 #define VER_MINORVERSION 0x0000001 02647 #define VER_MAJORVERSION 0x0000002 02648 #define VER_BUILDNUMBER 0x0000004 02649 #define VER_PLATFORMID 0x0000008 02650 #define VER_SERVICEPACKMINOR 0x0000010 02651 #define VER_SERVICEPACKMAJOR 0x0000020 02652 #define VER_SUITENAME 0x0000040 02653 #define VER_PRODUCT_TYPE 0x0000080 02654 02655 #define VER_NT_WORKSTATION 0x0000001 02656 #define VER_NT_DOMAIN_CONTROLLER 0x0000002 02657 #define VER_NT_SERVER 0x0000003 02658 02659 #define VER_PLATFORM_WIN32s 0 02660 #define VER_PLATFORM_WIN32_WINDOWS 1 02661 #define VER_PLATFORM_WIN32_NT 2 02662 02663 typedef union _RTL_RUN_ONCE { 02664 PVOID Ptr; 02665 } RTL_RUN_ONCE, *PRTL_RUN_ONCE; 02666 02667 _Function_class_(RTL_RUN_ONCE_INIT_FN) 02668 _IRQL_requires_same_ 02669 typedef ULONG /* LOGICAL */ 02670 (NTAPI *PRTL_RUN_ONCE_INIT_FN) ( 02671 _Inout_ PRTL_RUN_ONCE RunOnce, 02672 _Inout_opt_ PVOID Parameter, 02673 _Inout_opt_ PVOID *Context); 02674 02675 #endif /* _RTL_RUN_ONCE_DEF */ 02676 02677 typedef enum _TABLE_SEARCH_RESULT { 02678 TableEmptyTree, 02679 TableFoundNode, 02680 TableInsertAsLeft, 02681 TableInsertAsRight 02682 } TABLE_SEARCH_RESULT; 02683 02684 typedef enum _RTL_GENERIC_COMPARE_RESULTS { 02685 GenericLessThan, 02686 GenericGreaterThan, 02687 GenericEqual 02688 } RTL_GENERIC_COMPARE_RESULTS; 02689 02690 // Forwarder 02691 struct _RTL_AVL_TABLE; 02692 02693 _IRQL_requires_same_ 02694 _Function_class_(RTL_AVL_COMPARE_ROUTINE) 02695 typedef RTL_GENERIC_COMPARE_RESULTS 02696 (NTAPI RTL_AVL_COMPARE_ROUTINE) ( 02697 _In_ struct _RTL_AVL_TABLE *Table, 02698 _In_ PVOID FirstStruct, 02699 _In_ PVOID SecondStruct); 02700 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE; 02701 02702 _IRQL_requires_same_ 02703 _Function_class_(RTL_AVL_ALLOCATE_ROUTINE) 02704 __drv_allocatesMem(Mem) 02705 typedef PVOID 02706 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) ( 02707 _In_ struct _RTL_AVL_TABLE *Table, 02708 _In_ CLONG ByteSize); 02709 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE; 02710 02711 _IRQL_requires_same_ 02712 _Function_class_(RTL_AVL_FREE_ROUTINE) 02713 typedef VOID 02714 (NTAPI RTL_AVL_FREE_ROUTINE) ( 02715 _In_ struct _RTL_AVL_TABLE *Table, 02716 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); 02717 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE; 02718 02719 _IRQL_requires_same_ 02720 _Function_class_(RTL_AVL_MATCH_FUNCTION) 02721 typedef NTSTATUS 02722 (NTAPI RTL_AVL_MATCH_FUNCTION) ( 02723 _In_ struct _RTL_AVL_TABLE *Table, 02724 _In_ PVOID UserData, 02725 _In_ PVOID MatchData); 02726 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION; 02727 02728 typedef struct _RTL_BALANCED_LINKS { 02729 struct _RTL_BALANCED_LINKS *Parent; 02730 struct _RTL_BALANCED_LINKS *LeftChild; 02731 struct _RTL_BALANCED_LINKS *RightChild; 02732 CHAR Balance; 02733 UCHAR Reserved[3]; 02734 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS; 02735 02736 typedef struct _RTL_AVL_TABLE { 02737 RTL_BALANCED_LINKS BalancedRoot; 02738 PVOID OrderedPointer; 02739 ULONG WhichOrderedElement; 02740 ULONG NumberGenericTableElements; 02741 ULONG DepthOfTree; 02742 PRTL_BALANCED_LINKS RestartKey; 02743 ULONG DeleteCount; 02744 PRTL_AVL_COMPARE_ROUTINE CompareRoutine; 02745 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine; 02746 PRTL_AVL_FREE_ROUTINE FreeRoutine; 02747 PVOID TableContext; 02748 } RTL_AVL_TABLE, *PRTL_AVL_TABLE; 02749 02750 typedef struct _RTL_SPLAY_LINKS { 02751 struct _RTL_SPLAY_LINKS *Parent; 02752 struct _RTL_SPLAY_LINKS *LeftChild; 02753 struct _RTL_SPLAY_LINKS *RightChild; 02754 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; 02755 02756 #ifndef RTL_USE_AVL_TABLES 02757 02758 struct _RTL_GENERIC_TABLE; 02759 02760 _IRQL_requires_same_ 02761 _Function_class_(RTL_GENERIC_COMPARE_ROUTINE) 02762 typedef RTL_GENERIC_COMPARE_RESULTS 02763 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) ( 02764 _In_ struct _RTL_GENERIC_TABLE *Table, 02765 _In_ PVOID FirstStruct, 02766 _In_ PVOID SecondStruct); 02767 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE; 02768 02769 _IRQL_requires_same_ 02770 _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE) 02771 __drv_allocatesMem(Mem) 02772 typedef PVOID 02773 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) ( 02774 _In_ struct _RTL_GENERIC_TABLE *Table, 02775 _In_ CLONG ByteSize); 02776 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE; 02777 02778 _IRQL_requires_same_ 02779 _Function_class_(RTL_GENERIC_FREE_ROUTINE) 02780 typedef VOID 02781 (NTAPI RTL_GENERIC_FREE_ROUTINE) ( 02782 _In_ struct _RTL_GENERIC_TABLE *Table, 02783 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); 02784 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE; 02785 02786 typedef struct _RTL_GENERIC_TABLE { 02787 PRTL_SPLAY_LINKS TableRoot; 02788 LIST_ENTRY InsertOrderList; 02789 PLIST_ENTRY OrderedPointer; 02790 ULONG WhichOrderedElement; 02791 ULONG NumberGenericTableElements; 02792 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine; 02793 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine; 02794 PRTL_GENERIC_FREE_ROUTINE FreeRoutine; 02795 PVOID TableContext; 02796 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; 02797 02798 #endif /* !RTL_USE_AVL_TABLES */ 02799 02800 #ifdef RTL_USE_AVL_TABLES 02801 02802 #undef RTL_GENERIC_COMPARE_ROUTINE 02803 #undef PRTL_GENERIC_COMPARE_ROUTINE 02804 #undef RTL_GENERIC_ALLOCATE_ROUTINE 02805 #undef PRTL_GENERIC_ALLOCATE_ROUTINE 02806 #undef RTL_GENERIC_FREE_ROUTINE 02807 #undef PRTL_GENERIC_FREE_ROUTINE 02808 #undef RTL_GENERIC_TABLE 02809 #undef PRTL_GENERIC_TABLE 02810 02811 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE 02812 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE 02813 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE 02814 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE 02815 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE 02816 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE 02817 #define RTL_GENERIC_TABLE RTL_AVL_TABLE 02818 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE 02819 02820 #endif /* RTL_USE_AVL_TABLES */ 02821 02822 #define RTL_HASH_ALLOCATED_HEADER 0x00000001 02823 02824 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY { 02825 LIST_ENTRY Linkage; 02826 ULONG_PTR Signature; 02827 } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY; 02828 02829 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT { 02830 PLIST_ENTRY ChainHead; 02831 PLIST_ENTRY PrevLinkage; 02832 ULONG_PTR Signature; 02833 } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT; 02834 02835 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR { 02836 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry; 02837 PLIST_ENTRY ChainHead; 02838 ULONG BucketIndex; 02839 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR; 02840 02841 typedef struct _RTL_DYNAMIC_HASH_TABLE { 02842 ULONG Flags; 02843 ULONG Shift; 02844 ULONG TableSize; 02845 ULONG Pivot; 02846 ULONG DivisorMask; 02847 ULONG NumEntries; 02848 ULONG NonEmptyBuckets; 02849 ULONG NumEnumerators; 02850 PVOID Directory; 02851 } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE; 02852 02853 typedef struct _OSVERSIONINFOA { 02854 ULONG dwOSVersionInfoSize; 02855 ULONG dwMajorVersion; 02856 ULONG dwMinorVersion; 02857 ULONG dwBuildNumber; 02858 ULONG dwPlatformId; 02859 CHAR szCSDVersion[128]; 02860 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; 02861 02862 typedef struct _OSVERSIONINFOW { 02863 ULONG dwOSVersionInfoSize; 02864 ULONG dwMajorVersion; 02865 ULONG dwMinorVersion; 02866 ULONG dwBuildNumber; 02867 ULONG dwPlatformId; 02868 WCHAR szCSDVersion[128]; 02869 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; 02870 02871 typedef struct _OSVERSIONINFOEXA { 02872 ULONG dwOSVersionInfoSize; 02873 ULONG dwMajorVersion; 02874 ULONG dwMinorVersion; 02875 ULONG dwBuildNumber; 02876 ULONG dwPlatformId; 02877 CHAR szCSDVersion[128]; 02878 USHORT wServicePackMajor; 02879 USHORT wServicePackMinor; 02880 USHORT wSuiteMask; 02881 UCHAR wProductType; 02882 UCHAR wReserved; 02883 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; 02884 02885 typedef struct _OSVERSIONINFOEXW { 02886 ULONG dwOSVersionInfoSize; 02887 ULONG dwMajorVersion; 02888 ULONG dwMinorVersion; 02889 ULONG dwBuildNumber; 02890 ULONG dwPlatformId; 02891 WCHAR szCSDVersion[128]; 02892 USHORT wServicePackMajor; 02893 USHORT wServicePackMinor; 02894 USHORT wSuiteMask; 02895 UCHAR wProductType; 02896 UCHAR wReserved; 02897 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; 02898 02899 #ifdef UNICODE 02900 typedef OSVERSIONINFOEXW OSVERSIONINFOEX; 02901 typedef POSVERSIONINFOEXW POSVERSIONINFOEX; 02902 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; 02903 typedef OSVERSIONINFOW OSVERSIONINFO; 02904 typedef POSVERSIONINFOW POSVERSIONINFO; 02905 typedef LPOSVERSIONINFOW LPOSVERSIONINFO; 02906 #else 02907 typedef OSVERSIONINFOEXA OSVERSIONINFOEX; 02908 typedef POSVERSIONINFOEXA POSVERSIONINFOEX; 02909 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; 02910 typedef OSVERSIONINFOA OSVERSIONINFO; 02911 typedef POSVERSIONINFOA POSVERSIONINFO; 02912 typedef LPOSVERSIONINFOA LPOSVERSIONINFO; 02913 #endif /* UNICODE */ 02914 02915 #define HASH_ENTRY_KEY(x) ((x)->Signature) 02916 02917 /****************************************************************************** 02918 * Security Manager Types * 02919 ******************************************************************************/ 02920 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6 02921 02922 typedef enum _WELL_KNOWN_SID_TYPE { 02923 WinNullSid = 0, 02924 WinWorldSid = 1, 02925 WinLocalSid = 2, 02926 WinCreatorOwnerSid = 3, 02927 WinCreatorGroupSid = 4, 02928 WinCreatorOwnerServerSid = 5, 02929 WinCreatorGroupServerSid = 6, 02930 WinNtAuthoritySid = 7, 02931 WinDialupSid = 8, 02932 WinNetworkSid = 9, 02933 WinBatchSid = 10, 02934 WinInteractiveSid = 11, 02935 WinServiceSid = 12, 02936 WinAnonymousSid = 13, 02937 WinProxySid = 14, 02938 WinEnterpriseControllersSid = 15, 02939 WinSelfSid = 16, 02940 WinAuthenticatedUserSid = 17, 02941 WinRestrictedCodeSid = 18, 02942 WinTerminalServerSid = 19, 02943 WinRemoteLogonIdSid = 20, 02944 WinLogonIdsSid = 21, 02945 WinLocalSystemSid = 22, 02946 WinLocalServiceSid = 23, 02947 WinNetworkServiceSid = 24, 02948 WinBuiltinDomainSid = 25, 02949 WinBuiltinAdministratorsSid = 26, 02950 WinBuiltinUsersSid = 27, 02951 WinBuiltinGuestsSid = 28, 02952 WinBuiltinPowerUsersSid = 29, 02953 WinBuiltinAccountOperatorsSid = 30, 02954 WinBuiltinSystemOperatorsSid = 31, 02955 WinBuiltinPrintOperatorsSid = 32, 02956 WinBuiltinBackupOperatorsSid = 33, 02957 WinBuiltinReplicatorSid = 34, 02958 WinBuiltinPreWindows2000CompatibleAccessSid = 35, 02959 WinBuiltinRemoteDesktopUsersSid = 36, 02960 WinBuiltinNetworkConfigurationOperatorsSid = 37, 02961 WinAccountAdministratorSid = 38, 02962 WinAccountGuestSid = 39, 02963 WinAccountKrbtgtSid = 40, 02964 WinAccountDomainAdminsSid = 41, 02965 WinAccountDomainUsersSid = 42, 02966 WinAccountDomainGuestsSid = 43, 02967 WinAccountComputersSid = 44, 02968 WinAccountControllersSid = 45, 02969 WinAccountCertAdminsSid = 46, 02970 WinAccountSchemaAdminsSid = 47, 02971 WinAccountEnterpriseAdminsSid = 48, 02972 WinAccountPolicyAdminsSid = 49, 02973 WinAccountRasAndIasServersSid = 50, 02974 WinNTLMAuthenticationSid = 51, 02975 WinDigestAuthenticationSid = 52, 02976 WinSChannelAuthenticationSid = 53, 02977 WinThisOrganizationSid = 54, 02978 WinOtherOrganizationSid = 55, 02979 WinBuiltinIncomingForestTrustBuildersSid = 56, 02980 WinBuiltinPerfMonitoringUsersSid = 57, 02981 WinBuiltinPerfLoggingUsersSid = 58, 02982 WinBuiltinAuthorizationAccessSid = 59, 02983 WinBuiltinTerminalServerLicenseServersSid = 60, 02984 WinBuiltinDCOMUsersSid = 61, 02985 WinBuiltinIUsersSid = 62, 02986 WinIUserSid = 63, 02987 WinBuiltinCryptoOperatorsSid = 64, 02988 WinUntrustedLabelSid = 65, 02989 WinLowLabelSid = 66, 02990 WinMediumLabelSid = 67, 02991 WinHighLabelSid = 68, 02992 WinSystemLabelSid = 69, 02993 WinWriteRestrictedCodeSid = 70, 02994 WinCreatorOwnerRightsSid = 71, 02995 WinCacheablePrincipalsGroupSid = 72, 02996 WinNonCacheablePrincipalsGroupSid = 73, 02997 WinEnterpriseReadonlyControllersSid = 74, 02998 WinAccountReadonlyControllersSid = 75, 02999 WinBuiltinEventLogReadersGroup = 76, 03000 WinNewEnterpriseReadonlyControllersSid = 77, 03001 WinBuiltinCertSvcDComAccessGroup = 78, 03002 WinMediumPlusLabelSid = 79, 03003 WinLocalLogonSid = 80, 03004 WinConsoleLogonSid = 81, 03005 WinThisOrganizationCertificateSid = 82, 03006 } WELL_KNOWN_SID_TYPE; 03007 03008 #if defined(_M_IX86) 03009 03010 #define PAUSE_PROCESSOR YieldProcessor(); 03011 03012 #define KERNEL_STACK_SIZE 12288 03013 #define KERNEL_LARGE_STACK_SIZE 61440 03014 #define KERNEL_LARGE_STACK_COMMIT 12288 03015 03016 #define SIZE_OF_80387_REGISTERS 80 03017 03018 #if !defined(RC_INVOKED) 03019 03020 #define CONTEXT_i386 0x10000 03021 #define CONTEXT_i486 0x10000 03022 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L) 03023 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L) 03024 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L) 03025 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L) 03026 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L) 03027 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L) 03028 03029 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) 03030 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ 03031 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ 03032 CONTEXT_EXTENDED_REGISTERS) 03033 03034 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L) 03035 03036 #endif /* !defined(RC_INVOKED) */ 03037 03038 typedef struct _FLOATING_SAVE_AREA { 03039 ULONG ControlWord; 03040 ULONG StatusWord; 03041 ULONG TagWord; 03042 ULONG ErrorOffset; 03043 ULONG ErrorSelector; 03044 ULONG DataOffset; 03045 ULONG DataSelector; 03046 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; 03047 ULONG Cr0NpxState; 03048 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; 03049 03050 #include "pshpack4.h" 03051 typedef struct _CONTEXT { 03052 ULONG ContextFlags; 03053 ULONG Dr0; 03054 ULONG Dr1; 03055 ULONG Dr2; 03056 ULONG Dr3; 03057 ULONG Dr6; 03058 ULONG Dr7; 03059 FLOATING_SAVE_AREA FloatSave; 03060 ULONG SegGs; 03061 ULONG SegFs; 03062 ULONG SegEs; 03063 ULONG SegDs; 03064 ULONG Edi; 03065 ULONG Esi; 03066 ULONG Ebx; 03067 ULONG Edx; 03068 ULONG Ecx; 03069 ULONG Eax; 03070 ULONG Ebp; 03071 ULONG Eip; 03072 ULONG SegCs; 03073 ULONG EFlags; 03074 ULONG Esp; 03075 ULONG SegSs; 03076 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; 03077 } CONTEXT; 03078 #include "poppack.h" 03079 03080 #define KeGetPcr() PCR 03081 03082 #define PCR_MINOR_VERSION 1 03083 #define PCR_MAJOR_VERSION 1 03084 03085 typedef struct _KPCR { 03086 union { 03087 NT_TIB NtTib; 03088 struct { 03089 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; 03090 PVOID Used_StackBase; 03091 PVOID Spare2; 03092 PVOID TssCopy; 03093 ULONG ContextSwitches; 03094 KAFFINITY SetMemberCopy; 03095 PVOID Used_Self; 03096 }; 03097 }; 03098 struct _KPCR *SelfPcr; 03099 struct _KPRCB *Prcb; 03100 KIRQL Irql; 03101 ULONG IRR; 03102 ULONG IrrActive; 03103 ULONG IDR; 03104 PVOID KdVersionBlock; 03105 struct _KIDTENTRY *IDT; 03106 struct _KGDTENTRY *GDT; 03107 struct _KTSS *TSS; 03108 USHORT MajorVersion; 03109 USHORT MinorVersion; 03110 KAFFINITY SetMember; 03111 ULONG StallScaleFactor; 03112 UCHAR SpareUnused; 03113 UCHAR Number; 03114 UCHAR Spare0; 03115 UCHAR SecondLevelCacheAssociativity; 03116 ULONG VdmAlert; 03117 ULONG KernelReserved[14]; 03118 ULONG SecondLevelCacheSize; 03119 ULONG HalReserved[16]; 03120 } KPCR, *PKPCR; 03121 03122 FORCEINLINE 03123 ULONG 03124 KeGetCurrentProcessorNumber(VOID) 03125 { 03126 return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); 03127 } 03128 03129 03130 03131 03132 03133 03134 extern NTKERNELAPI PVOID MmHighestUserAddress; 03135 extern NTKERNELAPI PVOID MmSystemRangeStart; 03136 extern NTKERNELAPI ULONG MmUserProbeAddress; 03137 03138 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress 03139 #define MM_SYSTEM_RANGE_START MmSystemRangeStart 03140 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_) 03141 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_ 03142 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_; 03143 #else 03144 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress 03145 #endif 03146 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 03147 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START 03148 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF 03149 #if !defined (_X86PAE_) 03150 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000 03151 #else 03152 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 03153 #endif 03154 03155 #elif defined(_M_AMD64) 03156 03157 #define PAUSE_PROCESSOR YieldProcessor(); 03158 03159 #define KERNEL_STACK_SIZE 0x6000 03160 #define KERNEL_LARGE_STACK_SIZE 0x12000 03161 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE 03162 03163 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000 03164 03165 #define EXCEPTION_READ_FAULT 0 03166 #define EXCEPTION_WRITE_FAULT 1 03167 #define EXCEPTION_EXECUTE_FAULT 8 03168 03169 #if !defined(RC_INVOKED) 03170 03171 #define CONTEXT_AMD64 0x100000 03172 03173 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) 03174 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) 03175 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) 03176 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) 03177 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) 03178 03179 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) 03180 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) 03181 03182 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L) 03183 03184 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000 03185 #define CONTEXT_SERVICE_ACTIVE 0x10000000 03186 #define CONTEXT_EXCEPTION_REQUEST 0x40000000 03187 #define CONTEXT_EXCEPTION_REPORTING 0x80000000 03188 03189 #endif /* !defined(RC_INVOKED) */ 03190 03191 #define INITIAL_MXCSR 0x1f80 03192 #define INITIAL_FPCSR 0x027f 03193 03194 typedef struct DECLSPEC_ALIGN(16) _CONTEXT { 03195 ULONG64 P1Home; 03196 ULONG64 P2Home; 03197 ULONG64 P3Home; 03198 ULONG64 P4Home; 03199 ULONG64 P5Home; 03200 ULONG64 P6Home; 03201 ULONG ContextFlags; 03202 ULONG MxCsr; 03203 USHORT SegCs; 03204 USHORT SegDs; 03205 USHORT SegEs; 03206 USHORT SegFs; 03207 USHORT SegGs; 03208 USHORT SegSs; 03209 ULONG EFlags; 03210 ULONG64 Dr0; 03211 ULONG64 Dr1; 03212 ULONG64 Dr2; 03213 ULONG64 Dr3; 03214 ULONG64 Dr6; 03215 ULONG64 Dr7; 03216 ULONG64 Rax; 03217 ULONG64 Rcx; 03218 ULONG64 Rdx; 03219 ULONG64 Rbx; 03220 ULONG64 Rsp; 03221 ULONG64 Rbp; 03222 ULONG64 Rsi; 03223 ULONG64 Rdi; 03224 ULONG64 R8; 03225 ULONG64 R9; 03226 ULONG64 R10; 03227 ULONG64 R11; 03228 ULONG64 R12; 03229 ULONG64 R13; 03230 ULONG64 R14; 03231 ULONG64 R15; 03232 ULONG64 Rip; 03233 union { 03234 XMM_SAVE_AREA32 FltSave; 03235 struct { 03236 M128A Header[2]; 03237 M128A Legacy[8]; 03238 M128A Xmm0; 03239 M128A Xmm1; 03240 M128A Xmm2; 03241 M128A Xmm3; 03242 M128A Xmm4; 03243 M128A Xmm5; 03244 M128A Xmm6; 03245 M128A Xmm7; 03246 M128A Xmm8; 03247 M128A Xmm9; 03248 M128A Xmm10; 03249 M128A Xmm11; 03250 M128A Xmm12; 03251 M128A Xmm13; 03252 M128A Xmm14; 03253 M128A Xmm15; 03254 } DUMMYSTRUCTNAME; 03255 } DUMMYUNIONNAME; 03256 M128A VectorRegister[26]; 03257 ULONG64 VectorControl; 03258 ULONG64 DebugControl; 03259 ULONG64 LastBranchToRip; 03260 ULONG64 LastBranchFromRip; 03261 ULONG64 LastExceptionToRip; 03262 ULONG64 LastExceptionFromRip; 03263 } CONTEXT; 03264 03265 #define PCR_MINOR_VERSION 1 03266 #define PCR_MAJOR_VERSION 1 03267 03268 typedef struct _KPCR 03269 { 03270 _ANONYMOUS_UNION union 03271 { 03272 NT_TIB NtTib; 03273 _ANONYMOUS_STRUCT struct 03274 { 03275 union _KGDTENTRY64 *GdtBase; 03276 struct _KTSS64 *TssBase; 03277 ULONG64 UserRsp; 03278 struct _KPCR *Self; 03279 struct _KPRCB *CurrentPrcb; 03280 PKSPIN_LOCK_QUEUE LockArray; 03281 PVOID Used_Self; 03282 }; 03283 }; 03284 union _KIDTENTRY64 *IdtBase; 03285 ULONG64 Unused[2]; 03286 KIRQL Irql; 03287 UCHAR SecondLevelCacheAssociativity; 03288 UCHAR ObsoleteNumber; 03289 UCHAR Fill0; 03290 ULONG Unused0[3]; 03291 USHORT MajorVersion; 03292 USHORT MinorVersion; 03293 ULONG StallScaleFactor; 03294 PVOID Unused1[3]; 03295 ULONG KernelReserved[15]; 03296 ULONG SecondLevelCacheSize; 03297 ULONG HalReserved[16]; 03298 ULONG Unused2; 03299 PVOID KdVersionBlock; 03300 PVOID Unused3; 03301 ULONG PcrAlign1[24]; 03302 } KPCR, *PKPCR; 03303 03304 FORCEINLINE 03305 PKPCR 03306 KeGetPcr(VOID) 03307 { 03308 return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self)); 03309 } 03310 03311 FORCEINLINE 03312 ULONG 03313 KeGetCurrentProcessorNumber(VOID) 03314 { 03315 return (ULONG)__readgsword(0x184); 03316 } 03317 03318 03319 #define PTI_SHIFT 12L 03320 #define PDI_SHIFT 21L 03321 #define PPI_SHIFT 30L 03322 #define PXI_SHIFT 39L 03323 #define PTE_PER_PAGE 512 03324 #define PDE_PER_PAGE 512 03325 #define PPE_PER_PAGE 512 03326 #define PXE_PER_PAGE 512 03327 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) 03328 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) 03329 #define PPI_MASK (PPE_PER_PAGE - 1) 03330 #define PXI_MASK (PXE_PER_PAGE - 1) 03331 03332 #define PXE_BASE 0xFFFFF6FB7DBED000ULL 03333 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL 03334 #define PPE_BASE 0xFFFFF6FB7DA00000ULL 03335 #define PDE_BASE 0xFFFFF6FB40000000ULL 03336 #define PTE_BASE 0xFFFFF68000000000ULL 03337 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL 03338 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL 03339 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL 03340 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL 03341 03342 extern NTKERNELAPI PVOID MmHighestUserAddress; 03343 extern NTKERNELAPI PVOID MmSystemRangeStart; 03344 extern NTKERNELAPI ULONG64 MmUserProbeAddress; 03345 03346 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress 03347 #define MM_SYSTEM_RANGE_START MmSystemRangeStart 03348 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress 03349 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 03350 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL 03351 03352 03353 #elif defined(_M_IA64) 03354 03355 #elif defined(_M_PPC) 03356 03357 03358 #elif defined(_M_MIPS) 03359 03360 #elif defined(_M_ARM) 03361 #else 03362 #error Unknown Architecture 03363 #endif 03364 03365 /****************************************************************************** 03366 * Executive Functions * 03367 ******************************************************************************/ 03368 03369 static __inline PVOID 03370 ExAllocateFromZone( 03371 IN PZONE_HEADER Zone) 03372 { 03373 if (Zone->FreeList.Next) 03374 Zone->FreeList.Next = Zone->FreeList.Next->Next; 03375 return (PVOID) Zone->FreeList.Next; 03376 } 03377 03378 static __inline PVOID 03379 ExFreeToZone( 03380 IN PZONE_HEADER Zone, 03381 IN PVOID Block) 03382 { 03383 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; 03384 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); 03385 return ((PSINGLE_LIST_ENTRY) Block)->Next; 03386 } 03387 03388 /* 03389 * PVOID 03390 * ExInterlockedAllocateFromZone( 03391 * IN PZONE_HEADER Zone, 03392 * IN PKSPIN_LOCK Lock) 03393 */ 03394 #define ExInterlockedAllocateFromZone(Zone, Lock) \ 03395 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) 03396 03397 /* PVOID 03398 * ExInterlockedFreeToZone( 03399 * IN PZONE_HEADER Zone, 03400 * IN PVOID Block, 03401 * IN PKSPIN_LOCK Lock); 03402 */ 03403 #define ExInterlockedFreeToZone(Zone, Block, Lock) \ 03404 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock) 03405 03406 /* 03407 * BOOLEAN 03408 * ExIsFullZone( 03409 * IN PZONE_HEADER Zone) 03410 */ 03411 #define ExIsFullZone(Zone) \ 03412 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) 03413 03414 /* BOOLEAN 03415 * ExIsObjectInFirstZoneSegment( 03416 * IN PZONE_HEADER Zone, 03417 * IN PVOID Object); 03418 */ 03419 #define ExIsObjectInFirstZoneSegment(Zone,Object) \ 03420 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ 03421 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ 03422 (Zone)->TotalSegmentSize)) ) 03423 03424 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite 03425 #define ExAcquireResourceShared ExAcquireResourceSharedLite 03426 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite 03427 #define ExDeleteResource ExDeleteResourceLite 03428 #define ExInitializeResource ExInitializeResourceLite 03429 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite 03430 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite 03431 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite 03432 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite 03433 03434 #ifndef _M_IX86 03435 #define RESULT_ZERO 0 03436 #define RESULT_NEGATIVE 1 03437 #define RESULT_POSITIVE 2 03438 #endif 03439 03440 typedef enum _INTERLOCKED_RESULT { 03441 ResultNegative = RESULT_NEGATIVE, 03442 ResultZero = RESULT_ZERO, 03443 ResultPositive = RESULT_POSITIVE 03444 } INTERLOCKED_RESULT; 03445 03446 #ifdef _X86_ 03447 03448 NTKERNELAPI 03449 INTERLOCKED_RESULT 03450 FASTCALL 03451 Exfi386InterlockedIncrementLong( 03452 _Inout_ _Interlocked_operand_ LONG volatile *Addend); 03453 03454 NTKERNELAPI 03455 INTERLOCKED_RESULT 03456 FASTCALL 03457 Exfi386InterlockedDecrementLong( 03458 _Inout_ _Interlocked_operand_ PLONG Addend); 03459 03460 NTKERNELAPI 03461 ULONG 03462 FASTCALL 03463 Exfi386InterlockedExchangeUlong( 03464 _Inout_ _Interlocked_operand_ PULONG Target, 03465 _In_ ULONG Value); 03466 03467 #endif 03468 03469 03470 #if (NTDDI_VERSION >= NTDDI_WIN2K) 03471 NTKERNELAPI 03472 NTSTATUS 03473 NTAPI 03474 ExExtendZone( 03475 _Inout_ PZONE_HEADER Zone, 03476 _Inout_ PVOID Segment, 03477 _In_ ULONG SegmentSize); 03478 03479 NTKERNELAPI 03480 NTSTATUS 03481 NTAPI 03482 ExInitializeZone( 03483 _Out_ PZONE_HEADER Zone, 03484 _In_ ULONG BlockSize, 03485 _Inout_ PVOID InitialSegment, 03486 _In_ ULONG InitialSegmentSize); 03487 03488 _IRQL_requires_max_(DISPATCH_LEVEL) 03489 NTKERNELAPI 03490 NTSTATUS 03491 NTAPI 03492 ExInterlockedExtendZone( 03493 _Inout_ PZONE_HEADER Zone, 03494 _Inout_ PVOID Segment, 03495 _In_ ULONG SegmentSize, 03496 _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); 03497 03498 _IRQL_requires_max_(PASSIVE_LEVEL) 03499 NTKERNELAPI 03500 NTSTATUS 03501 NTAPI 03502 ExUuidCreate( 03503 _Out_ UUID *Uuid); 03504 03505 _IRQL_requires_max_(PASSIVE_LEVEL) 03506 NTKERNELAPI 03507 DECLSPEC_NORETURN 03508 VOID 03509 NTAPI 03510 ExRaiseAccessViolation(VOID); 03511 03512 _IRQL_requires_max_(PASSIVE_LEVEL) 03513 NTKERNELAPI 03514 DECLSPEC_NORETURN 03515 VOID 03516 NTAPI 03517 ExRaiseDatatypeMisalignment(VOID); 03518 03519 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 03520 03521 03522 /* Hardware Abstraction Layer Functions */ 03523 03524 #if (NTDDI_VERSION >= NTDDI_WIN2K) 03525 03526 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) 03527 03528 /* Nothing here */ 03529 03530 #else /* USE_DMA_MACROS ... */ 03531 03532 //DECLSPEC_DEPRECATED_DDK 03533 NTHALAPI 03534 VOID 03535 NTAPI 03536 IoFreeAdapterChannel( 03537 _In_ PADAPTER_OBJECT AdapterObject); 03538 03539 //DECLSPEC_DEPRECATED_DDK 03540 NTHALAPI 03541 BOOLEAN 03542 NTAPI 03543 IoFlushAdapterBuffers( 03544 _In_ PADAPTER_OBJECT AdapterObject, 03545 _In_ PMDL Mdl, 03546 _In_ PVOID MapRegisterBase, 03547 _In_ PVOID CurrentVa, 03548 _In_ ULONG Length, 03549 _In_ BOOLEAN WriteToDevice); 03550 03551 //DECLSPEC_DEPRECATED_DDK 03552 NTHALAPI 03553 VOID 03554 NTAPI 03555 IoFreeMapRegisters( 03556 _In_ PADAPTER_OBJECT AdapterObject, 03557 _In_ PVOID MapRegisterBase, 03558 _In_ ULONG NumberOfMapRegisters); 03559 03560 //DECLSPEC_DEPRECATED_DDK 03561 NTHALAPI 03562 PVOID 03563 NTAPI 03564 HalAllocateCommonBuffer( 03565 _In_ PADAPTER_OBJECT AdapterObject, 03566 _In_ ULONG Length, 03567 _Out_ PPHYSICAL_ADDRESS LogicalAddress, 03568 _In_ BOOLEAN CacheEnabled); 03569 03570 //DECLSPEC_DEPRECATED_DDK 03571 NTHALAPI 03572 VOID 03573 NTAPI 03574 HalFreeCommonBuffer( 03575 _In_ PADAPTER_OBJECT AdapterObject, 03576 _In_ ULONG Length, 03577 _In_ PHYSICAL_ADDRESS LogicalAddress, 03578 _In_ PVOID VirtualAddress, 03579 _In_ BOOLEAN CacheEnabled); 03580 03581 //DECLSPEC_DEPRECATED_DDK 03582 NTHALAPI 03583 ULONG 03584 NTAPI 03585 HalReadDmaCounter( 03586 _In_ PADAPTER_OBJECT AdapterObject); 03587 03588 NTHALAPI 03589 NTSTATUS 03590 NTAPI 03591 HalAllocateAdapterChannel( 03592 _In_ PADAPTER_OBJECT AdapterObject, 03593 _In_ PWAIT_CONTEXT_BLOCK Wcb, 03594 _In_ ULONG NumberOfMapRegisters, 03595 _In_ PDRIVER_CONTROL ExecutionRoutine); 03596 03597 #endif /* USE_DMA_MACROS ... */ 03598 03599 #if !defined(NO_LEGACY_DRIVERS) 03600 NTHALAPI 03601 NTSTATUS 03602 NTAPI 03603 HalAssignSlotResources( 03604 _In_ PUNICODE_STRING RegistryPath, 03605 _In_opt_ PUNICODE_STRING DriverClassName, 03606 _In_ PDRIVER_OBJECT DriverObject, 03607 _In_ PDEVICE_OBJECT DeviceObject, 03608 _In_ INTERFACE_TYPE BusType, 03609 _In_ ULONG BusNumber, 03610 _In_ ULONG SlotNumber, 03611 _Inout_ PCM_RESOURCE_LIST *AllocatedResources); 03612 03613 _IRQL_requires_max_(PASSIVE_LEVEL) 03614 NTHALAPI 03615 ULONG 03616 NTAPI 03617 HalGetInterruptVector( 03618 _In_ INTERFACE_TYPE InterfaceType, 03619 _In_ ULONG BusNumber, 03620 _In_ ULONG BusInterruptLevel, 03621 _In_ ULONG BusInterruptVector, 03622 _Out_ PKIRQL Irql, 03623 _Out_ PKAFFINITY Affinity); 03624 03625 NTHALAPI 03626 ULONG 03627 NTAPI 03628 HalSetBusData( 03629 _In_ BUS_DATA_TYPE BusDataType, 03630 _In_ ULONG BusNumber, 03631 _In_ ULONG SlotNumber, 03632 _In_reads_bytes_(Length) PVOID Buffer, 03633 _In_ ULONG Length); 03634 03635 NTHALAPI 03636 ULONG 03637 NTAPI 03638 HalGetBusData( 03639 _In_ BUS_DATA_TYPE BusDataType, 03640 _In_ ULONG BusNumber, 03641 _In_ ULONG SlotNumber, 03642 _Out_writes_bytes_(Length) PVOID Buffer, 03643 _In_ ULONG Length); 03644 03645 NTHALAPI 03646 BOOLEAN 03647 NTAPI 03648 HalMakeBeep( 03649 _In_ ULONG Frequency); 03650 #endif /* !defined(NO_LEGACY_DRIVERS) */ 03651 03652 _IRQL_requires_max_(PASSIVE_LEVEL) 03653 NTHALAPI 03654 PADAPTER_OBJECT 03655 NTAPI 03656 HalGetAdapter( 03657 _In_ PDEVICE_DESCRIPTION DeviceDescription, 03658 _Out_ PULONG NumberOfMapRegisters); 03659 03660 VOID 03661 NTAPI 03662 HalPutDmaAdapter( 03663 _In_ PADAPTER_OBJECT DmaAdapter); 03664 03665 NTHALAPI 03666 VOID 03667 NTAPI 03668 HalAcquireDisplayOwnership( 03669 _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); 03670 03671 NTHALAPI 03672 ULONG 03673 NTAPI 03674 HalGetBusDataByOffset( 03675 _In_ BUS_DATA_TYPE BusDataType, 03676 _In_ ULONG BusNumber, 03677 _In_ ULONG SlotNumber, 03678 _Out_writes_bytes_(Length) PVOID Buffer, 03679 _In_ ULONG Offset, 03680 _In_ ULONG Length); 03681 03682 NTHALAPI 03683 ULONG 03684 NTAPI 03685 HalSetBusDataByOffset( 03686 _In_ BUS_DATA_TYPE BusDataType, 03687 _In_ ULONG BusNumber, 03688 _In_ ULONG SlotNumber, 03689 _In_reads_bytes_(Length) PVOID Buffer, 03690 _In_ ULONG Offset, 03691 _In_ ULONG Length); 03692 03693 NTHALAPI 03694 BOOLEAN 03695 NTAPI 03696 HalTranslateBusAddress( 03697 _In_ INTERFACE_TYPE InterfaceType, 03698 _In_ ULONG BusNumber, 03699 _In_ PHYSICAL_ADDRESS BusAddress, 03700 _Inout_ PULONG AddressSpace, 03701 _Out_ PPHYSICAL_ADDRESS TranslatedAddress); 03702 03703 NTHALAPI 03704 PVOID 03705 NTAPI 03706 HalAllocateCrashDumpRegisters( 03707 _In_ PADAPTER_OBJECT AdapterObject, 03708 _Inout_ PULONG NumberOfMapRegisters); 03709 03710 NTSTATUS 03711 NTAPI 03712 HalGetScatterGatherList( 03713 _In_ PADAPTER_OBJECT DmaAdapter, 03714 _In_ PDEVICE_OBJECT DeviceObject, 03715 _In_ PMDL Mdl, 03716 _In_ PVOID CurrentVa, 03717 _In_ ULONG Length, 03718 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, 03719 _In_ PVOID Context, 03720 _In_ BOOLEAN WriteToDevice); 03721 03722 VOID 03723 NTAPI 03724 HalPutScatterGatherList( 03725 _In_ PADAPTER_OBJECT DmaAdapter, 03726 _In_ PSCATTER_GATHER_LIST ScatterGather, 03727 _In_ BOOLEAN WriteToDevice); 03728 03729 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 03730 03731 #if (NTDDI_VERSION >= NTDDI_WINXP) 03732 _IRQL_requires_max_(PASSIVE_LEVEL) 03733 NTKERNELAPI 03734 VOID 03735 FASTCALL 03736 HalExamineMBR( 03737 _In_ PDEVICE_OBJECT DeviceObject, 03738 _In_ ULONG SectorSize, 03739 _In_ ULONG MBRTypeIdentifier, 03740 _Out_ PVOID *Buffer); 03741 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 03742 03743 #if (NTDDI_VERSION >= NTDDI_WIN7) 03744 03745 NTSTATUS 03746 NTAPI 03747 HalAllocateHardwareCounters( 03748 _In_reads_(GroupCount) PGROUP_AFFINITY GroupAffinty, 03749 _In_ ULONG GroupCount, 03750 _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, 03751 _Out_ PHANDLE CounterSetHandle); 03752 03753 NTSTATUS 03754 NTAPI 03755 HalFreeHardwareCounters( 03756 _In_ HANDLE CounterSetHandle); 03757 03758 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 03759 03760 #if defined(_IA64_) 03761 #if (NTDDI_VERSION >= NTDDI_WIN2K) 03762 NTHALAPI 03763 ULONG 03764 NTAPI 03765 HalGetDmaAlignmentRequirement(VOID); 03766 #endif 03767 #endif /* defined(_IA64_) */ 03768 03769 #if defined(_M_IX86) || defined(_M_AMD64) 03770 #define HalGetDmaAlignmentRequirement() 1L 03771 #endif 03772 03773 #if (NTDDI_VERSION >= NTDDI_WIN7) 03774 03775 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR; 03776 typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; 03777 03778 NTHALAPI 03779 VOID 03780 NTAPI 03781 HalBugCheckSystem( 03782 _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, 03783 _In_ PWHEA_ERROR_RECORD ErrorRecord); 03784 03785 #else 03786 03787 typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; 03788 03789 NTHALAPI 03790 VOID 03791 NTAPI 03792 HalBugCheckSystem( 03793 _In_ PWHEA_ERROR_RECORD ErrorRecord); 03794 03795 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 03796 03797 /****************************************************************************** 03798 * I/O Manager Functions * 03799 ******************************************************************************/ 03800 03801 /* 03802 * VOID IoAssignArcName( 03803 * IN PUNICODE_STRING ArcName, 03804 * IN PUNICODE_STRING DeviceName); 03805 */ 03806 #define IoAssignArcName(_ArcName, _DeviceName) ( \ 03807 IoCreateSymbolicLink((_ArcName), (_DeviceName))) 03808 03809 /* 03810 * VOID 03811 * IoDeassignArcName( 03812 * IN PUNICODE_STRING ArcName) 03813 */ 03814 #define IoDeassignArcName IoDeleteSymbolicLink 03815 03816 FORCEINLINE 03817 VOID 03818 NTAPI 03819 IoInitializeDriverCreateContext( 03820 PIO_DRIVER_CREATE_CONTEXT DriverContext) 03821 { 03822 RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT)); 03823 DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT); 03824 } 03825 03826 #if (NTDDI_VERSION >= NTDDI_WIN2K) 03827 03828 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) 03829 _IRQL_requires_max_(DISPATCH_LEVEL) 03830 _IRQL_requires_min_(DISPATCH_LEVEL) 03831 NTKERNELAPI 03832 NTSTATUS 03833 NTAPI 03834 IoAllocateAdapterChannel( 03835 _In_ PADAPTER_OBJECT AdapterObject, 03836 _In_ PDEVICE_OBJECT DeviceObject, 03837 _In_ ULONG NumberOfMapRegisters, 03838 _In_ PDRIVER_CONTROL ExecutionRoutine, 03839 _In_ PVOID Context); 03840 #endif 03841 03842 #if !defined(DMA_MACROS_DEFINED) 03843 //DECLSPEC_DEPRECATED_DDK 03844 NTHALAPI 03845 PHYSICAL_ADDRESS 03846 NTAPI 03847 IoMapTransfer( 03848 _In_ PADAPTER_OBJECT AdapterObject, 03849 _In_ PMDL Mdl, 03850 _In_ PVOID MapRegisterBase, 03851 _In_ PVOID CurrentVa, 03852 _Inout_ PULONG Length, 03853 _In_ BOOLEAN WriteToDevice); 03854 #endif 03855 03856 _IRQL_requires_max_(DISPATCH_LEVEL) 03857 _IRQL_requires_min_(DISPATCH_LEVEL) 03858 NTKERNELAPI 03859 VOID 03860 NTAPI 03861 IoAllocateController( 03862 _In_ PCONTROLLER_OBJECT ControllerObject, 03863 _In_ PDEVICE_OBJECT DeviceObject, 03864 _In_ PDRIVER_CONTROL ExecutionRoutine, 03865 _In_opt_ PVOID Context); 03866 03867 _IRQL_requires_max_(PASSIVE_LEVEL) 03868 NTKERNELAPI 03869 PCONTROLLER_OBJECT 03870 NTAPI 03871 IoCreateController( 03872 _In_ ULONG Size); 03873 03874 _IRQL_requires_max_(PASSIVE_LEVEL) 03875 NTKERNELAPI 03876 VOID 03877 NTAPI 03878 IoDeleteController( 03879 _In_ PCONTROLLER_OBJECT ControllerObject); 03880 03881 _IRQL_requires_max_(DISPATCH_LEVEL) 03882 _IRQL_requires_min_(DISPATCH_LEVEL) 03883 NTKERNELAPI 03884 VOID 03885 NTAPI 03886 IoFreeController( 03887 _In_ PCONTROLLER_OBJECT ControllerObject); 03888 03889 _IRQL_requires_max_(PASSIVE_LEVEL) 03890 NTKERNELAPI 03891 PCONFIGURATION_INFORMATION 03892 NTAPI 03893 IoGetConfigurationInformation(VOID); 03894 03895 _IRQL_requires_max_(PASSIVE_LEVEL) 03896 NTKERNELAPI 03897 PDEVICE_OBJECT 03898 NTAPI 03899 IoGetDeviceToVerify( 03900 _In_ PETHREAD Thread); 03901 03902 NTKERNELAPI 03903 VOID 03904 NTAPI 03905 IoCancelFileOpen( 03906 _In_ PDEVICE_OBJECT DeviceObject, 03907 _In_ PFILE_OBJECT FileObject); 03908 03909 _IRQL_requires_max_(PASSIVE_LEVEL) 03910 NTKERNELAPI 03911 PGENERIC_MAPPING 03912 NTAPI 03913 IoGetFileObjectGenericMapping(VOID); 03914 03915 _IRQL_requires_max_(DISPATCH_LEVEL) 03916 NTKERNELAPI 03917 PIRP 03918 NTAPI 03919 IoMakeAssociatedIrp( 03920 _In_ PIRP Irp, 03921 _In_ CCHAR StackSize); 03922 03923 NTKERNELAPI 03924 NTSTATUS 03925 NTAPI 03926 IoQueryDeviceDescription( 03927 _In_opt_ PINTERFACE_TYPE BusType, 03928 _In_opt_ PULONG BusNumber, 03929 _In_opt_ PCONFIGURATION_TYPE ControllerType, 03930 _In_opt_ PULONG ControllerNumber, 03931 _In_opt_ PCONFIGURATION_TYPE PeripheralType, 03932 _In_opt_ PULONG PeripheralNumber, 03933 _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, 03934 _Inout_opt_ PVOID Context); 03935 03936 _IRQL_requires_max_(APC_LEVEL) 03937 NTKERNELAPI 03938 VOID 03939 NTAPI 03940 IoRaiseHardError( 03941 _In_ PIRP Irp, 03942 _In_opt_ PVPB Vpb, 03943 _In_ PDEVICE_OBJECT RealDeviceObject); 03944 03945 _IRQL_requires_max_(APC_LEVEL) 03946 NTKERNELAPI 03947 BOOLEAN 03948 NTAPI 03949 IoRaiseInformationalHardError( 03950 _In_ NTSTATUS ErrorStatus, 03951 _In_opt_ PUNICODE_STRING String, 03952 _In_opt_ PKTHREAD Thread); 03953 03954 _IRQL_requires_max_(PASSIVE_LEVEL) 03955 NTKERNELAPI 03956 VOID 03957 NTAPI 03958 IoRegisterBootDriverReinitialization( 03959 _In_ PDRIVER_OBJECT DriverObject, 03960 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, 03961 _In_opt_ PVOID Context); 03962 03963 _IRQL_requires_max_(PASSIVE_LEVEL) 03964 NTKERNELAPI 03965 VOID 03966 NTAPI 03967 IoRegisterDriverReinitialization( 03968 _In_ PDRIVER_OBJECT DriverObject, 03969 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, 03970 _In_opt_ PVOID Context); 03971 03972 NTKERNELAPI 03973 NTSTATUS 03974 NTAPI 03975 IoAttachDeviceByPointer( 03976 _In_ PDEVICE_OBJECT SourceDevice, 03977 _In_ PDEVICE_OBJECT TargetDevice); 03978 03979 _IRQL_requires_max_(PASSIVE_LEVEL) 03980 _Must_inspect_result_ 03981 NTKERNELAPI 03982 NTSTATUS 03983 NTAPI 03984 IoReportDetectedDevice( 03985 _In_ PDRIVER_OBJECT DriverObject, 03986 _In_ INTERFACE_TYPE LegacyBusType, 03987 _In_ ULONG BusNumber, 03988 _In_ ULONG SlotNumber, 03989 _In_opt_ PCM_RESOURCE_LIST ResourceList, 03990 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements, 03991 _In_ BOOLEAN ResourceAssigned, 03992 _Inout_ PDEVICE_OBJECT *DeviceObject); 03993 03994 NTKERNELAPI 03995 NTSTATUS 03996 NTAPI 03997 IoReportResourceForDetection( 03998 _In_ PDRIVER_OBJECT DriverObject, 03999 _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, 04000 _In_opt_ ULONG DriverListSize, 04001 _In_opt_ PDEVICE_OBJECT DeviceObject, 04002 _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, 04003 _In_opt_ ULONG DeviceListSize, 04004 _Out_ PBOOLEAN ConflictDetected); 04005 04006 NTKERNELAPI 04007 NTSTATUS 04008 NTAPI 04009 IoReportResourceUsage( 04010 _In_opt_ PUNICODE_STRING DriverClassName, 04011 _In_ PDRIVER_OBJECT DriverObject, 04012 _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, 04013 _In_opt_ ULONG DriverListSize, 04014 _In_opt_ PDEVICE_OBJECT DeviceObject, 04015 _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, 04016 _In_opt_ ULONG DeviceListSize, 04017 _In_ BOOLEAN OverrideConflict, 04018 _Out_ PBOOLEAN ConflictDetected); 04019 04020 _IRQL_requires_max_(DISPATCH_LEVEL) 04021 NTKERNELAPI 04022 VOID 04023 NTAPI 04024 IoSetHardErrorOrVerifyDevice( 04025 _In_ PIRP Irp, 04026 _In_ PDEVICE_OBJECT DeviceObject); 04027 04028 NTKERNELAPI 04029 NTSTATUS 04030 NTAPI 04031 IoAssignResources( 04032 _In_ PUNICODE_STRING RegistryPath, 04033 _In_opt_ PUNICODE_STRING DriverClassName, 04034 _In_ PDRIVER_OBJECT DriverObject, 04035 _In_opt_ PDEVICE_OBJECT DeviceObject, 04036 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources, 04037 _Inout_ PCM_RESOURCE_LIST *AllocatedResources); 04038 04039 _IRQL_requires_max_(DISPATCH_LEVEL) 04040 NTKERNELAPI 04041 BOOLEAN 04042 NTAPI 04043 IoSetThreadHardErrorMode( 04044 _In_ BOOLEAN EnableHardErrors); 04045 04046 04047 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 04048 04049 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) 04050 04051 NTKERNELAPI 04052 BOOLEAN 04053 NTAPI 04054 IoIsFileOriginRemote( 04055 _In_ PFILE_OBJECT FileObject); 04056 04057 NTKERNELAPI 04058 NTSTATUS 04059 NTAPI 04060 IoSetFileOrigin( 04061 _In_ PFILE_OBJECT FileObject, 04062 _In_ BOOLEAN Remote); 04063 04064 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */ 04065 04066 #if (NTDDI_VERSION >= NTDDI_WINXP) 04067 04068 _IRQL_requires_max_(PASSIVE_LEVEL) 04069 NTKERNELAPI 04070 NTSTATUS 04071 FASTCALL 04072 IoReadPartitionTable( 04073 _In_ PDEVICE_OBJECT DeviceObject, 04074 _In_ ULONG SectorSize, 04075 _In_ BOOLEAN ReturnRecognizedPartitions, 04076 _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); 04077 04078 _IRQL_requires_max_(PASSIVE_LEVEL) 04079 NTKERNELAPI 04080 NTSTATUS 04081 FASTCALL 04082 IoSetPartitionInformation( 04083 _In_ PDEVICE_OBJECT DeviceObject, 04084 _In_ ULONG SectorSize, 04085 _In_ ULONG PartitionNumber, 04086 _In_ ULONG PartitionType); 04087 04088 _IRQL_requires_max_(PASSIVE_LEVEL) 04089 NTKERNELAPI 04090 NTSTATUS 04091 FASTCALL 04092 IoWritePartitionTable( 04093 _In_ PDEVICE_OBJECT DeviceObject, 04094 _In_ ULONG SectorSize, 04095 _In_ ULONG SectorsPerTrack, 04096 _In_ ULONG NumberOfHeads, 04097 _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); 04098 04099 NTKERNELAPI 04100 NTSTATUS 04101 NTAPI 04102 IoCreateDisk( 04103 _In_ PDEVICE_OBJECT DeviceObject, 04104 _In_opt_ struct _CREATE_DISK* Disk); 04105 04106 NTKERNELAPI 04107 NTSTATUS 04108 NTAPI 04109 IoReadDiskSignature( 04110 _In_ PDEVICE_OBJECT DeviceObject, 04111 _In_ ULONG BytesPerSector, 04112 _Out_ PDISK_SIGNATURE Signature); 04113 04114 _IRQL_requires_max_(PASSIVE_LEVEL) 04115 NTKERNELAPI 04116 NTSTATUS 04117 NTAPI 04118 IoReadPartitionTableEx( 04119 _In_ PDEVICE_OBJECT DeviceObject, 04120 _Out_ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); 04121 04122 _IRQL_requires_max_(PASSIVE_LEVEL) 04123 NTKERNELAPI 04124 NTSTATUS 04125 NTAPI 04126 IoSetPartitionInformationEx( 04127 _In_ PDEVICE_OBJECT DeviceObject, 04128 _In_ ULONG PartitionNumber, 04129 _In_ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); 04130 04131 NTKERNELAPI 04132 NTSTATUS 04133 NTAPI 04134 IoSetSystemPartition( 04135 _In_ PUNICODE_STRING VolumeNameString); 04136 04137 NTKERNELAPI 04138 NTSTATUS 04139 NTAPI 04140 IoVerifyPartitionTable( 04141 _In_ PDEVICE_OBJECT DeviceObject, 04142 _In_ BOOLEAN FixErrors); 04143 04144 NTKERNELAPI 04145 NTSTATUS 04146 NTAPI 04147 IoVolumeDeviceToDosName( 04148 _In_ PVOID VolumeDeviceObject, 04149 _Out_ _When_(return==0, 04150 _At_(DosName->Buffer, __drv_allocatesMem(Mem))) 04151 PUNICODE_STRING DosName); 04152 04153 _IRQL_requires_max_(PASSIVE_LEVEL) 04154 NTKERNELAPI 04155 NTSTATUS 04156 NTAPI 04157 IoWritePartitionTableEx( 04158 _In_ PDEVICE_OBJECT DeviceObject, 04159 _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX, PartitionEntry[0]))) 04160 struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); 04161 04162 NTKERNELAPI 04163 NTSTATUS 04164 NTAPI 04165 IoCreateFileSpecifyDeviceObjectHint( 04166 _Out_ PHANDLE FileHandle, 04167 _In_ ACCESS_MASK DesiredAccess, 04168 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 04169 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 04170 _In_opt_ PLARGE_INTEGER AllocationSize, 04171 _In_ ULONG FileAttributes, 04172 _In_ ULONG ShareAccess, 04173 _In_ ULONG Disposition, 04174 _In_ ULONG CreateOptions, 04175 _In_opt_ PVOID EaBuffer, 04176 _In_ ULONG EaLength, 04177 _In_ CREATE_FILE_TYPE CreateFileType, 04178 _In_opt_ PVOID InternalParameters, 04179 _In_ ULONG Options, 04180 _In_opt_ PVOID DeviceObject); 04181 04182 NTKERNELAPI 04183 NTSTATUS 04184 NTAPI 04185 IoAttachDeviceToDeviceStackSafe( 04186 _In_ PDEVICE_OBJECT SourceDevice, 04187 _In_ PDEVICE_OBJECT TargetDevice, 04188 _Outptr_ PDEVICE_OBJECT *AttachedToDeviceObject); 04189 04190 04191 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 04192 04193 #if (NTDDI_VERSION >= NTDDI_WS03) 04194 NTKERNELAPI 04195 IO_PAGING_PRIORITY 04196 FASTCALL 04197 IoGetPagingIoPriority( 04198 _In_ PIRP Irp); 04199 04200 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 04201 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 04202 04203 BOOLEAN 04204 NTAPI 04205 IoTranslateBusAddress( 04206 _In_ INTERFACE_TYPE InterfaceType, 04207 _In_ ULONG BusNumber, 04208 _In_ PHYSICAL_ADDRESS BusAddress, 04209 _Inout_ PULONG AddressSpace, 04210 _Out_ PPHYSICAL_ADDRESS TranslatedAddress); 04211 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 04212 04213 #if (NTDDI_VERSION >= NTDDI_VISTA) 04214 04215 struct _DISK_GEOMETRY_EX; 04216 04217 NTKERNELAPI 04218 NTSTATUS 04219 NTAPI 04220 IoUpdateDiskGeometry( 04221 _In_ PDEVICE_OBJECT DeviceObject, 04222 _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry, 04223 _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry); 04224 04225 PTXN_PARAMETER_BLOCK 04226 NTAPI 04227 IoGetTransactionParameterBlock( 04228 _In_ PFILE_OBJECT FileObject); 04229 04230 NTKERNELAPI 04231 NTSTATUS 04232 NTAPI 04233 IoCreateFileEx( 04234 _Out_ PHANDLE FileHandle, 04235 _In_ ACCESS_MASK DesiredAccess, 04236 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 04237 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 04238 _In_opt_ PLARGE_INTEGER AllocationSize, 04239 _In_ ULONG FileAttributes, 04240 _In_ ULONG ShareAccess, 04241 _In_ ULONG Disposition, 04242 _In_ ULONG CreateOptions, 04243 _In_opt_ PVOID EaBuffer, 04244 _In_ ULONG EaLength, 04245 _In_ CREATE_FILE_TYPE CreateFileType, 04246 _In_opt_ PVOID InternalParameters, 04247 _In_ ULONG Options, 04248 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext); 04249 04250 NTSTATUS 04251 NTAPI 04252 IoSetIrpExtraCreateParameter( 04253 _Inout_ PIRP Irp, 04254 _In_ struct _ECP_LIST *ExtraCreateParameter); 04255 04256 VOID 04257 NTAPI 04258 IoClearIrpExtraCreateParameter( 04259 _Inout_ PIRP Irp); 04260 04261 NTSTATUS 04262 NTAPI 04263 IoGetIrpExtraCreateParameter( 04264 _In_ PIRP Irp, 04265 _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter); 04266 04267 BOOLEAN 04268 NTAPI 04269 IoIsFileObjectIgnoringSharing( 04270 _In_ PFILE_OBJECT FileObject); 04271 04272 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 04273 04274 #if (NTDDI_VERSION >= NTDDI_WIN7) 04275 04276 NTSTATUS 04277 NTAPI 04278 IoSetFileObjectIgnoreSharing( 04279 _In_ PFILE_OBJECT FileObject); 04280 04281 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 04282 04283 /****************************************************************************** 04284 * Kernel Debugger Functions * 04285 ******************************************************************************/ 04286 NTSYSAPI 04287 ULONG 04288 NTAPI 04289 DbgPrompt( 04290 _In_z_ PCCH Prompt, 04291 _Out_writes_bytes_(MaximumResponseLength) PCH Response, 04292 _In_ ULONG MaximumResponseLength); 04293 04294 /****************************************************************************** 04295 * Kernel Functions * 04296 ******************************************************************************/ 04297 04298 _IRQL_requires_min_(PASSIVE_LEVEL) 04299 _IRQL_requires_max_(DISPATCH_LEVEL) 04300 NTKERNELAPI 04301 VOID 04302 FASTCALL 04303 KeInvalidateRangeAllCaches( 04304 _In_ PVOID BaseAddress, 04305 _In_ ULONG Length); 04306 04307 #if (NTDDI_VERSION >= NTDDI_WIN2K) 04308 04309 NTKERNELAPI 04310 VOID 04311 NTAPI 04312 KeSetImportanceDpc( 04313 _Inout_ PRKDPC Dpc, 04314 _In_ KDPC_IMPORTANCE Importance); 04315 04316 _IRQL_requires_max_(DISPATCH_LEVEL) 04317 NTKERNELAPI 04318 LONG 04319 NTAPI 04320 KePulseEvent( 04321 _Inout_ PRKEVENT Event, 04322 _In_ KPRIORITY Increment, 04323 _In_ BOOLEAN Wait); 04324 04325 _IRQL_requires_min_(PASSIVE_LEVEL) 04326 _IRQL_requires_max_(DISPATCH_LEVEL) 04327 NTKERNELAPI 04328 LONG 04329 NTAPI 04330 KeSetBasePriorityThread( 04331 _Inout_ PRKTHREAD Thread, 04332 _In_ LONG Increment); 04333 04334 _Acquires_lock_(_Global_critical_region_) 04335 _IRQL_requires_max_(APC_LEVEL) 04336 NTKERNELAPI 04337 VOID 04338 NTAPI 04339 KeEnterCriticalRegion(VOID); 04340 04341 _Releases_lock_(_Global_critical_region_) 04342 _IRQL_requires_max_(APC_LEVEL) 04343 NTKERNELAPI 04344 VOID 04345 NTAPI 04346 KeLeaveCriticalRegion(VOID); 04347 04348 NTKERNELAPI 04349 DECLSPEC_NORETURN 04350 VOID 04351 NTAPI 04352 KeBugCheck( 04353 _In_ ULONG BugCheckCode); 04354 #if defined(SINGLE_GROUP_LEGACY_API) 04355 04356 04357 NTKERNELAPI 04358 VOID 04359 NTAPI 04360 KeSetTargetProcessorDpc( 04361 _Inout_ PRKDPC Dpc, 04362 _In_ CCHAR Number); 04363 04364 NTKERNELAPI 04365 KAFFINITY 04366 NTAPI 04367 KeQueryActiveProcessors(VOID); 04368 #endif /* defined(SINGLE_GROUP_LEGACY_API) */ 04369 04370 04371 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 04372 04373 #if (NTDDI_VERSION >= NTDDI_WINXP) 04374 04375 _IRQL_requires_min_(PASSIVE_LEVEL) 04376 _IRQL_requires_max_(DISPATCH_LEVEL) 04377 NTKERNELAPI 04378 BOOLEAN 04379 NTAPI 04380 KeAreApcsDisabled(VOID); 04381 04382 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 04383 04384 #if (NTDDI_VERSION >= NTDDI_WS03) 04385 04386 04387 NTKERNELAPI 04388 BOOLEAN 04389 NTAPI 04390 KeInvalidateAllCaches(VOID); 04391 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 04392 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 04393 04394 _Must_inspect_result_ 04395 _IRQL_requires_max_(APC_LEVEL) 04396 NTKERNELAPI 04397 NTSTATUS 04398 NTAPI 04399 KeExpandKernelStackAndCallout( 04400 _In_ PEXPAND_STACK_CALLOUT Callout, 04401 _In_opt_ PVOID Parameter, 04402 _In_ SIZE_T Size); 04403 04404 _Acquires_lock_(_Global_critical_region_) 04405 _IRQL_requires_max_(APC_LEVEL) 04406 NTKERNELAPI 04407 VOID 04408 NTAPI 04409 KeEnterGuardedRegion(VOID); 04410 04411 _Releases_lock_(_Global_critical_region_) 04412 _IRQL_requires_max_(APC_LEVEL) 04413 NTKERNELAPI 04414 VOID 04415 NTAPI 04416 KeLeaveGuardedRegion(VOID); 04417 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 04418 04419 #if (NTDDI_VERSION >= NTDDI_VISTA) 04420 #if defined(SINGLE_GROUP_LEGACY_API) 04421 04422 NTKERNELAPI 04423 ULONG 04424 NTAPI 04425 KeQueryActiveProcessorCount( 04426 _Out_opt_ PKAFFINITY ActiveProcessors); 04427 04428 NTKERNELAPI 04429 ULONG 04430 NTAPI 04431 KeQueryMaximumProcessorCount(VOID); 04432 #endif /* SINGLE_GROUP_LEGACY_API */ 04433 04434 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 04435 04436 #if (NTDDI_VERSION >= NTDDI_WIN7) 04437 04438 NTKERNELAPI 04439 ULONG 04440 NTAPI 04441 KeQueryActiveProcessorCountEx( 04442 _In_ USHORT GroupNumber); 04443 04444 NTKERNELAPI 04445 ULONG 04446 NTAPI 04447 KeQueryMaximumProcessorCountEx( 04448 _In_ USHORT GroupNumber); 04449 04450 NTKERNELAPI 04451 USHORT 04452 NTAPI 04453 KeQueryActiveGroupCount(VOID); 04454 04455 NTKERNELAPI 04456 USHORT 04457 NTAPI 04458 KeQueryMaximumGroupCount(VOID); 04459 04460 NTKERNELAPI 04461 KAFFINITY 04462 NTAPI 04463 KeQueryGroupAffinity( 04464 _In_ USHORT GroupNumber); 04465 04466 NTKERNELAPI 04467 ULONG 04468 NTAPI 04469 KeGetCurrentProcessorNumberEx( 04470 _Out_opt_ PPROCESSOR_NUMBER ProcNumber); 04471 04472 NTKERNELAPI 04473 VOID 04474 NTAPI 04475 KeQueryNodeActiveAffinity( 04476 _In_ USHORT NodeNumber, 04477 _Out_opt_ PGROUP_AFFINITY Affinity, 04478 _Out_opt_ PUSHORT Count); 04479 04480 NTKERNELAPI 04481 USHORT 04482 NTAPI 04483 KeQueryNodeMaximumProcessorCount( 04484 _In_ USHORT NodeNumber); 04485 04486 NTKERNELAPI 04487 USHORT 04488 NTAPI 04489 KeQueryHighestNodeNumber(VOID); 04490 04491 NTKERNELAPI 04492 USHORT 04493 NTAPI 04494 KeGetCurrentNodeNumber(VOID); 04495 04496 _IRQL_requires_max_(DISPATCH_LEVEL) 04497 NTKERNELAPI 04498 NTSTATUS 04499 NTAPI 04500 KeQueryLogicalProcessorRelationship( 04501 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber, 04502 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, 04503 _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, 04504 _Inout_ PULONG Length); 04505 04506 _IRQL_requires_max_(APC_LEVEL) 04507 NTKERNELAPI 04508 NTSTATUS 04509 NTAPI 04510 KeSetHardwareCounterConfiguration( 04511 _In_reads_(Count) PHARDWARE_COUNTER CounterArray, 04512 _In_ ULONG Count); 04513 04514 _IRQL_requires_max_(APC_LEVEL) 04515 NTKERNELAPI 04516 NTSTATUS 04517 NTAPI 04518 KeQueryHardwareCounterConfiguration( 04519 _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray, 04520 _In_ ULONG MaximumCount, 04521 _Out_ PULONG Count); 04522 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 04523 /****************************************************************************** 04524 * Memory manager Functions * 04525 ******************************************************************************/ 04526 04527 #if (NTDDI_VERSION >= NTDDI_WIN2K) 04528 04529 _IRQL_requires_max_ (PASSIVE_LEVEL) 04530 NTKERNELAPI 04531 PPHYSICAL_MEMORY_RANGE 04532 NTAPI 04533 MmGetPhysicalMemoryRanges(VOID); 04534 04535 NTKERNELAPI 04536 PHYSICAL_ADDRESS 04537 NTAPI 04538 MmGetPhysicalAddress( 04539 _In_ PVOID BaseAddress); 04540 04541 NTKERNELAPI 04542 BOOLEAN 04543 NTAPI 04544 MmIsNonPagedSystemAddressValid( 04545 _In_ PVOID VirtualAddress); 04546 04547 _Must_inspect_result_ 04548 _IRQL_requires_max_(APC_LEVEL) 04549 _Out_writes_bytes_opt_(NumberOfBytes) 04550 NTKERNELAPI 04551 PVOID 04552 NTAPI 04553 MmAllocateNonCachedMemory( 04554 _In_ SIZE_T NumberOfBytes); 04555 04556 _IRQL_requires_max_(APC_LEVEL) 04557 NTKERNELAPI 04558 VOID 04559 NTAPI 04560 MmFreeNonCachedMemory( 04561 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, 04562 _In_ SIZE_T NumberOfBytes); 04563 04564 NTKERNELAPI 04565 PVOID 04566 NTAPI 04567 MmGetVirtualForPhysical( 04568 _In_ PHYSICAL_ADDRESS PhysicalAddress); 04569 04570 _Must_inspect_result_ 04571 _IRQL_requires_max_(APC_LEVEL) 04572 NTKERNELAPI 04573 NTSTATUS 04574 NTAPI 04575 MmMapUserAddressesToPage( 04576 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, 04577 _In_ SIZE_T NumberOfBytes, 04578 _In_ PVOID PageAddress); 04579 04580 _Must_inspect_result_ 04581 _IRQL_requires_max_(APC_LEVEL) 04582 _Out_writes_bytes_opt_(NumberOfBytes) 04583 NTKERNELAPI 04584 PVOID 04585 NTAPI 04586 MmMapVideoDisplay( 04587 _In_ PHYSICAL_ADDRESS PhysicalAddress, 04588 _In_ SIZE_T NumberOfBytes, 04589 _In_ MEMORY_CACHING_TYPE CacheType); 04590 04591 _Must_inspect_result_ 04592 _IRQL_requires_max_(APC_LEVEL) 04593 NTKERNELAPI 04594 NTSTATUS 04595 NTAPI 04596 MmMapViewInSessionSpace( 04597 _In_ PVOID Section, 04598 _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, 04599 _Inout_ PSIZE_T ViewSize); 04600 04601 _Must_inspect_result_ 04602 _IRQL_requires_max_(APC_LEVEL) 04603 NTKERNELAPI 04604 NTSTATUS 04605 NTAPI 04606 MmMapViewInSystemSpace( 04607 _In_ PVOID Section, 04608 _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, 04609 _Inout_ PSIZE_T ViewSize); 04610 04611 _IRQL_requires_max_(DISPATCH_LEVEL) 04612 NTKERNELAPI 04613 BOOLEAN 04614 NTAPI 04615 MmIsAddressValid( 04616 _In_ PVOID VirtualAddress); 04617 04618 NTKERNELAPI 04619 BOOLEAN 04620 NTAPI 04621 MmIsThisAnNtAsSystem(VOID); 04622 04623 _IRQL_requires_max_(APC_LEVEL) 04624 NTKERNELAPI 04625 VOID 04626 NTAPI 04627 MmLockPagableSectionByHandle( 04628 _In_ PVOID ImageSectionHandle); 04629 04630 _IRQL_requires_max_(APC_LEVEL) 04631 NTKERNELAPI 04632 NTSTATUS 04633 NTAPI 04634 MmUnmapViewInSessionSpace( 04635 _In_ PVOID MappedBase); 04636 04637 _IRQL_requires_max_(APC_LEVEL) 04638 NTKERNELAPI 04639 NTSTATUS 04640 NTAPI 04641 MmUnmapViewInSystemSpace( 04642 _In_ PVOID MappedBase); 04643 04644 _IRQL_requires_max_(APC_LEVEL) 04645 NTKERNELAPI 04646 VOID 04647 NTAPI 04648 MmUnsecureVirtualMemory( 04649 _In_ HANDLE SecureHandle); 04650 04651 _IRQL_requires_max_ (PASSIVE_LEVEL) 04652 NTKERNELAPI 04653 NTSTATUS 04654 NTAPI 04655 MmRemovePhysicalMemory( 04656 _In_ PPHYSICAL_ADDRESS StartAddress, 04657 _Inout_ PLARGE_INTEGER NumberOfBytes); 04658 04659 _Must_inspect_result_ 04660 _IRQL_requires_max_(APC_LEVEL) 04661 NTKERNELAPI 04662 HANDLE 04663 NTAPI 04664 MmSecureVirtualMemory( 04665 __in_data_source(USER_MODE) _In_reads_bytes_ (Size) PVOID Address, 04666 _In_ __in_data_source(USER_MODE) SIZE_T Size, 04667 _In_ ULONG ProbeMode); 04668 04669 _IRQL_requires_max_(APC_LEVEL) 04670 NTKERNELAPI 04671 VOID 04672 NTAPI 04673 MmUnmapVideoDisplay( 04674 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, 04675 _In_ SIZE_T NumberOfBytes); 04676 04677 _IRQL_requires_max_ (PASSIVE_LEVEL) 04678 NTKERNELAPI 04679 NTSTATUS 04680 NTAPI 04681 MmAddPhysicalMemory( 04682 _In_ PPHYSICAL_ADDRESS StartAddress, 04683 _Inout_ PLARGE_INTEGER NumberOfBytes); 04684 04685 _Must_inspect_result_ 04686 _IRQL_requires_max_(DISPATCH_LEVEL) 04687 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) 04688 NTKERNELAPI 04689 PVOID 04690 NTAPI 04691 MmAllocateContiguousMemory( 04692 _In_ SIZE_T NumberOfBytes, 04693 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress); 04694 04695 _Must_inspect_result_ 04696 _IRQL_requires_max_(DISPATCH_LEVEL) 04697 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) 04698 NTKERNELAPI 04699 PVOID 04700 NTAPI 04701 MmAllocateContiguousMemorySpecifyCache( 04702 _In_ SIZE_T NumberOfBytes, 04703 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, 04704 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, 04705 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, 04706 _In_ MEMORY_CACHING_TYPE CacheType); 04707 04708 _Must_inspect_result_ 04709 _IRQL_requires_max_(DISPATCH_LEVEL) 04710 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) 04711 NTKERNELAPI 04712 PVOID 04713 NTAPI 04714 MmAllocateContiguousMemorySpecifyCacheNode( 04715 _In_ SIZE_T NumberOfBytes, 04716 _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, 04717 _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, 04718 _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, 04719 _In_ MEMORY_CACHING_TYPE CacheType, 04720 _In_ NODE_REQUIREMENT PreferredNode); 04721 04722 _IRQL_requires_max_(DISPATCH_LEVEL) 04723 NTKERNELAPI 04724 VOID 04725 NTAPI 04726 MmFreeContiguousMemory( 04727 _In_ PVOID BaseAddress); 04728 04729 _IRQL_requires_max_(DISPATCH_LEVEL) 04730 NTKERNELAPI 04731 VOID 04732 NTAPI 04733 MmFreeContiguousMemorySpecifyCache( 04734 _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, 04735 _In_ SIZE_T NumberOfBytes, 04736 _In_ MEMORY_CACHING_TYPE CacheType); 04737 04738 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 04739 04740 04741 04742 #if (NTDDI_VERSION >= NTDDI_WS03) 04743 04744 _Must_inspect_result_ 04745 _IRQL_requires_max_(PASSIVE_LEVEL) 04746 NTKERNELAPI 04747 NTSTATUS 04748 NTAPI 04749 MmCreateMirror(VOID); 04750 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 04751 04752 #if (NTDDI_VERSION >= NTDDI_VISTA) 04753 _Must_inspect_result_ 04754 _IRQL_requires_max_(APC_LEVEL) 04755 NTSTATUS 04756 NTAPI 04757 MmRotatePhysicalView( 04758 _In_ PVOID VirtualAddress, 04759 _Inout_ PSIZE_T NumberOfBytes, 04760 _In_opt_ PMDLX NewMdl, 04761 _In_ MM_ROTATE_DIRECTION Direction, 04762 _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, 04763 _In_opt_ PVOID Context); 04764 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 04765 04766 /****************************************************************************** 04767 * Process Manager Functions * 04768 ******************************************************************************/ 04769 04770 __kernel_entry 04771 NTSYSCALLAPI 04772 NTSTATUS 04773 NTAPI 04774 NtOpenProcess( 04775 _Out_ PHANDLE ProcessHandle, 04776 _In_ ACCESS_MASK DesiredAccess, 04777 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 04778 _In_opt_ PCLIENT_ID ClientId); 04779 04780 NTSYSCALLAPI 04781 NTSTATUS 04782 NTAPI 04783 NtQueryInformationProcess( 04784 IN HANDLE ProcessHandle, 04785 IN PROCESSINFOCLASS ProcessInformationClass, 04786 OUT PVOID ProcessInformation OPTIONAL, 04787 IN ULONG ProcessInformationLength, 04788 OUT PULONG ReturnLength OPTIONAL); 04789 04790 #if (NTDDI_VERSION >= NTDDI_WIN2K) 04791 04792 04793 _IRQL_requires_max_(PASSIVE_LEVEL) 04794 NTKERNELAPI 04795 NTSTATUS 04796 NTAPI 04797 PsSetCreateProcessNotifyRoutine( 04798 _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, 04799 _In_ BOOLEAN Remove); 04800 04801 _IRQL_requires_max_(PASSIVE_LEVEL) 04802 NTKERNELAPI 04803 NTSTATUS 04804 NTAPI 04805 PsSetCreateThreadNotifyRoutine( 04806 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 04807 04808 _IRQL_requires_max_(PASSIVE_LEVEL) 04809 NTKERNELAPI 04810 NTSTATUS 04811 NTAPI 04812 PsSetLoadImageNotifyRoutine( 04813 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 04814 04815 NTKERNELAPI 04816 HANDLE 04817 NTAPI 04818 PsGetCurrentProcessId(VOID); 04819 04820 _IRQL_requires_max_(DISPATCH_LEVEL) 04821 NTKERNELAPI 04822 HANDLE 04823 NTAPI 04824 PsGetCurrentThreadId(VOID); 04825 04826 NTKERNELAPI 04827 BOOLEAN 04828 NTAPI 04829 PsGetVersion( 04830 OUT PULONG MajorVersion OPTIONAL, 04831 OUT PULONG MinorVersion OPTIONAL, 04832 OUT PULONG BuildNumber OPTIONAL, 04833 OUT PUNICODE_STRING CSDVersion OPTIONAL); 04834 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 04835 #if (NTDDI_VERSION >= NTDDI_WINXP) 04836 04837 _IRQL_requires_max_(DISPATCH_LEVEL) 04838 NTKERNELAPI 04839 HANDLE 04840 NTAPI 04841 PsGetProcessId( 04842 _In_ PEPROCESS Process); 04843 04844 _IRQL_requires_max_(DISPATCH_LEVEL) 04845 NTKERNELAPI 04846 HANDLE 04847 NTAPI 04848 PsGetThreadId( 04849 _In_ PETHREAD Thread); 04850 04851 NTKERNELAPI 04852 NTSTATUS 04853 NTAPI 04854 PsRemoveCreateThreadNotifyRoutine( 04855 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 04856 04857 _IRQL_requires_max_(PASSIVE_LEVEL) 04858 NTKERNELAPI 04859 NTSTATUS 04860 NTAPI 04861 PsRemoveLoadImageNotifyRoutine( 04862 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 04863 04864 _IRQL_requires_max_(DISPATCH_LEVEL) 04865 NTKERNELAPI 04866 LONGLONG 04867 NTAPI 04868 PsGetProcessCreateTimeQuadPart( 04869 _In_ PEPROCESS Process); 04870 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 04871 04872 #if (NTDDI_VERSION >= NTDDI_WS03) 04873 NTKERNELAPI 04874 HANDLE 04875 NTAPI 04876 PsGetThreadProcessId( 04877 IN PETHREAD Thread); 04878 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 04879 04880 #if (NTDDI_VERSION >= NTDDI_VISTA) 04881 04882 NTKERNELAPI 04883 BOOLEAN 04884 NTAPI 04885 PsSetCurrentThreadPrefetching( 04886 IN BOOLEAN Prefetching); 04887 04888 NTKERNELAPI 04889 BOOLEAN 04890 NTAPI 04891 PsIsCurrentThreadPrefetching(VOID); 04892 04893 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 04894 04895 #if (NTDDI_VERSION >= NTDDI_VISTASP1) 04896 NTKERNELAPI 04897 NTSTATUS 04898 NTAPI 04899 PsSetCreateProcessNotifyRoutineEx( 04900 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine, 04901 IN BOOLEAN Remove); 04902 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ 04903 /****************************************************************************** 04904 * Runtime Library Functions * 04905 ******************************************************************************/ 04906 04907 04908 #if (NTDDI_VERSION >= NTDDI_WIN2K) 04909 04910 04911 #ifndef RTL_USE_AVL_TABLES 04912 04913 NTSYSAPI 04914 VOID 04915 NTAPI 04916 RtlInitializeGenericTable( 04917 _Out_ PRTL_GENERIC_TABLE Table, 04918 _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, 04919 _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, 04920 _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine, 04921 _In_opt_ PVOID TableContext); 04922 04923 NTSYSAPI 04924 PVOID 04925 NTAPI 04926 RtlInsertElementGenericTable( 04927 _In_ PRTL_GENERIC_TABLE Table, 04928 _In_reads_bytes_(BufferSize) PVOID Buffer, 04929 _In_ CLONG BufferSize, 04930 _Out_opt_ PBOOLEAN NewElement); 04931 04932 NTSYSAPI 04933 PVOID 04934 NTAPI 04935 RtlInsertElementGenericTableFull( 04936 _In_ PRTL_GENERIC_TABLE Table, 04937 _In_reads_bytes_(BufferSize) PVOID Buffer, 04938 _In_ CLONG BufferSize, 04939 _Out_opt_ PBOOLEAN NewElement, 04940 _In_ PVOID NodeOrParent, 04941 _In_ TABLE_SEARCH_RESULT SearchResult); 04942 04943 NTSYSAPI 04944 BOOLEAN 04945 NTAPI 04946 RtlDeleteElementGenericTable( 04947 _In_ PRTL_GENERIC_TABLE Table, 04948 _In_ PVOID Buffer); 04949 04950 _Must_inspect_result_ 04951 NTSYSAPI 04952 PVOID 04953 NTAPI 04954 RtlLookupElementGenericTable( 04955 _In_ PRTL_GENERIC_TABLE Table, 04956 _In_ PVOID Buffer); 04957 04958 NTSYSAPI 04959 PVOID 04960 NTAPI 04961 RtlLookupElementGenericTableFull( 04962 _In_ PRTL_GENERIC_TABLE Table, 04963 _In_ PVOID Buffer, 04964 _Out_ PVOID *NodeOrParent, 04965 _Out_ TABLE_SEARCH_RESULT *SearchResult); 04966 04967 _Must_inspect_result_ 04968 NTSYSAPI 04969 PVOID 04970 NTAPI 04971 RtlEnumerateGenericTable( 04972 _In_ PRTL_GENERIC_TABLE Table, 04973 _In_ BOOLEAN Restart); 04974 04975 _Must_inspect_result_ 04976 NTSYSAPI 04977 PVOID 04978 NTAPI 04979 RtlEnumerateGenericTableWithoutSplaying( 04980 _In_ PRTL_GENERIC_TABLE Table, 04981 _Inout_ PVOID *RestartKey); 04982 04983 _Must_inspect_result_ 04984 NTSYSAPI 04985 PVOID 04986 NTAPI 04987 RtlGetElementGenericTable( 04988 _In_ PRTL_GENERIC_TABLE Table, 04989 _In_ ULONG I); 04990 04991 NTSYSAPI 04992 ULONG 04993 NTAPI 04994 RtlNumberGenericTableElements( 04995 _In_ PRTL_GENERIC_TABLE Table); 04996 04997 _Must_inspect_result_ 04998 NTSYSAPI 04999 BOOLEAN 05000 NTAPI 05001 RtlIsGenericTableEmpty( 05002 _In_ PRTL_GENERIC_TABLE Table); 05003 05004 #endif /* !RTL_USE_AVL_TABLES */ 05005 05006 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8 05007 05008 NTSYSAPI 05009 PRTL_SPLAY_LINKS 05010 NTAPI 05011 RtlSplay( 05012 _Inout_ PRTL_SPLAY_LINKS Links); 05013 05014 NTSYSAPI 05015 PRTL_SPLAY_LINKS 05016 NTAPI 05017 RtlDelete( 05018 _In_ PRTL_SPLAY_LINKS Links); 05019 05020 NTSYSAPI 05021 VOID 05022 NTAPI 05023 RtlDeleteNoSplay( 05024 _In_ PRTL_SPLAY_LINKS Links, 05025 _Inout_ PRTL_SPLAY_LINKS *Root); 05026 05027 _Must_inspect_result_ 05028 NTSYSAPI 05029 PRTL_SPLAY_LINKS 05030 NTAPI 05031 RtlSubtreeSuccessor( 05032 _In_ PRTL_SPLAY_LINKS Links); 05033 05034 _Must_inspect_result_ 05035 NTSYSAPI 05036 PRTL_SPLAY_LINKS 05037 NTAPI 05038 RtlSubtreePredecessor( 05039 _In_ PRTL_SPLAY_LINKS Links); 05040 05041 _Must_inspect_result_ 05042 NTSYSAPI 05043 PRTL_SPLAY_LINKS 05044 NTAPI 05045 RtlRealSuccessor( 05046 _In_ PRTL_SPLAY_LINKS Links); 05047 05048 _Must_inspect_result_ 05049 NTSYSAPI 05050 PRTL_SPLAY_LINKS 05051 NTAPI 05052 RtlRealPredecessor( 05053 _In_ PRTL_SPLAY_LINKS Links); 05054 05055 _IRQL_requires_max_(PASSIVE_LEVEL) 05056 _Must_inspect_result_ 05057 NTSYSAPI 05058 BOOLEAN 05059 NTAPI 05060 RtlPrefixUnicodeString( 05061 _In_ PCUNICODE_STRING String1, 05062 _In_ PCUNICODE_STRING String2, 05063 _In_ BOOLEAN CaseInSensitive); 05064 05065 _IRQL_requires_max_(PASSIVE_LEVEL) 05066 NTSYSAPI 05067 VOID 05068 NTAPI 05069 RtlUpperString( 05070 _Inout_ PSTRING DestinationString, 05071 _In_ const PSTRING SourceString); 05072 05073 _IRQL_requires_max_(PASSIVE_LEVEL) 05074 _When_(AllocateDestinationString, _Must_inspect_result_) 05075 NTSYSAPI 05076 NTSTATUS 05077 NTAPI 05078 RtlUpcaseUnicodeString( 05079 _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) 05080 _When_(!AllocateDestinationString, _Inout_) 05081 PUNICODE_STRING DestinationString, 05082 _In_ PCUNICODE_STRING SourceString, 05083 _In_ BOOLEAN AllocateDestinationString); 05084 05085 _IRQL_requires_max_(APC_LEVEL) 05086 NTSYSAPI 05087 VOID 05088 NTAPI 05089 RtlMapGenericMask( 05090 _Inout_ PACCESS_MASK AccessMask, 05091 _In_ PGENERIC_MAPPING GenericMapping); 05092 05093 _IRQL_requires_max_(PASSIVE_LEVEL) 05094 NTSYSAPI 05095 NTSTATUS 05096 NTAPI 05097 RtlVolumeDeviceToDosName( 05098 _In_ PVOID VolumeDeviceObject, 05099 _Out_ PUNICODE_STRING DosName); 05100 05101 NTSYSAPI 05102 NTSTATUS 05103 NTAPI 05104 RtlGetVersion( 05105 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation); 05106 05107 NTSYSAPI 05108 NTSTATUS 05109 NTAPI 05110 RtlVerifyVersionInfo( 05111 IN PRTL_OSVERSIONINFOEXW VersionInfo, 05112 IN ULONG TypeMask, 05113 IN ULONGLONG ConditionMask); 05114 05115 _IRQL_requires_max_(PASSIVE_LEVEL) 05116 _Must_inspect_result_ 05117 NTSYSAPI 05118 LONG 05119 NTAPI 05120 RtlCompareString( 05121 _In_ const PSTRING String1, 05122 _In_ const PSTRING String2, 05123 _In_ BOOLEAN CaseInSensitive); 05124 05125 NTSYSAPI 05126 VOID 05127 NTAPI 05128 RtlCopyString( 05129 _Out_ PSTRING DestinationString, 05130 _In_opt_ const PSTRING SourceString); 05131 05132 _IRQL_requires_max_(PASSIVE_LEVEL) 05133 _Must_inspect_result_ 05134 NTSYSAPI 05135 BOOLEAN 05136 NTAPI 05137 RtlEqualString( 05138 _In_ const PSTRING String1, 05139 _In_ const PSTRING String2, 05140 _In_ BOOLEAN CaseInSensitive); 05141 05142 _IRQL_requires_max_(PASSIVE_LEVEL) 05143 NTSYSAPI 05144 NTSTATUS 05145 NTAPI 05146 RtlCharToInteger( 05147 _In_z_ PCSZ String, 05148 _In_opt_ ULONG Base, 05149 _Out_ PULONG Value); 05150 05151 _IRQL_requires_max_(PASSIVE_LEVEL) 05152 NTSYSAPI 05153 CHAR 05154 NTAPI 05155 RtlUpperChar( 05156 _In_ CHAR Character); 05157 05158 NTSYSAPI 05159 ULONG 05160 NTAPI 05161 RtlWalkFrameChain( 05162 _Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT)) 05163 PVOID *Callers, 05164 _In_ ULONG Count, 05165 _In_ ULONG Flags); 05166 05167 05168 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 05169 05170 05171 #if (NTDDI_VERSION >= NTDDI_WINXP) 05172 05173 05174 05175 NTSYSAPI 05176 VOID 05177 NTAPI 05178 RtlInitializeGenericTableAvl( 05179 _Out_ PRTL_AVL_TABLE Table, 05180 _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine, 05181 _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, 05182 _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine, 05183 _In_opt_ PVOID TableContext); 05184 05185 NTSYSAPI 05186 PVOID 05187 NTAPI 05188 RtlInsertElementGenericTableAvl( 05189 _In_ PRTL_AVL_TABLE Table, 05190 _In_reads_bytes_(BufferSize) PVOID Buffer, 05191 _In_ CLONG BufferSize, 05192 _Out_opt_ PBOOLEAN NewElement); 05193 05194 NTSYSAPI 05195 PVOID 05196 NTAPI 05197 RtlInsertElementGenericTableFullAvl( 05198 _In_ PRTL_AVL_TABLE Table, 05199 _In_reads_bytes_(BufferSize) PVOID Buffer, 05200 _In_ CLONG BufferSize, 05201 _Out_opt_ PBOOLEAN NewElement, 05202 _In_ PVOID NodeOrParent, 05203 _In_ TABLE_SEARCH_RESULT SearchResult); 05204 05205 NTSYSAPI 05206 BOOLEAN 05207 NTAPI 05208 RtlDeleteElementGenericTableAvl( 05209 _In_ PRTL_AVL_TABLE Table, 05210 _In_ PVOID Buffer); 05211 05212 _Must_inspect_result_ 05213 NTSYSAPI 05214 PVOID 05215 NTAPI 05216 RtlLookupElementGenericTableAvl( 05217 _In_ PRTL_AVL_TABLE Table, 05218 _In_ PVOID Buffer); 05219 05220 NTSYSAPI 05221 PVOID 05222 NTAPI 05223 RtlLookupElementGenericTableFullAvl( 05224 _In_ PRTL_AVL_TABLE Table, 05225 _In_ PVOID Buffer, 05226 _Out_ PVOID *NodeOrParent, 05227 _Out_ TABLE_SEARCH_RESULT *SearchResult); 05228 05229 _Must_inspect_result_ 05230 NTSYSAPI 05231 PVOID 05232 NTAPI 05233 RtlEnumerateGenericTableAvl( 05234 _In_ PRTL_AVL_TABLE Table, 05235 _In_ BOOLEAN Restart); 05236 05237 _Must_inspect_result_ 05238 NTSYSAPI 05239 PVOID 05240 NTAPI 05241 RtlEnumerateGenericTableWithoutSplayingAvl( 05242 _In_ PRTL_AVL_TABLE Table, 05243 _Inout_ PVOID *RestartKey); 05244 05245 _Must_inspect_result_ 05246 NTSYSAPI 05247 PVOID 05248 NTAPI 05249 RtlLookupFirstMatchingElementGenericTableAvl( 05250 _In_ PRTL_AVL_TABLE Table, 05251 _In_ PVOID Buffer, 05252 _Out_ PVOID *RestartKey); 05253 05254 _Must_inspect_result_ 05255 NTSYSAPI 05256 PVOID 05257 NTAPI 05258 RtlEnumerateGenericTableLikeADirectory( 05259 _In_ PRTL_AVL_TABLE Table, 05260 _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction, 05261 _In_opt_ PVOID MatchData, 05262 _In_ ULONG NextFlag, 05263 _Inout_ PVOID *RestartKey, 05264 _Inout_ PULONG DeleteCount, 05265 _In_ PVOID Buffer); 05266 05267 _Must_inspect_result_ 05268 NTSYSAPI 05269 PVOID 05270 NTAPI 05271 RtlGetElementGenericTableAvl( 05272 _In_ PRTL_AVL_TABLE Table, 05273 _In_ ULONG I); 05274 05275 NTSYSAPI 05276 ULONG 05277 NTAPI 05278 RtlNumberGenericTableElementsAvl( 05279 _In_ PRTL_AVL_TABLE Table); 05280 05281 _Must_inspect_result_ 05282 NTSYSAPI 05283 BOOLEAN 05284 NTAPI 05285 RtlIsGenericTableEmptyAvl( 05286 _In_ PRTL_AVL_TABLE Table); 05287 05288 05289 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 05290 05291 05292 #if (NTDDI_VERSION >= NTDDI_VISTA) 05293 05294 05295 _IRQL_requires_max_(APC_LEVEL) 05296 NTSYSAPI 05297 VOID 05298 NTAPI 05299 RtlRunOnceInitialize( 05300 _Out_ PRTL_RUN_ONCE RunOnce); 05301 05302 _IRQL_requires_max_(APC_LEVEL) 05303 _Maybe_raises_SEH_exception_ 05304 NTSYSAPI 05305 NTSTATUS 05306 NTAPI 05307 RtlRunOnceExecuteOnce( 05308 _Inout_ PRTL_RUN_ONCE RunOnce, 05309 _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn, 05310 _Inout_opt_ PVOID Parameter, 05311 _Outptr_opt_result_maybenull_ PVOID *Context); 05312 05313 _IRQL_requires_max_(APC_LEVEL) 05314 _Must_inspect_result_ 05315 NTSYSAPI 05316 NTSTATUS 05317 NTAPI 05318 RtlRunOnceBeginInitialize( 05319 _Inout_ PRTL_RUN_ONCE RunOnce, 05320 _In_ ULONG Flags, 05321 _Outptr_opt_result_maybenull_ PVOID *Context); 05322 05323 _IRQL_requires_max_(APC_LEVEL) 05324 NTSYSAPI 05325 NTSTATUS 05326 NTAPI 05327 RtlRunOnceComplete( 05328 _Inout_ PRTL_RUN_ONCE RunOnce, 05329 _In_ ULONG Flags, 05330 _In_opt_ PVOID Context); 05331 05332 NTSYSAPI 05333 BOOLEAN 05334 NTAPI 05335 RtlGetProductInfo( 05336 _In_ ULONG OSMajorVersion, 05337 _In_ ULONG OSMinorVersion, 05338 _In_ ULONG SpMajorVersion, 05339 _In_ ULONG SpMinorVersion, 05340 _Out_ PULONG ReturnedProductType); 05341 05342 05343 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 05344 05345 #if (NTDDI_VERSION >= NTDDI_WIN7) 05346 05347 05348 _Must_inspect_result_ 05349 NTSYSAPI 05350 BOOLEAN 05351 NTAPI 05352 RtlCreateHashTable( 05353 _Inout_ _When_(NULL == *HashTable, __drv_allocatesMem(Mem)) 05354 PRTL_DYNAMIC_HASH_TABLE *HashTable, 05355 _In_ ULONG Shift, 05356 _In_ _Reserved_ ULONG Flags); 05357 05358 NTSYSAPI 05359 VOID 05360 NTAPI 05361 RtlDeleteHashTable( 05362 _In_ _When_((HashTable->Flags & RTL_HASH_ALLOCATED_HEADER), __drv_freesMem(Mem) _Post_invalid_) 05363 PRTL_DYNAMIC_HASH_TABLE HashTable); 05364 05365 NTSYSAPI 05366 BOOLEAN 05367 NTAPI 05368 RtlInsertEntryHashTable( 05369 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05370 _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, 05371 _In_ ULONG_PTR Signature, 05372 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); 05373 05374 NTSYSAPI 05375 BOOLEAN 05376 NTAPI 05377 RtlRemoveEntryHashTable( 05378 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05379 _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, 05380 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); 05381 05382 _Must_inspect_result_ 05383 NTSYSAPI 05384 PRTL_DYNAMIC_HASH_TABLE_ENTRY 05385 NTAPI 05386 RtlLookupEntryHashTable( 05387 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05388 _In_ ULONG_PTR Signature, 05389 _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); 05390 05391 _Must_inspect_result_ 05392 NTSYSAPI 05393 PRTL_DYNAMIC_HASH_TABLE_ENTRY 05394 NTAPI 05395 RtlGetNextEntryHashTable( 05396 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05397 _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); 05398 05399 NTSYSAPI 05400 BOOLEAN 05401 NTAPI 05402 RtlInitEnumerationHashTable( 05403 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05404 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05405 05406 _Must_inspect_result_ 05407 NTSYSAPI 05408 PRTL_DYNAMIC_HASH_TABLE_ENTRY 05409 NTAPI 05410 RtlEnumerateEntryHashTable( 05411 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05412 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05413 05414 NTSYSAPI 05415 VOID 05416 NTAPI 05417 RtlEndEnumerationHashTable( 05418 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05419 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05420 05421 NTSYSAPI 05422 BOOLEAN 05423 NTAPI 05424 RtlInitWeakEnumerationHashTable( 05425 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05426 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05427 05428 _Must_inspect_result_ 05429 NTSYSAPI 05430 PRTL_DYNAMIC_HASH_TABLE_ENTRY 05431 NTAPI 05432 RtlWeaklyEnumerateEntryHashTable( 05433 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05434 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05435 05436 NTSYSAPI 05437 VOID 05438 NTAPI 05439 RtlEndWeakEnumerationHashTable( 05440 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, 05441 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 05442 05443 NTSYSAPI 05444 BOOLEAN 05445 NTAPI 05446 RtlExpandHashTable( 05447 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); 05448 05449 NTSYSAPI 05450 BOOLEAN 05451 NTAPI 05452 RtlContractHashTable( 05453 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); 05454 05455 05456 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 05457 05458 05459 #if defined(_AMD64_) || defined(_IA64_) 05460 05461 05462 05463 //DECLSPEC_DEPRECATED_DDK_WINXP 05464 FORCEINLINE 05465 LARGE_INTEGER 05466 NTAPI_INLINE 05467 RtlLargeIntegerDivide( 05468 _In_ LARGE_INTEGER Dividend, 05469 _In_ LARGE_INTEGER Divisor, 05470 _Out_opt_ PLARGE_INTEGER Remainder) 05471 { 05472 LARGE_INTEGER ret; 05473 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; 05474 if (Remainder) 05475 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; 05476 return ret; 05477 } 05478 05479 #else 05480 05481 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05482 NTSYSAPI 05483 LARGE_INTEGER 05484 NTAPI 05485 RtlLargeIntegerDivide( 05486 _In_ LARGE_INTEGER Dividend, 05487 _In_ LARGE_INTEGER Divisor, 05488 _Out_opt_ PLARGE_INTEGER Remainder); 05489 #endif 05490 05491 05492 #endif /* defined(_AMD64_) || defined(_IA64_) */ 05493 05494 05495 05496 #ifdef RTL_USE_AVL_TABLES 05497 05498 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl 05499 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl 05500 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl 05501 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl 05502 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl 05503 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl 05504 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl 05505 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl 05506 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl 05507 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl 05508 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl 05509 05510 #endif /* RTL_USE_AVL_TABLES */ 05511 05512 #define RtlInitializeSplayLinks(Links) { \ 05513 PRTL_SPLAY_LINKS _SplayLinks; \ 05514 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ 05515 _SplayLinks->Parent = _SplayLinks; \ 05516 _SplayLinks->LeftChild = NULL; \ 05517 _SplayLinks->RightChild = NULL; \ 05518 } 05519 05520 #define RtlIsLeftChild(Links) \ 05521 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 05522 05523 #define RtlIsRightChild(Links) \ 05524 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 05525 05526 #define RtlRightChild(Links) \ 05527 ((PRTL_SPLAY_LINKS)(Links))->RightChild 05528 05529 #define RtlIsRoot(Links) \ 05530 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) 05531 05532 #define RtlLeftChild(Links) \ 05533 ((PRTL_SPLAY_LINKS)(Links))->LeftChild 05534 05535 #define RtlParent(Links) \ 05536 ((PRTL_SPLAY_LINKS)(Links))->Parent 05537 05538 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \ 05539 { \ 05540 PRTL_SPLAY_LINKS _SplayParent; \ 05541 PRTL_SPLAY_LINKS _SplayChild; \ 05542 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 05543 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 05544 _SplayParent->LeftChild = _SplayChild; \ 05545 _SplayChild->Parent = _SplayParent; \ 05546 } 05547 05548 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \ 05549 { \ 05550 PRTL_SPLAY_LINKS _SplayParent; \ 05551 PRTL_SPLAY_LINKS _SplayChild; \ 05552 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 05553 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 05554 _SplayParent->RightChild = _SplayChild; \ 05555 _SplayChild->Parent = _SplayParent; \ 05556 } 05557 05558 #if !defined(MIDL_PASS) 05559 05560 FORCEINLINE 05561 LUID 05562 NTAPI_INLINE 05563 RtlConvertLongToLuid( 05564 _In_ LONG Val) 05565 { 05566 LUID Luid; 05567 LARGE_INTEGER Temp; 05568 05569 Temp.QuadPart = Val; 05570 Luid.LowPart = Temp.u.LowPart; 05571 Luid.HighPart = Temp.u.HighPart; 05572 return Luid; 05573 } 05574 05575 FORCEINLINE 05576 LUID 05577 NTAPI_INLINE 05578 RtlConvertUlongToLuid( 05579 _In_ ULONG Val) 05580 { 05581 LUID Luid; 05582 05583 Luid.LowPart = Val; 05584 Luid.HighPart = 0; 05585 return Luid; 05586 } 05587 05588 #endif /* !defined(MIDL_PASS) */ 05589 05590 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) 05591 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \ 05592 *CallersAddress = (PVOID)_ReturnAddress(); \ 05593 *CallersCaller = NULL; 05594 #else 05595 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05596 NTSYSAPI 05597 VOID 05598 NTAPI 05599 RtlGetCallersAddress( 05600 _Out_ PVOID *CallersAddress, 05601 _Out_ PVOID *CallersCaller); 05602 #endif 05603 #endif 05604 05605 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) 05606 05607 #if (NTDDI_VERSION >= NTDDI_WIN7) 05608 05609 FORCEINLINE 05610 VOID 05611 NTAPI 05612 RtlInitHashTableContext( 05613 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) 05614 { 05615 Context->ChainHead = NULL; 05616 Context->PrevLinkage = NULL; 05617 } 05618 05619 FORCEINLINE 05620 VOID 05621 NTAPI 05622 RtlInitHashTableContextFromEnumerator( 05623 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, 05624 _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) 05625 { 05626 Context->ChainHead = Enumerator->ChainHead; 05627 Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink; 05628 } 05629 05630 FORCEINLINE 05631 VOID 05632 NTAPI 05633 RtlReleaseHashTableContext( 05634 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) 05635 { 05636 UNREFERENCED_PARAMETER(Context); 05637 return; 05638 } 05639 05640 FORCEINLINE 05641 ULONG 05642 NTAPI 05643 RtlTotalBucketsHashTable( 05644 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) 05645 { 05646 return HashTable->TableSize; 05647 } 05648 05649 FORCEINLINE 05650 ULONG 05651 NTAPI 05652 RtlNonEmptyBucketsHashTable( 05653 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) 05654 { 05655 return HashTable->NonEmptyBuckets; 05656 } 05657 05658 FORCEINLINE 05659 ULONG 05660 NTAPI 05661 RtlEmptyBucketsHashTable( 05662 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) 05663 { 05664 return HashTable->TableSize - HashTable->NonEmptyBuckets; 05665 } 05666 05667 FORCEINLINE 05668 ULONG 05669 NTAPI 05670 RtlTotalEntriesHashTable( 05671 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) 05672 { 05673 return HashTable->NumEntries; 05674 } 05675 05676 FORCEINLINE 05677 ULONG 05678 NTAPI 05679 RtlActiveEnumeratorsHashTable( 05680 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) 05681 { 05682 return HashTable->NumEnumerators; 05683 } 05684 05685 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 05686 05687 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ 05688 05689 /****************************************************************************** 05690 * Security Manager Functions * 05691 ******************************************************************************/ 05692 05693 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05694 05695 _IRQL_requires_max_(PASSIVE_LEVEL) 05696 NTKERNELAPI 05697 BOOLEAN 05698 NTAPI 05699 SeSinglePrivilegeCheck( 05700 _In_ LUID PrivilegeValue, 05701 _In_ KPROCESSOR_MODE PreviousMode); 05702 05703 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 05704 05705 05706 /****************************************************************************** 05707 * ZwXxx Functions * 05708 ******************************************************************************/ 05709 05710 05711 _IRQL_requires_max_(PASSIVE_LEVEL) 05712 NTSYSAPI 05713 NTSTATUS 05714 NTAPI 05715 ZwAllocateLocallyUniqueId( 05716 _Out_ PLUID Luid); 05717 05718 _IRQL_requires_max_(PASSIVE_LEVEL) 05719 NTSYSAPI 05720 NTSTATUS 05721 NTAPI 05722 ZwTerminateProcess( 05723 _In_opt_ HANDLE ProcessHandle, 05724 _In_ NTSTATUS ExitStatus); 05725 05726 _IRQL_requires_max_(PASSIVE_LEVEL) 05727 NTSYSAPI 05728 NTSTATUS 05729 NTAPI 05730 ZwOpenProcess( 05731 _Out_ PHANDLE ProcessHandle, 05732 _In_ ACCESS_MASK DesiredAccess, 05733 _In_ POBJECT_ATTRIBUTES ObjectAttributes, 05734 _In_opt_ PCLIENT_ID ClientId); 05735 05736 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05737 05738 _IRQL_requires_max_(PASSIVE_LEVEL) 05739 NTSTATUS 05740 NTAPI 05741 ZwCancelTimer( 05742 _In_ HANDLE TimerHandle, 05743 _Out_opt_ PBOOLEAN CurrentState); 05744 05745 _IRQL_requires_max_(PASSIVE_LEVEL) 05746 _When_(return == 0, __drv_allocatesMem(TimerObject)) 05747 NTSTATUS 05748 NTAPI 05749 ZwCreateTimer( 05750 _Out_ PHANDLE TimerHandle, 05751 _In_ ACCESS_MASK DesiredAccess, 05752 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, 05753 _In_ TIMER_TYPE TimerType); 05754 05755 _IRQL_requires_max_(PASSIVE_LEVEL) 05756 NTSTATUS 05757 NTAPI 05758 ZwOpenTimer( 05759 _Out_ PHANDLE TimerHandle, 05760 _In_ ACCESS_MASK DesiredAccess, 05761 _In_ POBJECT_ATTRIBUTES ObjectAttributes); 05762 05763 _IRQL_requires_max_(PASSIVE_LEVEL) 05764 NTSYSAPI 05765 NTSTATUS 05766 NTAPI 05767 ZwSetInformationThread( 05768 _In_ HANDLE ThreadHandle, 05769 _In_ THREADINFOCLASS ThreadInformationClass, 05770 _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, 05771 _In_ ULONG ThreadInformationLength); 05772 05773 _IRQL_requires_max_(PASSIVE_LEVEL) 05774 NTSTATUS 05775 NTAPI 05776 ZwSetTimer( 05777 _In_ HANDLE TimerHandle, 05778 _In_ PLARGE_INTEGER DueTime, 05779 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine, 05780 _In_opt_ PVOID TimerContext, 05781 _In_ BOOLEAN ResumeTimer, 05782 _In_opt_ LONG Period, 05783 _Out_opt_ PBOOLEAN PreviousState); 05784 05785 _IRQL_requires_max_(PASSIVE_LEVEL) 05786 NTSYSAPI 05787 NTSTATUS 05788 NTAPI 05789 ZwDisplayString( 05790 _In_ PUNICODE_STRING String); 05791 05792 _IRQL_requires_max_(PASSIVE_LEVEL) 05793 NTSYSAPI 05794 NTSTATUS 05795 NTAPI 05796 ZwPowerInformation( 05797 _In_ POWER_INFORMATION_LEVEL PowerInformationLevel, 05798 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, 05799 _In_ ULONG InputBufferLength, 05800 _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, 05801 _In_ ULONG OutputBufferLength); 05802 05803 _IRQL_requires_max_(PASSIVE_LEVEL) 05804 NTSYSAPI 05805 NTSTATUS 05806 NTAPI 05807 ZwQueryVolumeInformationFile( 05808 _In_ HANDLE FileHandle, 05809 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 05810 _Out_writes_bytes_(Length) PVOID FsInformation, 05811 _In_ ULONG Length, 05812 _In_ FS_INFORMATION_CLASS FsInformationClass); 05813 05814 _IRQL_requires_max_(PASSIVE_LEVEL) 05815 NTSYSAPI 05816 NTSTATUS 05817 NTAPI 05818 ZwDeviceIoControlFile( 05819 _In_ HANDLE FileHandle, 05820 _In_opt_ HANDLE Event, 05821 _In_opt_ PIO_APC_ROUTINE ApcRoutine, 05822 _In_opt_ PVOID ApcContext, 05823 _Out_ PIO_STATUS_BLOCK IoStatusBlock, 05824 _In_ ULONG IoControlCode, 05825 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, 05826 _In_ ULONG InputBufferLength, 05827 _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, 05828 _In_ ULONG OutputBufferLength); 05829 05830 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 05831 05832 05833 #if (NTDDI_VERSION >= NTDDI_WIN7) 05834 05835 _IRQL_requires_max_(PASSIVE_LEVEL) 05836 NTSTATUS 05837 NTAPI 05838 ZwSetTimerEx( 05839 _In_ HANDLE TimerHandle, 05840 _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, 05841 _Inout_updates_bytes_opt_(TimerSetInformationLength) PVOID TimerSetInformation, 05842 _In_ ULONG TimerSetInformationLength); 05843 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 05844 05845 05846 05847 /* UNSORTED */ 05848 05849 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ 05850 ((ConditionMask) = VerSetConditionMask((ConditionMask), \ 05851 (TypeBitMask), (ComparisonType))) 05852 05853 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05854 NTSYSAPI 05855 ULONGLONG 05856 NTAPI 05857 VerSetConditionMask( 05858 IN ULONGLONG ConditionMask, 05859 IN ULONG TypeMask, 05860 IN UCHAR Condition); 05861 #endif 05862 05863 typedef struct _KERNEL_USER_TIMES { 05864 LARGE_INTEGER CreateTime; 05865 LARGE_INTEGER ExitTime; 05866 LARGE_INTEGER KernelTime; 05867 LARGE_INTEGER UserTime; 05868 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; 05869 05870 /* NtXxx Functions */ 05871 05872 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { 05873 SystemFirmwareTable_Enumerate, 05874 SystemFirmwareTable_Get 05875 } SYSTEM_FIRMWARE_TABLE_ACTION; 05876 05877 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { 05878 ULONG ProviderSignature; 05879 SYSTEM_FIRMWARE_TABLE_ACTION Action; 05880 ULONG TableID; 05881 ULONG TableBufferLength; 05882 UCHAR TableBuffer[ANYSIZE_ARRAY]; 05883 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; 05884 05885 typedef NTSTATUS 05886 (__cdecl *PFNFTH)( 05887 _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); 05888 05889 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { 05890 ULONG ProviderSignature; 05891 BOOLEAN Register; 05892 PFNFTH FirmwareTableHandler; 05893 PVOID DriverObject; 05894 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER; 05895 05896 typedef ULONG_PTR 05897 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( 05898 _In_ PVOID Context); 05899 05900 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { 05901 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; 05902 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; 05903 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; 05904 05905 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 05906 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 05907 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 05908 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 05909 #define DRIVER_VERIFIER_IO_CHECKING 0x0010 05910 05911 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0 05912 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V) 05913 05914 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1 05915 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V) 05916 05917 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2 05918 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V) 05919 05920 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3 05921 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \ 05922 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V) 05923 05924 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4 05925 #define SHARED_GLOBAL_FLAGS_SPARE \ 05926 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V) 05927 05928 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5 05929 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \ 05930 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V) 05931 05932 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6 05933 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \ 05934 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V) 05935 05936 #define EX_INIT_BITS(Flags, Bit) \ 05937 *((Flags)) |= (Bit) // Safe to use before concurrently accessible 05938 05939 #define EX_TEST_SET_BIT(Flags, Bit) \ 05940 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit)) 05941 05942 #define EX_TEST_CLEAR_BIT(Flags, Bit) \ 05943 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit)) 05944 05945 #define PCCARD_MAP_ERROR 0x01 05946 #define PCCARD_DEVICE_PCI 0x10 05947 05948 #define PCCARD_SCAN_DISABLED 0x01 05949 #define PCCARD_MAP_ZERO 0x02 05950 #define PCCARD_NO_TIMER 0x03 05951 #define PCCARD_NO_PIC 0x04 05952 #define PCCARD_NO_LEGACY_BASE 0x05 05953 #define PCCARD_DUP_LEGACY_BASE 0x06 05954 #define PCCARD_NO_CONTROLLERS 0x07 05955 05956 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2)) 05957 05958 /* Filesystem runtime library routines */ 05959 05960 #if (NTDDI_VERSION >= NTDDI_WIN2K) 05961 _Must_inspect_result_ 05962 NTKERNELAPI 05963 BOOLEAN 05964 NTAPI 05965 FsRtlIsTotalDeviceFailure( 05966 _In_ NTSTATUS Status); 05967 #endif 05968 05969 #ifdef __cplusplus 05970 } 05971 #endif Generated on Fri May 25 2012 04:28:41 for ReactOS by
1.7.6.1
|