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