/* * ntddk.h * * Windows NT Device Driver Kit * * This file is part of the ReactOS DDK package. * * Contributors: * Amine Khaldi * Timo Kreuzer (timo.kreuzer@reactos.org) * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #pragma once #define _NTDDK_ #if !defined(_NTHAL_) && !defined(_NTIFS_) #define _NTDDK_INCLUDED_ #define _DDK_DRIVER_ #endif /* Dependencies */ #define NT_INCLUDED #define _CTYPE_DISABLE_MACROS #include #include #include #include #include #include #include #include // FIXME #include // FIXME #ifdef __cplusplus extern "C" { #endif /* GUID and UUID */ #ifndef _NTLSA_IFS_ #ifndef _NTLSA_AUDIT_ #define _NTLSA_AUDIT_ #ifndef GUID_DEFINED #include #endif #endif /* _NTLSA_AUDIT_ */ #endif /* _NTLSA_IFS_ */ typedef GUID UUID; struct _LOADER_PARAMETER_BLOCK; struct _CREATE_DISK; struct _DRIVE_LAYOUT_INFORMATION_EX; struct _SET_PARTITION_INFORMATION_EX; struct _DISK_GEOMETRY_EX; typedef struct _BUS_HANDLER *PBUS_HANDLER; typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; #if defined(_NTHAL_INCLUDED_) typedef struct _KAFFINITY_EX *PKAFFINITY_EX; #endif typedef struct _PEB *PPEB; #ifndef _NTIMAGE_ typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32; typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64; #ifdef _WIN64 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; #else typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; #endif #endif /* _NTIMAGE_ */ /****************************************************************************** * Executive Types * ******************************************************************************/ typedef struct _ZONE_SEGMENT_HEADER { SINGLE_LIST_ENTRY SegmentList; PVOID Reserved; } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; typedef struct _ZONE_HEADER { SINGLE_LIST_ENTRY FreeList; SINGLE_LIST_ENTRY SegmentList; ULONG BlockSize; ULONG TotalSegmentSize; } ZONE_HEADER, *PZONE_HEADER; #define PROTECTED_POOL 0x80000000 /****************************************************************************** * I/O Manager Types * ******************************************************************************/ /* DEVICE_OBJECT.Flags */ #define DO_DEVICE_HAS_NAME 0x00000040 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 #define DO_LONG_TERM_REQUESTS 0x00000200 #define DO_NEVER_LAST_DEVICE 0x00000400 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 #define DO_SUPPORTS_TRANSACTIONS 0x00040000 #define DO_FORCE_NEITHER_IO 0x00080000 #define DO_VOLUME_DEVICE_OBJECT 0x00100000 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 #define DO_DISALLOW_EXECUTE 0x00800000 #ifndef _ARC_DDK_ #define _ARC_DDK_ typedef enum _CONFIGURATION_TYPE { ArcSystem, CentralProcessor, FloatingPointProcessor, PrimaryIcache, PrimaryDcache, SecondaryIcache, SecondaryDcache, SecondaryCache, EisaAdapter, TcAdapter, ScsiAdapter, DtiAdapter, MultiFunctionAdapter, DiskController, TapeController, CdromController, WormController, SerialController, NetworkController, DisplayController, ParallelController, PointerController, KeyboardController, AudioController, OtherController, DiskPeripheral, FloppyDiskPeripheral, TapePeripheral, ModemPeripheral, MonitorPeripheral, PrinterPeripheral, PointerPeripheral, KeyboardPeripheral, TerminalPeripheral, OtherPeripheral, LinePeripheral, NetworkPeripheral, SystemMemory, DockingInformation, RealModeIrqRoutingTable, RealModePCIEnumeration, MaximumType } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; #endif /* !_ARC_DDK_ */ /* ** IRP function codes */ #define IRP_MN_QUERY_DIRECTORY 0x01 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 #define IRP_MN_USER_FS_REQUEST 0x00 #define IRP_MN_MOUNT_VOLUME 0x01 #define IRP_MN_VERIFY_VOLUME 0x02 #define IRP_MN_LOAD_FILE_SYSTEM 0x03 #define IRP_MN_TRACK_LINK 0x04 #define IRP_MN_KERNEL_CALL 0x04 #define IRP_MN_LOCK 0x01 #define IRP_MN_UNLOCK_SINGLE 0x02 #define IRP_MN_UNLOCK_ALL 0x03 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 #define IRP_MN_FLUSH_AND_PURGE 0x01 #define IRP_MN_NORMAL 0x00 #define IRP_MN_DPC 0x01 #define IRP_MN_MDL 0x02 #define IRP_MN_COMPLETE 0x04 #define IRP_MN_COMPRESSED 0x08 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 #define IO_CHECK_CREATE_PARAMETERS 0x0200 #define IO_ATTACH_DEVICE 0x0400 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 typedef NTSTATUS (NTAPI *PIO_QUERY_DEVICE_ROUTINE)( _In_ PVOID Context, _In_ PUNICODE_STRING PathName, _In_ INTERFACE_TYPE BusType, _In_ ULONG BusNumber, _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation, _In_ CONFIGURATION_TYPE ControllerType, _In_ ULONG ControllerNumber, _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, _In_ CONFIGURATION_TYPE PeripheralType, _In_ ULONG PeripheralNumber, _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { IoQueryDeviceIdentifier = 0, IoQueryDeviceConfigurationData, IoQueryDeviceComponentInformation, IoQueryDeviceMaxData } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; typedef VOID (NTAPI *PDRIVER_REINITIALIZE)( _In_ struct _DRIVER_OBJECT *DriverObject, _In_opt_ PVOID Context, _In_ ULONG Count); typedef struct _CONTROLLER_OBJECT { CSHORT Type; CSHORT Size; PVOID ControllerExtension; KDEVICE_QUEUE DeviceWaitQueue; ULONG Spare1; LARGE_INTEGER Spare2; } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; #define DRVO_REINIT_REGISTERED 0x00000008 #define DRVO_INITIALIZED 0x00000010 #define DRVO_BOOTREINIT_REGISTERED 0x00000020 #define DRVO_LEGACY_RESOURCES 0x00000040 typedef struct _CONFIGURATION_INFORMATION { ULONG DiskCount; ULONG FloppyCount; ULONG CdRomCount; ULONG TapeCount; ULONG ScsiPortCount; ULONG SerialCount; ULONG ParallelCount; BOOLEAN AtDiskPrimaryAddressClaimed; BOOLEAN AtDiskSecondaryAddressClaimed; ULONG Version; ULONG MediumChangerCount; } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; typedef struct _DISK_SIGNATURE { ULONG PartitionStyle; _ANONYMOUS_UNION union { struct { ULONG Signature; ULONG CheckSum; } Mbr; struct { GUID DiskId; } Gpt; } DUMMYUNIONNAME; } DISK_SIGNATURE, *PDISK_SIGNATURE; typedef struct _TXN_PARAMETER_BLOCK { USHORT Length; USHORT TxFsContext; PVOID TransactionObject; } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK; #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE) typedef struct _IO_DRIVER_CREATE_CONTEXT { CSHORT Size; struct _ECP_LIST *ExtraCreateParameter; PVOID DeviceObjectHint; PTXN_PARAMETER_BLOCK TxnParameters; } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT; typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PGET_SET_DEVICE_DATA SetBusData; PGET_SET_DEVICE_DATA GetBusData; UCHAR CapabilityID; } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; _IRQL_requires_max_(PASSIVE_LEVEL) _Must_inspect_result_ typedef NTSTATUS (NTAPI *PGET_LOCATION_STRING)( _Inout_opt_ PVOID Context, _Outptr_ _At_(*LocationStrings, _When_(return == 0, __drv_allocatesMem(Mem))) PZZWSTR *LocationStrings); typedef struct _PNP_LOCATION_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PGET_LOCATION_STRING GetLocationString; } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE; typedef enum _ARBITER_ACTION { ArbiterActionTestAllocation, ArbiterActionRetestAllocation, ArbiterActionCommitAllocation, ArbiterActionRollbackAllocation, ArbiterActionQueryAllocatedResources, ArbiterActionWriteReservedResources, ArbiterActionQueryConflict, ArbiterActionQueryArbitrate, ArbiterActionAddReserved, ArbiterActionBootAllocation } ARBITER_ACTION, *PARBITER_ACTION; typedef struct _ARBITER_CONFLICT_INFO { PDEVICE_OBJECT OwningObject; ULONGLONG Start; ULONGLONG End; } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { _Inout_ PLIST_ENTRY ArbitrationList; _In_ ULONG AllocateFromCount; _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { _Inout_ PLIST_ENTRY ArbitrationList; _In_ ULONG AllocateFromCount; _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { _Inout_ PLIST_ENTRY ArbitrationList; } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { _In_ PDEVICE_OBJECT PhysicalDeviceObject; _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource; _Out_ PULONG ConflictCount; _Out_ PARBITER_CONFLICT_INFO *Conflicts; } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS; typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS { _In_ PLIST_ENTRY ArbitrationList; } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { _In_ PDEVICE_OBJECT ReserveDevice; } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS; typedef struct _ARBITER_PARAMETERS { union { ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation; ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation; ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation; ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources; ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict; ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate; ARBITER_ADD_RESERVED_PARAMETERS AddReserved; } Parameters; } ARBITER_PARAMETERS, *PARBITER_PARAMETERS; typedef enum _ARBITER_REQUEST_SOURCE { ArbiterRequestUndefined = -1, ArbiterRequestLegacyReported, ArbiterRequestHalReported, ArbiterRequestLegacyAssigned, ArbiterRequestPnpDetected, ArbiterRequestPnpEnumerated } ARBITER_REQUEST_SOURCE; typedef enum _ARBITER_RESULT { ArbiterResultUndefined = -1, ArbiterResultSuccess, ArbiterResultExternalConflict, ArbiterResultNullRequest } ARBITER_RESULT; #define ARBITER_FLAG_BOOT_CONFIG 0x00000001 typedef struct _ARBITER_LIST_ENTRY { LIST_ENTRY ListEntry; ULONG AlternativeCount; PIO_RESOURCE_DESCRIPTOR Alternatives; PDEVICE_OBJECT PhysicalDeviceObject; ARBITER_REQUEST_SOURCE RequestSource; ULONG Flags; LONG_PTR WorkSpace; INTERFACE_TYPE InterfaceType; ULONG SlotNumber; ULONG BusNumber; PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment; PIO_RESOURCE_DESCRIPTOR SelectedAlternative; ARBITER_RESULT Result; } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY; typedef NTSTATUS (NTAPI *PARBITER_HANDLER)( _Inout_opt_ PVOID Context, _In_ ARBITER_ACTION Action, _Inout_ PARBITER_PARAMETERS Parameters); #define ARBITER_PARTIAL 0x00000001 typedef struct _ARBITER_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PARBITER_HANDLER ArbiterHandler; ULONG Flags; } ARBITER_INTERFACE, *PARBITER_INTERFACE; typedef enum _RESOURCE_TRANSLATION_DIRECTION { TranslateChildToParent, TranslateParentToChild } RESOURCE_TRANSLATION_DIRECTION; typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_HANDLER)( _Inout_opt_ PVOID Context, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, _In_ RESOURCE_TRANSLATION_DIRECTION Direction, _In_opt_ ULONG AlternativesCount, _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[], _In_ PDEVICE_OBJECT PhysicalDeviceObject, _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( _Inout_opt_ PVOID Context, _In_ PIO_RESOURCE_DESCRIPTOR Source, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _Out_ PULONG TargetCount, _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target); typedef struct _TRANSLATOR_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PTRANSLATE_RESOURCE_HANDLER TranslateResources; PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; typedef struct _PCI_AGP_CAPABILITY { PCI_CAPABILITIES_HEADER Header; USHORT Minor:4; USHORT Major:4; USHORT Rsvd1:8; struct _PCI_AGP_STATUS { ULONG Rate:3; ULONG Agp3Mode:1; ULONG FastWrite:1; ULONG FourGB:1; ULONG HostTransDisable:1; ULONG Gart64:1; ULONG ITA_Coherent:1; ULONG SideBandAddressing:1; ULONG CalibrationCycle:3; ULONG AsyncRequestSize:3; ULONG Rsvd1:1; ULONG Isoch:1; ULONG Rsvd2:6; ULONG RequestQueueDepthMaximum:8; } AGPStatus; struct _PCI_AGP_COMMAND { ULONG Rate:3; ULONG Rsvd1:1; ULONG FastWriteEnable:1; ULONG FourGBEnable:1; ULONG Rsvd2:1; ULONG Gart64:1; ULONG AGPEnable:1; ULONG SBAEnable:1; ULONG CalibrationCycle:3; ULONG AsyncReqSize:3; ULONG Rsvd3:8; ULONG RequestQueueDepth:8; } AGPCommand; } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY; typedef enum _EXTENDED_AGP_REGISTER { IsochStatus, AgpControl, ApertureSize, AperturePageSize, GartLow, GartHigh, IsochCommand } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER; typedef struct _PCI_AGP_ISOCH_STATUS { ULONG ErrorCode:2; ULONG Rsvd1:1; ULONG Isoch_L:3; ULONG Isoch_Y:2; ULONG Isoch_N:8; ULONG Rsvd2:16; } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS; typedef struct _PCI_AGP_CONTROL { ULONG Rsvd1:7; ULONG GTLB_Enable:1; ULONG AP_Enable:1; ULONG CAL_Disable:1; ULONG Rsvd2:22; } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL; typedef struct _PCI_AGP_APERTURE_PAGE_SIZE { USHORT PageSizeMask:11; USHORT Rsvd1:1; USHORT PageSizeSelect:4; } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE; typedef struct _PCI_AGP_ISOCH_COMMAND { USHORT Rsvd1:6; USHORT Isoch_Y:2; USHORT Isoch_N:8; } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND; typedef struct PCI_AGP_EXTENDED_CAPABILITY { PCI_AGP_ISOCH_STATUS IsochStatus; PCI_AGP_CONTROL AgpControl; USHORT ApertureSize; PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize; ULONG GartLow; ULONG GartHigh; PCI_AGP_ISOCH_COMMAND IsochCommand; } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY; #define PCI_AGP_RATE_1X 0x1 #define PCI_AGP_RATE_2X 0x2 #define PCI_AGP_RATE_4X 0x4 #define PCIX_MODE_CONVENTIONAL_PCI 0x0 #define PCIX_MODE1_66MHZ 0x1 #define PCIX_MODE1_100MHZ 0x2 #define PCIX_MODE1_133MHZ 0x3 #define PCIX_MODE2_266_66MHZ 0x9 #define PCIX_MODE2_266_100MHZ 0xA #define PCIX_MODE2_266_133MHZ 0xB #define PCIX_MODE2_533_66MHZ 0xD #define PCIX_MODE2_533_100MHZ 0xE #define PCIX_MODE2_533_133MHZ 0xF #define PCIX_VERSION_MODE1_ONLY 0x0 #define PCIX_VERSION_MODE2_ECC 0x1 #define PCIX_VERSION_DUAL_MODE_ECC 0x2 typedef struct _PCIX_BRIDGE_CAPABILITY { PCI_CAPABILITIES_HEADER Header; union { _ANONYMOUS_STRUCT struct { USHORT Bus64Bit:1; USHORT Bus133MHzCapable:1; USHORT SplitCompletionDiscarded:1; USHORT UnexpectedSplitCompletion:1; USHORT SplitCompletionOverrun:1; USHORT SplitRequestDelayed:1; USHORT BusModeFrequency:4; USHORT Rsvd:2; USHORT Version:2; USHORT Bus266MHzCapable:1; USHORT Bus533MHzCapable:1; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } SecondaryStatus; union { _ANONYMOUS_STRUCT struct { ULONG FunctionNumber:3; ULONG DeviceNumber:5; ULONG BusNumber:8; ULONG Device64Bit:1; ULONG Device133MHzCapable:1; ULONG SplitCompletionDiscarded:1; ULONG UnexpectedSplitCompletion:1; ULONG SplitCompletionOverrun:1; ULONG SplitRequestDelayed:1; ULONG Rsvd:7; ULONG DIMCapable:1; ULONG Device266MHzCapable:1; ULONG Device533MHzCapable:1; } DUMMYSTRUCTNAME; ULONG AsULONG; } BridgeStatus; USHORT UpstreamSplitTransactionCapacity; USHORT UpstreamSplitTransactionLimit; USHORT DownstreamSplitTransactionCapacity; USHORT DownstreamSplitTransactionLimit; union { _ANONYMOUS_STRUCT struct { ULONG SelectSecondaryRegisters:1; ULONG ErrorPresentInOtherBank:1; ULONG AdditionalCorrectableError:1; ULONG AdditionalUncorrectableError:1; ULONG ErrorPhase:3; ULONG ErrorCorrected:1; ULONG Syndrome:8; ULONG ErrorFirstCommand:4; ULONG ErrorSecondCommand:4; ULONG ErrorUpperAttributes:4; ULONG ControlUpdateEnable:1; ULONG Rsvd:1; ULONG DisableSingleBitCorrection:1; ULONG EccMode:1; } DUMMYSTRUCTNAME; ULONG AsULONG; } EccControlStatus; ULONG EccFirstAddress; ULONG EccSecondAddress; ULONG EccAttribute; } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY; typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY { PCI_CAPABILITIES_HEADER Header; USHORT Reserved; USHORT SubVendorID; USHORT SubSystemID; } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY; #define OSC_FIRMWARE_FAILURE 0x02 #define OSC_UNRECOGNIZED_UUID 0x04 #define OSC_UNRECOGNIZED_REVISION 0x08 #define OSC_CAPABILITIES_MASKED 0x10 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD { union { _ANONYMOUS_STRUCT struct { ULONG ExtendedConfigOpRegions:1; ULONG ActiveStatePowerManagement:1; ULONG ClockPowerManagement:1; ULONG SegmentGroups:1; ULONG MessageSignaledInterrupts:1; ULONG WindowsHardwareErrorArchitecture:1; ULONG Reserved:26; } DUMMYSTRUCTNAME; ULONG AsULONG; } u; } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD; typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD { union { _ANONYMOUS_STRUCT struct { ULONG ExpressNativeHotPlug:1; ULONG ShpcNativeHotPlug:1; ULONG ExpressNativePME:1; ULONG ExpressAdvancedErrorReporting:1; ULONG ExpressCapabilityStructure:1; ULONG Reserved:27; } DUMMYSTRUCTNAME; ULONG AsULONG; } u; } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD; typedef enum _PCI_HARDWARE_INTERFACE { PciConventional, PciXMode1, PciXMode2, PciExpress } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE; typedef enum { BusWidth32Bits, BusWidth64Bits } PCI_BUS_WIDTH; typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY { PCI_HARDWARE_INTERFACE SecondaryInterface; _ANONYMOUS_STRUCT struct { BOOLEAN BusCapabilitiesFound; ULONG CurrentSpeedAndMode; ULONG SupportedSpeedsAndModes; BOOLEAN DeviceIDMessagingCapable; PCI_BUS_WIDTH SecondaryBusWidth; } DUMMYSTRUCTNAME; PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport; PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest; PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted; } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY; typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER { _ANONYMOUS_STRUCT struct { USHORT CapabilityVersion:4; USHORT DeviceType:4; USHORT SlotImplemented:1; USHORT InterruptMessageNumber:5; USHORT Rsvd:2; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER; typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER { _ANONYMOUS_STRUCT struct { ULONG MaxPayloadSizeSupported:3; ULONG PhantomFunctionsSupported:2; ULONG ExtendedTagSupported:1; ULONG L0sAcceptableLatency:3; ULONG L1AcceptableLatency:3; ULONG Undefined:3; ULONG RoleBasedErrorReporting:1; ULONG Rsvd1:2; ULONG CapturedSlotPowerLimit:8; ULONG CapturedSlotPowerLimitScale:2; ULONG Rsvd2:4; } DUMMYSTRUCTNAME; ULONG AsULONG; } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER; #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07; typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER { _ANONYMOUS_STRUCT struct { USHORT CorrectableErrorEnable:1; USHORT NonFatalErrorEnable:1; USHORT FatalErrorEnable:1; USHORT UnsupportedRequestErrorEnable:1; USHORT EnableRelaxedOrder:1; USHORT MaxPayloadSize:3; USHORT ExtendedTagEnable:1; USHORT PhantomFunctionsEnable:1; USHORT AuxPowerEnable:1; USHORT NoSnoopEnable:1; USHORT MaxReadRequestSize:3; USHORT BridgeConfigRetryEnable:1; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER; #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F; typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER { _ANONYMOUS_STRUCT struct { USHORT CorrectableErrorDetected:1; USHORT NonFatalErrorDetected:1; USHORT FatalErrorDetected:1; USHORT UnsupportedRequestDetected:1; USHORT AuxPowerDetected:1; USHORT TransactionsPending:1; USHORT Rsvd:10; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER; typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER { _ANONYMOUS_STRUCT struct { ULONG MaximumLinkSpeed:4; ULONG MaximumLinkWidth:6; ULONG ActiveStatePMSupport:2; ULONG L0sExitLatency:3; ULONG L1ExitLatency:3; ULONG ClockPowerManagement:1; ULONG SurpriseDownErrorReportingCapable:1; ULONG DataLinkLayerActiveReportingCapable:1; ULONG Rsvd:3; ULONG PortNumber:8; } DUMMYSTRUCTNAME; ULONG AsULONG; } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER; typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER { _ANONYMOUS_STRUCT struct { USHORT ActiveStatePMControl:2; USHORT Rsvd1:1; USHORT ReadCompletionBoundary:1; USHORT LinkDisable:1; USHORT RetrainLink:1; USHORT CommonClockConfig:1; USHORT ExtendedSynch:1; USHORT EnableClockPowerManagement:1; USHORT Rsvd2:7; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER; typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER { _ANONYMOUS_STRUCT struct { USHORT LinkSpeed:4; USHORT LinkWidth:6; USHORT Undefined:1; USHORT LinkTraining:1; USHORT SlotClockConfig:1; USHORT DataLinkLayerActive:1; USHORT Rsvd:2; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER; typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER { _ANONYMOUS_STRUCT struct { ULONG AttentionButtonPresent:1; ULONG PowerControllerPresent:1; ULONG MRLSensorPresent:1; ULONG AttentionIndicatorPresent:1; ULONG PowerIndicatorPresent:1; ULONG HotPlugSurprise:1; ULONG HotPlugCapable:1; ULONG SlotPowerLimit:8; ULONG SlotPowerLimitScale:2; ULONG ElectromechanicalLockPresent:1; ULONG NoCommandCompletedSupport:1; ULONG PhysicalSlotNumber:13; } DUMMYSTRUCTNAME; ULONG AsULONG; } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER; typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER { _ANONYMOUS_STRUCT struct { USHORT AttentionButtonEnable:1; USHORT PowerFaultDetectEnable:1; USHORT MRLSensorEnable:1; USHORT PresenceDetectEnable:1; USHORT CommandCompletedEnable:1; USHORT HotPlugInterruptEnable:1; USHORT AttentionIndicatorControl:2; USHORT PowerIndicatorControl:2; USHORT PowerControllerControl:1; USHORT ElectromechanicalLockControl:1; USHORT DataLinkStateChangeEnable:1; USHORT Rsvd:3; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER; typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER { _ANONYMOUS_STRUCT struct { USHORT AttentionButtonPressed:1; USHORT PowerFaultDetected:1; USHORT MRLSensorChanged:1; USHORT PresenceDetectChanged:1; USHORT CommandCompleted:1; USHORT MRLSensorState:1; USHORT PresenceDetectState:1; USHORT ElectromechanicalLockEngaged:1; USHORT DataLinkStateChanged:1; USHORT Rsvd:7; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER; typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER { _ANONYMOUS_STRUCT struct { USHORT CorrectableSerrEnable:1; USHORT NonFatalSerrEnable:1; USHORT FatalSerrEnable:1; USHORT PMEInterruptEnable:1; USHORT CRSSoftwareVisibilityEnable:1; USHORT Rsvd:11; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER; typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER { _ANONYMOUS_STRUCT struct { USHORT CRSSoftwareVisibility:1; USHORT Rsvd:15; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER; typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER { _ANONYMOUS_STRUCT struct { ULONG PMERequestorId:16; ULONG PMEStatus:1; ULONG PMEPending:1; ULONG Rsvd:14; } DUMMYSTRUCTNAME; ULONG AsULONG; } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER; typedef struct _PCI_EXPRESS_CAPABILITY { PCI_CAPABILITIES_HEADER Header; PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities; PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities; PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl; PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus; PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities; PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl; PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus; PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities; PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl; PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus; PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl; PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities; PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus; } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY; typedef enum { MRLClosed = 0, MRLOpen } PCI_EXPRESS_MRL_STATE; typedef enum { SlotEmpty = 0, CardPresent } PCI_EXPRESS_CARD_PRESENCE; typedef enum { IndicatorOn = 1, IndicatorBlink, IndicatorOff } PCI_EXPRESS_INDICATOR_STATE; typedef enum { PowerOn = 0, PowerOff } PCI_EXPRESS_POWER_STATE; typedef enum { L0sEntrySupport = 1, L0sAndL1EntrySupport = 3 } PCI_EXPRESS_ASPM_SUPPORT; typedef enum { L0sAndL1EntryDisabled, L0sEntryEnabled, L1EntryEnabled, L0sAndL1EntryEnabled } PCI_EXPRESS_ASPM_CONTROL; typedef enum { L0s_Below64ns = 0, L0s_64ns_128ns, L0s_128ns_256ns, L0s_256ns_512ns, L0s_512ns_1us, L0s_1us_2us, L0s_2us_4us, L0s_Above4us } PCI_EXPRESS_L0s_EXIT_LATENCY; typedef enum { L1_Below1us = 0, L1_1us_2us, L1_2us_4us, L1_4us_8us, L1_8us_16us, L1_16us_32us, L1_32us_64us, L1_Above64us } PCI_EXPRESS_L1_EXIT_LATENCY; typedef enum { PciExpressEndpoint = 0, PciExpressLegacyEndpoint, PciExpressRootPort = 4, PciExpressUpstreamSwitchPort, PciExpressDownstreamSwitchPort, PciExpressToPciXBridge, PciXToExpressBridge, PciExpressRootComplexIntegratedEndpoint, PciExpressRootComplexEventCollector } PCI_EXPRESS_DEVICE_TYPE; typedef enum { MaxPayload128Bytes = 0, MaxPayload256Bytes, MaxPayload512Bytes, MaxPayload1024Bytes, MaxPayload2048Bytes, MaxPayload4096Bytes } PCI_EXPRESS_MAX_PAYLOAD_SIZE; typedef union _PCI_EXPRESS_PME_REQUESTOR_ID { _ANONYMOUS_STRUCT struct { USHORT FunctionNumber:3; USHORT DeviceNumber:5; USHORT BusNumber:8; } DUMMYSTRUCTNAME; USHORT AsUSHORT; } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID; typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE { ResourceTypeSingle = 0, ResourceTypeRange, ResourceTypeExtendedCounterConfiguration, ResourceTypeOverflow, ResourceTypeMax } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE; typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR { PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type; ULONG Flags; union { ULONG CounterIndex; ULONG ExtendedRegisterAddress; struct { ULONG Begin; ULONG End; } Range; } u; } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR; typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { ULONG Count; PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY]; } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST; typedef VOID (NTAPI *PciPin2Line)( _In_ struct _BUS_HANDLER *BusHandler, _In_ struct _BUS_HANDLER *RootHandler, _In_ PCI_SLOT_NUMBER SlotNumber, _In_ PPCI_COMMON_CONFIG PciData); typedef VOID (NTAPI *PciLine2Pin)( _In_ struct _BUS_HANDLER *BusHandler, _In_ struct _BUS_HANDLER *RootHandler, _In_ PCI_SLOT_NUMBER SlotNumber, _In_ PPCI_COMMON_CONFIG PciNewData, _In_ PPCI_COMMON_CONFIG PciOldData); typedef VOID (NTAPI *PciReadWriteConfig)( _In_ struct _BUS_HANDLER *BusHandler, _In_ PCI_SLOT_NUMBER Slot, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); #define PCI_DATA_TAG ' ICP' #define PCI_DATA_VERSION 1 typedef struct _PCIBUSDATA { ULONG Tag; ULONG Version; PciReadWriteConfig ReadConfig; PciReadWriteConfig WriteConfig; PciPin2Line Pin2Line; PciLine2Pin Line2Pin; PCI_SLOT_NUMBER ParentSlot; PVOID Reserved[4]; } PCIBUSDATA, *PPCIBUSDATA; #ifndef _PCIINTRF_X_ #define _PCIINTRF_X_ typedef ULONG (NTAPI *PCI_READ_WRITE_CONFIG)( _In_ PVOID Context, _In_ ULONG BusOffset, _In_ ULONG Slot, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); typedef VOID (NTAPI *PCI_PIN_TO_LINE)( _In_ PVOID Context, _In_ PPCI_COMMON_CONFIG PciData); typedef VOID (NTAPI *PCI_LINE_TO_PIN)( _In_ PVOID Context, _In_ PPCI_COMMON_CONFIG PciNewData, _In_ PPCI_COMMON_CONFIG PciOldData); typedef VOID (NTAPI *PCI_ROOT_BUS_CAPABILITY)( _In_ PVOID Context, _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); typedef VOID (NTAPI *PCI_EXPRESS_WAKE_CONTROL)( _In_ PVOID Context, _In_ BOOLEAN EnableWake); typedef struct _PCI_BUS_INTERFACE_STANDARD { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PCI_READ_WRITE_CONFIG ReadConfig; PCI_READ_WRITE_CONFIG WriteConfig; PCI_PIN_TO_LINE PinToLine; PCI_LINE_TO_PIN LineToPin; PCI_ROOT_BUS_CAPABILITY RootBusCapability; PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl; } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD; #define PCI_BUS_INTERFACE_STANDARD_VERSION 1 #endif /* _PCIINTRF_X_ */ #if (NTDDI_VERSION >= NTDDI_WIN7) #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \ (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \ FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX) #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300 #else #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \ FILE_READ_ONLY_DEVICE | \ FILE_FLOPPY_DISKETTE | \ FILE_WRITE_ONCE_MEDIA | \ FILE_DEVICE_SECURE_OPEN) typedef struct _FILE_ALIGNMENT_INFORMATION { ULONG AlignmentRequirement; } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; typedef struct _FILE_NAME_INFORMATION { ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { ULONG FileAttributes; ULONG ReparseTag; } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; typedef struct _FILE_DISPOSITION_INFORMATION { BOOLEAN DeleteFile; } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; typedef struct _FILE_END_OF_FILE_INFORMATION { LARGE_INTEGER EndOfFile; } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { LARGE_INTEGER ValidDataLength; } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; typedef struct _FILE_FS_LABEL_INFORMATION { ULONG VolumeLabelLength; WCHAR VolumeLabel[1]; } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; typedef struct _FILE_FS_VOLUME_INFORMATION { LARGE_INTEGER VolumeCreationTime; ULONG VolumeSerialNumber; ULONG VolumeLabelLength; BOOLEAN SupportsObjects; WCHAR VolumeLabel[1]; } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; typedef struct _FILE_FS_SIZE_INFORMATION { LARGE_INTEGER TotalAllocationUnits; LARGE_INTEGER AvailableAllocationUnits; ULONG SectorsPerAllocationUnit; ULONG BytesPerSector; } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; typedef struct _FILE_FS_FULL_SIZE_INFORMATION { LARGE_INTEGER TotalAllocationUnits; LARGE_INTEGER CallerAvailableAllocationUnits; LARGE_INTEGER ActualAvailableAllocationUnits; ULONG SectorsPerAllocationUnit; ULONG BytesPerSector; } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; typedef struct _FILE_FS_OBJECTID_INFORMATION { UCHAR ObjectId[16]; UCHAR ExtendedInfo[48]; } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; typedef union _FILE_SEGMENT_ELEMENT { PVOID64 Buffer; ULONGLONG Alignment; }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) typedef enum _BUS_DATA_TYPE { ConfigurationSpaceUndefined = -1, Cmos, EisaConfiguration, Pos, CbusConfiguration, PCIConfiguration, VMEConfiguration, NuBusConfiguration, PCMCIAConfiguration, MPIConfiguration, MPSAConfiguration, PNPISAConfiguration, SgiInternalConfiguration, MaximumBusDataType } BUS_DATA_TYPE, *PBUS_DATA_TYPE; /* Some Server 2003 DDK definitions */ #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1 typedef NTSTATUS (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)( IN PVOID Context, IN INTERFACE_TYPE LegacyBusType, IN ULONG BusNumber, IN ULONG SlotNumber, OUT PDEVICE_OBJECT *PhysicalDeviceObject); typedef struct _ROUTING_TOKEN { PVOID LinkNode; ULONG StaticVector; UCHAR Flags; } ROUTING_TOKEN, *PROUTING_TOKEN; typedef NTSTATUS (NTAPI *PGET_INTERRUPT_ROUTING)( IN PDEVICE_OBJECT Pdo, OUT ULONG *Bus, OUT ULONG *PciSlot, OUT UCHAR *InterruptLine, OUT UCHAR *InterruptPin, OUT UCHAR *ClassCode, OUT UCHAR *SubClassCode, OUT PDEVICE_OBJECT *ParentPdo, OUT ROUTING_TOKEN *RoutingToken, OUT UCHAR *Flags); typedef NTSTATUS (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)( IN PDEVICE_OBJECT Pdo, IN PROUTING_TOKEN RoutingToken); typedef VOID (NTAPI *PUPDATE_INTERRUPT_LINE)( IN PDEVICE_OBJECT Pdo, IN UCHAR LineRegister); typedef struct _INT_ROUTE_INTERFACE_STANDARD { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PGET_INTERRUPT_ROUTING GetInterruptRouting; PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken; PUPDATE_INTERRUPT_LINE UpdateInterruptLine; } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD; typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection; } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE; /* FIXME : These definitions don't exist in public headers */ #define PCI_CB_INTRF_VERSION 1 #define PCI_PME_INTRF_STANDARD_VER 1 #define PNP_LOCATION_INTERFACE_VERSION 1 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85); DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b); typedef NTSTATUS (NTAPI *PCARDBUSADD)( IN PDEVICE_OBJECT DeviceObject, IN OUT PVOID *DeviceContext); typedef NTSTATUS (NTAPI *PCARDBUSDELETE)( IN PVOID DeviceContext); typedef NTSTATUS (NTAPI *PCARDBUSPCIDISPATCH)( IN PVOID DeviceContext, IN PIRP Irp); typedef VOID (NTAPI *PPME_SET_PME_ENABLE)( IN PDEVICE_OBJECT Pdo, IN BOOLEAN PmeEnable); typedef VOID (NTAPI *PPME_CLEAR_PME_STATUS)( IN PDEVICE_OBJECT Pdo); typedef VOID (NTAPI *PPME_GET_INFORMATION)( IN PDEVICE_OBJECT Pdo, OUT PBOOLEAN PmeCapable, OUT PBOOLEAN PmeStatus, OUT PBOOLEAN PmeEnable); typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PDRIVER_OBJECT DriverObject; PCARDBUSADD AddCardBus; PCARDBUSDELETE DeleteCardBus; PCARDBUSPCIDISPATCH DispatchPnp; } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE; typedef struct _PCI_PME_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PPME_GET_INFORMATION GetPmeInformation; PPME_CLEAR_PME_STATUS ClearPmeStatus; PPME_SET_PME_ENABLE UpdateEnable; } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE; /* Hardware Abstraction Layer Types */ typedef BOOLEAN (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( _In_ ULONG Columns, _In_ ULONG Rows); typedef PBUS_HANDLER (FASTCALL *pHalHandlerForBus)( _In_ INTERFACE_TYPE InterfaceType, _In_ ULONG BusNumber); typedef VOID (FASTCALL *pHalReferenceBusHandler)( _In_ PBUS_HANDLER BusHandler); typedef enum _HAL_QUERY_INFORMATION_CLASS { HalInstalledBusInformation, HalProfileSourceInformation, HalInformationClassUnused1, HalPowerInformation, HalProcessorSpeedInformation, HalCallbackInformation, HalMapRegisterInformation, HalMcaLogInformation, HalFrameBufferCachingInformation, HalDisplayBiosInformation, HalProcessorFeatureInformation, HalNumaTopologyInterface, HalErrorInformation, HalCmcLogInformation, HalCpeLogInformation, HalQueryMcaInterface, HalQueryAMLIIllegalIOPortAddresses, HalQueryMaxHotPlugMemoryAddress, HalPartitionIpiInterface, HalPlatformInformation, HalQueryProfileSourceList, HalInitLogInformation, HalFrequencyInformation, HalProcessorBrandString, HalHypervisorInformation, HalPlatformTimerInformation, HalAcpiAuditInformation } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; typedef enum _HAL_SET_INFORMATION_CLASS { HalProfileSourceInterval, HalProfileSourceInterruptHandler, HalMcaRegisterDriver, HalKernelErrorHandler, HalCmcRegisterDriver, HalCpeRegisterDriver, HalMcaLog, HalCmcLog, HalCpeLog, HalGenerateCmcInterrupt, HalProfileSourceTimerHandler, HalEnlightenment, HalProfileDpgoSourceInterruptHandler } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; typedef NTSTATUS (NTAPI *pHalQuerySystemInformation)( _In_ HAL_QUERY_INFORMATION_CLASS InformationClass, _In_ ULONG BufferSize, _Inout_updates_bytes_to_(BufferSize, *ReturnedLength) PVOID Buffer, _Out_ PULONG ReturnedLength); typedef NTSTATUS (NTAPI *pHalSetSystemInformation)( _In_ HAL_SET_INFORMATION_CLASS InformationClass, _In_ ULONG BufferSize, _In_ PVOID Buffer); typedef VOID (FASTCALL *pHalExamineMBR)( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG MBRTypeIdentifier, _Out_ PVOID *Buffer); typedef NTSTATUS (FASTCALL *pHalIoReadPartitionTable)( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ BOOLEAN ReturnRecognizedPartitions, _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); typedef NTSTATUS (FASTCALL *pHalIoSetPartitionInformation)( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG PartitionNumber, _In_ ULONG PartitionType); typedef NTSTATUS (FASTCALL *pHalIoWritePartitionTable)( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG SectorsPerTrack, _In_ ULONG NumberOfHeads, _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); typedef NTSTATUS (NTAPI *pHalQueryBusSlots)( _In_ PBUS_HANDLER BusHandler, _In_ ULONG BufferSize, _Out_ PULONG SlotNumbers, _Out_ PULONG ReturnedLength); typedef NTSTATUS (NTAPI *pHalInitPnpDriver)(VOID); typedef struct _PM_DISPATCH_TABLE { ULONG Signature; ULONG Version; PVOID Function[1]; } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; typedef NTSTATUS (NTAPI *pHalInitPowerManagement)( _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable, _Out_ PPM_DISPATCH_TABLE *PmHalDispatchTable); typedef struct _DMA_ADAPTER* (NTAPI *pHalGetDmaAdapter)( _In_ PVOID Context, _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, _Out_ PULONG NumberOfMapRegisters); typedef NTSTATUS (NTAPI *pHalGetInterruptTranslator)( _In_ INTERFACE_TYPE ParentInterfaceType, _In_ ULONG ParentBusNumber, _In_ INTERFACE_TYPE BridgeInterfaceType, _In_ USHORT Size, _In_ USHORT Version, _Out_ PTRANSLATOR_INTERFACE Translator, _Out_ PULONG BridgeBusNumber); typedef NTSTATUS (NTAPI *pHalStartMirroring)(VOID); typedef NTSTATUS (NTAPI *pHalEndMirroring)( _In_ ULONG PassNumber); typedef NTSTATUS (NTAPI *pHalMirrorPhysicalMemory)( _In_ PHYSICAL_ADDRESS PhysicalAddress, _In_ LARGE_INTEGER NumberOfBytes); typedef NTSTATUS (NTAPI *pHalMirrorVerify)( _In_ PHYSICAL_ADDRESS PhysicalAddress, _In_ LARGE_INTEGER NumberOfBytes); typedef BOOLEAN (NTAPI *pHalTranslateBusAddress)( _In_ INTERFACE_TYPE InterfaceType, _In_ ULONG BusNumber, _In_ PHYSICAL_ADDRESS BusAddress, _Inout_ PULONG AddressSpace, _Out_ PPHYSICAL_ADDRESS TranslatedAddress); typedef NTSTATUS (NTAPI *pHalAssignSlotResources)( _In_ PUNICODE_STRING RegistryPath, _In_opt_ PUNICODE_STRING DriverClassName, _In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT DeviceObject, _In_ INTERFACE_TYPE BusType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Inout_ PCM_RESOURCE_LIST *AllocatedResources); typedef VOID (NTAPI *pHalHaltSystem)(VOID); typedef BOOLEAN (NTAPI *pHalResetDisplay)(VOID); typedef struct _MAP_REGISTER_ENTRY { PVOID MapRegister; BOOLEAN WriteToDevice; } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; typedef UCHAR (NTAPI *pHalVectorToIDTEntry)( ULONG Vector); typedef BOOLEAN (NTAPI *pHalFindBusAddressTranslation)( _In_ PHYSICAL_ADDRESS BusAddress, _Inout_ PULONG AddressSpace, _Out_ PPHYSICAL_ADDRESS TranslatedAddress, _Inout_ PULONG_PTR Context, _In_ BOOLEAN NextBus); typedef VOID (NTAPI *pHalEndOfBoot)(VOID); typedef PVOID (NTAPI *pHalGetAcpiTable)( _In_ ULONG Signature, _In_opt_ PCSTR OemId, _In_opt_ PCSTR OemTableId); #if defined(_IA64_) typedef NTSTATUS (*pHalGetErrorCapList)( _Inout_ PULONG CapsListLength, _Inout_updates_bytes_(*CapsListLength) PUCHAR ErrorCapList); typedef NTSTATUS (*pHalInjectError)( _In_ ULONG BufferLength, _In_reads_bytes_(BufferLength) PUCHAR Buffer); #endif typedef VOID (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(VOID); typedef VOID (NTAPI *pHalSetPciErrorHandlerCallback)( _In_ PCI_ERROR_HANDLER_CALLBACK Callback); #if 1 /* Not present in WDK 7600 */ typedef VOID (FASTCALL *pHalIoAssignDriveLetters)( _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, _In_ PSTRING NtDeviceName, _Out_ PUCHAR NtSystemPath, _Out_ PSTRING NtSystemPathString); #endif typedef struct { ULONG Version; pHalQuerySystemInformation HalQuerySystemInformation; pHalSetSystemInformation HalSetSystemInformation; pHalQueryBusSlots HalQueryBusSlots; ULONG Spare1; pHalExamineMBR HalExamineMBR; #if 1 /* Not present in WDK 7600 */ pHalIoAssignDriveLetters HalIoAssignDriveLetters; #endif pHalIoReadPartitionTable HalIoReadPartitionTable; pHalIoSetPartitionInformation HalIoSetPartitionInformation; pHalIoWritePartitionTable HalIoWritePartitionTable; pHalHandlerForBus HalReferenceHandlerForBus; pHalReferenceBusHandler HalReferenceBusHandler; pHalReferenceBusHandler HalDereferenceBusHandler; pHalInitPnpDriver HalInitPnpDriver; pHalInitPowerManagement HalInitPowerManagement; pHalGetDmaAdapter HalGetDmaAdapter; pHalGetInterruptTranslator HalGetInterruptTranslator; pHalStartMirroring HalStartMirroring; pHalEndMirroring HalEndMirroring; pHalMirrorPhysicalMemory HalMirrorPhysicalMemory; pHalEndOfBoot HalEndOfBoot; pHalMirrorVerify HalMirrorVerify; pHalGetAcpiTable HalGetCachedAcpiTable; pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback; #if defined(_IA64_) pHalGetErrorCapList HalGetErrorCapList; pHalInjectError HalInjectError; #endif } HAL_DISPATCH, *PHAL_DISPATCH; /* GCC/MSVC and WDK compatible declaration */ extern NTKERNELAPI HAL_DISPATCH HalDispatchTable; #if defined(_NTOSKRNL_) || defined(_BLDR_) #define HALDISPATCH (&HalDispatchTable) #else /* This is a WDK compatibility definition */ #define HalDispatchTable (&HalDispatchTable) #define HALDISPATCH HalDispatchTable #endif #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */ #define HalDispatchTableVersion HALDISPATCH->Version #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator #define HalStartMirroring HALDISPATCH->HalStartMirroring #define HalEndMirroring HALDISPATCH->HalEndMirroring #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory #define HalEndOfBoot HALDISPATCH->HalEndOfBoot #define HalMirrorVerify HALDISPATCH->HalMirrorVerify #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback #if defined(_IA64_) #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList #define HalInjectError HALDISPATCH->HalInjectError #endif typedef struct _HAL_BUS_INFORMATION { INTERFACE_TYPE BusType; BUS_DATA_TYPE ConfigurationType; ULONG BusNumber; ULONG Reserved; } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION; typedef struct _HAL_PROFILE_SOURCE_INFORMATION { KPROFILE_SOURCE Source; BOOLEAN Supported; ULONG Interval; } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX { KPROFILE_SOURCE Source; BOOLEAN Supported; ULONG_PTR Interval; ULONG_PTR DefInterval; ULONG_PTR MaxInterval; ULONG_PTR MinInterval; } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX; typedef struct _HAL_PROFILE_SOURCE_INTERVAL { KPROFILE_SOURCE Source; ULONG_PTR Interval; } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; typedef struct _HAL_PROFILE_SOURCE_LIST { KPROFILE_SOURCE Source; PWSTR Description; } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST; typedef enum _HAL_DISPLAY_BIOS_INFORMATION { HalDisplayInt10Bios, HalDisplayEmulatedBios, HalDisplayNoBios } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION; typedef struct _HAL_POWER_INFORMATION { ULONG TBD; } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION; typedef struct _HAL_PROCESSOR_SPEED_INFO { ULONG ProcessorSpeed; } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION; typedef struct _HAL_CALLBACKS { PCALLBACK_OBJECT SetSystemInformation; PCALLBACK_OBJECT BusCheck; } HAL_CALLBACKS, *PHAL_CALLBACKS; typedef struct _HAL_PROCESSOR_FEATURE { ULONG UsableFeatureBits; } HAL_PROCESSOR_FEATURE; typedef NTSTATUS (NTAPI *PHALIOREADWRITEHANDLER)( _In_ BOOLEAN fRead, _In_ ULONG dwAddr, _In_ ULONG dwSize, _Inout_ PULONG pdwData); typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { ULONG BadAddrBegin; ULONG BadAddrSize; ULONG OSVersionTrigger; PHALIOREADWRITEHANDLER IOHandler; } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST; #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) typedef VOID (NTAPI *PHALMCAINTERFACELOCK)(VOID); typedef VOID (NTAPI *PHALMCAINTERFACEUNLOCK)(VOID); typedef NTSTATUS (NTAPI *PHALMCAINTERFACEREADREGISTER)( _In_ UCHAR BankNumber, _Inout_ PVOID Exception); typedef struct _HAL_MCA_INTERFACE { PHALMCAINTERFACELOCK Lock; PHALMCAINTERFACEUNLOCK Unlock; PHALMCAINTERFACEREADREGISTER ReadRegister; } HAL_MCA_INTERFACE; typedef enum { ApicDestinationModePhysical = 1, ApicDestinationModeLogicalFlat, ApicDestinationModeLogicalClustered, ApicDestinationModeUnknown } HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE; #if defined(_AMD64_) struct _KTRAP_FRAME; struct _KEXCEPTION_FRAME; typedef ERROR_SEVERITY (NTAPI *PDRIVER_EXCPTN_CALLBACK)( _In_ PVOID Context, _In_ struct _KTRAP_FRAME *TrapFrame, _In_ struct _KEXCEPTION_FRAME *ExceptionFrame, _In_ PMCA_EXCEPTION Exception); #endif #if defined(_X86_) || defined(_IA64_) typedef #if defined(_IA64_) ERROR_SEVERITY #else VOID #endif (NTAPI *PDRIVER_EXCPTN_CALLBACK)( _In_ PVOID Context, _In_ PMCA_EXCEPTION BankLog); #endif typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK; typedef struct _MCA_DRIVER_INFO { PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback; PKDEFERRED_ROUTINE DpcCallback; PVOID DeviceContext; } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO; typedef struct _HAL_ERROR_INFO { ULONG Version; ULONG InitMaxSize; ULONG McaMaxSize; ULONG McaPreviousEventsCount; ULONG McaCorrectedEventsCount; ULONG McaKernelDeliveryFails; ULONG McaDriverDpcQueueFails; ULONG McaReserved; ULONG CmcMaxSize; ULONG CmcPollingInterval; ULONG CmcInterruptsCount; ULONG CmcKernelDeliveryFails; ULONG CmcDriverDpcQueueFails; ULONG CmcGetStateFails; ULONG CmcClearStateFails; ULONG CmcReserved; ULONGLONG CmcLogId; ULONG CpeMaxSize; ULONG CpePollingInterval; ULONG CpeInterruptsCount; ULONG CpeKernelDeliveryFails; ULONG CpeDriverDpcQueueFails; ULONG CpeGetStateFails; ULONG CpeClearStateFails; ULONG CpeInterruptSources; ULONGLONG CpeLogId; ULONGLONG KernelReserved[4]; } HAL_ERROR_INFO, *PHAL_ERROR_INFO; #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1) #define HAL_MCE_DISABLED ((ULONG)0) #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED #define HAL_CMC_DISABLED HAL_MCE_DISABLED #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED #define HAL_CPE_DISABLED HAL_MCE_DISABLED #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED #define HAL_MCA_DISABLED HAL_MCE_DISABLED typedef VOID (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( _In_ PVOID Context, _In_ PCMC_EXCEPTION CmcLog); typedef VOID (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( _In_ PVOID Context, _In_ PCPE_EXCEPTION CmcLog); typedef struct _CMC_DRIVER_INFO { PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback; PKDEFERRED_ROUTINE DpcCallback; PVOID DeviceContext; } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO; typedef struct _CPE_DRIVER_INFO { PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback; PKDEFERRED_ROUTINE DpcCallback; PVOID DeviceContext; } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO; #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_) #if defined(_IA64_) typedef NTSTATUS (*HALSENDCROSSPARTITIONIPI)( _In_ USHORT ProcessorID, _In_ UCHAR HardwareVector); typedef NTSTATUS (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)( _Out_ PULONG Vector, _Out_ PKIRQL Irql, _Inout_ PGROUP_AFFINITY Affinity, _Out_ PUCHAR HardwareVector); typedef VOID (*HALFREECROSSPARTITIONINTERRUPTVECTOR)( _In_ ULONG Vector, _In_ PGROUP_AFFINITY Affinity); typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE { HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi; HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector; HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector; } HAL_CROSS_PARTITION_IPI_INTERFACE; #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \ FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \ HalFreeCrossPartitionInterruptVector) #endif /* defined(_IA64_) */ typedef struct _HAL_PLATFORM_INFORMATION { ULONG PlatformFlags; } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION; #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L #define HAL_PLATFORM_DISABLE_PTCG 0x04L #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L /****************************************************************************** * Kernel Types * ******************************************************************************/ #define NX_SUPPORT_POLICY_ALWAYSOFF 0 #define NX_SUPPORT_POLICY_ALWAYSON 1 #define NX_SUPPORT_POLICY_OPTIN 2 #define NX_SUPPORT_POLICY_OPTOUT 3 _IRQL_requires_same_ _Function_class_(EXPAND_STACK_CALLOUT) typedef VOID (NTAPI EXPAND_STACK_CALLOUT)( _In_opt_ PVOID Parameter); typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT; typedef VOID (NTAPI *PTIMER_APC_ROUTINE)( _In_ PVOID TimerContext, _In_ ULONG TimerLowValue, _In_ LONG TimerHighValue); typedef enum _TIMER_SET_INFORMATION_CLASS { TimerSetCoalescableTimer, MaxTimerInfoClass } TIMER_SET_INFORMATION_CLASS; #if (NTDDI_VERSION >= NTDDI_WIN7) typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO { _In_ LARGE_INTEGER DueTime; _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine; _In_opt_ PVOID TimerContext; _In_opt_ struct _COUNTED_REASON_CONTEXT *WakeContext; _In_opt_ ULONG Period; _In_ ULONG TolerableDelay; _Out_opt_ PBOOLEAN PreviousState; } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO; #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #define XSTATE_LEGACY_FLOATING_POINT 0 #define XSTATE_LEGACY_SSE 1 #define XSTATE_GSSE 2 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT)) #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE)) #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE)) #define MAXIMUM_XSTATE_FEATURES 64 typedef struct _XSTATE_FEATURE { ULONG Offset; ULONG Size; } XSTATE_FEATURE, *PXSTATE_FEATURE; typedef struct _XSTATE_CONFIGURATION { ULONG64 EnabledFeatures; ULONG Size; ULONG OptimizedSave:1; XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; #define MAX_WOW64_SHARED_ENTRIES 16 typedef struct _KUSER_SHARED_DATA { ULONG TickCountLowDeprecated; ULONG TickCountMultiplier; volatile KSYSTEM_TIME InterruptTime; volatile KSYSTEM_TIME SystemTime; volatile KSYSTEM_TIME TimeZoneBias; USHORT ImageNumberLow; USHORT ImageNumberHigh; WCHAR NtSystemRoot[260]; ULONG MaxStackTraceDepth; ULONG CryptoExponent; ULONG TimeZoneId; ULONG LargePageMinimum; ULONG Reserved2[7]; NT_PRODUCT_TYPE NtProductType; BOOLEAN ProductTypeIsValid; ULONG NtMajorVersion; ULONG NtMinorVersion; BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; ULONG Reserved1; ULONG Reserved3; volatile ULONG TimeSlip; ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; ULONG AltArchitecturePad[1]; LARGE_INTEGER SystemExpirationDate; ULONG SuiteMask; BOOLEAN KdDebuggerEnabled; #if (NTDDI_VERSION >= NTDDI_WINXPSP2) UCHAR NXSupportPolicy; #endif volatile ULONG ActiveConsoleId; volatile ULONG DismountCount; ULONG ComPlusPackage; ULONG LastSystemRITEventTickCount; ULONG NumberOfPhysicalPages; BOOLEAN SafeBootMode; #if (NTDDI_VERSION >= NTDDI_WIN7) _ANONYMOUS_UNION union { UCHAR TscQpcData; _ANONYMOUS_STRUCT struct { UCHAR TscQpcEnabled:1; UCHAR TscQpcSpareFlag:1; UCHAR TscQpcShift:6; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; UCHAR TscQpcPad[2]; #endif #if (NTDDI_VERSION >= NTDDI_VISTA) _ANONYMOUS_UNION union { ULONG SharedDataFlags; _ANONYMOUS_STRUCT struct { ULONG DbgErrorPortPresent:1; ULONG DbgElevationEnabled:1; ULONG DbgVirtEnabled:1; ULONG DbgInstallerDetectEnabled:1; ULONG DbgSystemDllRelocated:1; ULONG DbgDynProcessorEnabled:1; ULONG DbgSEHValidationEnabled:1; ULONG SpareBits:25; } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME2; #else ULONG TraceLogging; #endif ULONG DataFlagsPad[1]; ULONGLONG TestRetInstruction; ULONG SystemCall; ULONG SystemCallReturn; ULONGLONG SystemCallPad[3]; _ANONYMOUS_UNION union { volatile KSYSTEM_TIME TickCount; volatile ULONG64 TickCountQuad; _ANONYMOUS_STRUCT struct { ULONG ReservedTickCountOverlay[3]; ULONG TickCountPad[1]; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME3; ULONG Cookie; ULONG CookiePad[1]; #if (NTDDI_VERSION >= NTDDI_WS03) LONGLONG ConsoleSessionForegroundProcessId; ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; #endif #if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_WIN7) USHORT UserModeGlobalLogger[16]; #else USHORT UserModeGlobalLogger[8]; ULONG HeapTracingPid[2]; ULONG CritSecTracingPid[2]; #endif ULONG ImageFileExecutionOptions; #if (NTDDI_VERSION >= NTDDI_VISTASP1) ULONG LangGenerationCount; #else /* 4 bytes padding */ #endif ULONGLONG Reserved5; volatile ULONG64 InterruptTimeBias; #endif #if (NTDDI_VERSION >= NTDDI_WIN7) volatile ULONG64 TscQpcBias; volatile ULONG ActiveProcessorCount; volatile USHORT ActiveGroupCount; USHORT Reserved4; volatile ULONG AitSamplingValue; volatile ULONG AppCompatFlag; ULONGLONG SystemDllNativeRelocation; ULONG SystemDllWowRelocation; ULONG XStatePad[1]; XSTATE_CONFIGURATION XState; #endif } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; #if (NTDDI_VERSION >= NTDDI_VISTA) extern NTSYSAPI volatile CCHAR KeNumberProcessors; #elif (NTDDI_VERSION >= NTDDI_WINXP) extern NTSYSAPI CCHAR KeNumberProcessors; #else extern PCCHAR KeNumberProcessors; #endif /****************************************************************************** * Kernel Debugger Types * ******************************************************************************/ typedef struct _DEBUG_DEVICE_ADDRESS { UCHAR Type; BOOLEAN Valid; UCHAR Reserved[2]; PUCHAR TranslatedAddress; ULONG Length; } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; typedef struct _DEBUG_MEMORY_REQUIREMENTS { PHYSICAL_ADDRESS Start; PHYSICAL_ADDRESS MaxEnd; PVOID VirtualAddress; ULONG Length; BOOLEAN Cached; BOOLEAN Aligned; } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; typedef struct _DEBUG_DEVICE_DESCRIPTOR { ULONG Bus; ULONG Slot; USHORT Segment; USHORT VendorID; USHORT DeviceID; UCHAR BaseClass; UCHAR SubClass; UCHAR ProgIf; BOOLEAN Initialized; BOOLEAN Configured; DEBUG_DEVICE_ADDRESS BaseAddress[6]; DEBUG_MEMORY_REQUIREMENTS Memory; } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; typedef NTSTATUS (NTAPI *pKdSetupPciDeviceForDebugging)( _In_opt_ PVOID LoaderBlock, _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); typedef NTSTATUS (NTAPI *pKdReleasePciDeviceForDebugging)( _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); typedef PVOID (NTAPI *pKdGetAcpiTablePhase0)( _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, _In_ ULONG Signature); typedef VOID (NTAPI *pKdCheckPowerButton)(VOID); #if (NTDDI_VERSION >= NTDDI_VISTA) typedef PVOID (NTAPI *pKdMapPhysicalMemory64)( _In_ PHYSICAL_ADDRESS PhysicalAddress, _In_ ULONG NumberPages, _In_ BOOLEAN FlushCurrentTLB); typedef VOID (NTAPI *pKdUnmapVirtualAddress)( _In_ PVOID VirtualAddress, _In_ ULONG NumberPages, _In_ BOOLEAN FlushCurrentTLB); #else typedef PVOID (NTAPI *pKdMapPhysicalMemory64)( _In_ PHYSICAL_ADDRESS PhysicalAddress, _In_ ULONG NumberPages); typedef VOID (NTAPI *pKdUnmapVirtualAddress)( _In_ PVOID VirtualAddress, _In_ ULONG NumberPages); #endif typedef ULONG (NTAPI *pKdGetPciDataByOffset)( _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); typedef ULONG (NTAPI *pKdSetPciDataByOffset)( _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); /****************************************************************************** * Memory manager Types * ******************************************************************************/ typedef struct _PHYSICAL_MEMORY_RANGE { PHYSICAL_ADDRESS BaseAddress; LARGE_INTEGER NumberOfBytes; } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; typedef NTSTATUS (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( _In_ PMDL DestinationMdl, _In_ PMDL SourceMdl, _In_ PVOID Context); typedef enum _MM_ROTATE_DIRECTION { MmToFrameBuffer, MmToFrameBufferNoCopy, MmToRegularMemory, MmToRegularMemoryNoCopy, MmMaximumRotateDirection } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION; /****************************************************************************** * Process Manager Types * ******************************************************************************/ #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 typedef struct _QUOTA_LIMITS { SIZE_T PagedPoolLimit; SIZE_T NonPagedPoolLimit; SIZE_T MinimumWorkingSetSize; SIZE_T MaximumWorkingSetSize; SIZE_T PagefileLimit; LARGE_INTEGER TimeLimit; } QUOTA_LIMITS, *PQUOTA_LIMITS; typedef union _RATE_QUOTA_LIMIT { ULONG RateData; _ANONYMOUS_STRUCT struct { ULONG RatePercent:7; ULONG Reserved0:25; } DUMMYSTRUCTNAME; } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT; typedef struct _QUOTA_LIMITS_EX { SIZE_T PagedPoolLimit; SIZE_T NonPagedPoolLimit; SIZE_T MinimumWorkingSetSize; SIZE_T MaximumWorkingSetSize; SIZE_T PagefileLimit; LARGE_INTEGER TimeLimit; SIZE_T WorkingSetLimit; SIZE_T Reserved2; SIZE_T Reserved3; SIZE_T Reserved4; ULONG Flags; RATE_QUOTA_LIMIT CpuRateLimit; } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; typedef struct _IO_COUNTERS { ULONGLONG ReadOperationCount; ULONGLONG WriteOperationCount; ULONGLONG OtherOperationCount; ULONGLONG ReadTransferCount; ULONGLONG WriteTransferCount; ULONGLONG OtherTransferCount; } IO_COUNTERS, *PIO_COUNTERS; typedef struct _VM_COUNTERS { SIZE_T PeakVirtualSize; SIZE_T VirtualSize; ULONG PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; } VM_COUNTERS, *PVM_COUNTERS; typedef struct _VM_COUNTERS_EX { SIZE_T PeakVirtualSize; SIZE_T VirtualSize; ULONG PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; SIZE_T PrivateUsage; } VM_COUNTERS_EX, *PVM_COUNTERS_EX; #define MAX_HW_COUNTERS 16 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001 typedef enum _HARDWARE_COUNTER_TYPE { PMCCounter, MaxHardwareCounterType } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE; typedef struct _HARDWARE_COUNTER { HARDWARE_COUNTER_TYPE Type; ULONG Reserved; ULONG64 Index; } HARDWARE_COUNTER, *PHARDWARE_COUNTER; typedef struct _POOLED_USAGE_AND_LIMITS { SIZE_T PeakPagedPoolUsage; SIZE_T PagedPoolUsage; SIZE_T PagedPoolLimit; SIZE_T PeakNonPagedPoolUsage; SIZE_T NonPagedPoolUsage; SIZE_T NonPagedPoolLimit; SIZE_T PeakPagefileUsage; SIZE_T PagefileUsage; SIZE_T PagefileLimit; } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; typedef struct _PROCESS_ACCESS_TOKEN { HANDLE Token; HANDLE Thread; } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1)) typedef struct _PROCESS_EXCEPTION_PORT { _In_ HANDLE ExceptionPortHandle; _Inout_ ULONG StateFlags; } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT; typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( _In_ HANDLE ParentId, _In_ HANDLE ProcessId, _In_ BOOLEAN Create); typedef struct _PS_CREATE_NOTIFY_INFO { _In_ SIZE_T Size; _ANONYMOUS_UNION union { _In_ ULONG Flags; _ANONYMOUS_STRUCT struct { _In_ ULONG FileOpenNameAvailable:1; _In_ ULONG Reserved:31; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; _In_ HANDLE ParentProcessId; _In_ CLIENT_ID CreatingThreadId; _Inout_ struct _FILE_OBJECT *FileObject; _In_ PCUNICODE_STRING ImageFileName; _In_opt_ PCUNICODE_STRING CommandLine; _Inout_ NTSTATUS CreationStatus; } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( _Inout_ PEPROCESS Process, _In_ HANDLE ProcessId, _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo); typedef VOID (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( _In_ HANDLE ProcessId, _In_ HANDLE ThreadId, _In_ BOOLEAN Create); #define IMAGE_ADDRESSING_MODE_32BIT 3 typedef struct _IMAGE_INFO { _ANONYMOUS_UNION union { ULONG Properties; _ANONYMOUS_STRUCT struct { ULONG ImageAddressingMode:8; ULONG SystemModeImage:1; ULONG ImageMappedToAllPids:1; ULONG ExtendedInfoPresent:1; ULONG Reserved:21; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; PVOID ImageBase; ULONG ImageSelector; SIZE_T ImageSize; ULONG ImageSectionNumber; } IMAGE_INFO, *PIMAGE_INFO; typedef struct _IMAGE_INFO_EX { SIZE_T Size; IMAGE_INFO ImageInfo; struct _FILE_OBJECT *FileObject; } IMAGE_INFO_EX, *PIMAGE_INFO_EX; typedef VOID (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( _In_ PUNICODE_STRING FullImageName, _In_ HANDLE ProcessId, _In_ PIMAGE_INFO ImageInfo); #define THREAD_CSWITCH_PMU_DISABLE FALSE #define THREAD_CSWITCH_PMU_ENABLE TRUE #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16 typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; PVOID StackBase; PVOID StackLimit; PVOID SubSystemTib; _ANONYMOUS_UNION union { PVOID FiberData; ULONG Version; } DUMMYUNIONNAME; PVOID ArbitraryUserPointer; struct _NT_TIB *Self; } NT_TIB, *PNT_TIB; typedef struct _NT_TIB32 { ULONG ExceptionList; ULONG StackBase; ULONG StackLimit; ULONG SubSystemTib; _ANONYMOUS_UNION union { ULONG FiberData; ULONG Version; } DUMMYUNIONNAME; ULONG ArbitraryUserPointer; ULONG Self; } NT_TIB32,*PNT_TIB32; typedef struct _NT_TIB64 { ULONG64 ExceptionList; ULONG64 StackBase; ULONG64 StackLimit; ULONG64 SubSystemTib; _ANONYMOUS_UNION union { ULONG64 FiberData; ULONG Version; } DUMMYUNIONNAME; ULONG64 ArbitraryUserPointer; ULONG64 Self; } NT_TIB64,*PNT_TIB64; typedef enum _PROCESSINFOCLASS { ProcessBasicInformation, ProcessQuotaLimits, ProcessIoCounters, ProcessVmCounters, ProcessTimes, ProcessBasePriority, ProcessRaisePriority, ProcessDebugPort, ProcessExceptionPort, ProcessAccessToken, ProcessLdtInformation, ProcessLdtSize, ProcessDefaultHardErrorMode, ProcessIoPortHandlers, ProcessPooledUsageAndLimits, ProcessWorkingSetWatch, ProcessUserModeIOPL, ProcessEnableAlignmentFaultFixup, ProcessPriorityClass, ProcessWx86Information, ProcessHandleCount, ProcessAffinityMask, ProcessPriorityBoost, ProcessDeviceMap, ProcessSessionInformation, ProcessForegroundInformation, ProcessWow64Information, ProcessImageFileName, ProcessLUIDDeviceMapsEnabled, ProcessBreakOnTermination, ProcessDebugObjectHandle, ProcessDebugFlags, ProcessHandleTracing, ProcessIoPriority, ProcessExecuteFlags, ProcessTlsInformation, ProcessCookie, ProcessImageInformation, ProcessCycleTime, ProcessPagePriority, ProcessInstrumentationCallback, ProcessThreadStackAllocation, ProcessWorkingSetWatchEx, ProcessImageFileNameWin32, ProcessImageFileMapping, ProcessAffinityUpdateMode, ProcessMemoryAllocationMode, ProcessGroupInformation, ProcessTokenVirtualizationEnabled, ProcessConsoleHostProcess, ProcessWindowInformation, MaxProcessInfoClass } PROCESSINFOCLASS; typedef enum _THREADINFOCLASS { ThreadBasicInformation, ThreadTimes, ThreadPriority, ThreadBasePriority, ThreadAffinityMask, ThreadImpersonationToken, ThreadDescriptorTableEntry, ThreadEnableAlignmentFaultFixup, ThreadEventPair_Reusable, ThreadQuerySetWin32StartAddress, ThreadZeroTlsCell, ThreadPerformanceCount, ThreadAmILastThread, ThreadIdealProcessor, ThreadPriorityBoost, ThreadSetTlsArrayAddress, ThreadIsIoPending, ThreadHideFromDebugger, ThreadBreakOnTermination, ThreadSwitchLegacyState, ThreadIsTerminated, ThreadLastSystemCall, ThreadIoPriority, ThreadCycleTime, ThreadPagePriority, ThreadActualBasePriority, ThreadTebInformation, ThreadCSwitchMon, ThreadCSwitchPmu, ThreadWow64Context, ThreadGroupInformation, ThreadUmsInformation, ThreadCounterProfiling, ThreadIdealProcessorEx, MaxThreadInfoClass } THREADINFOCLASS; typedef struct _PAGE_PRIORITY_INFORMATION { ULONG PagePriority; } PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION; typedef struct _PROCESS_WS_WATCH_INFORMATION { PVOID FaultingPc; PVOID FaultingVa; } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; typedef struct _PROCESS_BASIC_INFORMATION { NTSTATUS ExitStatus; struct _PEB *PebBaseAddress; ULONG_PTR AffinityMask; KPRIORITY BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { SIZE_T Size; PROCESS_BASIC_INFORMATION BasicInfo; _ANONYMOUS_UNION union { ULONG Flags; _ANONYMOUS_STRUCT struct { ULONG IsProtectedProcess:1; ULONG IsWow64Process:1; ULONG IsProcessDeleting:1; ULONG IsCrossSessionCreate:1; ULONG SpareBits:28; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; } PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION; typedef struct _PROCESS_DEVICEMAP_INFORMATION { _ANONYMOUS_UNION union { struct { HANDLE DirectoryHandle; } Set; struct { ULONG DriveMap; UCHAR DriveType[32]; } Query; } DUMMYUNIONNAME; } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { _ANONYMOUS_UNION union { struct { HANDLE DirectoryHandle; } Set; struct { ULONG DriveMap; UCHAR DriveType[32]; } Query; } DUMMYUNIONNAME; ULONG Flags; } PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX; typedef struct _PROCESS_SESSION_INFORMATION { ULONG SessionId; } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; typedef struct _PROCESS_HANDLE_TRACING_ENABLE { ULONG Flags; } PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE; typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX { ULONG Flags; ULONG TotalSlots; } PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX; typedef struct _PROCESS_HANDLE_TRACING_ENTRY { HANDLE Handle; CLIENT_ID ClientId; ULONG Type; PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS]; } PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY; typedef struct _PROCESS_HANDLE_TRACING_QUERY { HANDLE Handle; ULONG TotalTraces; PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; } PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; extern NTKERNELAPI PEPROCESS PsInitialSystemProcess; /****************************************************************************** * Runtime Library Types * ******************************************************************************/ #ifndef _RTL_RUN_ONCE_DEF #define _RTL_RUN_ONCE_DEF #define RTL_RUN_ONCE_INIT {0} #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL #define RTL_RUN_ONCE_ASYNC 0x00000002UL #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2 #define RTL_HASH_ALLOCATED_HEADER 0x00000001 #define RTL_HASH_RESERVED_SIGNATURE 0 /* RtlVerifyVersionInfo() ComparisonType */ #define VER_EQUAL 1 #define VER_GREATER 2 #define VER_GREATER_EQUAL 3 #define VER_LESS 4 #define VER_LESS_EQUAL 5 #define VER_AND 6 #define VER_OR 7 #define VER_CONDITION_MASK 7 #define VER_NUM_BITS_PER_CONDITION_MASK 3 /* RtlVerifyVersionInfo() TypeMask */ #define VER_MINORVERSION 0x0000001 #define VER_MAJORVERSION 0x0000002 #define VER_BUILDNUMBER 0x0000004 #define VER_PLATFORMID 0x0000008 #define VER_SERVICEPACKMINOR 0x0000010 #define VER_SERVICEPACKMAJOR 0x0000020 #define VER_SUITENAME 0x0000040 #define VER_PRODUCT_TYPE 0x0000080 #define VER_NT_WORKSTATION 0x0000001 #define VER_NT_DOMAIN_CONTROLLER 0x0000002 #define VER_NT_SERVER 0x0000003 #define VER_PLATFORM_WIN32s 0 #define VER_PLATFORM_WIN32_WINDOWS 1 #define VER_PLATFORM_WIN32_NT 2 typedef union _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE; _Function_class_(RTL_RUN_ONCE_INIT_FN) _IRQL_requires_same_ typedef ULONG /* LOGICAL */ (NTAPI *PRTL_RUN_ONCE_INIT_FN) ( _Inout_ PRTL_RUN_ONCE RunOnce, _Inout_opt_ PVOID Parameter, _Inout_opt_ PVOID *Context); #endif /* _RTL_RUN_ONCE_DEF */ typedef enum _TABLE_SEARCH_RESULT { TableEmptyTree, TableFoundNode, TableInsertAsLeft, TableInsertAsRight } TABLE_SEARCH_RESULT; typedef enum _RTL_GENERIC_COMPARE_RESULTS { GenericLessThan, GenericGreaterThan, GenericEqual } RTL_GENERIC_COMPARE_RESULTS; // Forwarder struct _RTL_AVL_TABLE; _IRQL_requires_same_ _Function_class_(RTL_AVL_COMPARE_ROUTINE) typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_AVL_COMPARE_ROUTINE) ( _In_ struct _RTL_AVL_TABLE *Table, _In_ PVOID FirstStruct, _In_ PVOID SecondStruct); typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE; _IRQL_requires_same_ _Function_class_(RTL_AVL_ALLOCATE_ROUTINE) __drv_allocatesMem(Mem) typedef PVOID (NTAPI RTL_AVL_ALLOCATE_ROUTINE) ( _In_ struct _RTL_AVL_TABLE *Table, _In_ CLONG ByteSize); typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE; _IRQL_requires_same_ _Function_class_(RTL_AVL_FREE_ROUTINE) typedef VOID (NTAPI RTL_AVL_FREE_ROUTINE) ( _In_ struct _RTL_AVL_TABLE *Table, _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE; _IRQL_requires_same_ _Function_class_(RTL_AVL_MATCH_FUNCTION) typedef NTSTATUS (NTAPI RTL_AVL_MATCH_FUNCTION) ( _In_ struct _RTL_AVL_TABLE *Table, _In_ PVOID UserData, _In_ PVOID MatchData); typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION; typedef struct _RTL_BALANCED_LINKS { struct _RTL_BALANCED_LINKS *Parent; struct _RTL_BALANCED_LINKS *LeftChild; struct _RTL_BALANCED_LINKS *RightChild; CHAR Balance; UCHAR Reserved[3]; } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS; typedef struct _RTL_AVL_TABLE { RTL_BALANCED_LINKS BalancedRoot; PVOID OrderedPointer; ULONG WhichOrderedElement; ULONG NumberGenericTableElements; ULONG DepthOfTree; PRTL_BALANCED_LINKS RestartKey; ULONG DeleteCount; PRTL_AVL_COMPARE_ROUTINE CompareRoutine; PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine; PRTL_AVL_FREE_ROUTINE FreeRoutine; PVOID TableContext; } RTL_AVL_TABLE, *PRTL_AVL_TABLE; typedef struct _RTL_SPLAY_LINKS { struct _RTL_SPLAY_LINKS *Parent; struct _RTL_SPLAY_LINKS *LeftChild; struct _RTL_SPLAY_LINKS *RightChild; } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; #ifndef RTL_USE_AVL_TABLES struct _RTL_GENERIC_TABLE; _IRQL_requires_same_ _Function_class_(RTL_GENERIC_COMPARE_ROUTINE) typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_GENERIC_COMPARE_ROUTINE) ( _In_ struct _RTL_GENERIC_TABLE *Table, _In_ PVOID FirstStruct, _In_ PVOID SecondStruct); typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE; _IRQL_requires_same_ _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE) __drv_allocatesMem(Mem) typedef PVOID (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) ( _In_ struct _RTL_GENERIC_TABLE *Table, _In_ CLONG ByteSize); typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE; _IRQL_requires_same_ _Function_class_(RTL_GENERIC_FREE_ROUTINE) typedef VOID (NTAPI RTL_GENERIC_FREE_ROUTINE) ( _In_ struct _RTL_GENERIC_TABLE *Table, _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE; typedef struct _RTL_GENERIC_TABLE { PRTL_SPLAY_LINKS TableRoot; LIST_ENTRY InsertOrderList; PLIST_ENTRY OrderedPointer; ULONG WhichOrderedElement; ULONG NumberGenericTableElements; PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine; PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine; PRTL_GENERIC_FREE_ROUTINE FreeRoutine; PVOID TableContext; } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; #endif /* !RTL_USE_AVL_TABLES */ #ifdef RTL_USE_AVL_TABLES #undef RTL_GENERIC_COMPARE_ROUTINE #undef PRTL_GENERIC_COMPARE_ROUTINE #undef RTL_GENERIC_ALLOCATE_ROUTINE #undef PRTL_GENERIC_ALLOCATE_ROUTINE #undef RTL_GENERIC_FREE_ROUTINE #undef PRTL_GENERIC_FREE_ROUTINE #undef RTL_GENERIC_TABLE #undef PRTL_GENERIC_TABLE #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE #define RTL_GENERIC_TABLE RTL_AVL_TABLE #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE #endif /* RTL_USE_AVL_TABLES */ #define RTL_HASH_ALLOCATED_HEADER 0x00000001 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY { LIST_ENTRY Linkage; ULONG_PTR Signature; } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY; typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT { PLIST_ENTRY ChainHead; PLIST_ENTRY PrevLinkage; ULONG_PTR Signature; } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT; typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR { RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry; PLIST_ENTRY ChainHead; ULONG BucketIndex; } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR; typedef struct _RTL_DYNAMIC_HASH_TABLE { ULONG Flags; ULONG Shift; ULONG TableSize; ULONG Pivot; ULONG DivisorMask; ULONG NumEntries; ULONG NonEmptyBuckets; ULONG NumEnumerators; PVOID Directory; } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE; typedef struct _OSVERSIONINFOA { ULONG dwOSVersionInfoSize; ULONG dwMajorVersion; ULONG dwMinorVersion; ULONG dwBuildNumber; ULONG dwPlatformId; CHAR szCSDVersion[128]; } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; typedef struct _OSVERSIONINFOW { ULONG dwOSVersionInfoSize; ULONG dwMajorVersion; ULONG dwMinorVersion; ULONG dwBuildNumber; ULONG dwPlatformId; WCHAR szCSDVersion[128]; } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; typedef struct _OSVERSIONINFOEXA { ULONG dwOSVersionInfoSize; ULONG dwMajorVersion; ULONG dwMinorVersion; ULONG dwBuildNumber; ULONG dwPlatformId; CHAR szCSDVersion[128]; USHORT wServicePackMajor; USHORT wServicePackMinor; USHORT wSuiteMask; UCHAR wProductType; UCHAR wReserved; } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; typedef struct _OSVERSIONINFOEXW { ULONG dwOSVersionInfoSize; ULONG dwMajorVersion; ULONG dwMinorVersion; ULONG dwBuildNumber; ULONG dwPlatformId; WCHAR szCSDVersion[128]; USHORT wServicePackMajor; USHORT wServicePackMinor; USHORT wSuiteMask; UCHAR wProductType; UCHAR wReserved; } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; #ifdef UNICODE typedef OSVERSIONINFOEXW OSVERSIONINFOEX; typedef POSVERSIONINFOEXW POSVERSIONINFOEX; typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; typedef OSVERSIONINFOW OSVERSIONINFO; typedef POSVERSIONINFOW POSVERSIONINFO; typedef LPOSVERSIONINFOW LPOSVERSIONINFO; #else typedef OSVERSIONINFOEXA OSVERSIONINFOEX; typedef POSVERSIONINFOEXA POSVERSIONINFOEX; typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; typedef OSVERSIONINFOA OSVERSIONINFO; typedef POSVERSIONINFOA POSVERSIONINFO; typedef LPOSVERSIONINFOA LPOSVERSIONINFO; #endif /* UNICODE */ #define HASH_ENTRY_KEY(x) ((x)->Signature) /****************************************************************************** * Security Manager Types * ******************************************************************************/ #define SE_UNSOLICITED_INPUT_PRIVILEGE 6 typedef enum _WELL_KNOWN_SID_TYPE { WinNullSid = 0, WinWorldSid = 1, WinLocalSid = 2, WinCreatorOwnerSid = 3, WinCreatorGroupSid = 4, WinCreatorOwnerServerSid = 5, WinCreatorGroupServerSid = 6, WinNtAuthoritySid = 7, WinDialupSid = 8, WinNetworkSid = 9, WinBatchSid = 10, WinInteractiveSid = 11, WinServiceSid = 12, WinAnonymousSid = 13, WinProxySid = 14, WinEnterpriseControllersSid = 15, WinSelfSid = 16, WinAuthenticatedUserSid = 17, WinRestrictedCodeSid = 18, WinTerminalServerSid = 19, WinRemoteLogonIdSid = 20, WinLogonIdsSid = 21, WinLocalSystemSid = 22, WinLocalServiceSid = 23, WinNetworkServiceSid = 24, WinBuiltinDomainSid = 25, WinBuiltinAdministratorsSid = 26, WinBuiltinUsersSid = 27, WinBuiltinGuestsSid = 28, WinBuiltinPowerUsersSid = 29, WinBuiltinAccountOperatorsSid = 30, WinBuiltinSystemOperatorsSid = 31, WinBuiltinPrintOperatorsSid = 32, WinBuiltinBackupOperatorsSid = 33, WinBuiltinReplicatorSid = 34, WinBuiltinPreWindows2000CompatibleAccessSid = 35, WinBuiltinRemoteDesktopUsersSid = 36, WinBuiltinNetworkConfigurationOperatorsSid = 37, WinAccountAdministratorSid = 38, WinAccountGuestSid = 39, WinAccountKrbtgtSid = 40, WinAccountDomainAdminsSid = 41, WinAccountDomainUsersSid = 42, WinAccountDomainGuestsSid = 43, WinAccountComputersSid = 44, WinAccountControllersSid = 45, WinAccountCertAdminsSid = 46, WinAccountSchemaAdminsSid = 47, WinAccountEnterpriseAdminsSid = 48, WinAccountPolicyAdminsSid = 49, WinAccountRasAndIasServersSid = 50, WinNTLMAuthenticationSid = 51, WinDigestAuthenticationSid = 52, WinSChannelAuthenticationSid = 53, WinThisOrganizationSid = 54, WinOtherOrganizationSid = 55, WinBuiltinIncomingForestTrustBuildersSid = 56, WinBuiltinPerfMonitoringUsersSid = 57, WinBuiltinPerfLoggingUsersSid = 58, WinBuiltinAuthorizationAccessSid = 59, WinBuiltinTerminalServerLicenseServersSid = 60, WinBuiltinDCOMUsersSid = 61, WinBuiltinIUsersSid = 62, WinIUserSid = 63, WinBuiltinCryptoOperatorsSid = 64, WinUntrustedLabelSid = 65, WinLowLabelSid = 66, WinMediumLabelSid = 67, WinHighLabelSid = 68, WinSystemLabelSid = 69, WinWriteRestrictedCodeSid = 70, WinCreatorOwnerRightsSid = 71, WinCacheablePrincipalsGroupSid = 72, WinNonCacheablePrincipalsGroupSid = 73, WinEnterpriseReadonlyControllersSid = 74, WinAccountReadonlyControllersSid = 75, WinBuiltinEventLogReadersGroup = 76, WinNewEnterpriseReadonlyControllersSid = 77, WinBuiltinCertSvcDComAccessGroup = 78, WinMediumPlusLabelSid = 79, WinLocalLogonSid = 80, WinConsoleLogonSid = 81, WinThisOrganizationCertificateSid = 82, } WELL_KNOWN_SID_TYPE; #if defined(_M_IX86) #define PAUSE_PROCESSOR YieldProcessor(); #define KERNEL_STACK_SIZE 12288 #define KERNEL_LARGE_STACK_SIZE 61440 #define KERNEL_LARGE_STACK_COMMIT 12288 #define SIZE_OF_80387_REGISTERS 80 #if !defined(RC_INVOKED) #define CONTEXT_i386 0x10000 #define CONTEXT_i486 0x10000 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L) #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L) #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L) #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L) #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L) #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L) #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ CONTEXT_EXTENDED_REGISTERS) #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L) #endif /* !defined(RC_INVOKED) */ typedef struct _FLOATING_SAVE_AREA { ULONG ControlWord; ULONG StatusWord; ULONG TagWord; ULONG ErrorOffset; ULONG ErrorSelector; ULONG DataOffset; ULONG DataSelector; UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; ULONG Cr0NpxState; } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; #include "pshpack4.h" typedef struct _CONTEXT { ULONG ContextFlags; ULONG Dr0; ULONG Dr1; ULONG Dr2; ULONG Dr3; ULONG Dr6; ULONG Dr7; FLOATING_SAVE_AREA FloatSave; ULONG SegGs; ULONG SegFs; ULONG SegEs; ULONG SegDs; ULONG Edi; ULONG Esi; ULONG Ebx; ULONG Edx; ULONG Ecx; ULONG Eax; ULONG Ebp; ULONG Eip; ULONG SegCs; ULONG EFlags; ULONG Esp; ULONG SegSs; UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; } CONTEXT; #include "poppack.h" #define KeGetPcr() PCR #define PCR_MINOR_VERSION 1 #define PCR_MAJOR_VERSION 1 typedef struct _KPCR { union { NT_TIB NtTib; struct { struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; PVOID Used_StackBase; PVOID Spare2; PVOID TssCopy; ULONG ContextSwitches; KAFFINITY SetMemberCopy; PVOID Used_Self; }; }; struct _KPCR *SelfPcr; struct _KPRCB *Prcb; KIRQL Irql; ULONG IRR; ULONG IrrActive; ULONG IDR; PVOID KdVersionBlock; struct _KIDTENTRY *IDT; struct _KGDTENTRY *GDT; struct _KTSS *TSS; USHORT MajorVersion; USHORT MinorVersion; KAFFINITY SetMember; ULONG StallScaleFactor; UCHAR SpareUnused; UCHAR Number; UCHAR Spare0; UCHAR SecondLevelCacheAssociativity; ULONG VdmAlert; ULONG KernelReserved[14]; ULONG SecondLevelCacheSize; ULONG HalReserved[16]; } KPCR, *PKPCR; FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID) { return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); } extern NTKERNELAPI PVOID MmHighestUserAddress; extern NTKERNELAPI PVOID MmSystemRangeStart; extern NTKERNELAPI ULONG MmUserProbeAddress; #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress #define MM_SYSTEM_RANGE_START MmSystemRangeStart #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_) #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_ extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_; #else #define MM_USER_PROBE_ADDRESS MmUserProbeAddress #endif #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START #define MM_SYSTEM_SPACE_END 0xFFFFFFFF #if !defined (_X86PAE_) #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000 #else #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 #endif #elif defined(_M_AMD64) #define PAUSE_PROCESSOR YieldProcessor(); #define KERNEL_STACK_SIZE 0x6000 #define KERNEL_LARGE_STACK_SIZE 0x12000 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000 #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 #if !defined(RC_INVOKED) #define CONTEXT_AMD64 0x100000 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L) #define CONTEXT_EXCEPTION_ACTIVE 0x8000000 #define CONTEXT_SERVICE_ACTIVE 0x10000000 #define CONTEXT_EXCEPTION_REQUEST 0x40000000 #define CONTEXT_EXCEPTION_REPORTING 0x80000000 #endif /* !defined(RC_INVOKED) */ #define INITIAL_MXCSR 0x1f80 #define INITIAL_FPCSR 0x027f typedef struct DECLSPEC_ALIGN(16) _CONTEXT { ULONG64 P1Home; ULONG64 P2Home; ULONG64 P3Home; ULONG64 P4Home; ULONG64 P5Home; ULONG64 P6Home; ULONG ContextFlags; ULONG MxCsr; USHORT SegCs; USHORT SegDs; USHORT SegEs; USHORT SegFs; USHORT SegGs; USHORT SegSs; ULONG EFlags; ULONG64 Dr0; ULONG64 Dr1; ULONG64 Dr2; ULONG64 Dr3; ULONG64 Dr6; ULONG64 Dr7; ULONG64 Rax; ULONG64 Rcx; ULONG64 Rdx; ULONG64 Rbx; ULONG64 Rsp; ULONG64 Rbp; ULONG64 Rsi; ULONG64 Rdi; ULONG64 R8; ULONG64 R9; ULONG64 R10; ULONG64 R11; ULONG64 R12; ULONG64 R13; ULONG64 R14; ULONG64 R15; ULONG64 Rip; union { XMM_SAVE_AREA32 FltSave; struct { M128A Header[2]; M128A Legacy[8]; M128A Xmm0; M128A Xmm1; M128A Xmm2; M128A Xmm3; M128A Xmm4; M128A Xmm5; M128A Xmm6; M128A Xmm7; M128A Xmm8; M128A Xmm9; M128A Xmm10; M128A Xmm11; M128A Xmm12; M128A Xmm13; M128A Xmm14; M128A Xmm15; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; M128A VectorRegister[26]; ULONG64 VectorControl; ULONG64 DebugControl; ULONG64 LastBranchToRip; ULONG64 LastBranchFromRip; ULONG64 LastExceptionToRip; ULONG64 LastExceptionFromRip; } CONTEXT; #define PCR_MINOR_VERSION 1 #define PCR_MAJOR_VERSION 1 typedef struct _KPCR { _ANONYMOUS_UNION union { NT_TIB NtTib; _ANONYMOUS_STRUCT struct { union _KGDTENTRY64 *GdtBase; struct _KTSS64 *TssBase; ULONG64 UserRsp; struct _KPCR *Self; struct _KPRCB *CurrentPrcb; PKSPIN_LOCK_QUEUE LockArray; PVOID Used_Self; }; }; union _KIDTENTRY64 *IdtBase; ULONG64 Unused[2]; KIRQL Irql; UCHAR SecondLevelCacheAssociativity; UCHAR ObsoleteNumber; UCHAR Fill0; ULONG Unused0[3]; USHORT MajorVersion; USHORT MinorVersion; ULONG StallScaleFactor; PVOID Unused1[3]; ULONG KernelReserved[15]; ULONG SecondLevelCacheSize; ULONG HalReserved[16]; ULONG Unused2; PVOID KdVersionBlock; PVOID Unused3; ULONG PcrAlign1[24]; } KPCR, *PKPCR; FORCEINLINE PKPCR KeGetPcr(VOID) { return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self)); } FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID) { return (ULONG)__readgsword(0x184); } #define PTI_SHIFT 12L #define PDI_SHIFT 21L #define PPI_SHIFT 30L #define PXI_SHIFT 39L #define PTE_PER_PAGE 512 #define PDE_PER_PAGE 512 #define PPE_PER_PAGE 512 #define PXE_PER_PAGE 512 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) #define PPI_MASK (PPE_PER_PAGE - 1) #define PXI_MASK (PXE_PER_PAGE - 1) #define PXE_BASE 0xFFFFF6FB7DBED000ULL #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL #define PPE_BASE 0xFFFFF6FB7DA00000ULL #define PDE_BASE 0xFFFFF6FB40000000ULL #define PTE_BASE 0xFFFFF68000000000ULL #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL extern NTKERNELAPI PVOID MmHighestUserAddress; extern NTKERNELAPI PVOID MmSystemRangeStart; extern NTKERNELAPI ULONG64 MmUserProbeAddress; #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress #define MM_SYSTEM_RANGE_START MmSystemRangeStart #define MM_USER_PROBE_ADDRESS MmUserProbeAddress #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL #elif defined(_M_IA64) #elif defined(_M_PPC) #elif defined(_M_MIPS) #elif defined(_M_ARM) #else #error Unknown Architecture #endif /****************************************************************************** * Executive Functions * ******************************************************************************/ static __inline PVOID ExAllocateFromZone( IN PZONE_HEADER Zone) { if (Zone->FreeList.Next) Zone->FreeList.Next = Zone->FreeList.Next->Next; return (PVOID) Zone->FreeList.Next; } static __inline PVOID ExFreeToZone( IN PZONE_HEADER Zone, IN PVOID Block) { ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); return ((PSINGLE_LIST_ENTRY) Block)->Next; } /* * PVOID * ExInterlockedAllocateFromZone( * IN PZONE_HEADER Zone, * IN PKSPIN_LOCK Lock) */ #define ExInterlockedAllocateFromZone(Zone, Lock) \ ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) /* PVOID * ExInterlockedFreeToZone( * IN PZONE_HEADER Zone, * IN PVOID Block, * IN PKSPIN_LOCK Lock); */ #define ExInterlockedFreeToZone(Zone, Block, Lock) \ ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock) /* * BOOLEAN * ExIsFullZone( * IN PZONE_HEADER Zone) */ #define ExIsFullZone(Zone) \ ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) /* BOOLEAN * ExIsObjectInFirstZoneSegment( * IN PZONE_HEADER Zone, * IN PVOID Object); */ #define ExIsObjectInFirstZoneSegment(Zone,Object) \ ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ (Zone)->TotalSegmentSize)) ) #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite #define ExAcquireResourceShared ExAcquireResourceSharedLite #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite #define ExDeleteResource ExDeleteResourceLite #define ExInitializeResource ExInitializeResourceLite #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite #define ExReleaseResourceForThread ExReleaseResourceForThreadLite #ifndef _M_IX86 #define RESULT_ZERO 0 #define RESULT_NEGATIVE 1 #define RESULT_POSITIVE 2 #endif typedef enum _INTERLOCKED_RESULT { ResultNegative = RESULT_NEGATIVE, ResultZero = RESULT_ZERO, ResultPositive = RESULT_POSITIVE } INTERLOCKED_RESULT; #ifdef _X86_ NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedIncrementLong( _Inout_ _Interlocked_operand_ LONG volatile *Addend); NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedDecrementLong( _Inout_ _Interlocked_operand_ PLONG Addend); NTKERNELAPI ULONG FASTCALL Exfi386InterlockedExchangeUlong( _Inout_ _Interlocked_operand_ PULONG Target, _In_ ULONG Value); #endif #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI NTSTATUS NTAPI ExExtendZone( _Inout_ PZONE_HEADER Zone, _Inout_ PVOID Segment, _In_ ULONG SegmentSize); NTKERNELAPI NTSTATUS NTAPI ExInitializeZone( _Out_ PZONE_HEADER Zone, _In_ ULONG BlockSize, _Inout_ PVOID InitialSegment, _In_ ULONG InitialSegmentSize); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExInterlockedExtendZone( _Inout_ PZONE_HEADER Zone, _Inout_ PVOID Segment, _In_ ULONG SegmentSize, _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExUuidCreate( _Out_ UUID *Uuid); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseAccessViolation(VOID); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseDatatypeMisalignment(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ /* Hardware Abstraction Layer Functions */ #if (NTDDI_VERSION >= NTDDI_WIN2K) #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) /* Nothing here */ #else /* USE_DMA_MACROS ... */ //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID NTAPI IoFreeAdapterChannel( _In_ PADAPTER_OBJECT AdapterObject); //DECLSPEC_DEPRECATED_DDK NTHALAPI BOOLEAN NTAPI IoFlushAdapterBuffers( _In_ PADAPTER_OBJECT AdapterObject, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ BOOLEAN WriteToDevice); //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID NTAPI IoFreeMapRegisters( _In_ PADAPTER_OBJECT AdapterObject, _In_ PVOID MapRegisterBase, _In_ ULONG NumberOfMapRegisters); //DECLSPEC_DEPRECATED_DDK NTHALAPI PVOID NTAPI HalAllocateCommonBuffer( _In_ PADAPTER_OBJECT AdapterObject, _In_ ULONG Length, _Out_ PPHYSICAL_ADDRESS LogicalAddress, _In_ BOOLEAN CacheEnabled); //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID NTAPI HalFreeCommonBuffer( _In_ PADAPTER_OBJECT AdapterObject, _In_ ULONG Length, _In_ PHYSICAL_ADDRESS LogicalAddress, _In_ PVOID VirtualAddress, _In_ BOOLEAN CacheEnabled); //DECLSPEC_DEPRECATED_DDK NTHALAPI ULONG NTAPI HalReadDmaCounter( _In_ PADAPTER_OBJECT AdapterObject); NTHALAPI NTSTATUS NTAPI HalAllocateAdapterChannel( _In_ PADAPTER_OBJECT AdapterObject, _In_ PWAIT_CONTEXT_BLOCK Wcb, _In_ ULONG NumberOfMapRegisters, _In_ PDRIVER_CONTROL ExecutionRoutine); #endif /* USE_DMA_MACROS ... */ #if !defined(NO_LEGACY_DRIVERS) NTHALAPI NTSTATUS NTAPI HalAssignSlotResources( _In_ PUNICODE_STRING RegistryPath, _In_opt_ PUNICODE_STRING DriverClassName, _In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT DeviceObject, _In_ INTERFACE_TYPE BusType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Inout_ PCM_RESOURCE_LIST *AllocatedResources); _IRQL_requires_max_(PASSIVE_LEVEL) NTHALAPI ULONG NTAPI HalGetInterruptVector( _In_ INTERFACE_TYPE InterfaceType, _In_ ULONG BusNumber, _In_ ULONG BusInterruptLevel, _In_ ULONG BusInterruptVector, _Out_ PKIRQL Irql, _Out_ PKAFFINITY Affinity); NTHALAPI ULONG NTAPI HalSetBusData( _In_ BUS_DATA_TYPE BusDataType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length); NTHALAPI ULONG NTAPI HalGetBusData( _In_ BUS_DATA_TYPE BusDataType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length); NTHALAPI BOOLEAN NTAPI HalMakeBeep( _In_ ULONG Frequency); #endif /* !defined(NO_LEGACY_DRIVERS) */ _IRQL_requires_max_(PASSIVE_LEVEL) NTHALAPI PADAPTER_OBJECT NTAPI HalGetAdapter( _In_ PDEVICE_DESCRIPTION DeviceDescription, _Out_ PULONG NumberOfMapRegisters); VOID NTAPI HalPutDmaAdapter( _In_ PADAPTER_OBJECT DmaAdapter); NTHALAPI VOID NTAPI HalAcquireDisplayOwnership( _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); NTHALAPI ULONG NTAPI HalGetBusDataByOffset( _In_ BUS_DATA_TYPE BusDataType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); NTHALAPI ULONG NTAPI HalSetBusDataByOffset( _In_ BUS_DATA_TYPE BusDataType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Offset, _In_ ULONG Length); NTHALAPI BOOLEAN NTAPI HalTranslateBusAddress( _In_ INTERFACE_TYPE InterfaceType, _In_ ULONG BusNumber, _In_ PHYSICAL_ADDRESS BusAddress, _Inout_ PULONG AddressSpace, _Out_ PPHYSICAL_ADDRESS TranslatedAddress); NTHALAPI PVOID NTAPI HalAllocateCrashDumpRegisters( _In_ PADAPTER_OBJECT AdapterObject, _Inout_ PULONG NumberOfMapRegisters); NTSTATUS NTAPI HalGetScatterGatherList( _In_ PADAPTER_OBJECT DmaAdapter, _In_ PDEVICE_OBJECT DeviceObject, _In_ PMDL Mdl, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, _In_ PVOID Context, _In_ BOOLEAN WriteToDevice); VOID NTAPI HalPutScatterGatherList( _In_ PADAPTER_OBJECT DmaAdapter, _In_ PSCATTER_GATHER_LIST ScatterGather, _In_ BOOLEAN WriteToDevice); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID FASTCALL HalExamineMBR( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG MBRTypeIdentifier, _Out_ PVOID *Buffer); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WIN7) NTSTATUS NTAPI HalAllocateHardwareCounters( _In_reads_(GroupCount) PGROUP_AFFINITY GroupAffinty, _In_ ULONG GroupCount, _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, _Out_ PHANDLE CounterSetHandle); NTSTATUS NTAPI HalFreeHardwareCounters( _In_ HANDLE CounterSetHandle); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #if defined(_IA64_) #if (NTDDI_VERSION >= NTDDI_WIN2K) NTHALAPI ULONG NTAPI HalGetDmaAlignmentRequirement(VOID); #endif #endif /* defined(_IA64_) */ #if defined(_M_IX86) || defined(_M_AMD64) #define HalGetDmaAlignmentRequirement() 1L #endif #if (NTDDI_VERSION >= NTDDI_WIN7) typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR; typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; NTHALAPI VOID NTAPI HalBugCheckSystem( _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, _In_ PWHEA_ERROR_RECORD ErrorRecord); #else typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; NTHALAPI VOID NTAPI HalBugCheckSystem( _In_ PWHEA_ERROR_RECORD ErrorRecord); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ /****************************************************************************** * I/O Manager Functions * ******************************************************************************/ /* * VOID IoAssignArcName( * IN PUNICODE_STRING ArcName, * IN PUNICODE_STRING DeviceName); */ #define IoAssignArcName(_ArcName, _DeviceName) ( \ IoCreateSymbolicLink((_ArcName), (_DeviceName))) /* * VOID * IoDeassignArcName( * IN PUNICODE_STRING ArcName) */ #define IoDeassignArcName IoDeleteSymbolicLink FORCEINLINE VOID NTAPI IoInitializeDriverCreateContext( PIO_DRIVER_CREATE_CONTEXT DriverContext) { RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT)); DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT); } #if (NTDDI_VERSION >= NTDDI_WIN2K) #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoAllocateAdapterChannel( _In_ PADAPTER_OBJECT AdapterObject, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG NumberOfMapRegisters, _In_ PDRIVER_CONTROL ExecutionRoutine, _In_ PVOID Context); #endif #if !defined(DMA_MACROS_DEFINED) //DECLSPEC_DEPRECATED_DDK NTHALAPI PHYSICAL_ADDRESS NTAPI IoMapTransfer( _In_ PADAPTER_OBJECT AdapterObject, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _Inout_ PULONG Length, _In_ BOOLEAN WriteToDevice); #endif _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoAllocateController( _In_ PCONTROLLER_OBJECT ControllerObject, _In_ PDEVICE_OBJECT DeviceObject, _In_ PDRIVER_CONTROL ExecutionRoutine, _In_opt_ PVOID Context); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PCONTROLLER_OBJECT NTAPI IoCreateController( _In_ ULONG Size); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoDeleteController( _In_ PCONTROLLER_OBJECT ControllerObject); _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoFreeController( _In_ PCONTROLLER_OBJECT ControllerObject); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetDeviceToVerify( _In_ PETHREAD Thread); NTKERNELAPI VOID NTAPI IoCancelFileOpen( _In_ PDEVICE_OBJECT DeviceObject, _In_ PFILE_OBJECT FileObject); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PGENERIC_MAPPING NTAPI IoGetFileObjectGenericMapping(VOID); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PIRP NTAPI IoMakeAssociatedIrp( _In_ PIRP Irp, _In_ CCHAR StackSize); NTKERNELAPI NTSTATUS NTAPI IoQueryDeviceDescription( _In_opt_ PINTERFACE_TYPE BusType, _In_opt_ PULONG BusNumber, _In_opt_ PCONFIGURATION_TYPE ControllerType, _In_opt_ PULONG ControllerNumber, _In_opt_ PCONFIGURATION_TYPE PeripheralType, _In_opt_ PULONG PeripheralNumber, _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, _Inout_opt_ PVOID Context); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI IoRaiseHardError( _In_ PIRP Irp, _In_opt_ PVPB Vpb, _In_ PDEVICE_OBJECT RealDeviceObject); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoRaiseInformationalHardError( _In_ NTSTATUS ErrorStatus, _In_opt_ PUNICODE_STRING String, _In_opt_ PKTHREAD Thread); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoRegisterBootDriverReinitialization( _In_ PDRIVER_OBJECT DriverObject, _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, _In_opt_ PVOID Context); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoRegisterDriverReinitialization( _In_ PDRIVER_OBJECT DriverObject, _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, _In_opt_ PVOID Context); NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceByPointer( _In_ PDEVICE_OBJECT SourceDevice, _In_ PDEVICE_OBJECT TargetDevice); _IRQL_requires_max_(PASSIVE_LEVEL) _Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoReportDetectedDevice( _In_ PDRIVER_OBJECT DriverObject, _In_ INTERFACE_TYPE LegacyBusType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_opt_ PCM_RESOURCE_LIST ResourceList, _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements, _In_ BOOLEAN ResourceAssigned, _Inout_ PDEVICE_OBJECT *DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoReportResourceForDetection( _In_ PDRIVER_OBJECT DriverObject, _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, _In_opt_ ULONG DriverListSize, _In_opt_ PDEVICE_OBJECT DeviceObject, _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, _In_opt_ ULONG DeviceListSize, _Out_ PBOOLEAN ConflictDetected); NTKERNELAPI NTSTATUS NTAPI IoReportResourceUsage( _In_opt_ PUNICODE_STRING DriverClassName, _In_ PDRIVER_OBJECT DriverObject, _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, _In_opt_ ULONG DriverListSize, _In_opt_ PDEVICE_OBJECT DeviceObject, _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, _In_opt_ ULONG DeviceListSize, _In_ BOOLEAN OverrideConflict, _Out_ PBOOLEAN ConflictDetected); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoSetHardErrorOrVerifyDevice( _In_ PIRP Irp, _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoAssignResources( _In_ PUNICODE_STRING RegistryPath, _In_opt_ PUNICODE_STRING DriverClassName, _In_ PDRIVER_OBJECT DriverObject, _In_opt_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources, _Inout_ PCM_RESOURCE_LIST *AllocatedResources); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoSetThreadHardErrorMode( _In_ BOOLEAN EnableHardErrors); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) NTKERNELAPI BOOLEAN NTAPI IoIsFileOriginRemote( _In_ PFILE_OBJECT FileObject); NTKERNELAPI NTSTATUS NTAPI IoSetFileOrigin( _In_ PFILE_OBJECT FileObject, _In_ BOOLEAN Remote); #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */ #if (NTDDI_VERSION >= NTDDI_WINXP) _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoReadPartitionTable( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ BOOLEAN ReturnRecognizedPartitions, _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoSetPartitionInformation( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG PartitionNumber, _In_ ULONG PartitionType); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoWritePartitionTable( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG SectorSize, _In_ ULONG SectorsPerTrack, _In_ ULONG NumberOfHeads, _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); NTKERNELAPI NTSTATUS NTAPI IoCreateDisk( _In_ PDEVICE_OBJECT DeviceObject, _In_opt_ struct _CREATE_DISK* Disk); NTKERNELAPI NTSTATUS NTAPI IoReadDiskSignature( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG BytesPerSector, _Out_ PDISK_SIGNATURE Signature); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoReadPartitionTableEx( _In_ PDEVICE_OBJECT DeviceObject, _Out_ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoSetPartitionInformationEx( _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG PartitionNumber, _In_ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); NTKERNELAPI NTSTATUS NTAPI IoSetSystemPartition( _In_ PUNICODE_STRING VolumeNameString); NTKERNELAPI NTSTATUS NTAPI IoVerifyPartitionTable( _In_ PDEVICE_OBJECT DeviceObject, _In_ BOOLEAN FixErrors); NTKERNELAPI NTSTATUS NTAPI IoVolumeDeviceToDosName( _In_ PVOID VolumeDeviceObject, _Out_ _When_(return==0, _At_(DosName->Buffer, __drv_allocatesMem(Mem))) PUNICODE_STRING DosName); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoWritePartitionTableEx( _In_ PDEVICE_OBJECT DeviceObject, _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX, PartitionEntry[0]))) struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); NTKERNELAPI NTSTATUS NTAPI IoCreateFileSpecifyDeviceObjectHint( _Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_opt_ PLARGE_INTEGER AllocationSize, _In_ ULONG FileAttributes, _In_ ULONG ShareAccess, _In_ ULONG Disposition, _In_ ULONG CreateOptions, _In_opt_ PVOID EaBuffer, _In_ ULONG EaLength, _In_ CREATE_FILE_TYPE CreateFileType, _In_opt_ PVOID InternalParameters, _In_ ULONG Options, _In_opt_ PVOID DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe( _In_ PDEVICE_OBJECT SourceDevice, _In_ PDEVICE_OBJECT TargetDevice, _Outptr_ PDEVICE_OBJECT *AttachedToDeviceObject); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) NTKERNELAPI IO_PAGING_PRIORITY FASTCALL IoGetPagingIoPriority( _In_ PIRP Irp); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) BOOLEAN NTAPI IoTranslateBusAddress( _In_ INTERFACE_TYPE InterfaceType, _In_ ULONG BusNumber, _In_ PHYSICAL_ADDRESS BusAddress, _Inout_ PULONG AddressSpace, _Out_ PPHYSICAL_ADDRESS TranslatedAddress); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) NTKERNELAPI NTSTATUS NTAPI IoUpdateDiskGeometry( _In_ PDEVICE_OBJECT DeviceObject, _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry, _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry); PTXN_PARAMETER_BLOCK NTAPI IoGetTransactionParameterBlock( _In_ PFILE_OBJECT FileObject); NTKERNELAPI NTSTATUS NTAPI IoCreateFileEx( _Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_opt_ PLARGE_INTEGER AllocationSize, _In_ ULONG FileAttributes, _In_ ULONG ShareAccess, _In_ ULONG Disposition, _In_ ULONG CreateOptions, _In_opt_ PVOID EaBuffer, _In_ ULONG EaLength, _In_ CREATE_FILE_TYPE CreateFileType, _In_opt_ PVOID InternalParameters, _In_ ULONG Options, _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext); NTSTATUS NTAPI IoSetIrpExtraCreateParameter( _Inout_ PIRP Irp, _In_ struct _ECP_LIST *ExtraCreateParameter); VOID NTAPI IoClearIrpExtraCreateParameter( _Inout_ PIRP Irp); NTSTATUS NTAPI IoGetIrpExtraCreateParameter( _In_ PIRP Irp, _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter); BOOLEAN NTAPI IoIsFileObjectIgnoringSharing( _In_ PFILE_OBJECT FileObject); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) NTSTATUS NTAPI IoSetFileObjectIgnoreSharing( _In_ PFILE_OBJECT FileObject); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ /****************************************************************************** * Kernel Debugger Functions * ******************************************************************************/ NTSYSAPI ULONG NTAPI DbgPrompt( _In_z_ PCCH Prompt, _Out_writes_bytes_(MaximumResponseLength) PCH Response, _In_ ULONG MaximumResponseLength); /****************************************************************************** * Kernel Functions * ******************************************************************************/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL KeInvalidateRangeAllCaches( _In_ PVOID BaseAddress, _In_ ULONG Length); #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI VOID NTAPI KeSetImportanceDpc( _Inout_ PRKDPC Dpc, _In_ KDPC_IMPORTANCE Importance); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KePulseEvent( _Inout_ PRKEVENT Event, _In_ KPRIORITY Increment, _In_ BOOLEAN Wait); _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeSetBasePriorityThread( _Inout_ PRKTHREAD Thread, _In_ LONG Increment); _Acquires_lock_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterCriticalRegion(VOID); _Releases_lock_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeLeaveCriticalRegion(VOID); NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI KeBugCheck( _In_ ULONG BugCheckCode); #if defined(SINGLE_GROUP_LEGACY_API) NTKERNELAPI VOID NTAPI KeSetTargetProcessorDpc( _Inout_ PRKDPC Dpc, _In_ CCHAR Number); NTKERNELAPI KAFFINITY NTAPI KeQueryActiveProcessors(VOID); #endif /* defined(SINGLE_GROUP_LEGACY_API) */ #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeAreApcsDisabled(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) NTKERNELAPI BOOLEAN NTAPI KeInvalidateAllCaches(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeExpandKernelStackAndCallout( _In_ PEXPAND_STACK_CALLOUT Callout, _In_opt_ PVOID Parameter, _In_ SIZE_T Size); _Acquires_lock_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterGuardedRegion(VOID); _Releases_lock_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeLeaveGuardedRegion(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) #if defined(SINGLE_GROUP_LEGACY_API) NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCount( _Out_opt_ PKAFFINITY ActiveProcessors); NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCount(VOID); #endif /* SINGLE_GROUP_LEGACY_API */ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCountEx( _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCountEx( _In_ USHORT GroupNumber); NTKERNELAPI USHORT NTAPI KeQueryActiveGroupCount(VOID); NTKERNELAPI USHORT NTAPI KeQueryMaximumGroupCount(VOID); NTKERNELAPI KAFFINITY NTAPI KeQueryGroupAffinity( _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeGetCurrentProcessorNumberEx( _Out_opt_ PPROCESSOR_NUMBER ProcNumber); NTKERNELAPI VOID NTAPI KeQueryNodeActiveAffinity( _In_ USHORT NodeNumber, _Out_opt_ PGROUP_AFFINITY Affinity, _Out_opt_ PUSHORT Count); NTKERNELAPI USHORT NTAPI KeQueryNodeMaximumProcessorCount( _In_ USHORT NodeNumber); NTKERNELAPI USHORT NTAPI KeQueryHighestNodeNumber(VOID); NTKERNELAPI USHORT NTAPI KeGetCurrentNodeNumber(VOID); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryLogicalProcessorRelationship( _In_opt_ PPROCESSOR_NUMBER ProcessorNumber, _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, _Inout_ PULONG Length); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeSetHardwareCounterConfiguration( _In_reads_(Count) PHARDWARE_COUNTER CounterArray, _In_ ULONG Count); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryHardwareCounterConfiguration( _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray, _In_ ULONG MaximumCount, _Out_ PULONG Count); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ /****************************************************************************** * Memory manager Functions * ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) _IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI PPHYSICAL_MEMORY_RANGE NTAPI MmGetPhysicalMemoryRanges(VOID); NTKERNELAPI PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress( _In_ PVOID BaseAddress); NTKERNELAPI BOOLEAN NTAPI MmIsNonPagedSystemAddressValid( _In_ PVOID VirtualAddress); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) _Out_writes_bytes_opt_(NumberOfBytes) NTKERNELAPI PVOID NTAPI MmAllocateNonCachedMemory( _In_ SIZE_T NumberOfBytes); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmFreeNonCachedMemory( _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, _In_ SIZE_T NumberOfBytes); NTKERNELAPI PVOID NTAPI MmGetVirtualForPhysical( _In_ PHYSICAL_ADDRESS PhysicalAddress); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapUserAddressesToPage( _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, _In_ SIZE_T NumberOfBytes, _In_ PVOID PageAddress); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) _Out_writes_bytes_opt_(NumberOfBytes) NTKERNELAPI PVOID NTAPI MmMapVideoDisplay( _In_ PHYSICAL_ADDRESS PhysicalAddress, _In_ SIZE_T NumberOfBytes, _In_ MEMORY_CACHING_TYPE CacheType); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapViewInSessionSpace( _In_ PVOID Section, _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, _Inout_ PSIZE_T ViewSize); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapViewInSystemSpace( _In_ PVOID Section, _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, _Inout_ PSIZE_T ViewSize); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmIsAddressValid( _In_ PVOID VirtualAddress); NTKERNELAPI BOOLEAN NTAPI MmIsThisAnNtAsSystem(VOID); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmLockPagableSectionByHandle( _In_ PVOID ImageSectionHandle); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSessionSpace( _In_ PVOID MappedBase); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSystemSpace( _In_ PVOID MappedBase); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmUnsecureVirtualMemory( _In_ HANDLE SecureHandle); _IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmRemovePhysicalMemory( _In_ PPHYSICAL_ADDRESS StartAddress, _Inout_ PLARGE_INTEGER NumberOfBytes); _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI HANDLE NTAPI MmSecureVirtualMemory( __in_data_source(USER_MODE) _In_reads_bytes_ (Size) PVOID Address, _In_ __in_data_source(USER_MODE) SIZE_T Size, _In_ ULONG ProbeMode); _IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmUnmapVideoDisplay( _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, _In_ SIZE_T NumberOfBytes); _IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmAddPhysicalMemory( _In_ PPHYSICAL_ADDRESS StartAddress, _Inout_ PLARGE_INTEGER NumberOfBytes); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WS03) _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmCreateMirror(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_VISTA) _Must_inspect_result_ _IRQL_requires_max_(APC_LEVEL) NTSTATUS NTAPI MmRotatePhysicalView( _In_ PVOID VirtualAddress, _Inout_ PSIZE_T NumberOfBytes, _In_opt_ PMDLX NewMdl, _In_ MM_ROTATE_DIRECTION Direction, _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, _In_opt_ PVOID Context); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ /****************************************************************************** * Process Manager Functions * ******************************************************************************/ __kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenProcess( _Out_ PHANDLE ProcessHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _In_opt_ PCLIENT_ID ClientId); NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationProcess( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation OPTIONAL, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength OPTIONAL); #if (NTDDI_VERSION >= NTDDI_WIN2K) _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetCreateProcessNotifyRoutine( _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, _In_ BOOLEAN Remove); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetCreateThreadNotifyRoutine( _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetLoadImageNotifyRoutine( _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); NTKERNELAPI HANDLE NTAPI PsGetCurrentProcessId(VOID); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI PsGetCurrentThreadId(VOID); NTKERNELAPI BOOLEAN NTAPI PsGetVersion( OUT PULONG MajorVersion OPTIONAL, OUT PULONG MinorVersion OPTIONAL, OUT PULONG BuildNumber OPTIONAL, OUT PUNICODE_STRING CSDVersion OPTIONAL); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI PsGetProcessId( _In_ PEPROCESS Process); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI PsGetThreadId( _In_ PETHREAD Thread); NTKERNELAPI NTSTATUS NTAPI PsRemoveCreateThreadNotifyRoutine( _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsRemoveLoadImageNotifyRoutine( _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); _IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONGLONG NTAPI PsGetProcessCreateTimeQuadPart( _In_ PEPROCESS Process); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) NTKERNELAPI HANDLE NTAPI PsGetThreadProcessId( IN PETHREAD Thread); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_VISTA) NTKERNELAPI BOOLEAN NTAPI PsSetCurrentThreadPrefetching( IN BOOLEAN Prefetching); NTKERNELAPI BOOLEAN NTAPI PsIsCurrentThreadPrefetching(VOID); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_VISTASP1) NTKERNELAPI NTSTATUS NTAPI PsSetCreateProcessNotifyRoutineEx( IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine, IN BOOLEAN Remove); #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ /****************************************************************************** * Runtime Library Functions * ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) #ifndef RTL_USE_AVL_TABLES NTSYSAPI VOID NTAPI RtlInitializeGenericTable( _Out_ PRTL_GENERIC_TABLE Table, _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine, _In_opt_ PVOID TableContext); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTable( _In_ PRTL_GENERIC_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFull( _In_ PRTL_GENERIC_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement, _In_ PVOID NodeOrParent, _In_ TABLE_SEARCH_RESULT SearchResult); NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTable( _In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTable( _In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer); NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFull( _In_ PRTL_GENERIC_TABLE Table, _In_ PVOID Buffer, _Out_ PVOID *NodeOrParent, _Out_ TABLE_SEARCH_RESULT *SearchResult); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTable( _In_ PRTL_GENERIC_TABLE Table, _In_ BOOLEAN Restart); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplaying( _In_ PRTL_GENERIC_TABLE Table, _Inout_ PVOID *RestartKey); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTable( _In_ PRTL_GENERIC_TABLE Table, _In_ ULONG I); NTSYSAPI ULONG NTAPI RtlNumberGenericTableElements( _In_ PRTL_GENERIC_TABLE Table); _Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmpty( _In_ PRTL_GENERIC_TABLE Table); #endif /* !RTL_USE_AVL_TABLES */ #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8 NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSplay( _Inout_ PRTL_SPLAY_LINKS Links); NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlDelete( _In_ PRTL_SPLAY_LINKS Links); NTSYSAPI VOID NTAPI RtlDeleteNoSplay( _In_ PRTL_SPLAY_LINKS Links, _Inout_ PRTL_SPLAY_LINKS *Root); _Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreeSuccessor( _In_ PRTL_SPLAY_LINKS Links); _Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreePredecessor( _In_ PRTL_SPLAY_LINKS Links); _Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealSuccessor( _In_ PRTL_SPLAY_LINKS Links); _Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealPredecessor( _In_ PRTL_SPLAY_LINKS Links); _IRQL_requires_max_(PASSIVE_LEVEL) _Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString( _In_ PCUNICODE_STRING String1, _In_ PCUNICODE_STRING String2, _In_ BOOLEAN CaseInSensitive); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlUpperString( _Inout_ PSTRING DestinationString, _In_ const PSTRING SourceString); _IRQL_requires_max_(PASSIVE_LEVEL) _When_(AllocateDestinationString, _Must_inspect_result_) NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeString( _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) _When_(!AllocateDestinationString, _Inout_) PUNICODE_STRING DestinationString, _In_ PCUNICODE_STRING SourceString, _In_ BOOLEAN AllocateDestinationString); _IRQL_requires_max_(APC_LEVEL) NTSYSAPI VOID NTAPI RtlMapGenericMask( _Inout_ PACCESS_MASK AccessMask, _In_ PGENERIC_MAPPING GenericMapping); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlVolumeDeviceToDosName( _In_ PVOID VolumeDeviceObject, _Out_ PUNICODE_STRING DosName); NTSYSAPI NTSTATUS NTAPI RtlGetVersion( IN OUT PRTL_OSVERSIONINFOW lpVersionInformation); NTSYSAPI NTSTATUS NTAPI RtlVerifyVersionInfo( IN PRTL_OSVERSIONINFOEXW VersionInfo, IN ULONG TypeMask, IN ULONGLONG ConditionMask); _IRQL_requires_max_(PASSIVE_LEVEL) _Must_inspect_result_ NTSYSAPI LONG NTAPI RtlCompareString( _In_ const PSTRING String1, _In_ const PSTRING String2, _In_ BOOLEAN CaseInSensitive); NTSYSAPI VOID NTAPI RtlCopyString( _Out_ PSTRING DestinationString, _In_opt_ const PSTRING SourceString); _IRQL_requires_max_(PASSIVE_LEVEL) _Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlEqualString( _In_ const PSTRING String1, _In_ const PSTRING String2, _In_ BOOLEAN CaseInSensitive); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCharToInteger( _In_z_ PCSZ String, _In_opt_ ULONG Base, _Out_ PULONG Value); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI CHAR NTAPI RtlUpperChar( _In_ CHAR Character); NTSYSAPI ULONG NTAPI RtlWalkFrameChain( _Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT)) PVOID *Callers, _In_ ULONG Count, _In_ ULONG Flags); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) NTSYSAPI VOID NTAPI RtlInitializeGenericTableAvl( _Out_ PRTL_AVL_TABLE Table, _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine, _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine, _In_opt_ PVOID TableContext); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFullAvl( _In_ PRTL_AVL_TABLE Table, _In_reads_bytes_(BufferSize) PVOID Buffer, _In_ CLONG BufferSize, _Out_opt_ PBOOLEAN NewElement, _In_ PVOID NodeOrParent, _In_ TABLE_SEARCH_RESULT SearchResult); NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer); NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFullAvl( _In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer, _Out_ PVOID *NodeOrParent, _Out_ TABLE_SEARCH_RESULT *SearchResult); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_ BOOLEAN Restart); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplayingAvl( _In_ PRTL_AVL_TABLE Table, _Inout_ PVOID *RestartKey); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupFirstMatchingElementGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer, _Out_ PVOID *RestartKey); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableLikeADirectory( _In_ PRTL_AVL_TABLE Table, _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction, _In_opt_ PVOID MatchData, _In_ ULONG NextFlag, _Inout_ PVOID *RestartKey, _Inout_ PULONG DeleteCount, _In_ PVOID Buffer); _Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTableAvl( _In_ PRTL_AVL_TABLE Table, _In_ ULONG I); NTSYSAPI ULONG NTAPI RtlNumberGenericTableElementsAvl( _In_ PRTL_AVL_TABLE Table); _Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmptyAvl( _In_ PRTL_AVL_TABLE Table); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_VISTA) _IRQL_requires_max_(APC_LEVEL) NTSYSAPI VOID NTAPI RtlRunOnceInitialize( _Out_ PRTL_RUN_ONCE RunOnce); _IRQL_requires_max_(APC_LEVEL) _Maybe_raises_SEH_exception_ NTSYSAPI NTSTATUS NTAPI RtlRunOnceExecuteOnce( _Inout_ PRTL_RUN_ONCE RunOnce, _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ PVOID *Context); _IRQL_requires_max_(APC_LEVEL) _Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlRunOnceBeginInitialize( _Inout_ PRTL_RUN_ONCE RunOnce, _In_ ULONG Flags, _Outptr_opt_result_maybenull_ PVOID *Context); _IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlRunOnceComplete( _Inout_ PRTL_RUN_ONCE RunOnce, _In_ ULONG Flags, _In_opt_ PVOID Context); NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo( _In_ ULONG OSMajorVersion, _In_ ULONG OSMinorVersion, _In_ ULONG SpMajorVersion, _In_ ULONG SpMinorVersion, _Out_ PULONG ReturnedProductType); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) _Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlCreateHashTable( _Inout_ _When_(NULL == *HashTable, __drv_allocatesMem(Mem)) PRTL_DYNAMIC_HASH_TABLE *HashTable, _In_ ULONG Shift, _In_ _Reserved_ ULONG Flags); NTSYSAPI VOID NTAPI RtlDeleteHashTable( _In_ _When_((HashTable->Flags & RTL_HASH_ALLOCATED_HEADER), __drv_freesMem(Mem) _Post_invalid_) PRTL_DYNAMIC_HASH_TABLE HashTable); NTSYSAPI BOOLEAN NTAPI RtlInsertEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, _In_ ULONG_PTR Signature, _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); NTSYSAPI BOOLEAN NTAPI RtlRemoveEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); _Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlLookupEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _In_ ULONG_PTR Signature, _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); _Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlGetNextEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); NTSYSAPI BOOLEAN NTAPI RtlInitEnumerationHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); _Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlEnumerateEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI VOID NTAPI RtlEndEnumerationHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI BOOLEAN NTAPI RtlInitWeakEnumerationHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); _Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlWeaklyEnumerateEntryHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI VOID NTAPI RtlEndWeakEnumerationHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI BOOLEAN NTAPI RtlExpandHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); NTSYSAPI BOOLEAN NTAPI RtlContractHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #if defined(_AMD64_) || defined(_IA64_) //DECLSPEC_DEPRECATED_DDK_WINXP FORCEINLINE LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerDivide( _In_ LARGE_INTEGER Dividend, _In_ LARGE_INTEGER Divisor, _Out_opt_ PLARGE_INTEGER Remainder) { LARGE_INTEGER ret; ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; if (Remainder) Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; return ret; } #else #if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI LARGE_INTEGER NTAPI RtlLargeIntegerDivide( _In_ LARGE_INTEGER Dividend, _In_ LARGE_INTEGER Divisor, _Out_opt_ PLARGE_INTEGER Remainder); #endif #endif /* defined(_AMD64_) || defined(_IA64_) */ #ifdef RTL_USE_AVL_TABLES #define RtlInitializeGenericTable RtlInitializeGenericTableAvl #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl #define RtlGetElementGenericTable RtlGetElementGenericTableAvl #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl #endif /* RTL_USE_AVL_TABLES */ #define RtlInitializeSplayLinks(Links) { \ PRTL_SPLAY_LINKS _SplayLinks; \ _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ _SplayLinks->Parent = _SplayLinks; \ _SplayLinks->LeftChild = NULL; \ _SplayLinks->RightChild = NULL; \ } #define RtlIsLeftChild(Links) \ (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) #define RtlIsRightChild(Links) \ (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) #define RtlRightChild(Links) \ ((PRTL_SPLAY_LINKS)(Links))->RightChild #define RtlIsRoot(Links) \ (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) #define RtlLeftChild(Links) \ ((PRTL_SPLAY_LINKS)(Links))->LeftChild #define RtlParent(Links) \ ((PRTL_SPLAY_LINKS)(Links))->Parent #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \ { \ PRTL_SPLAY_LINKS _SplayParent; \ PRTL_SPLAY_LINKS _SplayChild; \ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ _SplayParent->LeftChild = _SplayChild; \ _SplayChild->Parent = _SplayParent; \ } #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \ { \ PRTL_SPLAY_LINKS _SplayParent; \ PRTL_SPLAY_LINKS _SplayChild; \ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ _SplayParent->RightChild = _SplayChild; \ _SplayChild->Parent = _SplayParent; \ } #if !defined(MIDL_PASS) FORCEINLINE LUID NTAPI_INLINE RtlConvertLongToLuid( _In_ LONG Val) { LUID Luid; LARGE_INTEGER Temp; Temp.QuadPart = Val; Luid.LowPart = Temp.u.LowPart; Luid.HighPart = Temp.u.HighPart; return Luid; } FORCEINLINE LUID NTAPI_INLINE RtlConvertUlongToLuid( _In_ ULONG Val) { LUID Luid; Luid.LowPart = Val; Luid.HighPart = 0; return Luid; } #endif /* !defined(MIDL_PASS) */ #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) #define RtlGetCallersAddress(CallersAddress, CallersCaller) \ *CallersAddress = (PVOID)_ReturnAddress(); \ *CallersCaller = NULL; #else #if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI VOID NTAPI RtlGetCallersAddress( _Out_ PVOID *CallersAddress, _Out_ PVOID *CallersCaller); #endif #endif #if !defined(MIDL_PASS) && !defined(SORTPP_PASS) #if (NTDDI_VERSION >= NTDDI_WIN7) FORCEINLINE VOID NTAPI RtlInitHashTableContext( _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) { Context->ChainHead = NULL; Context->PrevLinkage = NULL; } FORCEINLINE VOID NTAPI RtlInitHashTableContextFromEnumerator( _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) { Context->ChainHead = Enumerator->ChainHead; Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink; } FORCEINLINE VOID NTAPI RtlReleaseHashTableContext( _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) { UNREFERENCED_PARAMETER(Context); return; } FORCEINLINE ULONG NTAPI RtlTotalBucketsHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->TableSize; } FORCEINLINE ULONG NTAPI RtlNonEmptyBucketsHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NonEmptyBuckets; } FORCEINLINE ULONG NTAPI RtlEmptyBucketsHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->TableSize - HashTable->NonEmptyBuckets; } FORCEINLINE ULONG NTAPI RtlTotalEntriesHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NumEntries; } FORCEINLINE ULONG NTAPI RtlActiveEnumeratorsHashTable( _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NumEnumerators; } #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ /****************************************************************************** * Security Manager Functions * ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) _IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI SeSinglePrivilegeCheck( _In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ /****************************************************************************** * ZwXxx Functions * ******************************************************************************/ _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwAllocateLocallyUniqueId( _Out_ PLUID Luid); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwTerminateProcess( _In_opt_ HANDLE ProcessHandle, _In_ NTSTATUS ExitStatus); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenProcess( _Out_ PHANDLE ProcessHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _In_opt_ PCLIENT_ID ClientId); #if (NTDDI_VERSION >= NTDDI_WIN2K) _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwCancelTimer( _In_ HANDLE TimerHandle, _Out_opt_ PBOOLEAN CurrentState); _IRQL_requires_max_(PASSIVE_LEVEL) _When_(return == 0, __drv_allocatesMem(TimerObject)) NTSTATUS NTAPI ZwCreateTimer( _Out_ PHANDLE TimerHandle, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ TIMER_TYPE TimerType); _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwOpenTimer( _Out_ PHANDLE TimerHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetInformationThread( _In_ HANDLE ThreadHandle, _In_ THREADINFOCLASS ThreadInformationClass, _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, _In_ ULONG ThreadInformationLength); _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwSetTimer( _In_ HANDLE TimerHandle, _In_ PLARGE_INTEGER DueTime, _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine, _In_opt_ PVOID TimerContext, _In_ BOOLEAN ResumeTimer, _In_opt_ LONG Period, _Out_opt_ PBOOLEAN PreviousState); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDisplayString( _In_ PUNICODE_STRING String); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwPowerInformation( _In_ POWER_INFORMATION_LEVEL PowerInformationLevel, _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, _In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _In_ ULONG OutputBufferLength); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryVolumeInformationFile( _In_ HANDLE FileHandle, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _Out_writes_bytes_(Length) PVOID FsInformation, _In_ ULONG Length, _In_ FS_INFORMATION_CLASS FsInformationClass); _IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDeviceIoControlFile( _In_ HANDLE FileHandle, _In_opt_ HANDLE Event, _In_opt_ PIO_APC_ROUTINE ApcRoutine, _In_opt_ PVOID ApcContext, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG IoControlCode, _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, _In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _In_ ULONG OutputBufferLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WIN7) _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwSetTimerEx( _In_ HANDLE TimerHandle, _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, _Inout_updates_bytes_opt_(TimerSetInformationLength) PVOID TimerSetInformation, _In_ ULONG TimerSetInformationLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ /* UNSORTED */ #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ ((ConditionMask) = VerSetConditionMask((ConditionMask), \ (TypeBitMask), (ComparisonType))) #if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI ULONGLONG NTAPI VerSetConditionMask( IN ULONGLONG ConditionMask, IN ULONG TypeMask, IN UCHAR Condition); #endif typedef struct _KERNEL_USER_TIMES { LARGE_INTEGER CreateTime; LARGE_INTEGER ExitTime; LARGE_INTEGER KernelTime; LARGE_INTEGER UserTime; } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; /* NtXxx Functions */ typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { SystemFirmwareTable_Enumerate, SystemFirmwareTable_Get } SYSTEM_FIRMWARE_TABLE_ACTION; typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { ULONG ProviderSignature; SYSTEM_FIRMWARE_TABLE_ACTION Action; ULONG TableID; ULONG TableBufferLength; UCHAR TableBuffer[ANYSIZE_ARRAY]; } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; typedef NTSTATUS (__cdecl *PFNFTH)( _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { ULONG ProviderSignature; BOOLEAN Register; PFNFTH FirmwareTableHandler; PVOID DriverObject; } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER; typedef ULONG_PTR (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( _In_ PVOID Context); typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 #define DRIVER_VERIFIER_IO_CHECKING 0x0010 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V) #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V) #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V) #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \ (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V) #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4 #define SHARED_GLOBAL_FLAGS_SPARE \ (1UL << SHARED_GLOBAL_FLAGS_SPARE_V) #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \ (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V) #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \ (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V) #define EX_INIT_BITS(Flags, Bit) \ *((Flags)) |= (Bit) // Safe to use before concurrently accessible #define EX_TEST_SET_BIT(Flags, Bit) \ InterlockedBitTestAndSet ((PLONG)(Flags), (Bit)) #define EX_TEST_CLEAR_BIT(Flags, Bit) \ InterlockedBitTestAndReset ((PLONG)(Flags), (Bit)) #define PCCARD_MAP_ERROR 0x01 #define PCCARD_DEVICE_PCI 0x10 #define PCCARD_SCAN_DISABLED 0x01 #define PCCARD_MAP_ZERO 0x02 #define PCCARD_NO_TIMER 0x03 #define PCCARD_NO_PIC 0x04 #define PCCARD_NO_LEGACY_BASE 0x05 #define PCCARD_DUP_LEGACY_BASE 0x06 #define PCCARD_NO_CONTROLLERS 0x07 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2)) /* Filesystem runtime library routines */ #if (NTDDI_VERSION >= NTDDI_WIN2K) _Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI FsRtlIsTotalDeviceFailure( _In_ NTSTATUS Status); #endif #ifdef __cplusplus } #endif