From 591e5017e9f412b3b550081c779f5f3296a524a6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 4 Jun 2010 00:49:33 +0000 Subject: [PATCH] revert 47559 and 47560 (once again... sigh) svn path=/trunk/; revision=47561 --- reactos/include/ddk/ntddk.h | 6771 ++++++++++++----------------------- 1 file changed, 2384 insertions(+), 4387 deletions(-) diff --git a/reactos/include/ddk/ntddk.h b/reactos/include/ddk/ntddk.h index a74e448e885..0e02581425d 100644 --- a/reactos/include/ddk/ntddk.h +++ b/reactos/include/ddk/ntddk.h @@ -1,13 +1,12 @@ /* * ntddk.h * - * Windows NT Device Driver Kit + * Windows Device Driver Kit * - * This file is part of the ReactOS DDK package. + * This file is part of the w32api package. * * Contributors: - * Amine Khaldi - * Timo Kreuzer (timo.kreuzer@reactos.org) + * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * @@ -19,10 +18,13 @@ * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * DEFINES: + * DBG - Debugging enabled/disabled (0/1) + * POOL_TAGGING - Enable pool tagging + * _X86_ - X86 environment */ -#pragma once - +#ifndef _NTDDK_ #define _NTDDK_ #if !defined(_NTHAL_) && !defined(_NTIFS_) @@ -39,7 +41,6 @@ #include #include #include -#include /* FIXME #include @@ -54,30 +55,21 @@ 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; -typedef struct _BUS_HANDLER *PBUS_HANDLER; -typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; -#if defined(_NTHAL_INCLUDED_) -typedef struct _KAFFINITY_EX *PKAFFINITY_EX; +// +// GUID and UUID +// +#ifndef GUID_DEFINED +#include #endif +typedef GUID UUID; + +typedef struct _BUS_HANDLER *PBUS_HANDLER; + typedef struct _PEB *PPEB; #ifndef _NTIMAGE_ @@ -93,89 +85,24 @@ typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; #endif /* _NTIMAGE_ */ -/****************************************************************************** - * Executive Types * - ******************************************************************************/ +#define EXCEPTION_READ_FAULT 0 +#define EXCEPTION_WRITE_FAULT 1 +#define EXCEPTION_EXECUTE_FAULT 8 -typedef struct _ZONE_SEGMENT_HEADER { - SINGLE_LIST_ENTRY SegmentList; - PVOID Reserved; -} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; +#if (NTDDI_VERSION >= NTDDI_VISTA) +extern NTSYSAPI volatile CCHAR KeNumberProcessors; +#elif (NTDDI_VERSION >= NTDDI_WINXP) +extern NTSYSAPI CCHAR KeNumberProcessors; +#else +extern PCCHAR KeNumberProcessors; +#endif -typedef struct _ZONE_HEADER { - SINGLE_LIST_ENTRY FreeList; - SINGLE_LIST_ENTRY SegmentList; - ULONG BlockSize; - ULONG TotalSegmentSize; -} ZONE_HEADER, *PZONE_HEADER; +#define MAX_WOW64_SHARED_ENTRIES 16 -#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_ */ +#define NX_SUPPORT_POLICY_ALWAYSOFF 0 +#define NX_SUPPORT_POLICY_ALWAYSON 1 +#define NX_SUPPORT_POLICY_OPTIN 2 +#define NX_SUPPORT_POLICY_OPTOUT 3 /* ** IRP function codes @@ -210,118 +137,102 @@ typedef enum _CONFIGURATION_TYPE { #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 struct _IO_COUNTERS { + ULONGLONG ReadOperationCount; + ULONGLONG WriteOperationCount; + ULONGLONG OtherOperationCount; + ULONGLONG ReadTransferCount; + ULONGLONG WriteTransferCount; + ULONGLONG OtherTransferCount; +} IO_COUNTERS, *PIO_COUNTERS; -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 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 enum _IO_QUERY_DEVICE_DATA_FORMAT { - IoQueryDeviceIdentifier = 0, - IoQueryDeviceConfigurationData, - IoQueryDeviceComponentInformation, - IoQueryDeviceMaxData -} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; +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; -typedef VOID -(NTAPI *PDRIVER_REINITIALIZE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN PVOID Context OPTIONAL, - IN ULONG Count); +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 _CONTROLLER_OBJECT { - CSHORT Type; - CSHORT Size; - PVOID ControllerExtension; - KDEVICE_QUEUE DeviceWaitQueue; - ULONG Spare1; - LARGE_INTEGER Spare2; -} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; +/* DEVICE_OBJECT.Flags */ + +#define DO_VERIFY_VOLUME 0x00000002 +#define DO_BUFFERED_IO 0x00000004 +#define DO_EXCLUSIVE 0x00000008 +#define DO_DIRECT_IO 0x00000010 +#define DO_MAP_IO_BUFFER 0x00000020 +#define DO_DEVICE_HAS_NAME 0x00000040 +#define DO_DEVICE_INITIALIZING 0x00000080 +#define DO_SYSTEM_BOOT_PARTITION 0x00000100 +#define DO_LONG_TERM_REQUESTS 0x00000200 +#define DO_NEVER_LAST_DEVICE 0x00000400 +#define DO_SHUTDOWN_REGISTERED 0x00000800 +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 +#define DO_POWER_PAGABLE 0x00002000 +#define DO_POWER_INRUSH 0x00004000 +#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 #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 enum _ARBITER_REQUEST_SOURCE { + ArbiterRequestUndefined = -1, + ArbiterRequestLegacyReported, + ArbiterRequestHalReported, + ArbiterRequestLegacyAssigned, + ArbiterRequestPnpDetected, + ArbiterRequestPnpEnumerated +} ARBITER_REQUEST_SOURCE; -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; - -typedef NTSTATUS -(NTAPI *PGET_LOCATION_STRING)( - IN OUT PVOID Context OPTIONAL, - OUT PWCHAR *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_RESULT { + ArbiterResultUndefined = -1, + ArbiterResultSuccess, + ArbiterResultExternalConflict, + ArbiterResultNullRequest +} ARBITER_RESULT; typedef enum _ARBITER_ACTION { ArbiterActionTestAllocation, @@ -342,69 +253,39 @@ typedef struct _ARBITER_CONFLICT_INFO { ULONGLONG End; } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; -typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { +typedef struct _ARBITER_PARAMETERS { + union { + struct { IN OUT 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 { + } TestAllocation; + struct { IN OUT 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 { + } RetestAllocation; + struct { IN OUT PLIST_ENTRY ArbitrationList; -} ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; - -typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { + } BootAllocation; + struct { OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; -} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; - -typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { + } QueryAllocatedResources; + struct { 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 { + } QueryConflict; + struct { IN PLIST_ENTRY ArbitrationList; -} ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; - -typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { + } QueryArbitrate; + struct { 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; + } 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 { @@ -441,41 +322,6 @@ typedef struct _ARBITER_INTERFACE { ULONG Flags; } ARBITER_INTERFACE, *PARBITER_INTERFACE; -typedef enum _RESOURCE_TRANSLATION_DIRECTION { - TranslateChildToParent, - TranslateParentToChild -} RESOURCE_TRANSLATION_DIRECTION; - -typedef NTSTATUS -(NTAPI *PTRANSLATE_RESOURCE_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, - IN RESOURCE_TRANSLATION_DIRECTION Direction, - IN ULONG AlternativesCount OPTIONAL, - IN IO_RESOURCE_DESCRIPTOR Alternatives[], - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); - -typedef NTSTATUS -(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PIO_RESOURCE_DESCRIPTOR Source, - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PULONG TargetCount, - OUT 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; - -#if 0 // Someone (testbot? RosBE for linux?) doesn't like too many types it seems... - typedef struct _PCI_AGP_CAPABILITY { PCI_CAPABILITIES_HEADER Header; USHORT Minor:4; @@ -857,6 +703,7 @@ typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER { USHORT AsUSHORT; } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER; +#if 0 // Someone (testbot? RosBE for linux?) doesn't like too many types it seems... typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER { struct { USHORT AttentionButtonPressed:1; @@ -1043,47 +890,6 @@ typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY]; } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST; -#endif // 0 - -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 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; - -#if 0 // Someone (testbot? RosBE for linux?) doesn't like too many types it seems... - #ifndef _PCIINTRF_X_ #define _PCIINTRF_X_ @@ -1161,114 +967,6 @@ typedef struct _PCI_BUS_INTERFACE_STANDARD { #endif // 0 -#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; - -/* 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, @@ -1315,18 +1013,92 @@ typedef enum _HAL_SET_INFORMATION_CLASS { HalProfileDpgoSourceInterruptHandler } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; -typedef NTSTATUS -(NTAPI *pHalQuerySystemInformation)( - IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength); +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_INFORMATION { + KPROFILE_SOURCE Source; + BOOLEAN Supported; + ULONG Interval; +} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; + +typedef struct _MAP_REGISTER_ENTRY { + PVOID MapRegister; + BOOLEAN WriteToDevice; +} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; + +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 struct _PM_DISPATCH_TABLE { + ULONG Signature; + ULONG Version; + PVOID Function[1]; +} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; + +typedef enum _RESOURCE_TRANSLATION_DIRECTION { + TranslateChildToParent, + TranslateParentToChild +} RESOURCE_TRANSLATION_DIRECTION; typedef NTSTATUS -(NTAPI *pHalSetSystemInformation)( - IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer); +(NTAPI *PTRANSLATE_RESOURCE_HANDLER)( + IN OUT PVOID Context, + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, + IN RESOURCE_TRANSLATION_DIRECTION Direction, + IN ULONG AlternativesCount OPTIONAL, + IN IO_RESOURCE_DESCRIPTOR Alternatives[], + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); + +typedef NTSTATUS +(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( + IN PVOID Context OPTIONAL, + IN PIO_RESOURCE_DESCRIPTOR Source, + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PULONG TargetCount, + OUT 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 VOID (FASTCALL *pHalExamineMBR)( @@ -1357,6 +1129,28 @@ typedef NTSTATUS IN ULONG NumberOfHeads, IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); +typedef PBUS_HANDLER +(FASTCALL *pHalHandlerForBus)( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber); + +typedef VOID +(FASTCALL *pHalReferenceBusHandler)( + IN PBUS_HANDLER BusHandler); + +typedef NTSTATUS +(NTAPI *pHalQuerySystemInformation)( + IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength); + +typedef NTSTATUS +(NTAPI *pHalSetSystemInformation)( + IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer); + typedef NTSTATUS (NTAPI *pHalQueryBusSlots)( IN PBUS_HANDLER BusHandler, @@ -1368,12 +1162,6 @@ 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, @@ -1413,7 +1201,12 @@ typedef NTSTATUS IN PHYSICAL_ADDRESS PhysicalAddress, IN LARGE_INTEGER NumberOfBytes); -typedef BOOLEAN +typedef VOID +(NTAPI *pHalEndOfBoot)( + VOID); + +typedef +BOOLEAN (NTAPI *pHalTranslateBusAddress)( IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, @@ -1421,7 +1214,8 @@ typedef BOOLEAN IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress); -typedef NTSTATUS +typedef +NTSTATUS (NTAPI *pHalAssignSlotResources)( IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING DriverClassName OPTIONAL, @@ -1432,24 +1226,23 @@ typedef NTSTATUS IN ULONG SlotNumber, IN OUT PCM_RESOURCE_LIST *AllocatedResources); -typedef VOID +typedef +VOID (NTAPI *pHalHaltSystem)( VOID); -typedef BOOLEAN +typedef +BOOLEAN (NTAPI *pHalResetDisplay)( VOID); -typedef struct _MAP_REGISTER_ENTRY { - PVOID MapRegister; - BOOLEAN WriteToDevice; -} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; - -typedef UCHAR +typedef +UCHAR (NTAPI *pHalVectorToIDTEntry)( ULONG Vector); -typedef BOOLEAN +typedef +BOOLEAN (NTAPI *pHalFindBusAddressTranslation)( IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, @@ -1457,33 +1250,94 @@ typedef BOOLEAN IN OUT PULONG_PTR Context, IN BOOLEAN NextBus); -typedef VOID -(NTAPI *pHalEndOfBoot)( - VOID); +typedef +NTSTATUS +(NTAPI *pKdSetupPciDeviceForDebugging)( + IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); -typedef PVOID +typedef +NTSTATUS +(NTAPI *pKdReleasePciDeviceForDebugging)( + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); + +typedef +PVOID +(NTAPI *pKdGetAcpiTablePhase0)( + IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature); + +typedef +PVOID (NTAPI *pHalGetAcpiTable)( IN ULONG Signature, IN PCSTR OemId OPTIONAL, IN PCSTR OemTableId OPTIONAL); -#if defined(_IA64_) -typedef NTSTATUS -(*pHalGetErrorCapList)( - IN OUT PULONG CapsListLength, - IN OUT PUCHAR ErrorCapList); +typedef +VOID +(NTAPI *pKdCheckPowerButton)( + VOID); -typedef NTSTATUS -(*pHalInjectError)( - IN ULONG BufferLength, - IN PUCHAR Buffer); +#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 VOID + +typedef +ULONG +(NTAPI *pKdGetPciDataByOffset)( + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +typedef +ULONG +(NTAPI *pKdSetPciDataByOffset)( + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +typedef BOOLEAN +(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( + IN ULONG Columns, + IN ULONG Rows); + +typedef +VOID (NTAPI *PCI_ERROR_HANDLER_CALLBACK)( VOID); -typedef VOID +typedef +VOID (NTAPI *pHalSetPciErrorHandlerCallback)( IN PCI_ERROR_HANDLER_CALLBACK Callback); @@ -1557,706 +1411,78 @@ extern NTKERNELAPI HAL_DISPATCH HalDispatchTable; #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 + +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 union _FILE_SEGMENT_ELEMENT { + PVOID64 Buffer; + ULONGLONG Alignment; +}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; + +#define SE_UNSOLICITED_INPUT_PRIVILEGE 6 + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +ULONGLONG +NTAPI +VerSetConditionMask( + IN ULONGLONG ConditionMask, + IN ULONG TypeMask, + IN UCHAR Condition); #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, - IN OUT 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, - IN OUT 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, - IN OUT 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 - -typedef VOID -(NTAPI *PEXPAND_STACK_CALLOUT)( - IN PVOID Parameter OPTIONAL); - -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 PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL; - IN PVOID TimerContext OPTIONAL; - IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL; - IN ULONG Period OPTIONAL; - IN ULONG TolerableDelay; - OUT PBOOLEAN PreviousState OPTIONAL; -} 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) - union { - UCHAR TscQpcData; - struct { - UCHAR TscQpcEnabled:1; - UCHAR TscQpcSpareFlag:1; - UCHAR TscQpcShift:6; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - UCHAR TscQpcPad[2]; -#endif -#if (NTDDI_VERSION >= NTDDI_VISTA) - union { - ULONG SharedDataFlags; - 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 PVOID LoaderBlock OPTIONAL, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); - -typedef NTSTATUS -(NTAPI *pKdReleasePciDeviceForDebugging)( - IN OUT 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 PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -typedef ULONG -(NTAPI *pKdSetPciDataByOffset)( - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN 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; - 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; - IN OUT 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; - union { - IN ULONG Flags; - struct { - IN ULONG FileOpenNameAvailable:1; - IN ULONG Reserved:31; - }; - }; - IN HANDLE ParentProcessId; - IN CLIENT_ID CreatingThreadId; - IN OUT struct _FILE_OBJECT *FileObject; - IN PCUNICODE_STRING ImageFileName; - IN PCUNICODE_STRING CommandLine OPTIONAL; - IN OUT NTSTATUS CreationStatus; -} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; - -typedef VOID -(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( - IN OUT PEPROCESS Process, - IN HANDLE ProcessId, - IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL); - -typedef VOID -(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( - IN HANDLE ProcessId, - IN HANDLE ThreadId, - IN BOOLEAN Create); - -#define IMAGE_ADDRESSING_MODE_32BIT 3 +#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ + ((ConditionMask) = VerSetConditionMask((ConditionMask), \ + (TypeBitMask), (ComparisonType))) + +/* 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 + +/* 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 typedef struct _IMAGE_INFO { _ANONYMOUS_UNION union { @@ -2266,7 +1492,7 @@ typedef struct _IMAGE_INFO { ULONG SystemModeImage:1; ULONG ImageMappedToAllPids:1; ULONG ExtendedInfoPresent:1; - ULONG Reserved:21; + ULONG Reserved:22; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; PVOID ImageBase; @@ -2275,24 +1501,24 @@ typedef struct _IMAGE_INFO { 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; +#define IMAGE_ADDRESSING_MODE_32BIT 3 -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 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; typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; @@ -2426,15 +1652,6 @@ typedef enum _THREADINFOCLASS { 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; @@ -2444,20 +1661,10 @@ typedef struct _PROCESS_BASIC_INFORMATION { ULONG_PTR InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; -typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { - SIZE_T Size; - PROCESS_BASIC_INFORMATION BasicInfo; - union { - ULONG Flags; - 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_WS_WATCH_INFORMATION { + PVOID FaultingPc; + PVOID FaultingVa; +} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; typedef struct _PROCESS_DEVICEMAP_INFORMATION { __GNU_EXTENSION union { @@ -2471,112 +1678,1956 @@ typedef struct _PROCESS_DEVICEMAP_INFORMATION { }; } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; -typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { - 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 _KERNEL_USER_TIMES { + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; +} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; + +typedef struct _PROCESS_ACCESS_TOKEN { + HANDLE Token; + HANDLE Thread; +} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; 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 enum _IO_QUERY_DEVICE_DATA_FORMAT { + IoQueryDeviceIdentifier = 0, + IoQueryDeviceConfigurationData, + IoQueryDeviceComponentInformation, + IoQueryDeviceMaxData +} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; -typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX { - ULONG Flags; - ULONG TotalSlots; -} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX; +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 _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 ULONG_PTR +(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( + IN PVOID Context); -typedef struct _PROCESS_HANDLE_TRACING_QUERY { - HANDLE Handle; - ULONG TotalTraces; - PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; -} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; +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 + +typedef VOID +(NTAPI *PTIMER_APC_ROUTINE)( + IN PVOID TimerContext, + IN ULONG TimerLowValue, + IN LONG TimerHighValue); + +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) + union { + UCHAR TscQpcData; + struct { + UCHAR TscQpcEnabled:1; + UCHAR TscQpcSpareFlag:1; + UCHAR TscQpcShift:6; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + UCHAR TscQpcPad[2]; +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) + union { + ULONG SharedDataFlags; + 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; + +extern NTKERNELAPI PVOID MmHighestUserAddress; +extern NTKERNELAPI PVOID MmSystemRangeStart; +extern NTKERNELAPI ULONG MmUserProbeAddress; + + +#ifdef _X86_ + +#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 + +#define KeGetPcr() PCR + +#define KERNEL_STACK_SIZE 12288 +#define KERNEL_LARGE_STACK_SIZE 61440 +#define KERNEL_LARGE_STACK_COMMIT 12288 + +#define SIZE_OF_80387_REGISTERS 80 + +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 + +#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) + +#endif /* !defined(RC_INVOKED) */ + +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)); +} + +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" + +#endif /* _X86_ */ + +#ifdef _AMD64_ + +#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 + +#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 +#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL + +typedef struct DECLSPEC_ALIGN(16) _CONTEXT { + ULONG64 P1Home; + ULONG64 P2Home; + ULONG64 P3Home; + ULONG64 P4Home; + ULONG64 P5Home; + ULONG64 P6Home; + + /* Control flags */ + ULONG ContextFlags; + ULONG MxCsr; + + /* Segment */ + USHORT SegCs; + USHORT SegDs; + USHORT SegEs; + USHORT SegFs; + USHORT SegGs; + USHORT SegSs; + ULONG EFlags; + + /* Debug */ + ULONG64 Dr0; + ULONG64 Dr1; + ULONG64 Dr2; + ULONG64 Dr3; + ULONG64 Dr6; + ULONG64 Dr7; + + /* Integer */ + 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; + + /* Counter */ + ULONG64 Rip; + + /* Floating point */ + 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; + + /* Vector */ + M128A VectorRegister[26]; + ULONG64 VectorControl; + + /* Debug control */ + ULONG64 DebugControl; + ULONG64 LastBranchToRip; + ULONG64 LastBranchFromRip; + ULONG64 LastExceptionToRip; + ULONG64 LastExceptionFromRip; +} CONTEXT; + +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); +} + +#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 /* RC_INVOKED */ + +#endif /* _AMD64_ */ + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; + +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 */ + +/* Executive Types */ + +#define PROTECTED_POOL 0x80000000 + +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; + +/* 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 + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +NTSTATUS +NTAPI +ExExtendZone( + IN OUT PZONE_HEADER Zone, + IN OUT PVOID Segment, + IN ULONG SegmentSize); + +NTKERNELAPI +NTSTATUS +NTAPI +ExInitializeZone( + OUT PZONE_HEADER Zone, + IN ULONG BlockSize, + IN OUT PVOID InitialSegment, + IN ULONG InitialSegmentSize); + +NTKERNELAPI +NTSTATUS +NTAPI +ExInterlockedExtendZone( + IN OUT PZONE_HEADER Zone, + IN OUT PVOID Segment, + IN ULONG SegmentSize, + IN OUT PKSPIN_LOCK Lock); + +NTKERNELAPI +NTSTATUS +NTAPI +ExUuidCreate( + OUT UUID *Uuid); + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +ExRaiseAccessViolation( + VOID); + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +ExRaiseDatatypeMisalignment( + VOID); + +#endif + +#ifdef _X86_ + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedIncrementLong( + IN OUT LONG volatile *Addend); + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedDecrementLong( + IN PLONG Addend); + +NTKERNELAPI +ULONG +FASTCALL +Exfi386InterlockedExchangeUlong( + IN PULONG Target, + IN ULONG Value); + +#endif /* _X86_ */ + +#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_ */ + +typedef struct _CONTROLLER_OBJECT { + CSHORT Type; + CSHORT Size; + PVOID ControllerExtension; + KDEVICE_QUEUE DeviceWaitQueue; + ULONG Spare1; + LARGE_INTEGER Spare2; +} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; + +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 +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 +VOID +(NTAPI DRIVER_REINITIALIZE)( + IN struct _DRIVER_OBJECT *DriverObject, + IN PVOID Context, + IN ULONG Count); + +typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE; + +/** Filesystem runtime library routines **/ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsTotalDeviceFailure( + IN NTSTATUS Status); +#endif + +/* Hardware Abstraction Layer Types */ + +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 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; + +/* Hardware Abstraction Layer Functions */ + +#if !defined(NO_LEGACY_DRIVERS) + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTHALAPI +NTSTATUS +NTAPI +HalAssignSlotResources( + IN PUNICODE_STRING RegistryPath, + IN PUNICODE_STRING DriverClassName, + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT DeviceObject, + IN INTERFACE_TYPE BusType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN OUT PCM_RESOURCE_LIST *AllocatedResources); + +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 PVOID Buffer, + IN ULONG Length); + +#endif + +#endif /* !defined(NO_LEGACY_DRIVERS) */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTHALAPI +PADAPTER_OBJECT +NTAPI +HalGetAdapter( + IN PDEVICE_DESCRIPTION DeviceDescription, + IN OUT PULONG NumberOfMapRegisters); + +NTHALAPI +BOOLEAN +NTAPI +HalMakeBeep( + IN ULONG Frequency); + +VOID +NTAPI +HalPutDmaAdapter( + IN PADAPTER_OBJECT DmaAdapter); + +NTHALAPI +VOID +NTAPI +HalAcquireDisplayOwnership( + IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); + +NTHALAPI +ULONG +NTAPI +HalGetBusData( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Length); + +NTHALAPI +ULONG +NTAPI +HalGetBusDataByOffset( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +NTHALAPI +ULONG +NTAPI +HalSetBusDataByOffset( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +NTHALAPI +BOOLEAN +NTAPI +HalTranslateBusAddress( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress); + +#endif + +#if (NTDDI_VERSION >= NTDDI_WINXP) +NTKERNELAPI +VOID +FASTCALL +HalExamineMBR( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG MBRTypeIdentifier, + OUT PVOID *Buffer); +#endif + +#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) +// nothing here +#else + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +//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 /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + +#endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */ + +/* 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 + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) +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, + IN OUT PULONG Length, + IN BOOLEAN WriteToDevice); +#endif + +NTKERNELAPI +VOID +NTAPI +IoAllocateController( + IN PCONTROLLER_OBJECT ControllerObject, + IN PDEVICE_OBJECT DeviceObject, + IN PDRIVER_CONTROL ExecutionRoutine, + IN PVOID Context OPTIONAL); + +NTKERNELAPI +PCONTROLLER_OBJECT +NTAPI +IoCreateController( + IN ULONG Size); + +NTKERNELAPI +VOID +NTAPI +IoDeleteController( + IN PCONTROLLER_OBJECT ControllerObject); + +NTKERNELAPI +VOID +NTAPI +IoFreeController( + IN PCONTROLLER_OBJECT ControllerObject); + +NTKERNELAPI +PCONFIGURATION_INFORMATION +NTAPI +IoGetConfigurationInformation( + VOID); + +NTKERNELAPI +PDEVICE_OBJECT +NTAPI +IoGetDeviceToVerify( + IN PETHREAD Thread); + +NTKERNELAPI +VOID +NTAPI +IoCancelFileOpen( + IN PDEVICE_OBJECT DeviceObject, + IN PFILE_OBJECT FileObject); + +NTKERNELAPI +PGENERIC_MAPPING +NTAPI +IoGetFileObjectGenericMapping( + VOID); + +NTKERNELAPI +PIRP +NTAPI +IoMakeAssociatedIrp( + IN PIRP Irp, + IN CCHAR StackSize); + +NTKERNELAPI +NTSTATUS +NTAPI +IoQueryDeviceDescription( + IN PINTERFACE_TYPE BusType OPTIONAL, + IN PULONG BusNumber OPTIONAL, + IN PCONFIGURATION_TYPE ControllerType OPTIONAL, + IN PULONG ControllerNumber OPTIONAL, + IN PCONFIGURATION_TYPE PeripheralType OPTIONAL, + IN PULONG PeripheralNumber OPTIONAL, + IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, + IN OUT PVOID Context OPTIONAL); + +NTKERNELAPI +VOID +NTAPI +IoRaiseHardError( + IN PIRP Irp, + IN PVPB Vpb OPTIONAL, + IN PDEVICE_OBJECT RealDeviceObject); + +NTKERNELAPI +BOOLEAN +NTAPI +IoRaiseInformationalHardError( + IN NTSTATUS ErrorStatus, + IN PUNICODE_STRING String OPTIONAL, + IN PKTHREAD Thread OPTIONAL); + +NTKERNELAPI +VOID +NTAPI +IoRegisterBootDriverReinitialization( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, + IN PVOID Context OPTIONAL); + +NTKERNELAPI +VOID +NTAPI +IoRegisterDriverReinitialization( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, + IN PVOID Context OPTIONAL); + +NTKERNELAPI +NTSTATUS +NTAPI +IoAttachDeviceByPointer( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice); + +NTKERNELAPI +NTSTATUS +NTAPI +IoReportDetectedDevice( + IN PDRIVER_OBJECT DriverObject, + IN INTERFACE_TYPE LegacyBusType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PCM_RESOURCE_LIST ResourceList OPTIONAL, + IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, + IN BOOLEAN ResourceAssigned, + IN OUT PDEVICE_OBJECT *DeviceObject); + +NTKERNELAPI +NTSTATUS +NTAPI +IoReportResourceForDetection( + IN PDRIVER_OBJECT DriverObject, + IN PCM_RESOURCE_LIST DriverList OPTIONAL, + IN ULONG DriverListSize OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL, + IN PCM_RESOURCE_LIST DeviceList OPTIONAL, + IN ULONG DeviceListSize OPTIONAL, + OUT PBOOLEAN ConflictDetected); + +NTKERNELAPI +NTSTATUS +NTAPI +IoReportResourceUsage( + IN PUNICODE_STRING DriverClassName OPTIONAL, + IN PDRIVER_OBJECT DriverObject, + IN PCM_RESOURCE_LIST DriverList OPTIONAL, + IN ULONG DriverListSize OPTIONAL, + IN PDEVICE_OBJECT DeviceObject, + IN PCM_RESOURCE_LIST DeviceList OPTIONAL, + IN ULONG DeviceListSize OPTIONAL, + IN BOOLEAN OverrideConflict, + OUT PBOOLEAN ConflictDetected); + +NTKERNELAPI +VOID +NTAPI +IoSetHardErrorOrVerifyDevice( + IN PIRP Irp, + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +NTSTATUS +NTAPI +IoAssignResources( + IN PUNICODE_STRING RegistryPath, + IN PUNICODE_STRING DriverClassName OPTIONAL, + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT DeviceObject OPTIONAL, + IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL, + IN OUT PCM_RESOURCE_LIST *AllocatedResources); + +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + +#if (NTDDI_VERSION >= NTDDI_WINXP) + +NTKERNELAPI +NTSTATUS +NTAPI +IoCreateDisk( + IN PDEVICE_OBJECT DeviceObject, + IN struct _CREATE_DISK* Disk OPTIONAL); + +NTKERNELAPI +NTSTATUS +NTAPI +IoReadDiskSignature( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG BytesPerSector, + OUT PDISK_SIGNATURE Signature); + +NTKERNELAPI +NTSTATUS +FASTCALL +IoReadPartitionTable( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN BOOLEAN ReturnRecognizedPartitions, + OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); + +NTKERNELAPI +NTSTATUS +NTAPI +IoReadPartitionTableEx( + IN PDEVICE_OBJECT DeviceObject, + IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); + +NTKERNELAPI +NTSTATUS +FASTCALL +IoSetPartitionInformation( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG PartitionNumber, + IN ULONG PartitionType); + +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 +BOOLEAN +NTAPI +IoSetThreadHardErrorMode( + IN BOOLEAN EnableHardErrors); + +NTKERNELAPI +NTSTATUS +NTAPI +IoVerifyPartitionTable( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN FixErrors); + +NTKERNELAPI +NTSTATUS +NTAPI +IoVolumeDeviceToDosName( + IN PVOID VolumeDeviceObject, + OUT PUNICODE_STRING DosName); + +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 +IoWritePartitionTableEx( + IN PDEVICE_OBJECT DeviceObject, + IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); + +NTKERNELAPI +NTSTATUS +NTAPI +IoAttachDeviceToDeviceStackSafe( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice, + OUT PDEVICE_OBJECT *AttachedToDeviceObject); + +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ + +/** Kernel debugger routines **/ + +NTSYSAPI +ULONG +NTAPI +DbgPrompt( + IN PCCH Prompt, + OUT PCH Response, + IN ULONG MaximumResponseLength); + +/* Kernel Functions */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +KeBugCheck( + IN ULONG BugCheckCode); + +NTKERNELAPI +LONG +NTAPI +KePulseEvent( + IN OUT PRKEVENT Event, + IN KPRIORITY Increment, + IN BOOLEAN Wait); + +NTKERNELAPI +LONG +NTAPI +KeSetBasePriorityThread( + IN OUT PRKTHREAD Thread, + IN LONG Increment); + +#endif + +/* Memory Manager Types */ + +typedef struct _PHYSICAL_MEMORY_RANGE { + PHYSICAL_ADDRESS BaseAddress; + LARGE_INTEGER NumberOfBytes; +} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; + +/* Memory Manager Functions */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +PPHYSICAL_MEMORY_RANGE +NTAPI +MmGetPhysicalMemoryRanges( + VOID); + +NTKERNELAPI +PHYSICAL_ADDRESS +NTAPI +MmGetPhysicalAddress( + IN PVOID BaseAddress); + +NTKERNELAPI +BOOLEAN +NTAPI +MmIsNonPagedSystemAddressValid( + IN PVOID VirtualAddress); + +NTKERNELAPI +PVOID +NTAPI +MmAllocateNonCachedMemory( + IN SIZE_T NumberOfBytes); + +NTKERNELAPI +VOID +NTAPI +MmFreeNonCachedMemory( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes); + +NTKERNELAPI +PVOID +NTAPI +MmGetVirtualForPhysical( + IN PHYSICAL_ADDRESS PhysicalAddress); + +NTKERNELAPI +NTSTATUS +NTAPI +MmMapUserAddressesToPage( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes, + IN PVOID PageAddress); + +NTKERNELAPI +PVOID +NTAPI +MmMapVideoDisplay( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheType); + +NTKERNELAPI +NTSTATUS +NTAPI +MmMapViewInSessionSpace( + IN PVOID Section, + OUT PVOID *MappedBase, + IN OUT PSIZE_T ViewSize); + +NTKERNELAPI +NTSTATUS +NTAPI +MmMapViewInSystemSpace( + IN PVOID Section, + OUT PVOID *MappedBase, + IN OUT PSIZE_T ViewSize); + +NTKERNELAPI +BOOLEAN +NTAPI +MmIsAddressValid( + IN PVOID VirtualAddress); + +NTKERNELAPI +BOOLEAN +NTAPI +MmIsThisAnNtAsSystem( + VOID); + +NTKERNELAPI +VOID +NTAPI +MmLockPagableSectionByHandle( + IN PVOID ImageSectionHandle); + +NTKERNELAPI +NTSTATUS +NTAPI +MmUnmapViewInSessionSpace( + IN PVOID MappedBase); + +NTKERNELAPI +NTSTATUS +NTAPI +MmUnmapViewInSystemSpace( + IN PVOID MappedBase); + +NTKERNELAPI +VOID +NTAPI +MmUnsecureVirtualMemory( + IN HANDLE SecureHandle); + +NTKERNELAPI +NTSTATUS +NTAPI +MmRemovePhysicalMemory( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes); + +NTKERNELAPI +HANDLE +NTAPI +MmSecureVirtualMemory( + IN PVOID Address, + IN SIZE_T Size, + IN ULONG ProbeMode); + +NTKERNELAPI +VOID +NTAPI +MmUnmapVideoDisplay( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes); + +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + +/* NtXxx Functions */ + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenProcess( + OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryInformationProcess( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + OUT PVOID ProcessInformation OPTIONAL, + IN ULONG ProcessInformationLength, + OUT PULONG ReturnLength OPTIONAL); + +/** Process manager types **/ + +typedef VOID +(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( + IN HANDLE ParentId, + IN HANDLE ProcessId, + IN BOOLEAN Create); + +typedef VOID +(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( + IN HANDLE ProcessId, + IN HANDLE ThreadId, + IN BOOLEAN Create); + +typedef VOID +(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( + IN PUNICODE_STRING FullImageName, + IN HANDLE ProcessId, + IN PIMAGE_INFO ImageInfo); + +/** Process manager routines **/ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +NTSTATUS +NTAPI +PsSetLoadImageNotifyRoutine( + IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); + +NTKERNELAPI +NTSTATUS +NTAPI +PsSetCreateThreadNotifyRoutine( + IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); + +NTKERNELAPI +NTSTATUS +NTAPI +PsSetCreateProcessNotifyRoutine( + IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, + IN BOOLEAN Remove); + +NTKERNELAPI +HANDLE +NTAPI +PsGetCurrentProcessId( + VOID); + +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) + +NTKERNELAPI +HANDLE +NTAPI +PsGetProcessId( + IN PEPROCESS Process); + +NTKERNELAPI +NTSTATUS +NTAPI +PsRemoveCreateThreadNotifyRoutine( + IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); + +NTKERNELAPI +NTSTATUS +NTAPI +PsRemoveLoadImageNotifyRoutine( + IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); + +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ extern NTKERNELAPI PEPROCESS PsInitialSystemProcess; +/* RTL Types */ -/****************************************************************************** - * Runtime Library Types * - ******************************************************************************/ +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; +/* RTL Functions */ +#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) -#ifndef _RTL_RUN_ONCE_DEF -#define _RTL_RUN_ONCE_DEF +#define RtlGetCallersAddress(CallersAddress, CallersCaller) \ + *CallersAddress = (PVOID)_ReturnAddress(); \ + *CallersCaller = NULL; +#else -#define RTL_RUN_ONCE_INIT {0} +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +VOID +NTAPI +RtlGetCallersAddress( + OUT PVOID *CallersAddress, + OUT PVOID *CallersCaller); +#endif -#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL -#define RTL_RUN_ONCE_ASYNC 0x00000002UL -#define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL +#endif -#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2 +#if !defined(MIDL_PASS) -#define RTL_HASH_ALLOCATED_HEADER 0x00000001 +FORCEINLINE +LUID +NTAPI_INLINE +RtlConvertLongToLuid( + IN LONG Val) +{ + LUID Luid; + LARGE_INTEGER Temp; -#define RTL_HASH_RESERVED_SIGNATURE 0 + Temp.QuadPart = Val; + Luid.LowPart = Temp.u.LowPart; + Luid.HighPart = Temp.u.HighPart; + return Luid; +} -/* RtlVerifyVersionInfo() ComparisonType */ +FORCEINLINE +LUID +NTAPI_INLINE +RtlConvertUlongToLuid( + IN ULONG Val) +{ + LUID Luid; -#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 + Luid.LowPart = Val; + Luid.HighPart = 0; + return Luid; +} -#define VER_CONDITION_MASK 7 -#define VER_NUM_BITS_PER_CONDITION_MASK 3 +#endif -/* RtlVerifyVersionInfo() TypeMask */ +#if defined(_AMD64_) || defined(_IA64_) +//DECLSPEC_DEPRECATED_DDK_WINXP +FORCEINLINE +LARGE_INTEGER +NTAPI_INLINE +RtlLargeIntegerDivide( + IN LARGE_INTEGER Dividend, + IN LARGE_INTEGER Divisor, + OUT PLARGE_INTEGER Remainder OPTIONAL) +{ + LARGE_INTEGER ret; + ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; + if (Remainder) + Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; + return ret; +} -#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 +#else -#define VER_NT_WORKSTATION 0x0000001 -#define VER_NT_DOMAIN_CONTROLLER 0x0000002 -#define VER_NT_SERVER 0x0000003 +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +LARGE_INTEGER +NTAPI +RtlLargeIntegerDivide( + IN LARGE_INTEGER Dividend, + IN LARGE_INTEGER Divisor, + OUT PLARGE_INTEGER Remainder OPTIONAL); +#endif -#define VER_PLATFORM_WIN32s 0 -#define VER_PLATFORM_WIN32_WINDOWS 1 -#define VER_PLATFORM_WIN32_NT 2 +#endif /* defined(_AMD64_) || defined(_IA64_) */ -typedef union _RTL_RUN_ONCE { - PVOID Ptr; -} RTL_RUN_ONCE, *PRTL_RUN_ONCE; +#if (NTDDI_VERSION >= NTDDI_WIN2K) -typedef ULONG /* LOGICAL */ -(NTAPI *PRTL_RUN_ONCE_INIT_FN) ( - IN OUT PRTL_RUN_ONCE RunOnce, - IN OUT PVOID Parameter OPTIONAL, - IN OUT PVOID *Context OPTIONAL); +NTSYSAPI +BOOLEAN +NTAPI +RtlPrefixUnicodeString( + IN PCUNICODE_STRING String1, + IN PCUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive); -#endif /* _RTL_RUN_ONCE_DEF */ +NTSYSAPI +VOID +NTAPI +RtlUpperString( + IN OUT PSTRING DestinationString, + IN const PSTRING SourceString); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeString( + IN OUT PUNICODE_STRING DestinationString, + IN PCUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString); + +NTSYSAPI +VOID +NTAPI +RtlMapGenericMask( + IN OUT PACCESS_MASK AccessMask, + IN PGENERIC_MAPPING GenericMapping); + +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); + +NTSYSAPI +LONG +NTAPI +RtlCompareString( + IN const PSTRING String1, + IN const PSTRING String2, + BOOLEAN CaseInSensitive); + +NTSYSAPI +VOID +NTAPI +RtlCopyString( + OUT PSTRING DestinationString, + IN const PSTRING SourceString OPTIONAL); + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualString( + IN const PSTRING String1, + IN const PSTRING String2, + IN BOOLEAN CaseInSensitive); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCharToInteger( + IN PCSZ String, + IN ULONG Base OPTIONAL, + OUT PULONG Value); + +NTSYSAPI +CHAR +NTAPI +RtlUpperChar( + IN CHAR Character); + +NTSYSAPI +ULONG +NTAPI +RtlWalkFrameChain( + OUT PVOID *Callers, + IN ULONG Count, + IN ULONG Flags); + +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + +/* Security reference monitor routines */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTKERNELAPI +BOOLEAN +NTAPI +SeSinglePrivilegeCheck( + IN LUID PrivilegeValue, + IN KPROCESSOR_MODE PreviousMode); +#endif + +/* ZwXxx Functions */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTSTATUS +NTAPI +ZwCancelTimer( + IN HANDLE TimerHandle, + OUT PBOOLEAN CurrentState OPTIONAL); + +NTSTATUS +NTAPI +ZwCreateTimer( + OUT PHANDLE TimerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN TIMER_TYPE TimerType); + +NTSTATUS +NTAPI +ZwOpenTimer( + OUT PHANDLE TimerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationThread( + IN HANDLE ThreadHandle, + IN THREADINFOCLASS ThreadInformationClass, + IN PVOID ThreadInformation, + IN ULONG ThreadInformationLength); + +NTSTATUS +NTAPI +ZwSetTimer( + IN HANDLE TimerHandle, + IN PLARGE_INTEGER DueTime, + IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, + IN PVOID TimerContext OPTIONAL, + IN BOOLEAN ResumeTimer, + IN LONG Period OPTIONAL, + OUT PBOOLEAN PreviousState OPTIONAL); + +#endif + +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; + +struct _RTL_GENERIC_COMPARE_ROUTINE; +struct _RTL_GENERIC_ALLOCATE_ROUTINE; +struct _RTL_GENERIC_FREE_ROUTINE; + +typedef struct _RTL_GENERIC_TABLE { + PRTL_SPLAY_LINKS TableRoot; + LIST_ENTRY InsertOrderList; + PLIST_ENTRY OrderedPointer; + ULONG WhichOrderedElement; + ULONG NumberGenericTableElements; + struct _RTL_GENERIC_COMPARE_ROUTINE *CompareRoutine; + struct _RTL_GENERIC_ALLOCATE_ROUTINE *AllocateRoutine; + struct _RTL_GENERIC_FREE_ROUTINE *FreeRoutine; + PVOID TableContext; +} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; typedef enum _TABLE_SEARCH_RESULT { TableEmptyTree, @@ -2585,6 +3636,43 @@ typedef enum _TABLE_SEARCH_RESULT { TableInsertAsRight } TABLE_SEARCH_RESULT; +typedef struct _FILE_FS_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER AvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; + +#define IO_CHECK_CREATE_PARAMETERS 0x0200 +#define IO_ATTACH_DEVICE 0x0400 +#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 + +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_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 struct _FILE_FS_LABEL_INFORMATION { + ULONG VolumeLabelLength; + WCHAR VolumeLabel[1]; +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; + typedef enum _RTL_GENERIC_COMPARE_RESULTS { GenericLessThan, GenericGreaterThan, @@ -2658,2344 +3746,8 @@ typedef VOID IN struct _RTL_GENERIC_TABLE *Table, IN PVOID Buffer); -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; - -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 PRTL_GENERIC_COMPARE_ROUTINE -#undef RTL_GENERIC_COMPARE_ROUTINE -#undef PRTL_GENERIC_ALLOCATE_ROUTINE -#undef RTL_GENERIC_ALLOCATE_ROUTINE -#undef PRTL_GENERIC_FREE_ROUTINE -#undef RTL_GENERIC_FREE_ROUTINE -#undef RTL_GENERIC_TABLE -#undef PRTL_GENERIC_TABLE - -#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE -#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE -#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE -#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE -#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE -#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE -#define RTL_GENERIC_TABLE RTL_AVL_TABLE -#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE - -#endif /* RTL_USE_AVL_TABLES */ - -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 - -#ifdef _X86_ - -typedef enum _INTERLOCKED_RESULT { - ResultNegative = RESULT_NEGATIVE, - ResultZero = RESULT_ZERO, - ResultPositive = RESULT_POSITIVE -} INTERLOCKED_RESULT; - -NTKERNELAPI -INTERLOCKED_RESULT -FASTCALL -Exfi386InterlockedIncrementLong( - IN OUT LONG volatile *Addend); - -NTKERNELAPI -INTERLOCKED_RESULT -FASTCALL -Exfi386InterlockedDecrementLong( - IN PLONG Addend); - -NTKERNELAPI -ULONG -FASTCALL -Exfi386InterlockedExchangeUlong( - IN PULONG Target, - IN ULONG Value); -#endif - - - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTKERNELAPI -NTSTATUS -NTAPI -ExExtendZone( - IN OUT PZONE_HEADER Zone, - IN OUT PVOID Segment, - IN ULONG SegmentSize); - -NTKERNELAPI -NTSTATUS -NTAPI -ExInitializeZone( - OUT PZONE_HEADER Zone, - IN ULONG BlockSize, - IN OUT PVOID InitialSegment, - IN ULONG InitialSegmentSize); - -NTKERNELAPI -NTSTATUS -NTAPI -ExInterlockedExtendZone( - IN OUT PZONE_HEADER Zone, - IN OUT PVOID Segment, - IN ULONG SegmentSize, - IN OUT PKSPIN_LOCK Lock); - -NTKERNELAPI -NTSTATUS -NTAPI -ExUuidCreate( - OUT UUID *Uuid); - -NTKERNELAPI -DECLSPEC_NORETURN -VOID -NTAPI -ExRaiseAccessViolation(VOID); - -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 PUNICODE_STRING DriverClassName, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); - -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 PVOID Buffer, - IN ULONG Length); - -NTHALAPI -ULONG -NTAPI -HalGetBusData( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Length); - -NTHALAPI -BOOLEAN -NTAPI -HalMakeBeep( - IN ULONG Frequency); -#endif /* !defined(NO_LEGACY_DRIVERS) */ - -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 PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -NTHALAPI -ULONG -NTAPI -HalSetBusDataByOffset( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -NTHALAPI -BOOLEAN -NTAPI -HalTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); - -NTHALAPI -PVOID -NTAPI -HalAllocateCrashDumpRegisters( - IN PADAPTER_OBJECT AdapterObject, - IN OUT 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) -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 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 - -VOID -FORCEINLINE -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_)) -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, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice); -#endif - -NTKERNELAPI -VOID -NTAPI -IoAllocateController( - IN PCONTROLLER_OBJECT ControllerObject, - IN PDEVICE_OBJECT DeviceObject, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context OPTIONAL); - -NTKERNELAPI -PCONTROLLER_OBJECT -NTAPI -IoCreateController( - IN ULONG Size); - -NTKERNELAPI -VOID -NTAPI -IoDeleteController( - IN PCONTROLLER_OBJECT ControllerObject); - -NTKERNELAPI -VOID -NTAPI -IoFreeController( - IN PCONTROLLER_OBJECT ControllerObject); - -NTKERNELAPI -PCONFIGURATION_INFORMATION -NTAPI -IoGetConfigurationInformation(VOID); - -NTKERNELAPI -PDEVICE_OBJECT -NTAPI -IoGetDeviceToVerify( - IN PETHREAD Thread); - -NTKERNELAPI -VOID -NTAPI -IoCancelFileOpen( - IN PDEVICE_OBJECT DeviceObject, - IN PFILE_OBJECT FileObject); - -NTKERNELAPI -PGENERIC_MAPPING -NTAPI -IoGetFileObjectGenericMapping(VOID); - -NTKERNELAPI -PIRP -NTAPI -IoMakeAssociatedIrp( - IN PIRP Irp, - IN CCHAR StackSize); - -NTKERNELAPI -NTSTATUS -NTAPI -IoQueryDeviceDescription( - IN PINTERFACE_TYPE BusType OPTIONAL, - IN PULONG BusNumber OPTIONAL, - IN PCONFIGURATION_TYPE ControllerType OPTIONAL, - IN PULONG ControllerNumber OPTIONAL, - IN PCONFIGURATION_TYPE PeripheralType OPTIONAL, - IN PULONG PeripheralNumber OPTIONAL, - IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, - IN OUT PVOID Context OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -IoRaiseHardError( - IN PIRP Irp, - IN PVPB Vpb OPTIONAL, - IN PDEVICE_OBJECT RealDeviceObject); - -NTKERNELAPI -BOOLEAN -NTAPI -IoRaiseInformationalHardError( - IN NTSTATUS ErrorStatus, - IN PUNICODE_STRING String OPTIONAL, - IN PKTHREAD Thread OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -IoRegisterBootDriverReinitialization( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, - IN PVOID Context OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -IoRegisterDriverReinitialization( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, - IN PVOID Context OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoAttachDeviceByPointer( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice); - -NTKERNELAPI -NTSTATUS -NTAPI -IoReportDetectedDevice( - IN PDRIVER_OBJECT DriverObject, - IN INTERFACE_TYPE LegacyBusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PCM_RESOURCE_LIST ResourceList OPTIONAL, - IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, - IN BOOLEAN ResourceAssigned, - IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoReportResourceForDetection( - IN PDRIVER_OBJECT DriverObject, - IN PCM_RESOURCE_LIST DriverList OPTIONAL, - IN ULONG DriverListSize OPTIONAL, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN PCM_RESOURCE_LIST DeviceList OPTIONAL, - IN ULONG DeviceListSize OPTIONAL, - OUT PBOOLEAN ConflictDetected); - -NTKERNELAPI -NTSTATUS -NTAPI -IoReportResourceUsage( - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PCM_RESOURCE_LIST DriverList OPTIONAL, - IN ULONG DriverListSize OPTIONAL, - IN PDEVICE_OBJECT DeviceObject, - IN PCM_RESOURCE_LIST DeviceList OPTIONAL, - IN ULONG DeviceListSize OPTIONAL, - IN BOOLEAN OverrideConflict, - OUT PBOOLEAN ConflictDetected); - -NTKERNELAPI -VOID -NTAPI -IoSetHardErrorOrVerifyDevice( - IN PIRP Irp, - IN PDEVICE_OBJECT DeviceObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoAssignResources( - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); - -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) -NTKERNELAPI -NTSTATUS -FASTCALL -IoReadPartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); - -NTKERNELAPI -NTSTATUS -FASTCALL -IoSetPartitionInformation( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType); - -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 struct _CREATE_DISK* Disk OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoReadDiskSignature( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG BytesPerSector, - OUT PDISK_SIGNATURE Signature); - -NTKERNELAPI -NTSTATUS -NTAPI -IoReadPartitionTableEx( - IN PDEVICE_OBJECT DeviceObject, - OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); - -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 PUNICODE_STRING DosName); - -NTKERNELAPI -NTSTATUS -NTAPI -IoWritePartitionTableEx( - IN PDEVICE_OBJECT DeviceObject, - IN 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 PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PVOID DeviceObject OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoAttachDeviceToDeviceStackSafe( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice, - OUT 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, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); -#endif - -#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 PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL); - -NTSTATUS -NTAPI -IoSetIrpExtraCreateParameter( - IN OUT PIRP Irp, - IN struct _ECP_LIST *ExtraCreateParameter); - -VOID -NTAPI -IoClearIrpExtraCreateParameter( - IN OUT PIRP Irp); - -NTSTATUS -NTAPI -IoGetIrpExtraCreateParameter( - IN PIRP Irp, - OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL); - -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 PCCH Prompt, - OUT PCH Response, - IN ULONG MaximumResponseLength); - -/****************************************************************************** - * Kernel Functions * - ******************************************************************************/ -NTKERNELAPI -VOID -FASTCALL -KeInvalidateRangeAllCaches( - IN PVOID BaseAddress, - IN ULONG Length); - - -#if (NTDDI_VERSION >= NTDDI_WIN2K) - -NTKERNELAPI -VOID -NTAPI -KeSetImportanceDpc( - IN OUT PRKDPC Dpc, - IN KDPC_IMPORTANCE Importance); - -NTKERNELAPI -LONG -NTAPI -KePulseEvent( - IN OUT PRKEVENT Event, - IN KPRIORITY Increment, - IN BOOLEAN Wait); - -NTKERNELAPI -LONG -NTAPI -KeSetBasePriorityThread( - IN OUT PRKTHREAD Thread, - IN LONG Increment); - -NTKERNELAPI -VOID -NTAPI -KeEnterCriticalRegion(VOID); - -NTKERNELAPI -VOID -NTAPI -KeLeaveCriticalRegion(VOID); - -NTKERNELAPI -DECLSPEC_NORETURN -VOID -NTAPI -KeBugCheck( - IN ULONG BugCheckCode); - - -#if defined(SINGLE_GROUP_LEGACY_API) - - -NTKERNELAPI -VOID -NTAPI -KeSetTargetProcessorDpc( - IN OUT 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) -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) - -NTKERNELAPI -NTSTATUS -NTAPI -KeExpandKernelStackAndCallout( - IN PEXPAND_STACK_CALLOUT Callout, - IN PVOID Parameter OPTIONAL, - IN SIZE_T Size); - -NTKERNELAPI -VOID -NTAPI -KeEnterGuardedRegion(VOID); - -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 PKAFFINITY ActiveProcessors OPTIONAL); - -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 PPROCESSOR_NUMBER ProcNumber OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -KeQueryNodeActiveAffinity( - IN USHORT NodeNumber, - OUT PGROUP_AFFINITY Affinity OPTIONAL, - OUT PUSHORT Count OPTIONAL); - -NTKERNELAPI -USHORT -NTAPI -KeQueryNodeMaximumProcessorCount( - IN USHORT NodeNumber); - -NTKERNELAPI -USHORT -NTAPI -KeQueryHighestNodeNumber(VOID); - -NTKERNELAPI -USHORT -NTAPI -KeGetCurrentNodeNumber(VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -KeQueryLogicalProcessorRelationship( - IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, - IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, - OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, - IN OUT PULONG Length); - -NTKERNELAPI -NTSTATUS -NTAPI -KeSetHardwareCounterConfiguration( - IN PHARDWARE_COUNTER CounterArray, - IN ULONG Count); - -NTKERNELAPI -NTSTATUS -NTAPI -KeQueryHardwareCounterConfiguration( - OUT PHARDWARE_COUNTER CounterArray, - IN ULONG MaximumCount, - OUT PULONG Count); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - -/****************************************************************************** - * Memory manager Functions * - ******************************************************************************/ - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTKERNELAPI -PPHYSICAL_MEMORY_RANGE -NTAPI -MmGetPhysicalMemoryRanges(VOID); - -NTKERNELAPI -PHYSICAL_ADDRESS -NTAPI -MmGetPhysicalAddress( - IN PVOID BaseAddress); - -NTKERNELAPI -BOOLEAN -NTAPI -MmIsNonPagedSystemAddressValid( - IN PVOID VirtualAddress); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateNonCachedMemory( - IN SIZE_T NumberOfBytes); - -NTKERNELAPI -VOID -NTAPI -MmFreeNonCachedMemory( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); - -NTKERNELAPI -PVOID -NTAPI -MmGetVirtualForPhysical( - IN PHYSICAL_ADDRESS PhysicalAddress); - -NTKERNELAPI -NTSTATUS -NTAPI -MmMapUserAddressesToPage( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN PVOID PageAddress); - -NTKERNELAPI -PVOID -NTAPI -MmMapVideoDisplay( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); - -NTKERNELAPI -NTSTATUS -NTAPI -MmMapViewInSessionSpace( - IN PVOID Section, - OUT PVOID *MappedBase, - IN OUT PSIZE_T ViewSize); - -NTKERNELAPI -NTSTATUS -NTAPI -MmMapViewInSystemSpace( - IN PVOID Section, - OUT PVOID *MappedBase, - IN OUT PSIZE_T ViewSize); - -NTKERNELAPI -BOOLEAN -NTAPI -MmIsAddressValid( - IN PVOID VirtualAddress); - -NTKERNELAPI -BOOLEAN -NTAPI -MmIsThisAnNtAsSystem(VOID); - -NTKERNELAPI -VOID -NTAPI -MmLockPagableSectionByHandle( - IN PVOID ImageSectionHandle); - -NTKERNELAPI -NTSTATUS -NTAPI -MmUnmapViewInSessionSpace( - IN PVOID MappedBase); - -NTKERNELAPI -NTSTATUS -NTAPI -MmUnmapViewInSystemSpace( - IN PVOID MappedBase); - -NTKERNELAPI -VOID -NTAPI -MmUnsecureVirtualMemory( - IN HANDLE SecureHandle); - -NTKERNELAPI -NTSTATUS -NTAPI -MmRemovePhysicalMemory( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes); - -NTKERNELAPI -HANDLE -NTAPI -MmSecureVirtualMemory( - IN PVOID Address, - IN SIZE_T Size, - IN ULONG ProbeMode); - -NTKERNELAPI -VOID -NTAPI -MmUnmapVideoDisplay( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); - -NTKERNELAPI -NTSTATUS -NTAPI -MmAddPhysicalMemory( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemory( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS HighestAcceptableAddress); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemorySpecifyCache( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemorySpecifyCacheNode( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType, - IN NODE_REQUIREMENT PreferredNode); - -NTKERNELAPI -VOID -NTAPI -MmFreeContiguousMemory( - IN PVOID BaseAddress); - -NTKERNELAPI -VOID -NTAPI -MmFreeContiguousMemorySpecifyCache( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -#if (NTDDI_VERSION >= NTDDI_WINXP) - -NTKERNELAPI -NTSTATUS -NTAPI -MmAdvanceMdl( - IN OUT PMDL Mdl, - IN ULONG NumberOfBytes); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateMappingAddress( - IN SIZE_T NumberOfBytes, - IN ULONG PoolTag); - -NTKERNELAPI -VOID -NTAPI -MmFreeMappingAddress( - IN PVOID BaseAddress, - IN ULONG PoolTag); - -NTKERNELAPI -NTSTATUS -NTAPI -MmIsVerifierEnabled( - OUT PULONG VerifierFlags); - -NTKERNELAPI -PVOID -NTAPI -MmMapLockedPagesWithReservedMapping( - IN PVOID MappingAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList, - IN MEMORY_CACHING_TYPE CacheType); - -NTKERNELAPI -NTSTATUS -NTAPI -MmProtectMdlSystemAddress( - IN PMDL MemoryDescriptorList, - IN ULONG NewProtect); - -NTKERNELAPI -VOID -NTAPI -MmUnmapReservedMapping( - IN PVOID BaseAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList); - -NTKERNELAPI -NTSTATUS -NTAPI -MmAddVerifierThunks( - IN PVOID ThunkBuffer, - IN ULONG ThunkBufferSize); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_WS03) -NTKERNELAPI -NTSTATUS -NTAPI -MmCreateMirror(VOID); -#endif - - -#if (NTDDI_VERSION >= NTDDI_VISTA) -NTSTATUS -NTAPI -MmRotatePhysicalView( - IN PVOID VirtualAddress, - IN OUT PSIZE_T NumberOfBytes, - IN PMDLX NewMdl OPTIONAL, - IN MM_ROTATE_DIRECTION Direction, - IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, - IN PVOID Context OPTIONAL); - -#endif - -/****************************************************************************** - * Process Manager Functions * - ******************************************************************************/ - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtOpenProcess( - OUT PHANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN PCLIENT_ID ClientId OPTIONAL); - -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) - - -NTKERNELAPI -NTSTATUS -NTAPI -PsSetCreateProcessNotifyRoutine( - IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, - IN BOOLEAN Remove); - -NTKERNELAPI -NTSTATUS -NTAPI -PsSetCreateThreadNotifyRoutine( - IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); - -NTKERNELAPI -NTSTATUS -NTAPI -PsSetLoadImageNotifyRoutine( - IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); - -NTKERNELAPI -HANDLE -NTAPI -PsGetCurrentProcessId(VOID); - -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) - -NTKERNELAPI -HANDLE -NTAPI -PsGetProcessId( - IN PEPROCESS Process); - -NTKERNELAPI -HANDLE -NTAPI -PsGetThreadId( - IN PETHREAD Thread); - -NTKERNELAPI -NTSTATUS -NTAPI -PsRemoveCreateThreadNotifyRoutine( - IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); - -NTKERNELAPI -NTSTATUS -NTAPI -PsRemoveLoadImageNotifyRoutine( - IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); - -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 PVOID TableContext OPTIONAL); - -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); - -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableFull( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); - -NTSYSAPI -BOOLEAN -NTAPI -RtlDeleteElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer); - -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); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN BOOLEAN Restart); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableWithoutSplaying( - IN PRTL_GENERIC_TABLE Table, - IN OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlGetElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN ULONG I); - -NTSYSAPI -ULONG -NTAPI -RtlNumberGenericTableElements( - IN PRTL_GENERIC_TABLE Table); - -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( - IN OUT PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlDelete( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -VOID -NTAPI -RtlDeleteNoSplay( - IN PRTL_SPLAY_LINKS Links, - IN OUT PRTL_SPLAY_LINKS *Root); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlSubtreeSuccessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlSubtreePredecessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlRealSuccessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlRealPredecessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -BOOLEAN -NTAPI -RtlPrefixUnicodeString( - IN PCUNICODE_STRING String1, - IN PCUNICODE_STRING String2, - IN BOOLEAN CaseInSensitive); - -NTSYSAPI -VOID -NTAPI -RtlUpperString( - IN OUT PSTRING DestinationString, - IN const PSTRING SourceString); - -NTSYSAPI -NTSTATUS -NTAPI -RtlUpcaseUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); - -NTSYSAPI -VOID -NTAPI -RtlMapGenericMask( - IN OUT PACCESS_MASK AccessMask, - IN PGENERIC_MAPPING GenericMapping); - -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); - -NTSYSAPI -LONG -NTAPI -RtlCompareString( - IN const PSTRING String1, - IN const PSTRING String2, - IN BOOLEAN CaseInSensitive); - -NTSYSAPI -VOID -NTAPI -RtlCopyString( - OUT PSTRING DestinationString, - IN const PSTRING SourceString OPTIONAL); - -NTSYSAPI -BOOLEAN -NTAPI -RtlEqualString( - IN const PSTRING String1, - IN const PSTRING String2, - IN BOOLEAN CaseInSensitive); - -NTSYSAPI -NTSTATUS -NTAPI -RtlCharToInteger( - IN PCSZ String, - IN ULONG Base OPTIONAL, - OUT PULONG Value); - -NTSYSAPI -CHAR -NTAPI -RtlUpperChar( - IN CHAR Character); - -NTSYSAPI -ULONG -NTAPI -RtlWalkFrameChain( - OUT PVOID *Callers, - IN ULONG Count, - IN ULONG Flags); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - - -#if (NTDDI_VERSION >= NTDDI_WINXP) - - NTSYSAPI VOID NTAPI @@ -5006,764 +3758,9 @@ RtlInitializeGenericTableAvl( IN PRTL_AVL_FREE_ROUTINE FreeRoutine, IN PVOID TableContext OPTIONAL); -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); - -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableFullAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); - -NTSYSAPI -BOOLEAN -NTAPI -RtlDeleteElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer); - -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); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN BOOLEAN Restart); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableWithoutSplayingAvl( - IN PRTL_AVL_TABLE Table, - IN OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlLookupFirstMatchingElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableLikeADirectory( - IN PRTL_AVL_TABLE Table, - IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL, - IN PVOID MatchData OPTIONAL, - IN ULONG NextFlag, - IN OUT PVOID *RestartKey, - IN OUT PULONG DeleteCount, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlGetElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN ULONG I); - -NTSYSAPI -ULONG -NTAPI -RtlNumberGenericTableElementsAvl( - IN PRTL_AVL_TABLE Table); - -NTSYSAPI -BOOLEAN -NTAPI -RtlIsGenericTableEmptyAvl( - IN PRTL_AVL_TABLE Table); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - - -NTSYSAPI -VOID -NTAPI -RtlRunOnceInitialize( - OUT PRTL_RUN_ONCE RunOnce); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceExecuteOnce( - IN OUT PRTL_RUN_ONCE RunOnce, - IN PRTL_RUN_ONCE_INIT_FN InitFn, - IN OUT PVOID Parameter OPTIONAL, - OUT PVOID *Context OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceBeginInitialize( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - OUT PVOID *Context OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceComplete( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - IN PVOID Context OPTIONAL); - -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) - - -NTSYSAPI -BOOLEAN -NTAPI -RtlCreateHashTable( - IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL, - IN ULONG Shift, - IN ULONG Flags); - -NTSYSAPI -VOID -NTAPI -RtlDeleteHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); - -NTSYSAPI -BOOLEAN -NTAPI -RtlInsertEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN ULONG_PTR Signature, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -NTSYSAPI -BOOLEAN -NTAPI -RtlRemoveEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlLookupEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN ULONG_PTR Signature, - OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -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); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -VOID -NTAPI -RtlEndEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -BOOLEAN -NTAPI -RtlInitWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlWeaklyEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -VOID -NTAPI -RtlEndWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT 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 PLARGE_INTEGER Remainder OPTIONAL) -{ - 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 PLARGE_INTEGER Remainder OPTIONAL); -#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( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) -{ - Context->ChainHead = NULL; - Context->PrevLinkage = NULL; -} - -FORCEINLINE -VOID -NTAPI -RtlInitHashTableContextFromEnumerator( - IN OUT 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( - IN OUT 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) -NTKERNELAPI -BOOLEAN -NTAPI -SeSinglePrivilegeCheck( - IN LUID PrivilegeValue, - IN KPROCESSOR_MODE PreviousMode); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -/****************************************************************************** - * ZwXxx Functions * - ******************************************************************************/ - - - -NTSYSAPI -NTSTATUS -NTAPI -ZwAllocateLocallyUniqueId( - OUT PLUID Luid); - -NTSYSAPI -NTSTATUS -NTAPI -ZwTerminateProcess( - IN HANDLE ProcessHandle OPTIONAL, - IN NTSTATUS ExitStatus); - -NTSYSAPI -NTSTATUS -NTAPI -ZwOpenProcess( - OUT PHANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN PCLIENT_ID ClientId OPTIONAL); - - -#if (NTDDI_VERSION >= NTDDI_WIN2K) - - -NTSTATUS -NTAPI -ZwCancelTimer( - IN HANDLE TimerHandle, - OUT PBOOLEAN CurrentState OPTIONAL); - -NTSTATUS -NTAPI -ZwCreateTimer( - OUT PHANDLE TimerHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN TIMER_TYPE TimerType); - -NTSTATUS -NTAPI -ZwOpenTimer( - OUT PHANDLE TimerHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetInformationThread( - IN HANDLE ThreadHandle, - IN THREADINFOCLASS ThreadInformationClass, - IN PVOID ThreadInformation, - IN ULONG ThreadInformationLength); - -NTSTATUS -NTAPI -ZwSetTimer( - IN HANDLE TimerHandle, - IN PLARGE_INTEGER DueTime, - IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, - IN PVOID TimerContext OPTIONAL, - IN BOOLEAN ResumeTimer, - IN LONG Period OPTIONAL, - OUT PBOOLEAN PreviousState OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDisplayString( - IN PUNICODE_STRING String); - -NTSYSAPI -NTSTATUS -NTAPI -ZwPowerInformation( - IN POWER_INFORMATION_LEVEL PowerInformationLevel, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDeviceIoControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG IoControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTSTATUS -NTAPI -ZwSetTimerEx( - IN HANDLE TimerHandle, - IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, - IN OUT 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)( - IN OUT 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) -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsTotalDeviceFailure( - IN NTSTATUS Status); -#endif - -/* FIXME : These definitions below doesn't belong to NTDDK */ - #ifdef __cplusplus } #endif + + +#endif /* _NTDDK_ */