From 59f2edfce78245e51111bb61fd708cff81d2cc77 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 29 Mar 2010 04:14:34 +0000 Subject: [PATCH] revert r46552 and r46553 svn path=/trunk/; revision=46554 --- .../drivers/filesystems/ext2/inc/ext2fsd.h | 3 - reactos/drivers/serial/serial/serial.h | 9 + reactos/include/ddk/bdasup.h | 262 +- reactos/include/ddk/csq.h | 2 - reactos/include/ddk/ntddk.h | 5611 ++----- reactos/include/ddk/ntifs.h | 4756 +++--- reactos/include/ddk/ntimage.h | 17 +- reactos/include/ddk/wdm.h | 12085 +++++----------- reactos/include/ndk/ketypes.h | 23 + reactos/include/ndk/peb_teb.h | 6 +- reactos/include/psdk/ktmtypes.h | 3 - reactos/include/psdk/ntdef.h | 296 +- reactos/include/psdk/winnt.h | 6 - reactos/ntoskrnl/include/ntoskrnl.h | 1 + reactos/ntoskrnl/mm/mminit.c | 2 +- 15 files changed, 8066 insertions(+), 15016 deletions(-) diff --git a/reactos/drivers/filesystems/ext2/inc/ext2fsd.h b/reactos/drivers/filesystems/ext2/inc/ext2fsd.h index dcf35d996ef..bf2b784fb86 100644 --- a/reactos/drivers/filesystems/ext2/inc/ext2fsd.h +++ b/reactos/drivers/filesystems/ext2/inc/ext2fsd.h @@ -42,11 +42,8 @@ typedef unsigned char BYTE; /* REACTOS FIXME */ #undef DeleteFile /* This is deprecated and should be changed in the EXT2FS driver. */ - -/* FIXME : Those two definitions already exist in wdm.h #define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart #define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart -*/ // the following include files should be in the inc sub-dir associated with this driver diff --git a/reactos/drivers/serial/serial/serial.h b/reactos/drivers/serial/serial/serial.h index b6ed661226c..de94b291138 100644 --- a/reactos/drivers/serial/serial/serial.h +++ b/reactos/drivers/serial/serial/serial.h @@ -17,6 +17,15 @@ #define PST_RS232 1 #define COMMPROP_INITIALIZED 0xE73CF52E +#ifndef _NTIFS_ +/* Why is it only defined in ntifs.h file? */ +NTSTATUS NTAPI +IoAttachDeviceToDeviceStackSafe( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice, + OUT PDEVICE_OBJECT *AttachedToDeviceObject); +#endif + typedef enum { dsStopped, diff --git a/reactos/include/ddk/bdasup.h b/reactos/include/ddk/bdasup.h index 373ccdbdcbf..0bdd590d337 100644 --- a/reactos/include/ddk/bdasup.h +++ b/reactos/include/ddk/bdasup.h @@ -1,12 +1,8 @@ -#pragma once - -#if (NTDDI_VERSION >= NTDDI_WINXP) - #if defined(__cplusplus) extern "C" { #endif -/* Helper macro to enable gcc's extension. */ +/* Helper macro to enable gcc's extension. */ #ifndef __GNU_EXTENSION #ifdef __GNUC__ #define __GNU_EXTENSION __extension__ @@ -16,190 +12,150 @@ extern "C" { #endif #define STDMETHODCALLTYPE __stdcall - -#ifndef _WDMDDK_ typedef GUID *PGUID; -#endif /* Types */ -typedef ULONG BDA_TOPOLOGY_JOINT, *PBDA_TOPOLOGY_JOINT; - -typedef struct _BDA_PIN_PAIRING { - ULONG ulInputPin; - ULONG ulOutputPin; - ULONG ulcMaxInputsPerOutput; - ULONG ulcMinInputsPerOutput; - ULONG ulcMaxOutputsPerInput; - ULONG ulcMinOutputsPerInput; - ULONG ulcTopologyJoints; - const ULONG *pTopologyJoints; +typedef struct _BDA_PIN_PAIRING +{ + ULONG ulInputPin; + ULONG ulOutputPin; + ULONG ulcMaxInputsPerOutput; + ULONG ulcMinInputsPerOutput; + ULONG ulcMaxOutputsPerInput; + ULONG ulcMinOutputsPerInput; + ULONG ulcTopologyJoints; + const ULONG *pTopologyJoints; } BDA_PIN_PAIRING, *PBDA_PIN_PAIRING; -typedef struct _BDA_FILTER_TEMPLATE { - const KSFILTER_DESCRIPTOR *pFilterDescriptor; - ULONG ulcPinPairs; - const BDA_PIN_PAIRING *pPinPairs; +typedef struct _BDA_FILTER_TEMPLATE +{ + const KSFILTER_DESCRIPTOR *pFilterDescriptor; + ULONG ulcPinPairs; + const BDA_PIN_PAIRING *pPinPairs; } BDA_FILTER_TEMPLATE, *PBDA_FILTER_TEMPLATE; -typedef struct _KSM_PIN_PAIR { - KSMETHOD Method; - ULONG InputPinId; - ULONG OutputPinId; - ULONG Reserved; -} KSM_PIN_PAIR, * PKSM_PIN_PAIR; -typedef struct _KSM_PIN { - KSMETHOD Method; - __GNU_EXTENSION union { - ULONG PinId; - ULONG PinType; - }; - ULONG Reserved; +typedef struct _KSM_PIN +{ + KSMETHOD Method; + __GNU_EXTENSION union + { + ULONG PinId; + ULONG PinType; + }; + ULONG Reserved; } KSM_PIN, * PKSM_PIN; /* Functions */ -STDMETHODIMP_(NTSTATUS) -BdaCheckChanges( - IN PIRP Irp); +STDMETHODIMP_(NTSTATUS) BdaCheckChanges(IN PIRP Irp); +STDMETHODIMP_(NTSTATUS) BdaCommitChanges(IN PIRP Irp); -STDMETHODIMP_(NTSTATUS) -BdaCommitChanges( - IN PIRP Irp); +STDMETHODIMP_(NTSTATUS) BdaCreateFilterFactory( + IN PKSDEVICE pKSDevice, + IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, + IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); -STDMETHODIMP_(NTSTATUS) -BdaCreateFilterFactory( - IN PKSDEVICE pKSDevice, - IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, - IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); +STDMETHODIMP_(NTSTATUS) BdaCreateFilterFactoryEx( + IN PKSDEVICE pKSDevice, + IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, + IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate, + OUT PKSFILTERFACTORY *ppKSFilterFactory); -STDMETHODIMP_(NTSTATUS) -BdaCreateFilterFactoryEx( - IN PKSDEVICE pKSDevice, - IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, - IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate, - OUT PKSFILTERFACTORY *ppKSFilterFactory); +STDMETHODIMP_(NTSTATUS) BdaCreatePin( + IN PKSFILTER pKSFilter, + IN ULONG ulPinType, + OUT ULONG *pulPinId); -STDMETHODIMP_(NTSTATUS) -BdaCreatePin( - IN PKSFILTER pKSFilter, - IN ULONG ulPinType, - OUT ULONG *pulPinId); +STDMETHODIMP_(NTSTATUS) BdaCreateTopology( + IN PKSFILTER pKSFilter, + IN ULONG InputPinId, + IN ULONG OutputPinId); -STDMETHODIMP_(NTSTATUS) -BdaCreateTopology( - IN PKSFILTER pKSFilter, - IN ULONG InputPinId, - IN ULONG OutputPinId); +STDMETHODIMP_(NTSTATUS) BdaDeletePin( + IN PKSFILTER pKSFilter, + IN ULONG *pulPinId); -STDMETHODIMP_(NTSTATUS) -BdaDeletePin( - IN PKSFILTER pKSFilter, - IN ULONG *pulPinId); +STDMETHODIMP_(NTSTATUS) BdaFilterFactoryUpdateCacheData( + IN PKSFILTERFACTORY pFilterFactory, + IN const KSFILTER_DESCRIPTOR *pFilterDescriptor OPTIONAL); -STDMETHODIMP_(NTSTATUS) -BdaFilterFactoryUpdateCacheData( - IN PKSFILTERFACTORY pFilterFactory, - IN const KSFILTER_DESCRIPTOR *pFilterDescriptor OPTIONAL); +STDMETHODIMP_(NTSTATUS) BdaGetChangeState( + IN PIRP Irp, + OUT BDA_CHANGE_STATE *pChangeState); -STDMETHODIMP_(NTSTATUS) -BdaGetChangeState( - IN PIRP Irp, - OUT BDA_CHANGE_STATE *pChangeState); +STDMETHODIMP_(NTSTATUS) BdaInitFilter( + IN PKSFILTER pKSFilter, + IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); -STDMETHODIMP_(NTSTATUS) -BdaInitFilter( - IN PKSFILTER pKSFilter, - IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); +STDMETHODIMP_(NTSTATUS) BdaMethodCreatePin( + IN PIRP Irp, + IN KSMETHOD *pKSMethod, + OUT ULONG *pulPinFactoryID); -STDMETHODIMP_(NTSTATUS) -BdaMethodCreatePin( - IN PIRP Irp, - IN KSMETHOD *pKSMethod, - OUT ULONG *pulPinFactoryID); +STDMETHODIMP_(NTSTATUS) BdaMethodCreateTopology( + IN PIRP Irp, + IN KSMETHOD *pKSMethod, + OPTIONAL PVOID pvIgnored); -STDMETHODIMP_(NTSTATUS) -BdaMethodCreateTopology( - IN PIRP Irp, - IN KSMETHOD *pKSMethod, - OPTIONAL PVOID pvIgnored); +STDMETHODIMP_(NTSTATUS) BdaMethodDeletePin( + IN PIRP Irp, + IN KSMETHOD *pKSMethod, + OPTIONAL PVOID pvIgnored); -STDMETHODIMP_(NTSTATUS) -BdaMethodDeletePin( - IN PIRP Irp, - IN KSMETHOD *pKSMethod, - OPTIONAL PVOID pvIgnored); +STDMETHODIMP_(NTSTATUS) BdaPropertyGetControllingPinId( + IN PIRP Irp, + IN KSP_BDA_NODE_PIN *pProperty, + OUT ULONG *pulControllingPinId); -STDMETHODIMP_(NTSTATUS) -BdaPropertyGetControllingPinId( - IN PIRP Irp, - IN KSP_BDA_NODE_PIN *pProperty, - OUT ULONG *pulControllingPinId); +STDMETHODIMP_(NTSTATUS) BdaPropertyGetPinControl( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty, + OUT ULONG *pulProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyGetPinControl( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty, - OUT ULONG *pulProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyNodeDescriptors( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty, + OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyNodeDescriptors( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty, - OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyNodeEvents( + IN PIRP Irp, + IN KSP_NODE *pKSProperty, + OUT GUID *pguidProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyNodeEvents( - IN PIRP Irp, - IN KSP_NODE *pKSProperty, - OUT GUID *pguidProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyNodeMethods( + IN PIRP Irp, + IN KSP_NODE *pKSProperty, + OUT GUID *pguidProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyNodeMethods( - IN PIRP Irp, - IN KSP_NODE *pKSProperty, - OUT GUID *pguidProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyNodeProperties( + IN PIRP Irp, + IN KSP_NODE *pKSProperty, + OUT GUID *pguidProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyNodeProperties( - IN PIRP Irp, - IN KSP_NODE *pKSProperty, - OUT GUID *pguidProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyNodeTypes( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty, + OUT ULONG *pulProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyNodeTypes( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty, - OUT ULONG *pulProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyPinTypes( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty, + OUT ULONG *pulProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyPinTypes( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty, - OUT ULONG *pulProperty); +STDMETHODIMP_(NTSTATUS) BdaPropertyTemplateConnections( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty, + OUT KSTOPOLOGY_CONNECTION *pConnectionProperty); -STDMETHODIMP_(NTSTATUS) -BdaPropertyTemplateConnections( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty, - OUT KSTOPOLOGY_CONNECTION *pConnectionProperty); +STDMETHODIMP_(NTSTATUS) BdaStartChanges(IN PIRP Irp); +STDMETHODIMP_(NTSTATUS) BdaUninitFilter(IN PKSFILTER pKSFilter); -STDMETHODIMP_(NTSTATUS) -BdaStartChanges( - IN PIRP Irp); - -STDMETHODIMP_(NTSTATUS) -BdaUninitFilter( - IN PKSFILTER pKSFilter); - -STDMETHODIMP_(NTSTATUS) -BdaValidateNodeProperty( - IN PIRP Irp, - IN KSPROPERTY *pKSProperty); +STDMETHODIMP_(NTSTATUS) BdaValidateNodeProperty( + IN PIRP Irp, + IN KSPROPERTY *pKSProperty); #if defined(__cplusplus) } #endif - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ diff --git a/reactos/include/ddk/csq.h b/reactos/include/ddk/csq.h index cf7b2c14ce3..99056f610a8 100644 --- a/reactos/include/ddk/csq.h +++ b/reactos/include/ddk/csq.h @@ -229,11 +229,9 @@ typedef struct _IO_CSQ_IRP_CONTEXT { } * */ -#ifndef IO_TYPE_CSQ_EX typedef NTSTATUS (NTAPI *PIO_CSQ_INSERT_IRP_EX) (struct _IO_CSQ *Csq, PIRP Irp, PVOID InsertContext); -#endif /* * CANCEL-SAFE QUEUE DDIs diff --git a/reactos/include/ddk/ntddk.h b/reactos/include/ddk/ntddk.h index 61c23d3077a..0475b3acc85 100644 --- a/reactos/include/ddk/ntddk.h +++ b/reactos/include/ddk/ntddk.h @@ -1,13 +1,12 @@ /* * ntddk.h * - * Windows NT Device Driver Kit + * Windows Device Driver Kit * - * This file is part of the ReactOS DDK package. + * This file is part of the w32api package. * * Contributors: - * Amine Khaldi - * Timo Kreuzer (timo.kreuzer@reactos.org) + * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * @@ -19,10 +18,13 @@ * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * DEFINES: + * DBG - Debugging enabled/disabled (0/1) + * POOL_TAGGING - Enable pool tagging + * _X86_ - X86 environment */ -#pragma once - +#ifndef _NTDDK_ #define _NTDDK_ #if !defined(_NTHAL_) && !defined(_NTIFS_) @@ -39,7 +41,6 @@ #include #include #include -#include /* FIXME #include @@ -54,128 +55,39 @@ extern "C" { #endif -/* GUID and UUID */ -#ifndef _NTLSA_IFS_ -#ifndef _NTLSA_AUDIT_ -#define _NTLSA_AUDIT_ - -#ifndef GUID_DEFINED -#include -#endif - -#endif /* _NTLSA_AUDIT_ */ -#endif /* _NTLSA_IFS_ */ - -typedef GUID UUID; - struct _LOADER_PARAMETER_BLOCK; struct _CREATE_DISK; struct _DRIVE_LAYOUT_INFORMATION_EX; struct _SET_PARTITION_INFORMATION_EX; +// +// GUID and UUID +// +#ifndef GUID_DEFINED +#include +#endif +typedef GUID UUID; + 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_ +#define EXCEPTION_READ_FAULT 0 +#define EXCEPTION_WRITE_FAULT 1 +#define EXCEPTION_EXECUTE_FAULT 8 -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; +#if (NTDDI_VERSION >= NTDDI_VISTA) +extern NTSYSAPI volatile CCHAR KeNumberProcessors; +#elif (NTDDI_VERSION >= NTDDI_WINXP) +extern NTSYSAPI CCHAR KeNumberProcessors; #else -typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; +extern PCCHAR KeNumberProcessors; #endif -#endif /* _NTIMAGE_ */ +#define MAX_WOW64_SHARED_ENTRIES 16 -/****************************************************************************** - * Executive Types * - ******************************************************************************/ - -typedef struct _ZONE_SEGMENT_HEADER { - SINGLE_LIST_ENTRY SegmentList; - PVOID Reserved; -} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; - -typedef struct _ZONE_HEADER { - SINGLE_LIST_ENTRY FreeList; - SINGLE_LIST_ENTRY SegmentList; - ULONG BlockSize; - ULONG TotalSegmentSize; -} ZONE_HEADER, *PZONE_HEADER; - -#define PROTECTED_POOL 0x80000000 - - -/****************************************************************************** - * I/O Manager Types * - ******************************************************************************/ - -/* DEVICE_OBJECT.Flags */ -#define DO_DEVICE_HAS_NAME 0x00000040 -#define DO_SYSTEM_BOOT_PARTITION 0x00000100 -#define DO_LONG_TERM_REQUESTS 0x00000200 -#define DO_NEVER_LAST_DEVICE 0x00000400 -#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 -#define DO_SUPPORTS_TRANSACTIONS 0x00040000 -#define DO_FORCE_NEITHER_IO 0x00080000 -#define DO_VOLUME_DEVICE_OBJECT 0x00100000 -#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 -#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 -#define DO_DISALLOW_EXECUTE 0x00800000 - -#ifndef _ARC_DDK_ -#define _ARC_DDK_ -typedef enum _CONFIGURATION_TYPE { - ArcSystem, - CentralProcessor, - FloatingPointProcessor, - PrimaryIcache, - PrimaryDcache, - SecondaryIcache, - SecondaryDcache, - SecondaryCache, - EisaAdapter, - TcAdapter, - ScsiAdapter, - DtiAdapter, - MultiFunctionAdapter, - DiskController, - TapeController, - CdromController, - WormController, - SerialController, - NetworkController, - DisplayController, - ParallelController, - PointerController, - KeyboardController, - AudioController, - OtherController, - DiskPeripheral, - FloppyDiskPeripheral, - TapePeripheral, - ModemPeripheral, - MonitorPeripheral, - PrinterPeripheral, - PointerPeripheral, - KeyboardPeripheral, - TerminalPeripheral, - OtherPeripheral, - LinePeripheral, - NetworkPeripheral, - SystemMemory, - DockingInformation, - RealModeIrqRoutingTable, - RealModePCIEnumeration, - MaximumType -} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; -#endif /* !_ARC_DDK_ */ +#define NX_SUPPORT_POLICY_ALWAYSOFF 0 +#define NX_SUPPORT_POLICY_ALWAYSON 1 +#define NX_SUPPORT_POLICY_OPTIN 2 +#define NX_SUPPORT_POLICY_OPTOUT 3 /* ** IRP function codes @@ -210,118 +122,102 @@ typedef enum _CONFIGURATION_TYPE { #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 -#define IO_CHECK_CREATE_PARAMETERS 0x0200 -#define IO_ATTACH_DEVICE 0x0400 -#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 +typedef struct _IO_COUNTERS { + ULONGLONG ReadOperationCount; + ULONGLONG WriteOperationCount; + ULONGLONG OtherOperationCount; + ULONGLONG ReadTransferCount; + ULONGLONG WriteTransferCount; + ULONGLONG OtherTransferCount; +} IO_COUNTERS, *PIO_COUNTERS; -typedef -NTSTATUS -(NTAPI *PIO_QUERY_DEVICE_ROUTINE)( - IN PVOID Context, - IN PUNICODE_STRING PathName, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN PKEY_VALUE_FULL_INFORMATION *BusInformation, - IN CONFIGURATION_TYPE ControllerType, - IN ULONG ControllerNumber, - IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, - IN CONFIGURATION_TYPE PeripheralType, - IN ULONG PeripheralNumber, - IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); +typedef struct _VM_COUNTERS { + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; +} VM_COUNTERS, *PVM_COUNTERS; -typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { - IoQueryDeviceIdentifier = 0, - IoQueryDeviceConfigurationData, - IoQueryDeviceComponentInformation, - IoQueryDeviceMaxData -} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; +typedef struct _VM_COUNTERS_EX +{ + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; + SIZE_T PrivateUsage; +} VM_COUNTERS_EX, *PVM_COUNTERS_EX; -typedef VOID -(NTAPI *PDRIVER_REINITIALIZE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN PVOID Context OPTIONAL, - IN ULONG Count); +typedef struct _POOLED_USAGE_AND_LIMITS +{ + SIZE_T PeakPagedPoolUsage; + SIZE_T PagedPoolUsage; + SIZE_T PagedPoolLimit; + SIZE_T PeakNonPagedPoolUsage; + SIZE_T NonPagedPoolUsage; + SIZE_T NonPagedPoolLimit; + SIZE_T PeakPagefileUsage; + SIZE_T PagefileUsage; + SIZE_T PagefileLimit; +} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; -typedef struct _CONTROLLER_OBJECT { - CSHORT Type; - CSHORT Size; - PVOID ControllerExtension; - KDEVICE_QUEUE DeviceWaitQueue; - ULONG Spare1; - LARGE_INTEGER Spare2; -} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; +/* DEVICE_OBJECT.Flags */ + +#define DO_VERIFY_VOLUME 0x00000002 +#define DO_BUFFERED_IO 0x00000004 +#define DO_EXCLUSIVE 0x00000008 +#define DO_DIRECT_IO 0x00000010 +#define DO_MAP_IO_BUFFER 0x00000020 +#define DO_DEVICE_HAS_NAME 0x00000040 +#define DO_DEVICE_INITIALIZING 0x00000080 +#define DO_SYSTEM_BOOT_PARTITION 0x00000100 +#define DO_LONG_TERM_REQUESTS 0x00000200 +#define DO_NEVER_LAST_DEVICE 0x00000400 +#define DO_SHUTDOWN_REGISTERED 0x00000800 +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 +#define DO_POWER_PAGABLE 0x00002000 +#define DO_POWER_INRUSH 0x00004000 +#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 +#define DO_SUPPORTS_TRANSACTIONS 0x00040000 +#define DO_FORCE_NEITHER_IO 0x00080000 +#define DO_VOLUME_DEVICE_OBJECT 0x00100000 +#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 +#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 +#define DO_DISALLOW_EXECUTE 0x00800000 #define DRVO_REINIT_REGISTERED 0x00000008 #define DRVO_INITIALIZED 0x00000010 #define DRVO_BOOTREINIT_REGISTERED 0x00000020 #define DRVO_LEGACY_RESOURCES 0x00000040 -typedef struct _CONFIGURATION_INFORMATION { - ULONG DiskCount; - ULONG FloppyCount; - ULONG CdRomCount; - ULONG TapeCount; - ULONG ScsiPortCount; - ULONG SerialCount; - ULONG ParallelCount; - BOOLEAN AtDiskPrimaryAddressClaimed; - BOOLEAN AtDiskSecondaryAddressClaimed; - ULONG Version; - ULONG MediumChangerCount; -} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; +typedef enum _ARBITER_REQUEST_SOURCE { + ArbiterRequestUndefined = -1, + ArbiterRequestLegacyReported, + ArbiterRequestHalReported, + ArbiterRequestLegacyAssigned, + ArbiterRequestPnpDetected, + ArbiterRequestPnpEnumerated +} ARBITER_REQUEST_SOURCE; -typedef struct _DISK_SIGNATURE { - ULONG PartitionStyle; - _ANONYMOUS_UNION union { - struct { - ULONG Signature; - ULONG CheckSum; - } Mbr; - struct { - GUID DiskId; - } Gpt; - } DUMMYUNIONNAME; -} DISK_SIGNATURE, *PDISK_SIGNATURE; - -typedef struct _TXN_PARAMETER_BLOCK { - USHORT Length; - USHORT TxFsContext; - PVOID TransactionObject; -} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK; - -#define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE) - -typedef struct _IO_DRIVER_CREATE_CONTEXT { - CSHORT Size; - struct _ECP_LIST *ExtraCreateParameter; - PVOID DeviceObjectHint; - PTXN_PARAMETER_BLOCK TxnParameters; -} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT; - -typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PGET_SET_DEVICE_DATA SetBusData; - PGET_SET_DEVICE_DATA GetBusData; - UCHAR CapabilityID; -} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; - -typedef NTSTATUS -(NTAPI *PGET_LOCATION_STRING)( - IN OUT PVOID Context OPTIONAL, - OUT PWCHAR *LocationStrings); - -typedef struct _PNP_LOCATION_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PGET_LOCATION_STRING GetLocationString; -} PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE; +typedef enum _ARBITER_RESULT { + ArbiterResultUndefined = -1, + ArbiterResultSuccess, + ArbiterResultExternalConflict, + ArbiterResultNullRequest +} ARBITER_RESULT; typedef enum _ARBITER_ACTION { ArbiterActionTestAllocation, @@ -342,69 +238,39 @@ typedef struct _ARBITER_CONFLICT_INFO { ULONGLONG End; } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; -typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { - IN OUT PLIST_ENTRY ArbitrationList; - IN ULONG AllocateFromCount; - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; -} ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; - -typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { - IN OUT PLIST_ENTRY ArbitrationList; - IN ULONG AllocateFromCount; - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; -} ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; - -typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { - IN OUT 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; + struct { + IN OUT PLIST_ENTRY ArbitrationList; + IN ULONG AllocateFromCount; + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; + } TestAllocation; + struct { + IN OUT PLIST_ENTRY ArbitrationList; + IN ULONG AllocateFromCount; + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; + } RetestAllocation; + struct { + IN OUT PLIST_ENTRY ArbitrationList; + } BootAllocation; + struct { + OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; + } QueryAllocatedResources; + struct { + IN PDEVICE_OBJECT PhysicalDeviceObject; + IN PIO_RESOURCE_DESCRIPTOR ConflictingResource; + OUT PULONG ConflictCount; + OUT PARBITER_CONFLICT_INFO *Conflicts; + } QueryConflict; + struct { + IN PLIST_ENTRY ArbitrationList; + } QueryArbitrate; + struct { + IN PDEVICE_OBJECT ReserveDevice; + } AddReserved; } Parameters; } ARBITER_PARAMETERS, *PARBITER_PARAMETERS; -typedef enum _ARBITER_REQUEST_SOURCE { - ArbiterRequestUndefined = -1, - ArbiterRequestLegacyReported, - ArbiterRequestHalReported, - ArbiterRequestLegacyAssigned, - ArbiterRequestPnpDetected, - ArbiterRequestPnpEnumerated -} ARBITER_REQUEST_SOURCE; - -typedef enum _ARBITER_RESULT { - ArbiterResultUndefined = -1, - ArbiterResultSuccess, - ArbiterResultExternalConflict, - ArbiterResultNullRequest -} ARBITER_RESULT; - #define ARBITER_FLAG_BOOT_CONFIG 0x00000001 typedef struct _ARBITER_LIST_ENTRY { @@ -441,826 +307,6 @@ typedef struct _ARBITER_INTERFACE { ULONG Flags; } ARBITER_INTERFACE, *PARBITER_INTERFACE; -typedef enum _RESOURCE_TRANSLATION_DIRECTION { - TranslateChildToParent, - TranslateParentToChild -} RESOURCE_TRANSLATION_DIRECTION; - -typedef NTSTATUS -(NTAPI *PTRANSLATE_RESOURCE_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, - IN RESOURCE_TRANSLATION_DIRECTION Direction, - IN ULONG AlternativesCount OPTIONAL, - IN IO_RESOURCE_DESCRIPTOR Alternatives[], - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); - -typedef NTSTATUS -(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PIO_RESOURCE_DESCRIPTOR Source, - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PULONG TargetCount, - OUT PIO_RESOURCE_DESCRIPTOR *Target); - -typedef struct _TRANSLATOR_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PTRANSLATE_RESOURCE_HANDLER TranslateResources; - PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; -} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; - -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 { - 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 { - 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 { - 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 { - 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 { - 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; - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - 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 { - struct { - USHORT FunctionNumber:3; - USHORT DeviceNumber:5; - USHORT BusNumber:8; - } DUMMYSTRUCTNAME; - USHORT AsUSHORT; -} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID; - -#if defined(_WIN64) - -#ifndef USE_DMA_MACROS -#define USE_DMA_MACROS -#endif - -#ifndef NO_LEGACY_DRIVERS -#define NO_LEGACY_DRIVERS -#endif - -#endif /* defined(_WIN64) */ - -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 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 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; - -/* 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, @@ -1307,18 +353,92 @@ typedef enum _HAL_SET_INFORMATION_CLASS { HalProfileDpgoSourceInterruptHandler } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; -typedef NTSTATUS -(NTAPI *pHalQuerySystemInformation)( - IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength); +typedef struct _HAL_PROFILE_SOURCE_INTERVAL { + KPROFILE_SOURCE Source; + ULONG_PTR Interval; +} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; + +typedef struct _HAL_PROFILE_SOURCE_INFORMATION { + KPROFILE_SOURCE Source; + BOOLEAN Supported; + ULONG Interval; +} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; + +typedef struct _MAP_REGISTER_ENTRY { + PVOID MapRegister; + BOOLEAN WriteToDevice; +} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; + +typedef struct _DEBUG_DEVICE_ADDRESS { + UCHAR Type; + BOOLEAN Valid; + UCHAR Reserved[2]; + PUCHAR TranslatedAddress; + ULONG Length; +} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; + +typedef struct _DEBUG_MEMORY_REQUIREMENTS { + PHYSICAL_ADDRESS Start; + PHYSICAL_ADDRESS MaxEnd; + PVOID VirtualAddress; + ULONG Length; + BOOLEAN Cached; + BOOLEAN Aligned; +} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; + +typedef struct _DEBUG_DEVICE_DESCRIPTOR { + ULONG Bus; + ULONG Slot; + USHORT Segment; + USHORT VendorID; + USHORT DeviceID; + UCHAR BaseClass; + UCHAR SubClass; + UCHAR ProgIf; + BOOLEAN Initialized; + BOOLEAN Configured; + DEBUG_DEVICE_ADDRESS BaseAddress[6]; + DEBUG_MEMORY_REQUIREMENTS Memory; +} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; + +typedef struct _PM_DISPATCH_TABLE { + ULONG Signature; + ULONG Version; + PVOID Function[1]; +} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; + +typedef enum _RESOURCE_TRANSLATION_DIRECTION { + TranslateChildToParent, + TranslateParentToChild +} RESOURCE_TRANSLATION_DIRECTION; typedef NTSTATUS -(NTAPI *pHalSetSystemInformation)( - IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer); +(NTAPI *PTRANSLATE_RESOURCE_HANDLER)( + IN OUT PVOID Context, + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, + IN RESOURCE_TRANSLATION_DIRECTION Direction, + IN ULONG AlternativesCount OPTIONAL, + IN IO_RESOURCE_DESCRIPTOR Alternatives[], + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); + +typedef NTSTATUS +(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( + IN PVOID Context OPTIONAL, + IN PIO_RESOURCE_DESCRIPTOR Source, + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PULONG TargetCount, + OUT PIO_RESOURCE_DESCRIPTOR *Target); + +typedef struct _TRANSLATOR_INTERFACE { + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PTRANSLATE_RESOURCE_HANDLER TranslateResources; + PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; +} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; typedef VOID (FASTCALL *pHalExamineMBR)( @@ -1349,6 +469,28 @@ typedef NTSTATUS IN ULONG NumberOfHeads, IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); +typedef PBUS_HANDLER +(FASTCALL *pHalHandlerForBus)( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber); + +typedef VOID +(FASTCALL *pHalReferenceBusHandler)( + IN PBUS_HANDLER BusHandler); + +typedef NTSTATUS +(NTAPI *pHalQuerySystemInformation)( + IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength); + +typedef NTSTATUS +(NTAPI *pHalSetSystemInformation)( + IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer); + typedef NTSTATUS (NTAPI *pHalQueryBusSlots)( IN PBUS_HANDLER BusHandler, @@ -1360,12 +502,6 @@ typedef NTSTATUS (NTAPI *pHalInitPnpDriver)( VOID); -typedef struct _PM_DISPATCH_TABLE { - ULONG Signature; - ULONG Version; - PVOID Function[1]; -} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; - typedef NTSTATUS (NTAPI *pHalInitPowerManagement)( IN PPM_DISPATCH_TABLE PmDriverDispatchTable, @@ -1405,7 +541,12 @@ typedef NTSTATUS IN PHYSICAL_ADDRESS PhysicalAddress, IN LARGE_INTEGER NumberOfBytes); -typedef BOOLEAN +typedef VOID +(NTAPI *pHalEndOfBoot)( + VOID); + +typedef +BOOLEAN (NTAPI *pHalTranslateBusAddress)( IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, @@ -1413,7 +554,8 @@ typedef BOOLEAN IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress); -typedef NTSTATUS +typedef +NTSTATUS (NTAPI *pHalAssignSlotResources)( IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING DriverClassName OPTIONAL, @@ -1424,24 +566,23 @@ typedef NTSTATUS IN ULONG SlotNumber, IN OUT PCM_RESOURCE_LIST *AllocatedResources); -typedef VOID +typedef +VOID (NTAPI *pHalHaltSystem)( VOID); -typedef BOOLEAN +typedef +BOOLEAN (NTAPI *pHalResetDisplay)( VOID); -typedef struct _MAP_REGISTER_ENTRY { - PVOID MapRegister; - BOOLEAN WriteToDevice; -} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; - -typedef UCHAR +typedef +UCHAR (NTAPI *pHalVectorToIDTEntry)( ULONG Vector); -typedef BOOLEAN +typedef +BOOLEAN (NTAPI *pHalFindBusAddressTranslation)( IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, @@ -1449,33 +590,94 @@ typedef BOOLEAN IN OUT PULONG_PTR Context, IN BOOLEAN NextBus); -typedef VOID -(NTAPI *pHalEndOfBoot)( - VOID); +typedef +NTSTATUS +(NTAPI *pKdSetupPciDeviceForDebugging)( + IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); -typedef PVOID +typedef +NTSTATUS +(NTAPI *pKdReleasePciDeviceForDebugging)( + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); + +typedef +PVOID +(NTAPI *pKdGetAcpiTablePhase0)( + IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature); + +typedef +PVOID (NTAPI *pHalGetAcpiTable)( IN ULONG Signature, IN PCSTR OemId OPTIONAL, IN PCSTR OemTableId OPTIONAL); + +typedef +VOID +(NTAPI *pKdCheckPowerButton)( + VOID); -#if defined(_IA64_) -typedef NTSTATUS -(*pHalGetErrorCapList)( - IN OUT PULONG CapsListLength, - IN OUT PUCHAR ErrorCapList); +#if (NTDDI_VERSION >= NTDDI_VISTA) +typedef +PVOID +(NTAPI *pKdMapPhysicalMemory64)( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB); -typedef NTSTATUS -(*pHalInjectError)( - IN ULONG BufferLength, - IN PUCHAR Buffer); +typedef +VOID +(NTAPI *pKdUnmapVirtualAddress)( + IN PVOID VirtualAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB); +#else +typedef +PVOID +(NTAPI *pKdMapPhysicalMemory64)( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages); + +typedef +VOID +(NTAPI *pKdUnmapVirtualAddress)( + IN PVOID VirtualAddress, + IN ULONG NumberPages); #endif -typedef VOID + +typedef +ULONG +(NTAPI *pKdGetPciDataByOffset)( + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +typedef +ULONG +(NTAPI *pKdSetPciDataByOffset)( + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +typedef BOOLEAN +(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( + IN ULONG Columns, + IN ULONG Rows); + +typedef +VOID (NTAPI *PCI_ERROR_HANDLER_CALLBACK)( VOID); -typedef VOID +typedef +VOID (NTAPI *pHalSetPciErrorHandlerCallback)( IN PCI_ERROR_HANDLER_CALLBACK Callback); @@ -1549,706 +751,78 @@ extern NTKERNELAPI HAL_DISPATCH HalDispatchTable; #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory #define HalEndOfBoot HALDISPATCH->HalEndOfBoot #define HalMirrorVerify HALDISPATCH->HalMirrorVerify -#define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable -#define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback -#if defined(_IA64_) -#define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList -#define HalInjectError HALDISPATCH->HalInjectError + +typedef struct _FILE_ALIGNMENT_INFORMATION { + ULONG AlignmentRequirement; +} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; + +typedef struct _FILE_NAME_INFORMATION { + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; + + +typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { + ULONG FileAttributes; + ULONG ReparseTag; +} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; + +typedef struct _FILE_DISPOSITION_INFORMATION { + BOOLEAN DeleteFile; +} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; + +typedef struct _FILE_END_OF_FILE_INFORMATION { + LARGE_INTEGER EndOfFile; +} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; + +typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { + LARGE_INTEGER ValidDataLength; +} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; + +typedef union _FILE_SEGMENT_ELEMENT { + PVOID64 Buffer; + ULONGLONG Alignment; +}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; + +#define SE_UNSOLICITED_INPUT_PRIVILEGE 6 + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +ULONGLONG +NTAPI +VerSetConditionMask( + IN ULONGLONG ConditionMask, + IN ULONG TypeMask, + IN UCHAR Condition); #endif -typedef struct _HAL_BUS_INFORMATION { - INTERFACE_TYPE BusType; - BUS_DATA_TYPE ConfigurationType; - ULONG BusNumber; - ULONG Reserved; -} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION; - -typedef struct _HAL_PROFILE_SOURCE_INFORMATION { - KPROFILE_SOURCE Source; - BOOLEAN Supported; - ULONG Interval; -} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; - -typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX { - KPROFILE_SOURCE Source; - BOOLEAN Supported; - ULONG_PTR Interval; - ULONG_PTR DefInterval; - ULONG_PTR MaxInterval; - ULONG_PTR MinInterval; -} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX; - -typedef struct _HAL_PROFILE_SOURCE_INTERVAL { - KPROFILE_SOURCE Source; - ULONG_PTR Interval; -} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; - -typedef struct _HAL_PROFILE_SOURCE_LIST { - KPROFILE_SOURCE Source; - PWSTR Description; -} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST; - -typedef enum _HAL_DISPLAY_BIOS_INFORMATION { - HalDisplayInt10Bios, - HalDisplayEmulatedBios, - HalDisplayNoBios -} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION; - -typedef struct _HAL_POWER_INFORMATION { - ULONG TBD; -} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION; - -typedef struct _HAL_PROCESSOR_SPEED_INFO { - ULONG ProcessorSpeed; -} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION; - -typedef struct _HAL_CALLBACKS { - PCALLBACK_OBJECT SetSystemInformation; - PCALLBACK_OBJECT BusCheck; -} HAL_CALLBACKS, *PHAL_CALLBACKS; - -typedef struct _HAL_PROCESSOR_FEATURE { - ULONG UsableFeatureBits; -} HAL_PROCESSOR_FEATURE; - -typedef NTSTATUS -(NTAPI *PHALIOREADWRITEHANDLER)( - IN BOOLEAN fRead, - IN ULONG dwAddr, - IN ULONG dwSize, - IN OUT PULONG pdwData); - -typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { - ULONG BadAddrBegin; - ULONG BadAddrSize; - ULONG OSVersionTrigger; - PHALIOREADWRITEHANDLER IOHandler; -} HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST; - -#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) - -typedef VOID -(NTAPI *PHALMCAINTERFACELOCK)( - VOID); - -typedef VOID -(NTAPI *PHALMCAINTERFACEUNLOCK)( - VOID); - -typedef NTSTATUS -(NTAPI *PHALMCAINTERFACEREADREGISTER)( - IN UCHAR BankNumber, - IN OUT PVOID Exception); - -typedef struct _HAL_MCA_INTERFACE { - PHALMCAINTERFACELOCK Lock; - PHALMCAINTERFACEUNLOCK Unlock; - PHALMCAINTERFACEREADREGISTER ReadRegister; -} HAL_MCA_INTERFACE; - -typedef enum { - ApicDestinationModePhysical = 1, - ApicDestinationModeLogicalFlat, - ApicDestinationModeLogicalClustered, - ApicDestinationModeUnknown -} HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE; - -#if defined(_AMD64_) - -struct _KTRAP_FRAME; -struct _KEXCEPTION_FRAME; - -typedef ERROR_SEVERITY -(NTAPI *PDRIVER_EXCPTN_CALLBACK)( - IN PVOID Context, - IN struct _KTRAP_FRAME *TrapFrame, - IN struct _KEXCEPTION_FRAME *ExceptionFrame, - IN PMCA_EXCEPTION Exception); - -#endif - -#if defined(_X86_) || defined(_IA64_) -typedef -#if defined(_IA64_) -ERROR_SEVERITY -#else -VOID -#endif -(NTAPI *PDRIVER_EXCPTN_CALLBACK)( - IN PVOID Context, - IN PMCA_EXCEPTION BankLog); -#endif - -typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK; - -typedef struct _MCA_DRIVER_INFO { - PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback; - PKDEFERRED_ROUTINE DpcCallback; - PVOID DeviceContext; -} MCA_DRIVER_INFO, *PMCA_DRIVER_INFO; - -typedef struct _HAL_ERROR_INFO { - ULONG Version; - ULONG InitMaxSize; - ULONG McaMaxSize; - ULONG McaPreviousEventsCount; - ULONG McaCorrectedEventsCount; - ULONG McaKernelDeliveryFails; - ULONG McaDriverDpcQueueFails; - ULONG McaReserved; - ULONG CmcMaxSize; - ULONG CmcPollingInterval; - ULONG CmcInterruptsCount; - ULONG CmcKernelDeliveryFails; - ULONG CmcDriverDpcQueueFails; - ULONG CmcGetStateFails; - ULONG CmcClearStateFails; - ULONG CmcReserved; - ULONGLONG CmcLogId; - ULONG CpeMaxSize; - ULONG CpePollingInterval; - ULONG CpeInterruptsCount; - ULONG CpeKernelDeliveryFails; - ULONG CpeDriverDpcQueueFails; - ULONG CpeGetStateFails; - ULONG CpeClearStateFails; - ULONG CpeInterruptSources; - ULONGLONG CpeLogId; - ULONGLONG KernelReserved[4]; -} HAL_ERROR_INFO, *PHAL_ERROR_INFO; - -#define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1) -#define HAL_MCE_DISABLED ((ULONG)0) - -#define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED -#define HAL_CMC_DISABLED HAL_MCE_DISABLED - -#define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED -#define HAL_CPE_DISABLED HAL_MCE_DISABLED - -#define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED -#define HAL_MCA_DISABLED HAL_MCE_DISABLED - -typedef VOID -(NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( - IN PVOID Context, - IN PCMC_EXCEPTION CmcLog); - -typedef VOID -(NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( - IN PVOID Context, - IN PCPE_EXCEPTION CmcLog); - -typedef struct _CMC_DRIVER_INFO { - PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback; - PKDEFERRED_ROUTINE DpcCallback; - PVOID DeviceContext; -} CMC_DRIVER_INFO, *PCMC_DRIVER_INFO; - -typedef struct _CPE_DRIVER_INFO { - PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback; - PKDEFERRED_ROUTINE DpcCallback; - PVOID DeviceContext; -} CPE_DRIVER_INFO, *PCPE_DRIVER_INFO; - -#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_) - -#if defined(_IA64_) - -typedef NTSTATUS -(*HALSENDCROSSPARTITIONIPI)( - IN USHORT ProcessorID, - IN UCHAR HardwareVector); - -typedef NTSTATUS -(*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)( - OUT PULONG Vector, - OUT PKIRQL Irql, - IN OUT PGROUP_AFFINITY Affinity, - OUT PUCHAR HardwareVector); - -typedef VOID -(*HALFREECROSSPARTITIONINTERRUPTVECTOR)( - IN ULONG Vector, - IN PGROUP_AFFINITY Affinity); - -typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE { - HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi; - HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector; - HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector; -} HAL_CROSS_PARTITION_IPI_INTERFACE; - -#define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \ - FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \ - HalFreeCrossPartitionInterruptVector) - -#endif /* defined(_IA64_) */ - -typedef struct _HAL_PLATFORM_INFORMATION { - ULONG PlatformFlags; -} HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION; - -#define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L -#define HAL_PLATFORM_DISABLE_PTCG 0x04L -#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L -#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L -#define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L - -/****************************************************************************** - * Kernel Types * - ******************************************************************************/ - -#define NX_SUPPORT_POLICY_ALWAYSOFF 0 -#define NX_SUPPORT_POLICY_ALWAYSON 1 -#define NX_SUPPORT_POLICY_OPTIN 2 -#define NX_SUPPORT_POLICY_OPTOUT 3 - -typedef VOID -(NTAPI *PEXPAND_STACK_CALLOUT)( - IN PVOID Parameter OPTIONAL); - -typedef VOID -(NTAPI *PTIMER_APC_ROUTINE)( - IN PVOID TimerContext, - IN ULONG TimerLowValue, - IN LONG TimerHighValue); - -typedef enum _TIMER_SET_INFORMATION_CLASS { - TimerSetCoalescableTimer, - MaxTimerInfoClass -} TIMER_SET_INFORMATION_CLASS; - -#if (NTDDI_VERSION >= NTDDI_WIN7) -typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO { - IN LARGE_INTEGER DueTime; - IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL; - IN PVOID TimerContext OPTIONAL; - IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL; - IN ULONG Period OPTIONAL; - IN ULONG TolerableDelay; - OUT PBOOLEAN PreviousState OPTIONAL; -} TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO; -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -#define XSTATE_LEGACY_FLOATING_POINT 0 -#define XSTATE_LEGACY_SSE 1 -#define XSTATE_GSSE 2 - -#define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT)) -#define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE)) -#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) -#define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE)) - -#define MAXIMUM_XSTATE_FEATURES 64 - -typedef struct _XSTATE_FEATURE { - ULONG Offset; - ULONG Size; -} XSTATE_FEATURE, *PXSTATE_FEATURE; - -typedef struct _XSTATE_CONFIGURATION { - ULONG64 EnabledFeatures; - ULONG Size; - ULONG OptimizedSave:1; - XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; -} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; - -#define MAX_WOW64_SHARED_ENTRIES 16 - -typedef struct _KUSER_SHARED_DATA { - ULONG TickCountLowDeprecated; - ULONG TickCountMultiplier; - volatile KSYSTEM_TIME InterruptTime; - volatile KSYSTEM_TIME SystemTime; - volatile KSYSTEM_TIME TimeZoneBias; - USHORT ImageNumberLow; - USHORT ImageNumberHigh; - WCHAR NtSystemRoot[260]; - ULONG MaxStackTraceDepth; - ULONG CryptoExponent; - ULONG TimeZoneId; - ULONG LargePageMinimum; - ULONG Reserved2[7]; - NT_PRODUCT_TYPE NtProductType; - BOOLEAN ProductTypeIsValid; - ULONG NtMajorVersion; - ULONG NtMinorVersion; - BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; - ULONG Reserved1; - ULONG Reserved3; - volatile ULONG TimeSlip; - ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; - ULONG AltArchitecturePad[1]; - LARGE_INTEGER SystemExpirationDate; - ULONG SuiteMask; - BOOLEAN KdDebuggerEnabled; -#if (NTDDI_VERSION >= NTDDI_WINXPSP2) - UCHAR NXSupportPolicy; -#endif - volatile ULONG ActiveConsoleId; - volatile ULONG DismountCount; - ULONG ComPlusPackage; - ULONG LastSystemRITEventTickCount; - ULONG NumberOfPhysicalPages; - BOOLEAN SafeBootMode; -#if (NTDDI_VERSION >= NTDDI_WIN7) - union { - UCHAR TscQpcData; - struct { - UCHAR TscQpcEnabled:1; - UCHAR TscQpcSpareFlag:1; - UCHAR TscQpcShift:6; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - UCHAR TscQpcPad[2]; -#endif -#if (NTDDI_VERSION >= NTDDI_VISTA) - union { - ULONG SharedDataFlags; - struct { - ULONG DbgErrorPortPresent:1; - ULONG DbgElevationEnabled:1; - ULONG DbgVirtEnabled:1; - ULONG DbgInstallerDetectEnabled:1; - ULONG DbgSystemDllRelocated:1; - ULONG DbgDynProcessorEnabled:1; - ULONG DbgSEHValidationEnabled:1; - ULONG SpareBits:25; - } DUMMYSTRUCTNAME2; - } DUMMYUNIONNAME2; -#else - ULONG TraceLogging; -#endif - ULONG DataFlagsPad[1]; - ULONGLONG TestRetInstruction; - ULONG SystemCall; - ULONG SystemCallReturn; - ULONGLONG SystemCallPad[3]; - _ANONYMOUS_UNION union { - volatile KSYSTEM_TIME TickCount; - volatile ULONG64 TickCountQuad; - _ANONYMOUS_STRUCT struct { - ULONG ReservedTickCountOverlay[3]; - ULONG TickCountPad[1]; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME3; - ULONG Cookie; - ULONG CookiePad[1]; -#if (NTDDI_VERSION >= NTDDI_WS03) - LONGLONG ConsoleSessionForegroundProcessId; - ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; -#endif -#if (NTDDI_VERSION >= NTDDI_VISTA) -#if (NTDDI_VERSION >= NTDDI_WIN7) - USHORT UserModeGlobalLogger[16]; -#else - USHORT UserModeGlobalLogger[8]; - ULONG HeapTracingPid[2]; - ULONG CritSecTracingPid[2]; -#endif - ULONG ImageFileExecutionOptions; -#if (NTDDI_VERSION >= NTDDI_VISTASP1) - ULONG LangGenerationCount; -#else - /* 4 bytes padding */ -#endif - ULONGLONG Reserved5; - volatile ULONG64 InterruptTimeBias; -#endif -#if (NTDDI_VERSION >= NTDDI_WIN7) - volatile ULONG64 TscQpcBias; - volatile ULONG ActiveProcessorCount; - volatile USHORT ActiveGroupCount; - USHORT Reserved4; - volatile ULONG AitSamplingValue; - volatile ULONG AppCompatFlag; - ULONGLONG SystemDllNativeRelocation; - ULONG SystemDllWowRelocation; - ULONG XStatePad[1]; - XSTATE_CONFIGURATION XState; -#endif -} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; - -#if (NTDDI_VERSION >= NTDDI_VISTA) -extern NTSYSAPI volatile CCHAR KeNumberProcessors; -#elif (NTDDI_VERSION >= NTDDI_WINXP) -extern NTSYSAPI CCHAR KeNumberProcessors; -#else -extern PCCHAR KeNumberProcessors; -#endif - - -/****************************************************************************** - * Kernel Debugger Types * - ******************************************************************************/ -typedef struct _DEBUG_DEVICE_ADDRESS { - UCHAR Type; - BOOLEAN Valid; - UCHAR Reserved[2]; - PUCHAR TranslatedAddress; - ULONG Length; -} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; - -typedef struct _DEBUG_MEMORY_REQUIREMENTS { - PHYSICAL_ADDRESS Start; - PHYSICAL_ADDRESS MaxEnd; - PVOID VirtualAddress; - ULONG Length; - BOOLEAN Cached; - BOOLEAN Aligned; -} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; - -typedef struct _DEBUG_DEVICE_DESCRIPTOR { - ULONG Bus; - ULONG Slot; - USHORT Segment; - USHORT VendorID; - USHORT DeviceID; - UCHAR BaseClass; - UCHAR SubClass; - UCHAR ProgIf; - BOOLEAN Initialized; - BOOLEAN Configured; - DEBUG_DEVICE_ADDRESS BaseAddress[6]; - DEBUG_MEMORY_REQUIREMENTS Memory; -} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; - -typedef NTSTATUS -(NTAPI *pKdSetupPciDeviceForDebugging)( - IN PVOID LoaderBlock OPTIONAL, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); - -typedef NTSTATUS -(NTAPI *pKdReleasePciDeviceForDebugging)( - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); - -typedef PVOID -(NTAPI *pKdGetAcpiTablePhase0)( - IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN ULONG Signature); - -typedef VOID -(NTAPI *pKdCheckPowerButton)( - VOID); - -#if (NTDDI_VERSION >= NTDDI_VISTA) -typedef PVOID -(NTAPI *pKdMapPhysicalMemory64)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB); - -typedef VOID -(NTAPI *pKdUnmapVirtualAddress)( - IN PVOID VirtualAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB); -#else -typedef PVOID -(NTAPI *pKdMapPhysicalMemory64)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages); - -typedef VOID -(NTAPI *pKdUnmapVirtualAddress)( - IN PVOID VirtualAddress, - IN ULONG NumberPages); -#endif - -typedef ULONG -(NTAPI *pKdGetPciDataByOffset)( - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -typedef ULONG -(NTAPI *pKdSetPciDataByOffset)( - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); -/****************************************************************************** - * Memory manager Types * - ******************************************************************************/ - -typedef struct _PHYSICAL_MEMORY_RANGE { - PHYSICAL_ADDRESS BaseAddress; - LARGE_INTEGER NumberOfBytes; -} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; - -typedef NTSTATUS -(NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( - IN PMDL DestinationMdl, - IN PMDL SourceMdl, - IN PVOID Context); - -typedef enum _MM_ROTATE_DIRECTION { - MmToFrameBuffer, - MmToFrameBufferNoCopy, - MmToRegularMemory, - MmToRegularMemoryNoCopy, - MmMaximumRotateDirection -} MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION; - - -/****************************************************************************** - * Process Manager Types * - ******************************************************************************/ - -#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 -#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 -#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 -#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 -#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 - -typedef struct _QUOTA_LIMITS { - SIZE_T PagedPoolLimit; - SIZE_T NonPagedPoolLimit; - SIZE_T MinimumWorkingSetSize; - SIZE_T MaximumWorkingSetSize; - SIZE_T PagefileLimit; - LARGE_INTEGER TimeLimit; -} QUOTA_LIMITS, *PQUOTA_LIMITS; - -typedef union _RATE_QUOTA_LIMIT { - ULONG RateData; - struct { - ULONG RatePercent:7; - ULONG Reserved0:25; - } DUMMYSTRUCTNAME; -} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT; - -typedef struct _QUOTA_LIMITS_EX { - SIZE_T PagedPoolLimit; - SIZE_T NonPagedPoolLimit; - SIZE_T MinimumWorkingSetSize; - SIZE_T MaximumWorkingSetSize; - SIZE_T PagefileLimit; - LARGE_INTEGER TimeLimit; - SIZE_T WorkingSetLimit; - SIZE_T Reserved2; - SIZE_T Reserved3; - SIZE_T Reserved4; - ULONG Flags; - RATE_QUOTA_LIMIT CpuRateLimit; -} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; - -typedef struct _IO_COUNTERS { - ULONGLONG ReadOperationCount; - ULONGLONG WriteOperationCount; - ULONGLONG OtherOperationCount; - ULONGLONG ReadTransferCount; - ULONGLONG WriteTransferCount; - ULONGLONG OtherTransferCount; -} IO_COUNTERS, *PIO_COUNTERS; - -typedef struct _VM_COUNTERS { - SIZE_T PeakVirtualSize; - SIZE_T VirtualSize; - ULONG PageFaultCount; - SIZE_T PeakWorkingSetSize; - SIZE_T WorkingSetSize; - SIZE_T QuotaPeakPagedPoolUsage; - SIZE_T QuotaPagedPoolUsage; - SIZE_T QuotaPeakNonPagedPoolUsage; - SIZE_T QuotaNonPagedPoolUsage; - SIZE_T PagefileUsage; - SIZE_T PeakPagefileUsage; -} VM_COUNTERS, *PVM_COUNTERS; - -typedef struct _VM_COUNTERS_EX { - SIZE_T PeakVirtualSize; - SIZE_T VirtualSize; - ULONG PageFaultCount; - SIZE_T PeakWorkingSetSize; - SIZE_T WorkingSetSize; - SIZE_T QuotaPeakPagedPoolUsage; - SIZE_T QuotaPagedPoolUsage; - SIZE_T QuotaPeakNonPagedPoolUsage; - SIZE_T QuotaNonPagedPoolUsage; - SIZE_T PagefileUsage; - SIZE_T PeakPagefileUsage; - SIZE_T PrivateUsage; -} VM_COUNTERS_EX, *PVM_COUNTERS_EX; - -#define MAX_HW_COUNTERS 16 -#define THREAD_PROFILING_FLAG_DISPATCH 0x00000001 - -typedef enum _HARDWARE_COUNTER_TYPE { - PMCCounter, - MaxHardwareCounterType -} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE; - -typedef struct _HARDWARE_COUNTER { - HARDWARE_COUNTER_TYPE Type; - ULONG Reserved; - ULONG64 Index; -} HARDWARE_COUNTER, *PHARDWARE_COUNTER; - -typedef struct _POOLED_USAGE_AND_LIMITS { - SIZE_T PeakPagedPoolUsage; - SIZE_T PagedPoolUsage; - SIZE_T PagedPoolLimit; - SIZE_T PeakNonPagedPoolUsage; - SIZE_T NonPagedPoolUsage; - SIZE_T NonPagedPoolLimit; - SIZE_T PeakPagefileUsage; - SIZE_T PagefileUsage; - SIZE_T PagefileLimit; -} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; - -typedef struct _PROCESS_ACCESS_TOKEN { - HANDLE Token; - HANDLE Thread; -} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; - -#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL -#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1)) - -typedef struct _PROCESS_EXCEPTION_PORT { - IN HANDLE ExceptionPortHandle; - IN OUT ULONG StateFlags; -} PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT; - -typedef VOID -(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( - IN HANDLE ParentId, - IN HANDLE ProcessId, - IN BOOLEAN Create); - -typedef struct _PS_CREATE_NOTIFY_INFO { - IN SIZE_T Size; - union { - IN ULONG Flags; - struct { - IN ULONG FileOpenNameAvailable:1; - IN ULONG Reserved:31; - }; - }; - IN HANDLE ParentProcessId; - IN CLIENT_ID CreatingThreadId; - IN OUT struct _FILE_OBJECT *FileObject; - IN PCUNICODE_STRING ImageFileName; - IN PCUNICODE_STRING CommandLine OPTIONAL; - IN OUT NTSTATUS CreationStatus; -} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; - -typedef VOID -(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( - IN OUT PEPROCESS Process, - IN HANDLE ProcessId, - IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL); - -typedef VOID -(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( - IN HANDLE ProcessId, - IN HANDLE ThreadId, - IN BOOLEAN Create); - -#define IMAGE_ADDRESSING_MODE_32BIT 3 +#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ + ((ConditionMask) = VerSetConditionMask((ConditionMask), \ + (TypeBitMask), (ComparisonType))) + +/* RtlVerifyVersionInfo() TypeMask */ + +#define VER_MINORVERSION 0x0000001 +#define VER_MAJORVERSION 0x0000002 +#define VER_BUILDNUMBER 0x0000004 +#define VER_PLATFORMID 0x0000008 +#define VER_SERVICEPACKMINOR 0x0000010 +#define VER_SERVICEPACKMAJOR 0x0000020 +#define VER_SUITENAME 0x0000040 +#define VER_PRODUCT_TYPE 0x0000080 + +/* RtlVerifyVersionInfo() ComparisonType */ + +#define VER_EQUAL 1 +#define VER_GREATER 2 +#define VER_GREATER_EQUAL 3 +#define VER_LESS 4 +#define VER_LESS_EQUAL 5 +#define VER_AND 6 +#define VER_OR 7 + +#define VER_CONDITION_MASK 7 +#define VER_NUM_BITS_PER_CONDITION_MASK 3 typedef struct _IMAGE_INFO { _ANONYMOUS_UNION union { @@ -2258,7 +832,7 @@ typedef struct _IMAGE_INFO { ULONG SystemModeImage:1; ULONG ImageMappedToAllPids:1; ULONG ExtendedInfoPresent:1; - ULONG Reserved:21; + ULONG Reserved:22; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; PVOID ImageBase; @@ -2267,24 +841,24 @@ typedef struct _IMAGE_INFO { ULONG ImageSectionNumber; } IMAGE_INFO, *PIMAGE_INFO; -typedef struct _IMAGE_INFO_EX { - SIZE_T Size; - IMAGE_INFO ImageInfo; - struct _FILE_OBJECT *FileObject; -} IMAGE_INFO_EX, *PIMAGE_INFO_EX; +#define IMAGE_ADDRESSING_MODE_32BIT 3 -typedef VOID -(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( - IN PUNICODE_STRING FullImageName, - IN HANDLE ProcessId, - IN PIMAGE_INFO ImageInfo); - -#define THREAD_CSWITCH_PMU_DISABLE FALSE -#define THREAD_CSWITCH_PMU_ENABLE TRUE - -#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001 - -#define PROCESS_HANDLE_TRACING_MAX_STACKS 16 +typedef enum _BUS_DATA_TYPE { + ConfigurationSpaceUndefined = -1, + Cmos, + EisaConfiguration, + Pos, + CbusConfiguration, + PCIConfiguration, + VMEConfiguration, + NuBusConfiguration, + PCMCIAConfiguration, + MPIConfiguration, + MPSAConfiguration, + PNPISAConfiguration, + SgiInternalConfiguration, + MaximumBusDataType +} BUS_DATA_TYPE, *PBUS_DATA_TYPE; typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; @@ -2418,15 +992,6 @@ typedef enum _THREADINFOCLASS { MaxThreadInfoClass } THREADINFOCLASS; -typedef struct _PAGE_PRIORITY_INFORMATION { - ULONG PagePriority; -} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION; - -typedef struct _PROCESS_WS_WATCH_INFORMATION { - PVOID FaultingPc; - PVOID FaultingVa; -} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; - typedef struct _PROCESS_BASIC_INFORMATION { NTSTATUS ExitStatus; struct _PEB *PebBaseAddress; @@ -2436,20 +1001,10 @@ typedef struct _PROCESS_BASIC_INFORMATION { ULONG_PTR InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; -typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { - SIZE_T Size; - PROCESS_BASIC_INFORMATION BasicInfo; - union { - ULONG Flags; - struct { - ULONG IsProtectedProcess:1; - ULONG IsWow64Process:1; - ULONG IsProcessDeleting:1; - ULONG IsCrossSessionCreate:1; - ULONG SpareBits:28; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; -} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION; +typedef struct _PROCESS_WS_WATCH_INFORMATION { + PVOID FaultingPc; + PVOID FaultingVa; +} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; typedef struct _PROCESS_DEVICEMAP_INFORMATION { __GNU_EXTENSION union { @@ -2463,263 +1018,514 @@ typedef struct _PROCESS_DEVICEMAP_INFORMATION { }; } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; -typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { - union { - struct { - HANDLE DirectoryHandle; - } Set; - struct { - ULONG DriveMap; - UCHAR DriveType[32]; - } Query; - } DUMMYUNIONNAME; - ULONG Flags; -} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX; +typedef struct _KERNEL_USER_TIMES { + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; +} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; + +typedef struct _PROCESS_ACCESS_TOKEN { + HANDLE Token; + HANDLE Thread; +} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; typedef struct _PROCESS_SESSION_INFORMATION { ULONG SessionId; } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; -typedef struct _PROCESS_HANDLE_TRACING_ENABLE { - ULONG Flags; -} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE; +typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { + IoQueryDeviceIdentifier = 0, + IoQueryDeviceConfigurationData, + IoQueryDeviceComponentInformation, + IoQueryDeviceMaxData +} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; -typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX { - ULONG Flags; - ULONG TotalSlots; -} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX; +typedef struct _DISK_SIGNATURE { + ULONG PartitionStyle; + _ANONYMOUS_UNION union { + struct { + ULONG Signature; + ULONG CheckSum; + } Mbr; + struct { + GUID DiskId; + } Gpt; + } DUMMYUNIONNAME; +} DISK_SIGNATURE, *PDISK_SIGNATURE; -typedef struct _PROCESS_HANDLE_TRACING_ENTRY { - HANDLE Handle; - CLIENT_ID ClientId; - ULONG Type; - PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS]; -} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY; +typedef ULONG_PTR +(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( + IN PVOID Context); -typedef struct _PROCESS_HANDLE_TRACING_QUERY { - HANDLE Handle; - ULONG TotalTraces; - PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; -} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; +typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { + PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; + PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; +} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; -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; - -typedef ULONG /* LOGICAL */ -(NTAPI *PRTL_RUN_ONCE_INIT_FN) ( - IN OUT PRTL_RUN_ONCE RunOnce, - IN OUT PVOID Parameter OPTIONAL, - IN OUT PVOID *Context OPTIONAL); - -#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; - -typedef RTL_GENERIC_COMPARE_RESULTS -(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID FirstStruct, - IN PVOID SecondStruct); - -typedef PVOID -(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN CLONG ByteSize); +#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 +#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 +#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 +#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 +#define DRIVER_VERIFIER_IO_CHECKING 0x0010 typedef VOID -(NTAPI *PRTL_AVL_FREE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID Buffer); +(NTAPI *PTIMER_APC_ROUTINE)( + IN PVOID TimerContext, + IN ULONG TimerLowValue, + IN LONG TimerHighValue); -typedef NTSTATUS -(NTAPI *PRTL_AVL_MATCH_FUNCTION) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID UserData, - IN PVOID MatchData); +typedef struct _KUSER_SHARED_DATA +{ + ULONG TickCountLowDeprecated; + ULONG TickCountMultiplier; + volatile KSYSTEM_TIME InterruptTime; + volatile KSYSTEM_TIME SystemTime; + volatile KSYSTEM_TIME TimeZoneBias; + USHORT ImageNumberLow; + USHORT ImageNumberHigh; + WCHAR NtSystemRoot[260]; + ULONG MaxStackTraceDepth; + ULONG CryptoExponent; + ULONG TimeZoneId; + ULONG LargePageMinimum; + ULONG Reserved2[7]; + NT_PRODUCT_TYPE NtProductType; + BOOLEAN ProductTypeIsValid; + ULONG NtMajorVersion; + ULONG NtMinorVersion; + BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; + ULONG Reserved1; + ULONG Reserved3; + volatile ULONG TimeSlip; + ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; + ULONG AltArchitecturePad[1]; + LARGE_INTEGER SystemExpirationDate; + ULONG SuiteMask; + BOOLEAN KdDebuggerEnabled; +#if (NTDDI_VERSION >= NTDDI_WINXPSP2) + UCHAR NXSupportPolicy; +#endif + volatile ULONG ActiveConsoleId; + volatile ULONG DismountCount; + ULONG ComPlusPackage; + ULONG LastSystemRITEventTickCount; + ULONG NumberOfPhysicalPages; + BOOLEAN SafeBootMode; +#if (NTDDI_VERSION >= NTDDI_WIN7) + union { + UCHAR TscQpcData; + struct { + UCHAR TscQpcEnabled:1; + UCHAR TscQpcSpareFlag:1; + UCHAR TscQpcShift:6; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + UCHAR TscQpcPad[2]; +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) + union { + ULONG SharedDataFlags; + struct { + ULONG DbgErrorPortPresent:1; + ULONG DbgElevationEnabled:1; + ULONG DbgVirtEnabled:1; + ULONG DbgInstallerDetectEnabled:1; + ULONG DbgSystemDllRelocated:1; + ULONG DbgDynProcessorEnabled:1; + ULONG DbgSEHValidationEnabled:1; + ULONG SpareBits:25; + } DUMMYSTRUCTNAME2; + } DUMMYUNIONNAME2; +#else + ULONG TraceLogging; +#endif + ULONG DataFlagsPad[1]; + ULONGLONG TestRetInstruction; + ULONG SystemCall; + ULONG SystemCallReturn; + ULONGLONG SystemCallPad[3]; + _ANONYMOUS_UNION union { + volatile KSYSTEM_TIME TickCount; + volatile ULONG64 TickCountQuad; + _ANONYMOUS_STRUCT struct { + ULONG ReservedTickCountOverlay[3]; + ULONG TickCountPad[1]; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME3; + ULONG Cookie; + ULONG CookiePad[1]; +#if (NTDDI_VERSION >= NTDDI_WS03) + LONGLONG ConsoleSessionForegroundProcessId; + ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) +#if (NTDDI_VERSION >= NTDDI_WIN7) + USHORT UserModeGlobalLogger[16]; +#else + USHORT UserModeGlobalLogger[8]; + ULONG HeapTracingPid[2]; + ULONG CritSecTracingPid[2]; +#endif + ULONG ImageFileExecutionOptions; +#if (NTDDI_VERSION >= NTDDI_VISTASP1) + ULONG LangGenerationCount; +#else + /* 4 bytes padding */ +#endif + ULONGLONG Reserved5; + volatile ULONG64 InterruptTimeBias; +#endif +#if (NTDDI_VERSION >= NTDDI_WIN7) + volatile ULONG64 TscQpcBias; + volatile ULONG ActiveProcessorCount; + volatile USHORT ActiveGroupCount; + USHORT Reserved4; + volatile ULONG AitSamplingValue; + volatile ULONG AppCompatFlag; + ULONGLONG SystemDllNativeRelocation; + ULONG SystemDllWowRelocation; + ULONG XStatePad[1]; + XSTATE_CONFIGURATION XState; +#endif +} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; -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; +extern NTKERNELAPI PVOID MmHighestUserAddress; +extern NTKERNELAPI PVOID MmSystemRangeStart; +extern NTKERNELAPI ULONG MmUserProbeAddress; -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; -#ifndef RTL_USE_AVL_TABLES +#ifdef _X86_ -struct _RTL_GENERIC_TABLE; +#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 -typedef RTL_GENERIC_COMPARE_RESULTS -(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN PVOID FirstStruct, - IN PVOID SecondStruct); +#define KeGetPcr() PCR -typedef PVOID -(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN CLONG ByteSize); +#define KERNEL_STACK_SIZE 12288 +#define KERNEL_LARGE_STACK_SIZE 61440 +#define KERNEL_LARGE_STACK_COMMIT 12288 -typedef VOID -(NTAPI *PRTL_GENERIC_FREE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN PVOID Buffer); +#define SIZE_OF_80387_REGISTERS 80 -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; +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 -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; +#if !defined(RC_INVOKED) -#endif /* !RTL_USE_AVL_TABLES */ +#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) -#ifdef RTL_USE_AVL_TABLES +#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) -#undef PRTL_GENERIC_COMPARE_ROUTINE -#undef RTL_GENERIC_COMPARE_ROUTINE -#undef PRTL_GENERIC_ALLOCATE_ROUTINE -#undef RTL_GENERIC_ALLOCATE_ROUTINE -#undef PRTL_GENERIC_FREE_ROUTINE -#undef RTL_GENERIC_FREE_ROUTINE -#undef RTL_GENERIC_TABLE -#undef PRTL_GENERIC_TABLE +#endif /* !defined(RC_INVOKED) */ -#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE -#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE -#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE -#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE -#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE -#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE -#define RTL_GENERIC_TABLE RTL_AVL_TABLE -#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE +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; -#endif /* RTL_USE_AVL_TABLES */ +FORCEINLINE +ULONG +KeGetCurrentProcessorNumber(VOID) +{ + return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); +} -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 _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; -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; +#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" -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; +#endif /* _X86_ */ -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; +#ifdef _AMD64_ + +#define PTI_SHIFT 12L +#define PDI_SHIFT 21L +#define PPI_SHIFT 30L +#define PXI_SHIFT 39L +#define PTE_PER_PAGE 512 +#define PDE_PER_PAGE 512 +#define PPE_PER_PAGE 512 +#define PXE_PER_PAGE 512 +#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) +#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) +#define PPI_MASK (PPE_PER_PAGE - 1) +#define PXI_MASK (PXE_PER_PAGE - 1) + +#define PXE_BASE 0xFFFFF6FB7DBED000ULL +#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL +#define PPE_BASE 0xFFFFF6FB7DA00000ULL +#define PDE_BASE 0xFFFFF6FB40000000ULL +#define PTE_BASE 0xFFFFF68000000000ULL +#define PXE_TOP 0xFFFFF6FB7DBEDFFFULL +#define PPE_TOP 0xFFFFF6FB7DBFFFFFULL +#define PDE_TOP 0xFFFFF6FB7FFFFFFFULL +#define PTE_TOP 0xFFFFF6FFFFFFFFFFULL + +#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress +#define MM_SYSTEM_RANGE_START MmSystemRangeStart +#define MM_USER_PROBE_ADDRESS MmUserProbeAddress +#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL +#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL + +typedef struct DECLSPEC_ALIGN(16) _CONTEXT { + ULONG64 P1Home; + ULONG64 P2Home; + ULONG64 P3Home; + ULONG64 P4Home; + ULONG64 P5Home; + ULONG64 P6Home; + + /* Control flags */ + ULONG ContextFlags; + ULONG MxCsr; + + /* Segment */ + USHORT SegCs; + USHORT SegDs; + USHORT SegEs; + USHORT SegFs; + USHORT SegGs; + USHORT SegSs; + ULONG EFlags; + + /* Debug */ + ULONG64 Dr0; + ULONG64 Dr1; + ULONG64 Dr2; + ULONG64 Dr3; + ULONG64 Dr6; + ULONG64 Dr7; + + /* Integer */ + ULONG64 Rax; + ULONG64 Rcx; + ULONG64 Rdx; + ULONG64 Rbx; + ULONG64 Rsp; + ULONG64 Rbp; + ULONG64 Rsi; + ULONG64 Rdi; + ULONG64 R8; + ULONG64 R9; + ULONG64 R10; + ULONG64 R11; + ULONG64 R12; + ULONG64 R13; + ULONG64 R14; + ULONG64 R15; + + /* Counter */ + ULONG64 Rip; + + /* Floating point */ + union { + XMM_SAVE_AREA32 FltSave; + struct { + M128A Header[2]; + M128A Legacy[8]; + M128A Xmm0; + M128A Xmm1; + M128A Xmm2; + M128A Xmm3; + M128A Xmm4; + M128A Xmm5; + M128A Xmm6; + M128A Xmm7; + M128A Xmm8; + M128A Xmm9; + M128A Xmm10; + M128A Xmm11; + M128A Xmm12; + M128A Xmm13; + M128A Xmm14; + M128A Xmm15; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + + /* Vector */ + M128A VectorRegister[26]; + ULONG64 VectorControl; + + /* Debug control */ + ULONG64 DebugControl; + ULONG64 LastBranchToRip; + ULONG64 LastBranchFromRip; + ULONG64 LastExceptionToRip; + ULONG64 LastExceptionFromRip; +} CONTEXT; + +typedef struct _KPCR +{ + _ANONYMOUS_UNION union + { + NT_TIB NtTib; + _ANONYMOUS_STRUCT struct + { + union _KGDTENTRY64 *GdtBase; + struct _KTSS64 *TssBase; + ULONG64 UserRsp; + struct _KPCR *Self; + struct _KPRCB *CurrentPrcb; + PKSPIN_LOCK_QUEUE LockArray; + PVOID Used_Self; + }; + }; + union _KIDTENTRY64 *IdtBase; + ULONG64 Unused[2]; + KIRQL Irql; + UCHAR SecondLevelCacheAssociativity; + UCHAR ObsoleteNumber; + UCHAR Fill0; + ULONG Unused0[3]; + USHORT MajorVersion; + USHORT MinorVersion; + ULONG StallScaleFactor; + PVOID Unused1[3]; + ULONG KernelReserved[15]; + ULONG SecondLevelCacheSize; + ULONG HalReserved[16]; + ULONG Unused2; + PVOID KdVersionBlock; + PVOID Unused3; + ULONG PcrAlign1[24]; +} KPCR, *PKPCR; + +FORCEINLINE +PKPCR +KeGetPcr(VOID) +{ + return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self)); +} + +FORCEINLINE +ULONG +KeGetCurrentProcessorNumber(VOID) +{ + return (ULONG)__readgsword(0x184); +} + +#if !defined(RC_INVOKED) + +#define CONTEXT_AMD64 0x100000 + +#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) +#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) +#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) +#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) + +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) +#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) + +#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L) + +#define CONTEXT_EXCEPTION_ACTIVE 0x8000000 +#define CONTEXT_SERVICE_ACTIVE 0x10000000 +#define CONTEXT_EXCEPTION_REQUEST 0x40000000 +#define CONTEXT_EXCEPTION_REPORTING 0x80000000 + +#endif /* RC_INVOKED */ + +#endif /* _AMD64_ */ + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; typedef struct _OSVERSIONINFOA { ULONG dwOSVersionInfoSize; @@ -2783,461 +1589,24 @@ typedef POSVERSIONINFOA POSVERSIONINFO; typedef LPOSVERSIONINFOA LPOSVERSIONINFO; #endif /* UNICODE */ -#define HASH_ENTRY_KEY(x) ((x)->Signature) +/* Executive Types */ -/****************************************************************************** - * Security Manager Types * - ******************************************************************************/ -#define SE_UNSOLICITED_INPUT_PRIVILEGE 6 +#define PROTECTED_POOL 0x80000000 -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; +typedef struct _ZONE_SEGMENT_HEADER { + SINGLE_LIST_ENTRY SegmentList; + PVOID Reserved; +} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; +typedef struct _ZONE_HEADER { + SINGLE_LIST_ENTRY FreeList; + SINGLE_LIST_ENTRY SegmentList; + ULONG BlockSize; + ULONG TotalSegmentSize; +} ZONE_HEADER, *PZONE_HEADER; +/* Executive Functions */ -#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) @@ -3249,8 +1618,8 @@ ExAllocateFromZone( static __inline PVOID ExFreeToZone( - IN PZONE_HEADER Zone, - IN PVOID Block) + IN PZONE_HEADER Zone, + IN PVOID Block) { ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); @@ -3303,36 +1672,8 @@ ExFreeToZone( #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite #define ExReleaseResourceForThread ExReleaseResourceForThreadLite -typedef enum _INTERLOCKED_RESULT { - ResultNegative = RESULT_NEGATIVE, - ResultZero = RESULT_ZERO, - ResultPositive = RESULT_POSITIVE -} INTERLOCKED_RESULT; - -#ifdef _X86_ -NTKERNELAPI -INTERLOCKED_RESULT -FASTCALL -Exfi386InterlockedIncrementLong( - IN OUT LONG volatile *Addend); - -NTKERNELAPI -INTERLOCKED_RESULT -FASTCALL -Exfi386InterlockedDecrementLong( - IN PLONG Addend); - -NTKERNELAPI -ULONG -FASTCALL -Exfi386InterlockedExchangeUlong( - IN PULONG Target, - IN ULONG Value); -#endif - - - #if (NTDDI_VERSION >= NTDDI_WIN2K) + NTKERNELAPI NTSTATUS NTAPI @@ -3369,28 +1710,315 @@ NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI -ExRaiseAccessViolation(VOID); +ExRaiseAccessViolation( + VOID); NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI -ExRaiseDatatypeMisalignment(VOID); +ExRaiseDatatypeMisalignment( + VOID); +#endif -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +#ifdef _X86_ +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedIncrementLong( + IN OUT LONG volatile *Addend); + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedDecrementLong( + IN PLONG Addend); + +NTKERNELAPI +ULONG +FASTCALL +Exfi386InterlockedExchangeUlong( + IN PULONG Target, + IN ULONG Value); + +#endif /* _X86_ */ + +#ifndef _ARC_DDK_ +#define _ARC_DDK_ +typedef enum _CONFIGURATION_TYPE { + ArcSystem, + CentralProcessor, + FloatingPointProcessor, + PrimaryIcache, + PrimaryDcache, + SecondaryIcache, + SecondaryDcache, + SecondaryCache, + EisaAdapter, + TcAdapter, + ScsiAdapter, + DtiAdapter, + MultiFunctionAdapter, + DiskController, + TapeController, + CdromController, + WormController, + SerialController, + NetworkController, + DisplayController, + ParallelController, + PointerController, + KeyboardController, + AudioController, + OtherController, + DiskPeripheral, + FloppyDiskPeripheral, + TapePeripheral, + ModemPeripheral, + MonitorPeripheral, + PrinterPeripheral, + PointerPeripheral, + KeyboardPeripheral, + TerminalPeripheral, + OtherPeripheral, + LinePeripheral, + NetworkPeripheral, + SystemMemory, + DockingInformation, + RealModeIrqRoutingTable, + RealModePCIEnumeration, + MaximumType +} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; +#endif /* !_ARC_DDK_ */ + +typedef struct _CONTROLLER_OBJECT { + CSHORT Type; + CSHORT Size; + PVOID ControllerExtension; + KDEVICE_QUEUE DeviceWaitQueue; + ULONG Spare1; + LARGE_INTEGER Spare2; +} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; + +typedef struct _CONFIGURATION_INFORMATION { + ULONG DiskCount; + ULONG FloppyCount; + ULONG CdRomCount; + ULONG TapeCount; + ULONG ScsiPortCount; + ULONG SerialCount; + ULONG ParallelCount; + BOOLEAN AtDiskPrimaryAddressClaimed; + BOOLEAN AtDiskSecondaryAddressClaimed; + ULONG Version; + ULONG MediumChangerCount; +} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; + +typedef +NTSTATUS +(NTAPI *PIO_QUERY_DEVICE_ROUTINE)( + IN PVOID Context, + IN PUNICODE_STRING PathName, + IN INTERFACE_TYPE BusType, + IN ULONG BusNumber, + IN PKEY_VALUE_FULL_INFORMATION *BusInformation, + IN CONFIGURATION_TYPE ControllerType, + IN ULONG ControllerNumber, + IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, + IN CONFIGURATION_TYPE PeripheralType, + IN ULONG PeripheralNumber, + IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); + +typedef +VOID +(NTAPI DRIVER_REINITIALIZE)( + IN struct _DRIVER_OBJECT *DriverObject, + IN PVOID Context, + IN ULONG Count); + +typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE; + +/** Filesystem runtime library routines **/ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsTotalDeviceFailure( + IN NTSTATUS Status); +#endif + +/* Hardware Abstraction Layer Types */ + +typedef VOID +(NTAPI *PciPin2Line)( + IN struct _BUS_HANDLER *BusHandler, + IN struct _BUS_HANDLER *RootHandler, + IN PCI_SLOT_NUMBER SlotNumber, + IN PPCI_COMMON_CONFIG PciData); + +typedef VOID +(NTAPI *PciLine2Pin)( + IN struct _BUS_HANDLER *BusHandler, + IN struct _BUS_HANDLER *RootHandler, + IN PCI_SLOT_NUMBER SlotNumber, + IN PPCI_COMMON_CONFIG PciNewData, + IN PPCI_COMMON_CONFIG PciOldData); + +typedef VOID +(NTAPI *PciReadWriteConfig)( + IN struct _BUS_HANDLER *BusHandler, + IN PCI_SLOT_NUMBER Slot, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +#define PCI_DATA_TAG ' ICP' +#define PCI_DATA_VERSION 1 + +typedef struct _PCIBUSDATA { + ULONG Tag; + ULONG Version; + PciReadWriteConfig ReadConfig; + PciReadWriteConfig WriteConfig; + PciPin2Line Pin2Line; + PciLine2Pin Line2Pin; + PCI_SLOT_NUMBER ParentSlot; + PVOID Reserved[4]; +} PCIBUSDATA, *PPCIBUSDATA; /* Hardware Abstraction Layer Functions */ +#if !defined(NO_LEGACY_DRIVERS) + #if (NTDDI_VERSION >= NTDDI_WIN2K) -#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) +NTHALAPI +NTSTATUS +NTAPI +HalAssignSlotResources( + IN PUNICODE_STRING RegistryPath, + IN PUNICODE_STRING DriverClassName, + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT DeviceObject, + IN INTERFACE_TYPE BusType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN OUT PCM_RESOURCE_LIST *AllocatedResources); -/* Nothing here */ +NTHALAPI +ULONG +NTAPI +HalGetInterruptVector( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN ULONG BusInterruptLevel, + IN ULONG BusInterruptVector, + OUT PKIRQL Irql, + OUT PKAFFINITY Affinity); -#else /* USE_DMA_MACROS ... */ +NTHALAPI +ULONG +NTAPI +HalSetBusData( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Length); +#endif + +#endif /* !defined(NO_LEGACY_DRIVERS) */ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTHALAPI +PADAPTER_OBJECT +NTAPI +HalGetAdapter( + IN PDEVICE_DESCRIPTION DeviceDescription, + IN OUT PULONG NumberOfMapRegisters); + +NTHALAPI +BOOLEAN +NTAPI +HalMakeBeep( + IN ULONG Frequency); + +VOID +NTAPI +HalPutDmaAdapter( + IN PADAPTER_OBJECT DmaAdapter); + +NTHALAPI +VOID +NTAPI +HalAcquireDisplayOwnership( + IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); + +NTHALAPI +ULONG +NTAPI +HalGetBusData( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Length); + +NTHALAPI +ULONG +NTAPI +HalGetBusDataByOffset( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + OUT PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +NTHALAPI +ULONG +NTAPI +HalSetBusDataByOffset( + IN BUS_DATA_TYPE BusDataType, + IN ULONG BusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); + +NTHALAPI +BOOLEAN +NTAPI +HalTranslateBusAddress( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress); + +#endif + +#if (NTDDI_VERSION >= NTDDI_WINXP) +NTKERNELAPI +VOID +FASTCALL +HalExamineMBR( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG MBRTypeIdentifier, + OUT PVOID *Buffer); +#endif + +#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) +// nothing here +#else + +#if (NTDDI_VERSION >= NTDDI_WIN2K) //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID @@ -3456,207 +2084,12 @@ HalAllocateAdapterChannel( IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine); -#endif /* USE_DMA_MACROS ... */ - -#if !defined(NO_LEGACY_DRIVERS) -NTHALAPI -NTSTATUS -NTAPI -HalAssignSlotResources( - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); - -NTHALAPI -ULONG -NTAPI -HalGetInterruptVector( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN ULONG BusInterruptLevel, - IN ULONG BusInterruptVector, - OUT PKIRQL Irql, - OUT PKAFFINITY Affinity); - -NTHALAPI -ULONG -NTAPI -HalSetBusData( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Length); - -NTHALAPI -ULONG -NTAPI -HalGetBusData( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Length); - -NTHALAPI -BOOLEAN -NTAPI -HalMakeBeep( - IN ULONG Frequency); -#endif /* !defined(NO_LEGACY_DRIVERS) */ - -NTHALAPI -PADAPTER_OBJECT -NTAPI -HalGetAdapter( - IN PDEVICE_DESCRIPTION DeviceDescription, - OUT PULONG NumberOfMapRegisters); - -VOID -NTAPI -HalPutDmaAdapter( - IN PADAPTER_OBJECT DmaAdapter); - -NTHALAPI -VOID -NTAPI -HalAcquireDisplayOwnership( - IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); - -NTHALAPI -ULONG -NTAPI -HalGetBusDataByOffset( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -NTHALAPI -ULONG -NTAPI -HalSetBusDataByOffset( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -NTHALAPI -BOOLEAN -NTAPI -HalTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); - -NTHALAPI -PVOID -NTAPI -HalAllocateCrashDumpRegisters( - IN PADAPTER_OBJECT AdapterObject, - IN OUT PULONG NumberOfMapRegisters); - -NTSTATUS -NTAPI -HalGetScatterGatherList( - IN PADAPTER_OBJECT DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN PMDL Mdl, - IN PVOID CurrentVa, - IN ULONG Length, - IN PDRIVER_LIST_CONTROL ExecutionRoutine, - IN PVOID Context, - IN BOOLEAN WriteToDevice); - -VOID -NTAPI -HalPutScatterGatherList( - IN PADAPTER_OBJECT DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN BOOLEAN WriteToDevice); - #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ -#if (NTDDI_VERSION >= NTDDI_WINXP) -NTKERNELAPI -VOID -FASTCALL -HalExamineMBR( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG MBRTypeIdentifier, - OUT PVOID *Buffer); -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ +#endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */ -#if (NTDDI_VERSION >= NTDDI_WIN7) +/* I/O Manager Functions */ -NTSTATUS -NTAPI -HalAllocateHardwareCounters( - IN PGROUP_AFFINITY GroupAffinty, - IN ULONG GroupCount, - IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, - OUT PHANDLE CounterSetHandle); - -NTSTATUS -NTAPI -HalFreeHardwareCounters( - IN HANDLE CounterSetHandle); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -#if defined(_IA64_) -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTHALAPI -ULONG -NTAPI -HalGetDmaAlignmentRequirement(VOID); -#endif -#endif /* defined(_IA64_) */ - -#if defined(_M_IX86) || defined(_M_AMD64) -#define HalGetDmaAlignmentRequirement() 1L -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR; -typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; - -NTHALAPI -VOID -NTAPI -HalBugCheckSystem( - IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, - IN PWHEA_ERROR_RECORD ErrorRecord); - -#else - -typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; - -NTHALAPI -VOID -NTAPI -HalBugCheckSystem( - IN PWHEA_ERROR_RECORD ErrorRecord); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - -/****************************************************************************** - * I/O Manager Functions * - ******************************************************************************/ /* * VOID IoAssignArcName( * IN PUNICODE_STRING ArcName, @@ -3672,19 +2105,8 @@ HalBugCheckSystem( */ #define IoDeassignArcName IoDeleteSymbolicLink -VOID -FORCEINLINE -NTAPI -IoInitializeDriverCreateContext( - PIO_DRIVER_CREATE_CONTEXT DriverContext) -{ - RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT)); - DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT); -} - - - #if (NTDDI_VERSION >= NTDDI_WIN2K) + #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) NTKERNELAPI NTSTATUS @@ -3697,7 +2119,6 @@ IoAllocateAdapterChannel( IN PVOID Context); #endif -#if !defined(DMA_MACROS_DEFINED) //DECLSPEC_DEPRECATED_DDK NTHALAPI PHYSICAL_ADDRESS @@ -3709,7 +2130,6 @@ IoMapTransfer( IN PVOID CurrentVa, IN OUT PULONG Length, IN BOOLEAN WriteToDevice); -#endif NTKERNELAPI VOID @@ -3741,7 +2161,8 @@ IoFreeController( NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI -IoGetConfigurationInformation(VOID); +IoGetConfigurationInformation( + VOID); NTKERNELAPI PDEVICE_OBJECT @@ -3759,7 +2180,8 @@ IoCancelFileOpen( NTKERNELAPI PGENERIC_MAPPING NTAPI -IoGetFileObjectGenericMapping(VOID); +IoGetFileObjectGenericMapping( + VOID); NTKERNELAPI PIRP @@ -3831,7 +2253,7 @@ IoReportDetectedDevice( IN PCM_RESOURCE_LIST ResourceList OPTIONAL, IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, IN BOOLEAN ResourceAssigned, - IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL); + IN OUT PDEVICE_OBJECT *DeviceObject); NTKERNELAPI NTSTATUS @@ -3877,59 +2299,9 @@ IoAssignResources( IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL, IN OUT PCM_RESOURCE_LIST *AllocatedResources); -NTKERNELAPI -BOOLEAN -NTAPI -IoSetThreadHardErrorMode( - IN BOOLEAN EnableHardErrors); - #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ -#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) - -NTKERNELAPI -BOOLEAN -NTAPI -IoIsFileOriginRemote( - IN PFILE_OBJECT FileObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoSetFileOrigin( - IN PFILE_OBJECT FileObject, - IN BOOLEAN Remote); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */ - #if (NTDDI_VERSION >= NTDDI_WINXP) -NTKERNELAPI -NTSTATUS -FASTCALL -IoReadPartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); - -NTKERNELAPI -NTSTATUS -FASTCALL -IoSetPartitionInformation( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType); - -NTKERNELAPI -NTSTATUS -FASTCALL -IoWritePartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); NTKERNELAPI NTSTATUS @@ -3946,12 +2318,30 @@ IoReadDiskSignature( IN ULONG BytesPerSector, OUT PDISK_SIGNATURE Signature); +NTKERNELAPI +NTSTATUS +FASTCALL +IoReadPartitionTable( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN BOOLEAN ReturnRecognizedPartitions, + OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); + NTKERNELAPI NTSTATUS NTAPI IoReadPartitionTableEx( IN PDEVICE_OBJECT DeviceObject, - OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); + IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); + +NTKERNELAPI +NTSTATUS +FASTCALL +IoSetPartitionInformation( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG PartitionNumber, + IN ULONG PartitionType); NTKERNELAPI NTSTATUS @@ -3967,6 +2357,12 @@ NTAPI IoSetSystemPartition( IN PUNICODE_STRING VolumeNameString); +NTKERNELAPI +BOOLEAN +NTAPI +IoSetThreadHardErrorMode( + IN BOOLEAN EnableHardErrors); + NTKERNELAPI NTSTATUS NTAPI @@ -3981,6 +2377,16 @@ IoVolumeDeviceToDosName( IN PVOID VolumeDeviceObject, OUT PUNICODE_STRING DosName); +NTKERNELAPI +NTSTATUS +FASTCALL +IoWritePartitionTable( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG SectorsPerTrack, + IN ULONG NumberOfHeads, + IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); + NTKERNELAPI NTSTATUS NTAPI @@ -3988,130 +2394,10 @@ IoWritePartitionTableEx( IN PDEVICE_OBJECT DeviceObject, IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); -NTKERNELAPI -NTSTATUS -NTAPI -IoCreateFileSpecifyDeviceObjectHint( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PVOID DeviceObject OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoAttachDeviceToDeviceStackSafe( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice, - OUT PDEVICE_OBJECT *AttachedToDeviceObject); - #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ +/** Kernel debugger routines **/ -#if (NTDDI_VERSION >= NTDDI_WS03) -NTKERNELAPI -IO_PAGING_PRIORITY -FASTCALL -IoGetPagingIoPriority( - IN PIRP Irp); - -#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ - -#if (NTDDI_VERSION >= NTDDI_WS03SP1) -BOOLEAN -NTAPI -IoTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); -#endif - -#if (NTDDI_VERSION >= NTDDI_VISTA) -NTKERNELAPI -NTSTATUS -NTAPI -IoUpdateDiskGeometry( - IN PDEVICE_OBJECT DeviceObject, - IN struct _DISK_GEOMETRY_EX* OldDiskGeometry, - IN struct _DISK_GEOMETRY_EX* NewDiskGeometry); - -PTXN_PARAMETER_BLOCK -NTAPI -IoGetTransactionParameterBlock( - IN PFILE_OBJECT FileObject); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCreateFileEx( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL); - -NTSTATUS -NTAPI -IoSetIrpExtraCreateParameter( - IN OUT PIRP Irp, - IN struct _ECP_LIST *ExtraCreateParameter); - -VOID -NTAPI -IoClearIrpExtraCreateParameter( - IN OUT PIRP Irp); - -NTSTATUS -NTAPI -IoGetIrpExtraCreateParameter( - IN PIRP Irp, - OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL); - -BOOLEAN -NTAPI -IoIsFileObjectIgnoringSharing( - IN PFILE_OBJECT FileObject); - - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - - -#if (NTDDI_VERSION >= NTDDI_WIN7) -NTSTATUS -NTAPI -IoSetFileObjectIgnoreSharing( - IN PFILE_OBJECT FileObject); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - -/****************************************************************************** - * Kernel Debugger Functions * - ******************************************************************************/ NTSYSAPI ULONG NTAPI @@ -4120,25 +2406,16 @@ DbgPrompt( OUT PCH Response, IN ULONG MaximumResponseLength); -/****************************************************************************** - * Kernel Functions * - ******************************************************************************/ -NTKERNELAPI -VOID -FASTCALL -KeInvalidateRangeAllCaches( - IN PVOID BaseAddress, - IN ULONG Length); - +/* Kernel Functions */ #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI +DECLSPEC_NORETURN VOID NTAPI -KeSetImportanceDpc( - IN OUT PRKDPC Dpc, - IN KDPC_IMPORTANCE Importance); +KeBugCheck( + IN ULONG BugCheckCode); NTKERNELAPI LONG @@ -4155,204 +2432,24 @@ KeSetBasePriorityThread( IN OUT PRKTHREAD Thread, IN LONG Increment); -NTKERNELAPI -VOID -NTAPI -KeEnterCriticalRegion(VOID); +#endif -NTKERNELAPI -VOID -NTAPI -KeLeaveCriticalRegion(VOID); +/* Memory Manager Types */ -NTKERNELAPI -DECLSPEC_NORETURN -VOID -NTAPI -KeBugCheck( - IN ULONG BugCheckCode); +typedef struct _PHYSICAL_MEMORY_RANGE { + PHYSICAL_ADDRESS BaseAddress; + LARGE_INTEGER NumberOfBytes; +} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; - -#if defined(SINGLE_GROUP_LEGACY_API) - - -NTKERNELAPI -VOID -NTAPI -KeSetTargetProcessorDpc( - IN OUT PRKDPC Dpc, - IN CCHAR Number); - -NTKERNELAPI -KAFFINITY -NTAPI -KeQueryActiveProcessors(VOID); - -#endif /* defined(SINGLE_GROUP_LEGACY_API) */ - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -#if (NTDDI_VERSION >= NTDDI_WINXP) -NTKERNELAPI -BOOLEAN -NTAPI -KeAreApcsDisabled(VOID); - - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - - -#if (NTDDI_VERSION >= NTDDI_WS03) - - -NTKERNELAPI -BOOLEAN -NTAPI -KeInvalidateAllCaches(VOID); - -#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ - -#if (NTDDI_VERSION >= NTDDI_WS03SP1) - -NTKERNELAPI -NTSTATUS -NTAPI -KeExpandKernelStackAndCallout( - IN PEXPAND_STACK_CALLOUT Callout, - IN PVOID Parameter OPTIONAL, - IN SIZE_T Size); - -NTKERNELAPI -VOID -NTAPI -KeEnterGuardedRegion(VOID); - -NTKERNELAPI -VOID -NTAPI -KeLeaveGuardedRegion(VOID); - - -#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - - -#if defined(SINGLE_GROUP_LEGACY_API) -NTKERNELAPI -ULONG -NTAPI -KeQueryActiveProcessorCount( - OUT PKAFFINITY ActiveProcessors OPTIONAL); - -NTKERNELAPI -ULONG -NTAPI -KeQueryMaximumProcessorCount(VOID); - -#endif /* SINGLE_GROUP_LEGACY_API */ - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTKERNELAPI -ULONG -NTAPI -KeQueryActiveProcessorCountEx( - IN USHORT GroupNumber); - -NTKERNELAPI -ULONG -NTAPI -KeQueryMaximumProcessorCountEx( - IN USHORT GroupNumber); - -NTKERNELAPI -USHORT -NTAPI -KeQueryActiveGroupCount(VOID); - -NTKERNELAPI -USHORT -NTAPI -KeQueryMaximumGroupCount(VOID); - -NTKERNELAPI -KAFFINITY -NTAPI -KeQueryGroupAffinity( - IN USHORT GroupNumber); - -NTKERNELAPI -ULONG -NTAPI -KeGetCurrentProcessorNumberEx( - OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -KeQueryNodeActiveAffinity( - IN USHORT NodeNumber, - OUT PGROUP_AFFINITY Affinity OPTIONAL, - OUT PUSHORT Count OPTIONAL); - -NTKERNELAPI -USHORT -NTAPI -KeQueryNodeMaximumProcessorCount( - IN USHORT NodeNumber); - -NTKERNELAPI -USHORT -NTAPI -KeQueryHighestNodeNumber(VOID); - -NTKERNELAPI -USHORT -NTAPI -KeGetCurrentNodeNumber(VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -KeQueryLogicalProcessorRelationship( - IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, - IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, - OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, - IN OUT PULONG Length); - -NTKERNELAPI -NTSTATUS -NTAPI -KeSetHardwareCounterConfiguration( - IN PHARDWARE_COUNTER CounterArray, - IN ULONG Count); - -NTKERNELAPI -NTSTATUS -NTAPI -KeQueryHardwareCounterConfiguration( - OUT PHARDWARE_COUNTER CounterArray, - IN ULONG MaximumCount, - OUT PULONG Count); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - -/****************************************************************************** - * Memory manager Functions * - ******************************************************************************/ +/* Memory Manager Functions */ #if (NTDDI_VERSION >= NTDDI_WIN2K) + NTKERNELAPI PPHYSICAL_MEMORY_RANGE NTAPI -MmGetPhysicalMemoryRanges(VOID); +MmGetPhysicalMemoryRanges( + VOID); NTKERNELAPI PHYSICAL_ADDRESS @@ -4426,7 +2523,8 @@ MmIsAddressValid( NTKERNELAPI BOOLEAN NTAPI -MmIsThisAnNtAsSystem(VOID); +MmIsThisAnNtAsSystem( + VOID); NTKERNELAPI VOID @@ -4474,144 +2572,9 @@ MmUnmapVideoDisplay( IN PVOID BaseAddress, IN SIZE_T NumberOfBytes); -NTKERNELAPI -NTSTATUS -NTAPI -MmAddPhysicalMemory( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemory( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS HighestAcceptableAddress); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemorySpecifyCache( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemorySpecifyCacheNode( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType, - IN NODE_REQUIREMENT PreferredNode); - -NTKERNELAPI -VOID -NTAPI -MmFreeContiguousMemory( - IN PVOID BaseAddress); - -NTKERNELAPI -VOID -NTAPI -MmFreeContiguousMemorySpecifyCache( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); - - #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ -#if (NTDDI_VERSION >= NTDDI_WINXP) - -NTKERNELAPI -NTSTATUS -NTAPI -MmAdvanceMdl( - IN OUT PMDL Mdl, - IN ULONG NumberOfBytes); - -NTKERNELAPI -PVOID -NTAPI -MmAllocateMappingAddress( - IN SIZE_T NumberOfBytes, - IN ULONG PoolTag); - -NTKERNELAPI -VOID -NTAPI -MmFreeMappingAddress( - IN PVOID BaseAddress, - IN ULONG PoolTag); - -NTKERNELAPI -NTSTATUS -NTAPI -MmIsVerifierEnabled( - OUT PULONG VerifierFlags); - -NTKERNELAPI -PVOID -NTAPI -MmMapLockedPagesWithReservedMapping( - IN PVOID MappingAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList, - IN MEMORY_CACHING_TYPE CacheType); - -NTKERNELAPI -NTSTATUS -NTAPI -MmProtectMdlSystemAddress( - IN PMDL MemoryDescriptorList, - IN ULONG NewProtect); - -NTKERNELAPI -VOID -NTAPI -MmUnmapReservedMapping( - IN PVOID BaseAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList); - -NTKERNELAPI -NTSTATUS -NTAPI -MmAddVerifierThunks( - IN PVOID ThunkBuffer, - IN ULONG ThunkBufferSize); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_WS03) -NTKERNELAPI -NTSTATUS -NTAPI -MmCreateMirror(VOID); -#endif - - -#if (NTDDI_VERSION >= NTDDI_VISTA) -NTSTATUS -NTAPI -MmRotatePhysicalView( - IN PVOID VirtualAddress, - IN OUT PSIZE_T NumberOfBytes, - IN PMDLX NewMdl OPTIONAL, - IN MM_ROTATE_DIRECTION Direction, - IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, - IN PVOID Context OPTIONAL); - -#endif - -/****************************************************************************** - * Process Manager Functions * - ******************************************************************************/ +/* NtXxx Functions */ NTSYSCALLAPI NTSTATUS @@ -4632,15 +2595,35 @@ NtQueryInformationProcess( IN ULONG ProcessInformationLength, OUT PULONG ReturnLength OPTIONAL); -#if (NTDDI_VERSION >= NTDDI_WIN2K) +/** Process manager types **/ +typedef VOID +(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( + IN HANDLE ParentId, + IN HANDLE ProcessId, + IN BOOLEAN Create); + +typedef VOID +(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( + IN HANDLE ProcessId, + IN HANDLE ThreadId, + IN BOOLEAN Create); + +typedef VOID +(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( + IN PUNICODE_STRING FullImageName, + IN HANDLE ProcessId, + IN PIMAGE_INFO ImageInfo); + +/** Process manager routines **/ + +#if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI NTSTATUS NTAPI -PsSetCreateProcessNotifyRoutine( - IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, - IN BOOLEAN Remove); +PsSetLoadImageNotifyRoutine( + IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); NTKERNELAPI NTSTATUS @@ -4651,18 +2634,21 @@ PsSetCreateThreadNotifyRoutine( NTKERNELAPI NTSTATUS NTAPI -PsSetLoadImageNotifyRoutine( - IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); +PsSetCreateProcessNotifyRoutine( + IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, + IN BOOLEAN Remove); NTKERNELAPI HANDLE NTAPI -PsGetCurrentProcessId(VOID); +PsGetCurrentProcessId( + VOID); NTKERNELAPI HANDLE NTAPI -PsGetCurrentThreadId(VOID); +PsGetCurrentThreadId( + VOID); NTKERNELAPI BOOLEAN @@ -4683,12 +2669,6 @@ NTAPI PsGetProcessId( IN PEPROCESS Process); -NTKERNELAPI -HANDLE -NTAPI -PsGetThreadId( - IN PETHREAD Thread); - NTKERNELAPI NTSTATUS NTAPI @@ -4701,187 +2681,102 @@ NTAPI PsRemoveLoadImageNotifyRoutine( IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); -NTKERNELAPI -LONGLONG -NTAPI -PsGetProcessCreateTimeQuadPart( - IN PEPROCESS Process); - #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ -#if (NTDDI_VERSION >= NTDDI_WS03) -NTKERNELAPI -HANDLE -NTAPI -PsGetThreadProcessId( - IN PETHREAD Thread); -#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ +extern NTKERNELAPI PEPROCESS PsInitialSystemProcess; -#if (NTDDI_VERSION >= NTDDI_VISTA) +/* RTL Types */ -NTKERNELAPI -BOOLEAN -NTAPI -PsSetCurrentThreadPrefetching( - IN BOOLEAN Prefetching); +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; -NTKERNELAPI -BOOLEAN -NTAPI -PsIsCurrentThreadPrefetching(VOID); +/* RTL Functions */ -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ +#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) -#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 * - ******************************************************************************/ +#define RtlGetCallersAddress(CallersAddress, CallersCaller) \ + *CallersAddress = (PVOID)_ReturnAddress(); \ + *CallersCaller = NULL; +#else #if (NTDDI_VERSION >= NTDDI_WIN2K) - - - -#ifndef RTL_USE_AVL_TABLES - NTSYSAPI VOID NTAPI -RtlInitializeGenericTable( - OUT PRTL_GENERIC_TABLE Table, - IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, - IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, - IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, - IN PVOID TableContext OPTIONAL); +RtlGetCallersAddress( + OUT PVOID *CallersAddress, + OUT PVOID *CallersCaller); +#endif +#endif + +#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 + +#if defined(_AMD64_) || defined(_IA64_) +//DECLSPEC_DEPRECATED_DDK_WINXP +__inline +LARGE_INTEGER +NTAPI_INLINE +RtlLargeIntegerDivide( + IN LARGE_INTEGER Dividend, + IN LARGE_INTEGER Divisor, + OUT PLARGE_INTEGER Remainder OPTIONAL) +{ + LARGE_INTEGER ret; + ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; + if (Remainder) + Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; + return ret; +} + +#else + +#if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI -PVOID +LARGE_INTEGER NTAPI -RtlInsertElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); +RtlLargeIntegerDivide( + IN LARGE_INTEGER Dividend, + IN LARGE_INTEGER Divisor, + OUT PLARGE_INTEGER Remainder OPTIONAL); +#endif -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableFull( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); +#endif /* defined(_AMD64_) || defined(_IA64_) */ -NTSYSAPI -BOOLEAN -NTAPI -RtlDeleteElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlLookupElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlLookupElementGenericTableFull( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - OUT PVOID *NodeOrParent, - OUT TABLE_SEARCH_RESULT *SearchResult); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN BOOLEAN Restart); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableWithoutSplaying( - IN PRTL_GENERIC_TABLE Table, - IN OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlGetElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN ULONG I); - -NTSYSAPI -ULONG -NTAPI -RtlNumberGenericTableElements( - IN PRTL_GENERIC_TABLE Table); - -NTSYSAPI -BOOLEAN -NTAPI -RtlIsGenericTableEmpty( - IN PRTL_GENERIC_TABLE Table); - -#endif /* !RTL_USE_AVL_TABLES */ - -#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8 - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlSplay( - IN OUT PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlDelete( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -VOID -NTAPI -RtlDeleteNoSplay( - IN PRTL_SPLAY_LINKS Links, - IN OUT PRTL_SPLAY_LINKS *Root); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlSubtreeSuccessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlSubtreePredecessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlRealSuccessor( - IN PRTL_SPLAY_LINKS Links); - -NTSYSAPI -PRTL_SPLAY_LINKS -NTAPI -RtlRealPredecessor( - IN PRTL_SPLAY_LINKS Links); +#if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI BOOLEAN @@ -4940,7 +2835,7 @@ NTAPI RtlCompareString( IN const PSTRING String1, IN const PSTRING String2, - IN BOOLEAN CaseInSensitive); + BOOLEAN CaseInSensitive); NTSYSAPI VOID @@ -4979,513 +2874,9 @@ RtlWalkFrameChain( 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 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, - IN PRTL_AVL_FREE_ROUTINE FreeRoutine, - IN PVOID TableContext OPTIONAL); - -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); - -NTSYSAPI -PVOID -NTAPI -RtlInsertElementGenericTableFullAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); - -NTSYSAPI -BOOLEAN -NTAPI -RtlDeleteElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlLookupElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlLookupElementGenericTableFullAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - OUT PVOID *NodeOrParent, - OUT TABLE_SEARCH_RESULT *SearchResult); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN BOOLEAN Restart); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableWithoutSplayingAvl( - IN PRTL_AVL_TABLE Table, - IN OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlLookupFirstMatchingElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - OUT PVOID *RestartKey); - -NTSYSAPI -PVOID -NTAPI -RtlEnumerateGenericTableLikeADirectory( - IN PRTL_AVL_TABLE Table, - IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL, - IN PVOID MatchData OPTIONAL, - IN ULONG NextFlag, - IN OUT PVOID *RestartKey, - IN OUT PULONG DeleteCount, - IN PVOID Buffer); - -NTSYSAPI -PVOID -NTAPI -RtlGetElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN ULONG I); - -NTSYSAPI -ULONG -NTAPI -RtlNumberGenericTableElementsAvl( - IN PRTL_AVL_TABLE Table); - -NTSYSAPI -BOOLEAN -NTAPI -RtlIsGenericTableEmptyAvl( - IN PRTL_AVL_TABLE Table); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - - -NTSYSAPI -VOID -NTAPI -RtlRunOnceInitialize( - OUT PRTL_RUN_ONCE RunOnce); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceExecuteOnce( - IN OUT PRTL_RUN_ONCE RunOnce, - IN PRTL_RUN_ONCE_INIT_FN InitFn, - IN OUT PVOID Parameter OPTIONAL, - OUT PVOID *Context OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceBeginInitialize( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - OUT PVOID *Context OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -RtlRunOnceComplete( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - IN PVOID Context OPTIONAL); - -NTSYSAPI -BOOLEAN -NTAPI -RtlGetProductInfo( - IN ULONG OSMajorVersion, - IN ULONG OSMinorVersion, - IN ULONG SpMajorVersion, - IN ULONG SpMinorVersion, - OUT PULONG ReturnedProductType); - - - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) - - -NTSYSAPI -BOOLEAN -NTAPI -RtlCreateHashTable( - IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL, - IN ULONG Shift, - IN ULONG Flags); - -NTSYSAPI -VOID -NTAPI -RtlDeleteHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); - -NTSYSAPI -BOOLEAN -NTAPI -RtlInsertEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN ULONG_PTR Signature, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -NTSYSAPI -BOOLEAN -NTAPI -RtlRemoveEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlLookupEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN ULONG_PTR Signature, - OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlGetNextEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); - -NTSYSAPI -BOOLEAN -NTAPI -RtlInitEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -VOID -NTAPI -RtlEndEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -BOOLEAN -NTAPI -RtlInitWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -PRTL_DYNAMIC_HASH_TABLE_ENTRY -NTAPI -RtlWeaklyEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -VOID -NTAPI -RtlEndWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); - -NTSYSAPI -BOOLEAN -NTAPI -RtlExpandHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); - -NTSYSAPI -BOOLEAN -NTAPI -RtlContractHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - -#if defined(_AMD64_) || defined(_IA64_) - - - -//DECLSPEC_DEPRECATED_DDK_WINXP -FORCEINLINE -LARGE_INTEGER -NTAPI_INLINE -RtlLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER Divisor, - OUT PLARGE_INTEGER Remainder OPTIONAL) -{ - LARGE_INTEGER ret; - ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; - if (Remainder) - Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; - return ret; -} - -#else - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTSYSAPI -LARGE_INTEGER -NTAPI -RtlLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER Divisor, - OUT PLARGE_INTEGER Remainder OPTIONAL); -#endif - - -#endif /* defined(_AMD64_) || defined(_IA64_) */ - - - -#ifdef RTL_USE_AVL_TABLES - -#define RtlInitializeGenericTable RtlInitializeGenericTableAvl -#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl -#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl -#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl -#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl -#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl -#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl -#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl -#define RtlGetElementGenericTable RtlGetElementGenericTableAvl -#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl -#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl - -#endif /* RTL_USE_AVL_TABLES */ - -#define RtlInitializeSplayLinks(Links) { \ - PRTL_SPLAY_LINKS _SplayLinks; \ - _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ - _SplayLinks->Parent = _SplayLinks; \ - _SplayLinks->LeftChild = NULL; \ - _SplayLinks->RightChild = NULL; \ -} - -#define RtlIsLeftChild(Links) \ - (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) - -#define RtlIsRightChild(Links) \ - (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) - -#define RtlRightChild(Links) \ - ((PRTL_SPLAY_LINKS)(Links))->RightChild - -#define RtlIsRoot(Links) \ - (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) - -#define RtlLeftChild(Links) \ - ((PRTL_SPLAY_LINKS)(Links))->LeftChild - -#define RtlParent(Links) \ - ((PRTL_SPLAY_LINKS)(Links))->Parent - -#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \ - { \ - PRTL_SPLAY_LINKS _SplayParent; \ - PRTL_SPLAY_LINKS _SplayChild; \ - _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ - _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ - _SplayParent->LeftChild = _SplayChild; \ - _SplayChild->Parent = _SplayParent; \ - } - -#define RtlInsertAsRightChild(ParentLinks,ChildLinks) \ - { \ - PRTL_SPLAY_LINKS _SplayParent; \ - PRTL_SPLAY_LINKS _SplayChild; \ - _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ - _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ - _SplayParent->RightChild = _SplayChild; \ - _SplayChild->Parent = _SplayParent; \ - } - -#if !defined(MIDL_PASS) - -FORCEINLINE -LUID -NTAPI_INLINE -RtlConvertLongToLuid( - IN LONG Val) -{ - LUID Luid; - LARGE_INTEGER Temp; - - Temp.QuadPart = Val; - Luid.LowPart = Temp.u.LowPart; - Luid.HighPart = Temp.u.HighPart; - return Luid; -} - -FORCEINLINE -LUID -NTAPI_INLINE -RtlConvertUlongToLuid( - IN ULONG Val) -{ - LUID Luid; - - Luid.LowPart = Val; - Luid.HighPart = 0; - return Luid; -} - -#endif /* !defined(MIDL_PASS) */ - -#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) -#define RtlGetCallersAddress(CallersAddress, CallersCaller) \ - *CallersAddress = (PVOID)_ReturnAddress(); \ - *CallersCaller = NULL; -#else -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTSYSAPI -VOID -NTAPI -RtlGetCallersAddress( - OUT PVOID *CallersAddress, - OUT PVOID *CallersCaller); -#endif -#endif - -#if !defined(MIDL_PASS) && !defined(SORTPP_PASS) - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -FORCEINLINE -VOID -NTAPI -RtlInitHashTableContext( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) -{ - Context->ChainHead = NULL; - Context->PrevLinkage = NULL; -} - -FORCEINLINE -VOID -NTAPI -RtlInitHashTableContextFromEnumerator( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, - IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) -{ - Context->ChainHead = Enumerator->ChainHead; - Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink; -} - -FORCEINLINE -VOID -NTAPI -RtlReleaseHashTableContext( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) -{ - UNREFERENCED_PARAMETER(Context); - return; -} - -FORCEINLINE -ULONG -NTAPI -RtlTotalBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) -{ - return HashTable->TableSize; -} - -FORCEINLINE -ULONG -NTAPI -RtlNonEmptyBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) -{ - return HashTable->NonEmptyBuckets; -} - -FORCEINLINE -ULONG -NTAPI -RtlEmptyBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) -{ - return HashTable->TableSize - HashTable->NonEmptyBuckets; -} - -FORCEINLINE -ULONG -NTAPI -RtlTotalEntriesHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) -{ - return HashTable->NumEntries; -} - -FORCEINLINE -ULONG -NTAPI -RtlActiveEnumeratorsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) -{ - return HashTable->NumEnumerators; -} - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ - -/****************************************************************************** - * Security Manager Functions * - ******************************************************************************/ +/* Security reference monitor routines */ #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI @@ -5494,42 +2885,12 @@ NTAPI SeSinglePrivilegeCheck( IN LUID PrivilegeValue, IN KPROCESSOR_MODE PreviousMode); +#endif - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -/****************************************************************************** - * ZwXxx Functions * - ******************************************************************************/ - - - -NTSYSAPI -NTSTATUS -NTAPI -ZwAllocateLocallyUniqueId( - OUT PLUID Luid); - -NTSYSAPI -NTSTATUS -NTAPI -ZwTerminateProcess( - IN HANDLE ProcessHandle OPTIONAL, - IN NTSTATUS ExitStatus); - -NTSYSAPI -NTSTATUS -NTAPI -ZwOpenProcess( - OUT PHANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN PCLIENT_ID ClientId OPTIONAL); - +/* ZwXxx Functions */ #if (NTDDI_VERSION >= NTDDI_WIN2K) - NTSTATUS NTAPI ZwCancelTimer( @@ -5571,190 +2932,12 @@ ZwSetTimer( IN LONG Period OPTIONAL, OUT PBOOLEAN PreviousState OPTIONAL); -NTSYSAPI -NTSTATUS -NTAPI -ZwDisplayString( - IN PUNICODE_STRING String); - -NTSYSAPI -NTSTATUS -NTAPI -ZwPowerInformation( - IN POWER_INFORMATION_LEVEL PowerInformationLevel, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDeviceIoControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG IoControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); - - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTSTATUS -NTAPI -ZwSetTimerEx( - IN HANDLE TimerHandle, - IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, - IN OUT PVOID TimerSetInformation, - IN ULONG TimerSetInformationLength); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - - -/* UNSORTED */ - -#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ - ((ConditionMask) = VerSetConditionMask((ConditionMask), \ - (TypeBitMask), (ComparisonType))) - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTSYSAPI -ULONGLONG -NTAPI -VerSetConditionMask( - IN ULONGLONG ConditionMask, - IN ULONG TypeMask, - IN UCHAR Condition); #endif -typedef struct _KERNEL_USER_TIMES { - LARGE_INTEGER CreateTime; - LARGE_INTEGER ExitTime; - LARGE_INTEGER KernelTime; - LARGE_INTEGER UserTime; -} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; - -/* NtXxx Functions */ - -typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { - SystemFirmwareTable_Enumerate, - SystemFirmwareTable_Get -} SYSTEM_FIRMWARE_TABLE_ACTION; - -typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { - ULONG ProviderSignature; - SYSTEM_FIRMWARE_TABLE_ACTION Action; - ULONG TableID; - ULONG TableBufferLength; - UCHAR TableBuffer[ANYSIZE_ARRAY]; -} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; - -typedef NTSTATUS -(__cdecl *PFNFTH)( - IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); - -typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { - ULONG ProviderSignature; - BOOLEAN Register; - PFNFTH FirmwareTableHandler; - PVOID DriverObject; -} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER; - -typedef ULONG_PTR -(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( - IN PVOID Context); - -typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { - PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; - PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; -} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; - -#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 -#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 -#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 -#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 -#define DRIVER_VERIFIER_IO_CHECKING 0x0010 - -#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0 -#define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V) - -#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1 -#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V) - -#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2 -#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V) - -#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3 -#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \ - (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V) - -#define SHARED_GLOBAL_FLAGS_SPARE_V 0x4 -#define SHARED_GLOBAL_FLAGS_SPARE \ - (1UL << SHARED_GLOBAL_FLAGS_SPARE_V) - -#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5 -#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \ - (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V) - -#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6 -#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \ - (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V) - -#define EX_INIT_BITS(Flags, Bit) \ - *((Flags)) |= (Bit) // Safe to use before concurrently accessible - -#define EX_TEST_SET_BIT(Flags, Bit) \ - InterlockedBitTestAndSet ((PLONG)(Flags), (Bit)) - -#define EX_TEST_CLEAR_BIT(Flags, Bit) \ - InterlockedBitTestAndReset ((PLONG)(Flags), (Bit)) - -#define PCCARD_MAP_ERROR 0x01 -#define PCCARD_DEVICE_PCI 0x10 - -#define PCCARD_SCAN_DISABLED 0x01 -#define PCCARD_MAP_ZERO 0x02 -#define PCCARD_NO_TIMER 0x03 -#define PCCARD_NO_PIC 0x04 -#define PCCARD_NO_LEGACY_BASE 0x05 -#define PCCARD_DUP_LEGACY_BASE 0x06 -#define PCCARD_NO_CONTROLLERS 0x07 - -#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2)) - -/* Filesystem runtime library routines */ - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsTotalDeviceFailure( - IN NTSTATUS Status); -#endif - -/* FIXME : These definitions below doesn't belong to NTDDK */ #ifdef __cplusplus } #endif + + +#endif /* _NTDDK_ */ diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index 7e14da769e7..5f032726d38 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -25,10 +25,32 @@ #define _NTIFS_INCLUDED_ #define _GNU_NTIFS_ +/* Helper macro to enable gcc's extension. */ +#ifndef __GNU_EXTENSION +#ifdef __GNUC__ +#define __GNU_EXTENSION __extension__ +#else +#define __GNU_EXTENSION +#endif +#endif + #ifdef __cplusplus extern "C" { #endif +#if !defined(_NTHALDLL_) && !defined(_BLDR_) +#define NTHALAPI DECLSPEC_IMPORT +#else +#define NTHALAPI +#endif + +/* For ReactOS */ +#if !defined(_NTOSKRNL_) && !defined(_BLDR_) +#define NTKERNELAPI DECLSPEC_IMPORT +#else +#define NTKERNELAPI +#endif + /* Dependencies */ #include #include @@ -54,6 +76,16 @@ extern "C" { #define ClearFlag(_F,_SF) ((_F) &= ~(_SF)) #endif +#define PsGetCurrentProcess IoGetCurrentProcess + +#if (NTDDI_VERSION >= NTDDI_VISTA) +extern NTSYSAPI volatile CCHAR KeNumberProcessors; +#elif (NTDDI_VERSION >= NTDDI_WINXP) +extern NTSYSAPI CCHAR KeNumberProcessors; +#else +extern PCCHAR KeNumberProcessors; +#endif + typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; typedef STRING LSA_STRING, *PLSA_STRING; typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES; @@ -719,6 +751,8 @@ typedef enum _OBJECT_INFORMATION_CLASS { MaxObjectInfoClass /* FIXME, not in WDK */ } OBJECT_INFORMATION_CLASS; +#if (NTDDI_VERSION >= NTDDI_NT4) + NTSYSCALLAPI NTSTATUS NTAPI @@ -729,6 +763,8 @@ NtQueryObject( IN ULONG ObjectInformationLength, OUT PULONG ReturnLength OPTIONAL); +#endif + #if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSCALLAPI @@ -2378,11 +2414,95 @@ extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine; #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information" +#define DEVICE_TYPE ULONG + +#define FILE_DEVICE_BEEP 0x00000001 +#define FILE_DEVICE_CD_ROM 0x00000002 +#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 +#define FILE_DEVICE_CONTROLLER 0x00000004 +#define FILE_DEVICE_DATALINK 0x00000005 +#define FILE_DEVICE_DFS 0x00000006 +#define FILE_DEVICE_DISK 0x00000007 +#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 +#define FILE_DEVICE_FILE_SYSTEM 0x00000009 +#define FILE_DEVICE_INPORT_PORT 0x0000000a +#define FILE_DEVICE_KEYBOARD 0x0000000b +#define FILE_DEVICE_MAILSLOT 0x0000000c +#define FILE_DEVICE_MIDI_IN 0x0000000d +#define FILE_DEVICE_MIDI_OUT 0x0000000e +#define FILE_DEVICE_MOUSE 0x0000000f +#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 +#define FILE_DEVICE_NAMED_PIPE 0x00000011 +#define FILE_DEVICE_NETWORK 0x00000012 +#define FILE_DEVICE_NETWORK_BROWSER 0x00000013 +#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 +#define FILE_DEVICE_NULL 0x00000015 +#define FILE_DEVICE_PARALLEL_PORT 0x00000016 +#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 +#define FILE_DEVICE_PRINTER 0x00000018 +#define FILE_DEVICE_SCANNER 0x00000019 +#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a +#define FILE_DEVICE_SERIAL_PORT 0x0000001b +#define FILE_DEVICE_SCREEN 0x0000001c +#define FILE_DEVICE_SOUND 0x0000001d +#define FILE_DEVICE_STREAMS 0x0000001e +#define FILE_DEVICE_TAPE 0x0000001f +#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 +#define FILE_DEVICE_TRANSPORT 0x00000021 +#define FILE_DEVICE_UNKNOWN 0x00000022 +#define FILE_DEVICE_VIDEO 0x00000023 +#define FILE_DEVICE_VIRTUAL_DISK 0x00000024 +#define FILE_DEVICE_WAVE_IN 0x00000025 +#define FILE_DEVICE_WAVE_OUT 0x00000026 +#define FILE_DEVICE_8042_PORT 0x00000027 +#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 +#define FILE_DEVICE_BATTERY 0x00000029 +#define FILE_DEVICE_BUS_EXTENDER 0x0000002a +#define FILE_DEVICE_MODEM 0x0000002b +#define FILE_DEVICE_VDM 0x0000002c +#define FILE_DEVICE_MASS_STORAGE 0x0000002d +#define FILE_DEVICE_SMB 0x0000002e +#define FILE_DEVICE_KS 0x0000002f +#define FILE_DEVICE_CHANGER 0x00000030 +#define FILE_DEVICE_SMARTCARD 0x00000031 +#define FILE_DEVICE_ACPI 0x00000032 +#define FILE_DEVICE_DVD 0x00000033 +#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 +#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 +#define FILE_DEVICE_DFS_VOLUME 0x00000036 +#define FILE_DEVICE_SERENUM 0x00000037 +#define FILE_DEVICE_TERMSRV 0x00000038 +#define FILE_DEVICE_KSEC 0x00000039 +#define FILE_DEVICE_FIPS 0x0000003A +#define FILE_DEVICE_INFINIBAND 0x0000003B +#define FILE_DEVICE_VMBUS 0x0000003E +#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F +#define FILE_DEVICE_WPD 0x00000040 +#define FILE_DEVICE_BLUETOOTH 0x00000041 +#define FILE_DEVICE_MT_COMPOSITE 0x00000042 +#define FILE_DEVICE_MT_TRANSPORT 0x00000043 +#define FILE_DEVICE_BIOMETRIC 0x00000044 +#define FILE_DEVICE_PMI 0x00000045 + +#define CTL_CODE(DeviceType, Function, Method, Access) \ + (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) + +#define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) + #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) +#define METHOD_BUFFERED 0 +#define METHOD_IN_DIRECT 1 +#define METHOD_OUT_DIRECT 2 +#define METHOD_NEITHER 3 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT +#define FILE_ANY_ACCESS 0x00000000 +#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS +#define FILE_READ_ACCESS 0x00000001 +#define FILE_WRITE_ACCESS 0x00000002 + typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE; typedef enum _SECURITY_LOGON_TYPE { @@ -4553,8 +4673,6 @@ typedef struct _KAPC_STATE { #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN)) -#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject); - typedef struct _KQUEUE { DISPATCHER_HEADER Header; LIST_ENTRY EntryListHead; @@ -4689,7 +4807,7 @@ FASTCALL KeAcquireQueuedSpinLock( IN OUT KSPIN_LOCK_QUEUE_NUMBER Number); -_DECL_HAL_KE_IMPORT +NTHALAPI VOID FASTCALL KeReleaseQueuedSpinLock( @@ -4904,6 +5022,24 @@ typedef NTSTATUS #if (NTDDI_VERSION >= NTDDI_WIN2K) +NTKERNELAPI +VOID +NTAPI +SeCaptureSubjectContext( + OUT PSECURITY_SUBJECT_CONTEXT SubjectContext); + +NTKERNELAPI +VOID +NTAPI +SeLockSubjectContext( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + +NTKERNELAPI +VOID +NTAPI +SeUnlockSubjectContext( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + NTKERNELAPI VOID NTAPI @@ -5317,6 +5453,18 @@ SeLocateProcessImageName( extern NTKERNELAPI PSE_EXPORTS SeExports; +#if !defined(_PSGETCURRENTTHREAD_) +#define _PSGETCURRENTTHREAD_ + +FORCEINLINE +PETHREAD +PsGetCurrentThread( + VOID) +{ + return (PETHREAD)KeGetCurrentThread(); +} +#endif + #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI @@ -5386,20 +5534,7 @@ PsReturnPoolQuota( IN POOL_TYPE PoolType, IN ULONG_PTR Amount); -NTKERNELAPI -NTSTATUS -NTAPI -PsAssignImpersonationToken( - IN PETHREAD Thread, - IN HANDLE Token OPTIONAL); - -NTKERNELAPI -HANDLE -NTAPI -PsReferencePrimaryToken( - IN OUT PEPROCESS Process); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +#endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -5688,6 +5823,18 @@ IoPageRead( IN PKEVENT Event, OUT PIO_STATUS_BLOCK IoStatusBlock); +NTKERNELAPI +PDEVICE_OBJECT +NTAPI +IoGetAttachedDevice( + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +PDEVICE_OBJECT +NTAPI +IoGetAttachedDeviceReference( + IN PDEVICE_OBJECT DeviceObject); + NTKERNELAPI PDEVICE_OBJECT NTAPI @@ -5804,6 +5951,42 @@ NTAPI IoSetTopLevelIrp( IN PIRP Irp OPTIONAL); +NTKERNELAPI +VOID +NTAPI +IoStartNextPacket( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN Cancelable); + +NTKERNELAPI +VOID +NTAPI +IoStartNextPacketByKey( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN Cancelable, + IN ULONG Key); + +NTKERNELAPI +VOID +NTAPI +IoStartPacket( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PULONG Key OPTIONAL, + IN PDRIVER_CANCEL CancelFunction OPTIONAL); + +NTKERNELAPI +VOID +NTAPI +IoStartTimer( + IN PDEVICE_OBJECT DeviceObject); + +NTKERNELAPI +VOID +NTAPI +IoStopTimer( + IN PDEVICE_OBJECT DeviceObject); + NTKERNELAPI NTSTATUS NTAPI @@ -5840,6 +6023,12 @@ IoVerifyVolume( IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount); +NTKERNELAPI +VOID +NTAPI +IoWriteErrorLogEntry( + IN PVOID ElEntry); + NTKERNELAPI NTSTATUS NTAPI @@ -5866,6 +6055,13 @@ IoQueryFileDosDeviceName( IN PFILE_OBJECT FileObject, OUT POBJECT_NAME_INFORMATION *ObjectNameInformation); +VOID +NTAPI +IoSetStartIoAttributes( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN DeferredStartIo, + IN BOOLEAN NonCancelable); + NTKERNELAPI NTSTATUS NTAPI @@ -5964,6 +6160,53 @@ typedef struct _IO_PRIORITY_INFO { #define PO_CB_LID_SWITCH_STATE 4 #define PO_CB_PROCESSOR_POWER_POLICY 5 +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +PVOID +NTAPI +PoRegisterSystemState( + IN OUT PVOID StateHandle OPTIONAL, + IN EXECUTION_STATE Flags); + +NTKERNELAPI +VOID +NTAPI +PoUnregisterSystemState( + IN OUT PVOID StateHandle); + +NTKERNELAPI +POWER_STATE +NTAPI +PoSetPowerState( + IN PDEVICE_OBJECT DeviceObject, + IN POWER_STATE_TYPE Type, + IN POWER_STATE State); + +NTKERNELAPI +NTSTATUS +NTAPI +PoCallDriver( + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp); + +NTKERNELAPI +VOID +NTAPI +PoStartNextPowerIrp( + IN OUT PIRP Irp); + +NTKERNELAPI +PULONG +NTAPI +PoRegisterDeviceForIdleDetection( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG ConservationIdleTime, + IN ULONG PerformanceIdleTime, + IN DEVICE_POWER_STATE State); + +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + #if (NTDDI_VERSION >= NTDDI_WINXP) NTKERNELAPI NTSTATUS @@ -5972,6 +6215,84 @@ PoQueueShutdownWorkItem( IN OUT PWORK_QUEUE_ITEM WorkItem); #endif +#if (NTDDI_VERSION >= NTDDI_VISTA) + +NTKERNELAPI +NTSTATUS +NTAPI +PoRegisterPowerSettingCallback( + IN PDEVICE_OBJECT DeviceObject OPTIONAL, + IN LPCGUID SettingGuid, + IN PPOWER_SETTING_CALLBACK Callback, + IN PVOID Context OPTIONAL, + OUT PVOID *Handle); + +NTKERNELAPI +NTSTATUS +PoUnregisterPowerSettingCallback( + IN OUT PVOID Handle); + +#endif + +#if (NTDDI_VERSION >= NTDDI_WIN6SP1) +NTKERNELAPI +VOID +NTAPI +PoSetDeviceBusyEx( + IN OUT PULONG IdlePointer); +#endif + +#if (NTDDI_VERSION >= NTDDI_WIN7) + +NTKERNELAPI +NTSTATUS +NTAPI +PoCreatePowerRequest( + OUT PVOID *PowerRequest, + IN PDEVICE_OBJECT DeviceObject, + IN PCOUNTED_REASON_CONTEXT Context); + +NTKERNELAPI +NTSTATUS +NTAPI +PoSetPowerRequest( + IN OUT PVOID PowerRequest, + IN POWER_REQUEST_TYPE Type); + +NTKERNELAPI +NTSTATUS +NTAPI +PoClearPowerRequest( + IN OUT PVOID PowerRequest, + IN POWER_REQUEST_TYPE Type); + +NTKERNELAPI +VOID +NTAPI +PoDeletePowerRequest( + IN OUT PVOID PowerRequest); + +NTKERNELAPI +VOID +NTAPI +PoStartDeviceBusy( + IN OUT PULONG IdlePointer); + +NTKERNELAPI +VOID +NTAPI +PoEndDeviceBusy( + IN OUT PULONG IdlePointer); + +NTKERNELAPI +BOOLEAN +NTAPI +PoQueryWatchdogTime( + IN PDEVICE_OBJECT Pdo, + OUT PULONG SecondsRemaining); + +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ + #if defined(_IA64_) #if (NTDDI_VERSION >= NTDDI_WIN2K) //DECLSPEC_DEPRECATED_DDK @@ -6247,188 +6568,6 @@ typedef struct _FILE_LOCK { LONG volatile LockRequestsInProgress; } FILE_LOCK, *PFILE_LOCK; -typedef struct _TUNNEL { - FAST_MUTEX Mutex; - PRTL_SPLAY_LINKS Cache; - LIST_ENTRY TimerQueue; - USHORT NumEntries; -} TUNNEL, *PTUNNEL; - -typedef enum _FSRTL_COMPARISON_RESULT { - LessThan = -1, - EqualTo = 0, - GreaterThan = 1 -} FSRTL_COMPARISON_RESULT; - -#define FSRTL_FAT_LEGAL 0x01 -#define FSRTL_HPFS_LEGAL 0x02 -#define FSRTL_NTFS_LEGAL 0x04 -#define FSRTL_WILD_CHARACTER 0x08 -#define FSRTL_OLE_LEGAL 0x10 -#define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL) - -typedef struct _BASE_MCB { - ULONG MaximumPairCount; - ULONG PairCount; - USHORT PoolType; - USHORT Flags; - PVOID Mapping; -} BASE_MCB, *PBASE_MCB; - -typedef struct _LARGE_MCB { - PKGUARDED_MUTEX GuardedMutex; - BASE_MCB BaseMcb; -} LARGE_MCB, *PLARGE_MCB; - -#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1 - -typedef struct _MCB { - LARGE_MCB DummyFieldThatSizesThisStructureCorrectly; -} MCB, *PMCB; - -typedef PVOID OPLOCK, *POPLOCK; - -typedef VOID -(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) ( - IN PVOID Context, - IN PIRP Irp); - -typedef VOID -(NTAPI *POPLOCK_FS_PREPOST_IRP) ( - IN PVOID Context, - IN PIRP Irp); - -#if (NTDDI_VERSION >= NTDDI_VISTASP1) -#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001 -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) -#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002 -#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004 -#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008 -#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001 -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -typedef struct _OPLOCK_KEY_ECP_CONTEXT { - GUID OplockKey; - ULONG Reserved; -} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT; - -DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f ); - -#endif - -#define FSRTL_VOLUME_DISMOUNT 1 -#define FSRTL_VOLUME_DISMOUNT_FAILED 2 -#define FSRTL_VOLUME_LOCK 3 -#define FSRTL_VOLUME_LOCK_FAILED 4 -#define FSRTL_VOLUME_UNLOCK 5 -#define FSRTL_VOLUME_MOUNT 6 -#define FSRTL_VOLUME_NEEDS_CHKDSK 7 -#define FSRTL_VOLUME_WORM_NEAR_FULL 8 -#define FSRTL_VOLUME_WEARING_OUT 9 -#define FSRTL_VOLUME_FORCED_CLOSED 10 -#define FSRTL_VOLUME_INFO_MAKE_COMPAT 11 -#define FSRTL_VOLUME_PREPARING_EJECT 12 -#define FSRTL_VOLUME_CHANGE_SIZE 13 -#define FSRTL_VOLUME_BACKGROUND_FORMAT 14 - -typedef PVOID PNOTIFY_SYNC; - -typedef BOOLEAN -(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) ( - IN PVOID NotifyContext, - IN PVOID TargetContext OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext); - -typedef BOOLEAN -(NTAPI *PFILTER_REPORT_CHANGE) ( - IN PVOID NotifyContext, - IN PVOID FilterContext); - -typedef VOID -(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) ( - IN PVOID Context, - IN PKEVENT Event); - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -#define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001 -#define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002 -#define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004 - -#define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001 - -#define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001 -#define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002 - -#define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002 - -#define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001 -#define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002 - -typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 { - ULONG32 ProviderId; -} FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1; - -typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 { - ULONG32 ProviderId; - UNICODE_STRING ProviderName; -} FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2; - -typedef VOID -(*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) ( - IN OUT PVOID EcpContext, - IN LPCGUID EcpType); - -typedef struct _ECP_LIST ECP_LIST, *PECP_LIST; - -typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS; -typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS; -typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS; - -typedef enum _FSRTL_CHANGE_BACKING_TYPE { - ChangeDataControlArea, - ChangeImageControlArea, - ChangeSharedCacheMap -} FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE; - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -typedef struct _FSRTL_PER_FILE_CONTEXT { - LIST_ENTRY Links; - PVOID OwnerId; - PVOID InstanceId; - PFREE_FUNCTION FreeCallback; -} FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT; - -typedef struct _FSRTL_PER_STREAM_CONTEXT { - LIST_ENTRY Links; - PVOID OwnerId; - PVOID InstanceId; - PFREE_FUNCTION FreeCallback; -} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT; - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -typedef VOID -(*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) ( - IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); -#endif - -typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT { - LIST_ENTRY Links; - PVOID OwnerId; - PVOID InstanceId; -} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT; - -#define FsRtlEnterFileSystem KeEnterCriticalRegion -#define FsRtlExitFileSystem KeLeaveCriticalRegion - -#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1 -#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2 - #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI @@ -6706,2181 +6845,15 @@ FsRtlPrivateLock( IN PVOID Context, IN BOOLEAN AlreadySynchronized); -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeTunnelCache( - IN PTUNNEL Cache); - -NTKERNELAPI -VOID -NTAPI -FsRtlAddToTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey, - IN PUNICODE_STRING ShortName, - IN PUNICODE_STRING LongName, - IN BOOLEAN KeyByShortName, - IN ULONG DataLength, - IN PVOID Data); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlFindInTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey, - IN PUNICODE_STRING Name, - OUT PUNICODE_STRING ShortName, - OUT PUNICODE_STRING LongName, - IN OUT PULONG DataLength, - OUT PVOID Data); - -NTKERNELAPI -VOID -NTAPI -FsRtlDeleteKeyFromTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey); - -NTKERNELAPI -VOID -NTAPI -FsRtlDeleteTunnelCache( - IN PTUNNEL Cache); - -NTKERNELAPI -VOID -NTAPI -FsRtlDissectDbcs( - IN ANSI_STRING Name, - OUT PANSI_STRING FirstPart, - OUT PANSI_STRING RemainingPart); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlDoesDbcsContainWildCards( - IN PANSI_STRING Name); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsDbcsInExpression( - IN PANSI_STRING Expression, - IN PANSI_STRING Name); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsFatDbcsLegal( - IN ANSI_STRING DbcsName, - IN BOOLEAN WildCardsPermissible, - IN BOOLEAN PathNamePermissible, - IN BOOLEAN LeadingBackslashPermissible); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsHpfsDbcsLegal( - IN ANSI_STRING DbcsName, - IN BOOLEAN WildCardsPermissible, - IN BOOLEAN PathNamePermissible, - IN BOOLEAN LeadingBackslashPermissible); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlNormalizeNtstatus( - IN NTSTATUS Exception, - IN NTSTATUS GenericException); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsNtstatusExpected( - IN NTSTATUS Ntstatus); - -NTKERNELAPI -PERESOURCE -NTAPI -FsRtlAllocateResource( - VOID); - -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeLargeMcb( - IN PLARGE_MCB Mcb, - IN POOL_TYPE PoolType); - -NTKERNELAPI -VOID -NTAPI -FsRtlUninitializeLargeMcb( - IN PLARGE_MCB Mcb); - -NTKERNELAPI -VOID -NTAPI -FsRtlResetLargeMcb( - IN PLARGE_MCB Mcb, - IN BOOLEAN SelfSynchronized); - -NTKERNELAPI -VOID -NTAPI -FsRtlTruncateLargeMcb( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlAddLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); - -NTKERNELAPI -VOID -NTAPI -FsRtlRemoveLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntry( - IN PLARGE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntryAndIndex( - IN PLARGE_MCB OpaqueMcb, - OUT PLONGLONG LargeVbn, - OUT PLONGLONG LargeLbn, - OUT PULONG Index); - -NTKERNELAPI -ULONG -NTAPI -FsRtlNumberOfRunsInLargeMcb( - IN PLARGE_MCB Mcb); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlGetNextLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlSplitLargeMcb( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount); - -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeMcb( - IN PMCB Mcb, - IN POOL_TYPE PoolType); - -NTKERNELAPI -VOID -NTAPI -FsRtlUninitializeMcb( - IN PMCB Mcb); - -NTKERNELAPI -VOID -NTAPI -FsRtlTruncateMcb( - IN PMCB Mcb, - IN VBN Vbn); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlAddMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - IN LBN Lbn, - IN ULONG SectorCount); - -NTKERNELAPI -VOID -NTAPI -FsRtlRemoveMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - IN ULONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - OUT PLBN Lbn, - OUT PULONG SectorCount OPTIONAL, - OUT PULONG Index); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLastMcbEntry( - IN PMCB Mcb, - OUT PVBN Vbn, - OUT PLBN Lbn); - -NTKERNELAPI -ULONG -NTAPI -FsRtlNumberOfRunsInMcb( - IN PMCB Mcb); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlGetNextMcbEntry( - IN PMCB Mcb, - IN ULONG RunIndex, - OUT PVBN Vbn, - OUT PLBN Lbn, - OUT PULONG SectorCount); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlBalanceReads( - IN PDEVICE_OBJECT TargetDevice); - -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeOplock( - IN OUT POPLOCK Oplock); - -NTKERNELAPI -VOID -NTAPI -FsRtlUninitializeOplock( - IN OUT POPLOCK Oplock); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlOplockFsctrl( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG OpenCount); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlCheckOplock( - IN POPLOCK Oplock, - IN PIRP Irp, - IN PVOID Context, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlOplockIsFastIoPossible( - IN POPLOCK Oplock); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlCurrentBatchOplock( - IN POPLOCK Oplock); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlNotifyVolumeEvent( - IN PFILE_OBJECT FileObject, - IN ULONG EventCode); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyInitializeSync( - IN PNOTIFY_SYNC *NotifySync); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyUninitializeSync( - IN PNOTIFY_SYNC *NotifySync); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyFullChangeDirectory( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext, - IN PSTRING FullDirectoryName, - IN BOOLEAN WatchTree, - IN BOOLEAN IgnoreBuffer, - IN ULONG CompletionFilter, - IN PIRP NotifyIrp OPTIONAL, - IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyFilterReportChange( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PSTRING FullTargetName, - IN USHORT TargetNameOffset, - IN PSTRING StreamName OPTIONAL, - IN PSTRING NormalizedParentName OPTIONAL, - IN ULONG FilterMatch, - IN ULONG Action, - IN PVOID TargetContext OPTIONAL, - IN PVOID FilterContext OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyFullReportChange( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PSTRING FullTargetName, - IN USHORT TargetNameOffset, - IN PSTRING StreamName OPTIONAL, - IN PSTRING NormalizedParentName OPTIONAL, - IN ULONG FilterMatch, - IN ULONG Action, - IN PVOID TargetContext OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyCleanup( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext); - -NTKERNELAPI -VOID -NTAPI -FsRtlDissectName( - IN UNICODE_STRING Name, - OUT PUNICODE_STRING FirstPart, - OUT PUNICODE_STRING RemainingPart); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlDoesNameContainWildCards( - IN PUNICODE_STRING Name); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlAreNamesEqual( - IN PCUNICODE_STRING Name1, - IN PCUNICODE_STRING Name2, - IN BOOLEAN IgnoreCase, - IN PCWCH UpcaseTable OPTIONAL); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsNameInExpression( - IN PUNICODE_STRING Expression, - IN PUNICODE_STRING Name, - IN BOOLEAN IgnoreCase, - IN PWCHAR UpcaseTable OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlPostPagingFileStackOverflow( - IN PVOID Context, - IN PKEVENT Event, - IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); - -NTKERNELAPI -VOID -NTAPI -FsRtlPostStackOverflow ( - IN PVOID Context, - IN PKEVENT Event, - IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlRegisterUncProvider( - OUT PHANDLE MupHandle, - IN PUNICODE_STRING RedirectorDeviceName, - IN BOOLEAN MailslotsSupported); - -NTKERNELAPI -VOID -NTAPI -FsRtlDeregisterUncProvider( - IN HANDLE Handle); - -NTKERNELAPI -VOID -NTAPI -FsRtlTeardownPerStreamContexts( - IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlCreateSectionForDataScan( - OUT PHANDLE SectionHandle, - OUT PVOID *SectionObject, - OUT PLARGE_INTEGER SectionFileSize OPTIONAL, - IN PFILE_OBJECT FileObject, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PLARGE_INTEGER MaximumSize OPTIONAL, - IN ULONG SectionPageProtection, - IN ULONG AllocationAttributes, - IN ULONG Flags); - #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ -#if (NTDDI_VERSION >= NTDDI_WINXP) - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyFilterChangeDirectory( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext, - IN PSTRING FullDirectoryName, - IN BOOLEAN WatchTree, - IN BOOLEAN IgnoreBuffer, - IN ULONG CompletionFilter, - IN PIRP NotifyIrp OPTIONAL, - IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL, - IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlInsertPerStreamContext( - IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext, - IN PFSRTL_PER_STREAM_CONTEXT Ptr); - -NTKERNELAPI -PFSRTL_PER_STREAM_CONTEXT -NTAPI -FsRtlLookupPerStreamContextInternal( - IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -NTKERNELAPI -PFSRTL_PER_STREAM_CONTEXT -NTAPI -FsRtlRemovePerStreamContext( - IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlIncrementCcFastReadNotPossible( - VOID); - -NTKERNELAPI -VOID -NTAPI -FsRtlIncrementCcFastReadWait( - VOID); - -NTKERNELAPI -VOID -NTAPI -FsRtlIncrementCcFastReadNoWait( - VOID); - -NTKERNELAPI -VOID -NTAPI -FsRtlIncrementCcFastReadResourceMiss( - VOID); - -NTKERNELAPI -LOGICAL -NTAPI -FsRtlIsPagingFile( - IN PFILE_OBJECT FileObject); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_WS03) - -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeBaseMcb( - IN PBASE_MCB Mcb, - IN POOL_TYPE PoolType); - -NTKERNELAPI -VOID -NTAPI -FsRtlUninitializeBaseMcb( - IN PBASE_MCB Mcb); - -NTKERNELAPI -VOID -NTAPI -FsRtlResetBaseMcb( - IN PBASE_MCB Mcb); - -NTKERNELAPI -VOID -NTAPI -FsRtlTruncateBaseMcb( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlAddBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlRemoveBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLastBaseMcbEntry( - IN PBASE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlLookupLastBaseMcbEntryAndIndex( - IN PBASE_MCB OpaqueMcb, - IN OUT PLONGLONG LargeVbn, - IN OUT PLONGLONG LargeLbn, - IN OUT PULONG Index); - -NTKERNELAPI -ULONG -NTAPI -FsRtlNumberOfRunsInBaseMcb( - IN PBASE_MCB Mcb); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlGetNextBaseMcbEntry( - IN PBASE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlSplitBaseMcb( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount); - -#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -BOOLEAN -NTAPI -FsRtlInitializeBaseMcbEx( - IN PBASE_MCB Mcb, - IN POOL_TYPE PoolType, - IN USHORT Flags); - -NTSTATUS -NTAPI -FsRtlAddBaseMcbEntryEx( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlCurrentOplock( - IN POPLOCK Oplock); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlOplockBreakToNone( - IN OUT POPLOCK Oplock, - IN PIO_STACK_LOCATION IrpSp OPTIONAL, - IN PIRP Irp, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlNotifyVolumeEventEx( - IN PFILE_OBJECT FileObject, - IN ULONG EventCode, - IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event); - -NTKERNELAPI -VOID -NTAPI -FsRtlNotifyCleanupAll( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList); - -NTSTATUS -NTAPI -FsRtlRegisterUncProviderEx( - OUT PHANDLE MupHandle, - IN PUNICODE_STRING RedirDevName, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG Flags); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlCancellableWaitForSingleObject( - IN PVOID Object, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PIRP Irp OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlCancellableWaitForMultipleObjects( - IN ULONG Count, - IN PVOID ObjectArray[], - IN WAIT_TYPE WaitType, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PKWAIT_BLOCK WaitBlockArray OPTIONAL, - IN PIRP Irp OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlMupGetProviderInfoFromFileObject( - IN PFILE_OBJECT pFileObject, - IN ULONG Level, - OUT PVOID pBuffer, - IN OUT PULONG pBufferSize); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlMupGetProviderIdFromName( - IN PUNICODE_STRING pProviderName, - OUT PULONG32 pProviderId); - -NTKERNELAPI -VOID -NTAPI -FsRtlIncrementCcFastMdlReadWait( - VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlValidateReparsePointBuffer( - IN ULONG BufferLength, - IN PREPARSE_DATA_BUFFER ReparseBuffer); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlRemoveDotsFromPath( - IN OUT PWSTR OriginalString, - IN USHORT PathLength, - OUT USHORT *NewLength); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlAllocateExtraCreateParameterList( - IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags, - OUT PECP_LIST *EcpList); - -NTKERNELAPI -VOID -NTAPI -FsRtlFreeExtraCreateParameterList( - IN PECP_LIST EcpList); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlAllocateExtraCreateParameter( - IN LPCGUID EcpType, - IN ULONG SizeOfContext, - IN FSRTL_ALLOCATE_ECP_FLAGS Flags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN ULONG PoolTag, - OUT PVOID *EcpContext); - -NTKERNELAPI -VOID -NTAPI -FsRtlFreeExtraCreateParameter( - IN PVOID EcpContext); - -NTKERNELAPI -VOID -NTAPI -FsRtlInitExtraCreateParameterLookasideList( - IN OUT PVOID Lookaside, - IN FSRTL_ECP_LOOKASIDE_FLAGS Flags, - IN SIZE_T Size, - IN ULONG Tag); - -VOID -NTAPI -FsRtlDeleteExtraCreateParameterLookasideList( - IN OUT PVOID Lookaside, - IN FSRTL_ECP_LOOKASIDE_FLAGS Flags); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlAllocateExtraCreateParameterFromLookasideList( - IN LPCGUID EcpType, - IN ULONG SizeOfContext, - IN FSRTL_ALLOCATE_ECP_FLAGS Flags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN OUT PVOID LookasideList, - OUT PVOID *EcpContext); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlInsertExtraCreateParameter( - IN OUT PECP_LIST EcpList, - IN OUT PVOID EcpContext); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlFindExtraCreateParameter( - IN PECP_LIST EcpList, - IN LPCGUID EcpType, - OUT PVOID *EcpContext OPTIONAL, - OUT ULONG *EcpContextSize OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlRemoveExtraCreateParameter( - IN OUT PECP_LIST EcpList, - IN LPCGUID EcpType, - OUT PVOID *EcpContext, - OUT ULONG *EcpContextSize OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlGetEcpListFromIrp( - IN PIRP Irp, - OUT PECP_LIST *EcpList OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlSetEcpListIntoIrp( - IN OUT PIRP Irp, - IN PECP_LIST EcpList); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlGetNextExtraCreateParameter( - IN PECP_LIST EcpList, - IN PVOID CurrentEcpContext OPTIONAL, - OUT LPGUID NextEcpType OPTIONAL, - OUT PVOID *NextEcpContext OPTIONAL, - OUT ULONG *NextEcpContextSize OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlAcknowledgeEcp( - IN PVOID EcpContext); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsEcpAcknowledged( - IN PVOID EcpContext); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsEcpFromUserMode( - IN PVOID EcpContext); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlChangeBackingFileObject( - IN PFILE_OBJECT CurrentFileObject OPTIONAL, - IN PFILE_OBJECT NewFileObject, - IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType, - IN ULONG Flags); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlLogCcFlushError( - IN PUNICODE_STRING FileName, - IN PDEVICE_OBJECT DeviceObject, - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN NTSTATUS FlushError, - IN ULONG Flags); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlAreVolumeStartupApplicationsComplete( - VOID); - -NTKERNELAPI -ULONG -NTAPI -FsRtlQueryMaximumVirtualDiskNestingLevel( - VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlGetVirtualDiskNestingLevel( - IN PDEVICE_OBJECT DeviceObject, - OUT PULONG NestingLevel, - OUT PULONG NestingFlags OPTIONAL); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_VISTASP1) -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlCheckOplockEx( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); - -#endif - #if (NTDDI_VERSION >= NTDDI_WIN7) - NTKERNELAPI BOOLEAN NTAPI FsRtlAreThereCurrentOrInProgressFileLocks( IN PFILE_LOCK FileLock); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlOplockIsSharedRequest( - IN PIRP Irp); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlOplockBreakH( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlCurrentOplockH( - IN POPLOCK Oplock); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlOplockBreakToNoneEx( - IN OUT POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlOplockFsctrlEx( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG OpenCount, - IN ULONG Flags); - -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlOplockKeysEqual( - IN PFILE_OBJECT Fo1 OPTIONAL, - IN PFILE_OBJECT Fo2 OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlInitializeExtraCreateParameterList( - IN OUT PECP_LIST EcpList); - -NTKERNELAPI -VOID -NTAPI -FsRtlInitializeExtraCreateParameter( - IN PECP_HEADER Ecp, - IN ULONG EcpFlags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN ULONG TotalSize, - IN LPCGUID EcpType, - IN PVOID ListAllocatedFrom OPTIONAL); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlInsertPerFileContext( - IN PVOID* PerFileContextPointer, - IN PFSRTL_PER_FILE_CONTEXT Ptr); - -NTKERNELAPI -PFSRTL_PER_FILE_CONTEXT -NTAPI -FsRtlLookupPerFileContext( - IN PVOID* PerFileContextPointer, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -NTKERNELAPI -PFSRTL_PER_FILE_CONTEXT -NTAPI -FsRtlRemovePerFileContext( - IN PVOID* PerFileContextPointer, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -FsRtlTeardownPerFileContexts( - IN PVOID* PerFileContextPointer); - -NTKERNELAPI -NTSTATUS -NTAPI -FsRtlInsertPerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr); - -NTKERNELAPI -PFSRTL_PER_FILEOBJECT_CONTEXT -NTAPI -FsRtlLookupPerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -NTKERNELAPI -PFSRTL_PER_FILEOBJECT_CONTEXT -NTAPI -FsRtlRemovePerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); - -#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \ - FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \ -) - -#define FsRtlAreThereCurrentFileLocks(FL) ( \ - ((FL)->FastIoIsQuestionable) \ -) - -#define FsRtlIncrementLockRequestsInProgress(FL) { \ - ASSERT( (FL)->LockRequestsInProgress >= 0 ); \ - (void) \ - (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\ -} - -#define FsRtlDecrementLockRequestsInProgress(FL) { \ - ASSERT( (FL)->LockRequestsInProgress > 0 ); \ - (void) \ - (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\ -} - -extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo; -#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo - -#ifdef NLS_MB_CODE_PAGE_TAG -#undef NLS_MB_CODE_PAGE_TAG #endif -#define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag - -/* GCC compatible definition, MS one is retarded */ -extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray; -#define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray - -#define FsRtlIsAnsiCharacterWild(C) ( \ - FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \ -) - -#define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \ - FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \ - ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ -) - -#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \ - FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \ - ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ -) - -#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \ - FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \ - ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ -) - -#define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \ - FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \ -) - -#define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \ - FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \ -) - -#define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \ - ((SCHAR)(C) < 0) ? DEFAULT_RET : \ - FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \ - (FLAGS) | \ - ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \ -) - -#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \ - (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \ - (NLS_MB_CODE_PAGE_TAG && \ - (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \ -) - -#define FsRtlIsUnicodeCharacterWild(C) ( \ - (((C) >= 0x40) ? \ - FALSE : \ - FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \ -) - -#define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \ - ((_fc)->OwnerId = (_owner), \ - (_fc)->InstanceId = (_inst), \ - (_fc)->FreeCallback = (_cb)) - -#define FsRtlGetPerFileContextPointer(_fo) \ - (FsRtlSupportsPerFileContexts(_fo) ? \ - FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \ - NULL) - -#define FsRtlSupportsPerFileContexts(_fo) \ - ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \ - (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \ - (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL)) - -#define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \ -{ \ - FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \ - if ((_fctxptr) != NULL) { \ - (_advhdr)->FileContextSupportPointer = (_fctxptr); \ - } \ -} - -#define FsRtlGetPerStreamContextPointer(FO) ( \ - (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \ -) - -#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \ - (PSC)->OwnerId = (O), \ - (PSC)->InstanceId = (I), \ - (PSC)->FreeCallback = (FC) \ -) - -#define FsRtlSupportsPerStreamContexts(FO) ( \ - (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \ - FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \ - FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \ -) - -#define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \ - (((NULL != (_sc)) && \ - FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \ - !IsListEmpty(&(_sc)->FilterContexts)) ? \ - FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \ - NULL) - -VOID -FORCEINLINE -NTAPI -FsRtlSetupAdvancedHeader( - IN PVOID AdvHdr, - IN PFAST_MUTEX FMutex ) -{ - PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr; - - localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER; - localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS; -#if (NTDDI_VERSION >= NTDDI_VISTA) - localAdvHdr->Version = FSRTL_FCB_HEADER_V1; -#else - localAdvHdr->Version = FSRTL_FCB_HEADER_V0; -#endif - InitializeListHead( &localAdvHdr->FilterContexts ); - if (FMutex != NULL) { - localAdvHdr->FastMutex = FMutex; - } -#if (NTDDI_VERSION >= NTDDI_VISTA) - *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0; - localAdvHdr->FileContextSupportPointer = NULL; -#endif -} - -#define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \ - ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst)) - -#define FsRtlCompleteRequest(IRP,STATUS) { \ - (IRP)->IoStatus.Status = (STATUS); \ - IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \ -} - -#if (NTDDI_VERSION >= NTDDI_WIN7) -typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER; -#endif - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER { - NetworkOpenLocationAny, - NetworkOpenLocationRemote, - NetworkOpenLocationLoopback -} NETWORK_OPEN_LOCATION_QUALIFIER; - -typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER { - NetworkOpenIntegrityAny, - NetworkOpenIntegrityNone, - NetworkOpenIntegritySigned, - NetworkOpenIntegrityEncrypted, - NetworkOpenIntegrityMaximum -} NETWORK_OPEN_INTEGRITY_QUALIFIER; - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1 -#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2 -#define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000 - -typedef struct _NETWORK_OPEN_ECP_CONTEXT { - USHORT Size; - USHORT Reserved; - struct { - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - ULONG Flags; - } in; - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - ULONG Flags; - } out; - } DUMMYSTRUCTNAME; -} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT; - -typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 { - USHORT Size; - USHORT Reserved; - struct { - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - } in; - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - } out; - } DUMMYSTRUCTNAME; -} NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0; - -#elif (NTDDI_VERSION >= NTDDI_VISTA) -typedef struct _NETWORK_OPEN_ECP_CONTEXT { - USHORT Size; - USHORT Reserved; - struct { - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - } in; - struct { - NETWORK_OPEN_LOCATION_QUALIFIER Location; - NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity; - } out; - } DUMMYSTRUCTNAME; -} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT; -#endif - -DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 ); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -typedef struct _PREFETCH_OPEN_ECP_CONTEXT { - PVOID Context; -} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT; - -DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 ); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb); -DEFINE_GUID(GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 ); - -typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS; - -typedef struct _NFS_OPEN_ECP_CONTEXT { - PUNICODE_STRING ExportAlias; - PSOCKADDR_STORAGE_NFS ClientSocketAddress; -} NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT; - -typedef struct _SRV_OPEN_ECP_CONTEXT { - PUNICODE_STRING ShareName; - PSOCKADDR_STORAGE_NFS SocketAddress; - BOOLEAN OplockBlockState; - BOOLEAN OplockAppState; - BOOLEAN OplockFinalState; -} SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT; - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -#define VACB_MAPPING_GRANULARITY (0x40000) -#define VACB_OFFSET_SHIFT (18) - -typedef struct _PUBLIC_BCB { - CSHORT NodeTypeCode; - CSHORT NodeByteSize; - ULONG MappedLength; - LARGE_INTEGER MappedFileOffset; -} PUBLIC_BCB, *PPUBLIC_BCB; - -typedef struct _CC_FILE_SIZES { - LARGE_INTEGER AllocationSize; - LARGE_INTEGER FileSize; - LARGE_INTEGER ValidDataLength; -} CC_FILE_SIZES, *PCC_FILE_SIZES; - -typedef BOOLEAN -(NTAPI *PACQUIRE_FOR_LAZY_WRITE) ( - IN PVOID Context, - IN BOOLEAN Wait); - -typedef VOID -(NTAPI *PRELEASE_FROM_LAZY_WRITE) ( - IN PVOID Context); - -typedef BOOLEAN -(NTAPI *PACQUIRE_FOR_READ_AHEAD) ( - IN PVOID Context, - IN BOOLEAN Wait); - -typedef VOID -(NTAPI *PRELEASE_FROM_READ_AHEAD) ( - IN PVOID Context); - -typedef struct _CACHE_MANAGER_CALLBACKS { - PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite; - PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite; - PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead; - PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead; -} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS; - -typedef struct _CACHE_UNINITIALIZE_EVENT { - struct _CACHE_UNINITIALIZE_EVENT *Next; - KEVENT Event; -} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT; - -typedef VOID -(NTAPI *PDIRTY_PAGE_ROUTINE) ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN PLARGE_INTEGER OldestLsn, - IN PLARGE_INTEGER NewestLsn, - IN PVOID Context1, - IN PVOID Context2); - -typedef VOID -(NTAPI *PFLUSH_TO_LSN) ( - IN PVOID LogHandle, - IN LARGE_INTEGER Lsn); - -typedef VOID -(NTAPI *PCC_POST_DEFERRED_WRITE) ( - IN PVOID Context1, - IN PVOID Context2); - -#define CcIsFileCached(FO) ( \ - ((FO)->SectionObjectPointer != NULL) && \ - (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \ -) - -extern ULONG CcFastMdlReadWait; - -#if (NTDDI_VERSION >= NTDDI_WIN2K) - -NTKERNELAPI -VOID -NTAPI -CcInitializeCacheMap( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes, - IN BOOLEAN PinAccess, - IN PCACHE_MANAGER_CALLBACKS Callbacks, - IN PVOID LazyWriteContext); - -NTKERNELAPI -BOOLEAN -NTAPI -CcUninitializeCacheMap( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER TruncateSize OPTIONAL, - IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -CcSetFileSizes( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes); - -NTKERNELAPI -VOID -NTAPI -CcSetDirtyPageThreshold( - IN PFILE_OBJECT FileObject, - IN ULONG DirtyPageThreshold); - -NTKERNELAPI -VOID -NTAPI -CcFlushCache( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - OUT PIO_STATUS_BLOCK IoStatus OPTIONAL); - -NTKERNELAPI -LARGE_INTEGER -NTAPI -CcGetFlushedValidData( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN BOOLEAN BcbListHeld); - -NTKERNELAPI -BOOLEAN -NTAPI -CcZeroData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER StartOffset, - IN PLARGE_INTEGER EndOffset, - IN BOOLEAN Wait); - -NTKERNELAPI -PVOID -NTAPI -CcRemapBcb( - IN PVOID Bcb); - -NTKERNELAPI -VOID -NTAPI -CcRepinBcb( - IN PVOID Bcb); - -NTKERNELAPI -VOID -NTAPI -CcUnpinRepinnedBcb( - IN PVOID Bcb, - IN BOOLEAN WriteThrough, - OUT PIO_STATUS_BLOCK IoStatus); - -NTKERNELAPI -PFILE_OBJECT -NTAPI -CcGetFileObjectFromSectionPtrs( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer); - -NTKERNELAPI -PFILE_OBJECT -NTAPI -CcGetFileObjectFromBcb( - IN PVOID Bcb); - -NTKERNELAPI -BOOLEAN -NTAPI -CcCanIWrite( - IN PFILE_OBJECT FileObject, - IN ULONG BytesToWrite, - IN BOOLEAN Wait, - IN BOOLEAN Retrying); - -NTKERNELAPI -VOID -NTAPI -CcDeferWrite( - IN PFILE_OBJECT FileObject, - IN PCC_POST_DEFERRED_WRITE PostRoutine, - IN PVOID Context1, - IN PVOID Context2, - IN ULONG BytesToWrite, - IN BOOLEAN Retrying); - -NTKERNELAPI -BOOLEAN -NTAPI -CcCopyRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus); - -NTKERNELAPI -VOID -NTAPI -CcFastCopyRead( - IN PFILE_OBJECT FileObject, - IN ULONG FileOffset, - IN ULONG Length, - IN ULONG PageCount, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus); - -NTKERNELAPI -BOOLEAN -NTAPI -CcCopyWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN PVOID Buffer); - -NTKERNELAPI -VOID -NTAPI -CcFastCopyWrite( - IN PFILE_OBJECT FileObject, - IN ULONG FileOffset, - IN ULONG Length, - IN PVOID Buffer); - -NTKERNELAPI -VOID -NTAPI -CcMdlRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus); - -NTKERNELAPI -VOID -NTAPI -CcMdlReadComplete( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain); - -NTKERNELAPI -VOID -NTAPI -CcPrepareMdlWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus); - -NTKERNELAPI -VOID -NTAPI -CcMdlWriteComplete( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain); - -NTKERNELAPI -VOID -NTAPI -CcScheduleReadAhead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length); - -NTKERNELAPI -NTSTATUS -NTAPI -CcWaitForCurrentLazyWriterActivity( - VOID); - -NTKERNELAPI -VOID -NTAPI -CcSetReadAheadGranularity( - IN PFILE_OBJECT FileObject, - IN ULONG Granularity); - -NTKERNELAPI -BOOLEAN -NTAPI -CcPinRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); - -NTKERNELAPI -BOOLEAN -NTAPI -CcPinMappedData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - IN OUT PVOID *Bcb); - -NTKERNELAPI -BOOLEAN -NTAPI -CcPreparePinWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Zero, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); - -NTKERNELAPI -VOID -NTAPI -CcSetDirtyPinnedData( - IN PVOID BcbVoid, - IN PLARGE_INTEGER Lsn OPTIONAL); - -NTKERNELAPI -VOID -NTAPI -CcUnpinData( - IN PVOID Bcb); - -NTKERNELAPI -VOID -NTAPI -CcSetBcbOwnerPointer( - IN PVOID Bcb, - IN PVOID OwnerPointer); - -NTKERNELAPI -VOID -NTAPI -CcUnpinDataForThread( - IN PVOID Bcb, - IN ERESOURCE_THREAD ResourceThreadId); - -NTKERNELAPI -VOID -NTAPI -CcSetAdditionalCacheAttributes( - IN PFILE_OBJECT FileObject, - IN BOOLEAN DisableReadAhead, - IN BOOLEAN DisableWriteBehind); - -NTKERNELAPI -BOOLEAN -NTAPI -CcIsThereDirtyData( - IN PVPB Vpb); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -#if (NTDDI_VERSION >= NTDDI_WINXP) - -NTKERNELAPI -VOID -NTAPI -CcMdlWriteAbort( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain); - -NTKERNELAPI -VOID -NTAPI -CcSetLogHandleForFile( - IN PFILE_OBJECT FileObject, - IN PVOID LogHandle, - IN PFLUSH_TO_LSN FlushToLsnRoutine); - -NTKERNELAPI -LARGE_INTEGER -NTAPI -CcGetDirtyPages( - IN PVOID LogHandle, - IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, - IN PVOID Context1, - IN PVOID Context2); - -#endif - -#if (NTDDI_VERSION >= NTDDI_WINXP) -NTKERNELAPI -BOOLEAN -NTAPI -CcMapData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); -#elif (NTDDI_VERSION >= NTDDI_WIN2K) -NTKERNELAPI -BOOLEAN -NTAPI -CcMapData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID *Bcb, - OUT PVOID *Buffer); -#endif - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTKERNELAPI -NTSTATUS -NTAPI -CcSetFileSizesEx( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes); - -NTKERNELAPI -PFILE_OBJECT -NTAPI -CcGetFileObjectFromSectionPtrsRef( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer); - -NTKERNELAPI -VOID -NTAPI -CcSetParallelFlushFile( - IN PFILE_OBJECT FileObject, - IN BOOLEAN EnableParallelFlush); - -NTKERNELAPI -BOOLEAN -CcIsThereDirtyDataEx( - IN PVPB Vpb, - IN PULONG NumberOfDirtyPages OPTIONAL); - -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) -NTKERNELAPI -VOID -NTAPI -CcCoherencyFlushAndPurgeCache( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - OUT PIO_STATUS_BLOCK IoStatus, - IN ULONG Flags OPTIONAL); -#endif - -#define CcGetFileSizePointer(FO) ( \ - ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \ -) - -#define UNINITIALIZE_CACHE_MAPS (1) -#define DO_NOT_RETRY_PURGE (2) -#define DO_NOT_PURGE_DIRTY_PAGES (0x4) - -#define CC_FLUSH_AND_PURGE_NO_PURGE (0x1) - -#if (NTDDI_VERSION >= NTDDI_VISTA) -NTKERNELAPI -BOOLEAN -NTAPI -CcPurgeCacheSection( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - IN ULONG Flags); -#elif (NTDDI_VERSION >= NTDDI_WIN2K) -NTKERNELAPI -BOOLEAN -NTAPI -CcPurgeCacheSection( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - IN BOOLEAN UninitializeCacheMaps); -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) -NTKERNELAPI -BOOLEAN -NTAPI -CcCopyWriteWontFlush( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length); -#else -#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000) -#endif - -#define CcReadAhead(FO, FOFF, LEN) ( \ - if ((LEN) >= 256) { \ - CcScheduleReadAhead((FO), (FOFF), (LEN)); \ - } \ -) - -#define PIN_WAIT (1) -#define PIN_EXCLUSIVE (2) -#define PIN_NO_READ (4) -#define PIN_IF_BCB (8) -#define PIN_CALLER_TRACKS_DIRTY_DATA (32) -#define PIN_HIGH_PRIORITY (64) - -#define MAP_WAIT 1 -#define MAP_NO_READ (16) -#define MAP_HIGH_PRIORITY (64) - -#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS) -#define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS) - -typedef struct _QUERY_PATH_REQUEST { - ULONG PathNameLength; - PIO_SECURITY_CONTEXT SecurityContext; - WCHAR FilePathName[1]; -} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST; - -typedef struct _QUERY_PATH_REQUEST_EX { - PIO_SECURITY_CONTEXT pSecurityContext; - ULONG EaLength; - PVOID pEaBuffer; - UNICODE_STRING PathName; - UNICODE_STRING DomainServiceName; - ULONG_PTR Reserved[ 3 ]; -} QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX; - -typedef struct _QUERY_PATH_RESPONSE { - ULONG LengthAccepted; -} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE; - -#define VOLSNAPCONTROLTYPE 0x00000053 -#define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) - -#if (NTDDI_VERSION >= NTDDI_WIN2K) - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryObject( - IN HANDLE Handle OPTIONAL, - IN OBJECT_INFORMATION_CLASS ObjectInformationClass, - OUT PVOID ObjectInformation OPTIONAL, - IN ULONG ObjectInformationLength, - OUT PULONG ReturnLength OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -ZwNotifyChangeKey( - IN HANDLE KeyHandle, - IN HANDLE EventHandle OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG NotifyFilter, - IN BOOLEAN WatchSubtree, - OUT PVOID Buffer, - IN ULONG BufferLength, - IN BOOLEAN Asynchronous); - -NTSYSAPI -NTSTATUS -NTAPI -ZwCreateEvent( - OUT PHANDLE EventHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN EVENT_TYPE EventType, - IN BOOLEAN InitialState); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDeleteFile( - IN POBJECT_ATTRIBUTES ObjectAttributes); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryDirectoryFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass, - IN BOOLEAN ReturnSingleEntry, - IN PUNICODE_STRING FileName OPTIONAL, - IN BOOLEAN RestartScan); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); - -NTSYSAPI -NTSTATUS -NTAPI -ZwFsControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG FsControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDuplicateObject( - IN HANDLE SourceProcessHandle, - IN HANDLE SourceHandle, - IN HANDLE TargetProcessHandle OPTIONAL, - OUT PHANDLE TargetHandle OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN ULONG HandleAttributes, - IN ULONG Options); - -NTSYSAPI -NTSTATUS -NTAPI -ZwOpenDirectoryObject( - OUT PHANDLE DirectoryHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); - -NTSYSAPI -NTSTATUS -NTAPI -ZwAllocateVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN ULONG_PTR ZeroBits, - IN OUT PSIZE_T RegionSize, - IN ULONG AllocationType, - IN ULONG Protect); - -NTSYSAPI -NTSTATUS -NTAPI -ZwFreeVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN OUT PSIZE_T RegionSize, - IN ULONG FreeType); - -NTSYSAPI -NTSTATUS -NTAPI -ZwWaitForSingleObject( - IN HANDLE Handle, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetEvent( - IN HANDLE EventHandle, - OUT PLONG PreviousState OPTIONAL); - -NTSYSAPI -NTSTATUS -NTAPI -ZwFlushVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN OUT PSIZE_T RegionSize, - OUT PIO_STATUS_BLOCK IoStatusBlock); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - OUT PVOID TokenInformation, - IN ULONG Length, - OUT PULONG ResultLength); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetSecurityObject( - IN HANDLE Handle, - IN SECURITY_INFORMATION SecurityInformation, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQuerySecurityObject( - IN HANDLE FileHandle, - IN SECURITY_INFORMATION SecurityInformation, - OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ULONG Length, - OUT PULONG ResultLength); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -#if (NTDDI_VERSION >= NTDDI_WINXP) - -NTSYSAPI -NTSTATUS -NTAPI -ZwOpenProcessTokenEx( - IN HANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); - -NTSYSAPI -NTSTATUS -NTAPI -ZwOpenThreadTokenEx( - IN HANDLE ThreadHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN OpenAsSelf, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); - -#endif - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTSYSAPI -NTSTATUS -NTAPI -ZwLockFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key, - IN BOOLEAN FailImmediately, - IN BOOLEAN ExclusiveLock); - -NTSYSAPI -NTSTATUS -NTAPI -ZwUnlockFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key); - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN BOOLEAN ReturnSingleEntry, - IN PVOID SidList, - IN ULONG SidListLength, - IN PSID StartSid OPTIONAL, - IN BOOLEAN RestartScan); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length); - -NTSYSAPI -NTSTATUS -NTAPI -ZwFlushBuffersFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) -NTSYSAPI -NTSTATUS -NTAPI -ZwSetInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - IN PVOID TokenInformation, - IN ULONG TokenInformationLength); -#endif - -NTSYSAPI -NTSTATUS -NTAPI -ZwQueryEaFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN BOOLEAN ReturnSingleEntry, - IN PVOID EaList OPTIONAL, - IN ULONG EaListLength, - IN PULONG EaIndex OPTIONAL, - IN BOOLEAN RestartScan); - -NTSYSAPI -NTSTATUS -NTAPI -ZwSetEaFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length); - -NTSYSAPI -NTSTATUS -NTAPI -ZwDuplicateToken( - IN HANDLE ExistingTokenHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN BOOLEAN EffectiveOnly, - IN TOKEN_TYPE TokenType, - OUT PHANDLE NewTokenHandle); #pragma pack(push,4) @@ -8890,6 +6863,11 @@ ZwDuplicateToken( #include "csq.h" +#ifdef _NTOSKRNL_ +extern PUCHAR FsRtlLegalAnsiCharacterArray; +#else +extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray; +#endif extern PACL SePublicDefaultDacl; extern PACL SeSystemDefaultDacl; @@ -8912,11 +6890,30 @@ extern PACL SeSystemDefaultDacl; #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004 +#define FSRTL_VOLUME_DISMOUNT 1 +#define FSRTL_VOLUME_DISMOUNT_FAILED 2 +#define FSRTL_VOLUME_LOCK 3 +#define FSRTL_VOLUME_LOCK_FAILED 4 +#define FSRTL_VOLUME_UNLOCK 5 +#define FSRTL_VOLUME_MOUNT 6 + +#define FSRTL_WILD_CHARACTER 0x08 + +#define FSRTL_FAT_LEGAL 0x01 +#define FSRTL_HPFS_LEGAL 0x02 +#define FSRTL_NTFS_LEGAL 0x04 +#define FSRTL_WILD_CHARACTER 0x08 +#define FSRTL_OLE_LEGAL 0x10 +#define FSRTL_NTFS_STREAM_LEGAL 0x14 + #ifdef _X86_ #define HARDWARE_PTE HARDWARE_PTE_X86 #define PHARDWARE_PTE PHARDWARE_PTE_X86 #endif +#define IO_CHECK_CREATE_PARAMETERS 0x0200 +#define IO_ATTACH_DEVICE 0x0400 + #define IO_ATTACH_DEVICE_API 0x80000000 #define IO_TYPE_APC 18 @@ -8935,6 +6932,8 @@ extern PACL SeSystemDefaultDacl; #define MEM_DOS_LIM 0x40000000 +#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1 + #define OB_TYPE_TYPE 1 #define OB_TYPE_DIRECTORY 2 #define OB_TYPE_SYMBOLIC_LINK 3 @@ -8959,12 +6958,23 @@ extern PACL SeSystemDefaultDacl; #define OB_TYPE_IO_COMPLETION 22 #define OB_TYPE_FILE 23 +#define PIN_WAIT (1) +#define PIN_EXCLUSIVE (2) +#define PIN_NO_READ (4) +#define PIN_IF_BCB (8) + #define SEC_BASED 0x00200000 +#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} +#define SECURITY_WORLD_RID (0x00000000L) + /* end winnt.h */ #define TOKEN_HAS_ADMIN_GROUP 0x08 +#define VACB_MAPPING_GRANULARITY (0x40000) +#define VACB_OFFSET_SHIFT (18) + #if (VER_PRODUCTBUILD >= 1381) #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS) #endif /* (VER_PRODUCTBUILD >= 1381) */ @@ -8991,6 +7001,18 @@ extern PACL SeSystemDefaultDacl; #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS) + +typedef PVOID OPLOCK, *POPLOCK; + +// +// Forwarders +// +struct _RTL_AVL_TABLE; +struct _RTL_GENERIC_TABLE; + +typedef PVOID PNOTIFY_SYNC; + typedef enum _FILE_STORAGE_TYPE { StorageTypeDefault = 1, StorageTypeDirectory, @@ -9026,6 +7048,17 @@ typedef struct _BITMAP_RANGE { PULONG Bitmap; } BITMAP_RANGE, *PBITMAP_RANGE; +typedef struct _CACHE_UNINITIALIZE_EVENT { + struct _CACHE_UNINITIALIZE_EVENT *Next; + KEVENT Event; +} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT; + +typedef struct _CC_FILE_SIZES { + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; +} CC_FILE_SIZES, *PCC_FILE_SIZES; + typedef struct _FILE_COPY_ON_WRITE_INFORMATION { BOOLEAN ReplaceIfExists; HANDLE RootDirectory; @@ -9048,6 +7081,49 @@ typedef struct _FILE_FULL_DIRECTORY_INFORMATION { WCHAR FileName[ANYSIZE_ARRAY]; } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_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_LABEL_INFORMATION { + ULONG VolumeLabelLength; + WCHAR VolumeLabel[1]; +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; + +#if (VER_PRODUCTBUILD >= 2195) + +typedef struct _FILE_FS_OBJECT_ID_INFORMATION { + UCHAR ObjectId[16]; + UCHAR ExtendedInfo[48]; +} FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION; + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +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_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_OBJECTID_INFORMATION +{ + UCHAR ObjectId[16]; + UCHAR ExtendedInfo[48]; +} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; + /* raw internal file lock struct returned from FsRtlGetNextFileLock */ typedef struct _FILE_SHARED_LOCK_ENTRY { PVOID Unknown1; @@ -9132,6 +7208,51 @@ typedef struct _FILE_OLE_STATE_BITS_INFORMATION { ULONG StateBitsMask; } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION; +typedef enum _FSRTL_COMPARISON_RESULT +{ + LessThan = -1, + EqualTo = 0, + GreaterThan = 1 +} FSRTL_COMPARISON_RESULT; + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _FSRTL_PER_STREAM_CONTEXT { + LIST_ENTRY Links; + PVOID OwnerId; + PVOID InstanceId; + PFREE_FUNCTION FreeCallback; +} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT; + +typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT +{ + LIST_ENTRY Links; + PVOID OwnerId; + PVOID InstanceId; +} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT; + +#endif /* (VER_PRODUCTBUILD >= 2600) */ + +typedef struct _BASE_MCB +{ + ULONG MaximumPairCount; + ULONG PairCount; + USHORT PoolType; + USHORT Flags; + PVOID Mapping; +} BASE_MCB, *PBASE_MCB; + +typedef struct _LARGE_MCB +{ + PKGUARDED_MUTEX GuardedMutex; + BASE_MCB BaseMcb; +} LARGE_MCB, *PLARGE_MCB; + +typedef struct _MCB +{ + LARGE_MCB DummyFieldThatSizesThisStructureCorrectly; +} MCB, *PMCB; + typedef struct _MAPPING_PAIR { ULONGLONG Vcn; ULONGLONG Lcn; @@ -9143,6 +7264,8 @@ typedef struct _GET_RETRIEVAL_DESCRIPTOR { MAPPING_PAIR Pair[1]; } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR; +#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject); + typedef struct _MBCB { CSHORT NodeTypeCode; CSHORT NodeIsInZone; @@ -9205,6 +7328,189 @@ typedef struct _OBJECT_ALL_TYPES_INFO { OBJECT_TYPE_INFO ObjectsTypeInfo[1]; } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO; +typedef enum _RTL_GENERIC_COMPARE_RESULTS +{ + GenericLessThan, + GenericGreaterThan, + GenericEqual +} RTL_GENERIC_COMPARE_RESULTS; + +typedef enum _TABLE_SEARCH_RESULT +{ + TableEmptyTree, + TableFoundNode, + TableInsertAsLeft, + TableInsertAsRight +} TABLE_SEARCH_RESULT; + +typedef NTSTATUS +(NTAPI *PRTL_AVL_MATCH_FUNCTION)( + struct _RTL_AVL_TABLE *Table, + PVOID UserData, + PVOID MatchData +); + +typedef RTL_GENERIC_COMPARE_RESULTS +(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + PVOID FirstStruct, + PVOID SecondStruct +); + +typedef RTL_GENERIC_COMPARE_RESULTS +(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID FirstStruct, + PVOID SecondStruct +); + +typedef PVOID +(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + CLONG ByteSize +); + +typedef VOID +(NTAPI *PRTL_GENERIC_FREE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID Buffer +); + +typedef PVOID +(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + CLONG ByteSize +); + +typedef VOID +(NTAPI *PRTL_AVL_FREE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + PVOID Buffer +); + +typedef struct _PUBLIC_BCB { + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + ULONG MappedLength; + LARGE_INTEGER MappedFileOffset; +} PUBLIC_BCB, *PPUBLIC_BCB; + +typedef struct _QUERY_PATH_REQUEST { + ULONG PathNameLength; + PIO_SECURITY_CONTEXT SecurityContext; + WCHAR FilePathName[1]; +} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST; + +typedef struct _QUERY_PATH_RESPONSE { + ULONG LengthAccepted; +} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE; + +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_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; + +#undef PRTL_GENERIC_COMPARE_ROUTINE +#undef PRTL_GENERIC_ALLOCATE_ROUTINE +#undef PRTL_GENERIC_FREE_ROUTINE +#undef RTL_GENERIC_TABLE +#undef PRTL_GENERIC_TABLE + +#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE +#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE +#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE +#define RTL_GENERIC_TABLE RTL_AVL_TABLE +#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE + +#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 + +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; + +NTSYSAPI +VOID +NTAPI +RtlInitializeGenericTableAvl( + PRTL_AVL_TABLE Table, + PRTL_AVL_COMPARE_ROUTINE CompareRoutine, + PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, + PRTL_AVL_FREE_ROUTINE FreeRoutine, + PVOID TableContext +); + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer, + CLONG BufferSize, + PBOOLEAN NewElement OPTIONAL + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlDeleteElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer + ); + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer + ); + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableWithoutSplayingAvl ( + PRTL_AVL_TABLE Table, + PVOID *RestartKey + ); + #if defined(USE_LPC6432) #define LPC_CLIENT_ID CLIENT_ID64 #define LPC_SIZE_T ULONGLONG @@ -9269,6 +7575,13 @@ typedef struct _REMOTE_PORT_VIEW LPC_PVOID ViewBase; } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW; +typedef struct _TUNNEL { + FAST_MUTEX Mutex; + PRTL_SPLAY_LINKS Cache; + LIST_ENTRY TimerQueue; + USHORT NumEntries; +} TUNNEL, *PTUNNEL; + typedef struct _VAD_HEADER { PVOID StartVPN; PVOID EndVPN; @@ -9283,6 +7596,150 @@ typedef struct _VAD_HEADER { LIST_ENTRY Secured; } VAD_HEADER, *PVAD_HEADER; +#if (VER_PRODUCTBUILD >= 2600) + +typedef BOOLEAN +(NTAPI *PFILTER_REPORT_CHANGE) ( + IN PVOID NotifyContext, + IN PVOID FilterContext +); + +#endif + +NTKERNELAPI +BOOLEAN +NTAPI +CcCanIWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG BytesToWrite, + IN BOOLEAN Wait, + IN BOOLEAN Retrying +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcCopyRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN PVOID Buffer +); + +#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000) + +typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) ( + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +VOID +NTAPI +CcDeferWrite ( + IN PFILE_OBJECT FileObject, + IN PCC_POST_DEFERRED_WRITE PostRoutine, + IN PVOID Context1, + IN PVOID Context2, + IN ULONG BytesToWrite, + IN BOOLEAN Retrying +); + +NTKERNELAPI +VOID +NTAPI +CcFastCopyRead ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN ULONG PageCount, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +VOID +NTAPI +CcFastCopyWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN PVOID Buffer +); + +NTKERNELAPI +VOID +NTAPI +CcFlushCache ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + OUT PIO_STATUS_BLOCK IoStatus OPTIONAL +); + +typedef VOID (NTAPI *PDIRTY_PAGE_ROUTINE) ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN PLARGE_INTEGER OldestLsn, + IN PLARGE_INTEGER NewestLsn, + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +LARGE_INTEGER +NTAPI +CcGetDirtyPages ( + IN PVOID LogHandle, + IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +PFILE_OBJECT +NTAPI +CcGetFileObjectFromBcb ( + IN PVOID Bcb +); + +NTKERNELAPI +PFILE_OBJECT +NTAPI +CcGetFileObjectFromSectionPtrs ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer +); + +#define CcGetFileSizePointer(FO) ( \ + ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \ +) + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +LARGE_INTEGER +NTAPI +CcGetFlushedValidData ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN BcbListHeld +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + NTKERNELAPI LARGE_INTEGER NTAPI @@ -9291,6 +7748,428 @@ CcGetLsnForFileObject ( OUT PLARGE_INTEGER OldestLsn OPTIONAL ); +typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) ( + IN PVOID Context, + IN BOOLEAN Wait +); + +typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) ( + IN PVOID Context +); + +typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) ( + IN PVOID Context, + IN BOOLEAN Wait +); + +typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) ( + IN PVOID Context +); + +typedef struct _CACHE_MANAGER_CALLBACKS { + PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite; + PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite; + PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead; + PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead; +} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS; + +NTKERNELAPI +VOID +NTAPI +CcInitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes, + IN BOOLEAN PinAccess, + IN PCACHE_MANAGER_CALLBACKS Callbacks, + IN PVOID LazyWriteContext +); + +#define CcIsFileCached(FO) ( \ + ((FO)->SectionObjectPointer != NULL) && \ + (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \ +) + +extern ULONG CcFastMdlReadWait; + +NTKERNELAPI +BOOLEAN +NTAPI +CcIsThereDirtyData ( + IN PVPB Vpb +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcMapData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +VOID +NTAPI +CcMdlRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +VOID +NTAPI +CcMdlReadComplete ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain +); + +NTKERNELAPI +VOID +NTAPI +CcMdlWriteComplete ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain +); + +#define MAP_WAIT 1 + +NTKERNELAPI +BOOLEAN +NTAPI +CcPinMappedData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + IN OUT PVOID *Bcb +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcPinRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +VOID +NTAPI +CcPrepareMdlWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcPreparePinWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Zero, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcPurgeCacheSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + IN BOOLEAN UninitializeCacheMaps +); + +#define CcReadAhead(FO, FOFF, LEN) ( \ + if ((LEN) >= 256) { \ + CcScheduleReadAhead((FO), (FOFF), (LEN)); \ + } \ +) + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PVOID +NTAPI +CcRemapBcb ( + IN PVOID Bcb +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +NTKERNELAPI +VOID +NTAPI +CcRepinBcb ( + IN PVOID Bcb +); + +NTKERNELAPI +VOID +NTAPI +CcScheduleReadAhead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length +); + +NTKERNELAPI +VOID +NTAPI +CcSetAdditionalCacheAttributes ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN DisableReadAhead, + IN BOOLEAN DisableWriteBehind +); + +NTKERNELAPI +VOID +NTAPI +CcSetBcbOwnerPointer ( + IN PVOID Bcb, + IN PVOID OwnerPointer +); + +NTKERNELAPI +VOID +NTAPI +CcSetDirtyPageThreshold ( + IN PFILE_OBJECT FileObject, + IN ULONG DirtyPageThreshold +); + +NTKERNELAPI +VOID +NTAPI +CcSetDirtyPinnedData ( + IN PVOID BcbVoid, + IN PLARGE_INTEGER Lsn OPTIONAL +); + +NTKERNELAPI +VOID +NTAPI +CcSetFileSizes ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes +); + +typedef VOID (NTAPI *PFLUSH_TO_LSN) ( + IN PVOID LogHandle, + IN LARGE_INTEGER Lsn +); + +NTKERNELAPI +VOID +NTAPI +CcSetLogHandleForFile ( + IN PFILE_OBJECT FileObject, + IN PVOID LogHandle, + IN PFLUSH_TO_LSN FlushToLsnRoutine +); + +NTKERNELAPI +VOID +NTAPI +CcSetReadAheadGranularity ( + IN PFILE_OBJECT FileObject, + IN ULONG Granularity /* default: PAGE_SIZE */ + /* allowed: 2^n * PAGE_SIZE */ +); + +NTKERNELAPI +BOOLEAN +NTAPI +CcUninitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER TruncateSize OPTIONAL, + IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL +); + +NTKERNELAPI +VOID +NTAPI +CcUnpinData ( + IN PVOID Bcb +); + +NTKERNELAPI +VOID +NTAPI +CcUnpinDataForThread ( + IN PVOID Bcb, + IN ERESOURCE_THREAD ResourceThreadId +); + +NTKERNELAPI +VOID +NTAPI +CcUnpinRepinnedBcb ( + IN PVOID Bcb, + IN BOOLEAN WriteThrough, + OUT PIO_STATUS_BLOCK IoStatus +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +NTAPI +CcWaitForCurrentLazyWriterActivity ( + VOID +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +NTKERNELAPI +BOOLEAN +NTAPI +CcZeroData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER StartOffset, + IN PLARGE_INTEGER EndOffset, + IN BOOLEAN Wait +); + +#if (VER_PRODUCTBUILD >= 2600) + +#ifndef __NTOSKRNL__ +NTKERNELAPI +VOID +FASTCALL +ExInitializeRundownProtection ( + IN PEX_RUNDOWN_REF RunRef +); + +NTKERNELAPI +VOID +FASTCALL +ExReInitializeRundownProtection ( + IN PEX_RUNDOWN_REF RunRef +); + +NTKERNELAPI +BOOLEAN +FASTCALL +ExAcquireRundownProtection ( + IN PEX_RUNDOWN_REF RunRef +); + +NTKERNELAPI +BOOLEAN +FASTCALL +ExAcquireRundownProtectionEx ( + IN PEX_RUNDOWN_REF RunRef, + IN ULONG Count +); + +NTKERNELAPI +VOID +FASTCALL +ExReleaseRundownProtection ( + IN PEX_RUNDOWN_REF RunRef +); + +NTKERNELAPI +VOID +FASTCALL +ExReleaseRundownProtectionEx ( + IN PEX_RUNDOWN_REF RunRef, + IN ULONG Count +); + +NTKERNELAPI +VOID +FASTCALL +ExRundownCompleted ( + IN PEX_RUNDOWN_REF RunRef +); + +NTKERNELAPI +VOID +FASTCALL +ExWaitForRundownProtectionRelease ( + IN PEX_RUNDOWN_REF RunRef +); + +#endif +#endif /* (VER_PRODUCTBUILD >= 2600) */ + + +#define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \ +{ \ + SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \ + SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \ + (_advhdr)->Version = FSRTL_FCB_HEADER_V1; \ + InitializeListHead( &(_advhdr)->FilterContexts ); \ + if ((_fmutx) != NULL) { \ + (_advhdr)->FastMutex = (_fmutx); \ + } \ + *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0; \ + /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\ + (_advhdr)->FileContextSupportPointer = NULL; \ +} + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlAddBaseMcbEntry ( + IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Lbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlAddLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Lbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlAddMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN LBN Lbn, + IN ULONG SectorCount +); + +NTKERNELAPI +VOID +NTAPI +FsRtlAddToTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey, + IN PUNICODE_STRING ShortName, + IN PUNICODE_STRING LongName, + IN BOOLEAN KeyByShortName, + IN ULONG DataLength, + IN PVOID Data +); + NTKERNELAPI PVOID NTAPI @@ -9325,6 +8204,251 @@ FsRtlAllocatePoolWithTag ( IN ULONG Tag ); +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlAreNamesEqual ( + IN PCUNICODE_STRING Name1, + IN PCUNICODE_STRING Name2, + IN BOOLEAN IgnoreCase, + IN PCWCH UpcaseTable OPTIONAL +); + +#define FsRtlAreThereCurrentFileLocks(FL) ( \ + ((FL)->FastIoIsQuestionable) \ +) + +typedef +VOID +(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) ( + IN PVOID Context, + IN PIRP Irp +); + +typedef +VOID +(NTAPI*POPLOCK_FS_PREPOST_IRP) ( + IN PVOID Context, + IN PIRP Irp +); + +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlCheckOplock ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN PVOID Context, + IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, + IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlCurrentBatchOplock ( + IN POPLOCK Oplock +); + +NTKERNELAPI +VOID +NTAPI +FsRtlDeleteKeyFromTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey +); + +NTKERNELAPI +VOID +NTAPI +FsRtlDeleteTunnelCache ( + IN PTUNNEL Cache +); + +NTKERNELAPI +VOID +NTAPI +FsRtlDeregisterUncProvider ( + IN HANDLE Handle +); + +NTKERNELAPI +VOID +NTAPI +FsRtlDissectDbcs ( + IN ANSI_STRING Name, + OUT PANSI_STRING FirstPart, + OUT PANSI_STRING RemainingPart +); + +NTKERNELAPI +VOID +NTAPI +FsRtlDissectName ( + IN UNICODE_STRING Name, + OUT PUNICODE_STRING FirstPart, + OUT PUNICODE_STRING RemainingPart +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlDoesDbcsContainWildCards ( + IN PANSI_STRING Name +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlDoesNameContainWildCards ( + IN PUNICODE_STRING Name +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsFatDbcsLegal ( + IN ANSI_STRING DbcsName, + IN BOOLEAN WildCardsPermissible, + IN BOOLEAN PathNamePermissible, + IN BOOLEAN LeadingBackslashPermissible + ); + + +#define FsRtlCompleteRequest(IRP,STATUS) { \ + (IRP)->IoStatus.Status = (STATUS); \ + IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \ +} + +#define FsRtlEnterFileSystem KeEnterCriticalRegion + +#define FsRtlExitFileSystem KeLeaveCriticalRegion + +#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \ + FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \ +) + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlFindInTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey, + IN PUNICODE_STRING Name, + OUT PUNICODE_STRING ShortName, + OUT PUNICODE_STRING LongName, + IN OUT PULONG DataLength, + OUT PVOID Data +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlGetNextBaseMcbEntry ( + IN PBASE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlGetNextLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlGetNextMcbEntry ( + IN PMCB Mcb, + IN ULONG RunIndex, + OUT PVBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount +); + +#define FsRtlGetPerStreamContextPointer(FO) ( \ + (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \ +) + +NTKERNELAPI +VOID +NTAPI +FsRtlInitializeBaseMcb ( + IN PBASE_MCB Mcb, + IN POOL_TYPE PoolType +); + +NTKERNELAPI +VOID +NTAPI +FsRtlInitializeLargeMcb ( + IN PLARGE_MCB Mcb, + IN POOL_TYPE PoolType +); + +NTKERNELAPI +VOID +NTAPI +FsRtlInitializeMcb ( + IN PMCB Mcb, + IN POOL_TYPE PoolType +); + +NTKERNELAPI +VOID +NTAPI +FsRtlInitializeOplock ( + IN OUT POPLOCK Oplock +); + +NTKERNELAPI +VOID +NTAPI +FsRtlInitializeTunnelCache ( + IN PTUNNEL Cache +); + +#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \ + (PSC)->OwnerId = (O), \ + (PSC)->InstanceId = (I), \ + (PSC)->FreeCallback = (FC) \ +) + +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlInsertPerStreamContext ( + IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext, + IN PFSRTL_PER_STREAM_CONTEXT Ptr +); + +#define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \ + FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \ + ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ +) + +#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \ + FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \ + ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ +) + +#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \ + FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \ + ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \ +) + +#define FsRtlIsAnsiCharacterWild(C) ( \ + FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \ +) + NTKERNELAPI BOOLEAN NTAPI @@ -9335,6 +8459,142 @@ FsRtlIsFatDbcsLegal ( IN BOOLEAN LeadingBackslashPermissible ); +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsHpfsDbcsLegal ( + IN ANSI_STRING DbcsName, + IN BOOLEAN WildCardsPermissible, + IN BOOLEAN PathNamePermissible, + IN BOOLEAN LeadingBackslashPermissible +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsNameInExpression ( + IN PUNICODE_STRING Expression, + IN PUNICODE_STRING Name, + IN BOOLEAN IgnoreCase, + IN PWCHAR UpcaseTable OPTIONAL +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlIsNtstatusExpected ( + IN NTSTATUS Ntstatus +); + +#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo + +extern PUSHORT NlsOemLeadByteInfo; + +#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \ + (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \ + (NLS_MB_CODE_PAGE_TAG && \ + (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \ +) + +#define FsRtlIsUnicodeCharacterWild(C) ( \ + (((C) >= 0x40) ? \ + FALSE : \ + FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \ +) + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupBaseMcbEntry ( + IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLastBaseMcbEntry ( + IN PBASE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntry ( + IN PLARGE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLastMcbEntry ( + IN PMCB Mcb, + OUT PVBN Vbn, + OUT PLBN Lbn +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLastBaseMcbEntryAndIndex ( + IN PBASE_MCB OpaqueMcb, + IN OUT PLONGLONG LargeVbn, + IN OUT PLONGLONG LargeLbn, + IN OUT PULONG Index +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntryAndIndex ( + IN PLARGE_MCB OpaqueMcb, + OUT PLONGLONG LargeVbn, + OUT PLONGLONG LargeLbn, + OUT PULONG Index +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlLookupMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount OPTIONAL, + OUT PULONG Index +); + +NTKERNELAPI +PFSRTL_PER_STREAM_CONTEXT +NTAPI +FsRtlLookupPerStreamContextInternal ( + IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, + IN PVOID OwnerId OPTIONAL, + IN PVOID InstanceId OPTIONAL +); + NTKERNELAPI BOOLEAN NTAPI @@ -9352,6 +8612,14 @@ FsRtlMdlWriteComplete ( IN PMDL MdlChain ); +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlNormalizeNtstatus ( + IN NTSTATUS Exception, + IN NTSTATUS GenericException +); + NTKERNELAPI VOID NTAPI @@ -9365,6 +8633,315 @@ FsRtlNotifyChangeDirectory ( IN PIRP NotifyIrp ); +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyCleanup ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext +); + +typedef BOOLEAN (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) ( + IN PVOID NotifyContext, + IN PVOID TargetContext, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyFilterChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL, + IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyFilterReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext, + IN PVOID FilterContext); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyFullChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL +); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyFullReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext +); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyInitializeSync ( + IN PNOTIFY_SYNC *NotifySync +); + +NTKERNELAPI +VOID +NTAPI +FsRtlNotifyUninitializeSync ( + IN PNOTIFY_SYNC *NotifySync +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlNotifyVolumeEvent ( + IN PFILE_OBJECT FileObject, + IN ULONG EventCode +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +NTKERNELAPI +ULONG +NTAPI +FsRtlNumberOfRunsInBaseMcb ( + IN PBASE_MCB Mcb +); + +NTKERNELAPI +ULONG +NTAPI +FsRtlNumberOfRunsInLargeMcb ( + IN PLARGE_MCB Mcb +); + +NTKERNELAPI +ULONG +NTAPI +FsRtlNumberOfRunsInMcb ( + IN PMCB Mcb +); + +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlOplockFsctrl ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN ULONG OpenCount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlOplockIsFastIoPossible ( + IN POPLOCK Oplock +); + +typedef VOID +(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) ( + IN PVOID Context, + IN PKEVENT Event +); + +NTKERNELAPI +VOID +NTAPI +FsRtlPostPagingFileStackOverflow ( + IN PVOID Context, + IN PKEVENT Event, + IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine +); + +NTKERNELAPI +VOID +NTAPI +FsRtlPostStackOverflow ( + IN PVOID Context, + IN PKEVENT Event, + IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine +); + +NTKERNELAPI +NTSTATUS +NTAPI +FsRtlRegisterUncProvider ( + IN OUT PHANDLE MupHandle, + IN PUNICODE_STRING RedirectorDeviceName, + IN BOOLEAN MailslotsSupported +); + +NTKERNELAPI +VOID +NTAPI +FsRtlRemoveBaseMcbEntry ( + IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +VOID +NTAPI +FsRtlRemoveLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +VOID +NTAPI +FsRtlRemoveMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN ULONG SectorCount +); + +NTKERNELAPI +PFSRTL_PER_STREAM_CONTEXT +NTAPI +FsRtlRemovePerStreamContext ( + IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, + IN PVOID OwnerId OPTIONAL, + IN PVOID InstanceId OPTIONAL +); + +NTKERNELAPI +VOID +NTAPI +FsRtlResetBaseMcb ( + IN PBASE_MCB Mcb +); + +NTKERNELAPI +VOID +NTAPI +FsRtlResetLargeMcb ( + IN PLARGE_MCB Mcb, + IN BOOLEAN SelfSynchronized +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlSplitBaseMcb ( + IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount +); + +NTKERNELAPI +BOOLEAN +NTAPI +FsRtlSplitLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount +); + +#define FsRtlSupportsPerStreamContexts(FO) ( \ + (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \ + FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \ + FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \ +) + +NTKERNELAPI +VOID +NTAPI +FsRtlTruncateBaseMcb ( + IN PBASE_MCB Mcb, + IN LONGLONG Vbn +); + +NTKERNELAPI +VOID +NTAPI +FsRtlTruncateLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn +); + +NTKERNELAPI +VOID +NTAPI +FsRtlTruncateMcb ( + IN PMCB Mcb, + IN VBN Vbn +); + +NTKERNELAPI +VOID +NTAPI +FsRtlUninitializeBaseMcb ( + IN PBASE_MCB Mcb +); + +NTKERNELAPI +VOID +NTAPI +FsRtlUninitializeLargeMcb ( + IN PLARGE_MCB Mcb +); + +NTKERNELAPI +VOID +NTAPI +FsRtlUninitializeMcb ( + IN PMCB Mcb +); + +NTKERNELAPI +VOID +NTAPI +FsRtlUninitializeOplock ( + IN OUT POPLOCK Oplock +); + +NTKERNELAPI +NTSTATUS +NTAPI +IoAttachDeviceToDeviceStackSafe( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice, + OUT PDEVICE_OBJECT *AttachedToDeviceObject +); + NTKERNELAPI NTSTATUS NTAPI @@ -9401,6 +8978,23 @@ ObReferenceObjectByName ( OUT PVOID *Object ); +#if (NTDDI_VERSION >= NTDDI_WIN2K) + +NTKERNELAPI +NTSTATUS +NTAPI +PsAssignImpersonationToken( + IN PETHREAD Thread, + IN HANDLE Token OPTIONAL); + +NTKERNELAPI +HANDLE +NTAPI +PsReferencePrimaryToken( + IN OUT PEPROCESS Process); + +#endif + #define PsDereferenceImpersonationToken(T) \ {if (ARGUMENT_PRESENT(T)) { \ (ObDereferenceObject((T))); \ @@ -9418,6 +9012,14 @@ PsLookupProcessThreadByCid ( OUT PETHREAD *Thread ); +NTSYSAPI +VOID +NTAPI +RtlSecondsSince1970ToTime ( + IN ULONG SecondsSince1970, + OUT PLARGE_INTEGER Time +); + NTSYSAPI NTSTATUS NTAPI @@ -9428,6 +9030,105 @@ RtlSetSaclSecurityDescriptor ( IN BOOLEAN SaclDefaulted ); +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToCountedOemString ( + IN OUT POEM_STRING DestinationString, + IN PCUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString +); + +/* RTL Splay Tree Functions */ +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSplay(PRTL_SPLAY_LINKS Links); + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlDelete(PRTL_SPLAY_LINKS Links); + +NTSYSAPI +VOID +NTAPI +RtlDeleteNoSplay( + PRTL_SPLAY_LINKS Links, + PRTL_SPLAY_LINKS *Root +); + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links); + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links); + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlRealSuccessor(PRTL_SPLAY_LINKS Links); + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlRealPredecessor(PRTL_SPLAY_LINKS Links); + +#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 RtlInitializeSplayLinks(Links) \ + { \ + PRTL_SPLAY_LINKS _SplayLinks; \ + _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ + _SplayLinks->Parent = _SplayLinks; \ + _SplayLinks->LeftChild = NULL; \ + _SplayLinks->RightChild = NULL; \ + } + +#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; \ + } + +// +// RTL time functions +// + #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports; #if (VER_PRODUCTBUILD >= 2195) @@ -9453,6 +9154,18 @@ ZwAlertThread ( IN HANDLE ThreadHandle ); +NTSYSAPI +NTSTATUS +NTAPI +ZwAllocateVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG_PTR ZeroBits, + IN OUT PSIZE_T RegionSize, + IN ULONG AllocationType, + IN ULONG Protect +); + NTSYSAPI NTSTATUS NTAPI @@ -9498,6 +9211,19 @@ ZwCloseObjectAuditAlarm ( IN BOOLEAN GenerateOnClose ); +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL +); + NTSYSAPI NTSTATUS NTAPI @@ -9508,6 +9234,71 @@ ZwCreateSymbolicLinkObject ( IN PUNICODE_STRING TargetName ); +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteFile ( + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteValueKey ( + IN HANDLE Handle, + IN PUNICODE_STRING Name +); + + +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +NTSTATUS +NTAPI +ZwDeviceIoControlFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength); +#endif + +NTSYSAPI +NTSTATUS +NTAPI +ZwDisplayString ( + IN PUNICODE_STRING String +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDuplicateObject ( + IN HANDLE SourceProcessHandle, + IN HANDLE SourceHandle, + IN HANDLE TargetProcessHandle OPTIONAL, + OUT PHANDLE TargetHandle OPTIONAL, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + IN ULONG Options +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDuplicateToken ( + IN HANDLE ExistingTokenHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN EffectiveOnly, + IN TOKEN_TYPE TokenType, + OUT PHANDLE NewTokenHandle +); + NTSYSAPI NTSTATUS NTAPI @@ -9527,6 +9318,46 @@ ZwFlushBuffersFile( #if (VER_PRODUCTBUILD >= 2195) +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PULONG FlushSize, + OUT PIO_STATUS_BLOCK IoStatusBlock +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +NTSYSAPI +NTSTATUS +NTAPI +ZwFreeVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + IN ULONG FreeType +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFsControlFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG FsControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength +); + +#if (VER_PRODUCTBUILD >= 2195) + NTSYSAPI NTSTATUS NTAPI @@ -9539,6 +9370,14 @@ ZwInitiatePowerAction ( #endif /* (VER_PRODUCTBUILD >= 2195) */ +NTSYSAPI +NTSTATUS +NTAPI +ZwLoadDriver ( + /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\" */ + IN PUNICODE_STRING RegistryPath +); + NTSYSAPI NTSTATUS NTAPI @@ -9547,6 +9386,41 @@ ZwLoadKey ( IN POBJECT_ATTRIBUTES FileObjectAttributes ); +NTSYSAPI +NTSTATUS +NTAPI +ZwNotifyChangeKey ( + IN HANDLE KeyHandle, + IN HANDLE EventHandle OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG NotifyFilter, + IN BOOLEAN WatchSubtree, + IN PVOID Buffer, + IN ULONG BufferLength, + IN BOOLEAN Asynchronous +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenDirectoryObject ( + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenProcess ( + OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL +); + NTSYSAPI NTSTATUS NTAPI @@ -9576,6 +9450,21 @@ ZwOpenThreadToken ( OUT PHANDLE TokenHandle ); +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwPowerInformation ( + IN POWER_INFORMATION_LEVEL PowerInformationLevel, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + NTSYSAPI NTSTATUS NTAPI @@ -9592,6 +9481,23 @@ ZwQueryDefaultLocale ( OUT PLCID Locale ); +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDirectoryFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan +); + #if (VER_PRODUCTBUILD >= 2195) NTSYSAPI @@ -9607,6 +9513,21 @@ ZwQueryDirectoryObject ( OUT PULONG ReturnLength OPTIONAL ); +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryEaFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN PVOID EaList OPTIONAL, + IN ULONG EaListLength, + IN PULONG EaIndex OPTIONAL, + IN BOOLEAN RestartScan +); + #endif /* (VER_PRODUCTBUILD >= 2195) */ NTSYSAPI @@ -9620,6 +9541,39 @@ ZwQueryInformationProcess ( OUT PULONG ReturnLength OPTIONAL ); +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID TokenInformation, + IN ULONG Length, + OUT PULONG ResultLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySecurityObject ( + IN HANDLE FileHandle, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Length, + OUT PULONG ResultLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryVolumeInformationFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass +); + NTSYSAPI NTSTATUS NTAPI @@ -9675,8 +9629,26 @@ ZwSetDefaultUILanguage ( IN LANGID LanguageId ); +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEaFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length +); + #endif /* (VER_PRODUCTBUILD >= 2195) */ +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEvent ( + IN HANDLE EventHandle, + OUT PLONG PreviousState OPTIONAL +); + NTSYSAPI NTSTATUS NTAPI @@ -9687,6 +9659,19 @@ ZwSetInformationProcess ( IN ULONG ProcessInformationLength ); +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetSecurityObject ( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + NTSYSAPI NTSTATUS NTAPI @@ -9695,6 +9680,37 @@ ZwSetSystemTime ( OUT PLARGE_INTEGER OldTime OPTIONAL ); +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetVolumeInformationFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass +); + +#endif /* (VER_PRODUCTBUILD >= 2195) */ + +NTSYSAPI +NTSTATUS +NTAPI +ZwTerminateProcess ( + IN HANDLE ProcessHandle OPTIONAL, + IN NTSTATUS ExitStatus +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnloadDriver ( + /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\" */ + IN PUNICODE_STRING RegistryPath +); + NTSYSAPI NTSTATUS NTAPI @@ -9702,6 +9718,16 @@ ZwUnloadKey ( IN POBJECT_ATTRIBUTES KeyObjectAttributes ); +#if (NTDDI_VERSION >= NTDDI_WIN2K) +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForSingleObject ( + IN HANDLE Handle, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL); +#endif + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/include/ddk/ntimage.h b/reactos/include/ddk/ntimage.h index 8df984763f7..e008a2daa94 100644 --- a/reactos/include/ddk/ntimage.h +++ b/reactos/include/ddk/ntimage.h @@ -394,33 +394,22 @@ typedef struct _IMAGE_NT_HEADERS64 { ULONG Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER64 OptionalHeader; -} IMAGE_NT_HEADERS64; +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; typedef struct _IMAGE_NT_HEADERS { ULONG Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; -} IMAGE_NT_HEADERS32; +} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; #ifdef _WIN64 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS; -#else -typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; -#endif - -#ifndef _NTDDK_ - -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 IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; #endif -#endif /* _NTDDK_ */ - // // Retreives the first image section header from the Nt Header // diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index 2742d758ed8..7e97ea08c1d 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -38,25 +38,10 @@ #include #include #include -#include #ifndef GUID_DEFINED #include -#endif - -#ifdef _MAC -#ifndef _INC_STRING -#include -#endif /* _INC_STRING */ -#else -#include -#endif /* _MAC */ - -#ifndef _KTMTYPES_ -typedef GUID UOW, *PUOW; -#endif - -typedef GUID *PGUID; +#endif /* GUID_DEFINED */ #if (NTDDI_VERSION >= NTDDI_WINXP) #include @@ -106,12 +91,6 @@ extern "C" { #if defined(_MSC_VER) -/* Disable some warnings */ -#pragma warning(disable:4115) /* Named type definition in parentheses */ -#pragma warning(disable:4201) /* Nameless unions and structs */ -#pragma warning(disable:4214) /* Bit fields of other types than int */ -#pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */ - /* Indicate if #pragma alloc_text() is supported */ #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) #define ALLOC_PRAGMA 1 @@ -144,51 +123,17 @@ struct _IO_RESOURCE_DESCRIPTOR; typedef struct _OBJECT_TYPE *POBJECT_TYPE; typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE; typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE; +typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; +typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; -typedef struct _EPROCESS *PEPROCESS; typedef struct _ETHREAD *PETHREAD; +typedef struct _EPROCESS *PEPROCESS; typedef struct _IO_TIMER *PIO_TIMER; typedef struct _KINTERRUPT *PKINTERRUPT; typedef struct _KPROCESS *PKPROCESS; typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; typedef struct _CONTEXT *PCONTEXT; -#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_)) -typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; -#elif defined(_WDM_INCLUDED_) -typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; -#else -typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; -#endif - -#ifndef DEFINE_GUIDEX -#ifdef _MSC_VER -#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name -#else -#define DEFINE_GUIDEX(name) EXTERN_C const GUID name -#endif -#endif /* DEFINE_GUIDEX */ - -#ifndef STATICGUIDOF -#define STATICGUIDOF(guid) STATIC_##guid -#endif - -/* GUID Comparison */ -#ifndef __IID_ALIGNED__ -#define __IID_ALIGNED__ -#ifdef __cplusplus -inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) -{ - return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && - (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) ); -} -#else -#define IsEqualGUIDAligned(guid1, guid2) \ - ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \ - (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) ) -#endif /* __cplusplus */ -#endif /* !__IID_ALIGNED__ */ - /****************************************************************************** * INTERLOCKED Functions * @@ -200,44 +145,42 @@ inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) #if defined(__GNUC__) static __inline__ BOOLEAN -InterlockedBitTestAndSet( - IN LONG volatile *Base, - IN LONG Bit) +InterlockedBitTestAndSet(IN LONG volatile *Base, + IN LONG Bit) { #if defined(_M_IX86) - LONG OldBit; - __asm__ __volatile__("lock " - "btsl %2,%1\n\t" - "sbbl %0,%0\n\t" - :"=r" (OldBit),"+m" (*Base) - :"Ir" (Bit) - : "memory"); - return OldBit; + LONG OldBit; + __asm__ __volatile__("lock " + "btsl %2,%1\n\t" + "sbbl %0,%0\n\t" + :"=r" (OldBit),"+m" (*Base) + :"Ir" (Bit) + : "memory"); + return OldBit; #else - return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1; + return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1; #endif } static __inline__ BOOLEAN -InterlockedBitTestAndReset( - IN LONG volatile *Base, - IN LONG Bit) +InterlockedBitTestAndReset(IN LONG volatile *Base, + IN LONG Bit) { #if defined(_M_IX86) - LONG OldBit; - __asm__ __volatile__("lock " - "btrl %2,%1\n\t" - "sbbl %0,%0\n\t" - :"=r" (OldBit),"+m" (*Base) - :"Ir" (Bit) - : "memory"); - return OldBit; + LONG OldBit; + __asm__ __volatile__("lock " + "btrl %2,%1\n\t" + "sbbl %0,%0\n\t" + :"=r" (OldBit),"+m" (*Base) + :"Ir" (Bit) + : "memory"); + return OldBit; #else - return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1; + return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1; #endif } -#endif /* defined(__GNUC__) */ +#endif #define BitScanForward _BitScanForward #define BitScanReverse _BitScanReverse @@ -249,10 +192,6 @@ InterlockedBitTestAndReset( #define InterlockedBitTestAndReset _interlockedbittestandreset #ifdef _M_AMD64 -#define BitTest64 _bittest64 -#define BitTestAndComplement64 _bittestandcomplement64 -#define BitTestAndSet64 _bittestandset64 -#define BitTestAndReset64 _bittestandreset64 #define InterlockedBitTestAndSet64 _interlockedbittestandset64 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64 #endif @@ -279,8 +218,8 @@ LONG FASTCALL InterlockedCompareExchange( IN OUT LONG volatile *Destination, - IN LONG Exchange, - IN LONG Comparand); + IN LONG Exchange, + IN LONG Comparand); NTKERNELAPI LONG @@ -296,7 +235,7 @@ InterlockedExchangeAdd( IN OUT LONG volatile *Addend, IN LONG Value); -#else /* !defined(NO_INTERLOCKED_INTRINSICS) */ +#else // !defined(NO_INTERLOCKED_INTRINSICS) #define InterlockedExchange _InterlockedExchange #define InterlockedIncrement _InterlockedIncrement @@ -307,9 +246,9 @@ InterlockedExchangeAdd( #define InterlockedAnd _InterlockedAnd #define InterlockedXor _InterlockedXor -#endif /* !defined(NO_INTERLOCKED_INTRINSICS) */ +#endif // !defined(NO_INTERLOCKED_INTRINSICS) -#endif /* defined (_X86_) */ +#endif // defined (_X86_) #if !defined (_WIN64) /* @@ -372,10 +311,10 @@ InterlockedExchangeAdd( FORCEINLINE LONG64 InterlockedAdd64( - IN OUT LONG64 volatile *Addend, - IN LONG64 Value) + IN OUT LONG64 volatile *Addend, + IN LONG64 Value) { - return InterlockedExchangeAdd64(Addend, Value) + Value; + return InterlockedExchangeAdd64(Addend, Value) + Value; } //#endif #endif @@ -411,43 +350,43 @@ InterlockedAdd64( #define HASH_STRING_ALGORITHM_INVALID 0xffffffff typedef struct _RTL_BITMAP { - ULONG SizeOfBitMap; - PULONG Buffer; + ULONG SizeOfBitMap; + PULONG Buffer; } RTL_BITMAP, *PRTL_BITMAP; typedef struct _RTL_BITMAP_RUN { - ULONG StartingIndex; - ULONG NumberOfBits; + ULONG StartingIndex; + ULONG NumberOfBits; } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; typedef NTSTATUS -(NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)( - IN PWSTR ValueName, - IN ULONG ValueType, - IN PVOID ValueData, - IN ULONG ValueLength, - IN PVOID Context, - IN PVOID EntryContext); +(DDKAPI *PRTL_QUERY_REGISTRY_ROUTINE)( + IN PWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength, + IN PVOID Context, + IN PVOID EntryContext); typedef struct _RTL_QUERY_REGISTRY_TABLE { - PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; - ULONG Flags; - PCWSTR Name; - PVOID EntryContext; - ULONG DefaultType; - PVOID DefaultData; - ULONG DefaultLength; + PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; + ULONG Flags; + PCWSTR Name; + PVOID EntryContext; + ULONG DefaultType; + PVOID DefaultData; + ULONG DefaultLength; } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; typedef struct _TIME_FIELDS { - CSHORT Year; - CSHORT Month; - CSHORT Day; - CSHORT Hour; - CSHORT Minute; - CSHORT Second; - CSHORT Milliseconds; - CSHORT Weekday; + CSHORT Year; + CSHORT Month; + CSHORT Day; + CSHORT Hour; + CSHORT Minute; + CSHORT Second; + CSHORT Milliseconds; + CSHORT Weekday; } TIME_FIELDS, *PTIME_FIELDS; /* Slist Header */ @@ -455,101 +394,60 @@ typedef struct _TIME_FIELDS { #define _SLIST_HEADER_ #if defined(_WIN64) - +typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { - struct _SLIST_ENTRY *Next; -} SLIST_ENTRY, *PSLIST_ENTRY; - -typedef struct _SLIST_ENTRY32 { - ULONG Next; -} SLIST_ENTRY32, *PSLIST_ENTRY32; - + PSLIST_ENTRY Next; +} SLIST_ENTRY; typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { - struct { - ULONGLONG Alignment; - ULONGLONG Region; - } DUMMYSTRUCTNAME; - struct { - ULONGLONG Depth:16; - ULONGLONG Sequence:9; - ULONGLONG NextEntry:39; - ULONGLONG HeaderType:1; - ULONGLONG Init:1; - ULONGLONG Reserved:59; - ULONGLONG Region:3; - } Header8; - struct { - ULONGLONG Depth:16; - ULONGLONG Sequence:48; - ULONGLONG HeaderType:1; - ULONGLONG Init:1; - ULONGLONG Reserved:2; - ULONGLONG NextEntry:60; - } Header16; - struct { - ULONGLONG Depth:16; - ULONGLONG Sequence:48; - ULONGLONG HeaderType:1; - ULONGLONG Reserved:3; - ULONGLONG NextEntry:60; - } HeaderX64; + struct { + ULONGLONG Alignment; + ULONGLONG Region; + } DUMMYSTRUCTNAME; + struct { + ULONGLONG Depth:16; + ULONGLONG Sequence:9; + ULONGLONG NextEntry:39; + ULONGLONG HeaderType:1; + ULONGLONG Init:1; + ULONGLONG Reserved:59; + ULONGLONG Region:3; + } Header8; + struct { + ULONGLONG Depth:16; + ULONGLONG Sequence:48; + ULONGLONG HeaderType:1; + ULONGLONG Init:1; + ULONGLONG Reserved:2; + ULONGLONG NextEntry:60; + } Header16; } SLIST_HEADER, *PSLIST_HEADER; - -typedef union _SLIST_HEADER32 { - ULONGLONG Alignment; - struct { - SLIST_ENTRY32 Next; - USHORT Depth; - USHORT Sequence; - } DUMMYSTRUCTNAME; -} SLIST_HEADER32, *PSLIST_HEADER32; - #else - #define SLIST_ENTRY SINGLE_LIST_ENTRY #define _SLIST_ENTRY _SINGLE_LIST_ENTRY #define PSLIST_ENTRY PSINGLE_LIST_ENTRY - -typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32; - typedef union _SLIST_HEADER { - ULONGLONG Alignment; - struct { - SLIST_ENTRY Next; - USHORT Depth; - USHORT Sequence; - } DUMMYSTRUCTNAME; + ULONGLONG Alignment; + struct { + SLIST_ENTRY Next; + USHORT Depth; + USHORT Sequence; + } DUMMYSTRUCTNAME; } SLIST_HEADER, *PSLIST_HEADER; - -typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32; - -#endif /* defined(_WIN64) */ +#endif #endif /* _SLIST_HEADER_ */ -/* MS definition is broken! */ -extern BOOLEAN NTSYSAPI NlsMbCodePageTag; -extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag; + +/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */ +#if defined(_NTSYSTEM_) || defined(__GNUC__) #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag - -#define SHORT_LEAST_SIGNIFICANT_BIT 0 -#define SHORT_MOST_SIGNIFICANT_BIT 1 - -#define LONG_LEAST_SIGNIFICANT_BIT 0 -#define LONG_3RD_MOST_SIGNIFICANT_BIT 1 -#define LONG_2ND_MOST_SIGNIFICANT_BIT 2 -#define LONG_MOST_SIGNIFICANT_BIT 3 - -#define RTLVERLIB_DDI(x) Wdmlib##x - -typedef BOOLEAN -(*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)( - IN ULONG Version); - -typedef BOOLEAN -(*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)( - IN ULONG Version); +#else +#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) +#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) +#endif /* _NT_SYSTEM */ +extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG; +extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG; /****************************************************************************** @@ -560,139 +458,39 @@ typedef UCHAR KIRQL, *PKIRQL; typedef CCHAR KPROCESSOR_MODE; typedef LONG KPRIORITY; +typedef ULONG EXECUTION_STATE; + typedef enum _MODE { KernelMode, UserMode, MaximumMode } MODE; -#define CACHE_FULLY_ASSOCIATIVE 0xFF -#define MAXIMUM_SUSPEND_COUNT MAXCHAR - -#define EVENT_QUERY_STATE (0x0001) -#define EVENT_MODIFY_STATE (0x0002) -#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) - -#define LTP_PC_SMT 0x1 - -#if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS) -#define SINGLE_GROUP_LEGACY_API 1 -#endif - -#define SEMAPHORE_QUERY_STATE (0x0001) -#define SEMAPHORE_MODIFY_STATE (0x0002) -#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) - -typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP { - RelationProcessorCore, - RelationNumaNode, - RelationCache, - RelationProcessorPackage, - RelationGroup, - RelationAll = 0xffff -} LOGICAL_PROCESSOR_RELATIONSHIP; - -typedef enum _PROCESSOR_CACHE_TYPE { - CacheUnified, - CacheInstruction, - CacheData, - CacheTrace -} PROCESSOR_CACHE_TYPE; - -typedef struct _CACHE_DESCRIPTOR { - UCHAR Level; - UCHAR Associativity; - USHORT LineSize; - ULONG Size; - PROCESSOR_CACHE_TYPE Type; -} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR; - -typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { - ULONG_PTR ProcessorMask; - LOGICAL_PROCESSOR_RELATIONSHIP Relationship; - union { - struct { - UCHAR Flags; - } ProcessorCore; - struct { - ULONG NodeNumber; - } NumaNode; - CACHE_DESCRIPTOR Cache; - ULONGLONG Reserved[2]; - } DUMMYUNIONNAME; -} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; - -typedef struct _PROCESSOR_RELATIONSHIP { - UCHAR Flags; - UCHAR Reserved[21]; - USHORT GroupCount; - GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; -} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; - -typedef struct _NUMA_NODE_RELATIONSHIP { - ULONG NodeNumber; - UCHAR Reserved[20]; - GROUP_AFFINITY GroupMask; -} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP; - -typedef struct _CACHE_RELATIONSHIP { - UCHAR Level; - UCHAR Associativity; - USHORT LineSize; - ULONG CacheSize; - PROCESSOR_CACHE_TYPE Type; - UCHAR Reserved[20]; - GROUP_AFFINITY GroupMask; -} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP; - -typedef struct _PROCESSOR_GROUP_INFO { - UCHAR MaximumProcessorCount; - UCHAR ActiveProcessorCount; - UCHAR Reserved[38]; - KAFFINITY ActiveProcessorMask; -} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO; - -typedef struct _GROUP_RELATIONSHIP { - USHORT MaximumGroupCount; - USHORT ActiveGroupCount; - UCHAR Reserved[20]; - PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY]; -} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP; - -typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { - LOGICAL_PROCESSOR_RELATIONSHIP Relationship; - ULONG Size; - union { - PROCESSOR_RELATIONSHIP Processor; - NUMA_NODE_RELATIONSHIP NumaNode; - CACHE_RELATIONSHIP Cache; - GROUP_RELATIONSHIP Group; - } DUMMYUNIONNAME; -} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;; - /* Processor features */ -#define PF_FLOATING_POINT_PRECISION_ERRATA 0 -#define PF_FLOATING_POINT_EMULATED 1 -#define PF_COMPARE_EXCHANGE_DOUBLE 2 -#define PF_MMX_INSTRUCTIONS_AVAILABLE 3 -#define PF_PPC_MOVEMEM_64BIT_OK 4 -#define PF_ALPHA_BYTE_INSTRUCTIONS 5 -#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 -#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 -#define PF_RDTSC_INSTRUCTION_AVAILABLE 8 -#define PF_PAE_ENABLED 9 -#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 -#define PF_SSE_DAZ_MODE_AVAILABLE 11 -#define PF_NX_ENABLED 12 -#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 -#define PF_COMPARE_EXCHANGE128 14 -#define PF_COMPARE64_EXCHANGE128 15 -#define PF_CHANNELS_ENABLED 16 -#define PF_XSAVE_ENABLED 17 +#define PF_FLOATING_POINT_PRECISION_ERRATA 0 +#define PF_FLOATING_POINT_EMULATED 1 +#define PF_COMPARE_EXCHANGE_DOUBLE 2 +#define PF_MMX_INSTRUCTIONS_AVAILABLE 3 +#define PF_PPC_MOVEMEM_64BIT_OK 4 +#define PF_ALPHA_BYTE_INSTRUCTIONS 5 +#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 +#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 +#define PF_RDTSC_INSTRUCTION_AVAILABLE 8 +#define PF_PAE_ENABLED 9 +#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 +#define PF_SSE_DAZ_MODE_AVAILABLE 11 +#define PF_NX_ENABLED 12 +#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 +#define PF_COMPARE_EXCHANGE128 14 +#define PF_COMPARE64_EXCHANGE128 15 +#define PF_CHANNELS_ENABLED 16 +#define PF_XSAVE_ENABLED 17 +#define MAXIMUM_SUPPORTED_EXTENSION 512 #define MAXIMUM_WAIT_OBJECTS 64 -#define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject) +#define ASSERT_APC(Object) \ + ASSERT((Object)->Type == ApcObject) #define ASSERT_DPC(Object) \ ASSERT(((Object)->Type == 0) || \ @@ -700,25 +498,25 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { ((Object)->Type == ThreadedDpcObject)) #define ASSERT_GATE(object) \ - NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \ - (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject)) + ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \ + (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject)) #define ASSERT_DEVICE_QUEUE(Object) \ - NT_ASSERT((Object)->Type == DeviceQueueObject) + ASSERT((Object)->Type == DeviceQueueObject) #define ASSERT_TIMER(E) \ - NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \ - ((E)->Header.Type == TimerSynchronizationObject)) + ASSERT(((E)->Header.Type == TimerNotificationObject) || \ + ((E)->Header.Type == TimerSynchronizationObject)) #define ASSERT_MUTANT(E) \ - NT_ASSERT((E)->Header.Type == MutantObject) + ASSERT((E)->Header.Type == MutantObject) #define ASSERT_SEMAPHORE(E) \ - NT_ASSERT((E)->Header.Type == SemaphoreObject) + ASSERT((E)->Header.Type == SemaphoreObject) #define ASSERT_EVENT(E) \ - NT_ASSERT(((E)->Header.Type == NotificationEvent) || \ - ((E)->Header.Type == SynchronizationEvent)) + ASSERT(((E)->Header.Type == NotificationEvent) || \ + ((E)->Header.Type == SynchronizationEvent)) #define DPC_NORMAL 0 #define DPC_THREADED 1 @@ -728,9 +526,6 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { #define GM_LOCK_WAITER_WOKEN 0x2 #define GM_LOCK_WAITER_INC 0x4 -#define LOCK_QUEUE_WAIT_BIT 0 -#define LOCK_QUEUE_OWNER_BIT 1 - #define LOCK_QUEUE_WAIT 1 #define LOCK_QUEUE_OWNER 2 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4 @@ -754,59 +549,43 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP /* Exception Records */ -#define EXCEPTION_NONCONTINUABLE 1 +#define EXCEPTION_NONCONTINUABLE 1 #define EXCEPTION_MAXIMUM_PARAMETERS 15 -#define EXCEPTION_DIVIDED_BY_ZERO 0 -#define EXCEPTION_DEBUG 1 -#define EXCEPTION_NMI 2 -#define EXCEPTION_INT3 3 -#define EXCEPTION_BOUND_CHECK 5 -#define EXCEPTION_INVALID_OPCODE 6 -#define EXCEPTION_NPX_NOT_AVAILABLE 7 -#define EXCEPTION_DOUBLE_FAULT 8 -#define EXCEPTION_NPX_OVERRUN 9 -#define EXCEPTION_INVALID_TSS 0x0A -#define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B -#define EXCEPTION_STACK_FAULT 0x0C -#define EXCEPTION_GP_FAULT 0x0D -#define EXCEPTION_RESERVED_TRAP 0x0F -#define EXCEPTION_NPX_ERROR 0x010 -#define EXCEPTION_ALIGNMENT_CHECK 0x011 - typedef struct _EXCEPTION_RECORD { - NTSTATUS ExceptionCode; - ULONG ExceptionFlags; - struct _EXCEPTION_RECORD *ExceptionRecord; - PVOID ExceptionAddress; - ULONG NumberParameters; - ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + struct _EXCEPTION_RECORD *ExceptionRecord; + PVOID ExceptionAddress; + ULONG NumberParameters; + ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } EXCEPTION_RECORD, *PEXCEPTION_RECORD; typedef struct _EXCEPTION_RECORD32 { - NTSTATUS ExceptionCode; - ULONG ExceptionFlags; - ULONG ExceptionRecord; - ULONG ExceptionAddress; - ULONG NumberParameters; - ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + ULONG ExceptionRecord; + ULONG ExceptionAddress; + ULONG NumberParameters; + ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32; typedef struct _EXCEPTION_RECORD64 { - NTSTATUS ExceptionCode; - ULONG ExceptionFlags; - ULONG64 ExceptionRecord; - ULONG64 ExceptionAddress; - ULONG NumberParameters; - ULONG __unusedAlignment; - ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + ULONG64 ExceptionRecord; + ULONG64 ExceptionAddress; + ULONG NumberParameters; + ULONG __unusedAlignment; + ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64; typedef struct _EXCEPTION_POINTERS { - PEXCEPTION_RECORD ExceptionRecord; - PCONTEXT ContextRecord; + PEXCEPTION_RECORD ExceptionRecord; + PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; + typedef enum _KBUGCHECK_CALLBACK_REASON { KbCallbackInvalid, KbCallbackReserved1, @@ -818,56 +597,19 @@ typedef enum _KBUGCHECK_CALLBACK_REASON { struct _KBUGCHECK_REASON_CALLBACK_RECORD; typedef VOID -(NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)( - IN KBUGCHECK_CALLBACK_REASON Reason, - IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, - IN OUT PVOID ReasonSpecificData, - IN ULONG ReasonSpecificDataLength); -typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE; - -typedef struct _KBUGCHECK_ADD_PAGES { - IN OUT PVOID Context; - IN OUT ULONG Flags; - IN ULONG BugCheckCode; - OUT ULONG_PTR Address; - OUT ULONG_PTR Count; -} KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES; - -typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA { - IN PVOID InBuffer; - IN ULONG InBufferLength; - IN ULONG MaximumAllowed; - OUT GUID Guid; - OUT PVOID OutBuffer; - OUT ULONG OutBufferLength; -} KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA; - -typedef enum _KBUGCHECK_DUMP_IO_TYPE { - KbDumpIoInvalid, - KbDumpIoHeader, - KbDumpIoBody, - KbDumpIoSecondaryData, - KbDumpIoComplete -} KBUGCHECK_DUMP_IO_TYPE; - -typedef struct _KBUGCHECK_DUMP_IO { - IN ULONG64 Offset; - IN PVOID Buffer; - IN ULONG BufferLength; - IN KBUGCHECK_DUMP_IO_TYPE Type; -} KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO; - -#define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL -#define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL -#define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL +(DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)( + IN KBUGCHECK_CALLBACK_REASON Reason, + IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, + IN OUT PVOID ReasonSpecificData, + IN ULONG ReasonSpecificDataLength); typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD { - LIST_ENTRY Entry; - PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; - PUCHAR Component; - ULONG_PTR Checksum; - KBUGCHECK_CALLBACK_REASON Reason; - UCHAR State; + LIST_ENTRY Entry; + PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; + PUCHAR Component; + ULONG_PTR Checksum; + KBUGCHECK_CALLBACK_REASON Reason; + UCHAR State; } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD; typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { @@ -879,52 +621,39 @@ typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { } KBUGCHECK_BUFFER_DUMP_STATE; typedef VOID -(NTAPI KBUGCHECK_CALLBACK_ROUTINE)( - IN PVOID Buffer, - IN ULONG Length); -typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE; +(DDKAPI *PKBUGCHECK_CALLBACK_ROUTINE)( + IN PVOID Buffer, + IN ULONG Length); typedef struct _KBUGCHECK_CALLBACK_RECORD { - LIST_ENTRY Entry; - PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; - PVOID Buffer; - ULONG Length; - PUCHAR Component; - ULONG_PTR Checksum; - UCHAR State; + LIST_ENTRY Entry; + PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; + PVOID Buffer; + ULONG Length; + PUCHAR Component; + ULONG_PTR Checksum; + UCHAR State; } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; typedef BOOLEAN -(NTAPI NMI_CALLBACK)( - IN PVOID Context, - IN BOOLEAN Handled); -typedef NMI_CALLBACK *PNMI_CALLBACK; +(DDKAPI *PNMI_CALLBACK)( + IN PVOID Context, + IN BOOLEAN Handled); -typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE { - KeProcessorAddStartNotify = 0, - KeProcessorAddCompleteNotify, - KeProcessorAddFailureNotify -} KE_PROCESSOR_CHANGE_NOTIFY_STATE; - -typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT { - KE_PROCESSOR_CHANGE_NOTIFY_STATE State; - ULONG NtNumber; - NTSTATUS Status; -#if (NTDDI_VERSION >= NTDDI_WIN7) - PROCESSOR_NUMBER ProcNumber; -#endif -} KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT; - -typedef VOID -(NTAPI PROCESSOR_CALLBACK_FUNCTION)( - IN PVOID CallbackContext, - IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext, - IN OUT PNTSTATUS OperationStatus); -typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION; - -#define KE_PROCESSOR_CHANGE_ADD_EXISTING 1 - -#define INVALID_PROCESSOR_INDEX 0xffffffff +typedef enum _TRACE_INFORMATION_CLASS { + TraceIdClass, + TraceHandleClass, + TraceEnableFlagsClass, + TraceEnableLevelClass, + GlobalLoggerHandleClass, + EventLoggerHandleClass, + AllLoggerHandlesClass, + TraceHandleByNameClass, + LoggerEventsLostClass, + TraceSessionSettingsClass, + LoggerEventsLoggedClass, + MaxTraceInformationClass +} TRACE_INFORMATION_CLASS; typedef enum _KINTERRUPT_POLARITY { InterruptPolarityUnknown, @@ -1022,50 +751,55 @@ typedef enum _KINTERRUPT_MODE { #define THREAD_WAIT_OBJECTS 3 typedef VOID -(NTAPI KSTART_ROUTINE)( - IN PVOID StartContext); -typedef KSTART_ROUTINE *PKSTART_ROUTINE; - -typedef VOID -(NTAPI *PKINTERRUPT_ROUTINE)( +(DDKAPI *PKINTERRUPT_ROUTINE)( VOID); -typedef BOOLEAN -(NTAPI KSERVICE_ROUTINE)( - IN struct _KINTERRUPT *Interrupt, - IN PVOID ServiceContext); -typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; - -typedef BOOLEAN -(NTAPI KMESSAGE_SERVICE_ROUTINE)( - IN struct _KINTERRUPT *Interrupt, - IN PVOID ServiceContext, - IN ULONG MessageID); -typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE; - typedef enum _KD_OPTION { - KD_OPTION_SET_BLOCK_ENABLE, + KD_OPTION_SET_BLOCK_ENABLE, } KD_OPTION; -typedef VOID -(NTAPI *PKNORMAL_ROUTINE)( - IN PVOID NormalContext OPTIONAL, - IN PVOID SystemArgument1 OPTIONAL, - IN PVOID SystemArgument2 OPTIONAL); +typedef enum _INTERFACE_TYPE { + InterfaceTypeUndefined = -1, + Internal, + Isa, + Eisa, + MicroChannel, + TurboChannel, + PCIBus, + VMEBus, + NuBus, + PCMCIABus, + CBus, + MPIBus, + MPSABus, + ProcessorInternal, + InternalPowerBus, + PNPISABus, + PNPBus, + Vmcs, + MaximumInterfaceType +} INTERFACE_TYPE, *PINTERFACE_TYPE; typedef VOID -(NTAPI *PKRUNDOWN_ROUTINE)( - IN struct _KAPC *Apc); +(DDKAPI *PKNORMAL_ROUTINE)( + IN PVOID NormalContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2); typedef VOID -(NTAPI *PKKERNEL_ROUTINE)( - IN struct _KAPC *Apc, - IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL, - IN OUT PVOID *NormalContext OPTIONAL, - IN OUT PVOID *SystemArgument1 OPTIONAL, - IN OUT PVOID *SystemArgument2 OPTIONAL); +(DDKAPI *PKRUNDOWN_ROUTINE)( + IN struct _KAPC *Apc); -typedef struct _KAPC { +typedef VOID +(DDKAPI *PKKERNEL_ROUTINE)( + IN struct _KAPC *Apc, + IN OUT PKNORMAL_ROUTINE *NormalRoutine, + IN OUT PVOID *NormalContext, + IN OUT PVOID *SystemArgument1, + IN OUT PVOID *SystemArgument2); + +typedef struct _KAPC +{ UCHAR Type; UCHAR SpareByte0; UCHAR Size; @@ -1084,62 +818,38 @@ typedef struct _KAPC { BOOLEAN Inserted; } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; -#define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0) -#define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1) -#define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0) -#define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1) -#define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2) -#define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex) -#define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN)) - typedef struct _KDEVICE_QUEUE_ENTRY { - LIST_ENTRY DeviceListEntry; - ULONG SortKey; - BOOLEAN Inserted; + LIST_ENTRY DeviceListEntry; + ULONG SortKey; + BOOLEAN Inserted; } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; typedef PVOID PKIPI_CONTEXT; -typedef VOID +typedef +VOID (NTAPI *PKIPI_WORKER)( - IN OUT PKIPI_CONTEXT PacketContext, - IN PVOID Parameter1 OPTIONAL, - IN PVOID Parameter2 OPTIONAL, - IN PVOID Parameter3 OPTIONAL); + IN PKIPI_CONTEXT PacketContext, + IN PVOID Parameter1, + IN PVOID Parameter2, + IN PVOID Parameter3); -typedef struct _KIPI_COUNTS { - ULONG Freeze; - ULONG Packet; - ULONG DPC; - ULONG APC; - ULONG FlushSingleTb; - ULONG FlushMultipleTb; - ULONG FlushEntireTb; - ULONG GenericCall; - ULONG ChangeColor; - ULONG SweepDcache; - ULONG SweepIcache; - ULONG SweepIcacheRange; - ULONG FlushIoBuffers; - ULONG GratuitousDPC; -} KIPI_COUNTS, *PKIPI_COUNTS; - -typedef ULONG_PTR -(NTAPI KIPI_BROADCAST_WORKER)( - IN ULONG_PTR Argument); -typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER; +typedef +ULONG_PTR +(NTAPI *PKIPI_BROADCAST_WORKER)( + IN ULONG_PTR Argument); typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; typedef struct _KSPIN_LOCK_QUEUE { - struct _KSPIN_LOCK_QUEUE *volatile Next; - PKSPIN_LOCK volatile Lock; + struct _KSPIN_LOCK_QUEUE *volatile Next; + PKSPIN_LOCK volatile Lock; } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; typedef struct _KLOCK_QUEUE_HANDLE { - KSPIN_LOCK_QUEUE LockQueue; - KIRQL OldIrql; + KSPIN_LOCK_QUEUE LockQueue; + KIRQL OldIrql; } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; #if defined(_AMD64_) @@ -1190,14 +900,14 @@ typedef enum _KSPIN_LOCK_QUEUE_NUMBER { LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; -#endif /* defined(_AMD64_) */ +#endif typedef VOID -(NTAPI *PKDEFERRED_ROUTINE)( - IN struct _KDPC *Dpc, - IN PVOID DeferredContext OPTIONAL, - IN PVOID SystemArgument1 OPTIONAL, - IN PVOID SystemArgument2 OPTIONAL); +(DDKAPI *PKDEFERRED_ROUTINE)( + IN struct _KDPC *Dpc, + IN PVOID DeferredContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2); typedef enum _KDPC_IMPORTANCE { LowImportance, @@ -1206,16 +916,17 @@ typedef enum _KDPC_IMPORTANCE { MediumHighImportance } KDPC_IMPORTANCE; -typedef struct _KDPC { - UCHAR Type; - UCHAR Importance; - volatile USHORT Number; - LIST_ENTRY DpcListEntry; - PKDEFERRED_ROUTINE DeferredRoutine; - PVOID DeferredContext; - PVOID SystemArgument1; - PVOID SystemArgument2; - volatile PVOID DpcData; +typedef struct _KDPC +{ + UCHAR Type; + UCHAR Importance; + volatile USHORT Number; + LIST_ENTRY DpcListEntry; + PKDEFERRED_ROUTINE DeferredRoutine; + PVOID DeferredContext; + PVOID SystemArgument1; + PVOID SystemArgument2; + volatile PVOID DpcData; } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; typedef struct _KDPC_WATCHDOG_INFORMATION { @@ -1235,124 +946,126 @@ typedef struct _KDEVICE_QUEUE { union { BOOLEAN Busy; struct { - LONG64 Reserved:8; - LONG64 Hint:56; + LONG64 Reserved : 8; + LONG64 Hint : 56; }; }; #else BOOLEAN Busy; #endif + } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; #define TIMER_EXPIRED_INDEX_BITS 6 #define TIMER_PROCESSOR_INDEX_BITS 5 - typedef struct _DISPATCHER_HEADER { - _ANONYMOUS_UNION union { - _ANONYMOUS_STRUCT struct { - UCHAR Type; - _ANONYMOUS_UNION union { - _ANONYMOUS_UNION union { - UCHAR TimerControlFlags; - _ANONYMOUS_STRUCT struct { - UCHAR Absolute:1; - UCHAR Coalescable:1; - UCHAR KeepShifting:1; - UCHAR EncodedTolerableDelay:5; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - UCHAR Abandoned; + _ANONYMOUS_UNION union { + _ANONYMOUS_STRUCT struct { + UCHAR Type; + _ANONYMOUS_UNION union { + _ANONYMOUS_UNION union { + UCHAR TimerControlFlags; + _ANONYMOUS_STRUCT struct { + UCHAR Absolute:1; + UCHAR Coalescable:1; + UCHAR KeepShifting:1; + UCHAR EncodedTolerableDelay:5; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + UCHAR Abandoned; #if (NTDDI_VERSION < NTDDI_WIN7) - UCHAR NpxIrql; + UCHAR NpxIrql; #endif - BOOLEAN Signalling; - } DUMMYUNIONNAME; - _ANONYMOUS_UNION union { - _ANONYMOUS_UNION union { - UCHAR ThreadControlFlags; - _ANONYMOUS_STRUCT struct { - UCHAR CpuThrottled:1; - UCHAR CycleProfiling:1; - UCHAR CounterProfiling:1; - UCHAR Reserved:5; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - UCHAR Size; - UCHAR Hand; - } DUMMYUNIONNAME2; - _ANONYMOUS_UNION union { + BOOLEAN Signalling; + } DUMMYUNIONNAME; + _ANONYMOUS_UNION union { + _ANONYMOUS_UNION union { + UCHAR ThreadControlFlags; + _ANONYMOUS_STRUCT struct { + UCHAR CpuThrottled:1; + UCHAR CycleProfiling:1; + UCHAR CounterProfiling:1; + UCHAR Reserved:5; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + UCHAR Size; + UCHAR Hand; + } DUMMYUNIONNAME2; + _ANONYMOUS_UNION union { #if (NTDDI_VERSION >= NTDDI_WIN7) - _ANONYMOUS_UNION union { - UCHAR TimerMiscFlags; - _ANONYMOUS_STRUCT struct { + _ANONYMOUS_UNION union { + UCHAR TimerMiscFlags; + _ANONYMOUS_STRUCT struct { #if !defined(_X86_) - UCHAR Index:TIMER_EXPIRED_INDEX_BITS; + UCHAR Index:TIMER_EXPIRED_INDEX_BITS; #else - UCHAR Index:1; - UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS; + UCHAR Index:1; + UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS; #endif - UCHAR Inserted:1; - volatile UCHAR Expired:1; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; + UCHAR Inserted:1; + volatile UCHAR Expired:1; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; #else - /* Pre Win7 compatibility fix to latest WDK */ - UCHAR Inserted; + /* Pre Win7 compatibility fix to latest WDK */ + UCHAR Inserted; #endif - _ANONYMOUS_UNION union { - BOOLEAN DebugActive; - _ANONYMOUS_STRUCT struct { - BOOLEAN ActiveDR7:1; - BOOLEAN Instrumented:1; - BOOLEAN Reserved2:4; - BOOLEAN UmsScheduled:1; - BOOLEAN UmsPrimary:1; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */ - BOOLEAN DpcActive; - } DUMMYUNIONNAME3; - } DUMMYSTRUCTNAME; - volatile LONG Lock; - } DUMMYUNIONNAME; - LONG SignalState; - LIST_ENTRY WaitListHead; + _ANONYMOUS_UNION union { + BOOLEAN DebugActive; + _ANONYMOUS_STRUCT struct { + BOOLEAN ActiveDR7:1; + BOOLEAN Instrumented:1; + BOOLEAN Reserved2:4; + BOOLEAN UmsScheduled:1; + BOOLEAN UmsPrimary:1; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */ + BOOLEAN DpcActive; + } DUMMYUNIONNAME3; + } DUMMYSTRUCTNAME; + volatile LONG Lock; + } DUMMYUNIONNAME; + LONG SignalState; + LIST_ENTRY WaitListHead; } DISPATCHER_HEADER, *PDISPATCHER_HEADER; typedef struct _KEVENT { - DISPATCHER_HEADER Header; + DISPATCHER_HEADER Header; } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; typedef struct _KSEMAPHORE { - DISPATCHER_HEADER Header; - LONG Limit; + DISPATCHER_HEADER Header; + LONG Limit; } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; -#define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG)) - -typedef struct _KGATE { - DISPATCHER_HEADER Header; +typedef struct _KGATE +{ + DISPATCHER_HEADER Header; } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE; -typedef struct _KGUARDED_MUTEX { - volatile LONG Count; - PKTHREAD Owner; - ULONG Contention; - KGATE Gate; - __GNU_EXTENSION union { - __GNU_EXTENSION struct { - SHORT KernelApcDisable; - SHORT SpecialApcDisable; +typedef struct _KGUARDED_MUTEX +{ + volatile LONG Count; + PKTHREAD Owner; + ULONG Contention; + KGATE Gate; + __GNU_EXTENSION union + { + __GNU_EXTENSION struct + { + SHORT KernelApcDisable; + SHORT SpecialApcDisable; + }; + ULONG CombinedApcDisable; }; - ULONG CombinedApcDisable; - }; } KGUARDED_MUTEX, *PKGUARDED_MUTEX; typedef struct _KMUTANT { - DISPATCHER_HEADER Header; - LIST_ENTRY MutantListEntry; - struct _KTHREAD *RESTRICTED_POINTER OwnerThread; - BOOLEAN Abandoned; - UCHAR ApcDisable; + DISPATCHER_HEADER Header; + LIST_ENTRY MutantListEntry; + struct _KTHREAD *RESTRICTED_POINTER OwnerThread; + BOOLEAN Abandoned; + UCHAR ApcDisable; } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; #define TIMER_TABLE_SIZE 512 @@ -1369,17 +1082,9 @@ typedef struct _KTIMER { ULONG Period; } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; -typedef enum _LOCK_OPERATION { - IoReadAccess, - IoWriteAccess, - IoModifyAccess -} LOCK_OPERATION; - -#define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG)) - typedef BOOLEAN -(NTAPI *PKSYNCHRONIZE_ROUTINE)( - IN PVOID SynchronizeContext); +(DDKAPI *PKSYNCHRONIZE_ROUTINE)( + IN PVOID SynchronizeContext); typedef enum _POOL_TYPE { NonPagedPool, @@ -1399,41 +1104,29 @@ typedef enum _POOL_TYPE { NonPagedPoolCacheAlignedMustSSession } POOL_TYPE; -typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { - StandardDesign, - NEC98x86, - EndAlternatives +typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE +{ + StandardDesign, + NEC98x86, + EndAlternatives } ALTERNATIVE_ARCHITECTURE_TYPE; -#ifndef _X86_ - -#ifndef IsNEC_98 -#define IsNEC_98 (FALSE) -#endif - -#ifndef IsNotNEC_98 -#define IsNotNEC_98 (TRUE) -#endif - -#ifndef SetNEC_98 -#define SetNEC_98 -#endif - -#ifndef SetNotNEC_98 -#define SetNotNEC_98 -#endif - -#endif - -typedef struct _KSYSTEM_TIME { - ULONG LowPart; - LONG High1Time; - LONG High2Time; +typedef struct _KSYSTEM_TIME +{ + ULONG LowPart; + LONG High1Time; + LONG High2Time; } KSYSTEM_TIME, *PKSYSTEM_TIME; +typedef struct _PNP_BUS_INFORMATION { + GUID BusTypeGuid; + INTERFACE_TYPE LegacyBusType; + ULONG BusNumber; +} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; + typedef struct DECLSPEC_ALIGN(16) _M128A { - ULONGLONG Low; - LONGLONG High; + ULONGLONG Low; + LONGLONG High; } M128A, *PM128A; typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT { @@ -1462,110 +1155,18 @@ typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT { #endif } XSAVE_FORMAT, *PXSAVE_FORMAT; -typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER { - ULONG64 Mask; - ULONG64 Reserved[7]; -} XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER; - -typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA { - XSAVE_FORMAT LegacyState; - XSAVE_AREA_HEADER Header; -} XSAVE_AREA, *PXSAVE_AREA; - -typedef struct _XSTATE_CONTEXT { - ULONG64 Mask; - ULONG Length; - ULONG Reserved1; - PXSAVE_AREA Area; -#if defined(_X86_) - ULONG Reserved2; -#endif - PVOID Buffer; -#if defined(_X86_) - ULONG Reserved3; -#endif -} XSTATE_CONTEXT, *PXSTATE_CONTEXT; - -typedef struct _XSTATE_SAVE { -#if defined(_AMD64_) - struct _XSTATE_SAVE* Prev; - struct _KTHREAD* Thread; - UCHAR Level; - XSTATE_CONTEXT XStateContext; -#elif defined(_IA64_) - ULONG Dummy; -#elif defined(_X86_) - union { - struct { - LONG64 Reserved1; - ULONG Reserved2; - struct _XSTATE_SAVE* Prev; - PXSAVE_AREA Reserved3; - struct _KTHREAD* Thread; - PVOID Reserved4; - UCHAR Level; - }; - XSTATE_CONTEXT XStateContext; - }; -#endif -} XSTATE_SAVE, *PXSTATE_SAVE; - -#ifdef _X86_ - -#define MAXIMUM_SUPPORTED_EXTENSION 512 - -#if !defined(__midl) && !defined(MIDL_PASS) -C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION); -#endif - -#endif /* _X86_ */ - -#define XSAVE_ALIGN 64 -#define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA) - -#if !defined(__midl) && !defined(MIDL_PASS) -C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0); -C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0); -C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64); -#endif - -typedef struct _CONTEXT_CHUNK { - LONG Offset; - ULONG Length; -} CONTEXT_CHUNK, *PCONTEXT_CHUNK; - -typedef struct _CONTEXT_EX { - CONTEXT_CHUNK All; - CONTEXT_CHUNK Legacy; - CONTEXT_CHUNK XState; -} CONTEXT_EX, *PCONTEXT_EX; - -#define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN) - -#if (NTDDI_VERSION >= NTDDI_VISTA) -extern NTSYSAPI volatile CCHAR KeNumberProcessors; -#elif (NTDDI_VERSION >= NTDDI_WINXP) -extern NTSYSAPI CCHAR KeNumberProcessors; -#else -extern PCCHAR KeNumberProcessors; -#endif /****************************************************************************** * Memory manager Types * ******************************************************************************/ -#if (NTDDI_VERSION >= NTDDI_WIN2K) -typedef ULONG NODE_REQUIREMENT; -#define MM_ANY_NODE_OK 0x80000000 -#endif - -#define MM_DONT_ZERO_ALLOCATION 0x00000001 -#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002 -#define MM_ALLOCATE_FULLY_REQUIRED 0x00000004 -#define MM_ALLOCATE_NO_WAIT 0x00000008 -#define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010 -#define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020 +#define MM_DONT_ZERO_ALLOCATION 0x00000001 +#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002 +#define MM_ALLOCATE_FULLY_REQUIRED 0x00000004 +#define MM_ALLOCATE_NO_WAIT 0x00000008 +#define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010 +#define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 #define MDL_PAGES_LOCKED 0x0002 @@ -1648,8 +1249,8 @@ typedef ULONG NODE_REQUIREMENT; /* Section map options */ typedef enum _SECTION_INHERIT { - ViewShare = 1, - ViewUnmap = 2 + ViewShare = 1, + ViewUnmap = 2 } SECTION_INHERIT; typedef ULONG PFN_COUNT; @@ -1657,14 +1258,14 @@ typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER; typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER; typedef struct _MDL { - struct _MDL *Next; - CSHORT Size; - CSHORT MdlFlags; - struct _EPROCESS *Process; - PVOID MappedSystemVa; - PVOID StartVa; - ULONG ByteCount; - ULONG ByteOffset; + struct _MDL *Next; + CSHORT Size; + CSHORT MdlFlags; + struct _EPROCESS *Process; + PVOID MappedSystemVa; + PVOID StartVa; + ULONG ByteCount; + ULONG ByteOffset; } MDL, *PMDL; typedef MDL *PMDLX; @@ -1688,15 +1289,18 @@ typedef enum _MM_PAGE_PRIORITY { HighPagePriority = 32 } MM_PAGE_PRIORITY; +typedef enum _LOCK_OPERATION { + IoReadAccess, + IoWriteAccess, + IoModifyAccess +} LOCK_OPERATION; + typedef enum _MM_SYSTEM_SIZE { MmSmallSystem, MmMediumSystem, MmLargeSystem } MM_SYSTEMSIZE; -extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress; -extern PVOID MmBadPointer; - /****************************************************************************** * Executive Types * @@ -1706,6 +1310,12 @@ extern PVOID MmBadPointer; #define EX_RUNDOWN_COUNT_SHIFT 0x1 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT) +#ifdef _WIN64 +#define PORT_MAXIMUM_MESSAGE_LENGTH 512 +#else +#define PORT_MAXIMUM_MESSAGE_LENGTH 256 +#endif + typedef struct _FAST_MUTEX { volatile LONG Count; PKTHREAD Owner; @@ -1715,35 +1325,35 @@ typedef struct _FAST_MUTEX { } FAST_MUTEX, *PFAST_MUTEX; typedef enum _SUITE_TYPE { - SmallBusiness, - Enterprise, - BackOffice, - CommunicationServer, - TerminalServer, - SmallBusinessRestricted, - EmbeddedNT, - DataCenter, - SingleUserTS, - Personal, - Blade, - EmbeddedRestricted, - SecurityAppliance, - StorageServer, - ComputeServer, - WHServer, - MaxSuiteType + SmallBusiness, + Enterprise, + BackOffice, + CommunicationServer, + TerminalServer, + SmallBusinessRestricted, + EmbeddedNT, + DataCenter, + SingleUserTS, + Personal, + Blade, + EmbeddedRestricted, + SecurityAppliance, + StorageServer, + ComputeServer, + WHServer, + MaxSuiteType } SUITE_TYPE; typedef enum _EX_POOL_PRIORITY { - LowPoolPriority, - LowPoolPrioritySpecialPoolOverrun = 8, - LowPoolPrioritySpecialPoolUnderrun = 9, - NormalPoolPriority = 16, - NormalPoolPrioritySpecialPoolOverrun = 24, - NormalPoolPrioritySpecialPoolUnderrun = 25, - HighPoolPriority = 32, - HighPoolPrioritySpecialPoolOverrun = 40, - HighPoolPrioritySpecialPoolUnderrun = 41 + LowPoolPriority, + LowPoolPrioritySpecialPoolOverrun = 8, + LowPoolPrioritySpecialPoolUnderrun = 9, + NormalPoolPriority = 16, + NormalPoolPrioritySpecialPoolOverrun = 24, + NormalPoolPrioritySpecialPoolUnderrun = 25, + HighPoolPriority = 32, + HighPoolPrioritySpecialPoolOverrun = 40, + HighPoolPrioritySpecialPoolUnderrun = 41 } EX_POOL_PRIORITY; #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) @@ -1755,33 +1365,32 @@ typedef enum _EX_POOL_PRIORITY { typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX; typedef PVOID -(NTAPI *PALLOCATE_FUNCTION)( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); +(DDKAPI *PALLOCATE_FUNCTION)( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag); typedef PVOID -(NTAPI *PALLOCATE_FUNCTION_EX)( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag, - IN OUT PLOOKASIDE_LIST_EX Lookaside); +(DDKAPI *PALLOCATE_FUNCTION_EX)( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag, + IN OUT PLOOKASIDE_LIST_EX Lookaside); typedef VOID -(NTAPI *PFREE_FUNCTION)( - IN PVOID Buffer); +(DDKAPI *PFREE_FUNCTION)( + IN PVOID Buffer); typedef VOID -(NTAPI *PFREE_FUNCTION_EX)( - IN PVOID Buffer, - IN OUT PLOOKASIDE_LIST_EX Lookaside); +(DDKAPI *PFREE_FUNCTION_EX)( + IN PVOID Buffer, + IN OUT PLOOKASIDE_LIST_EX Lookaside); typedef VOID -(NTAPI CALLBACK_FUNCTION)( - IN PVOID CallbackContext OPTIONAL, - IN PVOID Argument1 OPTIONAL, - IN PVOID Argument2 OPTIONAL); -typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION; +(DDKAPI *PCALLBACK_FUNCTION)( + IN PVOID CallbackContext, + IN PVOID Argument1, + IN PVOID Argument2); #define GENERAL_LOOKASIDE_LAYOUT \ union { \ @@ -1824,149 +1433,50 @@ typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION; ULONG Future[2]; typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE { - GENERAL_LOOKASIDE_LAYOUT + GENERAL_LOOKASIDE_LAYOUT } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; typedef struct _GENERAL_LOOKASIDE_POOL { - GENERAL_LOOKASIDE_LAYOUT + GENERAL_LOOKASIDE_LAYOUT } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL; -#define LOOKASIDE_CHECK(f) \ - C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f)) - -LOOKASIDE_CHECK(TotalFrees); -LOOKASIDE_CHECK(Tag); -LOOKASIDE_CHECK(Future); - typedef struct _PAGED_LOOKASIDE_LIST { - GENERAL_LOOKASIDE L; + GENERAL_LOOKASIDE L; #if !defined(_AMD64_) && !defined(_IA64_) - FAST_MUTEX Lock__ObsoleteButDoNotDelete; + FAST_MUTEX Lock__ObsoleteButDoNotDelete; #endif } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST { - GENERAL_LOOKASIDE L; + GENERAL_LOOKASIDE L; #if !defined(_AMD64_) && !defined(_IA64_) - KSPIN_LOCK Lock__ObsoleteButDoNotDelete; + KSPIN_LOCK Lock__ObsoleteButDoNotDelete; #endif } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; -#define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next)) - typedef struct _LOOKASIDE_LIST_EX { - GENERAL_LOOKASIDE_POOL L; + GENERAL_LOOKASIDE_POOL L; } LOOKASIDE_LIST_EX; -#if (NTDDI_VERSION >= NTDDI_VISTA) - -#define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL -#define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL - -#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256 -#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024 - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - typedef struct _EX_RUNDOWN_REF { - __GNU_EXTENSION union { - volatile ULONG_PTR Count; - volatile PVOID Ptr; - }; + __GNU_EXTENSION union { + volatile ULONG_PTR Count; + volatile PVOID Ptr; + }; } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF; -typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE; - -typedef enum _WORK_QUEUE_TYPE { - CriticalWorkQueue, - DelayedWorkQueue, - HyperCriticalWorkQueue, - MaximumWorkQueue -} WORK_QUEUE_TYPE; +typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE; typedef VOID -(NTAPI WORKER_THREAD_ROUTINE)( +(DDKAPI *PWORKER_THREAD_ROUTINE)( IN PVOID Parameter); -typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE; typedef struct _WORK_QUEUE_ITEM { - LIST_ENTRY List; - PWORKER_THREAD_ROUTINE WorkerRoutine; - volatile PVOID Parameter; + LIST_ENTRY List; + PWORKER_THREAD_ROUTINE WorkerRoutine; + volatile PVOID Parameter; } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; -typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD; - -typedef struct _OWNER_ENTRY { - ERESOURCE_THREAD OwnerThread; - union { - struct { - ULONG IoPriorityBoosted:1; - ULONG OwnerReferenced:1; - ULONG OwnerCount:30; - }; - ULONG TableSize; - }; -} OWNER_ENTRY, *POWNER_ENTRY; - -typedef struct _ERESOURCE { - LIST_ENTRY SystemResourcesList; - POWNER_ENTRY OwnerTable; - SHORT ActiveCount; - USHORT Flag; - volatile PKSEMAPHORE SharedWaiters; - volatile PKEVENT ExclusiveWaiters; - OWNER_ENTRY OwnerEntry; - ULONG ActiveEntries; - ULONG ContentionCount; - ULONG NumberOfSharedWaiters; - ULONG NumberOfExclusiveWaiters; -#if defined(_WIN64) - PVOID Reserved2; -#endif - __GNU_EXTENSION union { - PVOID Address; - ULONG_PTR CreatorBackTraceIndex; - }; - KSPIN_LOCK SpinLock; -} ERESOURCE, *PERESOURCE; - -/* ERESOURCE.Flag */ -#define ResourceNeverExclusive 0x0010 -#define ResourceReleaseByOtherThread 0x0020 -#define ResourceOwnedExclusive 0x0080 - -#define RESOURCE_HASH_TABLE_SIZE 64 - -typedef struct _RESOURCE_HASH_ENTRY { - LIST_ENTRY ListEntry; - PVOID Address; - ULONG ContentionCount; - ULONG Number; -} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY; - -typedef struct _RESOURCE_PERFORMANCE_DATA { - ULONG ActiveResourceCount; - ULONG TotalResourceCount; - ULONG ExclusiveAcquire; - ULONG SharedFirstLevel; - ULONG SharedSecondLevel; - ULONG StarveFirstLevel; - ULONG StarveSecondLevel; - ULONG WaitForExclusive; - ULONG OwnerTableExpands; - ULONG MaximumTableExpand; - LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE]; -} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA; - -/* Global debug flag */ -#if DEVL -extern ULONG NtGlobalFlag; -#define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName)) -#else -#define IF_NTOS_DEBUG(FlagName) if(FALSE) -#endif - /****************************************************************************** * Security Manager Types * @@ -1998,10 +1508,10 @@ typedef PVOID PSID; #define GENERIC_ALL 0x10000000L typedef struct _GENERIC_MAPPING { - ACCESS_MASK GenericRead; - ACCESS_MASK GenericWrite; - ACCESS_MASK GenericExecute; - ACCESS_MASK GenericAll; + ACCESS_MASK GenericRead; + ACCESS_MASK GenericWrite; + ACCESS_MASK GenericExecute; + ACCESS_MASK GenericAll; } GENERIC_MAPPING, *PGENERIC_MAPPING; #define ACL_REVISION 2 @@ -2015,11 +1525,11 @@ typedef struct _GENERIC_MAPPING { #define MAX_ACL_REVISION ACL_REVISION4 typedef struct _ACL { - UCHAR AclRevision; - UCHAR Sbz1; - USHORT AclSize; - USHORT AceCount; - USHORT Sbz2; + UCHAR AclRevision; + UCHAR Sbz1; + USHORT AclSize; + USHORT AceCount; + USHORT Sbz2; } ACL, *PACL; /* Current security descriptor revision value */ @@ -2039,8 +1549,8 @@ typedef struct _ACL { #include typedef struct _LUID_AND_ATTRIBUTES { - LUID Luid; - ULONG Attributes; + LUID Luid; + ULONG Attributes; } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; #include @@ -2051,16 +1561,16 @@ typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; #define PRIVILEGE_SET_ALL_NECESSARY (1) typedef struct _PRIVILEGE_SET { - ULONG PrivilegeCount; - ULONG Control; - LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; + ULONG PrivilegeCount; + ULONG Control; + LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; } PRIVILEGE_SET,*PPRIVILEGE_SET; typedef enum _SECURITY_IMPERSONATION_LEVEL { - SecurityAnonymous, - SecurityIdentification, - SecurityImpersonation, - SecurityDelegation + SecurityAnonymous, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation @@ -2074,17 +1584,17 @@ typedef enum _SECURITY_IMPERSONATION_LEVEL { typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; typedef struct _SECURITY_QUALITY_OF_SERVICE { - ULONG Length; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; - BOOLEAN EffectiveOnly; + ULONG Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BOOLEAN EffectiveOnly; } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; typedef struct _SE_IMPERSONATION_STATE { - PACCESS_TOKEN Token; - BOOLEAN CopyOnOpen; - BOOLEAN EffectiveOnly; - SECURITY_IMPERSONATION_LEVEL Level; + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL Level; } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE; #define OWNER_SECURITY_INFORMATION (0x00000001L) @@ -2108,9 +1618,9 @@ typedef enum _SECURITY_OPERATION_CODE { #define INITIAL_PRIVILEGE_COUNT 3 typedef struct _INITIAL_PRIVILEGE_SET { - ULONG PrivilegeCount; - ULONG Control; - LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; + ULONG PrivilegeCount; + ULONG Control; + LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; #define SE_MIN_WELL_KNOWN_PRIVILEGE 2 @@ -2151,38 +1661,35 @@ typedef struct _INITIAL_PRIVILEGE_SET { #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE typedef struct _SECURITY_SUBJECT_CONTEXT { - PACCESS_TOKEN ClientToken; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - PACCESS_TOKEN PrimaryToken; - PVOID ProcessAuditId; + PACCESS_TOKEN ClientToken; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + PACCESS_TOKEN PrimaryToken; + PVOID ProcessAuditId; } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; typedef struct _ACCESS_STATE { - LUID OperationID; - BOOLEAN SecurityEvaluated; - BOOLEAN GenerateAudit; - BOOLEAN GenerateOnClose; - BOOLEAN PrivilegesAllocated; - ULONG Flags; - ACCESS_MASK RemainingDesiredAccess; - ACCESS_MASK PreviouslyGrantedAccess; - ACCESS_MASK OriginalDesiredAccess; - SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; - PSECURITY_DESCRIPTOR SecurityDescriptor; - PVOID AuxData; + LUID OperationID; + BOOLEAN SecurityEvaluated; + BOOLEAN GenerateAudit; + BOOLEAN GenerateOnClose; + BOOLEAN PrivilegesAllocated; + ULONG Flags; + ACCESS_MASK RemainingDesiredAccess; + ACCESS_MASK PreviouslyGrantedAccess; + ACCESS_MASK OriginalDesiredAccess; + SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; + PSECURITY_DESCRIPTOR SecurityDescriptor; + PVOID AuxData; union { - INITIAL_PRIVILEGE_SET InitialPrivilegeSet; - PRIVILEGE_SET PrivilegeSet; + INITIAL_PRIVILEGE_SET InitialPrivilegeSet; + PRIVILEGE_SET PrivilegeSet; } Privileges; - BOOLEAN AuditPrivileges; - UNICODE_STRING ObjectName; - UNICODE_STRING ObjectTypeName; + + BOOLEAN AuditPrivileges; + UNICODE_STRING ObjectName; + UNICODE_STRING ObjectTypeName; } ACCESS_STATE, *PACCESS_STATE; -typedef VOID -(NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)( - IN PVOID Vcb, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); #ifndef _NTLSA_IFS_ @@ -2253,8 +1760,8 @@ typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY { typedef struct _SE_ADT_ACCESS_REASON { ACCESS_MASK AccessMask; - ULONG AccessReasons[32]; - ULONG ObjectTypeIndex; + ULONG AccessReasons[32]; + ULONG ObjectTypeIndex; ULONG AccessGranted; PSECURITY_DESCRIPTOR SecurityDescriptor; } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON; @@ -2273,6 +1780,7 @@ typedef struct _SE_ADT_PARAMETER_ARRAY { #endif /* !_NTLSA_AUDIT_ */ #endif /* !_NTLSA_IFS_ */ + /****************************************************************************** * Power Management Support Types * ******************************************************************************/ @@ -2280,112 +1788,99 @@ typedef struct _SE_ADT_PARAMETER_ARRAY { #ifndef _PO_DDK_ #define _PO_DDK_ -#define PO_CB_SYSTEM_POWER_POLICY 0 -#define PO_CB_AC_STATUS 1 -#define PO_CB_BUTTON_COLLISION 2 -#define PO_CB_SYSTEM_STATE_LOCK 3 -#define PO_CB_LID_SWITCH_STATE 4 -#define PO_CB_PROCESSOR_POWER_POLICY 5 - /* Power States/Levels */ typedef enum _SYSTEM_POWER_STATE { - PowerSystemUnspecified = 0, - PowerSystemWorking, - PowerSystemSleeping1, - PowerSystemSleeping2, - PowerSystemSleeping3, - PowerSystemHibernate, - PowerSystemShutdown, - PowerSystemMaximum + PowerSystemUnspecified, + PowerSystemWorking, + PowerSystemSleeping1, + PowerSystemSleeping2, + PowerSystemSleeping3, + PowerSystemHibernate, + PowerSystemShutdown, + PowerSystemMaximum } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum typedef enum _POWER_INFORMATION_LEVEL { - SystemPowerPolicyAc, - SystemPowerPolicyDc, - VerifySystemPolicyAc, - VerifySystemPolicyDc, - SystemPowerCapabilities, - SystemBatteryState, - SystemPowerStateHandler, - ProcessorStateHandler, - SystemPowerPolicyCurrent, - AdministratorPowerPolicy, - SystemReserveHiberFile, - ProcessorInformation, - SystemPowerInformation, - ProcessorStateHandler2, - LastWakeTime, - LastSleepTime, - SystemExecutionState, - SystemPowerStateNotifyHandler, - ProcessorPowerPolicyAc, - ProcessorPowerPolicyDc, - VerifyProcessorPowerPolicyAc, - VerifyProcessorPowerPolicyDc, - ProcessorPowerPolicyCurrent, - SystemPowerStateLogging, - SystemPowerLoggingEntry, - SetPowerSettingValue, - NotifyUserPowerSetting, - PowerInformationLevelUnused0, - PowerInformationLevelUnused1, - SystemVideoState, - TraceApplicationPowerMessage, - TraceApplicationPowerMessageEnd, - ProcessorPerfStates, - ProcessorIdleStates, - ProcessorCap, - SystemWakeSource, - SystemHiberFileInformation, - TraceServicePowerMessage, - ProcessorLoad, - PowerShutdownNotification, - MonitorCapabilities, - SessionPowerInit, - SessionDisplayState, - PowerRequestCreate, - PowerRequestAction, - GetPowerRequestList, - ProcessorInformationEx, - NotifyUserModeLegacyPowerEvent, - GroupPark, - ProcessorIdleDomains, - WakeTimerList, - SystemHiberFileSize, - PowerInformationLevelMaximum + SystemPowerPolicyAc, + SystemPowerPolicyDc, + VerifySystemPolicyAc, + VerifySystemPolicyDc, + SystemPowerCapabilities, + SystemBatteryState, + SystemPowerStateHandler, + ProcessorStateHandler, + SystemPowerPolicyCurrent, + AdministratorPowerPolicy, + SystemReserveHiberFile, + ProcessorInformation, + SystemPowerInformation, + ProcessorStateHandler2, + LastWakeTime, + LastSleepTime, + SystemExecutionState, + SystemPowerStateNotifyHandler, + ProcessorPowerPolicyAc, + ProcessorPowerPolicyDc, + VerifyProcessorPowerPolicyAc, + VerifyProcessorPowerPolicyDc, + ProcessorPowerPolicyCurrent, + SystemPowerStateLogging, + SystemPowerLoggingEntry, + SetPowerSettingValue, + NotifyUserPowerSetting, + PowerInformationLevelUnused0, + PowerInformationLevelUnused1, + SystemVideoState, + TraceApplicationPowerMessage, + TraceApplicationPowerMessageEnd, + ProcessorPerfStates, + ProcessorIdleStates, + ProcessorCap, + SystemWakeSource, + SystemHiberFileInformation, + TraceServicePowerMessage, + ProcessorLoad, + PowerShutdownNotification, + MonitorCapabilities, + SessionPowerInit, + SessionDisplayState, + PowerRequestCreate, + PowerRequestAction, + GetPowerRequestList, + ProcessorInformationEx, + NotifyUserModeLegacyPowerEvent, + GroupPark, + ProcessorIdleDomains, + WakeTimerList, + SystemHiberFileSize, + PowerInformationLevelMaximum } POWER_INFORMATION_LEVEL; typedef enum { - PowerActionNone = 0, - PowerActionReserved, - PowerActionSleep, - PowerActionHibernate, - PowerActionShutdown, - PowerActionShutdownReset, - PowerActionShutdownOff, - PowerActionWarmEject + PowerActionNone, + PowerActionReserved, + PowerActionSleep, + PowerActionHibernate, + PowerActionShutdown, + PowerActionShutdownReset, + PowerActionShutdownOff, + PowerActionWarmEject } POWER_ACTION, *PPOWER_ACTION; typedef enum _DEVICE_POWER_STATE { - PowerDeviceUnspecified = 0, - PowerDeviceD0, - PowerDeviceD1, - PowerDeviceD2, - PowerDeviceD3, - PowerDeviceMaximum + PowerDeviceUnspecified, + PowerDeviceD0, + PowerDeviceD1, + PowerDeviceD2, + PowerDeviceD3, + PowerDeviceMaximum } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; -typedef enum _MONITOR_DISPLAY_STATE { - PowerMonitorOff = 0, - PowerMonitorOn, - PowerMonitorDim -} MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE; - typedef union _POWER_STATE { - SYSTEM_POWER_STATE SystemState; - DEVICE_POWER_STATE DeviceState; + SYSTEM_POWER_STATE SystemState; + DEVICE_POWER_STATE DeviceState; } POWER_STATE, *PPOWER_STATE; typedef enum _POWER_STATE_TYPE { @@ -2393,297 +1888,39 @@ typedef enum _POWER_STATE_TYPE { DevicePowerState } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; -#if (NTDDI_VERSION >= NTDDI_VISTA) -typedef struct _SYSTEM_POWER_STATE_CONTEXT { - union { - struct { - ULONG Reserved1:8; - ULONG TargetSystemState:4; - ULONG EffectiveSystemState:4; - ULONG CurrentSystemState:4; - ULONG IgnoreHibernationPath:1; - ULONG PseudoTransition:1; - ULONG Reserved2:10; - } DUMMYSTRUCTNAME; - ULONG ContextAsUlong; - } DUMMYUNIONNAME; -} SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT; -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) -typedef struct _COUNTED_REASON_CONTEXT { - ULONG Version; - ULONG Flags; - union { - struct { - UNICODE_STRING ResourceFileName; - USHORT ResourceReasonId; - ULONG StringCount; - PUNICODE_STRING ReasonStrings; - } DUMMYSTRUCTNAME; - UNICODE_STRING SimpleString; - } DUMMYUNIONNAME; -} COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT; -#endif - -#define IOCTL_QUERY_DEVICE_POWER_STATE \ - CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_SET_DEVICE_WAKE \ - CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_CANCEL_DEVICE_WAKE \ - CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define ES_SYSTEM_REQUIRED 0x00000001 -#define ES_DISPLAY_REQUIRED 0x00000002 -#define ES_USER_PRESENT 0x00000004 -#define ES_CONTINUOUS 0x80000000 - -typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE; - -typedef enum { - LT_DONT_CARE, - LT_LOWEST_LATENCY -} LATENCY_TIME; - -#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) -#define DIAGNOSTIC_REASON_VERSION 0 -#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001 -#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002 -#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000 -#define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003) -#endif - -#define POWER_REQUEST_CONTEXT_VERSION 0 -#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001 -#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002 - -#define PowerRequestMaximum 3 - -typedef enum _POWER_REQUEST_TYPE { - PowerRequestDisplayRequired, - PowerRequestSystemRequired, - PowerRequestAwayModeRequired -} POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE; - -#if (NTDDI_VERSION >= NTDDI_WINXP) - -#define PDCAP_D0_SUPPORTED 0x00000001 -#define PDCAP_D1_SUPPORTED 0x00000002 -#define PDCAP_D2_SUPPORTED 0x00000004 -#define PDCAP_D3_SUPPORTED 0x00000008 -#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 -#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 -#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 -#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 -#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 - -typedef struct CM_Power_Data_s { - ULONG PD_Size; - DEVICE_POWER_STATE PD_MostRecentPowerState; - ULONG PD_Capabilities; - ULONG PD_D1Latency; - ULONG PD_D2Latency; - ULONG PD_D3Latency; - DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; - SYSTEM_POWER_STATE PD_DeepestSystemWake; -} CM_POWER_DATA, *PCM_POWER_DATA; - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -typedef enum _SYSTEM_POWER_CONDITION { - PoAc, - PoDc, - PoHot, - PoConditionMaximum -} SYSTEM_POWER_CONDITION; - -typedef struct _SET_POWER_SETTING_VALUE { - ULONG Version; - GUID Guid; - SYSTEM_POWER_CONDITION PowerCondition; - ULONG DataLength; - UCHAR Data[ANYSIZE_ARRAY]; -} SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE; - -#define POWER_SETTING_VALUE_VERSION (0x1) - -typedef struct _NOTIFY_USER_POWER_SETTING { - GUID Guid; -} NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING; - -typedef struct _APPLICATIONLAUNCH_SETTING_VALUE { - LARGE_INTEGER ActivationTime; - ULONG Flags; - ULONG ButtonInstanceID; -} APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE; - -typedef enum _POWER_PLATFORM_ROLE { - PlatformRoleUnspecified = 0, - PlatformRoleDesktop, - PlatformRoleMobile, - PlatformRoleWorkstation, - PlatformRoleEnterpriseServer, - PlatformRoleSOHOServer, - PlatformRoleAppliancePC, - PlatformRolePerformanceServer, - PlatformRoleMaximum -} POWER_PLATFORM_ROLE; - #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) typedef struct { - ULONG Granularity; - ULONG Capacity; + ULONG Granularity; + ULONG Capacity; } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE; #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */ #endif /* !_PO_DDK_ */ -#define CORE_PARKING_POLICY_CHANGE_IDEAL 0 -#define CORE_PARKING_POLICY_CHANGE_SINGLE 1 -#define CORE_PARKING_POLICY_CHANGE_ROCKET 2 -#define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET - -DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A ); -DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C ); -DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E ); -DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 ); -DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 ); -DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 ); -DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 ); -DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 ); -DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E ); -DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63 ); -DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64 ); -DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee); -DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B ); -DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA ); -DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb); -DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96); -DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff); -DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8); -DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67 ); -DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47); -DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23 ); -DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 ); -DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E ); -DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63 ); -DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 ); -DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 ); -DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 ); -DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA ); -DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0 ); -DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 ); -DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E ); -DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1); -DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 ); -DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 ); -DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab ); -DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D ); -DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 ); -DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 ); -DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 ); -DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78 ); -DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB ); -DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93 ); -DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 ); -DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 ); -DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B ); -DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 ); -DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 ); -DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 ); -DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 ); -DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 ); -DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC ); -DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C ); -DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb ); -DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c); -DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0); -DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d ); -DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 ); -DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18); -DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6); -DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa); -DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8); -DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5); -DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59); -DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6); -DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad); -DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b); -DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19); -DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 ); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb); -DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1); -DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f); -DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b); -DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f); -DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F); -DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 ); -DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19 ); -DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 ); -DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 ); -DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 ); -DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 ); -DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E ); -DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA ); -DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 ); -DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 ); -DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6 ); - -#define PERFSTATE_POLICY_CHANGE_IDEAL 0 -#define PERFSTATE_POLICY_CHANGE_SINGLE 1 -#define PERFSTATE_POLICY_CHANGE_ROCKET 2 -#define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET - -#define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0 -#define PROCESSOR_PERF_BOOST_POLICY_MAX 100 - -#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0 -#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1 - typedef VOID -(NTAPI REQUEST_POWER_COMPLETE)( +(DDKAPI *PREQUEST_POWER_COMPLETE)( IN struct _DEVICE_OBJECT *DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN struct _IO_STATUS_BLOCK *IoStatus); -typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE; typedef NTSTATUS -(NTAPI POWER_SETTING_CALLBACK)( +(DDKAPI POWER_SETTING_CALLBACK)( IN LPCGUID SettingGuid, IN PVOID Value, IN ULONG ValueLength, IN OUT PVOID Context OPTIONAL); + typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK; +#define PO_CB_SYSTEM_POWER_POLICY 0 +#define PO_CB_AC_STATUS 1 +#define PO_CB_BUTTON_COLLISION 2 +#define PO_CB_SYSTEM_STATE_LOCK 3 +#define PO_CB_LID_SWITCH_STATE 4 +#define PO_CB_PROCESSOR_POWER_POLICY 5 /****************************************************************************** * Configuration Manager Types * @@ -2699,11 +1936,11 @@ typedef int CM_RESOURCE_TYPE; #define CmResourceTypeDma 4 #define CmResourceTypeDeviceSpecific 5 #define CmResourceTypeBusNumber 6 -#define CmResourceTypeNonArbitrated 128 -#define CmResourceTypeConfigData 128 -#define CmResourceTypeDevicePrivate 129 -#define CmResourceTypePcCardConfig 130 -#define CmResourceTypeMfCardConfig 131 +#define CmResourceTypeNonArbitrated 128 +#define CmResourceTypeConfigData 128 +#define CmResourceTypeDevicePrivate 129 +#define CmResourceTypePcCardConfig 130 +#define CmResourceTypeMfCardConfig 131 /* KEY_VALUE_Xxx.Type */ #define REG_NONE 0 @@ -2717,9 +1954,9 @@ typedef int CM_RESOURCE_TYPE; #define REG_MULTI_SZ 7 #define REG_RESOURCE_LIST 8 #define REG_FULL_RESOURCE_DESCRIPTOR 9 -#define REG_RESOURCE_REQUIREMENTS_LIST 10 -#define REG_QWORD 11 -#define REG_QWORD_LITTLE_ENDIAN 11 +#define REG_RESOURCE_REQUIREMENTS_LIST 10 +#define REG_QWORD 11 +#define REG_QWORD_LITTLE_ENDIAN 11 /* Registry Access Rights */ #define KEY_QUERY_VALUE (0x0001) @@ -2775,15 +2012,6 @@ typedef int CM_RESOURCE_TYPE; REG_OPTION_BACKUP_RESTORE |\ REG_OPTION_OPEN_LINK) -#define REG_OPEN_LEGAL_OPTION \ - (REG_OPTION_RESERVED |\ - REG_OPTION_BACKUP_RESTORE |\ - REG_OPTION_OPEN_LINK) - -#define REG_STANDARD_FORMAT 1 -#define REG_LATEST_FORMAT 2 -#define REG_NO_COMPRESSION 4 - /* Key creation/open disposition */ #define REG_CREATED_NEW_KEY (0x00000001L) #define REG_OPENED_EXISTING_KEY (0x00000002L) @@ -2799,7 +2027,6 @@ typedef int CM_RESOURCE_TYPE; #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) #define REG_HIVE_NO_RM (0x00000100L) #define REG_HIVE_SINGLE_LOG (0x00000200L) -#define REG_BOOT_HIVE (0x00000400L) /* Unload Flags */ #define REG_FORCE_UNLOAD 1 @@ -2816,6 +2043,27 @@ typedef int CM_RESOURCE_TYPE; REG_NOTIFY_CHANGE_LAST_SET |\ REG_NOTIFY_CHANGE_SECURITY) +typedef struct _CM_FLOPPY_DEVICE_DATA { + USHORT Version; + USHORT Revision; + CHAR Size[8]; + ULONG MaxDensity; + ULONG MountDensity; + UCHAR StepRateHeadUnloadTime; + UCHAR HeadLoadTime; + UCHAR MotorOffTime; + UCHAR SectorLengthCode; + UCHAR SectorPerTrack; + UCHAR ReadWriteGapLength; + UCHAR DataTransferLength; + UCHAR FormatGapLength; + UCHAR FormatFillCharacter; + UCHAR HeadSettleTime; + UCHAR MotorSettleTime; + UCHAR MaximumTrackValue; + UCHAR DataTransferRate; +} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; + #include typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { UCHAR Type; @@ -2915,15 +2163,15 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { #define CmResourceTypeDeviceSpecific 5 #define CmResourceTypeBusNumber 6 #define CmResourceTypeMemoryLarge 7 -#define CmResourceTypeNonArbitrated 128 -#define CmResourceTypeConfigData 128 -#define CmResourceTypeDevicePrivate 129 -#define CmResourceTypePcCardConfig 130 -#define CmResourceTypeMfCardConfig 131 +#define CmResourceTypeNonArbitrated 128 +#define CmResourceTypeConfigData 128 +#define CmResourceTypeDevicePrivate 129 +#define CmResourceTypePcCardConfig 130 +#define CmResourceTypeMfCardConfig 131 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ typedef enum _CM_SHARE_DISPOSITION { - CmResourceShareUndetermined = 0, + CmResourceShareUndetermined, CmResourceShareDeviceExclusive, CmResourceShareDriverExclusive, CmResourceShareShared @@ -2946,10 +2194,6 @@ typedef enum _CM_SHARE_DISPOSITION { #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004 -#define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001 - -#define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2) - /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 @@ -2963,15 +2207,6 @@ typedef enum _CM_SHARE_DISPOSITION { #define CM_RESOURCE_MEMORY_BAR 0x0080 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100 -#define CM_RESOURCE_MEMORY_LARGE 0x0E00 -#define CM_RESOURCE_MEMORY_LARGE_40 0x0200 -#define CM_RESOURCE_MEMORY_LARGE_48 0x0400 -#define CM_RESOURCE_MEMORY_LARGE_64 0x0800 - -#define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00 -#define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000 -#define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000 - /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ #define CM_RESOURCE_DMA_8 0x0000 #define CM_RESOURCE_DMA_16 0x0001 @@ -2982,92 +2217,33 @@ typedef enum _CM_SHARE_DISPOSITION { #define CM_RESOURCE_DMA_TYPE_B 0x0020 #define CM_RESOURCE_DMA_TYPE_F 0x0040 -typedef struct _DEVICE_FLAGS { - ULONG Failed:1; - ULONG ReadOnly:1; - ULONG Removable:1; - ULONG ConsoleIn:1; - ULONG ConsoleOut:1; - ULONG Input:1; - ULONG Output:1; -} DEVICE_FLAGS, *PDEVICE_FLAGS; - -typedef enum _INTERFACE_TYPE { - InterfaceTypeUndefined = -1, - Internal, - Isa, - Eisa, - MicroChannel, - TurboChannel, - PCIBus, - VMEBus, - NuBus, - PCMCIABus, - CBus, - MPIBus, - MPSABus, - ProcessorInternal, - InternalPowerBus, - PNPISABus, - PNPBus, - Vmcs, - MaximumInterfaceType -} INTERFACE_TYPE, *PINTERFACE_TYPE; - -typedef struct _CM_COMPONENT_INFORMATION { - DEVICE_FLAGS Flags; - ULONG Version; - ULONG Key; - KAFFINITY AffinityMask; -} CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION; - -typedef struct _CM_ROM_BLOCK { - ULONG Address; - ULONG Size; -} CM_ROM_BLOCK, *PCM_ROM_BLOCK; - typedef struct _CM_PARTIAL_RESOURCE_LIST { - USHORT Version; - USHORT Revision; - ULONG Count; + USHORT Version; + USHORT Revision; + ULONG Count; CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { - INTERFACE_TYPE InterfaceType; - ULONG BusNumber; - CM_PARTIAL_RESOURCE_LIST PartialResourceList; + INTERFACE_TYPE InterfaceType; + ULONG BusNumber; + CM_PARTIAL_RESOURCE_LIST PartialResourceList; } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; typedef struct _CM_RESOURCE_LIST { - ULONG Count; - CM_FULL_RESOURCE_DESCRIPTOR List[1]; + ULONG Count; + CM_FULL_RESOURCE_DESCRIPTOR List[1]; } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; -typedef struct _PNP_BUS_INFORMATION { - GUID BusTypeGuid; - INTERFACE_TYPE LegacyBusType; - ULONG BusNumber; -} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; - #include - typedef struct _CM_INT13_DRIVE_PARAMETER { - USHORT DriveSelect; - ULONG MaxCylinders; - USHORT SectorsPerTrack; - USHORT MaxHeads; - USHORT NumberDrives; + USHORT DriveSelect; + ULONG MaxCylinders; + USHORT SectorsPerTrack; + USHORT MaxHeads; + USHORT NumberDrives; } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; -typedef struct _CM_MCA_POS_DATA { - USHORT AdapterId; - UCHAR PosData1; - UCHAR PosData2; - UCHAR PosData3; - UCHAR PosData4; -} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; - typedef struct _CM_PNP_BIOS_DEVICE_NODE { USHORT Size; UCHAR Node; @@ -3091,201 +2267,140 @@ typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK { USHORT RealModeDataBaseAddress; ULONG ProtectedModeDataBaseAddress; } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; - #include typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA { - ULONG BytesPerSector; - ULONG NumberOfCylinders; - ULONG SectorsPerTrack; - ULONG NumberOfHeads; + ULONG BytesPerSector; + ULONG NumberOfCylinders; + ULONG SectorsPerTrack; + ULONG NumberOfHeads; } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA; typedef struct _CM_KEYBOARD_DEVICE_DATA { - USHORT Version; - USHORT Revision; - UCHAR Type; - UCHAR Subtype; - USHORT KeyboardFlags; + USHORT Version; + USHORT Revision; + UCHAR Type; + UCHAR Subtype; + USHORT KeyboardFlags; } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; +typedef struct _CM_MCA_POS_DATA { + USHORT AdapterId; + UCHAR PosData1; + UCHAR PosData2; + UCHAR PosData3; + UCHAR PosData4; +} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; + +#if (NTDDI_VERSION >= NTDDI_WINXP) +typedef struct CM_Power_Data_s { + ULONG PD_Size; + DEVICE_POWER_STATE PD_MostRecentPowerState; + ULONG PD_Capabilities; + ULONG PD_D1Latency; + ULONG PD_D2Latency; + ULONG PD_D3Latency; + DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; + SYSTEM_POWER_STATE PD_DeepestSystemWake; +} CM_POWER_DATA, *PCM_POWER_DATA; + +#define PDCAP_D0_SUPPORTED 0x00000001 +#define PDCAP_D1_SUPPORTED 0x00000002 +#define PDCAP_D2_SUPPORTED 0x00000004 +#define PDCAP_D3_SUPPORTED 0x00000008 +#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 +#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 +#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 +#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 +#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 + +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ + typedef struct _CM_SCSI_DEVICE_DATA { - USHORT Version; - USHORT Revision; - UCHAR HostIdentifier; + USHORT Version; + USHORT Revision; + UCHAR HostIdentifier; } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; -typedef struct _CM_VIDEO_DEVICE_DATA { - USHORT Version; - USHORT Revision; - ULONG VideoClock; -} CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA; - -typedef struct _CM_SONIC_DEVICE_DATA { - USHORT Version; - USHORT Revision; - USHORT DataConfigurationRegister; - UCHAR EthernetAddress[8]; -} CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA; - typedef struct _CM_SERIAL_DEVICE_DATA { - USHORT Version; - USHORT Revision; - ULONG BaudClock; + USHORT Version; + USHORT Revision; + ULONG BaudClock; } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; -typedef struct _CM_MONITOR_DEVICE_DATA { - USHORT Version; - USHORT Revision; - USHORT HorizontalScreenSize; - USHORT VerticalScreenSize; - USHORT HorizontalResolution; - USHORT VerticalResolution; - USHORT HorizontalDisplayTimeLow; - USHORT HorizontalDisplayTime; - USHORT HorizontalDisplayTimeHigh; - USHORT HorizontalBackPorchLow; - USHORT HorizontalBackPorch; - USHORT HorizontalBackPorchHigh; - USHORT HorizontalFrontPorchLow; - USHORT HorizontalFrontPorch; - USHORT HorizontalFrontPorchHigh; - USHORT HorizontalSyncLow; - USHORT HorizontalSync; - USHORT HorizontalSyncHigh; - USHORT VerticalBackPorchLow; - USHORT VerticalBackPorch; - USHORT VerticalBackPorchHigh; - USHORT VerticalFrontPorchLow; - USHORT VerticalFrontPorch; - USHORT VerticalFrontPorchHigh; - USHORT VerticalSyncLow; - USHORT VerticalSync; - USHORT VerticalSyncHigh; -} CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA; - -typedef struct _CM_FLOPPY_DEVICE_DATA { - USHORT Version; - USHORT Revision; - CHAR Size[8]; - ULONG MaxDensity; - ULONG MountDensity; - UCHAR StepRateHeadUnloadTime; - UCHAR HeadLoadTime; - UCHAR MotorOffTime; - UCHAR SectorLengthCode; - UCHAR SectorPerTrack; - UCHAR ReadWriteGapLength; - UCHAR DataTransferLength; - UCHAR FormatGapLength; - UCHAR FormatFillCharacter; - UCHAR HeadSettleTime; - UCHAR MotorSettleTime; - UCHAR MaximumTrackValue; - UCHAR DataTransferRate; -} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; - typedef enum _KEY_INFORMATION_CLASS { KeyBasicInformation, KeyNodeInformation, KeyFullInformation, KeyNameInformation, KeyCachedInformation, - KeyFlagsInformation, - KeyVirtualizationInformation, - KeyHandleTagsInformation, - MaxKeyInfoClass + KeyFlagsInformation } KEY_INFORMATION_CLASS; typedef struct _KEY_BASIC_INFORMATION { - LARGE_INTEGER LastWriteTime; - ULONG TitleIndex; - ULONG NameLength; - WCHAR Name[1]; + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG NameLength; + WCHAR Name[1]; } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; -typedef struct _KEY_CONTROL_FLAGS_INFORMATION { - ULONG ControlFlags; -} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION; - typedef struct _KEY_FULL_INFORMATION { - LARGE_INTEGER LastWriteTime; - ULONG TitleIndex; - ULONG ClassOffset; - ULONG ClassLength; - ULONG SubKeys; - ULONG MaxNameLen; - ULONG MaxClassLen; - ULONG Values; - ULONG MaxValueNameLen; - ULONG MaxValueDataLen; - WCHAR Class[1]; + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG MaxClassLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + WCHAR Class[1]; } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; -typedef struct _KEY_HANDLE_TAGS_INFORMATION { - ULONG HandleTags; -} KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION; - typedef struct _KEY_NODE_INFORMATION { - LARGE_INTEGER LastWriteTime; - ULONG TitleIndex; - ULONG ClassOffset; - ULONG ClassLength; - ULONG NameLength; - WCHAR Name[1]; + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG NameLength; + WCHAR Name[1]; } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; -typedef enum _KEY_SET_INFORMATION_CLASS { - KeyWriteTimeInformation, - KeyWow64FlagsInformation, - KeyControlFlagsInformation, - KeySetVirtualizationInformation, - KeySetDebugInformation, - KeySetHandleTagsInformation, - MaxKeySetInfoClass -} KEY_SET_INFORMATION_CLASS; - -typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION { - ULONG VirtualTarget:1; - ULONG VirtualStore:1; - ULONG VirtualSource:1; - ULONG Reserved:29; -} KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION; - typedef struct _KEY_VALUE_BASIC_INFORMATION { - ULONG TitleIndex; - ULONG Type; - ULONG NameLength; - WCHAR Name[1]; + ULONG TitleIndex; + ULONG Type; + ULONG NameLength; + WCHAR Name[1]; } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; typedef struct _KEY_VALUE_FULL_INFORMATION { - ULONG TitleIndex; - ULONG Type; - ULONG DataOffset; - ULONG DataLength; - ULONG NameLength; - WCHAR Name[1]; + ULONG TitleIndex; + ULONG Type; + ULONG DataOffset; + ULONG DataLength; + ULONG NameLength; + WCHAR Name[1]; } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; typedef struct _KEY_VALUE_PARTIAL_INFORMATION { - ULONG TitleIndex; - ULONG Type; - ULONG DataLength; - UCHAR Data[1]; + ULONG TitleIndex; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { - ULONG Type; - ULONG DataLength; - UCHAR Data[1]; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; typedef struct _KEY_VALUE_ENTRY { - PUNICODE_STRING ValueName; - ULONG DataLength; - ULONG DataOffset; - ULONG Type; + PUNICODE_STRING ValueName; + ULONG DataLength; + ULONG DataOffset; + ULONG Type; } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; typedef enum _KEY_VALUE_INFORMATION_CLASS { @@ -3296,14 +2411,20 @@ typedef enum _KEY_VALUE_INFORMATION_CLASS { KeyValuePartialInformationAlign64 } KEY_VALUE_INFORMATION_CLASS; -typedef struct _KEY_WOW64_FLAGS_INFORMATION { - ULONG UserFlags; -} KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION; - typedef struct _KEY_WRITE_TIME_INFORMATION { - LARGE_INTEGER LastWriteTime; + LARGE_INTEGER LastWriteTime; } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; +typedef enum _KEY_SET_INFORMATION_CLASS { + KeyWriteTimeInformation, + KeyWow64FlagsInformation, + KeyControlFlagsInformation, + KeySetVirtualizationInformation, + KeySetDebugInformation, + KeySetHandleTagsInformation, + MaxKeySetInfoClass +} KEY_SET_INFORMATION_CLASS; + typedef enum _REG_NOTIFY_CLASS { RegNtDeleteKey, RegNtPreDeleteKey = RegNtDeleteKey, @@ -3367,11 +2488,11 @@ typedef enum _REG_NOTIFY_CLASS { } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS; typedef NTSTATUS -(NTAPI EX_CALLBACK_FUNCTION)( - IN PVOID CallbackContext, - IN PVOID Argument1, - IN PVOID Argument2); -typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION; +(NTAPI *PEX_CALLBACK_FUNCTION)( + IN PVOID CallbackContext, + IN PVOID Argument1, + IN PVOID Argument2 +); typedef struct _REG_DELETE_KEY_INFORMATION { PVOID Object; @@ -3473,54 +2594,6 @@ typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION { PVOID Reserved; } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION; -typedef struct _REG_RENAME_KEY_INFORMATION { - PVOID Object; - PUNICODE_STRING NewName; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION; - -typedef struct _REG_CREATE_KEY_INFORMATION { - PUNICODE_STRING CompleteName; - PVOID RootObject; - PVOID ObjectType; - ULONG CreateOptions; - PUNICODE_STRING Class; - PVOID SecurityDescriptor; - PVOID SecurityQualityOfService; - ACCESS_MASK DesiredAccess; - ACCESS_MASK GrantedAccess; - PULONG Disposition; - PVOID *ResultObject; - PVOID CallContext; - PVOID RootObjectContext; - PVOID Transaction; - PVOID Reserved; -} REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION; - -typedef struct _REG_CREATE_KEY_INFORMATION_V1 { - PUNICODE_STRING CompleteName; - PVOID RootObject; - PVOID ObjectType; - ULONG Options; - PUNICODE_STRING Class; - PVOID SecurityDescriptor; - PVOID SecurityQualityOfService; - ACCESS_MASK DesiredAccess; - ACCESS_MASK GrantedAccess; - PULONG Disposition; - PVOID *ResultObject; - PVOID CallContext; - PVOID RootObjectContext; - PVOID Transaction; - ULONG_PTR Version; - PUNICODE_STRING RemainingName; - ULONG Wow64Flags; - ULONG Attributes; - KPROCESSOR_MODE CheckAccessMode; -} REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1; - typedef struct _REG_PRE_CREATE_KEY_INFORMATION { PUNICODE_STRING CompleteName; } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;; @@ -3548,180 +2621,151 @@ typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION { PVOID Reserved; } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION; -#if (NTDDI_VERSION >= NTDDI_VISTA) - -typedef struct _REG_LOAD_KEY_INFORMATION { - PVOID Object; - PUNICODE_STRING KeyName; - PUNICODE_STRING SourceFile; - ULONG Flags; - PVOID TrustClassObject; - PVOID UserEvent; - ACCESS_MASK DesiredAccess; - PHANDLE RootHandle; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION; - -typedef struct _REG_UNLOAD_KEY_INFORMATION { - PVOID Object; - PVOID UserEvent; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION; - -typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION { - PVOID Object; - PVOID ObjectContext; - PVOID Reserved; -} REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION; - -typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION { - PVOID Object; - PSECURITY_INFORMATION SecurityInformation; - PSECURITY_DESCRIPTOR SecurityDescriptor; - PULONG Length; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION; - -typedef struct _REG_SET_KEY_SECURITY_INFORMATION { - PVOID Object; - PSECURITY_INFORMATION SecurityInformation; - PSECURITY_DESCRIPTOR SecurityDescriptor; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION; - -typedef struct _REG_RESTORE_KEY_INFORMATION { - PVOID Object; - HANDLE FileHandle; - ULONG Flags; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION; - -typedef struct _REG_SAVE_KEY_INFORMATION { - PVOID Object; - HANDLE FileHandle; - ULONG Format; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION; - -typedef struct _REG_REPLACE_KEY_INFORMATION { - PVOID Object; - PUNICODE_STRING OldFileName; - PUNICODE_STRING NewFileName; - PVOID CallContext; - PVOID ObjectContext; - PVOID Reserved; -} REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION; - -#endif /* NTDDI_VERSION >= NTDDI_VISTA */ - -#define SERVICE_KERNEL_DRIVER 0x00000001 -#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 -#define SERVICE_ADAPTER 0x00000004 -#define SERVICE_RECOGNIZER_DRIVER 0x00000008 - -#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \ - SERVICE_FILE_SYSTEM_DRIVER | \ - SERVICE_RECOGNIZER_DRIVER) - -#define SERVICE_WIN32_OWN_PROCESS 0x00000010 -#define SERVICE_WIN32_SHARE_PROCESS 0x00000020 -#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \ - SERVICE_WIN32_SHARE_PROCESS) - -#define SERVICE_INTERACTIVE_PROCESS 0x00000100 - -#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \ - SERVICE_ADAPTER | \ - SERVICE_DRIVER | \ - SERVICE_INTERACTIVE_PROCESS) - -/* Service Start Types */ -#define SERVICE_BOOT_START 0x00000000 -#define SERVICE_SYSTEM_START 0x00000001 -#define SERVICE_AUTO_START 0x00000002 -#define SERVICE_DEMAND_START 0x00000003 -#define SERVICE_DISABLED 0x00000004 - -#define SERVICE_ERROR_IGNORE 0x00000000 -#define SERVICE_ERROR_NORMAL 0x00000001 -#define SERVICE_ERROR_SEVERE 0x00000002 -#define SERVICE_ERROR_CRITICAL 0x00000003 - -typedef enum _CM_SERVICE_NODE_TYPE { - DriverType = SERVICE_KERNEL_DRIVER, - FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, - Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, - Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, - AdapterType = SERVICE_ADAPTER, - RecognizerType = SERVICE_RECOGNIZER_DRIVER -} SERVICE_NODE_TYPE; - -typedef enum _CM_SERVICE_LOAD_TYPE { - BootLoad = SERVICE_BOOT_START, - SystemLoad = SERVICE_SYSTEM_START, - AutoLoad = SERVICE_AUTO_START, - DemandLoad = SERVICE_DEMAND_START, - DisableLoad = SERVICE_DISABLED -} SERVICE_LOAD_TYPE; - -typedef enum _CM_ERROR_CONTROL_TYPE { - IgnoreError = SERVICE_ERROR_IGNORE, - NormalError = SERVICE_ERROR_NORMAL, - SevereError = SERVICE_ERROR_SEVERE, - CriticalError = SERVICE_ERROR_CRITICAL -} SERVICE_ERROR_TYPE; - -#define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001 -#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002 -#define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004 - -#define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \ - CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \ - CM_SERVICE_USB_DISK_BOOT_LOAD) - /****************************************************************************** * I/O Manager Types * ******************************************************************************/ -#define WDM_MAJORVERSION 0x06 -#define WDM_MINORVERSION 0x00 + /* PCI_COMMON_CONFIG.Command */ +#define PCI_ENABLE_IO_SPACE 0x0001 +#define PCI_ENABLE_MEMORY_SPACE 0x0002 +#define PCI_ENABLE_BUS_MASTER 0x0004 +#define PCI_ENABLE_SPECIAL_CYCLES 0x0008 +#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 +#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 +#define PCI_ENABLE_PARITY 0x0040 +#define PCI_ENABLE_WAIT_CYCLE 0x0080 +#define PCI_ENABLE_SERR 0x0100 +#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 +#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 -#if defined(_WIN64) +/* PCI_COMMON_CONFIG.Status */ +#define PCI_STATUS_INTERRUPT_PENDING 0x0008 +#define PCI_STATUS_CAPABILITIES_LIST 0x0010 +#define PCI_STATUS_66MHZ_CAPABLE 0x0020 +#define PCI_STATUS_UDF_SUPPORTED 0x0040 +#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 +#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 +#define PCI_STATUS_DEVSEL 0x0600 +#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 +#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 +#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 +#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 +#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 -#ifndef USE_DMA_MACROS -#define USE_DMA_MACROS -#endif +/* PCI_COMMON_CONFIG.HeaderType */ +#define PCI_MULTIFUNCTION 0x80 +#define PCI_DEVICE_TYPE 0x00 +#define PCI_BRIDGE_TYPE 0x01 +#define PCI_CARDBUS_BRIDGE_TYPE 0x02 -#ifndef NO_LEGACY_DRIVERS -#define NO_LEGACY_DRIVERS -#endif +#define PCI_CONFIGURATION_TYPE(PciData) \ + (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) -#endif /* defined(_WIN64) */ +#define PCI_MULTIFUNCTION_DEVICE(PciData) \ + ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) -#define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS +/* PCI device classes */ +#define PCI_CLASS_PRE_20 0x00 +#define PCI_CLASS_MASS_STORAGE_CTLR 0x01 +#define PCI_CLASS_NETWORK_CTLR 0x02 +#define PCI_CLASS_DISPLAY_CTLR 0x03 +#define PCI_CLASS_MULTIMEDIA_DEV 0x04 +#define PCI_CLASS_MEMORY_CTLR 0x05 +#define PCI_CLASS_BRIDGE_DEV 0x06 +#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 +#define PCI_CLASS_BASE_SYSTEM_DEV 0x08 +#define PCI_CLASS_INPUT_DEV 0x09 +#define PCI_CLASS_DOCKING_STATION 0x0a +#define PCI_CLASS_PROCESSOR 0x0b +#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c +#define PCI_CLASS_WIRELESS_CTLR 0x0d +#define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e +#define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f +#define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10 +#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 -#define CONNECT_FULLY_SPECIFIED 0x1 -#define CONNECT_LINE_BASED 0x2 -#define CONNECT_MESSAGE_BASED 0x3 -#define CONNECT_FULLY_SPECIFIED_GROUP 0x4 -#define CONNECT_CURRENT_VERSION 0x4 +/* PCI device subclasses for class 0 */ +#define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 +#define PCI_SUBCLASS_PRE_20_VGA 0x01 + +/* PCI device subclasses for class 1 (mass storage controllers)*/ +#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 +#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 +#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 +#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 +#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 +#define PCI_SUBCLASS_MSC_OTHER 0x80 + +/* PCI device subclasses for class 2 (network controllers)*/ +#define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 +#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 +#define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 +#define PCI_SUBCLASS_NET_ATM_CTLR 0x03 +#define PCI_SUBCLASS_NET_ISDN_CTLR 0x04 +#define PCI_SUBCLASS_NET_OTHER 0x80 + +/* PCI device subclasses for class 3 (display controllers)*/ +#define PCI_SUBCLASS_VID_VGA_CTLR 0x00 +#define PCI_SUBCLASS_VID_XGA_CTLR 0x01 +#define PCI_SUBCLASS_VID_3D_CTLR 0x02 +#define PCI_SUBCLASS_VID_OTHER 0x80 + +/* PCI device subclasses for class 4 (multimedia device)*/ +#define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 +#define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 +#define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 +#define PCI_SUBCLASS_MM_OTHER 0x80 + +/* PCI device subclasses for class 5 (memory controller)*/ +#define PCI_SUBCLASS_MEM_RAM 0x00 +#define PCI_SUBCLASS_MEM_FLASH 0x01 +#define PCI_SUBCLASS_MEM_OTHER 0x80 + +/* PCI device subclasses for class 6 (bridge device)*/ +#define PCI_SUBCLASS_BR_HOST 0x00 +#define PCI_SUBCLASS_BR_ISA 0x01 +#define PCI_SUBCLASS_BR_EISA 0x02 +#define PCI_SUBCLASS_BR_MCA 0x03 +#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 +#define PCI_SUBCLASS_BR_PCMCIA 0x05 +#define PCI_SUBCLASS_BR_NUBUS 0x06 +#define PCI_SUBCLASS_BR_CARDBUS 0x07 +#define PCI_SUBCLASS_BR_RACEWAY 0x08 +#define PCI_SUBCLASS_BR_OTHER 0x80 + +/* PCI device subclasses for class C (serial bus controller)*/ +#define PCI_SUBCLASS_SB_IEEE1394 0x00 +#define PCI_SUBCLASS_SB_ACCESS 0x01 +#define PCI_SUBCLASS_SB_SSA 0x02 +#define PCI_SUBCLASS_SB_USB 0x03 +#define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 +#define PCI_SUBCLASS_SB_SMBUS 0x05 + +#define PCI_MAX_DEVICES 32 +#define PCI_MAX_FUNCTION 8 +#define PCI_MAX_BRIDGE_NUMBER 0xFF +#define PCI_INVALID_VENDORID 0xFFFF +#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) + +#define PCI_ADDRESS_IO_SPACE 0x00000001 +#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 +#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 +#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc +#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 +#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 + +#define PCI_TYPE_32BIT 0 +#define PCI_TYPE_20BIT 2 +#define PCI_TYPE_64BIT 4 #define POOL_COLD_ALLOCATION 256 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16 +#define PCI_TYPE0_ADDRESSES 6 +#define PCI_TYPE1_ADDRESSES 2 +#define PCI_TYPE2_ADDRESSES 5 + #define IO_TYPE_ADAPTER 1 #define IO_TYPE_CONTROLLER 2 #define IO_TYPE_DEVICE 3 @@ -3745,6 +2789,47 @@ typedef enum _CM_ERROR_CONTROL_TYPE { #define IO_RESOURCE_DEFAULT 0x02 #define IO_RESOURCE_ALTERNATIVE 0x08 +/* DEVICE_OBJECT.Flags */ +#define DO_VERIFY_VOLUME 0x00000002 +#define DO_BUFFERED_IO 0x00000004 +#define DO_EXCLUSIVE 0x00000008 +#define DO_DIRECT_IO 0x00000010 +#define DO_MAP_IO_BUFFER 0x00000020 +#define DO_DEVICE_INITIALIZING 0x00000080 +#define DO_SHUTDOWN_REGISTERED 0x00000800 +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 +#define DO_POWER_PAGABLE 0x00002000 +#define DO_POWER_INRUSH 0x00004000 + +/* DEVICE_OBJECT.Characteristics */ +#define FILE_REMOVABLE_MEDIA 0x00000001 +#define FILE_READ_ONLY_DEVICE 0x00000002 +#define FILE_FLOPPY_DISKETTE 0x00000004 +#define FILE_WRITE_ONCE_MEDIA 0x00000008 +#define FILE_REMOTE_DEVICE 0x00000010 +#define FILE_DEVICE_IS_MOUNTED 0x00000020 +#define FILE_VIRTUAL_VOLUME 0x00000040 +#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 +#define FILE_DEVICE_SECURE_OPEN 0x00000100 +#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 +#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 +#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 + +/* DEVICE_OBJECT.AlignmentRequirement */ +#define FILE_BYTE_ALIGNMENT 0x00000000 +#define FILE_WORD_ALIGNMENT 0x00000001 +#define FILE_LONG_ALIGNMENT 0x00000003 +#define FILE_QUAD_ALIGNMENT 0x00000007 +#define FILE_OCTA_ALIGNMENT 0x0000000f +#define FILE_32_BYTE_ALIGNMENT 0x0000001f +#define FILE_64_BYTE_ALIGNMENT 0x0000003f +#define FILE_128_BYTE_ALIGNMENT 0x0000007f +#define FILE_256_BYTE_ALIGNMENT 0x000000ff +#define FILE_512_BYTE_ALIGNMENT 0x000001ff + +/* DEVICE_OBJECT.DeviceType */ +#define DEVICE_TYPE ULONG + #define FILE_DEVICE_BEEP 0x00000001 #define FILE_DEVICE_CD_ROM 0x00000002 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 @@ -3813,44 +2898,6 @@ typedef enum _CM_ERROR_CONTROL_TYPE { #define FILE_DEVICE_BIOMETRIC 0x00000044 #define FILE_DEVICE_PMI 0x00000045 -#if defined(NT_PROCESSOR_GROUPS) - -typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; - -typedef enum _IRQ_DEVICE_POLICY_USHORT { - IrqPolicyMachineDefault = 0, - IrqPolicyAllCloseProcessors = 1, - IrqPolicyOneCloseProcessor = 2, - IrqPolicyAllProcessorsInMachine = 3, - IrqPolicyAllProcessorsInGroup = 3, - IrqPolicySpecifiedProcessors = 4, - IrqPolicySpreadMessagesAcrossAllProcessors = 5}; - -#else /* defined(NT_PROCESSOR_GROUPS) */ - -typedef enum _IRQ_DEVICE_POLICY { - IrqPolicyMachineDefault = 0, - IrqPolicyAllCloseProcessors, - IrqPolicyOneCloseProcessor, - IrqPolicyAllProcessorsInMachine, - IrqPolicySpecifiedProcessors, - IrqPolicySpreadMessagesAcrossAllProcessors -} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; - -#endif - -typedef enum _IRQ_PRIORITY { - IrqPriorityUndefined = 0, - IrqPriorityLow, - IrqPriorityNormal, - IrqPriorityHigh -} IRQ_PRIORITY, *PIRQ_PRIORITY; - -typedef enum _IRQ_GROUP_POLICY { - GroupAffinityAllGroupZero = 0, - GroupAffinityDontCare -} IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY; - #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) typedef struct _OBJECT_HANDLE_INFORMATION { @@ -3859,20 +2906,24 @@ typedef struct _OBJECT_HANDLE_INFORMATION { } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; typedef struct _CLIENT_ID { - HANDLE UniqueProcess; - HANDLE UniqueThread; + HANDLE UniqueProcess; + HANDLE UniqueThread; } CLIENT_ID, *PCLIENT_ID; +typedef VOID +(DDKAPI *PKSTART_ROUTINE)( + IN PVOID StartContext); + typedef struct _VPB { - CSHORT Type; - CSHORT Size; - USHORT Flags; - USHORT VolumeLabelLength; - struct _DEVICE_OBJECT *DeviceObject; - struct _DEVICE_OBJECT *RealDevice; - ULONG SerialNumber; - ULONG ReferenceCount; - WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; + CSHORT Type; + CSHORT Size; + USHORT Flags; + USHORT VolumeLabelLength; + struct _DEVICE_OBJECT *DeviceObject; + struct _DEVICE_OBJECT *RealDevice; + ULONG SerialNumber; + ULONG ReferenceCount; + WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; } VPB, *PVPB; typedef enum _IO_ALLOCATION_ACTION { @@ -3882,370 +2933,190 @@ typedef enum _IO_ALLOCATION_ACTION { } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; typedef IO_ALLOCATION_ACTION -(NTAPI DRIVER_CONTROL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID MapRegisterBase, - IN PVOID Context); -typedef DRIVER_CONTROL *PDRIVER_CONTROL; +(DDKAPI *PDRIVER_CONTROL)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN PVOID MapRegisterBase, + IN PVOID Context); typedef struct _WAIT_CONTEXT_BLOCK { - KDEVICE_QUEUE_ENTRY WaitQueueEntry; - PDRIVER_CONTROL DeviceRoutine; - PVOID DeviceContext; - ULONG NumberOfMapRegisters; - PVOID DeviceObject; - PVOID CurrentIrp; - PKDPC BufferChainingDpc; + KDEVICE_QUEUE_ENTRY WaitQueueEntry; + PDRIVER_CONTROL DeviceRoutine; + PVOID DeviceContext; + ULONG NumberOfMapRegisters; + PVOID DeviceObject; + PVOID CurrentIrp; + PKDPC BufferChainingDpc; } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; -/* DEVICE_OBJECT.Flags */ -#define DO_VERIFY_VOLUME 0x00000002 -#define DO_BUFFERED_IO 0x00000004 -#define DO_EXCLUSIVE 0x00000008 -#define DO_DIRECT_IO 0x00000010 -#define DO_MAP_IO_BUFFER 0x00000020 -#define DO_DEVICE_INITIALIZING 0x00000080 -#define DO_SHUTDOWN_REGISTERED 0x00000800 -#define DO_BUS_ENUMERATED_DEVICE 0x00001000 -#define DO_POWER_PAGABLE 0x00002000 -#define DO_POWER_INRUSH 0x00004000 - -/* DEVICE_OBJECT.Characteristics */ -#define FILE_REMOVABLE_MEDIA 0x00000001 -#define FILE_READ_ONLY_DEVICE 0x00000002 -#define FILE_FLOPPY_DISKETTE 0x00000004 -#define FILE_WRITE_ONCE_MEDIA 0x00000008 -#define FILE_REMOTE_DEVICE 0x00000010 -#define FILE_DEVICE_IS_MOUNTED 0x00000020 -#define FILE_VIRTUAL_VOLUME 0x00000040 -#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 -#define FILE_DEVICE_SECURE_OPEN 0x00000100 -#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 -#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 -#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 - -/* DEVICE_OBJECT.AlignmentRequirement */ -#define FILE_BYTE_ALIGNMENT 0x00000000 -#define FILE_WORD_ALIGNMENT 0x00000001 -#define FILE_LONG_ALIGNMENT 0x00000003 -#define FILE_QUAD_ALIGNMENT 0x00000007 -#define FILE_OCTA_ALIGNMENT 0x0000000f -#define FILE_32_BYTE_ALIGNMENT 0x0000001f -#define FILE_64_BYTE_ALIGNMENT 0x0000003f -#define FILE_128_BYTE_ALIGNMENT 0x0000007f -#define FILE_256_BYTE_ALIGNMENT 0x000000ff -#define FILE_512_BYTE_ALIGNMENT 0x000001ff - -/* DEVICE_OBJECT.DeviceType */ -#define DEVICE_TYPE ULONG - typedef struct _DEVICE_OBJECT { - CSHORT Type; - USHORT Size; - LONG ReferenceCount; - struct _DRIVER_OBJECT *DriverObject; - struct _DEVICE_OBJECT *NextDevice; - struct _DEVICE_OBJECT *AttachedDevice; - struct _IRP *CurrentIrp; - PIO_TIMER Timer; - ULONG Flags; - ULONG Characteristics; - volatile PVPB Vpb; - PVOID DeviceExtension; - DEVICE_TYPE DeviceType; - CCHAR StackSize; + CSHORT Type; + USHORT Size; + LONG ReferenceCount; + struct _DRIVER_OBJECT *DriverObject; + struct _DEVICE_OBJECT *NextDevice; + struct _DEVICE_OBJECT *AttachedDevice; + struct _IRP *CurrentIrp; + PIO_TIMER Timer; + ULONG Flags; + ULONG Characteristics; + volatile PVPB Vpb; + PVOID DeviceExtension; + DEVICE_TYPE DeviceType; + CCHAR StackSize; union { - LIST_ENTRY ListEntry; - WAIT_CONTEXT_BLOCK Wcb; + LIST_ENTRY ListEntry; + WAIT_CONTEXT_BLOCK Wcb; } Queue; - ULONG AlignmentRequirement; - KDEVICE_QUEUE DeviceQueue; - KDPC Dpc; - ULONG ActiveThreadCount; - PSECURITY_DESCRIPTOR SecurityDescriptor; - KEVENT DeviceLock; - USHORT SectorSize; - USHORT Spare1; - struct _DEVOBJ_EXTENSION *DeviceObjectExtension; - PVOID Reserved; + ULONG AlignmentRequirement; + KDEVICE_QUEUE DeviceQueue; + KDPC Dpc; + ULONG ActiveThreadCount; + PSECURITY_DESCRIPTOR SecurityDescriptor; + KEVENT DeviceLock; + USHORT SectorSize; + USHORT Spare1; + struct _DEVOBJ_EXTENSION *DeviceObjectExtension; + PVOID Reserved; } DEVICE_OBJECT, *PDEVICE_OBJECT; -typedef enum _IO_SESSION_STATE { - IoSessionStateCreated = 1, - IoSessionStateInitialized, - IoSessionStateConnected, - IoSessionStateDisconnected, - IoSessionStateDisconnectedLoggedOn, - IoSessionStateLoggedOn, - IoSessionStateLoggedOff, - IoSessionStateTerminated, - IoSessionStateMax -} IO_SESSION_STATE, *PIO_SESSION_STATE; - -typedef enum _IO_COMPLETION_ROUTINE_RESULT { - ContinueCompletion = STATUS_CONTINUE_COMPLETION, - StopCompletion = STATUS_MORE_PROCESSING_REQUIRED -} IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT; - -typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY { - PHYSICAL_ADDRESS MessageAddress; - KAFFINITY TargetProcessorSet; - PKINTERRUPT InterruptObject; - ULONG MessageData; - ULONG Vector; - KIRQL Irql; - KINTERRUPT_MODE Mode; - KINTERRUPT_POLARITY Polarity; -} IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY; - -typedef struct _IO_INTERRUPT_MESSAGE_INFO { - KIRQL UnifiedIrql; - ULONG MessageCount; - IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1]; -} IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO; - -typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - OUT PKINTERRUPT *InterruptObject; - IN PKSERVICE_ROUTINE ServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql; - IN BOOLEAN FloatingSave; - IN BOOLEAN ShareVector; - IN ULONG Vector; - IN KIRQL Irql; - IN KINTERRUPT_MODE InterruptMode; - IN KAFFINITY ProcessorEnableMask; - IN USHORT Group; -} IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS; - -typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - OUT PKINTERRUPT *InterruptObject; - IN PKSERVICE_ROUTINE ServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql OPTIONAL; - IN BOOLEAN FloatingSave; -} IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS; - -typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - union { - OUT PVOID *Generic; - OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; - OUT PKINTERRUPT *InterruptObject; - } ConnectionContext; - IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql OPTIONAL; - IN BOOLEAN FloatingSave; - IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL; -} IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS; - -typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { - IN OUT ULONG Version; - union { - IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified; - IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased; - IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased; - }; -} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS; - -typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS { - IN ULONG Version; - union { - IN PVOID Generic; - IN PKINTERRUPT InterruptObject; - IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; - } ConnectionContext; -} IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS; - -typedef enum _IO_ACCESS_TYPE { - ReadAccess, - WriteAccess, - ModifyAccess -} IO_ACCESS_TYPE; - -typedef enum _IO_ACCESS_MODE { - SequentialAccess, - RandomAccess -} IO_ACCESS_MODE; - -typedef enum _IO_CONTAINER_NOTIFICATION_CLASS { - IoSessionStateNotification, - IoMaxContainerNotificationClass -} IO_CONTAINER_NOTIFICATION_CLASS; - -typedef struct _IO_SESSION_STATE_NOTIFICATION { - ULONG Size; - ULONG Flags; - PVOID IoObject; - ULONG EventMask; - PVOID Context; -} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION; - -typedef enum _IO_CONTAINER_INFORMATION_CLASS { - IoSessionStateInformation, - IoMaxContainerInformationClass -} IO_CONTAINER_INFORMATION_CLASS; - -typedef struct _IO_SESSION_STATE_INFORMATION { - ULONG SessionId; - IO_SESSION_STATE SessionState; - BOOLEAN LocalSession; -} IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION; - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -typedef NTSTATUS -(NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)( - VOID); - -typedef NTSTATUS -(NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( - IN PVOID SessionObject, - IN PVOID IoObject, - IN ULONG Event, - IN PVOID Context, - IN PVOID NotificationPayload, - IN ULONG PayloadLength); - -typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION; - -#endif - typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { - BOOLEAN Removed; - BOOLEAN Reserved[3]; - volatile LONG IoCount; - KEVENT RemoveEvent; + BOOLEAN Removed; + BOOLEAN Reserved[3]; + volatile LONG IoCount; + KEVENT RemoveEvent; } IO_REMOVE_LOCK_COMMON_BLOCK; typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { - LONG Signature; - LONG HighWatermark; - LONGLONG MaxLockedTicks; - LONG AllocateTag; - LIST_ENTRY LockList; - KSPIN_LOCK Spin; - volatile LONG LowMemoryCount; - ULONG Reserved1[4]; - PVOID Reserved2; - PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; + LONG Signature; + LONG HighWatermark; + LONGLONG MaxLockedTicks; + LONG AllocateTag; + LIST_ENTRY LockList; + KSPIN_LOCK Spin; + volatile LONG LowMemoryCount; + ULONG Reserved1[4]; + PVOID Reserved2; + PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; } IO_REMOVE_LOCK_DBG_BLOCK; typedef struct _IO_REMOVE_LOCK { - IO_REMOVE_LOCK_COMMON_BLOCK Common; + IO_REMOVE_LOCK_COMMON_BLOCK Common; #if DBG - IO_REMOVE_LOCK_DBG_BLOCK Dbg; + IO_REMOVE_LOCK_DBG_BLOCK Dbg; #endif } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; typedef struct _IO_WORKITEM *PIO_WORKITEM; typedef VOID -(NTAPI IO_WORKITEM_ROUTINE)( - IN PDEVICE_OBJECT DeviceObject, - IN PVOID Context); +(DDKAPI IO_WORKITEM_ROUTINE)( + IN PDEVICE_OBJECT DeviceObject, + IN PVOID Context); typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; -typedef VOID -(NTAPI IO_WORKITEM_ROUTINE_EX)( - IN PVOID IoObject, - IN PVOID Context OPTIONAL, - IN PIO_WORKITEM IoWorkItem); -typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX; - typedef struct _SHARE_ACCESS { - ULONG OpenCount; - ULONG Readers; - ULONG Writers; - ULONG Deleters; - ULONG SharedRead; - ULONG SharedWrite; - ULONG SharedDelete; + ULONG OpenCount; + ULONG Readers; + ULONG Writers; + ULONG Deleters; + ULONG SharedRead; + ULONG SharedWrite; + ULONG SharedDelete; } SHARE_ACCESS, *PSHARE_ACCESS; /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as inheritance, even from a struct renders the type non-POD. So we use this hack */ #define PCI_COMMON_HEADER_LAYOUT \ - USHORT VendorID; \ - USHORT DeviceID; \ - USHORT Command; \ - USHORT Status; \ - UCHAR RevisionID; \ - UCHAR ProgIf; \ - UCHAR SubClass; \ - UCHAR BaseClass; \ - UCHAR CacheLineSize; \ - UCHAR LatencyTimer; \ - UCHAR HeaderType; \ - UCHAR BIST; \ + USHORT VendorID; \ + USHORT DeviceID; \ + USHORT Command; \ + USHORT Status; \ + UCHAR RevisionID; \ + UCHAR ProgIf; \ + UCHAR SubClass; \ + UCHAR BaseClass; \ + UCHAR CacheLineSize; \ + UCHAR LatencyTimer; \ + UCHAR HeaderType; \ + UCHAR BIST; \ union { \ struct _PCI_HEADER_TYPE_0 { \ - ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ - ULONG CIS; \ - USHORT SubVendorID; \ - USHORT SubSystemID; \ - ULONG ROMBaseAddress; \ - UCHAR CapabilitiesPtr; \ - UCHAR Reserved1[3]; \ - ULONG Reserved2; \ - UCHAR InterruptLine; \ - UCHAR InterruptPin; \ - UCHAR MinimumGrant; \ - UCHAR MaximumLatency; \ + ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ + ULONG CIS; \ + USHORT SubVendorID; \ + USHORT SubSystemID; \ + ULONG ROMBaseAddress; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved1[3]; \ + ULONG Reserved2; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + UCHAR MinimumGrant; \ + UCHAR MaximumLatency; \ } type0; \ struct _PCI_HEADER_TYPE_1 { \ - ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ - UCHAR PrimaryBus; \ - UCHAR SecondaryBus; \ - UCHAR SubordinateBus; \ - UCHAR SecondaryLatency; \ - UCHAR IOBase; \ - UCHAR IOLimit; \ - USHORT SecondaryStatus; \ - USHORT MemoryBase; \ - USHORT MemoryLimit; \ - USHORT PrefetchBase; \ - USHORT PrefetchLimit; \ - ULONG PrefetchBaseUpper32; \ - ULONG PrefetchLimitUpper32; \ - USHORT IOBaseUpper16; \ - USHORT IOLimitUpper16; \ - UCHAR CapabilitiesPtr; \ - UCHAR Reserved1[3]; \ - ULONG ROMBaseAddress; \ - UCHAR InterruptLine; \ - UCHAR InterruptPin; \ - USHORT BridgeControl; \ + ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ + UCHAR PrimaryBus; \ + UCHAR SecondaryBus; \ + UCHAR SubordinateBus; \ + UCHAR SecondaryLatency; \ + UCHAR IOBase; \ + UCHAR IOLimit; \ + USHORT SecondaryStatus; \ + USHORT MemoryBase; \ + USHORT MemoryLimit; \ + USHORT PrefetchBase; \ + USHORT PrefetchLimit; \ + ULONG PrefetchBaseUpper32; \ + ULONG PrefetchLimitUpper32; \ + USHORT IOBaseUpper16; \ + USHORT IOLimitUpper16; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved1[3]; \ + ULONG ROMBaseAddress; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + USHORT BridgeControl; \ } type1; \ struct _PCI_HEADER_TYPE_2 { \ - ULONG SocketRegistersBaseAddress; \ - UCHAR CapabilitiesPtr; \ - UCHAR Reserved; \ - USHORT SecondaryStatus; \ - UCHAR PrimaryBus; \ - UCHAR SecondaryBus; \ - UCHAR SubordinateBus; \ - UCHAR SecondaryLatency; \ - struct { \ - ULONG Base; \ - ULONG Limit; \ + ULONG SocketRegistersBaseAddress; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved; \ + USHORT SecondaryStatus; \ + UCHAR PrimaryBus; \ + UCHAR SecondaryBus; \ + UCHAR SubordinateBus; \ + UCHAR SecondaryLatency; \ + struct { \ + ULONG Base; \ + ULONG Limit; \ } Range[PCI_TYPE2_ADDRESSES-1]; \ - UCHAR InterruptLine; \ - UCHAR InterruptPin; \ - USHORT BridgeControl; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + USHORT BridgeControl; \ } type2; \ } u; +typedef struct _PCI_COMMON_HEADER { + PCI_COMMON_HEADER_LAYOUT +} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; + +#ifdef __cplusplus +typedef struct _PCI_COMMON_CONFIG { + PCI_COMMON_HEADER_LAYOUT + UCHAR DeviceSpecific[192]; +} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; +#else +typedef struct _PCI_COMMON_CONFIG { + PCI_COMMON_HEADER DUMMYSTRUCTNAME; + UCHAR DeviceSpecific[192]; +} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; +#endif + typedef enum _CREATE_FILE_TYPE { CreateFileTypeNone, CreateFileTypeNamedPipe, @@ -4260,54 +3131,39 @@ typedef enum _CREATE_FILE_TYPE { typedef struct _IO_STATUS_BLOCK { _ANONYMOUS_UNION union { - NTSTATUS Status; - PVOID Pointer; + NTSTATUS Status; + PVOID Pointer; } DUMMYUNIONNAME; - ULONG_PTR Information; + ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; -#if defined(_WIN64) -typedef struct _IO_STATUS_BLOCK32 { - NTSTATUS Status; - ULONG Information; -} IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32; -#endif +typedef struct _PCI_SLOT_NUMBER { + union { + struct { + ULONG DeviceNumber : 5; + ULONG FunctionNumber : 3; + ULONG Reserved : 24; + } bits; + ULONG AsULONG; + } u; +} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; typedef VOID -(NTAPI *PIO_APC_ROUTINE)( +(DDKAPI *PIO_APC_ROUTINE)( IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved); -#define PIO_APC_ROUTINE_DEFINED - -typedef enum _IO_SESSION_EVENT { - IoSessionEventIgnore = 0, - IoSessionEventCreated, - IoSessionEventTerminated, - IoSessionEventConnected, - IoSessionEventDisconnected, - IoSessionEventLogon, - IoSessionEventLogoff, - IoSessionEventMax -} IO_SESSION_EVENT, *PIO_SESSION_EVENT; - -#define IO_SESSION_STATE_ALL_EVENTS 0xffffffff -#define IO_SESSION_STATE_CREATION_EVENT 0x00000001 -#define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002 -#define IO_SESSION_STATE_CONNECT_EVENT 0x00000004 -#define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008 -#define IO_SESSION_STATE_LOGON_EVENT 0x00000010 -#define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020 - -#define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f - -#define IO_SESSION_MAX_PAYLOAD_SIZE 256L - -typedef struct _IO_SESSION_CONNECT_INFO { - ULONG SessionId; - BOOLEAN LocalSession; -} IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO; +typedef VOID +(DDKAPI *WMI_NOTIFICATION_CALLBACK)( + PVOID Wnode, + PVOID Context); + +#define WMIREG_ACTION_REGISTER 1 +#define WMIREG_ACTION_DEREGISTER 2 +#define WMIREG_ACTION_REREGISTER 3 +#define WMIREG_ACTION_UPDATE_GUIDS 4 +#define WMIREG_ACTION_BLOCK_IRPS 5 #define EVENT_INCREMENT 1 #define IO_NO_INCREMENT 0 @@ -4327,148 +3183,105 @@ typedef struct _IO_SESSION_CONNECT_INFO { #define MM_MAXIMUM_DISK_IO_SIZE (0x10000) typedef struct _BOOTDISK_INFORMATION { - LONGLONG BootPartitionOffset; - LONGLONG SystemPartitionOffset; - ULONG BootDeviceSignature; - ULONG SystemDeviceSignature; + LONGLONG BootPartitionOffset; + LONGLONG SystemPartitionOffset; + ULONG BootDeviceSignature; + ULONG SystemDeviceSignature; } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; typedef struct _BOOTDISK_INFORMATION_EX { - LONGLONG BootPartitionOffset; - LONGLONG SystemPartitionOffset; - ULONG BootDeviceSignature; - ULONG SystemDeviceSignature; - GUID BootDeviceGuid; - GUID SystemDeviceGuid; - BOOLEAN BootDeviceIsGpt; - BOOLEAN SystemDeviceIsGpt; + LONGLONG BootPartitionOffset; + LONGLONG SystemPartitionOffset; + ULONG BootDeviceSignature; + ULONG SystemDeviceSignature; + GUID BootDeviceGuid; + GUID SystemDeviceGuid; + BOOLEAN BootDeviceIsGpt; + BOOLEAN SystemDeviceIsGpt; } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; -#if (NTDDI_VERSION >= NTDDI_WIN7) - -typedef struct _LOADER_PARTITION_INFORMATION_EX { - ULONG PartitionStyle; - ULONG PartitionNumber; - union { - ULONG Signature; - GUID DeviceId; - }; - ULONG Flags; -} LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX; - -typedef struct _BOOTDISK_INFORMATION_LITE { - ULONG NumberEntries; - LOADER_PARTITION_INFORMATION_EX Entries[1]; -} BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; - -#else - -#if (NTDDI_VERSION >= NTDDI_VISTA) -typedef struct _BOOTDISK_INFORMATION_LITE { - ULONG BootDeviceSignature; - ULONG SystemDeviceSignature; - GUID BootDeviceGuid; - GUID SystemDeviceGuid; - BOOLEAN BootDeviceIsGpt; - BOOLEAN SystemDeviceIsGpt; -} BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - -#include - typedef struct _EISA_MEMORY_TYPE { - UCHAR ReadWrite:1; - UCHAR Cached:1; - UCHAR Reserved0:1; - UCHAR Type:2; - UCHAR Shared:1; - UCHAR Reserved1:1; - UCHAR MoreEntries:1; + UCHAR ReadWrite : 1; + UCHAR Cached : 1; + UCHAR Reserved0 : 1; + UCHAR Type : 2; + UCHAR Shared : 1; + UCHAR Reserved1 : 1; + UCHAR MoreEntries : 1; } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; +#include typedef struct _EISA_MEMORY_CONFIGURATION { - EISA_MEMORY_TYPE ConfigurationByte; - UCHAR DataSize; - USHORT AddressLowWord; - UCHAR AddressHighByte; - USHORT MemorySize; + EISA_MEMORY_TYPE ConfigurationByte; + UCHAR DataSize; + USHORT AddressLowWord; + UCHAR AddressHighByte; + USHORT MemorySize; } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; +#include typedef struct _EISA_IRQ_DESCRIPTOR { - UCHAR Interrupt:4; - UCHAR Reserved:1; - UCHAR LevelTriggered:1; - UCHAR Shared:1; - UCHAR MoreEntries:1; + UCHAR Interrupt : 4; + UCHAR Reserved : 1; + UCHAR LevelTriggered : 1; + UCHAR Shared : 1; + UCHAR MoreEntries : 1; } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; typedef struct _EISA_IRQ_CONFIGURATION { - EISA_IRQ_DESCRIPTOR ConfigurationByte; - UCHAR Reserved; + EISA_IRQ_DESCRIPTOR ConfigurationByte; + UCHAR Reserved; } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; typedef struct _DMA_CONFIGURATION_BYTE0 { - UCHAR Channel:3; - UCHAR Reserved:3; - UCHAR Shared:1; - UCHAR MoreEntries:1; + UCHAR Channel : 3; + UCHAR Reserved : 3; + UCHAR Shared : 1; + UCHAR MoreEntries : 1; } DMA_CONFIGURATION_BYTE0; typedef struct _DMA_CONFIGURATION_BYTE1 { - UCHAR Reserved0:2; - UCHAR TransferSize:2; - UCHAR Timing:2; - UCHAR Reserved1:2; + UCHAR Reserved0 : 2; + UCHAR TransferSize : 2; + UCHAR Timing : 2; + UCHAR Reserved1 : 2; } DMA_CONFIGURATION_BYTE1; typedef struct _EISA_DMA_CONFIGURATION { - DMA_CONFIGURATION_BYTE0 ConfigurationByte0; - DMA_CONFIGURATION_BYTE1 ConfigurationByte1; + DMA_CONFIGURATION_BYTE0 ConfigurationByte0; + DMA_CONFIGURATION_BYTE1 ConfigurationByte1; } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; +#include typedef struct _EISA_PORT_DESCRIPTOR { - UCHAR NumberPorts:5; - UCHAR Reserved:1; - UCHAR Shared:1; - UCHAR MoreEntries:1; + UCHAR NumberPorts : 5; + UCHAR Reserved : 1; + UCHAR Shared : 1; + UCHAR MoreEntries : 1; } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; typedef struct _EISA_PORT_CONFIGURATION { - EISA_PORT_DESCRIPTOR Configuration; - USHORT PortAddress; + EISA_PORT_DESCRIPTOR Configuration; + USHORT PortAddress; } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; - -typedef struct _CM_EISA_SLOT_INFORMATION { - UCHAR ReturnCode; - UCHAR ReturnFlags; - UCHAR MajorRevision; - UCHAR MinorRevision; - USHORT Checksum; - UCHAR NumberFunctions; - UCHAR FunctionInformation; - ULONG CompressedId; -} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; +#include typedef struct _CM_EISA_FUNCTION_INFORMATION { - ULONG CompressedId; - UCHAR IdSlotFlags1; - UCHAR IdSlotFlags2; - UCHAR MinorRevision; - UCHAR MajorRevision; - UCHAR Selections[26]; - UCHAR FunctionFlags; - UCHAR TypeString[80]; - EISA_MEMORY_CONFIGURATION EisaMemory[9]; - EISA_IRQ_CONFIGURATION EisaIrq[7]; - EISA_DMA_CONFIGURATION EisaDma[4]; - EISA_PORT_CONFIGURATION EisaPort[20]; - UCHAR InitializationData[60]; + ULONG CompressedId; + UCHAR IdSlotFlags1; + UCHAR IdSlotFlags2; + UCHAR MinorRevision; + UCHAR MajorRevision; + UCHAR Selections[26]; + UCHAR FunctionFlags; + UCHAR TypeString[80]; + EISA_MEMORY_CONFIGURATION EisaMemory[9]; + EISA_IRQ_CONFIGURATION EisaIrq[7]; + EISA_DMA_CONFIGURATION EisaDma[4]; + EISA_PORT_CONFIGURATION EisaPort[20]; + UCHAR InitializationData[60]; } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; -#include - /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ #define EISA_FUNCTION_ENABLED 0x80 @@ -4483,9 +3296,16 @@ typedef struct _CM_EISA_FUNCTION_INFORMATION { (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) -#define EISA_MORE_ENTRIES 0x80 -#define EISA_SYSTEM_MEMORY 0x00 -#define EISA_MEMORY_TYPE_RAM 0x01 +typedef struct _CM_EISA_SLOT_INFORMATION { + UCHAR ReturnCode; + UCHAR ReturnFlags; + UCHAR MajorRevision; + UCHAR MinorRevision; + USHORT Checksum; + UCHAR NumberFunctions; + UCHAR FunctionInformation; + ULONG CompressedId; +} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; /* CM_EISA_SLOT_INFORMATION.ReturnCode */ @@ -4500,76 +3320,34 @@ typedef struct _CM_EISA_FUNCTION_INFORMATION { */ typedef VOID -(NTAPI *PINTERFACE_REFERENCE)( - PVOID Context); +(DDKAPI *PINTERFACE_REFERENCE)( + PVOID Context); typedef VOID -(NTAPI *PINTERFACE_DEREFERENCE)( +(DDKAPI *PINTERFACE_DEREFERENCE)( PVOID Context); typedef BOOLEAN -(NTAPI TRANSLATE_BUS_ADDRESS)( - IN PVOID Context, - IN PHYSICAL_ADDRESS BusAddress, - IN ULONG Length, - IN OUT PULONG AddressSpace, +(DDKAPI *PTRANSLATE_BUS_ADDRESS)( + IN PVOID Context, + IN PHYSICAL_ADDRESS BusAddress, + IN ULONG Length, + IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress); -typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS; typedef struct _DMA_ADAPTER* -(NTAPI GET_DMA_ADAPTER)( - IN PVOID Context, - IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, - OUT PULONG NumberOfMapRegisters); -typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER; +(DDKAPI *PGET_DMA_ADAPTER)( + IN PVOID Context, + IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, + OUT PULONG NumberOfMapRegisters); typedef ULONG -(NTAPI GET_SET_DEVICE_DATA)( - IN PVOID Context, - IN ULONG DataType, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); -typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA; - -typedef enum _DEVICE_INSTALL_STATE { - InstallStateInstalled, - InstallStateNeedsReinstall, - InstallStateFailedInstall, - InstallStateFinishInstall -} DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE; - -typedef struct _LEGACY_BUS_INFORMATION { - GUID BusTypeGuid; - INTERFACE_TYPE LegacyBusType; - ULONG BusNumber; -} LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION; - -typedef enum _DEVICE_REMOVAL_POLICY { - RemovalPolicyExpectNoRemoval = 1, - RemovalPolicyExpectOrderlyRemoval = 2, - RemovalPolicyExpectSurpriseRemoval = 3 -} DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY; - -typedef VOID -(NTAPI*PREENUMERATE_SELF)( - IN PVOID Context); - -typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf; -} REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD; - -typedef VOID -(NTAPI *PIO_DEVICE_EJECT_CALLBACK)( - IN NTSTATUS Status, - IN OUT PVOID Context OPTIONAL); - -#define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1 +(DDKAPI *PGET_SET_DEVICE_DATA)( + IN PVOID Context, + IN ULONG DataType, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */ #define PCI_USE_SUBSYSTEM_IDS 0x00000001 @@ -4581,116 +3359,283 @@ typedef VOID #define PCI_USE_LOCAL_DEVICE 0x00000040 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { - ULONG Size; - ULONG Flags; - USHORT VendorID; - USHORT DeviceID; - UCHAR RevisionID; - USHORT SubVendorID; - USHORT SubSystemID; - UCHAR BaseClass; - UCHAR SubClass; - UCHAR ProgIf; + ULONG Size; + ULONG Flags; + USHORT VendorID; + USHORT DeviceID; + UCHAR RevisionID; + USHORT SubVendorID; + USHORT SubSystemID; + UCHAR BaseClass; + UCHAR SubClass; + UCHAR ProgIf; } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; typedef BOOLEAN -(NTAPI PCI_IS_DEVICE_PRESENT)( - IN USHORT VendorID, - IN USHORT DeviceID, - IN UCHAR RevisionID, - IN USHORT SubVendorID, - IN USHORT SubSystemID, - IN ULONG Flags); -typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT; +(DDKAPI *PPCI_IS_DEVICE_PRESENT)( + IN USHORT VendorID, + IN USHORT DeviceID, + IN UCHAR RevisionID, + IN USHORT SubVendorID, + IN USHORT SubSystemID, + IN ULONG Flags); typedef BOOLEAN -(NTAPI PCI_IS_DEVICE_PRESENT_EX)( +(DDKAPI *PPCI_IS_DEVICE_PRESENT_EX)( IN PVOID Context, IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); -typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX; typedef struct _BUS_INTERFACE_STANDARD { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PTRANSLATE_BUS_ADDRESS TranslateBusAddress; - PGET_DMA_ADAPTER GetDmaAdapter; - PGET_SET_DEVICE_DATA SetBusData; - PGET_SET_DEVICE_DATA GetBusData; + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PTRANSLATE_BUS_ADDRESS TranslateBusAddress; + PGET_DMA_ADAPTER GetDmaAdapter; + PGET_SET_DEVICE_DATA SetBusData; + PGET_SET_DEVICE_DATA GetBusData; } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; typedef struct _PCI_DEVICE_PRESENT_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PPCI_IS_DEVICE_PRESENT IsDevicePresent; - PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PPCI_IS_DEVICE_PRESENT IsDevicePresent; + PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; +typedef +BOOLEAN +(*PGPE_SERVICE_ROUTINE2)( + PVOID ObjectContext, + PVOID ServiceContext +); + +typedef +NTSTATUS +(*PGPE_CONNECT_VECTOR2)( + PVOID Context, + ULONG GpeNumber, + KINTERRUPT_MODE Mode, + BOOLEAN Shareable, + PGPE_SERVICE_ROUTINE2 ServiceRoutine, + PVOID ServiceContext, + PVOID *ObjectContext +); + +typedef +NTSTATUS +(*PGPE_DISCONNECT_VECTOR2)( + PVOID Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_ENABLE_EVENT2)( + PVOID Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_DISABLE_EVENT2)( + PVOID Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_CLEAR_STATUS2)( + PVOID Context, + PVOID ObjectContext +); + +typedef +VOID +(*PDEVICE_NOTIFY_CALLBACK2)( + PVOID NotificationContext, + ULONG NotifyCode +); + +typedef +NTSTATUS +(*PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( + PVOID Context, + PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, + PVOID NotificationContext +); + +typedef +VOID +(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( + PVOID Context +); + +typedef struct +{ + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PGPE_CONNECT_VECTOR2 GpeConnectVector; + PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector; + PGPE_ENABLE_EVENT2 GpeEnableEvent; + PGPE_DISABLE_EVENT2 GpeDisableEvent; + PGPE_CLEAR_STATUS2 GpeClearStatus; + PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications; + PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications; +} ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2; + +typedef +BOOLEAN +(*PGPE_SERVICE_ROUTINE)( + PDEVICE_OBJECT ObjectContext, + PVOID ServiceContext +); + +typedef +NTSTATUS +(*PGPE_CONNECT_VECTOR)( + PDEVICE_OBJECT Context, + ULONG GpeNumber, + KINTERRUPT_MODE Mode, + BOOLEAN Shareable, + PGPE_SERVICE_ROUTINE ServiceRoutine, + PVOID ServiceContext, + PVOID *ObjectContext +); + +typedef +NTSTATUS +(*PGPE_DISCONNECT_VECTOR)( + PDEVICE_OBJECT Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_ENABLE_EVENT)( + PDEVICE_OBJECT Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_DISABLE_EVENT)( + PDEVICE_OBJECT Context, + PVOID ObjectContext +); + +typedef +NTSTATUS +(*PGPE_CLEAR_STATUS)( + PDEVICE_OBJECT Context, + PVOID ObjectContext +); + +typedef +VOID +(*PDEVICE_NOTIFY_CALLBACK)( + PVOID NotificationContext, + ULONG NotifyCode +); + +typedef +NTSTATUS +(*PREGISTER_FOR_DEVICE_NOTIFICATIONS)( + PDEVICE_OBJECT Context, + PDEVICE_NOTIFY_CALLBACK NotificationHandler, + PVOID NotificationContext +); + +typedef +VOID +(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( + PDEVICE_OBJECT Context, + PDEVICE_NOTIFY_CALLBACK NotificationHandler +); + +typedef struct +{ + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PGPE_CONNECT_VECTOR GpeConnectVector; + PGPE_DISCONNECT_VECTOR GpeDisconnectVector; + PGPE_ENABLE_EVENT GpeEnableEvent; + PGPE_DISABLE_EVENT GpeDisableEvent; + PGPE_CLEAR_STATUS GpeClearStatus; + PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications; + PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications; +} ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD; + typedef struct _DEVICE_CAPABILITIES { - USHORT Size; - USHORT Version; - ULONG DeviceD1:1; - ULONG DeviceD2:1; - ULONG LockSupported:1; - ULONG EjectSupported:1; - ULONG Removable:1; - ULONG DockDevice:1; - ULONG UniqueID:1; - ULONG SilentInstall:1; - ULONG RawDeviceOK:1; - ULONG SurpriseRemovalOK:1; - ULONG WakeFromD0:1; - ULONG WakeFromD1:1; - ULONG WakeFromD2:1; - ULONG WakeFromD3:1; - ULONG HardwareDisabled:1; - ULONG NonDynamic:1; - ULONG WarmEjectSupported:1; - ULONG NoDisplayInUI:1; - ULONG Reserved:14; - ULONG Address; - ULONG UINumber; - DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; - SYSTEM_POWER_STATE SystemWake; - DEVICE_POWER_STATE DeviceWake; - ULONG D1Latency; - ULONG D2Latency; - ULONG D3Latency; + USHORT Size; + USHORT Version; + ULONG DeviceD1 : 1; + ULONG DeviceD2 : 1; + ULONG LockSupported : 1; + ULONG EjectSupported : 1; + ULONG Removable : 1; + ULONG DockDevice : 1; + ULONG UniqueID : 1; + ULONG SilentInstall : 1; + ULONG RawDeviceOK : 1; + ULONG SurpriseRemovalOK : 1; + ULONG WakeFromD0 : 1; + ULONG WakeFromD1 : 1; + ULONG WakeFromD2 : 1; + ULONG WakeFromD3 : 1; + ULONG HardwareDisabled : 1; + ULONG NonDynamic : 1; + ULONG WarmEjectSupported : 1; + ULONG NoDisplayInUI : 1; + ULONG Reserved : 14; + ULONG Address; + ULONG UINumber; + DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; + SYSTEM_POWER_STATE SystemWake; + DEVICE_POWER_STATE DeviceWake; + ULONG D1Latency; + ULONG D2Latency; + ULONG D3Latency; } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { - USHORT Version; - USHORT Size; - GUID Event; - GUID InterfaceClassGuid; - PUNICODE_STRING SymbolicLinkName; + USHORT Version; + USHORT Size; + GUID Event; + GUID InterfaceClassGuid; + PUNICODE_STRING SymbolicLinkName; } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; typedef struct _HWPROFILE_CHANGE_NOTIFICATION { - USHORT Version; - USHORT Size; - GUID Event; + USHORT Version; + USHORT Size; + GUID Event; } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; #undef INTERFACE typedef struct _INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; } INTERFACE, *PINTERFACE; typedef struct _PLUGPLAY_NOTIFICATION_HEADER { - USHORT Version; - USHORT Size; - GUID Event; + USHORT Version; + USHORT Size; + GUID Event; } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; @@ -4705,154 +3650,21 @@ typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { - USHORT Version; - USHORT Size; - GUID Event; - struct _FILE_OBJECT *FileObject; - LONG NameBufferOffset; - UCHAR CustomDataBuffer[1]; + USHORT Version; + USHORT Size; + GUID Event; + struct _FILE_OBJECT *FileObject; + LONG NameBufferOffset; + UCHAR CustomDataBuffer[1]; } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { - USHORT Version; - USHORT Size; - GUID Event; - struct _FILE_OBJECT *FileObject; + USHORT Version; + USHORT Size; + GUID Event; + struct _FILE_OBJECT *FileObject; } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; -#if (NTDDI_VERSION >= NTDDI_VISTA) -#include -#define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001 -#endif - -#define PNP_REPLACE_NO_MAP MAXLONGLONG - -typedef NTSTATUS -(NTAPI *PREPLACE_MAP_MEMORY)( - IN PHYSICAL_ADDRESS TargetPhysicalAddress, - IN PHYSICAL_ADDRESS SparePhysicalAddress, - IN OUT PLARGE_INTEGER NumberOfBytes, - OUT PVOID *TargetAddress, - OUT PVOID *SpareAddress); - -typedef struct _PNP_REPLACE_MEMORY_LIST { - ULONG AllocatedCount; - ULONG Count; - ULONGLONG TotalLength; - struct { - PHYSICAL_ADDRESS Address; - ULONGLONG Length; - } Ranges[ANYSIZE_ARRAY]; -} PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST; - -typedef struct _PNP_REPLACE_PROCESSOR_LIST { - PKAFFINITY Affinity; - ULONG GroupCount; - ULONG AllocatedCount; - ULONG Count; - ULONG ApicIds[ANYSIZE_ARRAY]; -} PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST; - -typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 { - KAFFINITY AffinityMask; - ULONG AllocatedCount; - ULONG Count; - ULONG ApicIds[ANYSIZE_ARRAY]; -} PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1; - -#define PNP_REPLACE_PARAMETERS_VERSION 2 - -typedef struct _PNP_REPLACE_PARAMETERS { - ULONG Size; - ULONG Version; - ULONG64 Target; - ULONG64 Spare; - PPNP_REPLACE_PROCESSOR_LIST TargetProcessors; - PPNP_REPLACE_PROCESSOR_LIST SpareProcessors; - PPNP_REPLACE_MEMORY_LIST TargetMemory; - PPNP_REPLACE_MEMORY_LIST SpareMemory; - PREPLACE_MAP_MEMORY MapMemory; -} PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS; - -typedef VOID -(NTAPI *PREPLACE_UNLOAD)( - VOID); - -typedef NTSTATUS -(NTAPI *PREPLACE_BEGIN)( - IN PPNP_REPLACE_PARAMETERS Parameters, - OUT PVOID *Context); - -typedef NTSTATUS -(NTAPI *PREPLACE_END)( - IN PVOID Context); - -typedef NTSTATUS -(NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( - IN PVOID Context, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER ByteCount); - -typedef NTSTATUS -(NTAPI *PREPLACE_SET_PROCESSOR_ID)( - IN PVOID Context, - IN ULONG ApicId, - IN BOOLEAN Target); - -typedef NTSTATUS -(NTAPI *PREPLACE_SWAP)( - IN PVOID Context); - -typedef NTSTATUS -(NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( - IN PVOID Context); - -typedef NTSTATUS -(NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( - IN PVOID Context); - -typedef NTSTATUS -(NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( - IN PVOID Context, - IN PHYSICAL_ADDRESS SourceAddress, - OUT PPHYSICAL_ADDRESS DestinationAddress); - -typedef NTSTATUS -(NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( - IN PVOID Context, - IN BOOLEAN Enable); - -#define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1 -#define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \ - FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror) - -#define PNP_REPLACE_MEMORY_SUPPORTED 0x0001 -#define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002 -#define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004 -#define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008 -#define PNP_REPLACE_HARDWARE_QUIESCE 0x0010 - -typedef struct _PNP_REPLACE_DRIVER_INTERFACE { - ULONG Size; - ULONG Version; - ULONG Flags; - PREPLACE_UNLOAD Unload; - PREPLACE_BEGIN BeginReplace; - PREPLACE_END EndReplace; - PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory; - PREPLACE_SET_PROCESSOR_ID SetProcessorId; - PREPLACE_SWAP Swap; - PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror; - PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory; - PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination; - PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce; -} PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE; - -typedef NTSTATUS -(NTAPI *PREPLACE_DRIVER_INIT)( - IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface, - IN PVOID Unused); - typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { DeviceUsageTypeUndefined, DeviceUsageTypePaging, @@ -4861,9 +3673,9 @@ typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { } DEVICE_USAGE_NOTIFICATION_TYPE; typedef struct _POWER_SEQUENCE { - ULONG SequenceD1; - ULONG SequenceD2; - ULONG SequenceD3; + ULONG SequenceD1; + ULONG SequenceD2; + ULONG SequenceD3; } POWER_SEQUENCE, *PPOWER_SEQUENCE; typedef enum { @@ -4899,27 +3711,16 @@ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { EventCategoryTargetDeviceChange } IO_NOTIFICATION_EVENT_CATEGORY; -typedef enum _IO_PRIORITY_HINT { - IoPriorityVeryLow = 0, - IoPriorityLow, - IoPriorityNormal, - IoPriorityHigh, - IoPriorityCritical, - MaxIoPriorityTypes -} IO_PRIORITY_HINT; - #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 typedef NTSTATUS -(NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( +(DDKAPI *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)( IN PVOID NotificationStructure, IN PVOID Context); -typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE; typedef VOID -(NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( +(DDKAPI *PDEVICE_CHANGE_COMPLETE_CALLBACK)( IN PVOID Context); -typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK; typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, @@ -4981,59 +3782,35 @@ typedef enum _FILE_INFORMATION_CLASS { } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef struct _FILE_POSITION_INFORMATION { - LARGE_INTEGER CurrentByteOffset; + LARGE_INTEGER CurrentByteOffset; } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; +#include typedef struct _FILE_BASIC_INFORMATION { - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - ULONG FileAttributes; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + ULONG FileAttributes; } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; - -typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION { - IO_PRIORITY_HINT PriorityHint; -} FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION; - -typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { - ULONG Flags; -} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; - -typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION { - PUCHAR IoStatusBlockRange; - ULONG Length; -} FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION; - -typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION { - BOOLEAN IsRemote; -} FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION; - -typedef struct _FILE_NUMA_NODE_INFORMATION { - USHORT NodeNumber; -} FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION; - -typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION { - ULONG NumberOfProcessIdsInList; - ULONG_PTR ProcessIdList[1]; -} FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION; +#include typedef struct _FILE_STANDARD_INFORMATION { - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG NumberOfLinks; - BOOLEAN DeletePending; - BOOLEAN Directory; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; typedef struct _FILE_NETWORK_OPEN_INFORMATION { - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG FileAttributes; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG FileAttributes; } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; typedef enum _FSINFOCLASS { @@ -5051,329 +3828,321 @@ typedef enum _FSINFOCLASS { } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; typedef struct _FILE_FS_DEVICE_INFORMATION { - DEVICE_TYPE DeviceType; - ULONG Characteristics; + DEVICE_TYPE DeviceType; + ULONG Characteristics; } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; typedef struct _FILE_FULL_EA_INFORMATION { - ULONG NextEntryOffset; - UCHAR Flags; - UCHAR EaNameLength; - USHORT EaValueLength; - CHAR EaName[1]; + ULONG NextEntryOffset; + UCHAR Flags; + UCHAR EaNameLength; + USHORT EaValueLength; + CHAR EaName[1]; } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; -typedef struct _FILE_SFIO_RESERVE_INFORMATION { - ULONG RequestsPerPeriod; - ULONG Period; - BOOLEAN RetryFailures; - BOOLEAN Discardable; - ULONG RequestSize; - ULONG NumOutstandingRequests; -} FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION; - -typedef struct _FILE_SFIO_VOLUME_INFORMATION { - ULONG MaximumRequestsPerPeriod; - ULONG MinimumPeriod; - ULONG MinimumTransferSize; -} FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION; - -#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 -#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 -#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 - #define FM_LOCK_BIT (0x1) #define FM_LOCK_BIT_V (0x0) #define FM_LOCK_WAITER_WOKEN (0x2) #define FM_LOCK_WAITER_INC (0x4) -typedef BOOLEAN -(NTAPI FAST_IO_CHECK_IF_POSSIBLE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN BOOLEAN CheckForReadOperation, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE; +typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD; + +typedef struct _OWNER_ENTRY { + ERESOURCE_THREAD OwnerThread; + _ANONYMOUS_UNION union { + LONG OwnerCount; + ULONG TableSize; + } DUMMYUNIONNAME; +} OWNER_ENTRY, *POWNER_ENTRY; + +typedef struct _ERESOURCE +{ + LIST_ENTRY SystemResourcesList; + POWNER_ENTRY OwnerTable; + SHORT ActiveCount; + USHORT Flag; + volatile PKSEMAPHORE SharedWaiters; + volatile PKEVENT ExclusiveWaiters; + OWNER_ENTRY OwnerEntry; + ULONG ActiveEntries; + ULONG ContentionCount; + ULONG NumberOfSharedWaiters; + ULONG NumberOfExclusiveWaiters; + __GNU_EXTENSION union + { + PVOID Address; + ULONG_PTR CreatorBackTraceIndex; + }; + KSPIN_LOCK SpinLock; +} ERESOURCE, *PERESOURCE; + +/* ERESOURCE.Flag */ +#define ResourceNeverExclusive 0x0010 +#define ResourceReleaseByOtherThread 0x0020 +#define ResourceOwnedExclusive 0x0080 + +#define RESOURCE_HASH_TABLE_SIZE 64 typedef BOOLEAN -(NTAPI FAST_IO_READ)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_READ *PFAST_IO_READ; +(DDKAPI *PFAST_IO_CHECK_IF_POSSIBLE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN BOOLEAN CheckForReadOperation, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_WRITE *PFAST_IO_WRITE; +(DDKAPI *PFAST_IO_READ)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_QUERY_BASIC_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT PFILE_BASIC_INFORMATION Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO; +(DDKAPI *PFAST_IO_WRITE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_QUERY_STANDARD_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT PFILE_STANDARD_INFORMATION Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO; +(DDKAPI *PFAST_IO_QUERY_BASIC_INFO)( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT PFILE_BASIC_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_LOCK)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - PEPROCESS ProcessId, - ULONG Key, - BOOLEAN FailImmediately, - BOOLEAN ExclusiveLock, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_LOCK *PFAST_IO_LOCK; +(DDKAPI *PFAST_IO_QUERY_STANDARD_INFO)( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT PFILE_STANDARD_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_UNLOCK_SINGLE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - PEPROCESS ProcessId, - ULONG Key, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE; +(DDKAPI *PFAST_IO_LOCK)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + PEPROCESS ProcessId, + ULONG Key, + BOOLEAN FailImmediately, + BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_UNLOCK_ALL)( - IN struct _FILE_OBJECT *FileObject, - PEPROCESS ProcessId, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL; +(DDKAPI *PFAST_IO_UNLOCK_SINGLE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + PEPROCESS ProcessId, + ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( - IN struct _FILE_OBJECT *FileObject, - PVOID ProcessId, - ULONG Key, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY; +(DDKAPI *PFAST_IO_UNLOCK_ALL)( + IN struct _FILE_OBJECT *FileObject, + PEPROCESS ProcessId, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_DEVICE_CONTROL)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength, - IN ULONG IoControlCode, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL; +(DDKAPI *PFAST_IO_UNLOCK_ALL_BY_KEY)( + IN struct _FILE_OBJECT *FileObject, + PVOID ProcessId, + ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); + +typedef BOOLEAN +(DDKAPI *PFAST_IO_DEVICE_CONTROL)( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN ULONG IoControlCode, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef VOID -(NTAPI FAST_IO_ACQUIRE_FILE)( - IN struct _FILE_OBJECT *FileObject); -typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE; +(DDKAPI *PFAST_IO_ACQUIRE_FILE)( + IN struct _FILE_OBJECT *FileObject); typedef VOID -(NTAPI FAST_IO_RELEASE_FILE)( - IN struct _FILE_OBJECT *FileObject); -typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE; +(DDKAPI *PFAST_IO_RELEASE_FILE)( + IN struct _FILE_OBJECT *FileObject); typedef VOID -(NTAPI FAST_IO_DETACH_DEVICE)( - IN struct _DEVICE_OBJECT *SourceDevice, - IN struct _DEVICE_OBJECT *TargetDevice); -typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE; +(DDKAPI *PFAST_IO_DETACH_DEVICE)( + IN struct _DEVICE_OBJECT *SourceDevice, + IN struct _DEVICE_OBJECT *TargetDevice); typedef BOOLEAN -(NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, - OUT struct _IO_STATUS_BLOCK *IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO; +(DDKAPI *PFAST_IO_QUERY_NETWORK_OPEN_INFO)( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, + OUT struct _IO_STATUS_BLOCK *IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef NTSTATUS -(NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER EndingOffset, - OUT struct _ERESOURCE **ResourceToRelease, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE; +(DDKAPI *PFAST_IO_ACQUIRE_FOR_MOD_WRITE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER EndingOffset, + OUT struct _ERESOURCE **ResourceToRelease, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_MDL_READ)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ; +(DDKAPI *PFAST_IO_MDL_READ)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_MDL_READ_COMPLETE)( +(DDKAPI *PFAST_IO_MDL_READ_COMPLETE)( IN struct _FILE_OBJECT *FileObject, IN PMDL MdlChain, IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE; typedef BOOLEAN -(NTAPI FAST_IO_PREPARE_MDL_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE; +(DDKAPI *PFAST_IO_PREPARE_MDL_WRITE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_MDL_WRITE_COMPLETE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE; +(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_READ_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, - IN ULONG CompressedDataInfoLength, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED; +(DDKAPI *PFAST_IO_READ_COMPRESSED)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_WRITE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - IN PVOID Buffer, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, - IN ULONG CompressedDataInfoLength, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED; +(DDKAPI *PFAST_IO_WRITE_COMPRESSED)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED; +(DDKAPI *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)( + IN struct _FILE_OBJECT *FileObject, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED; +(DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject); typedef BOOLEAN -(NTAPI FAST_IO_QUERY_OPEN)( - IN struct _IRP *Irp, - OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN; +(DDKAPI *PFAST_IO_QUERY_OPEN)( + IN struct _IRP *Irp, + OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, + IN struct _DEVICE_OBJECT *DeviceObject); typedef NTSTATUS -(NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN struct _ERESOURCE *ResourceToRelease, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE; +(DDKAPI *PFAST_IO_RELEASE_FOR_MOD_WRITE)( + IN struct _FILE_OBJECT *FileObject, + IN struct _ERESOURCE *ResourceToRelease, + IN struct _DEVICE_OBJECT *DeviceObject); typedef NTSTATUS -(NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( - IN struct _FILE_OBJECT *FileObject, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH; +(DDKAPI *PFAST_IO_ACQUIRE_FOR_CCFLUSH)( + IN struct _FILE_OBJECT *FileObject, + IN struct _DEVICE_OBJECT *DeviceObject); typedef NTSTATUS -(NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( - IN struct _FILE_OBJECT *FileObject, - IN struct _DEVICE_OBJECT *DeviceObject); -typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH; +(DDKAPI *PFAST_IO_RELEASE_FOR_CCFLUSH) ( + IN struct _FILE_OBJECT *FileObject, + IN struct _DEVICE_OBJECT *DeviceObject); typedef struct _FAST_IO_DISPATCH { - ULONG SizeOfFastIoDispatch; - PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; - PFAST_IO_READ FastIoRead; - PFAST_IO_WRITE FastIoWrite; - PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; - PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; - PFAST_IO_LOCK FastIoLock; - PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; - PFAST_IO_UNLOCK_ALL FastIoUnlockAll; - PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; - PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; - PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; - PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; - PFAST_IO_DETACH_DEVICE FastIoDetachDevice; - PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; - PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; - PFAST_IO_MDL_READ MdlRead; - PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; - PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; - PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; - PFAST_IO_READ_COMPRESSED FastIoReadCompressed; - PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; - PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; - PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; - PFAST_IO_QUERY_OPEN FastIoQueryOpen; - PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; - PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; - PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; + ULONG SizeOfFastIoDispatch; + PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; + PFAST_IO_READ FastIoRead; + PFAST_IO_WRITE FastIoWrite; + PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; + PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; + PFAST_IO_LOCK FastIoLock; + PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; + PFAST_IO_UNLOCK_ALL FastIoUnlockAll; + PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; + PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; + PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; + PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; + PFAST_IO_DETACH_DEVICE FastIoDetachDevice; + PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; + PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; + PFAST_IO_MDL_READ MdlRead; + PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; + PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; + PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; + PFAST_IO_READ_COMPRESSED FastIoReadCompressed; + PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; + PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; + PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; + PFAST_IO_QUERY_OPEN FastIoQueryOpen; + PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; + PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; + PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; typedef struct _SECTION_OBJECT_POINTERS { - PVOID DataSectionObject; - PVOID SharedCacheMap; - PVOID ImageSectionObject; + PVOID DataSectionObject; + PVOID SharedCacheMap; + PVOID ImageSectionObject; } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; typedef struct _IO_COMPLETION_CONTEXT { - PVOID Port; - PVOID Key; + PVOID Port; + PVOID Key; } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; /* FILE_OBJECT.Flags */ @@ -5406,7 +4175,6 @@ typedef struct _IO_COMPLETION_CONTEXT { #define FO_SKIP_COMPLETION_PORT 0x02000000 #define FO_SKIP_SET_EVENT 0x04000000 #define FO_SKIP_SET_FAST_IO 0x08000000 -#define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE /* VPB.Flags */ #define VPB_MOUNTED 0x0001 @@ -5421,18 +4189,12 @@ typedef struct _IO_COMPLETION_CONTEXT { #define SL_FORCE_ACCESS_CHECK 0x01 #define SL_OPEN_PAGING_FILE 0x02 #define SL_OPEN_TARGET_DIRECTORY 0x04 -#define SL_STOP_ON_SYMLINK 0x08 #define SL_CASE_SENSITIVE 0x80 #define SL_KEY_SPECIFIED 0x01 #define SL_OVERRIDE_VERIFY_VOLUME 0x02 #define SL_WRITE_THROUGH 0x04 #define SL_FT_SEQUENTIAL_WRITE 0x08 -#define SL_FORCE_DIRECT_WRITE 0x10 -#define SL_REALTIME_STREAM 0x20 - -#define SL_READ_ACCESS_GRANTED 0x01 -#define SL_WRITE_ACCESS_GRANTED 0x04 #define SL_FAIL_IMMEDIATELY 0x01 #define SL_EXCLUSIVE_LOCK 0x02 @@ -5450,8 +4212,6 @@ typedef struct _IO_COMPLETION_CONTEXT { #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) -#define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) - #define IRP_NOCACHE 0x00000001 #define IRP_PAGING_IO 0x00000002 #define IRP_MOUNT_COMPLETION 0x00000002 @@ -5537,9 +4297,6 @@ typedef struct _IO_COMPLETION_CONTEXT { #define IRP_MN_QUERY_BUS_INFORMATION 0x15 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 #define IRP_MN_SURPRISE_REMOVAL 0x17 -#if (NTDDI_VERSION >= NTDDI_WIN7) -#define IRP_MN_DEVICE_ENUMERATED 0x19 -#endif #define IRP_MN_WAIT_WAKE 0x00 #define IRP_MN_POWER_SEQUENCE 0x01 @@ -5559,62 +4316,63 @@ typedef struct _IO_COMPLETION_CONTEXT { #define IRP_MN_REGINFO_EX 0x0b -typedef struct _FILE_OBJECT { - CSHORT Type; - CSHORT Size; - PDEVICE_OBJECT DeviceObject; - PVPB Vpb; - PVOID FsContext; - PVOID FsContext2; - PSECTION_OBJECT_POINTERS SectionObjectPointer; - PVOID PrivateCacheMap; - NTSTATUS FinalStatus; - struct _FILE_OBJECT *RelatedFileObject; - BOOLEAN LockOperation; - BOOLEAN DeletePending; - BOOLEAN ReadAccess; - BOOLEAN WriteAccess; - BOOLEAN DeleteAccess; - BOOLEAN SharedRead; - BOOLEAN SharedWrite; - BOOLEAN SharedDelete; - ULONG Flags; - UNICODE_STRING FileName; - LARGE_INTEGER CurrentByteOffset; - volatile ULONG Waiters; - volatile ULONG Busy; - PVOID LastLock; - KEVENT Lock; - KEVENT Event; - volatile PIO_COMPLETION_CONTEXT CompletionContext; - KSPIN_LOCK IrpListLock; - LIST_ENTRY IrpList; - volatile PVOID FileObjectExtension; +typedef struct _FILE_OBJECT +{ + CSHORT Type; + CSHORT Size; + PDEVICE_OBJECT DeviceObject; + PVPB Vpb; + PVOID FsContext; + PVOID FsContext2; + PSECTION_OBJECT_POINTERS SectionObjectPointer; + PVOID PrivateCacheMap; + NTSTATUS FinalStatus; + struct _FILE_OBJECT *RelatedFileObject; + BOOLEAN LockOperation; + BOOLEAN DeletePending; + BOOLEAN ReadAccess; + BOOLEAN WriteAccess; + BOOLEAN DeleteAccess; + BOOLEAN SharedRead; + BOOLEAN SharedWrite; + BOOLEAN SharedDelete; + ULONG Flags; + UNICODE_STRING FileName; + LARGE_INTEGER CurrentByteOffset; + volatile ULONG Waiters; + volatile ULONG Busy; + PVOID LastLock; + KEVENT Lock; + KEVENT Event; + volatile PIO_COMPLETION_CONTEXT CompletionContext; + KSPIN_LOCK IrpListLock; + LIST_ENTRY IrpList; + volatile PVOID FileObjectExtension; } FILE_OBJECT, *PFILE_OBJECT; typedef struct _IO_ERROR_LOG_PACKET { - UCHAR MajorFunctionCode; - UCHAR RetryCount; - USHORT DumpDataSize; - USHORT NumberOfStrings; - USHORT StringOffset; - USHORT EventCategory; - NTSTATUS ErrorCode; - ULONG UniqueErrorValue; - NTSTATUS FinalStatus; - ULONG SequenceNumber; - ULONG IoControlCode; - LARGE_INTEGER DeviceOffset; - ULONG DumpData[1]; + UCHAR MajorFunctionCode; + UCHAR RetryCount; + USHORT DumpDataSize; + USHORT NumberOfStrings; + USHORT StringOffset; + USHORT EventCategory; + NTSTATUS ErrorCode; + ULONG UniqueErrorValue; + NTSTATUS FinalStatus; + ULONG SequenceNumber; + ULONG IoControlCode; + LARGE_INTEGER DeviceOffset; + ULONG DumpData[1]; } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; typedef struct _IO_ERROR_LOG_MESSAGE { - USHORT Type; - USHORT Size; - USHORT DriverNameLength; - LARGE_INTEGER TimeStamp; - ULONG DriverNameOffset; - IO_ERROR_LOG_PACKET EntryData; + USHORT Type; + USHORT Size; + USHORT DriverNameLength; + LARGE_INTEGER TimeStamp; + ULONG DriverNameOffset; + IO_ERROR_LOG_PACKET EntryData; } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; #define ERROR_LOG_LIMIT_SIZE 240 @@ -5630,12 +4388,6 @@ typedef struct _IO_ERROR_LOG_MESSAGE { #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) -#ifdef _WIN64 -#define PORT_MAXIMUM_MESSAGE_LENGTH 512 -#else -#define PORT_MAXIMUM_MESSAGE_LENGTH 256 -#endif - typedef enum _DMA_WIDTH { Width8Bits, Width16Bits, @@ -5659,22 +4411,22 @@ typedef enum _DMA_SPEED { #define DEVICE_DESCRIPTION_VERSION2 0x0002 typedef struct _DEVICE_DESCRIPTION { - ULONG Version; - BOOLEAN Master; - BOOLEAN ScatterGather; - BOOLEAN DemandMode; - BOOLEAN AutoInitialize; - BOOLEAN Dma32BitAddresses; - BOOLEAN IgnoreCount; - BOOLEAN Reserved1; - BOOLEAN Dma64BitAddresses; - ULONG BusNumber; - ULONG DmaChannel; - INTERFACE_TYPE InterfaceType; - DMA_WIDTH DmaWidth; - DMA_SPEED DmaSpeed; - ULONG MaximumLength; - ULONG DmaPort; + ULONG Version; + BOOLEAN Master; + BOOLEAN ScatterGather; + BOOLEAN DemandMode; + BOOLEAN AutoInitialize; + BOOLEAN Dma32BitAddresses; + BOOLEAN IgnoreCount; + BOOLEAN Reserved1; + BOOLEAN Dma64BitAddresses; + ULONG BusNumber; + ULONG DmaChannel; + INTERFACE_TYPE InterfaceType; + DMA_WIDTH DmaWidth; + DMA_SPEED DmaSpeed; + ULONG MaximumLength; + ULONG DmaPort; } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; typedef enum _DEVICE_RELATION_TYPE { @@ -5688,20 +4440,21 @@ typedef enum _DEVICE_RELATION_TYPE { } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; typedef struct _DEVICE_RELATIONS { - ULONG Count; + ULONG Count; PDEVICE_OBJECT Objects[1]; } DEVICE_RELATIONS, *PDEVICE_RELATIONS; -typedef struct _DEVOBJ_EXTENSION { - CSHORT Type; - USHORT Size; - PDEVICE_OBJECT DeviceObject; +typedef struct _DEVOBJ_EXTENSION +{ + CSHORT Type; + USHORT Size; + PDEVICE_OBJECT DeviceObject; } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; typedef struct _SCATTER_GATHER_ELEMENT { - PHYSICAL_ADDRESS Address; - ULONG Length; - ULONG_PTR Reserved; + PHYSICAL_ADDRESS Address; + ULONG Length; + ULONG_PTR Reserved; } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; #if defined(_MSC_EXTENSIONS) @@ -5711,9 +4464,9 @@ typedef struct _SCATTER_GATHER_ELEMENT { #endif #pragma warning(disable:4200) typedef struct _SCATTER_GATHER_LIST { - ULONG NumberOfElements; - ULONG_PTR Reserved; - SCATTER_GATHER_ELEMENT Elements[1]; + ULONG NumberOfElements; + ULONG_PTR Reserved; + SCATTER_GATHER_ELEMENT Elements[1]; } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; #if _MSC_VER >= 1200 @@ -5730,16 +4483,16 @@ typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; #endif typedef NTSTATUS -(NTAPI DRIVER_ADD_DEVICE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN struct _DEVICE_OBJECT *PhysicalDeviceObject); +(DDKAPI DRIVER_ADD_DEVICE)( + IN struct _DRIVER_OBJECT *DriverObject, + IN struct _DEVICE_OBJECT *PhysicalDeviceObject); typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; typedef struct _DRIVER_EXTENSION { - struct _DRIVER_OBJECT *DriverObject; - PDRIVER_ADD_DEVICE AddDevice; - ULONG Count; - UNICODE_STRING ServiceKeyName; + struct _DRIVER_OBJECT *DriverObject; + PDRIVER_ADD_DEVICE AddDevice; + ULONG Count; + UNICODE_STRING ServiceKeyName; } DRIVER_EXTENSION, *PDRIVER_EXTENSION; #define DRVO_UNLOAD_INVOKED 0x00000001 @@ -5747,319 +4500,320 @@ typedef struct _DRIVER_EXTENSION { #define DRVO_BUILTIN_DRIVER 0x00000004 typedef NTSTATUS -(NTAPI DRIVER_INITIALIZE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN PUNICODE_STRING RegistryPath); +(DDKAPI DRIVER_INITIALIZE)( + IN struct _DRIVER_OBJECT *DriverObject, + IN PUNICODE_STRING RegistryPath); typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; typedef VOID -(NTAPI DRIVER_STARTIO)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); +(DDKAPI DRIVER_STARTIO)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp); typedef DRIVER_STARTIO *PDRIVER_STARTIO; typedef VOID -(NTAPI DRIVER_UNLOAD)( - IN struct _DRIVER_OBJECT *DriverObject); +(DDKAPI DRIVER_UNLOAD)( + IN struct _DRIVER_OBJECT *DriverObject); typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; typedef NTSTATUS -(NTAPI DRIVER_DISPATCH)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); +(DDKAPI DRIVER_DISPATCH)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp); typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; typedef struct _DRIVER_OBJECT { - CSHORT Type; - CSHORT Size; - PDEVICE_OBJECT DeviceObject; - ULONG Flags; - PVOID DriverStart; - ULONG DriverSize; - PVOID DriverSection; - PDRIVER_EXTENSION DriverExtension; - UNICODE_STRING DriverName; - PUNICODE_STRING HardwareDatabase; + CSHORT Type; + CSHORT Size; + PDEVICE_OBJECT DeviceObject; + ULONG Flags; + PVOID DriverStart; + ULONG DriverSize; + PVOID DriverSection; + PDRIVER_EXTENSION DriverExtension; + UNICODE_STRING DriverName; + PUNICODE_STRING HardwareDatabase; struct _FAST_IO_DISPATCH *FastIoDispatch; - PDRIVER_INITIALIZE DriverInit; - PDRIVER_STARTIO DriverStartIo; - PDRIVER_UNLOAD DriverUnload; - PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; -} DRIVER_OBJECT, *PDRIVER_OBJECT; + PDRIVER_INITIALIZE DriverInit; + PDRIVER_STARTIO DriverStartIo; + PDRIVER_UNLOAD DriverUnload; + PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; +} DRIVER_OBJECT; +typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; typedef struct _DMA_ADAPTER { - USHORT Version; - USHORT Size; - struct _DMA_OPERATIONS* DmaOperations; + USHORT Version; + USHORT Size; + struct _DMA_OPERATIONS* DmaOperations; } DMA_ADAPTER, *PDMA_ADAPTER; typedef VOID -(NTAPI *PPUT_DMA_ADAPTER)( - IN PDMA_ADAPTER DmaAdapter); +(DDKAPI *PPUT_DMA_ADAPTER)( + IN PDMA_ADAPTER DmaAdapter); typedef PVOID -(NTAPI *PALLOCATE_COMMON_BUFFER)( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled); +(DDKAPI *PALLOCATE_COMMON_BUFFER)( + IN PDMA_ADAPTER DmaAdapter, + IN ULONG Length, + OUT PPHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled); typedef VOID -(NTAPI *PFREE_COMMON_BUFFER)( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled); +(DDKAPI *PFREE_COMMON_BUFFER)( + IN PDMA_ADAPTER DmaAdapter, + IN ULONG Length, + IN PHYSICAL_ADDRESS LogicalAddress, + IN PVOID VirtualAddress, + IN BOOLEAN CacheEnabled); typedef NTSTATUS -(NTAPI *PALLOCATE_ADAPTER_CHANNEL)( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context); +(DDKAPI *PALLOCATE_ADAPTER_CHANNEL)( + IN PDMA_ADAPTER DmaAdapter, + IN PDEVICE_OBJECT DeviceObject, + IN ULONG NumberOfMapRegisters, + IN PDRIVER_CONTROL ExecutionRoutine, + IN PVOID Context); typedef BOOLEAN -(NTAPI *PFLUSH_ADAPTER_BUFFERS)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN ULONG Length, - IN BOOLEAN WriteToDevice); +(DDKAPI *PFLUSH_ADAPTER_BUFFERS)( + IN PDMA_ADAPTER DmaAdapter, + IN PMDL Mdl, + IN PVOID MapRegisterBase, + IN PVOID CurrentVa, + IN ULONG Length, + IN BOOLEAN WriteToDevice); typedef VOID -(NTAPI *PFREE_ADAPTER_CHANNEL)( - IN PDMA_ADAPTER DmaAdapter); +(DDKAPI *PFREE_ADAPTER_CHANNEL)( + IN PDMA_ADAPTER DmaAdapter); typedef VOID -(NTAPI *PFREE_MAP_REGISTERS)( - IN PDMA_ADAPTER DmaAdapter, - PVOID MapRegisterBase, - ULONG NumberOfMapRegisters); +(DDKAPI *PFREE_MAP_REGISTERS)( + IN PDMA_ADAPTER DmaAdapter, + PVOID MapRegisterBase, + ULONG NumberOfMapRegisters); typedef PHYSICAL_ADDRESS -(NTAPI *PMAP_TRANSFER)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice); +(DDKAPI *PMAP_TRANSFER)( + IN PDMA_ADAPTER DmaAdapter, + IN PMDL Mdl, + IN PVOID MapRegisterBase, + IN PVOID CurrentVa, + IN OUT PULONG Length, + IN BOOLEAN WriteToDevice); typedef ULONG -(NTAPI *PGET_DMA_ALIGNMENT)( - IN PDMA_ADAPTER DmaAdapter); +(DDKAPI *PGET_DMA_ALIGNMENT)( + IN PDMA_ADAPTER DmaAdapter); typedef ULONG -(NTAPI *PREAD_DMA_COUNTER)( - IN PDMA_ADAPTER DmaAdapter); +(DDKAPI *PREAD_DMA_COUNTER)( + IN PDMA_ADAPTER DmaAdapter); typedef VOID -(NTAPI DRIVER_LIST_CONTROL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN struct _SCATTER_GATHER_LIST *ScatterGather, - IN PVOID Context); -typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL; +(DDKAPI *PDRIVER_LIST_CONTROL)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN struct _SCATTER_GATHER_LIST *ScatterGather, + IN PVOID Context); typedef NTSTATUS -(NTAPI *PGET_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER 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); +(DDKAPI *PGET_SCATTER_GATHER_LIST)( + IN PDMA_ADAPTER 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); typedef VOID -(NTAPI *PPUT_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN BOOLEAN WriteToDevice); +(DDKAPI *PPUT_SCATTER_GATHER_LIST)( + IN PDMA_ADAPTER DmaAdapter, + IN PSCATTER_GATHER_LIST ScatterGather, + IN BOOLEAN WriteToDevice); typedef NTSTATUS -(NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl OPTIONAL, - IN PVOID CurrentVa, - IN ULONG Length, - OUT PULONG ScatterGatherListSize, - OUT PULONG pNumberOfMapRegisters OPTIONAL); +(DDKAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( + IN PDMA_ADAPTER DmaAdapter, + IN PMDL Mdl OPTIONAL, + IN PVOID CurrentVa, + IN ULONG Length, + OUT PULONG ScatterGatherListSize, + OUT PULONG pNumberOfMapRegisters OPTIONAL); typedef NTSTATUS -(NTAPI *PBUILD_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER 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, - IN PVOID ScatterGatherBuffer, - IN ULONG ScatterGatherLength); +(DDKAPI *PBUILD_SCATTER_GATHER_LIST)( + IN PDMA_ADAPTER 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, + IN PVOID ScatterGatherBuffer, + IN ULONG ScatterGatherLength); typedef NTSTATUS -(NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN PMDL OriginalMdl, - OUT PMDL *TargetMdl); +(DDKAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( + IN PDMA_ADAPTER DmaAdapter, + IN PSCATTER_GATHER_LIST ScatterGather, + IN PMDL OriginalMdl, + OUT PMDL *TargetMdl); typedef struct _DMA_OPERATIONS { - ULONG Size; - PPUT_DMA_ADAPTER PutDmaAdapter; - PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; - PFREE_COMMON_BUFFER FreeCommonBuffer; - PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; - PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; - PFREE_ADAPTER_CHANNEL FreeAdapterChannel; - PFREE_MAP_REGISTERS FreeMapRegisters; - PMAP_TRANSFER MapTransfer; - PGET_DMA_ALIGNMENT GetDmaAlignment; - PREAD_DMA_COUNTER ReadDmaCounter; - PGET_SCATTER_GATHER_LIST GetScatterGatherList; - PPUT_SCATTER_GATHER_LIST PutScatterGatherList; - PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; - PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; - PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; + ULONG Size; + PPUT_DMA_ADAPTER PutDmaAdapter; + PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; + PFREE_COMMON_BUFFER FreeCommonBuffer; + PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; + PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; + PFREE_ADAPTER_CHANNEL FreeAdapterChannel; + PFREE_MAP_REGISTERS FreeMapRegisters; + PMAP_TRANSFER MapTransfer; + PGET_DMA_ALIGNMENT GetDmaAlignment; + PREAD_DMA_COUNTER ReadDmaCounter; + PGET_SCATTER_GATHER_LIST GetScatterGatherList; + PPUT_SCATTER_GATHER_LIST PutScatterGatherList; + PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; + PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; + PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; } DMA_OPERATIONS, *PDMA_OPERATIONS; typedef struct _IO_RESOURCE_DESCRIPTOR { - UCHAR Option; - UCHAR Type; - UCHAR ShareDisposition; - UCHAR Spare1; - USHORT Flags; - USHORT Spare2; + UCHAR Option; + UCHAR Type; + UCHAR ShareDisposition; + UCHAR Spare1; + USHORT Flags; + USHORT Spare2; union { struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; } Port; struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; } Memory; struct { - ULONG MinimumVector; - ULONG MaximumVector; + ULONG MinimumVector; + ULONG MaximumVector; } Interrupt; struct { - ULONG MinimumChannel; - ULONG MaximumChannel; + ULONG MinimumChannel; + ULONG MaximumChannel; } Dma; struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; } Generic; struct { - ULONG Data[3]; + ULONG Data[3]; } DevicePrivate; struct { - ULONG Length; - ULONG MinBusNumber; - ULONG MaxBusNumber; - ULONG Reserved; + ULONG Length; + ULONG MinBusNumber; + ULONG MaxBusNumber; + ULONG Reserved; } BusNumber; struct { - ULONG Priority; - ULONG Reserved1; - ULONG Reserved2; + ULONG Priority; + ULONG Reserved1; + ULONG Reserved2; } ConfigData; } u; } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; typedef struct _IO_RESOURCE_LIST { - USHORT Version; - USHORT Revision; - ULONG Count; - IO_RESOURCE_DESCRIPTOR Descriptors[1]; + USHORT Version; + USHORT Revision; + ULONG Count; + IO_RESOURCE_DESCRIPTOR Descriptors[1]; } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { - ULONG ListSize; - INTERFACE_TYPE InterfaceType; - ULONG BusNumber; - ULONG SlotNumber; - ULONG Reserved[3]; - ULONG AlternativeLists; - IO_RESOURCE_LIST List[1]; + ULONG ListSize; + INTERFACE_TYPE InterfaceType; + ULONG BusNumber; + ULONG SlotNumber; + ULONG Reserved[3]; + ULONG AlternativeLists; + IO_RESOURCE_LIST List[1]; } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; typedef VOID -(NTAPI DRIVER_CANCEL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); +(DDKAPI DRIVER_CANCEL)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp); typedef DRIVER_CANCEL *PDRIVER_CANCEL; typedef struct _IRP { - CSHORT Type; - USHORT Size; - struct _MDL *MdlAddress; - ULONG Flags; + CSHORT Type; + USHORT Size; + struct _MDL *MdlAddress; + ULONG Flags; union { - struct _IRP *MasterIrp; - volatile LONG IrpCount; - PVOID SystemBuffer; + struct _IRP *MasterIrp; + volatile LONG IrpCount; + PVOID SystemBuffer; } AssociatedIrp; - LIST_ENTRY ThreadListEntry; - IO_STATUS_BLOCK IoStatus; - KPROCESSOR_MODE RequestorMode; - BOOLEAN PendingReturned; - CHAR StackCount; - CHAR CurrentLocation; - BOOLEAN Cancel; - KIRQL CancelIrql; - CCHAR ApcEnvironment; - UCHAR AllocationFlags; - PIO_STATUS_BLOCK UserIosb; - PKEVENT UserEvent; + LIST_ENTRY ThreadListEntry; + IO_STATUS_BLOCK IoStatus; + KPROCESSOR_MODE RequestorMode; + BOOLEAN PendingReturned; + CHAR StackCount; + CHAR CurrentLocation; + BOOLEAN Cancel; + KIRQL CancelIrql; + CCHAR ApcEnvironment; + UCHAR AllocationFlags; + PIO_STATUS_BLOCK UserIosb; + PKEVENT UserEvent; union { struct { - _ANONYMOUS_UNION union { - PIO_APC_ROUTINE UserApcRoutine; + _ANONYMOUS_UNION union { + PIO_APC_ROUTINE UserApcRoutine; PVOID IssuingProcess; } DUMMYUNIONNAME; - PVOID UserApcContext; + PVOID UserApcContext; } AsynchronousParameters; - LARGE_INTEGER AllocationSize; + LARGE_INTEGER AllocationSize; } Overlay; - volatile PDRIVER_CANCEL CancelRoutine; - PVOID UserBuffer; + volatile PDRIVER_CANCEL CancelRoutine; + PVOID UserBuffer; union { struct { _ANONYMOUS_UNION union { - KDEVICE_QUEUE_ENTRY DeviceQueueEntry; + KDEVICE_QUEUE_ENTRY DeviceQueueEntry; _ANONYMOUS_STRUCT struct { - PVOID DriverContext[4]; + PVOID DriverContext[4]; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - PETHREAD Thread; - PCHAR AuxiliaryBuffer; + PETHREAD Thread; + PCHAR AuxiliaryBuffer; _ANONYMOUS_STRUCT struct { - LIST_ENTRY ListEntry; + LIST_ENTRY ListEntry; _ANONYMOUS_UNION union { - struct _IO_STACK_LOCATION *CurrentStackLocation; - ULONG PacketType; + struct _IO_STACK_LOCATION *CurrentStackLocation; + ULONG PacketType; } DUMMYUNIONNAME; } DUMMYSTRUCTNAME; - struct _FILE_OBJECT *OriginalFileObject; + struct _FILE_OBJECT *OriginalFileObject; } Overlay; - KAPC Apc; - PVOID CompletionKey; + KAPC Apc; + PVOID CompletionKey; } Tail; -} IRP, *PIRP; +} IRP; +typedef struct _IRP *PIRP; typedef enum _IO_PAGING_PRIORITY { IoPagingPriorityInvalid, @@ -6070,96 +4824,93 @@ typedef enum _IO_PAGING_PRIORITY { } IO_PAGING_PRIORITY; typedef NTSTATUS -(NTAPI IO_COMPLETION_ROUTINE)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID Context); +(DDKAPI IO_COMPLETION_ROUTINE)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN PVOID Context); typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; typedef VOID -(NTAPI IO_DPC_ROUTINE)( - IN struct _KDPC *Dpc, - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID Context); -typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE; +(DDKAPI *PIO_DPC_ROUTINE)( + IN struct _KDPC *Dpc, + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN PVOID Context); typedef NTSTATUS -(NTAPI *PMM_DLL_INITIALIZE)( - IN PUNICODE_STRING RegistryPath); +(DDKAPI *PMM_DLL_INITIALIZE)( + IN PUNICODE_STRING RegistryPath); typedef NTSTATUS -(NTAPI *PMM_DLL_UNLOAD)( +(DDKAPI *PMM_DLL_UNLOAD)( VOID); +typedef BOOLEAN +(DDKAPI KSERVICE_ROUTINE)( + IN struct _KINTERRUPT *Interrupt, + IN PVOID ServiceContext); +typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; + typedef VOID -(NTAPI IO_TIMER_ROUTINE)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN PVOID Context); -typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE; +(DDKAPI *PIO_TIMER_ROUTINE)( + IN struct _DEVICE_OBJECT *DeviceObject, + IN PVOID Context); typedef struct _IO_SECURITY_CONTEXT { - PSECURITY_QUALITY_OF_SERVICE SecurityQos; - PACCESS_STATE AccessState; - ACCESS_MASK DesiredAccess; - ULONG FullCreateOptions; + PSECURITY_QUALITY_OF_SERVICE SecurityQos; + PACCESS_STATE AccessState; + ACCESS_MASK DesiredAccess; + ULONG FullCreateOptions; } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; struct _IO_CSQ; typedef struct _IO_CSQ_IRP_CONTEXT { - ULONG Type; - struct _IRP *Irp; - struct _IO_CSQ *Csq; + ULONG Type; + struct _IRP *Irp; + struct _IO_CSQ *Csq; } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; typedef VOID -(NTAPI *PIO_CSQ_INSERT_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); - -typedef NTSTATUS -(NTAPI IO_CSQ_INSERT_IRP_EX)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp, - IN PVOID InsertContext); -typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX; +(DDKAPI *PIO_CSQ_INSERT_IRP)( + IN struct _IO_CSQ *Csq, + IN PIRP Irp); typedef VOID -(NTAPI *PIO_CSQ_REMOVE_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); +(DDKAPI *PIO_CSQ_REMOVE_IRP)( + IN struct _IO_CSQ *Csq, + IN PIRP Irp); typedef PIRP -(NTAPI *PIO_CSQ_PEEK_NEXT_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp, - IN PVOID PeekContext); +(DDKAPI *PIO_CSQ_PEEK_NEXT_IRP)( + IN struct _IO_CSQ *Csq, + IN PIRP Irp, + IN PVOID PeekContext); typedef VOID -(NTAPI *PIO_CSQ_ACQUIRE_LOCK)( - IN struct _IO_CSQ *Csq, - OUT PKIRQL Irql); +(DDKAPI *PIO_CSQ_ACQUIRE_LOCK)( + IN struct _IO_CSQ *Csq, + OUT PKIRQL Irql); typedef VOID -(NTAPI *PIO_CSQ_RELEASE_LOCK)( - IN struct _IO_CSQ *Csq, - IN KIRQL Irql); +(DDKAPI *PIO_CSQ_RELEASE_LOCK)( + IN struct _IO_CSQ *Csq, + IN KIRQL Irql); typedef VOID -(NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); +(DDKAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( + IN struct _IO_CSQ *Csq, + IN PIRP Irp); typedef struct _IO_CSQ { - ULONG Type; - PIO_CSQ_INSERT_IRP CsqInsertIrp; - PIO_CSQ_REMOVE_IRP CsqRemoveIrp; - PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; - PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; - PIO_CSQ_RELEASE_LOCK CsqReleaseLock; - PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; - PVOID ReservePointer; + ULONG Type; + PIO_CSQ_INSERT_IRP CsqInsertIrp; + PIO_CSQ_REMOVE_IRP CsqRemoveIrp; + PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; + PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; + PIO_CSQ_RELEASE_LOCK CsqReleaseLock; + PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; + PVOID ReservePointer; } IO_CSQ, *PIO_CSQ; typedef enum _BUS_QUERY_ID_TYPE { @@ -6175,321 +4926,198 @@ typedef enum _DEVICE_TEXT_TYPE { DeviceTextLocationInformation } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; -typedef BOOLEAN -(NTAPI *PGPE_SERVICE_ROUTINE)( - PVOID, - PVOID); - -typedef NTSTATUS -(NTAPI *PGPE_CONNECT_VECTOR)( - PDEVICE_OBJECT, - ULONG, - KINTERRUPT_MODE, - BOOLEAN, - PGPE_SERVICE_ROUTINE, - PVOID, - PVOID); - -typedef NTSTATUS -(NTAPI *PGPE_DISCONNECT_VECTOR)( - PVOID); - -typedef NTSTATUS -(NTAPI *PGPE_ENABLE_EVENT)( - PDEVICE_OBJECT, - PVOID); - -typedef NTSTATUS -(NTAPI *PGPE_DISABLE_EVENT)( - PDEVICE_OBJECT, - PVOID); - -typedef NTSTATUS -(NTAPI *PGPE_CLEAR_STATUS)( - PDEVICE_OBJECT, - PVOID); - -typedef VOID -(NTAPI *PDEVICE_NOTIFY_CALLBACK)( - PVOID, - ULONG); - -typedef NTSTATUS -(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( - PDEVICE_OBJECT, - PDEVICE_NOTIFY_CALLBACK, - PVOID); - -typedef VOID -(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( - PDEVICE_OBJECT, - PDEVICE_NOTIFY_CALLBACK); - -typedef struct _ACPI_INTERFACE_STANDARD { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PGPE_CONNECT_VECTOR GpeConnectVector; - PGPE_DISCONNECT_VECTOR GpeDisconnectVector; - PGPE_ENABLE_EVENT GpeEnableEvent; - PGPE_DISABLE_EVENT GpeDisableEvent; - PGPE_CLEAR_STATUS GpeClearStatus; - PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications; - PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications; -} ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD; - -typedef BOOLEAN -(NTAPI *PGPE_SERVICE_ROUTINE2)( - PVOID ObjectContext, - PVOID ServiceContext); - -typedef NTSTATUS -(NTAPI *PGPE_CONNECT_VECTOR2)( - PVOID Context, - ULONG GpeNumber, - KINTERRUPT_MODE Mode, - BOOLEAN Shareable, - PGPE_SERVICE_ROUTINE ServiceRoutine, - PVOID ServiceContext, - PVOID *ObjectContext); - -typedef NTSTATUS -(NTAPI *PGPE_DISCONNECT_VECTOR2)( - PVOID Context, - PVOID ObjectContext); - -typedef NTSTATUS -(NTAPI *PGPE_ENABLE_EVENT2)( - PVOID Context, - PVOID ObjectContext); - -typedef NTSTATUS -(NTAPI *PGPE_DISABLE_EVENT2)( - PVOID Context, - PVOID ObjectContext); - -typedef NTSTATUS -(NTAPI *PGPE_CLEAR_STATUS2)( - PVOID Context, - PVOID ObjectContext); - -typedef VOID -(NTAPI *PDEVICE_NOTIFY_CALLBACK2)( - PVOID NotificationContext, - ULONG NotifyCode); - -typedef NTSTATUS -(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( - PVOID Context, - PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, - PVOID NotificationContext); - -typedef VOID -(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( - PVOID Context); - -typedef struct _ACPI_INTERFACE_STANDARD2 { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PGPE_CONNECT_VECTOR2 GpeConnectVector; - PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector; - PGPE_ENABLE_EVENT2 GpeEnableEvent; - PGPE_DISABLE_EVENT2 GpeDisableEvent; - PGPE_CLEAR_STATUS2 GpeClearStatus; - PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications; - PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications; -} ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2; +typedef enum _WORK_QUEUE_TYPE { + CriticalWorkQueue, + DelayedWorkQueue, + HyperCriticalWorkQueue, + MaximumWorkQueue +} WORK_QUEUE_TYPE; #if !defined(_AMD64_) && !defined(_IA64_) #include #endif typedef struct _IO_STACK_LOCATION { - UCHAR MajorFunction; - UCHAR MinorFunction; - UCHAR Flags; - UCHAR Control; + UCHAR MajorFunction; + UCHAR MinorFunction; + UCHAR Flags; + UCHAR Control; union { struct { - PIO_SECURITY_CONTEXT SecurityContext; - ULONG Options; - USHORT POINTER_ALIGNMENT FileAttributes; - USHORT ShareAccess; - ULONG POINTER_ALIGNMENT EaLength; + PIO_SECURITY_CONTEXT SecurityContext; + ULONG Options; + USHORT POINTER_ALIGNMENT FileAttributes; + USHORT ShareAccess; + ULONG POINTER_ALIGNMENT EaLength; } Create; struct { - ULONG Length; - ULONG POINTER_ALIGNMENT Key; - LARGE_INTEGER ByteOffset; + ULONG Length; + ULONG POINTER_ALIGNMENT Key; + LARGE_INTEGER ByteOffset; } Read; struct { - ULONG Length; - ULONG POINTER_ALIGNMENT Key; - LARGE_INTEGER ByteOffset; + ULONG Length; + ULONG POINTER_ALIGNMENT Key; + LARGE_INTEGER ByteOffset; } Write; struct { - ULONG Length; - PUNICODE_STRING FileName; - FILE_INFORMATION_CLASS FileInformationClass; - ULONG FileIndex; + ULONG Length; + PUNICODE_STRING FileName; + FILE_INFORMATION_CLASS FileInformationClass; + ULONG FileIndex; } QueryDirectory; struct { - ULONG Length; - ULONG CompletionFilter; + ULONG Length; + ULONG CompletionFilter; } NotifyDirectory; struct { - ULONG Length; - FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; + ULONG Length; + FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; } QueryFile; struct { - ULONG Length; - FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; - PFILE_OBJECT FileObject; + ULONG Length; + FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; + PFILE_OBJECT FileObject; _ANONYMOUS_UNION union { _ANONYMOUS_STRUCT struct { - BOOLEAN ReplaceIfExists; - BOOLEAN AdvanceOnly; + BOOLEAN ReplaceIfExists; + BOOLEAN AdvanceOnly; } DUMMYSTRUCTNAME; - ULONG ClusterCount; - HANDLE DeleteHandle; + ULONG ClusterCount; + HANDLE DeleteHandle; } DUMMYUNIONNAME; } SetFile; struct { - ULONG Length; - PVOID EaList; - ULONG EaListLength; - ULONG EaIndex; + ULONG Length; + PVOID EaList; + ULONG EaListLength; + ULONG EaIndex; } QueryEa; struct { - ULONG Length; + ULONG Length; } SetEa; struct { - ULONG Length; - FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; + ULONG Length; + FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; } QueryVolume; struct { - ULONG Length; - FS_INFORMATION_CLASS FsInformationClass; + ULONG Length; + FS_INFORMATION_CLASS FsInformationClass; } SetVolume; struct { - ULONG OutputBufferLength; - ULONG InputBufferLength; - ULONG FsControlCode; - PVOID Type3InputBuffer; + ULONG OutputBufferLength; + ULONG InputBufferLength; + ULONG FsControlCode; + PVOID Type3InputBuffer; } FileSystemControl; struct { - PLARGE_INTEGER Length; - ULONG Key; - LARGE_INTEGER ByteOffset; + PLARGE_INTEGER Length; + ULONG Key; + LARGE_INTEGER ByteOffset; } LockControl; struct { - ULONG OutputBufferLength; - ULONG POINTER_ALIGNMENT InputBufferLength; - ULONG POINTER_ALIGNMENT IoControlCode; - PVOID Type3InputBuffer; + ULONG OutputBufferLength; + ULONG POINTER_ALIGNMENT InputBufferLength; + ULONG POINTER_ALIGNMENT IoControlCode; + PVOID Type3InputBuffer; } DeviceIoControl; struct { - SECURITY_INFORMATION SecurityInformation; - ULONG POINTER_ALIGNMENT Length; + SECURITY_INFORMATION SecurityInformation; + ULONG POINTER_ALIGNMENT Length; } QuerySecurity; struct { - SECURITY_INFORMATION SecurityInformation; - PSECURITY_DESCRIPTOR SecurityDescriptor; + SECURITY_INFORMATION SecurityInformation; + PSECURITY_DESCRIPTOR SecurityDescriptor; } SetSecurity; struct { - PVPB Vpb; - PDEVICE_OBJECT DeviceObject; + PVPB Vpb; + PDEVICE_OBJECT DeviceObject; } MountVolume; struct { - PVPB Vpb; - PDEVICE_OBJECT DeviceObject; + PVPB Vpb; + PDEVICE_OBJECT DeviceObject; } VerifyVolume; struct { - struct _SCSI_REQUEST_BLOCK *Srb; + struct _SCSI_REQUEST_BLOCK *Srb; } Scsi; struct { - ULONG Length; - PSID StartSid; - struct _FILE_GET_QUOTA_INFORMATION *SidList; - ULONG SidListLength; + ULONG Length; + PSID StartSid; + struct _FILE_GET_QUOTA_INFORMATION *SidList; + ULONG SidListLength; } QueryQuota; struct { - ULONG Length; + ULONG Length; } SetQuota; struct { - DEVICE_RELATION_TYPE Type; + DEVICE_RELATION_TYPE Type; } QueryDeviceRelations; struct { - CONST GUID *InterfaceType; - USHORT Size; - USHORT Version; - PINTERFACE Interface; - PVOID InterfaceSpecificData; + CONST GUID *InterfaceType; + USHORT Size; + USHORT Version; + PINTERFACE Interface; + PVOID InterfaceSpecificData; } QueryInterface; struct { - PDEVICE_CAPABILITIES Capabilities; + PDEVICE_CAPABILITIES Capabilities; } DeviceCapabilities; struct { - PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; + PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; } FilterResourceRequirements; struct { - ULONG WhichSpace; - PVOID Buffer; - ULONG Offset; - ULONG POINTER_ALIGNMENT Length; + ULONG WhichSpace; + PVOID Buffer; + ULONG Offset; + ULONG POINTER_ALIGNMENT Length; } ReadWriteConfig; struct { - BOOLEAN Lock; + BOOLEAN Lock; } SetLock; struct { - BUS_QUERY_ID_TYPE IdType; + BUS_QUERY_ID_TYPE IdType; } QueryId; struct { - DEVICE_TEXT_TYPE DeviceTextType; - LCID POINTER_ALIGNMENT LocaleId; + DEVICE_TEXT_TYPE DeviceTextType; + LCID POINTER_ALIGNMENT LocaleId; } QueryDeviceText; struct { - BOOLEAN InPath; - BOOLEAN Reserved[3]; - DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; + BOOLEAN InPath; + BOOLEAN Reserved[3]; + DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; } UsageNotification; struct { - SYSTEM_POWER_STATE PowerState; + SYSTEM_POWER_STATE PowerState; } WaitWake; struct { - PPOWER_SEQUENCE PowerSequence; + PPOWER_SEQUENCE PowerSequence; } PowerSequence; struct { - ULONG SystemContext; - POWER_STATE_TYPE POINTER_ALIGNMENT Type; - POWER_STATE POINTER_ALIGNMENT State; - POWER_ACTION POINTER_ALIGNMENT ShutdownType; + ULONG SystemContext; + POWER_STATE_TYPE POINTER_ALIGNMENT Type; + POWER_STATE POINTER_ALIGNMENT State; + POWER_ACTION POINTER_ALIGNMENT ShutdownType; } Power; struct { - PCM_RESOURCE_LIST AllocatedResources; - PCM_RESOURCE_LIST AllocatedResourcesTranslated; + PCM_RESOURCE_LIST AllocatedResources; + PCM_RESOURCE_LIST AllocatedResourcesTranslated; } StartDevice; struct { - ULONG_PTR ProviderId; - PVOID DataPath; - ULONG BufferSize; - PVOID Buffer; + ULONG_PTR ProviderId; + PVOID DataPath; + ULONG BufferSize; + PVOID Buffer; } WMI; struct { - PVOID Argument1; - PVOID Argument2; - PVOID Argument3; - PVOID Argument4; + PVOID Argument1; + PVOID Argument2; + PVOID Argument3; + PVOID Argument4; } Others; } Parameters; - PDEVICE_OBJECT DeviceObject; - PFILE_OBJECT FileObject; - PIO_COMPLETION_ROUTINE CompletionRoutine; - PVOID Context; + PDEVICE_OBJECT DeviceObject; + PFILE_OBJECT FileObject; + PIO_COMPLETION_ROUTINE CompletionRoutine; + PVOID Context; } IO_STACK_LOCATION, *PIO_STACK_LOCATION; #if !defined(_AMD64_) && !defined(_IA64_) #include @@ -6503,13 +5131,16 @@ typedef struct _IO_STACK_LOCATION { #define SL_INVOKE_ON_SUCCESS 0x40 #define SL_INVOKE_ON_ERROR 0x80 +/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ + +#define PCI_WHICHSPACE_CONFIG 0x0 +#define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ + #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 -#define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT -#define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT #define FILE_SUPERSEDED 0x00000000 #define FILE_OPENED 0x00000001 @@ -6556,7 +5187,6 @@ typedef struct _IO_STACK_LOCATION { #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 -#define FILE_ATTRIBUTE_VIRTUAL 0x00010000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 @@ -6590,10 +5220,6 @@ typedef struct _IO_STACK_LOCATION { #define FILE_OPEN_BY_FILE_ID 0x00002000 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 #define FILE_NO_COMPRESSION 0x00008000 -#if (NTDDI_VERSION >= NTDDI_WIN7) -#define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 -#define FILE_DISALLOW_EXCLUSIVE 0x00020000 -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #define FILE_RESERVE_OPFILTER 0x00100000 #define FILE_OPEN_REPARSE_POINT 0x00200000 #define FILE_OPEN_NO_RECALL 0x00400000 @@ -6632,926 +5258,15 @@ typedef struct _IO_STACK_LOCATION { /* end winnt.h */ -#define WMIREG_ACTION_REGISTER 1 -#define WMIREG_ACTION_DEREGISTER 2 -#define WMIREG_ACTION_REREGISTER 3 -#define WMIREG_ACTION_UPDATE_GUIDS 4 -#define WMIREG_ACTION_BLOCK_IRPS 5 - -#define WMIREGISTER 0 -#define WMIUPDATE 1 - -typedef VOID -(NTAPI FWMI_NOTIFICATION_CALLBACK)( - PVOID Wnode, - PVOID Context); -typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK; - -#ifndef _PCI_X_ -#define _PCI_X_ - -typedef struct _PCI_SLOT_NUMBER { - union { - struct { - ULONG DeviceNumber:5; - ULONG FunctionNumber:3; - ULONG Reserved:24; - } bits; - ULONG AsULONG; - } u; -} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; - -#define PCI_TYPE0_ADDRESSES 6 -#define PCI_TYPE1_ADDRESSES 2 -#define PCI_TYPE2_ADDRESSES 5 - -typedef struct _PCI_COMMON_HEADER { - PCI_COMMON_HEADER_LAYOUT -} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; - -#ifdef __cplusplus -typedef struct _PCI_COMMON_CONFIG { - PCI_COMMON_HEADER_LAYOUT - UCHAR DeviceSpecific[192]; -} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; -#else -typedef struct _PCI_COMMON_CONFIG { - PCI_COMMON_HEADER DUMMYSTRUCTNAME; - UCHAR DeviceSpecific[192]; -} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; -#endif - -#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) - -#define PCI_EXTENDED_CONFIG_LENGTH 0x1000 - -#define PCI_MAX_DEVICES 32 -#define PCI_MAX_FUNCTION 8 -#define PCI_MAX_BRIDGE_NUMBER 0xFF -#define PCI_INVALID_VENDORID 0xFFFF - -/* PCI_COMMON_CONFIG.HeaderType */ -#define PCI_MULTIFUNCTION 0x80 -#define PCI_DEVICE_TYPE 0x00 -#define PCI_BRIDGE_TYPE 0x01 -#define PCI_CARDBUS_BRIDGE_TYPE 0x02 - -#define PCI_CONFIGURATION_TYPE(PciData) \ - (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) - -#define PCI_MULTIFUNCTION_DEVICE(PciData) \ - ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) - -/* PCI_COMMON_CONFIG.Command */ -#define PCI_ENABLE_IO_SPACE 0x0001 -#define PCI_ENABLE_MEMORY_SPACE 0x0002 -#define PCI_ENABLE_BUS_MASTER 0x0004 -#define PCI_ENABLE_SPECIAL_CYCLES 0x0008 -#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 -#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 -#define PCI_ENABLE_PARITY 0x0040 -#define PCI_ENABLE_WAIT_CYCLE 0x0080 -#define PCI_ENABLE_SERR 0x0100 -#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 -#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 - -/* PCI_COMMON_CONFIG.Status */ -#define PCI_STATUS_INTERRUPT_PENDING 0x0008 -#define PCI_STATUS_CAPABILITIES_LIST 0x0010 -#define PCI_STATUS_66MHZ_CAPABLE 0x0020 -#define PCI_STATUS_UDF_SUPPORTED 0x0040 -#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 -#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 -#define PCI_STATUS_DEVSEL 0x0600 -#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 -#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 -#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 -#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 -#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 - -/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ - -#define PCI_WHICHSPACE_CONFIG 0x0 -#define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ - -#define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01 -#define PCI_CAPABILITY_ID_AGP 0x02 -#define PCI_CAPABILITY_ID_VPD 0x03 -#define PCI_CAPABILITY_ID_SLOT_ID 0x04 -#define PCI_CAPABILITY_ID_MSI 0x05 -#define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06 -#define PCI_CAPABILITY_ID_PCIX 0x07 -#define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08 -#define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09 -#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A -#define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B -#define PCI_CAPABILITY_ID_SHPC 0x0C -#define PCI_CAPABILITY_ID_P2P_SSID 0x0D -#define PCI_CAPABILITY_ID_AGP_TARGET 0x0E -#define PCI_CAPABILITY_ID_SECURE 0x0F -#define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10 -#define PCI_CAPABILITY_ID_MSIX 0x11 - -typedef struct _PCI_CAPABILITIES_HEADER { - UCHAR CapabilityID; - UCHAR Next; -} PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER; - -typedef struct _PCI_PMC { - UCHAR Version:3; - UCHAR PMEClock:1; - UCHAR Rsvd1:1; - UCHAR DeviceSpecificInitialization:1; - UCHAR Rsvd2:2; - struct _PM_SUPPORT { - UCHAR Rsvd2:1; - UCHAR D1:1; - UCHAR D2:1; - UCHAR PMED0:1; - UCHAR PMED1:1; - UCHAR PMED2:1; - UCHAR PMED3Hot:1; - UCHAR PMED3Cold:1; - } Support; -} PCI_PMC, *PPCI_PMC; - -typedef struct _PCI_PMCSR { - USHORT PowerState:2; - USHORT Rsvd1:6; - USHORT PMEEnable:1; - USHORT DataSelect:4; - USHORT DataScale:2; - USHORT PMEStatus:1; -} PCI_PMCSR, *PPCI_PMCSR; - -typedef struct _PCI_PMCSR_BSE { - UCHAR Rsvd1:6; - UCHAR D3HotSupportsStopClock:1; - UCHAR BusPowerClockControlEnabled:1; -} PCI_PMCSR_BSE, *PPCI_PMCSR_BSE; - -typedef struct _PCI_PM_CAPABILITY { - PCI_CAPABILITIES_HEADER Header; - union { - PCI_PMC Capabilities; - USHORT AsUSHORT; - } PMC; - union { - PCI_PMCSR ControlStatus; - USHORT AsUSHORT; - } PMCSR; - union { - PCI_PMCSR_BSE BridgeSupport; - UCHAR AsUCHAR; - } PMCSR_BSE; - UCHAR Data; -} PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY; - -typedef struct { - PCI_CAPABILITIES_HEADER Header; - union { - struct { - USHORT DataParityErrorRecoveryEnable:1; - USHORT EnableRelaxedOrdering:1; - USHORT MaxMemoryReadByteCount:2; - USHORT MaxOutstandingSplitTransactions:3; - USHORT Reserved:9; - } bits; - USHORT AsUSHORT; - } Command; - union { - struct { - ULONG FunctionNumber:3; - ULONG DeviceNumber:5; - ULONG BusNumber:8; - ULONG Device64Bit:1; - ULONG Capable133MHz:1; - ULONG SplitCompletionDiscarded:1; - ULONG UnexpectedSplitCompletion:1; - ULONG DeviceComplexity:1; - ULONG DesignedMaxMemoryReadByteCount:2; - ULONG DesignedMaxOutstandingSplitTransactions:3; - ULONG DesignedMaxCumulativeReadSize:3; - ULONG ReceivedSplitCompletionErrorMessage:1; - ULONG CapablePCIX266:1; - ULONG CapablePCIX533:1; - } bits; - ULONG AsULONG; - } Status; -} PCI_X_CAPABILITY, *PPCI_X_CAPABILITY; - -#define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001 -#define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002 -#define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003 -#define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004 -#define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005 -#define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006 -#define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007 -#define PCI_EXPRESS_MFVC_CAP_ID 0x0008 -#define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009 -#define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A -#define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010 - -typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER { - USHORT CapabilityID; - USHORT Version:4; - USHORT Next:12; -} PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER; - -typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY { - PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; - ULONG LowSerialNumber; - ULONG HighSerialNumber; -} PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY; - -typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS { - struct { - ULONG Undefined:1; - ULONG Reserved1:3; - ULONG DataLinkProtocolError:1; - ULONG SurpriseDownError:1; - ULONG Reserved2:6; - ULONG PoisonedTLP:1; - ULONG FlowControlProtocolError:1; - ULONG CompletionTimeout:1; - ULONG CompleterAbort:1; - ULONG UnexpectedCompletion:1; - ULONG ReceiverOverflow:1; - ULONG MalformedTLP:1; - ULONG ECRCError:1; - ULONG UnsupportedRequestError:1; - ULONG Reserved3:11; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS; - -typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK { - struct { - ULONG Undefined:1; - ULONG Reserved1:3; - ULONG DataLinkProtocolError:1; - ULONG SurpriseDownError:1; - ULONG Reserved2:6; - ULONG PoisonedTLP:1; - ULONG FlowControlProtocolError:1; - ULONG CompletionTimeout:1; - ULONG CompleterAbort:1; - ULONG UnexpectedCompletion:1; - ULONG ReceiverOverflow:1; - ULONG MalformedTLP:1; - ULONG ECRCError:1; - ULONG UnsupportedRequestError:1; - ULONG Reserved3:11; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK; - -typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY { - struct { - ULONG Undefined:1; - ULONG Reserved1:3; - ULONG DataLinkProtocolError:1; - ULONG SurpriseDownError:1; - ULONG Reserved2:6; - ULONG PoisonedTLP:1; - ULONG FlowControlProtocolError:1; - ULONG CompletionTimeout:1; - ULONG CompleterAbort:1; - ULONG UnexpectedCompletion:1; - ULONG ReceiverOverflow:1; - ULONG MalformedTLP:1; - ULONG ECRCError:1; - ULONG UnsupportedRequestError:1; - ULONG Reserved3:11; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY; - -typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS { - struct { - ULONG ReceiverError:1; - ULONG Reserved1:5; - ULONG BadTLP:1; - ULONG BadDLLP:1; - ULONG ReplayNumRollover:1; - ULONG Reserved2:3; - ULONG ReplayTimerTimeout:1; - ULONG AdvisoryNonFatalError:1; - ULONG Reserved3:18; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS; - -typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK { - struct { - ULONG ReceiverError:1; - ULONG Reserved1:5; - ULONG BadTLP:1; - ULONG BadDLLP:1; - ULONG ReplayNumRollover:1; - ULONG Reserved2:3; - ULONG ReplayTimerTimeout:1; - ULONG AdvisoryNonFatalError:1; - ULONG Reserved3:18; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK; - -typedef union _PCI_EXPRESS_AER_CAPABILITIES { - struct { - ULONG FirstErrorPointer:5; - ULONG ECRCGenerationCapable:1; - ULONG ECRCGenerationEnable:1; - ULONG ECRCCheckCapable:1; - ULONG ECRCCheckEnable:1; - ULONG Reserved:23; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES; - -typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND { - struct { - ULONG CorrectableErrorReportingEnable:1; - ULONG NonFatalErrorReportingEnable:1; - ULONG FatalErrorReportingEnable:1; - ULONG Reserved:29; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND; - -typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS { - struct { - ULONG CorrectableErrorReceived:1; - ULONG MultipleCorrectableErrorsReceived:1; - ULONG UncorrectableErrorReceived:1; - ULONG MultipleUncorrectableErrorsReceived:1; - ULONG FirstUncorrectableFatal:1; - ULONG NonFatalErrorMessagesReceived:1; - ULONG FatalErrorMessagesReceived:1; - ULONG Reserved:20; - ULONG AdvancedErrorInterruptMessageNumber:5; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS; - -typedef union _PCI_EXPRESS_ERROR_SOURCE_ID { - struct { - USHORT CorrectableSourceIdFun:3; - USHORT CorrectableSourceIdDev:5; - USHORT CorrectableSourceIdBus:8; - USHORT UncorrectableSourceIdFun:3; - USHORT UncorrectableSourceIdDev:5; - USHORT UncorrectableSourceIdBus:8; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID; - -typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS { - struct { - ULONG TargetAbortOnSplitCompletion:1; - ULONG MasterAbortOnSplitCompletion:1; - ULONG ReceivedTargetAbort:1; - ULONG ReceivedMasterAbort:1; - ULONG RsvdZ:1; - ULONG UnexpectedSplitCompletionError:1; - ULONG UncorrectableSplitCompletion:1; - ULONG UncorrectableDataError:1; - ULONG UncorrectableAttributeError:1; - ULONG UncorrectableAddressError:1; - ULONG DelayedTransactionDiscardTimerExpired:1; - ULONG PERRAsserted:1; - ULONG SERRAsserted:1; - ULONG InternalBridgeError:1; - ULONG Reserved:18; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS; - -typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK { - struct { - ULONG TargetAbortOnSplitCompletion:1; - ULONG MasterAbortOnSplitCompletion:1; - ULONG ReceivedTargetAbort:1; - ULONG ReceivedMasterAbort:1; - ULONG RsvdZ:1; - ULONG UnexpectedSplitCompletionError:1; - ULONG UncorrectableSplitCompletion:1; - ULONG UncorrectableDataError:1; - ULONG UncorrectableAttributeError:1; - ULONG UncorrectableAddressError:1; - ULONG DelayedTransactionDiscardTimerExpired:1; - ULONG PERRAsserted:1; - ULONG SERRAsserted:1; - ULONG InternalBridgeError:1; - ULONG Reserved:18; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK; - -typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY { - struct { - ULONG TargetAbortOnSplitCompletion:1; - ULONG MasterAbortOnSplitCompletion:1; - ULONG ReceivedTargetAbort:1; - ULONG ReceivedMasterAbort:1; - ULONG RsvdZ:1; - ULONG UnexpectedSplitCompletionError:1; - ULONG UncorrectableSplitCompletion:1; - ULONG UncorrectableDataError:1; - ULONG UncorrectableAttributeError:1; - ULONG UncorrectableAddressError:1; - ULONG DelayedTransactionDiscardTimerExpired:1; - ULONG PERRAsserted:1; - ULONG SERRAsserted:1; - ULONG InternalBridgeError:1; - ULONG Reserved:18; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY; - -typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES { - struct { - ULONG SecondaryUncorrectableFirstErrorPtr:5; - ULONG Reserved:27; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES; - -#define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001 -#define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002 -#define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004 - -#define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \ - (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \ - ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \ - ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING) - -typedef struct _PCI_EXPRESS_AER_CAPABILITY { - PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; - PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; - PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; - PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; - PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; - PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; - PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; - ULONG HeaderLog[4]; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; - PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; - ULONG SecHeaderLog[4]; -} PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY; - -typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY { - PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; - PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; - PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; - PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; - PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; - PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; - PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; - ULONG HeaderLog[4]; - PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand; - PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus; - PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId; -} PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY; - -typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY { - PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; - PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; - PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; - PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; - PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; - PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; - PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; - ULONG HeaderLog[4]; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; - PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; - PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; - ULONG SecHeaderLog[4]; -} PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY; - -typedef union _PCI_EXPRESS_SRIOV_CAPS { - struct { - ULONG VFMigrationCapable:1; - ULONG Reserved1:20; - ULONG VFMigrationInterruptNumber:11; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS; - -typedef union _PCI_EXPRESS_SRIOV_CONTROL { - struct { - USHORT VFEnable:1; - USHORT VFMigrationEnable:1; - USHORT VFMigrationInterruptEnable:1; - USHORT VFMemorySpaceEnable:1; - USHORT ARICapableHierarchy:1; - USHORT Reserved1:11; - } DUMMYSTRUCTNAME; - USHORT AsUSHORT; -} PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL; - -typedef union _PCI_EXPRESS_SRIOV_STATUS { - struct { - USHORT VFMigrationStatus:1; - USHORT Reserved1:15; - } DUMMYSTRUCTNAME; - USHORT AsUSHORT; -} PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS; - -typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY { - struct { - ULONG VFMigrationStateBIR:3; - ULONG VFMigrationStateOffset:29; - } DUMMYSTRUCTNAME; - ULONG AsULONG; -} PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY; - -typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY { - PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; - PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities; - PCI_EXPRESS_SRIOV_CONTROL SRIOVControl; - PCI_EXPRESS_SRIOV_STATUS SRIOVStatus; - USHORT InitialVFs; - USHORT TotalVFs; - USHORT NumVFs; - UCHAR FunctionDependencyLink; - UCHAR RsvdP1; - USHORT FirstVFOffset; - USHORT VFStride; - USHORT RsvdP2; - USHORT VFDeviceId; - ULONG SupportedPageSizes; - ULONG SystemPageSize; - ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; - PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset; -} PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY; - -/* PCI device classes */ -#define PCI_CLASS_PRE_20 0x00 -#define PCI_CLASS_MASS_STORAGE_CTLR 0x01 -#define PCI_CLASS_NETWORK_CTLR 0x02 -#define PCI_CLASS_DISPLAY_CTLR 0x03 -#define PCI_CLASS_MULTIMEDIA_DEV 0x04 -#define PCI_CLASS_MEMORY_CTLR 0x05 -#define PCI_CLASS_BRIDGE_DEV 0x06 -#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 -#define PCI_CLASS_BASE_SYSTEM_DEV 0x08 -#define PCI_CLASS_INPUT_DEV 0x09 -#define PCI_CLASS_DOCKING_STATION 0x0a -#define PCI_CLASS_PROCESSOR 0x0b -#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c -#define PCI_CLASS_WIRELESS_CTLR 0x0d -#define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e -#define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f -#define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10 -#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 -#define PCI_CLASS_NOT_DEFINED 0xff - -/* PCI device subclasses for class 0 */ -#define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 -#define PCI_SUBCLASS_PRE_20_VGA 0x01 - -/* PCI device subclasses for class 1 (mass storage controllers)*/ -#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 -#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 -#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 -#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 -#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 -#define PCI_SUBCLASS_MSC_OTHER 0x80 - -/* PCI device subclasses for class 2 (network controllers)*/ -#define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 -#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 -#define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 -#define PCI_SUBCLASS_NET_ATM_CTLR 0x03 -#define PCI_SUBCLASS_NET_ISDN_CTLR 0x04 -#define PCI_SUBCLASS_NET_OTHER 0x80 - -/* PCI device subclasses for class 3 (display controllers)*/ -#define PCI_SUBCLASS_VID_VGA_CTLR 0x00 -#define PCI_SUBCLASS_VID_XGA_CTLR 0x01 -#define PCI_SUBCLASS_VID_3D_CTLR 0x02 -#define PCI_SUBCLASS_VID_OTHER 0x80 - -/* PCI device subclasses for class 4 (multimedia device)*/ -#define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 -#define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 -#define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 -#define PCI_SUBCLASS_MM_OTHER 0x80 - -/* PCI device subclasses for class 5 (memory controller)*/ -#define PCI_SUBCLASS_MEM_RAM 0x00 -#define PCI_SUBCLASS_MEM_FLASH 0x01 -#define PCI_SUBCLASS_MEM_OTHER 0x80 - -/* PCI device subclasses for class 6 (bridge device)*/ -#define PCI_SUBCLASS_BR_HOST 0x00 -#define PCI_SUBCLASS_BR_ISA 0x01 -#define PCI_SUBCLASS_BR_EISA 0x02 -#define PCI_SUBCLASS_BR_MCA 0x03 -#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 -#define PCI_SUBCLASS_BR_PCMCIA 0x05 -#define PCI_SUBCLASS_BR_NUBUS 0x06 -#define PCI_SUBCLASS_BR_CARDBUS 0x07 -#define PCI_SUBCLASS_BR_RACEWAY 0x08 -#define PCI_SUBCLASS_BR_OTHER 0x80 - -#define PCI_SUBCLASS_COM_SERIAL 0x00 -#define PCI_SUBCLASS_COM_PARALLEL 0x01 -#define PCI_SUBCLASS_COM_MULTIPORT 0x02 -#define PCI_SUBCLASS_COM_MODEM 0x03 -#define PCI_SUBCLASS_COM_OTHER 0x80 - -#define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00 -#define PCI_SUBCLASS_SYS_DMA_CTLR 0x01 -#define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02 -#define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03 -#define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04 -#define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05 -#define PCI_SUBCLASS_SYS_OTHER 0x80 - -#define PCI_SUBCLASS_INP_KEYBOARD 0x00 -#define PCI_SUBCLASS_INP_DIGITIZER 0x01 -#define PCI_SUBCLASS_INP_MOUSE 0x02 -#define PCI_SUBCLASS_INP_SCANNER 0x03 -#define PCI_SUBCLASS_INP_GAMEPORT 0x04 -#define PCI_SUBCLASS_INP_OTHER 0x80 - -#define PCI_SUBCLASS_DOC_GENERIC 0x00 -#define PCI_SUBCLASS_DOC_OTHER 0x80 - -#define PCI_SUBCLASS_PROC_386 0x00 -#define PCI_SUBCLASS_PROC_486 0x01 -#define PCI_SUBCLASS_PROC_PENTIUM 0x02 -#define PCI_SUBCLASS_PROC_ALPHA 0x10 -#define PCI_SUBCLASS_PROC_POWERPC 0x20 -#define PCI_SUBCLASS_PROC_COPROCESSOR 0x40 - -/* PCI device subclasses for class C (serial bus controller)*/ -#define PCI_SUBCLASS_SB_IEEE1394 0x00 -#define PCI_SUBCLASS_SB_ACCESS 0x01 -#define PCI_SUBCLASS_SB_SSA 0x02 -#define PCI_SUBCLASS_SB_USB 0x03 -#define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 -#define PCI_SUBCLASS_SB_SMBUS 0x05 - -#define PCI_SUBCLASS_WIRELESS_IRDA 0x00 -#define PCI_SUBCLASS_WIRELESS_CON_IR 0x01 -#define PCI_SUBCLASS_WIRELESS_RF 0x10 -#define PCI_SUBCLASS_WIRELESS_OTHER 0x80 - -#define PCI_SUBCLASS_INTIO_I2O 0x00 - -#define PCI_SUBCLASS_SAT_TV 0x01 -#define PCI_SUBCLASS_SAT_AUDIO 0x02 -#define PCI_SUBCLASS_SAT_VOICE 0x03 -#define PCI_SUBCLASS_SAT_DATA 0x04 - -#define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00 -#define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10 -#define PCI_SUBCLASS_CRYPTO_OTHER 0x80 - -#define PCI_SUBCLASS_DASP_DPIO 0x00 -#define PCI_SUBCLASS_DASP_OTHER 0x80 - -#define PCI_ADDRESS_IO_SPACE 0x00000001 -#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 -#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 -#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc -#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 -#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 - -#define PCI_TYPE_32BIT 0 -#define PCI_TYPE_20BIT 2 -#define PCI_TYPE_64BIT 4 - -#define PCI_ROMADDRESS_ENABLED 0x00000001 - -#endif /* _PCI_X_ */ - -#define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1 - -typedef NTSTATUS -(NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( - IN OUT PVOID Context); -typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE; - -typedef NTSTATUS -(NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( - IN OUT PVOID Context); -typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE; - -typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode; - PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode; -} PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE; - -#define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1 - -typedef ULONG -(NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( - IN PVOID Context, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -typedef ULONG -(NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( - IN PVOID Context, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); - -typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace; - PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace; -} PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE; - -#define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1 - -typedef NTSTATUS -(NTAPI PCI_MSIX_SET_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry, - IN ULONG MessageNumber); -typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY; - -typedef NTSTATUS -(NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry); -typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY; - -typedef NTSTATUS -(NTAPI PCI_MSIX_GET_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry, - OUT PULONG MessageNumber, - OUT PBOOLEAN Masked); -typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY; - -typedef NTSTATUS -(NTAPI PCI_MSIX_GET_TABLE_SIZE)( - IN PVOID Context, - OUT PULONG TableSize); -typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE; - -typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PPCI_MSIX_SET_ENTRY SetTableEntry; - PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry; - PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry; - PPCI_MSIX_GET_ENTRY GetTableEntry; - PPCI_MSIX_GET_TABLE_SIZE GetTableSize; -} PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE; - -#define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \ - RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry) - /****************************************************************************** * Object Manager Types * ******************************************************************************/ -#define MAXIMUM_FILENAME_LENGTH 256 -#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') - -#define OBJECT_TYPE_CREATE 0x0001 -#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) - -#define DIRECTORY_QUERY 0x0001 -#define DIRECTORY_TRAVERSE 0x0002 -#define DIRECTORY_CREATE_OBJECT 0x0004 -#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008 -#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) - -#define SYMBOLIC_LINK_QUERY 0x0001 -#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) - -#define DUPLICATE_CLOSE_SOURCE 0x00000001 -#define DUPLICATE_SAME_ACCESS 0x00000002 -#define DUPLICATE_SAME_ATTRIBUTES 0x00000004 - -#define OB_FLT_REGISTRATION_VERSION_0100 0x0100 -#define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100 - -typedef ULONG OB_OPERATION; - -#define OB_OPERATION_HANDLE_CREATE 0x00000001 -#define OB_OPERATION_HANDLE_DUPLICATE 0x00000002 - -typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION { - IN OUT ACCESS_MASK DesiredAccess; - IN ACCESS_MASK OriginalDesiredAccess; -} OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION; - -typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION { - IN OUT ACCESS_MASK DesiredAccess; - IN ACCESS_MASK OriginalDesiredAccess; - IN PVOID SourceProcess; - IN PVOID TargetProcess; -} OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION; - -typedef union _OB_PRE_OPERATION_PARAMETERS { - IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation; - IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; -} OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS; - -typedef struct _OB_PRE_OPERATION_INFORMATION { - IN OB_OPERATION Operation; - union { - IN ULONG Flags; - struct { - IN ULONG KernelHandle:1; - IN ULONG Reserved:31; - }; - }; - IN PVOID Object; - IN POBJECT_TYPE ObjectType; - OUT PVOID CallContext; - IN POB_PRE_OPERATION_PARAMETERS Parameters; -} OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION; - -typedef struct _OB_POST_CREATE_HANDLE_INFORMATION { - IN ACCESS_MASK GrantedAccess; -} OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION; - -typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION { - IN ACCESS_MASK GrantedAccess; -} OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION; - -typedef union _OB_POST_OPERATION_PARAMETERS { - IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation; - IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; -} OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS; - -typedef struct _OB_POST_OPERATION_INFORMATION { - IN OB_OPERATION Operation; - union { - IN ULONG Flags; - struct { - IN ULONG KernelHandle:1; - IN ULONG Reserved:31; - }; - }; - IN PVOID Object; - IN POBJECT_TYPE ObjectType; - IN PVOID CallContext; - IN NTSTATUS ReturnStatus; - IN POB_POST_OPERATION_PARAMETERS Parameters; -} OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION; - -typedef enum _OB_PREOP_CALLBACK_STATUS { - OB_PREOP_SUCCESS -} OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS; - -typedef OB_PREOP_CALLBACK_STATUS -(NTAPI *POB_PRE_OPERATION_CALLBACK)( - IN PVOID RegistrationContext, - IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation); - -typedef VOID -(NTAPI *POB_POST_OPERATION_CALLBACK)( - IN PVOID RegistrationContext, - IN POB_POST_OPERATION_INFORMATION OperationInformation); - -typedef struct _OB_OPERATION_REGISTRATION { - IN POBJECT_TYPE *ObjectType; - IN OB_OPERATION Operations; - IN POB_PRE_OPERATION_CALLBACK PreOperation; - IN POB_POST_OPERATION_CALLBACK PostOperation; -} OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION; - -typedef struct _OB_CALLBACK_REGISTRATION { - IN USHORT Version; - IN USHORT OperationRegistrationCount; - IN UNICODE_STRING Altitude; - IN PVOID RegistrationContext; - IN OB_OPERATION_REGISTRATION *OperationRegistration; -} OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION; - typedef struct _OBJECT_NAME_INFORMATION { - UNICODE_STRING Name; + UNICODE_STRING Name; } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; /* Exported object types */ -extern POBJECT_TYPE NTSYSAPI CmKeyObjectType; extern POBJECT_TYPE NTSYSAPI ExEventObjectType; extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType; extern POBJECT_TYPE NTSYSAPI IoFileObjectType; @@ -7570,6 +5285,16 @@ extern POBJECT_TYPE NTSYSAPI PsProcessType; #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 +/* Process Qoutas */ +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; + /* Thread Access Rights */ #define THREAD_TERMINATE 0x0001 #define THREAD_SUSPEND_RESUME 0x0002 @@ -7594,76 +5319,18 @@ extern POBJECT_TYPE NTSYSAPI PsProcessType; #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) #endif +#define ES_SYSTEM_REQUIRED 0x00000001 +#define ES_DISPLAY_REQUIRED 0x00000002 +#define ES_USER_PRESENT 0x00000004 +#define ES_CONTINUOUS 0x80000000 + #define LOW_PRIORITY 0 #define LOW_REALTIME_PRIORITY 16 #define HIGH_PRIORITY 31 #define MAXIMUM_PRIORITY 32 -/****************************************************************************** - * WMI Library Support Types * - ******************************************************************************/ - -#ifdef RUN_WPP -#include -#include -#endif - -#ifndef _TRACEHANDLE_DEFINED -#define _TRACEHANDLE_DEFINED -typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; -#endif - -#ifndef TRACE_INFORMATION_CLASS_DEFINE - -typedef struct _ETW_TRACE_SESSION_SETTINGS { - ULONG Version; - ULONG BufferSize; - ULONG MinimumBuffers; - ULONG MaximumBuffers; - ULONG LoggerMode; - ULONG FlushTimer; - ULONG FlushThreshold; - ULONG ClockType; -} ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS; - -typedef enum _TRACE_INFORMATION_CLASS { - TraceIdClass, - TraceHandleClass, - TraceEnableFlagsClass, - TraceEnableLevelClass, - GlobalLoggerHandleClass, - EventLoggerHandleClass, - AllLoggerHandlesClass, - TraceHandleByNameClass, - LoggerEventsLostClass, - TraceSessionSettingsClass, - LoggerEventsLoggedClass, - MaxTraceInformationClass -} TRACE_INFORMATION_CLASS; - -#endif /* TRACE_INFORMATION_CLASS_DEFINE */ - -#ifndef _ETW_KM_ -#define _ETW_KM_ -#endif - -#include - -typedef VOID -(NTAPI *PETWENABLECALLBACK)( - IN LPCGUID SourceId, - IN ULONG ControlCode, - IN UCHAR Level, - IN ULONGLONG MatchAnyKeyword, - IN ULONGLONG MatchAllKeyword, - IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL, - IN OUT PVOID CallbackContext OPTIONAL); - -#define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001 - - -#if defined(_M_IX86) +#ifdef _X86_ /** Kernel definitions for x86 **/ /* Interrupt request levels */ @@ -7678,11 +5345,11 @@ typedef VOID #define IPI_LEVEL 29 #define POWER_LEVEL 30 #define HIGH_LEVEL 31 -#define CLOCK_LEVEL CLOCK2_LEVEL +#define CLOCK_LEVEL (CLOCK2_LEVEL) -#define KIP0PCRADDRESS 0xffdff000 +#define KIP0PCRADDRESS 0xffdff000 #define KI_USER_SHARED_DATA 0xffdf0000 -#define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) +#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA) #define PAGE_SIZE 0x1000 #define PAGE_SHIFT 12L @@ -7698,14 +5365,14 @@ typedef VOID typedef struct _KFLOATING_SAVE { - ULONG ControlWord; - ULONG StatusWord; - ULONG ErrorOffset; - ULONG ErrorSelector; - ULONG DataOffset; - ULONG DataSelector; - ULONG Cr0NpxState; - ULONG Spare1; + ULONG ControlWord; + ULONG StatusWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + ULONG Cr0NpxState; + ULONG Spare1; } KFLOATING_SAVE, *PKFLOATING_SAVE; extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; @@ -7714,7 +5381,8 @@ extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; FORCEINLINE VOID -KeMemoryBarrier(VOID) +KeMemoryBarrier( + VOID) { volatile LONG Barrier; #if defined(__GNUC__) @@ -7724,80 +5392,78 @@ KeMemoryBarrier(VOID) #endif } -NTHALAPI -KIRQL -NTAPI -KeGetCurrentIrql(VOID); - NTHALAPI VOID FASTCALL KfLowerIrql( - IN KIRQL NewIrql); + IN KIRQL NewIrql); #define KeLowerIrql(a) KfLowerIrql(a) NTHALAPI KIRQL FASTCALL KfRaiseIrql( - IN KIRQL NewIrql); + IN KIRQL NewIrql); #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) NTHALAPI KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); +DDKAPI +KeRaiseIrqlToDpcLevel( + VOID); NTHALAPI KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); +DDKAPI +KeRaiseIrqlToSynchLevel( + VOID); NTHALAPI KIRQL FASTCALL KfAcquireSpinLock( - IN OUT PKSPIN_LOCK SpinLock); -#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) + IN PKSPIN_LOCK SpinLock); +#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) NTHALAPI VOID FASTCALL KfReleaseSpinLock( - IN OUT PKSPIN_LOCK SpinLock, + IN PKSPIN_LOCK SpinLock, IN KIRQL NewIrql); -#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) +#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) NTKERNELAPI VOID FASTCALL KefAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); + IN PKSPIN_LOCK SpinLock); #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) NTKERNELAPI VOID FASTCALL KefReleaseSpinLockFromDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); + IN PKSPIN_LOCK SpinLock); #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) NTSYSAPI PKTHREAD NTAPI -KeGetCurrentThread(VOID); +KeGetCurrentThread( + VOID); NTKERNELAPI NTSTATUS NTAPI KeSaveFloatingPointState( - OUT PKFLOATING_SAVE FloatSave); + OUT PKFLOATING_SAVE FloatSave); NTKERNELAPI NTSTATUS NTAPI KeRestoreFloatingPointState( - IN PKFLOATING_SAVE FloatSave); + IN PKFLOATING_SAVE FloatSave); /* VOID * KeFlushIoBuffers( @@ -7815,355 +5481,24 @@ VOID _KeQueryTickCount( OUT PLARGE_INTEGER CurrentCount) { - for (;;) { - CurrentCount->HighPart = KeTickCount.High1Time; - CurrentCount->LowPart = KeTickCount.LowPart; - if (CurrentCount->HighPart == KeTickCount.High2Time) break; - YieldProcessor(); - } + for (;;) + { + CurrentCount->HighPart = KeTickCount.High1Time; + CurrentCount->LowPart = KeTickCount.LowPart; + if (CurrentCount->HighPart == KeTickCount.High2Time) break; + YieldProcessor(); + } } #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) +#endif /* _X86_ */ - -#elif defined(_M_AMD64) -/** Kernel definitions for AMD64 **/ - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CMCI_LEVEL 5 -#define CLOCK_LEVEL 13 -#define IPI_LEVEL 14 -#define DRS_LEVEL 14 -#define POWER_LEVEL 14 -#define PROFILE_LEVEL 15 -#define HIGH_LEVEL 15 - -#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL -#define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) -#define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8) -#define SharedSystemTime (KI_USER_SHARED_DATA + 0x14) -#define SharedTickCount (KI_USER_SHARED_DATA + 0x320) - -#define PAGE_SIZE 0x1000 -#define PAGE_SHIFT 12L - -#define EFLAG_SIGN 0x8000 -#define EFLAG_ZERO 0x4000 -#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) - -#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) -#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) -#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) - - -typedef struct _KFLOATING_SAVE { - ULONG Dummy; -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; - -#define KeQueryInterruptTime() \ - (*(volatile ULONG64*)SharedInterruptTime) - -#define KeQuerySystemTime(CurrentCount) \ - *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime - -#define KeQueryTickCount(CurrentCount) \ - *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount - -#define KeGetDcacheFillSize() 1L - -#define YieldProcessor _mm_pause - -FORCEINLINE -KIRQL -KeGetCurrentIrql(VOID) -{ - return (KIRQL)__readcr8(); -} - -FORCEINLINE -VOID -KeLowerIrql(IN KIRQL NewIrql) -{ - //ASSERT(KeGetCurrentIrql() >= NewIrql); - __writecr8(NewIrql); -} - -FORCEINLINE -KIRQL -KfRaiseIrql(IN KIRQL NewIrql) -{ - KIRQL OldIrql; - - OldIrql = __readcr8(); - //ASSERT(OldIrql <= NewIrql); - __writecr8(NewIrql); - return OldIrql; -} -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -FORCEINLINE -KIRQL -KeRaiseIrqlToDpcLevel(VOID) -{ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -FORCEINLINE -KIRQL -KeRaiseIrqlToSynchLevel(VOID) -{ - return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 -} - -FORCEINLINE -PKTHREAD -KeGetCurrentThread(VOID) -{ - return (struct _KTHREAD *)__readgsqword(0x188); -} - -/* VOID - * KeFlushIoBuffers( - * IN PMDL Mdl, - * IN BOOLEAN ReadOperation, - * IN BOOLEAN DmaOperation) - */ -#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) - -/* x86 and x64 performs a 0x2C interrupt */ -#define DbgRaiseAssertionFailure __int2c - -#elif defined(_M_IA64) -/** Kernel definitions for IA64 **/ - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CMC_LEVEL 3 -#define DEVICE_LEVEL_BASE 4 -#define PC_LEVEL 12 -#define IPI_LEVEL 14 -#define DRS_LEVEL 14 -#define CLOCK_LEVEL 13 -#define POWER_LEVEL 15 -#define PROFILE_LEVEL 15 -#define HIGH_LEVEL 15 - -#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) -extern volatile LARGE_INTEGER KeTickCount; - -#define PAUSE_PROCESSOR __yield(); - -FORCEINLINE -VOID -KeFlushWriteBuffer(VOID) -{ - __mf (); - return; -} - -NTSYSAPI -PKTHREAD -NTAPI -KeGetCurrentThread(VOID); - - -#elif defined(_M_PPC) - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define PROFILE_LEVEL 27 -#define CLOCK1_LEVEL 28 -#define CLOCK2_LEVEL 28 -#define IPI_LEVEL 29 -#define POWER_LEVEL 30 -#define HIGH_LEVEL 31 - -// -// Used to contain PFNs and PFN counts -// -typedef ULONG PFN_COUNT; -typedef ULONG PFN_NUMBER, *PPFN_NUMBER; -typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; - - -typedef struct _KFLOATING_SAVE { - ULONG Dummy; -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -typedef struct _KPCR_TIB { - PVOID ExceptionList; /* 00 */ - PVOID StackBase; /* 04 */ - PVOID StackLimit; /* 08 */ - PVOID SubSystemTib; /* 0C */ - _ANONYMOUS_UNION union { - PVOID FiberData; /* 10 */ - ULONG Version; /* 10 */ - } DUMMYUNIONNAME; - PVOID ArbitraryUserPointer; /* 14 */ - struct _KPCR_TIB *Self; /* 18 */ -} KPCR_TIB, *PKPCR_TIB; /* 1C */ - -#define PCR_MINOR_VERSION 1 -#define PCR_MAJOR_VERSION 1 - -typedef struct _KPCR { - KPCR_TIB Tib; /* 00 */ - struct _KPCR *Self; /* 1C */ - struct _KPRCB *Prcb; /* 20 */ - KIRQL Irql; /* 24 */ - ULONG IRR; /* 28 */ - ULONG IrrActive; /* 2C */ - ULONG IDR; /* 30 */ - PVOID KdVersionBlock; /* 34 */ - PUSHORT IDT; /* 38 */ - PUSHORT GDT; /* 3C */ - struct _KTSS *TSS; /* 40 */ - USHORT MajorVersion; /* 44 */ - USHORT MinorVersion; /* 46 */ - KAFFINITY SetMember; /* 48 */ - ULONG StallScaleFactor; /* 4C */ - UCHAR SpareUnused; /* 50 */ - UCHAR Number; /* 51 */ -} KPCR, *PKPCR; /* 54 */ - -#define KeGetPcr() PCR - -#define YieldProcessor() __asm__ __volatile__("nop"); - -FORCEINLINE -ULONG -NTAPI -KeGetCurrentProcessorNumber(VOID) -{ - ULONG Number; - __asm__ __volatile__ ( - "lwz %0, %c1(12)\n" - : "=r" (Number) - : "i" (FIELD_OFFSET(KPCR, Number)) - ); - return Number; -} - -NTHALAPI -VOID -FASTCALL -KfLowerIrql( - IN KIRQL NewIrql); -#define KeLowerIrql(a) KfLowerIrql(a) - -NTHALAPI -KIRQL -FASTCALL -KfRaiseIrql( - IN KIRQL NewIrql); -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); - - - -#elif defined(_M_MIPS) -#error MIPS Headers are totally incorrect - -// -// Used to contain PFNs and PFN counts -// -typedef ULONG PFN_COUNT; -typedef ULONG PFN_NUMBER, *PPFN_NUMBER; -typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; - -#define PASSIVE_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define PROFILE_LEVEL 27 -#define IPI_LEVEL 29 -#define HIGH_LEVEL 31 - -typedef struct _KPCR { - struct _KPRCB *Prcb; /* 20 */ - KIRQL Irql; /* 24 */ - ULONG IRR; /* 28 */ - ULONG IDR; /* 30 */ -} KPCR, *PKPCR; - -#define KeGetPcr() PCR - -typedef struct _KFLOATING_SAVE { -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -static __inline -ULONG -NTAPI -KeGetCurrentProcessorNumber(VOID) -{ - return 0; -} - -#define YieldProcessor() __asm__ __volatile__("nop"); - -#define KeLowerIrql(a) KfLowerIrql(a) -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -NTKERNELAPI -VOID -NTAPI -KfLowerIrql( - IN KIRQL NewIrql); - -NTKERNELAPI -KIRQL -NTAPI -KfRaiseIrql( - IN KIRQL NewIrql); - -NTKERNELAPI -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); - -NTKERNELAPI -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); - - -#elif defined(_M_ARM) -#include -#else -#error Unknown Architecture -#endif - /****************************************************************************** * Runtime Library Functions * ******************************************************************************/ - -#if !defined(MIDL_PASS) && !defined(SORTPP_PASS) - -#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x } - FORCEINLINE VOID InitializeListHead( @@ -8172,78 +5507,11 @@ InitializeListHead( ListHead->Flink = ListHead->Blink = ListHead; } -BOOLEAN -FORCEINLINE -IsListEmpty( - IN CONST LIST_ENTRY * ListHead) -{ - return (BOOLEAN)(ListHead->Flink == ListHead); -} - -FORCEINLINE -BOOLEAN -RemoveEntryList( - IN PLIST_ENTRY Entry) -{ - PLIST_ENTRY OldFlink; - PLIST_ENTRY OldBlink; - - OldFlink = Entry->Flink; - OldBlink = Entry->Blink; - OldFlink->Blink = OldBlink; - OldBlink->Flink = OldFlink; - return (BOOLEAN)(OldFlink == OldBlink); -} - -FORCEINLINE -PLIST_ENTRY -RemoveHeadList( - IN OUT PLIST_ENTRY ListHead) -{ - PLIST_ENTRY Flink; - PLIST_ENTRY Entry; - - Entry = ListHead->Flink; - Flink = Entry->Flink; - ListHead->Flink = Flink; - Flink->Blink = ListHead; - return Entry; -} - -FORCEINLINE -PLIST_ENTRY -RemoveTailList( - IN OUT PLIST_ENTRY ListHead) -{ - PLIST_ENTRY Blink; - PLIST_ENTRY Entry; - - Entry = ListHead->Blink; - Blink = Entry->Blink; - ListHead->Blink = Blink; - Blink->Flink = ListHead; - return Entry; -} - -FORCEINLINE -VOID -InsertTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY Entry) -{ - PLIST_ENTRY OldBlink; - OldBlink = ListHead->Blink; - Entry->Flink = ListHead; - Entry->Blink = OldBlink; - OldBlink->Flink = Entry; - ListHead->Blink = Entry; -} - FORCEINLINE VOID InsertHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY Entry) + IN OUT PLIST_ENTRY ListHead, + IN OUT PLIST_ENTRY Entry) { PLIST_ENTRY OldFlink; OldFlink = ListHead->Flink; @@ -8255,16 +5523,24 @@ InsertHeadList( FORCEINLINE VOID -AppendTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListToAppend) +InsertTailList( + IN OUT PLIST_ENTRY ListHead, + IN OUT PLIST_ENTRY Entry) { - PLIST_ENTRY ListEnd = ListHead->Blink; + PLIST_ENTRY OldBlink; + OldBlink = ListHead->Blink; + Entry->Flink = ListHead; + Entry->Blink = OldBlink; + OldBlink->Flink = Entry; + ListHead->Blink = Entry; +} - ListHead->Blink->Flink = ListToAppend; - ListHead->Blink = ListToAppend->Blink; - ListToAppend->Blink->Flink = ListHead; - ListToAppend->Blink = ListEnd; +BOOLEAN +FORCEINLINE +IsListEmpty( + IN CONST LIST_ENTRY * ListHead) +{ + return (BOOLEAN)(ListHead->Flink == ListHead); } FORCEINLINE @@ -8290,16 +5566,59 @@ PushEntryList( ListHead->Next = Entry; } -#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ +FORCEINLINE +BOOLEAN +RemoveEntryList( + IN PLIST_ENTRY Entry) +{ + PLIST_ENTRY OldFlink; + PLIST_ENTRY OldBlink; + + OldFlink = Entry->Flink; + OldBlink = Entry->Blink; + OldFlink->Blink = OldBlink; + OldBlink->Flink = OldFlink; + return (BOOLEAN)(OldFlink == OldBlink); +} + +FORCEINLINE +PLIST_ENTRY +RemoveHeadList( + IN OUT PLIST_ENTRY ListHead) +{ + PLIST_ENTRY Flink; + PLIST_ENTRY Entry; + + Entry = ListHead->Flink; + Flink = Entry->Flink; + ListHead->Flink = Flink; + Flink->Blink = ListHead; + return Entry; +} + +FORCEINLINE +PLIST_ENTRY +RemoveTailList( + IN OUT PLIST_ENTRY ListHead) +{ + PLIST_ENTRY Blink; + PLIST_ENTRY Entry; + + Entry = ListHead->Blink; + Blink = Entry->Blink; + ListHead->Blink = Blink; + Blink->Flink = ListHead; + return Entry; +} NTSYSAPI VOID NTAPI RtlAssert( - IN PVOID FailedAssertion, - IN PVOID FileName, - IN ULONG LineNumber, - IN PSTR Message); + IN PVOID FailedAssertion, + IN PVOID FileName, + IN ULONG LineNumber, + IN PSTR Message); /* VOID * RtlCopyMemory( @@ -8317,9 +5636,9 @@ NTSYSAPI VOID NTAPI RtlCopyMemoryNonTemporal( - VOID UNALIGNED *Destination, - CONST VOID UNALIGNED *Source, - SIZE_T Length); + VOID UNALIGNED *Destination, + CONST VOID UNALIGNED *Source, + SIZE_T Length); #else #define RtlCopyMemoryNonTemporal RtlCopyMemory #endif @@ -8356,21 +5675,21 @@ NTSYSAPI VOID NTAPI RtlFreeUnicodeString( - IN OUT PUNICODE_STRING UnicodeString); + IN OUT PUNICODE_STRING UnicodeString); NTSYSAPI NTSTATUS NTAPI RtlGUIDFromString( - IN PUNICODE_STRING GuidString, - OUT GUID *Guid); + IN PUNICODE_STRING GuidString, + OUT GUID *Guid); NTSYSAPI VOID NTAPI RtlInitUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString OPTIONAL); + IN OUT PUNICODE_STRING DestinationString, + IN PCWSTR SourceString OPTIONAL); /* VOID * RtlMoveMemory( @@ -8385,8 +5704,8 @@ NTSYSAPI NTSTATUS NTAPI RtlStringFromGUID( - IN REFGUID Guid, - OUT PUNICODE_STRING GuidString); + IN REFGUID Guid, + OUT PUNICODE_STRING GuidString); /* VOID * RtlZeroMemory( @@ -8398,39 +5717,37 @@ RtlStringFromGUID( #define RtlZeroBytes RtlZeroMemory + #if (NTDDI_VERSION >= NTDDI_WIN2K) - - - NTSYSAPI BOOLEAN NTAPI RtlAreBitsClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG Length); + IN PRTL_BITMAP BitMapHeader, + IN ULONG StartingIndex, + IN ULONG Length); NTSYSAPI BOOLEAN NTAPI RtlAreBitsSet( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG Length); + IN PRTL_BITMAP BitMapHeader, + IN ULONG StartingIndex, + IN ULONG Length); NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PANSI_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + IN OUT PUNICODE_STRING DestinationString, + IN PANSI_STRING SourceString, + IN BOOLEAN AllocateDestinationString); NTSYSAPI ULONG NTAPI RtlxAnsiStringToUnicodeSize( - IN PCANSI_STRING AnsiString); + IN PCANSI_STRING AnsiString); #define RtlAnsiStringToUnicodeSize(String) ( \ NLS_MB_CODE_PAGE_TAG ? \ @@ -8442,107 +5759,107 @@ NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString( - IN OUT PUNICODE_STRING Destination, - IN PCUNICODE_STRING Source); + IN OUT PUNICODE_STRING Destination, + IN PCUNICODE_STRING Source); NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeToString( - IN OUT PUNICODE_STRING Destination, - IN PCWSTR Source); + IN OUT PUNICODE_STRING Destination, + IN PCWSTR Source); NTSYSAPI NTSTATUS NTAPI RtlCheckRegistryKey( - IN ULONG RelativeTo, - IN PWSTR Path); + IN ULONG RelativeTo, + IN PWSTR Path); NTSYSAPI VOID NTAPI RtlClearAllBits( - IN PRTL_BITMAP BitMapHeader); + IN PRTL_BITMAP BitMapHeader); NTSYSAPI VOID NTAPI RtlClearBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG NumberToClear); + IN PRTL_BITMAP BitMapHeader, + IN ULONG StartingIndex, + IN ULONG NumberToClear); NTSYSAPI SIZE_T NTAPI RtlCompareMemory( - IN CONST VOID *Source1, - IN CONST VOID *Source2, - IN SIZE_T Length); + IN CONST VOID *Source1, + IN CONST VOID *Source2, + IN SIZE_T Length); NTSYSAPI LONG NTAPI RtlCompareUnicodeString( - IN PCUNICODE_STRING String1, - IN PCUNICODE_STRING String2, - IN BOOLEAN CaseInSensitive); + IN PCUNICODE_STRING String1, + IN PCUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive); NTSYSAPI LONG NTAPI RtlCompareUnicodeStrings( - IN PCWCH String1, - IN SIZE_T String1Length, - IN PCWCH String2, - IN SIZE_T String2Length, - IN BOOLEAN CaseInSensitive); + IN PCWCH String1, + IN SIZE_T String1Length, + IN PCWCH String2, + IN SIZE_T String2Length, + IN BOOLEAN CaseInSensitive); NTSYSAPI VOID NTAPI RtlCopyUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCUNICODE_STRING SourceString OPTIONAL); + IN OUT PUNICODE_STRING DestinationString, + IN PCUNICODE_STRING SourceString); NTSYSAPI NTSTATUS NTAPI RtlCreateRegistryKey( - IN ULONG RelativeTo, - IN PWSTR Path); + IN ULONG RelativeTo, + IN PWSTR Path); NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ULONG Revision); + IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Revision); NTSYSAPI NTSTATUS NTAPI RtlDeleteRegistryValue( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN PCWSTR ValueName); + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PCWSTR ValueName); NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString( - IN CONST UNICODE_STRING *String1, - IN CONST UNICODE_STRING *String2, - IN BOOLEAN CaseInSensitive); + IN CONST UNICODE_STRING *String1, + IN CONST UNICODE_STRING *String2, + IN BOOLEAN CaseInSensitive); #if !defined(_AMD64_) && !defined(_IA64_) NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedIntegerMultiply( - IN LARGE_INTEGER Multiplicand, - IN LONG Multiplier); + IN LARGE_INTEGER Multiplicand, + IN LONG Multiplier); NTSYSAPI LARGE_INTEGER @@ -8550,7 +5867,7 @@ NTAPI RtlExtendedLargeIntegerDivide( IN LARGE_INTEGER Dividend, IN ULONG Divisor, - OUT PULONG Remainder OPTIONAL); + IN OUT PULONG Remainder); #endif #if defined(_X86_) || defined(_IA64_) @@ -8567,128 +5884,137 @@ NTSYSAPI VOID NTAPI RtlFreeAnsiString( - IN PANSI_STRING AnsiString); + IN PANSI_STRING AnsiString); NTSYSAPI ULONG NTAPI RtlFindClearBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG NumberToFind, + IN ULONG HintIndex); NTSYSAPI ULONG NTAPI RtlFindClearBitsAndSet( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG NumberToFind, + IN ULONG HintIndex); NTSYSAPI ULONG NTAPI RtlFindFirstRunClear( - IN PRTL_BITMAP BitMapHeader, - OUT PULONG StartingIndex); + IN PRTL_BITMAP BitMapHeader, + OUT PULONG StartingIndex); NTSYSAPI ULONG NTAPI RtlFindClearRuns( - IN PRTL_BITMAP BitMapHeader, - OUT PRTL_BITMAP_RUN RunArray, - IN ULONG SizeOfRunArray, - IN BOOLEAN LocateLongestRuns); + IN PRTL_BITMAP BitMapHeader, + OUT PRTL_BITMAP_RUN RunArray, + IN ULONG SizeOfRunArray, + IN BOOLEAN LocateLongestRuns); NTSYSAPI ULONG NTAPI RtlFindLastBackwardRunClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - OUT PULONG StartingRunIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + OUT PULONG StartingRunIndex); NTSYSAPI CCHAR NTAPI RtlFindLeastSignificantBit( - IN ULONGLONG Set); + IN ULONGLONG Set); NTSYSAPI ULONG NTAPI RtlFindLongestRunClear( - IN PRTL_BITMAP BitMapHeader, - OUT PULONG StartingIndex); + IN PRTL_BITMAP BitMapHeader, + OUT PULONG StartingIndex); NTSYSAPI CCHAR NTAPI RtlFindMostSignificantBit( - IN ULONGLONG Set); + IN ULONGLONG Set); NTSYSAPI ULONG NTAPI RtlFindNextForwardRunClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - OUT PULONG StartingRunIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + OUT PULONG StartingRunIndex); NTSYSAPI ULONG NTAPI RtlFindSetBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG NumberToFind, + IN ULONG HintIndex); NTSYSAPI ULONG NTAPI RtlFindSetBitsAndClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + IN PRTL_BITMAP BitMapHeader, + IN ULONG NumberToFind, + IN ULONG HintIndex); + +NTSYSAPI +NTSTATUS +NTAPI +RtlHashUnicodeString( + IN CONST UNICODE_STRING *String, + IN BOOLEAN CaseInSensitive, + IN ULONG HashAlgorithm, + OUT PULONG HashValue); NTSYSAPI VOID NTAPI RtlInitAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCSZ SourceString); + IN OUT PANSI_STRING DestinationString, + IN PCSZ SourceString); NTSYSAPI VOID NTAPI RtlInitializeBitMap( - IN PRTL_BITMAP BitMapHeader, - IN PULONG BitMapBuffer, - IN ULONG SizeOfBitMap); + IN PRTL_BITMAP BitMapHeader, + IN PULONG BitMapBuffer, + IN ULONG SizeOfBitMap); NTSYSAPI VOID NTAPI RtlInitString( - IN OUT PSTRING DestinationString, - IN PCSZ SourceString); + IN OUT PSTRING DestinationString, + IN PCSZ SourceString); NTSYSAPI NTSTATUS NTAPI RtlIntegerToUnicodeString( - IN ULONG Value, - IN ULONG Base OPTIONAL, - IN OUT PUNICODE_STRING String); + IN ULONG Value, + IN ULONG Base OPTIONAL, + IN OUT PUNICODE_STRING String); NTSYSAPI NTSTATUS NTAPI RtlInt64ToUnicodeString( - IN ULONGLONG Value, - IN ULONG Base OPTIONAL, - IN OUT PUNICODE_STRING String); + IN ULONGLONG Value, + IN ULONG Base OPTIONAL, + IN OUT PUNICODE_STRING String); #ifdef _WIN64 #define RtlIntPtrToUnicodeString(Value, Base, String) \ @@ -8709,151 +6035,42 @@ NTSYSAPI ULONG NTAPI RtlLengthSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + IN PSECURITY_DESCRIPTOR SecurityDescriptor); NTSYSAPI ULONG NTAPI RtlNumberOfClearBits( - IN PRTL_BITMAP BitMapHeader); + IN PRTL_BITMAP BitMapHeader); NTSYSAPI ULONG NTAPI RtlNumberOfSetBits( - IN PRTL_BITMAP BitMapHeader); + IN PRTL_BITMAP BitMapHeader); NTSYSAPI NTSTATUS NTAPI RtlQueryRegistryValues( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable, - IN PVOID Context OPTIONAL, - IN PVOID Environment OPTIONAL); + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, + IN PVOID Context, + IN PVOID Environment OPTIONAL); -#define SHORT_SIZE (sizeof(USHORT)) -#define SHORT_MASK (SHORT_SIZE - 1) #define LONG_SIZE (sizeof(LONG)) -#define LONGLONG_SIZE (sizeof(LONGLONG)) #define LONG_MASK (LONG_SIZE - 1) -#define LONGLONG_MASK (LONGLONG_SIZE - 1) -#define LOWBYTE_MASK 0x00FF - -#define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK) -#define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK) -#define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK) -#define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK) - -NTSYSAPI -VOID -NTAPI -RtlSetAllBits( - IN PRTL_BITMAP BitMapHeader); - -NTSYSAPI -VOID -NTAPI -RtlSetBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG NumberToSet); - -NTSYSAPI -NTSTATUS -NTAPI -RtlSetDaclSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN BOOLEAN DaclPresent, - IN PACL Dacl OPTIONAL, - IN BOOLEAN DaclDefaulted OPTIONAL); - -#if defined(_AMD64_) - -/* VOID - * RtlStoreUlong( - * IN PULONG Address, - * IN ULONG Value); - */ -#define RtlStoreUlong(Address,Value) \ - *(ULONG UNALIGNED *)(Address) = (Value) - -/* VOID - * RtlStoreUlonglong( - * IN OUT PULONGLONG Address, - * ULONGLONG Value); - */ -#define RtlStoreUlonglong(Address,Value) \ - *(ULONGLONG UNALIGNED *)(Address) = (Value) - -/* VOID - * RtlStoreUshort( - * IN PUSHORT Address, - * IN USHORT Value); - */ -#define RtlStoreUshort(Address,Value) \ - *(USHORT UNALIGNED *)(Address) = (Value) - -/* VOID - * RtlRetrieveUshort( - * PUSHORT DestinationAddress, - * PUSHORT SourceAddress); - */ -#define RtlRetrieveUshort(DestAddress,SrcAddress) \ - *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress) /* VOID * RtlRetrieveUlong( - * PULONG DestinationAddress, - * PULONG SourceAddress); + * PULONG DestinationAddress, + * PULONG SourceAddress); */ +#if defined(_AMD64_) #define RtlRetrieveUlong(DestAddress,SrcAddress) \ *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress) - #else - -#define RtlStoreUlong(Address,Value) \ - if ((ULONG_PTR)(Address) & LONG_MASK) { \ - ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ - ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \ - ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \ - ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \ - } \ - else { \ - *((PULONG)(Address)) = (ULONG) (Value); \ - } - -#define RtlStoreUlonglong(Address,Value) \ - if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \ - RtlStoreUlong((ULONG_PTR)(Address), \ - (ULONGLONG)(Value) & 0xFFFFFFFF); \ - RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \ - (ULONGLONG)(Value) >> 32); \ - } else { \ - *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \ - } - -#define RtlStoreUshort(Address,Value) \ - if ((ULONG_PTR)(Address) & SHORT_MASK) { \ - ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ - ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \ - } \ - else { \ - *((PUSHORT) (Address)) = (USHORT)Value; \ - } - -#define RtlRetrieveUshort(DestAddress,SrcAddress) \ - if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ - { \ - ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ - ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ - } \ - else \ - { \ - *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \ - } - #define RtlRetrieveUlong(DestAddress,SrcAddress) \ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ { \ @@ -8866,60 +6083,164 @@ RtlSetDaclSecurityDescriptor( { \ *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \ } +#endif -#endif /* defined(_AMD64_) */ +/* VOID + * RtlRetrieveUshort( + * PUSHORT DestinationAddress, + * PUSHORT SourceAddress); + */ +#if defined(_AMD64_) +#define RtlRetrieveUshort(DestAddress,SrcAddress) \ + *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress) +#else +#define RtlRetrieveUshort(DestAddress,SrcAddress) \ + if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \ + { \ + ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \ + ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \ + } \ + else \ + { \ + *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \ + } +#endif + +NTSYSAPI +VOID +NTAPI +RtlSetAllBits( + IN PRTL_BITMAP BitMapHeader); + +NTSYSAPI +VOID +NTAPI +RtlSetBits( + IN PRTL_BITMAP BitMapHeader, + IN ULONG StartingIndex, + IN ULONG NumberToSet); + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetDaclSecurityDescriptor( + IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN BOOLEAN DaclPresent, + IN PACL Dacl OPTIONAL, + IN BOOLEAN DaclDefaulted OPTIONAL); + +/* VOID + * RtlStoreUlong( + * IN PULONG Address, + * IN ULONG Value); + */ +#if defined(_AMD64_) +#define RtlStoreUlong(Address,Value) \ + *(ULONG UNALIGNED *)(Address) = (Value) +#else +#define RtlStoreUlong(Address,Value) \ + if ((ULONG_PTR)(Address) & LONG_MASK) { \ + ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ + ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \ + ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \ + ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \ + } \ + else { \ + *((PULONG)(Address)) = (ULONG) (Value); \ + } +#endif + +/* VOID + * RtlStoreUlonglong( + * IN OUT PULONGLONG Address, + * ULONGLONG Value); + */ +#if defined(_AMD64_) +#define RtlStoreUlonglong(Address,Value) \ + *(ULONGLONG UNALIGNED *)(Address) = (Value) +#else +#define RtlStoreUlonglong(Address,Value) \ + if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \ + RtlStoreUlong((ULONG_PTR)(Address), \ + (ULONGLONG)(Value) & 0xFFFFFFFF); \ + RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \ + (ULONGLONG)(Value) >> 32); \ + } else { \ + *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \ + } +#endif -#ifdef _WIN64 /* VOID * RtlStoreUlongPtr( * IN OUT PULONG_PTR Address, * IN ULONG_PTR Value); */ -#define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value) +#ifdef _WIN64 +#define RtlStoreUlongPtr(Address,Value) \ + RtlStoreUlonglong(Address,Value) #else -#define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value) -#endif /* _WIN64 */ +#define RtlStoreUlongPtr(Address,Value) \ + RtlStoreUlong(Address,Value) +#endif +/* VOID + * RtlStoreUshort( + * IN PUSHORT Address, + * IN USHORT Value); + */ +#if defined(_AMD64_) +#define RtlStoreUshort(Address,Value) \ + *(USHORT UNALIGNED *)(Address) = (Value) +#else +#define RtlStoreUshort(Address,Value) \ + if ((ULONG_PTR)(Address) & SHORT_MASK) { \ + ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \ + ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \ + } \ + else { \ + *((PUSHORT) (Address)) = (USHORT)Value; \ + } +#endif NTSYSAPI BOOLEAN NTAPI RtlTimeFieldsToTime( - IN PTIME_FIELDS TimeFields, - IN PLARGE_INTEGER Time); + IN PTIME_FIELDS TimeFields, + IN PLARGE_INTEGER Time); NTSYSAPI VOID NTAPI RtlTimeToTimeFields( - IN PLARGE_INTEGER Time, - IN PTIME_FIELDS TimeFields); + IN PLARGE_INTEGER Time, + IN PTIME_FIELDS TimeFields); NTSYSAPI ULONG FASTCALL RtlUlongByteSwap( - IN ULONG Source); + IN ULONG Source); NTSYSAPI ULONGLONG FASTCALL RtlUlonglongByteSwap( - IN ULONGLONG Source); + IN ULONGLONG Source); NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + IN OUT PANSI_STRING DestinationString, + IN PCUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString); NTSYSAPI ULONG NTAPI RtlxUnicodeStringToAnsiSize( - IN PCUNICODE_STRING UnicodeString); + IN PCUNICODE_STRING UnicodeString); #define RtlUnicodeStringToAnsiSize(String) ( \ NLS_MB_CODE_PAGE_TAG ? \ @@ -8931,193 +6252,130 @@ NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToInteger( - IN PCUNICODE_STRING String, - IN ULONG Base OPTIONAL, - OUT PULONG Value); + IN PCUNICODE_STRING String, + IN ULONG Base OPTIONAL, + OUT PULONG Value); NTSYSAPI WCHAR NTAPI RtlUpcaseUnicodeChar( - IN WCHAR SourceCharacter); + IN WCHAR SourceCharacter); NTSYSAPI USHORT FASTCALL RtlUshortByteSwap( - IN USHORT Source); + IN USHORT Source); NTSYSAPI BOOLEAN NTAPI RtlValidRelativeSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, - IN ULONG SecurityDescriptorLength, - IN SECURITY_INFORMATION RequiredInformation); + IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, + IN ULONG SecurityDescriptorLength, + IN SECURITY_INFORMATION RequiredInformation); NTSYSAPI BOOLEAN NTAPI RtlValidSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + IN PSECURITY_DESCRIPTOR SecurityDescriptor); NTSYSAPI NTSTATUS NTAPI RtlWriteRegistryValue( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN PCWSTR ValueName, - IN ULONG ValueType, - IN PVOID ValueData, - IN ULONG ValueLength); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PCWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength); +#endif // (NTDDI_VERSION >= NTDDI_WIN2K) #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) NTSYSAPI VOID FASTCALL RtlPrefetchMemoryNonTemporal( - IN PVOID Source, - IN SIZE_T Length); + IN PVOID Source, + IN SIZE_T Length); #endif - #if (NTDDI_VERSION >= NTDDI_WINXP) - - - NTSYSAPI VOID NTAPI RtlClearBit( - PRTL_BITMAP BitMapHeader, - ULONG BitNumber); + PRTL_BITMAP BitMapHeader, + ULONG BitNumber); NTSYSAPI WCHAR NTAPI RtlDowncaseUnicodeChar( - IN WCHAR SourceCharacter); + IN WCHAR SourceCharacter); NTSYSAPI VOID NTAPI RtlSetBit( - PRTL_BITMAP BitMapHeader, - ULONG BitNumber); + PRTL_BITMAP BitMapHeader, + ULONG BitNumber); NTSYSAPI BOOLEAN NTAPI RtlTestBit( - IN PRTL_BITMAP BitMapHeader, - IN ULONG BitNumber); + IN PRTL_BITMAP BitMapHeader, + IN ULONG BitNumber); -NTSYSAPI -NTSTATUS -NTAPI -RtlHashUnicodeString( - IN CONST UNICODE_STRING *String, - IN BOOLEAN CaseInSensitive, - IN ULONG HashAlgorithm, - OUT PULONG HashValue); - - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ +#endif // (NTDDI_VERSION >= NTDDI_WINXP) #if (NTDDI_VERSION >= NTDDI_VISTA) - - - NTSYSAPI ULONG NTAPI RtlNumberOfSetBitsUlongPtr( - IN ULONG_PTR Target); + IN ULONG_PTR Target); NTSYSAPI ULONGLONG NTAPI -RtlIoDecodeMemIoResource( - IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, - OUT PULONGLONG Alignment OPTIONAL, - OUT PULONGLONG MinimumAddress OPTIONAL, - OUT PULONGLONG MaximumAddress OPTIONAL); +RtlIoDecodeMemIoResource ( + IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, + OUT PULONGLONG Alignment OPTIONAL, + OUT PULONGLONG MinimumAddress OPTIONAL, + OUT PULONGLONG MaximumAddress OPTIONAL); NTSYSAPI NTSTATUS NTAPI RtlIoEncodeMemIoResource( - IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, - IN UCHAR Type, - IN ULONGLONG Length, - IN ULONGLONG Alignment, - IN ULONGLONG MinimumAddress, - IN ULONGLONG MaximumAddress); + IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, + IN UCHAR Type, + IN ULONGLONG Length, + IN ULONGLONG Alignment, + IN ULONGLONG MinimumAddress, + IN ULONGLONG MaximumAddress); NTSYSAPI ULONGLONG NTAPI RtlCmDecodeMemIoResource( - IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, - OUT PULONGLONG Start OPTIONAL); + IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, + OUT PULONGLONG Start OPTIONAL); NTSYSAPI NTSTATUS NTAPI RtlFindClosestEncodableLength( - IN ULONGLONG SourceLength, - OUT PULONGLONG TargetLength); - -NTSYSAPI -NTSTATUS -NTAPI -RtlCmEncodeMemIoResource( - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, - IN UCHAR Type, - IN ULONGLONG Length, - IN ULONGLONG Start); - - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) - - - -NTSYSAPI -NTSTATUS -NTAPI -RtlUnicodeToUTF8N( - OUT PCHAR UTF8StringDestination, - IN ULONG UTF8StringMaxByteCount, - OUT PULONG UTF8StringActualByteCount, - IN PCWCH UnicodeStringSource, - IN ULONG UnicodeStringByteCount); - -NTSYSAPI -NTSTATUS -NTAPI -RtlUTF8ToUnicodeN( - OUT PWSTR UnicodeStringDestination, - IN ULONG UnicodeStringMaxByteCount, - OUT PULONG UnicodeStringActualByteCount, - IN PCCH UTF8StringSource, - IN ULONG UTF8StringByteCount); - -NTSYSAPI -ULONG64 -NTAPI -RtlGetEnabledExtendedFeatures( - IN ULONG64 FeatureMask); - - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ + IN ULONGLONG SourceLength, + OUT PULONGLONG TargetLength); +#endif #if !defined(MIDL_PASS) /* inline funftions */ @@ -9125,12 +6383,11 @@ RtlGetEnabledExtendedFeatures( static __inline LARGE_INTEGER NTAPI_INLINE -RtlConvertLongToLargeInteger( - IN LONG SignedInteger) +RtlConvertLongToLargeInteger(LONG SignedInteger) { - LARGE_INTEGER ret; - ret.QuadPart = SignedInteger; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = SignedInteger; + return ret; } //DECLSPEC_DEPRECATED_DDK_WINXP @@ -9138,39 +6395,11 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlConvertUlongToLargeInteger( - IN ULONG UnsignedInteger) + ULONG UnsignedInteger) { - LARGE_INTEGER ret; - ret.QuadPart = UnsignedInteger; - return ret; -} - -//DECLSPEC_DEPRECATED_DDK_WINXP -static __inline -LARGE_INTEGER -NTAPI_INLINE -RtlLargeIntegerShiftLeft( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) -{ - LARGE_INTEGER Result; - - Result.QuadPart = LargeInteger.QuadPart << ShiftCount; - return Result; -} - -//DECLSPEC_DEPRECATED_DDK_WINXP -static __inline -LARGE_INTEGER -NTAPI_INLINE -RtlLargeIntegerShiftRight( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) -{ - LARGE_INTEGER Result; - - Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount; - return Result; + LARGE_INTEGER ret; + ret.QuadPart = UnsignedInteger; + return ret; } //DECLSPEC_DEPRECATED_DDK @@ -9178,40 +6407,13 @@ static __inline ULONG NTAPI_INLINE RtlEnlargedUnsignedDivide( - IN ULARGE_INTEGER Dividend, - IN ULONG Divisor, - IN OUT PULONG Remainder) + IN ULARGE_INTEGER Dividend, + IN ULONG Divisor, + IN OUT PULONG Remainder) { - if (Remainder) - *Remainder = (ULONG)(Dividend.QuadPart % Divisor); - return (ULONG)(Dividend.QuadPart / Divisor); -} - -//DECLSPEC_DEPRECATED_DDK -static __inline -LARGE_INTEGER -NTAPI_INLINE -RtlLargeIntegerNegate( - IN LARGE_INTEGER Subtrahend) -{ - LARGE_INTEGER Difference; - - Difference.QuadPart = -Subtrahend.QuadPart; - return Difference; -} - -//DECLSPEC_DEPRECATED_DDK -static __inline -LARGE_INTEGER -NTAPI_INLINE -RtlLargeIntegerSubtract( - IN LARGE_INTEGER Minuend, - IN LARGE_INTEGER Subtrahend) -{ - LARGE_INTEGER Difference; - - Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart; - return Difference; + if (Remainder) + *Remainder = (ULONG)(Dividend.QuadPart % Divisor); + return (ULONG)(Dividend.QuadPart / Divisor); } //DECLSPEC_DEPRECATED_DDK @@ -9219,12 +6421,12 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlEnlargedUnsignedMultiply( - IN ULONG Multiplicand, - IN ULONG Multiplier) + IN ULONG Multiplicand, + IN ULONG Multiplier) { - LARGE_INTEGER ret; - ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; + return ret; } //DECLSPEC_DEPRECATED_DDK @@ -9232,72 +6434,65 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlEnlargedIntegerMultiply( - IN LONG Multiplicand, - IN LONG Multiplier) + IN LONG Multiplicand, + IN LONG Multiplier) { - LARGE_INTEGER ret; - ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; + return ret; } FORCEINLINE VOID -RtlInitEmptyAnsiString( - OUT PANSI_STRING AnsiString, - IN PCHAR Buffer, - IN USHORT BufferSize) +RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString, + IN PCHAR Buffer, + IN USHORT BufferSize) { - AnsiString->Length = 0; - AnsiString->MaximumLength = BufferSize; - AnsiString->Buffer = Buffer; + AnsiString->Length = 0; + AnsiString->MaximumLength = BufferSize; + AnsiString->Buffer = Buffer; } FORCEINLINE VOID RtlInitEmptyUnicodeString( - OUT PUNICODE_STRING UnicodeString, - IN PWSTR Buffer, - IN USHORT BufferSize) + OUT PUNICODE_STRING UnicodeString, + IN PWSTR Buffer, + IN USHORT BufferSize) { - UnicodeString->Length = 0; - UnicodeString->MaximumLength = BufferSize; - UnicodeString->Buffer = Buffer; + UnicodeString->Length = 0; + UnicodeString->MaximumLength = BufferSize; + UnicodeString->Buffer = Buffer; } #if defined(_AMD64_) || defined(_IA64_) - - static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedIntegerMultiply( - IN LARGE_INTEGER Multiplicand, - IN LONG Multiplier) + LARGE_INTEGER Multiplicand, + LONG Multiplier) { - LARGE_INTEGER ret; - ret.QuadPart = Multiplicand.QuadPart * Multiplier; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = Multiplicand.QuadPart * Multiplier; + return ret; } static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN ULONG Divisor, - OUT PULONG Remainder OPTIONAL) + LARGE_INTEGER Dividend, + ULONG Divisor, + PULONG Remainder) { - LARGE_INTEGER ret; - ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; - if (Remainder) - *Remainder = (ULONG)(Dividend.QuadPart % Divisor); - return ret; + LARGE_INTEGER ret; + ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; + if (Remainder) + *Remainder = (ULONG)(Dividend.QuadPart % Divisor); + return ret; } - - - -#endif /* defined(_AMD64_) || defined(_IA64_) */ - +#endif #if defined(_AMD64_) @@ -9309,19 +6504,19 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedMagicDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER MagicDivisor, - IN CCHAR ShiftCount) + IN LARGE_INTEGER Dividend, + IN LARGE_INTEGER MagicDivisor, + IN CCHAR ShiftCount) { - LARGE_INTEGER ret; - ULONG64 ret64; - BOOLEAN Pos; - Pos = (Dividend.QuadPart >= 0); - ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, - MagicDivisor.QuadPart); - ret64 >>= ShiftCount; - ret.QuadPart = Pos ? ret64 : -ret64; - return ret; + LARGE_INTEGER ret; + ULONG64 ret64; + BOOLEAN Pos; + Pos = (Dividend.QuadPart >= 0); + ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, + MagicDivisor.QuadPart); + ret64 >>= ShiftCount; + ret.QuadPart = Pos ? ret64 : -ret64; + return ret; } #endif @@ -9330,12 +6525,12 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerAdd( - IN LARGE_INTEGER Addend1, - IN LARGE_INTEGER Addend2) + IN LARGE_INTEGER Addend1, + IN LARGE_INTEGER Addend2) { - LARGE_INTEGER ret; - ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart; + return ret; } /* VOID @@ -9352,12 +6547,12 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerArithmeticShift( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) + IN LARGE_INTEGER LargeInteger, + IN CCHAR ShiftCount) { - LARGE_INTEGER ret; - ret.QuadPart = LargeInteger.QuadPart >> ShiftCount; - return ret; + LARGE_INTEGER ret; + ret.QuadPart = LargeInteger.QuadPart >> ShiftCount; + return ret; } /* BOOLEAN @@ -9371,74 +6566,36 @@ RtlLargeIntegerArithmeticShift( FORCEINLINE PVOID RtlSecureZeroMemory( - OUT PVOID Pointer, - IN SIZE_T Size) + OUT PVOID Pointer, + IN SIZE_T Size) { - volatile char* vptr = (volatile char*)Pointer; + volatile char* vptr = (volatile char*)Pointer; #if defined(_M_AMD64) - __stosb((PUCHAR)vptr, 0, Size); + __stosb((PUCHAR)vptr, 0, Size); #else - char * endptr = (char *)vptr + Size; - while (vptr < endptr) { - *vptr = 0; vptr++; - } + char * endptr = (char *)vptr + Size; + while (vptr < endptr) + { + *vptr = 0; vptr++; + } #endif - return Pointer; + return Pointer; } #if defined(_M_AMD64) FORCEINLINE -BOOLEAN +ULONG RtlCheckBit( - IN PRTL_BITMAP BitMapHeader, - IN ULONG BitPosition) + IN PRTL_BITMAP BitMapHeader, + IN ULONG BitPosition) { - return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition); + return BitTest((LONG CONST*)BitMapHeader->Buffer, BitPosition); } #else #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1) -#endif /* defined(_M_AMD64) */ +#endif // defined(_M_AMD64) -#define RtlLargeIntegerGreaterThan(X,Y) ( \ - (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \ - ((X).HighPart > (Y).HighPart) \ -) - -#define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \ - (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \ - ((X).HighPart > (Y).HighPart) \ -) - -#define RtlLargeIntegerNotEqualTo(X,Y) ( \ - (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \ -) - -#define RtlLargeIntegerLessThan(X,Y) ( \ - (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \ - ((X).HighPart < (Y).HighPart) \ -) - -#define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \ - (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \ - ((X).HighPart < (Y).HighPart) \ -) - -#define RtlLargeIntegerGreaterThanZero(X) ( \ - (((X).HighPart == 0) && ((X).LowPart > 0)) || \ - ((X).HighPart > 0 ) \ -) - -#define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 ) - -#define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) ) - -#define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) ) - -#define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) ) - -#define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) ) - -#endif /* !defined(MIDL_PASS) */ +#endif // !defined(MIDL_PASS) /* Byte Swap Functions */ #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \ @@ -9492,10 +6649,6 @@ RtlCheckBit( (__annotation(L"Debug", L"AssertFail", msg), \ DbgRaiseAssertionFailure(), FALSE) : TRUE) -#define NT_VERIFY NT_ASSERT -#define NT_VERIFYMSG NT_ASSERTMSG -#define NT_VERIFYMSGW NT_ASSERTMSGW - #else /* GCC doesn't support __annotation (nor PDB) */ @@ -9521,19 +6674,12 @@ RtlCheckBit( #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) -#define NT_ASSERT(exp) ((VOID)0) -#define NT_ASSERTMSG(msg, exp) ((VOID)0) -#define NT_ASSERTMSGW(msg, exp) ((VOID)0) - -#define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE) -#define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE) -#define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE) +#define NT_ASSERT(exp) ((VOID)0) +#define NT_ASSERTMSG(exp) ((VOID)0) +#define NT_ASSERTMSGW(exp) ((VOID)0) #endif /* DBG */ -#define InitializeListHead32(ListHead) (\ - (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead))) - #if !defined(_WINBASE_) #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_)) @@ -9551,21 +6697,25 @@ InitializeSListHead( OUT PSLIST_HEADER SListHead) { #if defined(_IA64_) - ULONG64 FeatureBits; + ULONG64 FeatureBits; #endif #if defined(_WIN64) - if (((ULONG_PTR)SListHead & 0xf) != 0) { - RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT); - } + if (((ULONG_PTR)SListHead & 0xf) != 0) + { + RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT); + } #endif - RtlZeroMemory(SListHead, sizeof(SLIST_HEADER)); + + RtlZeroMemory(SListHead, sizeof(SLIST_HEADER)); + #if defined(_IA64_) - FeatureBits = __getReg(CV_IA64_CPUID4); - if ((FeatureBits & KF_16BYTE_INSTR) != 0) { - SListHead->Header16.HeaderType = 1; - SListHead->Header16.Init = 1; - } + FeatureBits = __getReg(CV_IA64_CPUID4); + if ((FeatureBits & KF_16BYTE_INSTR) != 0) + { + SListHead->Header16.HeaderType = 1; + SListHead->Header16.Init = 1; + } #endif } @@ -9591,14 +6741,14 @@ NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPopEntrySList( - IN PSLIST_HEADER ListHead); + IN PSLIST_HEADER ListHead); NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry); + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry); #define InterlockedFlushSList(ListHead) \ ExInterlockedFlushSList(ListHead) @@ -9610,68 +6760,23 @@ InterlockedPushEntrySList( #endif /* !defined(_WINBASE_) */ -#define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset) -#define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length) -#define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \ - ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk))) -#define RTL_CONTEXT_OFFSET(Context, Chunk) \ - RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk) -#define RTL_CONTEXT_LENGTH(Context, Chunk) \ - RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk) -#define RTL_CONTEXT_CHUNK(Context, Chunk) \ - RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \ - (PCONTEXT_EX)(Context + 1), \ - Chunk) - -BOOLEAN -RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)( - IN ULONG Version); - -BOOLEAN -RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)( - IN ULONG Version); - -#ifndef RtlIsNtDdiVersionAvailable -#define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable -#endif - -#ifndef RtlIsServicePackVersionInstalled -#define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled -#endif - -#define RtlInterlockedSetBits(Flags, Flag) \ - InterlockedOr((PLONG)(Flags), Flag) - -#define RtlInterlockedAndBits(Flags, Flag) \ - InterlockedAnd((PLONG)(Flags), Flag) - -#define RtlInterlockedClearBits(Flags, Flag) \ - RtlInterlockedAndBits(Flags, ~(Flag)) - -#define RtlInterlockedXorBits(Flags, Flag) \ - InterlockedXor(Flags, Flag) - -#define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \ - (VOID) RtlInterlockedSetBits(Flags, Flag) - -#define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \ - (VOID) RtlInterlockedAndBits(Flags, Flag) - -#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ - RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag)) - - /****************************************************************************** * Kernel Functions * ******************************************************************************/ +NTHALAPI +KIRQL +NTAPI +KeGetCurrentIrql( + VOID); + NTKERNELAPI VOID NTAPI KeInitializeEvent( - OUT PRKEVENT Event, - IN EVENT_TYPE Type, - IN BOOLEAN State); + OUT PRKEVENT Event, + IN EVENT_TYPE Type, + IN BOOLEAN State); NTKERNELAPI VOID @@ -9681,8 +6786,6 @@ KeClearEvent( #if (NTDDI_VERSION >= NTDDI_WIN2K) - -#if defined(_NTDDK_) || defined(_NTIFS_) NTKERNELAPI VOID NTAPI @@ -9690,7 +6793,6 @@ ProbeForRead( IN CONST VOID *Address, /* CONST is added */ IN SIZE_T Length, IN ULONG Alignment); -#endif /* defined(_NTDDK_) || defined(_NTIFS_) */ NTKERNELAPI VOID @@ -9700,9 +6802,7 @@ ProbeForWrite( IN SIZE_T Length, IN ULONG Alignment); - #if defined(SINGLE_GROUP_LEGACY_API) - NTKERNELAPI VOID NTAPI @@ -9712,7 +6812,7 @@ NTKERNELAPI VOID NTAPI KeSetSystemAffinityThread( - IN KAFFINITY Affinity); + IN KAFFINITY Affinity); NTKERNELAPI VOID @@ -9724,67 +6824,37 @@ KeSetTargetProcessorDpc( NTKERNELAPI KAFFINITY NTAPI -KeQueryActiveProcessors(VOID); - - -#endif /* defined(SINGLE_GROUP_LEGACY_API) */ +KeQueryActiveProcessors( + VOID); +#endif #if !defined(_M_AMD64) NTKERNELAPI ULONGLONG NTAPI -KeQueryInterruptTime(VOID); +KeQueryInterruptTime( + VOID); NTKERNELAPI VOID NTAPI KeQuerySystemTime( - OUT PLARGE_INTEGER CurrentTime); + OUT PLARGE_INTEGER CurrentTime); #endif /* !_M_AMD64 */ -#if !defined(_X86_) -NTKERNELAPI -KIRQL -NTAPI -KeAcquireSpinLockRaiseToDpc( - IN OUT PKSPIN_LOCK SpinLock); - -#define KeAcquireSpinLock(SpinLock, OldIrql) \ - *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) - -NTKERNELAPI -VOID -NTAPI -KeAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); - -NTKERNELAPI -VOID -NTAPI -KeReleaseSpinLock( - IN OUT PKSPIN_LOCK SpinLock, - IN KIRQL NewIrql); - -NTKERNELAPI -VOID -NTAPI -KeReleaseSpinLockFromDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); -#endif /* !_X86_ */ - #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK)) NTKERNELAPI VOID NTAPI KeInitializeSpinLock( - IN PKSPIN_LOCK SpinLock); + IN PKSPIN_LOCK SpinLock); #else FORCEINLINE VOID KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) { - /* Clear the lock */ - *SpinLock = 0; + /* Clear the lock */ + *SpinLock = 0; } #endif @@ -9793,11 +6863,11 @@ DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx( - IN ULONG BugCheckCode, - IN ULONG_PTR BugCheckParameter1, - IN ULONG_PTR BugCheckParameter2, - IN ULONG_PTR BugCheckParameter3, - IN ULONG_PTR BugCheckParameter4); + IN ULONG BugCheckCode, + IN ULONG_PTR BugCheckParameter1, + IN ULONG_PTR BugCheckParameter2, + IN ULONG_PTR BugCheckParameter3, + IN ULONG_PTR BugCheckParameter4); NTKERNELAPI BOOLEAN @@ -9828,66 +6898,66 @@ NTKERNELAPI VOID NTAPI KeInitializeDeviceQueue( - OUT PKDEVICE_QUEUE DeviceQueue); + OUT PKDEVICE_QUEUE DeviceQueue); NTKERNELAPI VOID NTAPI KeInitializeDpc( - OUT PRKDPC Dpc, - IN PKDEFERRED_ROUTINE DeferredRoutine, - IN PVOID DeferredContext OPTIONAL); + OUT PRKDPC Dpc, + IN PKDEFERRED_ROUTINE DeferredRoutine, + IN PVOID DeferredContext OPTIONAL); NTKERNELAPI VOID NTAPI KeInitializeMutex( - OUT PRKMUTEX Mutex, - IN ULONG Level); + OUT PRKMUTEX Mutex, + IN ULONG Level); NTKERNELAPI VOID NTAPI KeInitializeSemaphore( - OUT PRKSEMAPHORE Semaphore, - IN LONG Count, - IN LONG Limit); + OUT PRKSEMAPHORE Semaphore, + IN LONG Count, + IN LONG Limit); NTKERNELAPI VOID NTAPI KeInitializeTimer( - OUT PKTIMER Timer); + OUT PKTIMER Timer); NTKERNELAPI VOID NTAPI KeInitializeTimerEx( - OUT PKTIMER Timer, - IN TIMER_TYPE Type); + OUT PKTIMER Timer, + IN TIMER_TYPE Type); NTKERNELAPI BOOLEAN NTAPI KeInsertByKeyDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, - IN ULONG SortKey); + IN OUT PKDEVICE_QUEUE DeviceQueue, + IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, + IN ULONG SortKey); NTKERNELAPI BOOLEAN NTAPI KeInsertDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); + IN OUT PKDEVICE_QUEUE DeviceQueue, + IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); NTKERNELAPI BOOLEAN NTAPI KeInsertQueueDpc( - IN OUT PRKDPC Dpc, - IN PVOID SystemArgument1 OPTIONAL, - IN PVOID SystemArgument2 OPTIONAL); + IN OUT PRKDPC Dpc, + IN PVOID SystemArgument1 OPTIONAL, + IN PVOID SystemArgument2 OPTIONAL); NTKERNELAPI VOID @@ -9898,166 +6968,168 @@ NTHALAPI LARGE_INTEGER NTAPI KeQueryPerformanceCounter( - OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL); + OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL); NTKERNELAPI KPRIORITY NTAPI KeQueryPriorityThread( - IN PRKTHREAD Thread); + IN PRKTHREAD Thread); NTKERNELAPI ULONG NTAPI -KeQueryTimeIncrement(VOID); +KeQueryTimeIncrement( + VOID); NTKERNELAPI LONG NTAPI KeReadStateEvent( - IN PRKEVENT Event); + IN PRKEVENT Event); NTKERNELAPI LONG NTAPI KeReadStateMutex( - IN PRKMUTEX Mutex); + IN PRKMUTEX Mutex); + NTKERNELAPI LONG NTAPI KeReadStateSemaphore( - IN PRKSEMAPHORE Semaphore); + IN PRKSEMAPHORE Semaphore); NTKERNELAPI BOOLEAN NTAPI KeReadStateTimer( - IN PKTIMER Timer); + IN PKTIMER Timer); NTKERNELAPI BOOLEAN NTAPI KeRegisterBugCheckCallback( - OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord, - IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, - IN PVOID Buffer, - IN ULONG Length, - IN PUCHAR Component); + OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord, + IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, + IN PVOID Buffer, + IN ULONG Length, + IN PUCHAR Component); NTKERNELAPI LONG NTAPI KeReleaseMutex( - IN OUT PRKMUTEX Mutex, - IN BOOLEAN Wait); + IN OUT PRKMUTEX Mutex, + IN BOOLEAN Wait); NTKERNELAPI LONG NTAPI KeReleaseSemaphore( - IN OUT PRKSEMAPHORE Semaphore, - IN KPRIORITY Increment, - IN LONG Adjustment, - IN BOOLEAN Wait); + IN OUT PRKSEMAPHORE Semaphore, + IN KPRIORITY Increment, + IN LONG Adjustment, + IN BOOLEAN Wait); NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN ULONG SortKey); + IN OUT PKDEVICE_QUEUE DeviceQueue, + IN ULONG SortKey); NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue); + IN OUT PKDEVICE_QUEUE DeviceQueue); NTKERNELAPI BOOLEAN NTAPI KeRemoveEntryDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); + IN OUT PKDEVICE_QUEUE DeviceQueue, + IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); NTKERNELAPI BOOLEAN NTAPI KeRemoveQueueDpc( - IN OUT PRKDPC Dpc); + IN OUT PRKDPC Dpc); NTKERNELAPI LONG NTAPI KeResetEvent( - IN OUT PRKEVENT Event); + IN OUT PRKEVENT Event); NTKERNELAPI LONG NTAPI KeSetEvent( - IN OUT PRKEVENT Event, - IN KPRIORITY Increment, - IN BOOLEAN Wait); + IN OUT PRKEVENT Event, + IN KPRIORITY Increment, + IN BOOLEAN Wait); NTKERNELAPI VOID NTAPI KeSetImportanceDpc( - IN OUT PRKDPC Dpc, - IN KDPC_IMPORTANCE Importance); + IN OUT PRKDPC Dpc, + IN KDPC_IMPORTANCE Importance); NTKERNELAPI KPRIORITY NTAPI KeSetPriorityThread( - IN OUT PKTHREAD Thread, - IN KPRIORITY Priority); + IN OUT PKTHREAD Thread, + IN KPRIORITY Priority); NTKERNELAPI BOOLEAN NTAPI KeSetTimer( - IN OUT PKTIMER Timer, - IN LARGE_INTEGER DueTime, - IN PKDPC Dpc OPTIONAL); + IN OUT PKTIMER Timer, + IN LARGE_INTEGER DueTime, + IN PKDPC Dpc OPTIONAL); NTKERNELAPI BOOLEAN NTAPI KeSetTimerEx( - IN OUT PKTIMER Timer, - IN LARGE_INTEGER DueTime, - IN LONG Period OPTIONAL, - IN PKDPC Dpc OPTIONAL); + IN OUT PKTIMER Timer, + IN LARGE_INTEGER DueTime, + IN LONG Period OPTIONAL, + IN PKDPC Dpc OPTIONAL); NTHALAPI VOID NTAPI KeStallExecutionProcessor( - IN ULONG MicroSeconds); + IN ULONG MicroSeconds); NTKERNELAPI BOOLEAN NTAPI KeSynchronizeExecution( - IN OUT PKINTERRUPT Interrupt, - IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, - IN PVOID SynchronizeContext OPTIONAL); + IN OUT PKINTERRUPT Interrupt, + IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, + IN PVOID SynchronizeContext OPTIONAL); NTKERNELAPI NTSTATUS NTAPI KeWaitForMultipleObjects( - IN ULONG Count, - IN PVOID Object[], - IN WAIT_TYPE WaitType, - IN KWAIT_REASON WaitReason, - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL, - OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL); + IN ULONG Count, + IN PVOID Object[], + IN WAIT_TYPE WaitType, + IN KWAIT_REASON WaitReason, + IN KPROCESSOR_MODE WaitMode, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL, + OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL); #define KeWaitForMutexObject KeWaitForSingleObject @@ -10065,11 +7137,11 @@ NTKERNELAPI NTSTATUS NTAPI KeWaitForSingleObject( - IN PVOID Object, - IN KWAIT_REASON WaitReason, - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL); + IN PVOID Object, + IN KWAIT_REASON WaitReason, + IN KPROCESSOR_MODE WaitMode, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -10086,14 +7158,14 @@ NTKERNELAPI VOID FASTCALL KeAcquireInStackQueuedSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock, - OUT PKLOCK_QUEUE_HANDLE LockHandle); + IN OUT PKSPIN_LOCK SpinLock, + OUT PKLOCK_QUEUE_HANDLE LockHandle); NTKERNELAPI KIRQL NTAPI KeAcquireInterruptSpinLock( - IN OUT PKINTERRUPT Interrupt); + IN OUT PKINTERRUPT Interrupt); NTKERNELAPI BOOLEAN @@ -10116,14 +7188,14 @@ NTKERNELAPI VOID FASTCALL KeReleaseInStackQueuedSpinLockFromDpcLevel( - IN PKLOCK_QUEUE_HANDLE LockHandle); + IN PKLOCK_QUEUE_HANDLE LockHandle); NTKERNELAPI VOID NTAPI KeReleaseInterruptSpinLock( - IN OUT PKINTERRUPT Interrupt, - IN KIRQL OldIrql); + IN OUT PKINTERRUPT Interrupt, + IN KIRQL OldIrql); NTKERNELAPI PKDEVICE_QUEUE_ENTRY @@ -10160,10 +7232,13 @@ KeRegisterBugCheckReasonCallback( #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */ #if (NTDDI_VERSION >= NTDDI_WINXPSP2) + NTKERNELAPI VOID NTAPI -KeFlushQueuedDpcs(VOID); +KeFlushQueuedDpcs( + VOID); + #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ #if (NTDDI_VERSION >= NTDDI_WS03) @@ -10215,12 +7290,10 @@ FASTCALL KeTestSpinLock( IN PKSPIN_LOCK SpinLock); - #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) - NTKERNELAPI BOOLEAN FASTCALL @@ -10230,53 +7303,64 @@ KeTryToAcquireSpinLockAtDpcLevel( NTKERNELAPI BOOLEAN NTAPI -KeAreAllApcsDisabled(VOID); +KeAreAllApcsDisabled( + VOID); NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + IN OUT PKGUARDED_MUTEX GuardedMutex +); NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex); + IN OUT PKGUARDED_MUTEX GuardedMutex +); NTKERNELAPI VOID NTAPI -KeEnterGuardedRegion(VOID); +KeEnterGuardedRegion( + VOID +); NTKERNELAPI VOID NTAPI -KeLeaveGuardedRegion(VOID); +KeLeaveGuardedRegion( + VOID +); NTKERNELAPI VOID FASTCALL KeInitializeGuardedMutex( - OUT PKGUARDED_MUTEX GuardedMutex); + OUT PKGUARDED_MUTEX GuardedMutex +); NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex); + IN OUT PKGUARDED_MUTEX GuardedMutex +); NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + IN OUT PKGUARDED_MUTEX GuardedMutex +); NTKERNELAPI BOOLEAN FASTCALL KeTryToAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + IN OUT PKGUARDED_MUTEX GuardedMutex +); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ @@ -10302,19 +7386,12 @@ KeQueryDpcWatchdogInformation( OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation); #if defined(SINGLE_GROUP_LEGACY_API) - NTKERNELAPI KAFFINITY NTAPI KeSetSystemAffinityThreadEx( IN KAFFINITY Affinity); -NTKERNELAPI -VOID -NTAPI -KeRevertToUserAffinityThreadEx( - IN KAFFINITY Affinity); - NTKERNELAPI ULONG NTAPI @@ -10324,10 +7401,11 @@ KeQueryActiveProcessorCount( NTKERNELAPI ULONG NTAPI -KeQueryMaximumProcessorCount(VOID); -#endif /* SINGLE_GROUP_LEGACY_API */ +KeQueryMaximumProcessorCount( + VOID); +#endif -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WS08) @@ -10345,7 +7423,6 @@ KeDeregisterProcessorChangeCallback( #if (NTDDI_VERSION >= NTDDI_WIN7) - ULONG64 NTAPI KeQueryTotalCycleTimeProcess( @@ -10391,7 +7468,8 @@ KeSetCoalescableTimer( NTKERNELAPI ULONGLONG NTAPI -KeQueryUnbiasedInterruptTime(VOID); +KeQueryUnbiasedInterruptTime( + VOID); NTKERNELAPI ULONG @@ -10408,17 +7486,19 @@ KeQueryMaximumProcessorCountEx( NTKERNELAPI USHORT NTAPI -KeQueryActiveGroupCount(VOID); +KeQueryActiveGroupCount( + VOID); NTKERNELAPI USHORT NTAPI -KeQueryMaximumGroupCount(VOID); +KeQueryMaximumGroupCount( + VOID); NTKERNELAPI KAFFINITY NTAPI -KeQueryGroupAffinity( +KeQueryGroupAffinity IN USHORT GroupNumber); NTKERNELAPI @@ -10444,12 +7524,14 @@ KeQueryNodeMaximumProcessorCount( NTKERNELAPI USHORT NTAPI -KeQueryHighestNodeNumber(VOID); +KeQueryHighestNodeNumber( + VOID); NTKERNELAPI USHORT NTAPI -KeGetCurrentNodeNumber(VOID); +KeGetCurrentNodeNumber( + VOID); NTKERNELAPI NTSTATUS @@ -10473,18 +7555,7 @@ NTAPI KeRestoreExtendedProcessorState( IN PXSTATE_SAVE XStateSave); -NTSTATUS -NTAPI -KeGetProcessorNumberFromIndex( - IN ULONG ProcIndex, - OUT PPROCESSOR_NUMBER ProcNumber); - -ULONG -NTAPI -KeGetProcessorIndexFromNumber( - IN PPROCESSOR_NUMBER ProcNumber); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #if !defined(_IA64_) NTHALAPI @@ -10519,14 +7590,17 @@ KeFlushWriteBuffer(VOID); #define PAGED_CODE() -#endif /* DBG */ +#endif #define PAGED_CODE_LOCKED() NOP_FUNCTION; /****************************************************************************** * Memory manager Functions * ******************************************************************************/ -/* Alignment Macros */ + +/* + * Alignment Macros + */ #define ALIGN_DOWN_BY(size, align) \ ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1)) @@ -10551,22 +7625,6 @@ KeFlushWriteBuffer(VOID); #define ALIGN_UP_POINTER(ptr, type) \ ALIGN_UP_POINTER_BY(ptr, sizeof(type)) -#ifndef FIELD_OFFSET -#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field)) -#endif - -#ifndef FIELD_SIZE -#define FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) -#endif - -#define POOL_TAGGING 1 - -#if DBG -#define IF_DEBUG if (TRUE) -#else -#define IF_DEBUG if (FALSE) -#endif /* DBG */ - /* ULONG * BYTE_OFFSET( * IN PVOID Va) @@ -10579,7 +7637,7 @@ KeFlushWriteBuffer(VOID); * IN ULONG Size) */ #define BYTES_TO_PAGES(Size) \ - (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT) + (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0)) /* PVOID * PAGE_ALIGN( @@ -10604,9 +7662,6 @@ KeFlushWriteBuffer(VOID); ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) -#define COMPUTE_PAGES_SPANNED(Va, Size) \ - ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) - /* * ULONG * MmGetMdlByteCount( @@ -10623,8 +7678,6 @@ KeFlushWriteBuffer(VOID); #define MmGetMdlByteOffset(_Mdl) \ ((_Mdl)->ByteOffset) -#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa) - /* * PPFN_NUMBER * MmGetMdlPfnArray( @@ -10705,56 +7758,56 @@ NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS HighestAcceptableAddress); + IN SIZE_T NumberOfBytes, + IN PHYSICAL_ADDRESS HighestAcceptableAddress); NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCache( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType); + IN SIZE_T NumberOfBytes, + IN PHYSICAL_ADDRESS LowestAcceptableAddress, + IN PHYSICAL_ADDRESS HighestAcceptableAddress, + IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, + IN MEMORY_CACHING_TYPE CacheType); NTKERNELAPI PMDL NTAPI MmAllocatePagesForMdl( - IN PHYSICAL_ADDRESS LowAddress, - IN PHYSICAL_ADDRESS HighAddress, - IN PHYSICAL_ADDRESS SkipBytes, - IN SIZE_T TotalBytes); + IN PHYSICAL_ADDRESS LowAddress, + IN PHYSICAL_ADDRESS HighAddress, + IN PHYSICAL_ADDRESS SkipBytes, + IN SIZE_T TotalBytes); NTKERNELAPI VOID NTAPI MmBuildMdlForNonPagedPool( - IN OUT PMDLX MemoryDescriptorList); + IN OUT PMDLX MemoryDescriptorList); //DECLSPEC_DEPRECATED_DDK NTKERNELAPI PMDL NTAPI MmCreateMdl( - IN PMDL MemoryDescriptorList OPTIONAL, - IN PVOID Base, - IN SIZE_T Length); + IN PMDL MemoryDescriptorList OPTIONAL, + IN PVOID Base, + IN SIZE_T Length); NTKERNELAPI VOID NTAPI MmFreeContiguousMemory( - IN PVOID BaseAddress); + IN PVOID BaseAddress); NTKERNELAPI VOID NTAPI MmFreeContiguousMemorySpecifyCache( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheType); NTKERNELAPI VOID @@ -10766,7 +7819,7 @@ NTKERNELAPI PVOID NTAPI MmGetSystemRoutineAddress( - IN PUNICODE_STRING SystemRoutineName); + IN PUNICODE_STRING SystemRoutineName); NTKERNELAPI LOGICAL @@ -10778,22 +7831,22 @@ NTKERNELAPI PVOID NTAPI MmLockPagableDataSection( - IN PVOID AddressWithinSection); + IN PVOID AddressWithinSection); NTKERNELAPI PVOID NTAPI MmMapIoSpace( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheEnable); + IN PHYSICAL_ADDRESS PhysicalAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheEnable); NTKERNELAPI PVOID NTAPI MmMapLockedPages( - IN PMDL MemoryDescriptorList, - IN KPROCESSOR_MODE AccessMode); + IN PMDL MemoryDescriptorList, + IN KPROCESSOR_MODE AccessMode); NTKERNELAPI PVOID @@ -10810,81 +7863,71 @@ NTKERNELAPI PVOID NTAPI MmPageEntireDriver( - IN PVOID AddressWithinSection); + IN PVOID AddressWithinSection); NTKERNELAPI VOID NTAPI MmProbeAndLockPages( - IN OUT PMDL MemoryDescriptorList, - IN KPROCESSOR_MODE AccessMode, - IN LOCK_OPERATION Operation); + IN OUT PMDL MemoryDescriptorList, + IN KPROCESSOR_MODE AccessMode, + IN LOCK_OPERATION Operation); NTKERNELAPI MM_SYSTEMSIZE NTAPI -MmQuerySystemSize(VOID); +MmQuerySystemSize( + VOID); NTKERNELAPI VOID NTAPI MmResetDriverPaging( - IN PVOID AddressWithinSection); + IN PVOID AddressWithinSection); NTKERNELAPI SIZE_T NTAPI MmSizeOfMdl( - IN PVOID Base, - IN SIZE_T Length); + IN PVOID Base, + IN SIZE_T Length); NTKERNELAPI VOID NTAPI MmUnlockPagableImageSection( - IN PVOID ImageSectionHandle); + IN PVOID ImageSectionHandle); NTKERNELAPI VOID NTAPI MmUnlockPages( - IN OUT PMDL MemoryDescriptorList); + IN OUT PMDL MemoryDescriptorList); NTKERNELAPI VOID NTAPI MmUnmapIoSpace( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes); NTKERNELAPI VOID NTAPI MmProbeAndLockProcessPages( - IN OUT PMDL MemoryDescriptorList, - IN PEPROCESS Process, - IN KPROCESSOR_MODE AccessMode, - IN LOCK_OPERATION Operation); + IN OUT PMDL MemoryDescriptorList, + IN PEPROCESS Process, + IN KPROCESSOR_MODE AccessMode, + IN LOCK_OPERATION Operation); NTKERNELAPI VOID NTAPI MmUnmapLockedPages( - IN PVOID BaseAddress, - IN PMDL MemoryDescriptorList); + IN PVOID BaseAddress, + IN PMDL MemoryDescriptorList); -NTKERNELAPI -PVOID -NTAPI -MmAllocateContiguousMemorySpecifyCacheNode( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType, - IN NODE_REQUIREMENT PreferredNode); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +#endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -10892,69 +7935,53 @@ NTKERNELAPI NTSTATUS NTAPI MmAdvanceMdl( - IN OUT PMDL Mdl, - IN ULONG NumberOfBytes); + IN OUT PMDL Mdl, + IN ULONG NumberOfBytes); NTKERNELAPI PVOID NTAPI MmAllocateMappingAddress( - IN SIZE_T NumberOfBytes, - IN ULONG PoolTag); + IN SIZE_T NumberOfBytes, + IN ULONG PoolTag); NTKERNELAPI VOID NTAPI MmFreeMappingAddress( - IN PVOID BaseAddress, - IN ULONG PoolTag); + IN PVOID BaseAddress, + IN ULONG PoolTag); NTKERNELAPI NTSTATUS NTAPI MmIsVerifierEnabled( - OUT PULONG VerifierFlags); + OUT PULONG VerifierFlags); NTKERNELAPI PVOID NTAPI MmMapLockedPagesWithReservedMapping( - IN PVOID MappingAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList, - IN MEMORY_CACHING_TYPE CacheType); + IN PVOID MappingAddress, + IN ULONG PoolTag, + IN PMDL MemoryDescriptorList, + IN MEMORY_CACHING_TYPE CacheType); NTKERNELAPI NTSTATUS NTAPI MmProtectMdlSystemAddress( - IN PMDL MemoryDescriptorList, - IN ULONG NewProtect); + IN PMDL MemoryDescriptorList, + IN ULONG NewProtect); NTKERNELAPI VOID NTAPI MmUnmapReservedMapping( - IN PVOID BaseAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList); + IN PVOID BaseAddress, + IN ULONG PoolTag, + IN PMDL MemoryDescriptorList); -NTKERNELAPI -NTSTATUS -NTAPI -MmAddVerifierThunks( - IN PVOID ThunkBuffer, - IN ULONG ThunkBufferSize); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_WS03) -NTKERNELAPI -LOGICAL -NTAPI -MmIsIoSpaceActive( - IN PHYSICAL_ADDRESS StartAddress, - IN SIZE_T NumberOfBytes); #endif #if (NTDDI_VERSION >= NTDDI_WS03SP1) @@ -10970,15 +7997,6 @@ MmAllocatePagesForMdlEx( IN ULONG Flags); #endif -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTKERNELAPI -LOGICAL -NTAPI -MmIsDriverVerifyingByAddress( - IN PVOID AddressWithinSection); -#endif - /****************************************************************************** * Security Manager Functions * ******************************************************************************/ @@ -10989,42 +8007,42 @@ NTKERNELAPI BOOLEAN NTAPI SeAccessCheck( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, - IN BOOLEAN SubjectContextLocked, - IN ACCESS_MASK DesiredAccess, - IN ACCESS_MASK PreviouslyGrantedAccess, - OUT PPRIVILEGE_SET *Privileges OPTIONAL, - IN PGENERIC_MAPPING GenericMapping, - IN KPROCESSOR_MODE AccessMode, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus); + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, + IN BOOLEAN SubjectContextLocked, + IN ACCESS_MASK DesiredAccess, + IN ACCESS_MASK PreviouslyGrantedAccess, + OUT PPRIVILEGE_SET *Privileges OPTIONAL, + IN PGENERIC_MAPPING GenericMapping, + IN KPROCESSOR_MODE AccessMode, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus); NTKERNELAPI NTSTATUS NTAPI SeAssignSecurity( - IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, - IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, - OUT PSECURITY_DESCRIPTOR *NewDescriptor, - IN BOOLEAN IsDirectoryObject, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN PGENERIC_MAPPING GenericMapping, - IN POOL_TYPE PoolType); + IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, + IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, + OUT PSECURITY_DESCRIPTOR *NewDescriptor, + IN BOOLEAN IsDirectoryObject, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PGENERIC_MAPPING GenericMapping, + IN POOL_TYPE PoolType); NTKERNELAPI NTSTATUS NTAPI SeAssignSecurityEx( - IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, - IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, - OUT PSECURITY_DESCRIPTOR *NewDescriptor, - IN GUID *ObjectType OPTIONAL, - IN BOOLEAN IsDirectoryObject, - IN ULONG AutoInheritFlags, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN PGENERIC_MAPPING GenericMapping, - IN POOL_TYPE PoolType); + IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, + IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, + OUT PSECURITY_DESCRIPTOR *NewDescriptor, + IN GUID *ObjectType OPTIONAL, + IN BOOLEAN IsDirectoryObject, + IN ULONG AutoInheritFlags, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PGENERIC_MAPPING GenericMapping, + IN POOL_TYPE PoolType); NTKERNELAPI NTSTATUS @@ -11111,6 +8129,7 @@ SeGetWorldRights( #endif /* SE_NTFS_WORLD_CACHE */ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ + /****************************************************************************** * Configuration Manager Functions * ******************************************************************************/ @@ -11120,103 +8139,22 @@ NTKERNELAPI NTSTATUS NTAPI CmRegisterCallback( - IN PEX_CALLBACK_FUNCTION Function, - IN PVOID Context OPTIONAL, - OUT PLARGE_INTEGER Cookie); + IN PEX_CALLBACK_FUNCTION Function, + IN PVOID Context OPTIONAL, + OUT PLARGE_INTEGER Cookie); NTKERNELAPI NTSTATUS NTAPI CmUnRegisterCallback( - IN LARGE_INTEGER Cookie); + IN LARGE_INTEGER Cookie); #endif -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTKERNELAPI -NTSTATUS -NTAPI -CmRegisterCallbackEx( - PEX_CALLBACK_FUNCTION Function, - PCUNICODE_STRING Altitude, - PVOID Driver, - PVOID Context, - PLARGE_INTEGER Cookie, - PVOID Reserved); - -NTKERNELAPI -VOID -NTAPI -CmGetCallbackVersion( - OUT PULONG Major OPTIONAL, - OUT PULONG Minor OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -CmSetCallbackObjectContext( - IN OUT PVOID Object, - IN PLARGE_INTEGER Cookie, - IN PVOID NewContext, - OUT PVOID *OldContext OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -CmCallbackGetKeyObjectID( - IN PLARGE_INTEGER Cookie, - IN PVOID Object, - OUT PULONG_PTR ObjectID OPTIONAL, - OUT PCUNICODE_STRING *ObjectName OPTIONAL); - -NTKERNELAPI -PVOID -NTAPI -CmGetBoundTransaction( - IN PLARGE_INTEGER Cookie, - IN PVOID Object); - -#endif // NTDDI_VERSION >= NTDDI_VISTA - /****************************************************************************** * I/O Manager Functions * ******************************************************************************/ - -/* - * NTSTATUS - * IoAcquireRemoveLock( - * IN PIO_REMOVE_LOCK RemoveLock, - * IN OPTIONAL PVOID Tag) - */ -#if DBG -#define IoAcquireRemoveLock(RemoveLock, Tag) \ - IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK)) -#else -#define IoAcquireRemoveLock(RemoveLock, Tag) \ - IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK)) -#endif - -/* - * VOID - * IoAdjustPagingPathCount( - * IN PLONG Count, - * IN BOOLEAN Increment) - */ -#define IoAdjustPagingPathCount(_Count, \ - _Increment) \ -{ \ - if (_Increment) \ - { \ - InterlockedIncrement(_Count); \ - } \ - else \ - { \ - InterlockedDecrement(_Count); \ - } \ -} - #if !defined(_M_AMD64) NTHALAPI VOID @@ -11359,9 +8297,9 @@ NTKERNELAPI VOID NTAPI WRITE_REGISTER_BUFFER_ULONG( - IN PULONG Register, - IN PULONG Buffer, - IN ULONG Count); + IN PULONG Register, + IN PULONG Buffer, + IN ULONG Count); NTKERNELAPI VOID @@ -11389,8 +8327,8 @@ NTKERNELAPI VOID NTAPI WRITE_REGISTER_USHORT( - IN PUSHORT Register, - IN USHORT Value); + IN PUSHORT Register, + IN USHORT Value); #else @@ -11401,17 +8339,17 @@ READ_PORT_BUFFER_UCHAR( IN PUCHAR Buffer, IN ULONG Count) { - __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE VOID READ_PORT_BUFFER_ULONG( - IN PULONG Port, - IN PULONG Buffer, - IN ULONG Count) + IN PULONG Port, + IN PULONG Buffer, + IN ULONG Count) { - __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE @@ -11421,7 +8359,7 @@ READ_PORT_BUFFER_USHORT( IN PUSHORT Buffer, IN ULONG Count) { - __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE @@ -11429,7 +8367,7 @@ UCHAR READ_PORT_UCHAR( IN PUCHAR Port) { - return __inbyte((USHORT)(ULONG_PTR)Port); + return __inbyte((USHORT)(ULONG_PTR)Port); } FORCEINLINE @@ -11437,7 +8375,7 @@ ULONG READ_PORT_ULONG( IN PULONG Port) { - return __indword((USHORT)(ULONG_PTR)Port); + return __indword((USHORT)(ULONG_PTR)Port); } FORCEINLINE @@ -11445,7 +8383,7 @@ USHORT READ_PORT_USHORT( IN PUSHORT Port) { - return __inword((USHORT)(ULONG_PTR)Port); + return __inword((USHORT)(ULONG_PTR)Port); } FORCEINLINE @@ -11455,27 +8393,27 @@ READ_REGISTER_BUFFER_UCHAR( IN PUCHAR Buffer, IN ULONG Count) { - __movsb(Register, Buffer, Count); + __movsb(Register, Buffer, Count); } FORCEINLINE VOID READ_REGISTER_BUFFER_ULONG( - IN PULONG Register, - IN PULONG Buffer, - IN ULONG Count) + IN PULONG Register, + IN PULONG Buffer, + IN ULONG Count) { - __movsd(Register, Buffer, Count); + __movsd(Register, Buffer, Count); } FORCEINLINE VOID READ_REGISTER_BUFFER_USHORT( - IN PUSHORT Register, - IN PUSHORT Buffer, - IN ULONG Count) + IN PUSHORT Register, + IN PUSHORT Buffer, + IN ULONG Count) { - __movsw(Register, Buffer, Count); + __movsw(Register, Buffer, Count); } FORCEINLINE @@ -11483,7 +8421,7 @@ UCHAR READ_REGISTER_UCHAR( IN volatile UCHAR *Register) { - return *Register; + return *Register; } FORCEINLINE @@ -11491,7 +8429,7 @@ ULONG READ_REGISTER_ULONG( IN volatile ULONG *Register) { - return *Register; + return *Register; } FORCEINLINE @@ -11499,7 +8437,7 @@ USHORT READ_REGISTER_USHORT( IN volatile USHORT *Register) { - return *Register; + return *Register; } FORCEINLINE @@ -11509,7 +8447,7 @@ WRITE_PORT_BUFFER_UCHAR( IN PUCHAR Buffer, IN ULONG Count) { - __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE @@ -11519,7 +8457,7 @@ WRITE_PORT_BUFFER_ULONG( IN PULONG Buffer, IN ULONG Count) { - __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE @@ -11529,7 +8467,7 @@ WRITE_PORT_BUFFER_USHORT( IN PUSHORT Buffer, IN ULONG Count) { - __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); + __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); } FORCEINLINE @@ -11538,7 +8476,7 @@ WRITE_PORT_UCHAR( IN PUCHAR Port, IN UCHAR Value) { - __outbyte((USHORT)(ULONG_PTR)Port, Value); + __outbyte((USHORT)(ULONG_PTR)Port, Value); } FORCEINLINE @@ -11547,7 +8485,7 @@ WRITE_PORT_ULONG( IN PULONG Port, IN ULONG Value) { - __outdword((USHORT)(ULONG_PTR)Port, Value); + __outdword((USHORT)(ULONG_PTR)Port, Value); } FORCEINLINE @@ -11556,7 +8494,7 @@ WRITE_PORT_USHORT( IN PUSHORT Port, IN USHORT Value) { - __outword((USHORT)(ULONG_PTR)Port, Value); + __outword((USHORT)(ULONG_PTR)Port, Value); } FORCEINLINE @@ -11566,9 +8504,9 @@ WRITE_REGISTER_BUFFER_UCHAR( IN PUCHAR Buffer, IN ULONG Count) { - LONG Synch; - __movsb(Register, Buffer, Count); - InterlockedOr(&Synch, 1); + LONG Synch; + __movsb(Register, Buffer, Count); + InterlockedOr(&Synch, 1); } FORCEINLINE @@ -11578,9 +8516,9 @@ WRITE_REGISTER_BUFFER_ULONG( IN PULONG Buffer, IN ULONG Count) { - LONG Synch; - __movsd(Register, Buffer, Count); - InterlockedOr(&Synch, 1); + LONG Synch; + __movsd(Register, Buffer, Count); + InterlockedOr(&Synch, 1); } FORCEINLINE @@ -11590,9 +8528,9 @@ WRITE_REGISTER_BUFFER_USHORT( IN PUSHORT Buffer, IN ULONG Count) { - LONG Synch; - __movsw(Register, Buffer, Count); - InterlockedOr(&Synch, 1); + LONG Synch; + __movsw(Register, Buffer, Count); + InterlockedOr(&Synch, 1); } FORCEINLINE @@ -11601,9 +8539,9 @@ WRITE_REGISTER_UCHAR( IN volatile UCHAR *Register, IN UCHAR Value) { - LONG Synch; - *Register = Value; - InterlockedOr(&Synch, 1); + LONG Synch; + *Register = Value; + InterlockedOr(&Synch, 1); } FORCEINLINE @@ -11612,9 +8550,9 @@ WRITE_REGISTER_ULONG( IN volatile ULONG *Register, IN ULONG Value) { - LONG Synch; - *Register = Value; - InterlockedOr(&Synch, 1); + LONG Synch; + *Register = Value; + InterlockedOr(&Synch, 1); } FORCEINLINE @@ -11623,9 +8561,9 @@ WRITE_REGISTER_USHORT( IN volatile USHORT *Register, IN USHORT Value) { - LONG Sync; - *Register = Value; - InterlockedOr(&Sync, 1); + LONG Sync; + *Register = Value; + InterlockedOr(&Sync, 1); } #endif @@ -11637,218 +8575,254 @@ WRITE_REGISTER_USHORT( FORCEINLINE NTSTATUS IoAllocateAdapterChannel( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context) + IN PDMA_ADAPTER DmaAdapter, + IN PDEVICE_OBJECT DeviceObject, + IN ULONG NumberOfMapRegisters, + IN PDRIVER_CONTROL ExecutionRoutine, + IN PVOID Context) { - PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; - AllocateAdapterChannel = - *(DmaAdapter)->DmaOperations->AllocateAdapterChannel; - ASSERT(AllocateAdapterChannel); - return AllocateAdapterChannel(DmaAdapter, - DeviceObject, - NumberOfMapRegisters, - ExecutionRoutine, - Context ); + PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; + AllocateAdapterChannel = + *(DmaAdapter)->DmaOperations->AllocateAdapterChannel; + ASSERT(AllocateAdapterChannel); + return AllocateAdapterChannel(DmaAdapter, + DeviceObject, + NumberOfMapRegisters, + ExecutionRoutine, + Context ); } FORCEINLINE BOOLEAN NTAPI IoFlushAdapterBuffers( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN ULONG Length, - IN BOOLEAN WriteToDevice) + IN PDMA_ADAPTER DmaAdapter, + IN PMDL Mdl, + IN PVOID MapRegisterBase, + IN PVOID CurrentVa, + IN ULONG Length, + IN BOOLEAN WriteToDevice) { - PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; - FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers; - ASSERT(FlushAdapterBuffers); - return FlushAdapterBuffers(DmaAdapter, - Mdl, - MapRegisterBase, - CurrentVa, - Length, - WriteToDevice); + PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; + FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers; + ASSERT(FlushAdapterBuffers); + return FlushAdapterBuffers(DmaAdapter, + Mdl, + MapRegisterBase, + CurrentVa, + Length, + WriteToDevice); } FORCEINLINE VOID NTAPI IoFreeAdapterChannel( - IN PDMA_ADAPTER DmaAdapter) + IN PDMA_ADAPTER DmaAdapter) { - PFREE_ADAPTER_CHANNEL FreeAdapterChannel; - FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; - ASSERT(FreeAdapterChannel); - FreeAdapterChannel(DmaAdapter); + PFREE_ADAPTER_CHANNEL FreeAdapterChannel; + FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; + ASSERT(FreeAdapterChannel); + FreeAdapterChannel(DmaAdapter); } FORCEINLINE VOID NTAPI IoFreeMapRegisters( - IN PDMA_ADAPTER DmaAdapter, - IN PVOID MapRegisterBase, - IN ULONG NumberOfMapRegisters) + IN PDMA_ADAPTER DmaAdapter, + IN PVOID MapRegisterBase, + IN ULONG NumberOfMapRegisters) { - PFREE_MAP_REGISTERS FreeMapRegisters; - FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters; - ASSERT(FreeMapRegisters); - FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters); + PFREE_MAP_REGISTERS FreeMapRegisters; + FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters; + ASSERT(FreeMapRegisters); + FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters); } FORCEINLINE PHYSICAL_ADDRESS NTAPI IoMapTransfer( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice) + IN PDMA_ADAPTER DmaAdapter, + IN PMDL Mdl, + IN PVOID MapRegisterBase, + IN PVOID CurrentVa, + IN OUT PULONG Length, + IN BOOLEAN WriteToDevice) { - PMAP_TRANSFER MapTransfer; + PMAP_TRANSFER MapTransfer; - MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer; - ASSERT(MapTransfer); - return MapTransfer(DmaAdapter, - Mdl, - MapRegisterBase, - CurrentVa, - Length, - WriteToDevice); + MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer; + ASSERT(MapTransfer); + return MapTransfer(DmaAdapter, + Mdl, + MapRegisterBase, + CurrentVa, + Length, + WriteToDevice); } #endif #if (NTDDI_VERSION >= NTDDI_WIN2K) - NTKERNELAPI VOID NTAPI IoAcquireCancelSpinLock( - OUT PKIRQL Irql); + OUT PKIRQL Irql); NTKERNELAPI NTSTATUS NTAPI IoAcquireRemoveLockEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN PCSTR File, - IN ULONG Line, - IN ULONG RemlockSize); + IN PIO_REMOVE_LOCK RemoveLock, + IN PVOID Tag OPTIONAL, + IN PCSTR File, + IN ULONG Line, + IN ULONG RemlockSize); +#endif + +/* + * NTSTATUS + * IoAcquireRemoveLock( + * IN PIO_REMOVE_LOCK RemoveLock, + * IN OPTIONAL PVOID Tag) + */ +#if DBG +#define IoAcquireRemoveLock(RemoveLock, Tag) \ + IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK)) +#else +#define IoAcquireRemoveLock(RemoveLock, Tag) \ + IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK)) +#endif + +/* + * VOID + * IoAdjustPagingPathCount( + * IN PLONG Count, + * IN BOOLEAN Increment) + */ +#define IoAdjustPagingPathCount(_Count, \ + _Increment) \ +{ \ + if (_Increment) \ + { \ + InterlockedIncrement(_Count); \ + } \ + else \ + { \ + InterlockedDecrement(_Count); \ + } \ +} + +#if (NTDDI_VERSION >= NTDDI_WIN2K) + NTKERNELAPI NTSTATUS NTAPI IoAllocateDriverObjectExtension( - IN PDRIVER_OBJECT DriverObject, - IN PVOID ClientIdentificationAddress, - IN ULONG DriverObjectExtensionSize, - OUT PVOID *DriverObjectExtension); + IN PDRIVER_OBJECT DriverObject, + IN PVOID ClientIdentificationAddress, + IN ULONG DriverObjectExtensionSize, + OUT PVOID *DriverObjectExtension); NTKERNELAPI PVOID NTAPI IoAllocateErrorLogEntry( - IN PVOID IoObject, - IN UCHAR EntrySize); + IN PVOID IoObject, + IN UCHAR EntrySize); NTKERNELAPI PIRP NTAPI IoAllocateIrp( - IN CCHAR StackSize, - IN BOOLEAN ChargeQuota); + IN CCHAR StackSize, + IN BOOLEAN ChargeQuota); NTKERNELAPI PMDL NTAPI IoAllocateMdl( - IN PVOID VirtualAddress OPTIONAL, - IN ULONG Length, - IN BOOLEAN SecondaryBuffer, - IN BOOLEAN ChargeQuota, - IN OUT PIRP Irp OPTIONAL); + IN PVOID VirtualAddress OPTIONAL, + IN ULONG Length, + IN BOOLEAN SecondaryBuffer, + IN BOOLEAN ChargeQuota, + IN OUT PIRP Irp OPTIONAL); NTKERNELAPI PIO_WORKITEM NTAPI IoAllocateWorkItem( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoAttachDevice( - IN PDEVICE_OBJECT SourceDevice, - IN PUNICODE_STRING TargetDevice, - OUT PDEVICE_OBJECT *AttachedDevice); + IN PDEVICE_OBJECT SourceDevice, + IN PUNICODE_STRING TargetDevice, + OUT PDEVICE_OBJECT *AttachedDevice); NTKERNELAPI PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice); + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice); NTKERNELAPI PIRP NTAPI IoBuildAsynchronousFsdRequest( - IN ULONG MajorFunction, - IN PDEVICE_OBJECT DeviceObject, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG Length OPTIONAL, - IN PLARGE_INTEGER StartingOffset OPTIONAL, - IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL); + IN ULONG MajorFunction, + IN PDEVICE_OBJECT DeviceObject, + IN OUT PVOID Buffer OPTIONAL, + IN ULONG Length OPTIONAL, + IN PLARGE_INTEGER StartingOffset OPTIONAL, + IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL); NTKERNELAPI PIRP NTAPI IoBuildDeviceIoControlRequest( - IN ULONG IoControlCode, - IN PDEVICE_OBJECT DeviceObject, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength, - IN BOOLEAN InternalDeviceIoControl, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + IN ULONG IoControlCode, + IN PDEVICE_OBJECT DeviceObject, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN BOOLEAN InternalDeviceIoControl, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock); NTKERNELAPI VOID NTAPI IoBuildPartialMdl( - IN PMDL SourceMdl, - IN OUT PMDL TargetMdl, - IN PVOID VirtualAddress, - IN ULONG Length); + IN PMDL SourceMdl, + IN OUT PMDL TargetMdl, + IN PVOID VirtualAddress, + IN ULONG Length); NTKERNELAPI PIRP NTAPI IoBuildSynchronousFsdRequest( - IN ULONG MajorFunction, - IN PDEVICE_OBJECT DeviceObject, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG Length OPTIONAL, - IN PLARGE_INTEGER StartingOffset OPTIONAL, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + IN ULONG MajorFunction, + IN PDEVICE_OBJECT DeviceObject, + IN OUT PVOID Buffer OPTIONAL, + IN ULONG Length OPTIONAL, + IN PLARGE_INTEGER StartingOffset OPTIONAL, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock); NTKERNELAPI NTSTATUS FASTCALL IofCallDriver( - IN PDEVICE_OBJECT DeviceObject, - IN OUT PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp); #define IoCallDriver IofCallDriver NTKERNELAPI @@ -11863,52 +8837,52 @@ NTKERNELAPI BOOLEAN NTAPI IoCancelIrp( - IN PIRP Irp); + IN PIRP Irp); NTKERNELAPI NTSTATUS NTAPI IoCheckShareAccess( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess, - IN BOOLEAN Update); + IN ACCESS_MASK DesiredAccess, + IN ULONG DesiredShareAccess, + IN OUT PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess, + IN BOOLEAN Update); NTKERNELAPI VOID FASTCALL IofCompleteRequest( - IN PIRP Irp, - IN CCHAR PriorityBoost); + IN PIRP Irp, + IN CCHAR PriorityBoost); NTKERNELAPI NTSTATUS NTAPI IoConnectInterrupt( - OUT PKINTERRUPT *InterruptObject, - IN PKSERVICE_ROUTINE ServiceRoutine, - IN PVOID ServiceContext OPTIONAL, - IN PKSPIN_LOCK SpinLock OPTIONAL, - IN ULONG Vector, - IN KIRQL Irql, - IN KIRQL SynchronizeIrql, - IN KINTERRUPT_MODE InterruptMode, - IN BOOLEAN ShareVector, - IN KAFFINITY ProcessorEnableMask, - IN BOOLEAN FloatingSave); + OUT PKINTERRUPT *InterruptObject, + IN PKSERVICE_ROUTINE ServiceRoutine, + IN PVOID ServiceContext OPTIONAL, + IN PKSPIN_LOCK SpinLock OPTIONAL, + IN ULONG Vector, + IN KIRQL Irql, + IN KIRQL SynchronizeIrql, + IN KINTERRUPT_MODE InterruptMode, + IN BOOLEAN ShareVector, + IN KAFFINITY ProcessorEnableMask, + IN BOOLEAN FloatingSave); NTKERNELAPI NTSTATUS NTAPI IoCreateDevice( - IN PDRIVER_OBJECT DriverObject, - IN ULONG DeviceExtensionSize, - IN PUNICODE_STRING DeviceName OPTIONAL, - IN DEVICE_TYPE DeviceType, - IN ULONG DeviceCharacteristics, - IN BOOLEAN Exclusive, - OUT PDEVICE_OBJECT *DeviceObject); + IN PDRIVER_OBJECT DriverObject, + IN ULONG DeviceExtensionSize, + IN PUNICODE_STRING DeviceName OPTIONAL, + IN DEVICE_TYPE DeviceType, + IN ULONG DeviceCharacteristics, + IN BOOLEAN Exclusive, + OUT PDEVICE_OBJECT *DeviceObject); NTKERNELAPI NTSTATUS @@ -11933,53 +8907,53 @@ NTKERNELAPI PKEVENT NTAPI IoCreateNotificationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle); NTKERNELAPI NTSTATUS NTAPI IoCreateSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName); NTKERNELAPI PKEVENT NTAPI IoCreateSynchronizationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle); NTKERNELAPI NTSTATUS NTAPI IoCreateUnprotectedSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName); NTKERNELAPI VOID NTAPI IoDeleteDevice( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoDeleteSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName); + IN PUNICODE_STRING SymbolicLinkName); NTKERNELAPI VOID NTAPI IoDetachDevice( - IN OUT PDEVICE_OBJECT TargetDevice); + IN OUT PDEVICE_OBJECT TargetDevice); NTKERNELAPI VOID NTAPI IoDisconnectInterrupt( - IN PKINTERRUPT InterruptObject); + IN PKINTERRUPT InterruptObject); NTKERNELAPI VOID @@ -12009,375 +8983,359 @@ NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoGetBootDiskInformation( - IN OUT PBOOTDISK_INFORMATION BootDiskInformation, - IN ULONG Size); + IN OUT PBOOTDISK_INFORMATION BootDiskInformation, + IN ULONG Size); NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaceAlias( - IN PUNICODE_STRING SymbolicLinkName, - IN CONST GUID *AliasInterfaceClassGuid, - OUT PUNICODE_STRING AliasSymbolicLinkName); + IN PUNICODE_STRING SymbolicLinkName, + IN CONST GUID *AliasInterfaceClassGuid, + OUT PUNICODE_STRING AliasSymbolicLinkName); NTKERNELAPI PEPROCESS NTAPI -IoGetCurrentProcess(VOID); +IoGetCurrentProcess( + VOID); NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaces( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList); + IN CONST GUID *InterfaceClassGuid, + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN ULONG Flags, + OUT PWSTR *SymbolicLinkList); NTKERNELAPI NTSTATUS NTAPI IoGetDeviceObjectPointer( - IN PUNICODE_STRING ObjectName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject); + IN PUNICODE_STRING ObjectName, + IN ACCESS_MASK DesiredAccess, + OUT PFILE_OBJECT *FileObject, + OUT PDEVICE_OBJECT *DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoGetDeviceProperty( - IN PDEVICE_OBJECT DeviceObject, - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, - IN ULONG BufferLength, - OUT PVOID PropertyBuffer, - OUT PULONG ResultLength); + IN PDEVICE_OBJECT DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN ULONG BufferLength, + OUT PVOID PropertyBuffer, + OUT PULONG ResultLength); NTKERNELAPI PDMA_ADAPTER NTAPI IoGetDmaAdapter( - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN PDEVICE_DESCRIPTION DeviceDescription, - IN OUT PULONG NumberOfMapRegisters); + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN PDEVICE_DESCRIPTION DeviceDescription, + IN OUT PULONG NumberOfMapRegisters); NTKERNELAPI PVOID NTAPI IoGetDriverObjectExtension( - IN PDRIVER_OBJECT DriverObject, - IN PVOID ClientIdentificationAddress); + IN PDRIVER_OBJECT DriverObject, + IN PVOID ClientIdentificationAddress); NTKERNELAPI PVOID NTAPI -IoGetInitialStack(VOID); +IoGetInitialStack( + VOID); NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject( - IN PFILE_OBJECT FileObject); + IN PFILE_OBJECT FileObject); NTKERNELAPI VOID NTAPI IoQueueWorkItem( - IN PIO_WORKITEM IoWorkItem, - IN PIO_WORKITEM_ROUTINE WorkerRoutine, - IN WORK_QUEUE_TYPE QueueType, - IN PVOID Context OPTIONAL); + IN PIO_WORKITEM IoWorkItem, + IN PIO_WORKITEM_ROUTINE WorkerRoutine, + IN WORK_QUEUE_TYPE QueueType, + IN PVOID Context OPTIONAL); NTKERNELAPI VOID NTAPI IoInitializeIrp( - IN OUT PIRP Irp, - IN USHORT PacketSize, - IN CCHAR StackSize); + IN OUT PIRP Irp, + IN USHORT PacketSize, + IN CCHAR StackSize); NTKERNELAPI VOID NTAPI IoInitializeRemoveLockEx( - IN PIO_REMOVE_LOCK Lock, - IN ULONG AllocateTag, - IN ULONG MaxLockedMinutes, - IN ULONG HighWatermark, - IN ULONG RemlockSize); + IN PIO_REMOVE_LOCK Lock, + IN ULONG AllocateTag, + IN ULONG MaxLockedMinutes, + IN ULONG HighWatermark, + IN ULONG RemlockSize); NTKERNELAPI NTSTATUS NTAPI IoInitializeTimer( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_TIMER_ROUTINE TimerRoutine, - IN PVOID Context OPTIONAL); + IN PDEVICE_OBJECT DeviceObject, + IN PIO_TIMER_ROUTINE TimerRoutine, + IN PVOID Context OPTIONAL); NTKERNELAPI VOID NTAPI IoInvalidateDeviceRelations( - IN PDEVICE_OBJECT DeviceObject, - IN DEVICE_RELATION_TYPE Type); + IN PDEVICE_OBJECT DeviceObject, + IN DEVICE_RELATION_TYPE Type); NTKERNELAPI VOID NTAPI IoInvalidateDeviceState( - IN PDEVICE_OBJECT PhysicalDeviceObject); + IN PDEVICE_OBJECT PhysicalDeviceObject); NTKERNELAPI BOOLEAN NTAPI IoIsWdmVersionAvailable( - IN UCHAR MajorVersion, - IN UCHAR MinorVersion); + IN UCHAR MajorVersion, + IN UCHAR MinorVersion); NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceInterfaceRegistryKey( - IN PUNICODE_STRING SymbolicLinkName, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE DeviceInterfaceKey); + IN PUNICODE_STRING SymbolicLinkName, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE DeviceInterfaceKey); NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceRegistryKey( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG DevInstKeyType, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE DevInstRegKey); + IN PDEVICE_OBJECT DeviceObject, + IN ULONG DevInstKeyType, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE DevInstRegKey); NTKERNELAPI NTSTATUS NTAPI IoRegisterDeviceInterface( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN CONST GUID *InterfaceClassGuid, - IN PUNICODE_STRING ReferenceString OPTIONAL, - OUT PUNICODE_STRING SymbolicLinkName); + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN CONST GUID *InterfaceClassGuid, + IN PUNICODE_STRING ReferenceString OPTIONAL, + OUT PUNICODE_STRING SymbolicLinkName); NTKERNELAPI NTSTATUS NTAPI IoRegisterPlugPlayNotification( - IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, - IN ULONG EventCategoryFlags, - IN PVOID EventCategoryData OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, - IN OUT PVOID Context OPTIONAL, - OUT PVOID *NotificationEntry); + IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, + IN ULONG EventCategoryFlags, + IN PVOID EventCategoryData OPTIONAL, + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, + IN OUT PVOID Context OPTIONAL, + OUT PVOID *NotificationEntry); NTKERNELAPI NTSTATUS NTAPI IoRegisterShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI VOID NTAPI IoReleaseCancelSpinLock( - IN KIRQL Irql); + IN KIRQL Irql); NTKERNELAPI VOID NTAPI IoReleaseRemoveLockAndWaitEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN ULONG RemlockSize); + IN PIO_REMOVE_LOCK RemoveLock, + IN PVOID Tag OPTIONAL, + IN ULONG RemlockSize); NTKERNELAPI VOID NTAPI IoReleaseRemoveLockEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN ULONG RemlockSize); + IN PIO_REMOVE_LOCK RemoveLock, + IN PVOID Tag OPTIONAL, + IN ULONG RemlockSize); NTKERNELAPI VOID NTAPI IoRemoveShareAccess( - IN PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess); + IN PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess); NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChange( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PVOID NotificationStructure); + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PVOID NotificationStructure); NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChangeAsynchronous( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PVOID NotificationStructure, - IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL, - IN PVOID Context OPTIONAL); + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PVOID NotificationStructure, + IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL, + IN PVOID Context OPTIONAL); NTKERNELAPI VOID NTAPI IoRequestDeviceEject( - IN PDEVICE_OBJECT PhysicalDeviceObject); + IN PDEVICE_OBJECT PhysicalDeviceObject); NTKERNELAPI VOID NTAPI IoReuseIrp( - IN OUT PIRP Irp, - IN NTSTATUS Status); + IN OUT PIRP Irp, + IN NTSTATUS Status); NTKERNELAPI NTSTATUS NTAPI IoSetDeviceInterfaceState( - IN PUNICODE_STRING SymbolicLinkName, - IN BOOLEAN Enable); + IN PUNICODE_STRING SymbolicLinkName, + IN BOOLEAN Enable); NTKERNELAPI VOID NTAPI IoSetShareAccess( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - OUT PSHARE_ACCESS ShareAccess); + IN ACCESS_MASK DesiredAccess, + IN ULONG DesiredShareAccess, + IN OUT PFILE_OBJECT FileObject, + OUT PSHARE_ACCESS ShareAccess); NTKERNELAPI VOID NTAPI IoStartNextPacket( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN Cancelable); + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN Cancelable); NTKERNELAPI VOID NTAPI IoStartNextPacketByKey( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN Cancelable, - IN ULONG Key); + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN Cancelable, + IN ULONG Key); NTKERNELAPI VOID NTAPI IoStartPacket( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PULONG Key OPTIONAL, - IN PDRIVER_CANCEL CancelFunction OPTIONAL); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PULONG Key OPTIONAL, + IN PDRIVER_CANCEL CancelFunction OPTIONAL); NTKERNELAPI VOID NTAPI IoStartTimer( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI VOID NTAPI IoStopTimer( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoUnregisterPlugPlayNotification( - IN PVOID NotificationEntry); + IN PVOID NotificationEntry); NTKERNELAPI VOID NTAPI IoUnregisterShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); NTKERNELAPI VOID NTAPI IoUpdateShareAccess( - IN PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess); + IN PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess); NTKERNELAPI NTSTATUS NTAPI IoWMIAllocateInstanceIds( - IN GUID *Guid, - IN ULONG InstanceCount, - OUT ULONG *FirstInstanceId); + IN GUID *Guid, + IN ULONG InstanceCount, + OUT ULONG *FirstInstanceId); NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstanceMultiple( - IN PVOID *DataBlockObjectList, - IN PUNICODE_STRING InstanceNames, - IN ULONG ObjectCount, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + IN PVOID *DataBlockObjectList, + IN PUNICODE_STRING InstanceNames, + IN ULONG ObjectCount, + IN OUT ULONG *InOutBufferSize, + OUT PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIRegistrationControl( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG Action); + IN PDEVICE_OBJECT DeviceObject, + IN ULONG Action); NTKERNELAPI NTSTATUS NTAPI IoWMISuggestInstanceName( - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN PUNICODE_STRING SymbolicLinkName OPTIONAL, - IN BOOLEAN CombineNames, - OUT PUNICODE_STRING SuggestedInstanceName); + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN PUNICODE_STRING SymbolicLinkName OPTIONAL, + IN BOOLEAN CombineNames, + OUT PUNICODE_STRING SuggestedInstanceName); NTKERNELAPI NTSTATUS NTAPI IoWMIWriteEvent( - IN OUT PVOID WnodeEventItem); + IN PVOID WnodeEventItem); NTKERNELAPI VOID NTAPI IoWriteErrorLogEntry( - IN PVOID ElEntry); - -NTKERNELAPI -PIRP -NTAPI -IoGetTopLevelIrp(VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -IoRegisterLastChanceShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); - -NTKERNELAPI -VOID -NTAPI -IoSetTopLevelIrp( - IN PIRP Irp OPTIONAL); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + IN PVOID ElEntry); +#endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -12412,15 +9370,15 @@ NTKERNELAPI PIRP NTAPI IoCsqRemoveNextIrp( - IN PIO_CSQ Csq, - IN PVOID PeekContext OPTIONAL); + IN PIO_CSQ Csq, + IN PVOID PeekContext); NTKERNELAPI BOOLEAN NTAPI IoForwardIrpSynchronously( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); #define IoForwardAndCatchIrp IoForwardIrpSynchronously @@ -12428,347 +9386,119 @@ NTKERNELAPI VOID NTAPI IoFreeErrorLogEntry( - PVOID ElEntry); + PVOID ElEntry); NTKERNELAPI NTSTATUS NTAPI IoSetCompletionRoutineEx( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PIO_COMPLETION_ROUTINE CompletionRoutine, - IN PVOID Context, - IN BOOLEAN InvokeOnSuccess, - IN BOOLEAN InvokeOnError, - IN BOOLEAN InvokeOnCancel); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PIO_COMPLETION_ROUTINE CompletionRoutine, + IN PVOID Context, + IN BOOLEAN InvokeOnSuccess, + IN BOOLEAN InvokeOnError, + IN BOOLEAN InvokeOnCancel); VOID NTAPI IoSetStartIoAttributes( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN DeferredStartIo, - IN BOOLEAN NonCancelable); + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN DeferredStartIo, + IN BOOLEAN NonCancelable); NTKERNELAPI NTSTATUS NTAPI IoWMIDeviceObjectToInstanceName( - IN PVOID DataBlockObject, - IN PDEVICE_OBJECT DeviceObject, - OUT PUNICODE_STRING InstanceName); + IN PVOID DataBlockObject, + IN PDEVICE_OBJECT DeviceObject, + OUT PUNICODE_STRING InstanceName); NTKERNELAPI NTSTATUS NTAPI IoWMIExecuteMethod( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG MethodId, - IN ULONG InBufferSize, - IN OUT PULONG OutBufferSize, - IN OUT PUCHAR InOutBuffer); + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG MethodId, + IN ULONG InBufferSize, + IN OUT PULONG OutBufferSize, + IN OUT PUCHAR InOutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIHandleToInstanceName( - IN PVOID DataBlockObject, - IN HANDLE FileHandle, - OUT PUNICODE_STRING InstanceName); + IN PVOID DataBlockObject, + IN HANDLE FileHandle, + OUT PUNICODE_STRING InstanceName); NTKERNELAPI NTSTATUS NTAPI IoWMIOpenBlock( - IN GUID *DataBlockGuid, - IN ULONG DesiredAccess, - OUT PVOID *DataBlockObject); + IN GUID *DataBlockGuid, + IN ULONG DesiredAccess, + OUT PVOID *DataBlockObject); NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllData( - IN PVOID DataBlockObject, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + IN PVOID DataBlockObject, + IN OUT ULONG *InOutBufferSize, + OUT PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllDataMultiple( - IN PVOID *DataBlockObjectList, - IN ULONG ObjectCount, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + IN PVOID *DataBlockObjectList, + IN ULONG ObjectCount, + IN OUT ULONG *InOutBufferSize, + OUT PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstance( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN OUT ULONG *InOutBufferSize, + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN OUT ULONG *InOutBufferSize, OUT PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMISetNotificationCallback( - IN OUT PVOID Object, - IN WMI_NOTIFICATION_CALLBACK Callback, - IN PVOID Context OPTIONAL); + IN OUT PVOID Object, + IN WMI_NOTIFICATION_CALLBACK Callback, + IN PVOID Context OPTIONAL); NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleInstance( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG Version, - IN ULONG ValueBufferSize, - IN PVOID ValueBuffer); + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG Version, + IN ULONG ValueBufferSize, + IN PVOID ValueBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleItem( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG DataItemId, - IN ULONG Version, - IN ULONG ValueBufferSize, - IN PVOID ValueBuffer); -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG DataItemId, + IN ULONG Version, + IN ULONG ValueBufferSize, + IN PVOID ValueBuffer); -#if (NTDDI_VERSION >= NTDDI_WINXPSP1) -NTKERNELAPI -NTSTATUS -NTAPI -IoValidateDeviceIoControlAccess( - IN PIRP Irp, - IN ULONG RequiredAccess); #endif -#if (NTDDI_VERSION >= NTDDI_WS03) - -NTKERNELAPI -NTSTATUS -NTAPI -IoCsqInitializeEx( - IN PIO_CSQ Csq, - IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp, - IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, - IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, - IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, - IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, - IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCsqInsertIrpEx( - IN PIO_CSQ Csq, - IN PIRP Irp, - IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL, - IN PVOID InsertContext OPTIONAL); -#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ - - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetBootDiskInformationLite( - OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation); - -NTKERNELAPI -NTSTATUS -NTAPI -IoCheckShareAccessEx( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess, - IN BOOLEAN Update, - IN PBOOLEAN WritePermission); - -NTKERNELAPI -NTSTATUS -NTAPI -IoConnectInterruptEx( - IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters); - -NTKERNELAPI -VOID -NTAPI -IoDisconnectInterruptEx( - IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters); - -LOGICAL -NTAPI -IoWithinStackLimits( - IN ULONG_PTR RegionStart, - IN SIZE_T RegionSize); - -NTKERNELAPI -VOID -NTAPI -IoSetShareAccessEx( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - OUT PSHARE_ACCESS ShareAccess, - IN PBOOLEAN WritePermission); - -ULONG -NTAPI -IoSizeofWorkItem(VOID); - -VOID -NTAPI -IoInitializeWorkItem( - IN PVOID IoObject, - IN PIO_WORKITEM IoWorkItem); - -VOID -NTAPI -IoUninitializeWorkItem( - IN PIO_WORKITEM IoWorkItem); - -VOID -NTAPI -IoQueueWorkItemEx( - IN PIO_WORKITEM IoWorkItem, - IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine, - IN WORK_QUEUE_TYPE QueueType, - IN PVOID Context OPTIONAL); - -IO_PRIORITY_HINT -NTAPI -IoGetIoPriorityHint( - IN PIRP Irp); - -NTSTATUS -NTAPI -IoSetIoPriorityHint( - IN PIRP Irp, - IN IO_PRIORITY_HINT PriorityHint); - -NTSTATUS -NTAPI -IoAllocateSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN ULONG Length, - IN PVOID Signature, - OUT PVOID *StreamIdentifier); - -PVOID -NTAPI -IoGetSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN PVOID Signature); - -NTSTATUS -NTAPI -IoFreeSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN PVOID Signature); - -NTKERNELAPI -NTSTATUS -NTAPI -IoRequestDeviceEjectEx( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL, - IN PVOID Context OPTIONAL, - IN PDRIVER_OBJECT DriverObject OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoSetDevicePropertyData( - IN PDEVICE_OBJECT Pdo, - IN CONST DEVPROPKEY *PropertyKey, - IN LCID Lcid, - IN ULONG Flags, - IN DEVPROPTYPE Type, - IN ULONG Size, - IN PVOID Data OPTIONAL); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDevicePropertyData( - PDEVICE_OBJECT Pdo, - CONST DEVPROPKEY *PropertyKey, - LCID Lcid, - ULONG Flags, - ULONG Size, - PVOID Data, - PULONG RequiredSize, - PDEVPROPTYPE Type); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b) - -#if (NTDDI_VERSION >= NTDDI_WS08) -NTKERNELAPI -NTSTATUS -NTAPI -IoReplacePartitionUnit( - IN PDEVICE_OBJECT TargetPdo, - IN PDEVICE_OBJECT SparePdo, - IN ULONG Flags); -#endif - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetAffinityInterrupt( - IN PKINTERRUPT InterruptObject, - OUT PGROUP_AFFINITY GroupAffinity); - -NTSTATUS -NTAPI -IoGetContainerInformation( - IN IO_CONTAINER_INFORMATION_CLASS InformationClass, - IN PVOID ContainerObject OPTIONAL, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG BufferLength); - -NTSTATUS -NTAPI -IoRegisterContainerNotification( - IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass, - IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction, - IN PVOID NotificationInformation OPTIONAL, - IN ULONG NotificationInformationLength, - OUT PVOID CallbackRegistration); - -VOID -NTAPI -IoUnregisterContainerNotification( - IN PVOID CallbackRegistration); - -NTKERNELAPI -NTSTATUS -NTAPI -IoUnregisterPlugPlayNotificationEx( - IN PVOID NotificationEntry); - -NTKERNELAPI -NTSTATUS -NTAPI -IoGetDeviceNumaNode( - IN PDEVICE_OBJECT Pdo, - OUT PUSHORT NodeNumber); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - #if defined(_WIN64) NTKERNELAPI ULONG @@ -12789,7 +9519,7 @@ IoWMIDeviceObjectToProviderId( FORCEINLINE VOID -IoSkipCurrentIrpStackLocation( +IoSkipCurrentIrpStackLocation ( IN OUT PIRP Irp) { ASSERT(Irp->CurrentLocation <= Irp->StackCount); @@ -12799,7 +9529,7 @@ IoSkipCurrentIrpStackLocation( FORCEINLINE VOID -IoSetNextIrpStackLocation( +IoSetNextIrpStackLocation ( IN OUT PIRP Irp) { ASSERT(Irp->CurrentLocation > 0); @@ -12888,10 +9618,12 @@ IoSetCompletionRoutine( IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) #if defined(_WIN64) + NTKERNELAPI BOOLEAN IoIs32bitProcess( - IN PIRP Irp OPTIONAL); + IN PIRP Irp OPTIONAL); + #endif #define PLUGPLAY_REGKEY_DEVICE 1 @@ -12965,7 +9697,7 @@ IoInitializeDpcRequest( FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext( - IN OUT PIRP Irp) + IN PIRP Irp) { PIO_STACK_LOCATION irpSp; PIO_STACK_LOCATION nextIrpSp; @@ -12979,12 +9711,13 @@ NTKERNELAPI VOID NTAPI IoGetStackLimits( - OUT PULONG_PTR LowLimit, - OUT PULONG_PTR HighLimit); + OUT PULONG_PTR LowLimit, + OUT PULONG_PTR HighLimit); FORCEINLINE ULONG_PTR -IoGetRemainingStackSize(VOID) +IoGetRemainingStackSize( + VOID) { ULONG_PTR End, Begin; ULONG_PTR Result; @@ -12994,19 +9727,6 @@ IoGetRemainingStackSize(VOID) return Result; } -#if (NTDDI_VERSION >= NTDDI_WS03) -VOID -FORCEINLINE -IoInitializeThreadedDpcRequest( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_DPC_ROUTINE DpcRoutine) -{ - KeInitializeThreadedDpc(&DeviceObject->Dpc, - (PKDEFERRED_ROUTINE) DpcRoutine, - DeviceObject ); -} -#endif - /****************************************************************************** * Power Management Support Functions * ******************************************************************************/ @@ -13019,17 +9739,17 @@ NTKERNELAPI NTSTATUS NTAPI PoCallDriver( - IN struct _DEVICE_OBJECT *DeviceObject, - IN OUT struct _IRP *Irp); + IN struct _DEVICE_OBJECT *DeviceObject, + IN OUT struct _IRP *Irp); NTKERNELAPI PULONG NTAPI PoRegisterDeviceForIdleDetection( - IN struct _DEVICE_OBJECT *DeviceObject, - IN ULONG ConservationIdleTime, - IN ULONG PerformanceIdleTime, - IN DEVICE_POWER_STATE State); + IN struct _DEVICE_OBJECT *DeviceObject, + IN ULONG ConservationIdleTime, + IN ULONG PerformanceIdleTime, + IN DEVICE_POWER_STATE State); NTKERNELAPI PVOID @@ -13042,26 +9762,26 @@ NTKERNELAPI NTSTATUS NTAPI PoRequestPowerIrp( - IN struct _DEVICE_OBJECT *DeviceObject, - IN UCHAR MinorFunction, - IN POWER_STATE PowerState, - IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL, - IN PVOID Context OPTIONAL, - OUT struct _IRP **Irp OPTIONAL); + IN struct _DEVICE_OBJECT *DeviceObject, + IN UCHAR MinorFunction, + IN POWER_STATE PowerState, + IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL, + IN PVOID Context OPTIONAL, + OUT struct _IRP **Irp OPTIONAL); NTKERNELAPI POWER_STATE NTAPI PoSetPowerState( - IN struct _DEVICE_OBJECT *DeviceObject, - IN POWER_STATE_TYPE Type, - IN POWER_STATE State); + IN struct _DEVICE_OBJECT *DeviceObject, + IN POWER_STATE_TYPE Type, + IN POWER_STATE State); NTKERNELAPI VOID NTAPI PoSetSystemState( - IN EXECUTION_STATE Flags); + IN EXECUTION_STATE Flags); NTKERNELAPI VOID @@ -13116,15 +9836,16 @@ PoUnregisterPowerSettingCallback( #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_VISTASP1) + NTKERNELAPI VOID NTAPI PoSetDeviceBusyEx( IN OUT PULONG IdlePointer); + #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ #if (NTDDI_VERSION >= NTDDI_WIN7) - NTKERNELAPI VOID NTAPI @@ -13189,64 +9910,19 @@ PoCreatePowerRequest( #define ExInitializeSListHead InitializeSListHead -#if defined(_NTHAL_) && defined(_X86_) - -NTKERNELAPI -VOID -FASTCALL -ExiAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); - -NTKERNELAPI -VOID -FASTCALL -ExiReleaseFastMutex( - IN OUT PFAST_MUTEX FastMutex); - -NTKERNELAPI -BOOLEAN -FASTCALL -ExiTryToAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); - +#if defined(_X86_) +#if defined(_NTHAL_) #define ExAcquireFastMutex ExiAcquireFastMutex #define ExReleaseFastMutex ExiReleaseFastMutex #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex - -#else - -#if (NTDDI_VERSION >= NTDDI_WIN2K) - -NTKERNELAPI -VOID -FASTCALL -ExAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); - -NTKERNELAPI -VOID -FASTCALL -ExReleaseFastMutex( - IN OUT PFAST_MUTEX FastMutex); - -NTKERNELAPI -BOOLEAN -FASTCALL -ExTryToAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - -#endif /* defined(_NTHAL_) && defined(_X86_) */ - -#if defined(_X86_) +#endif #define ExInterlockedAddUlong ExfInterlockedAddUlong #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList #define ExInterlockedInsertTailList ExfInterlockedInsertTailList #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList #define ExInterlockedPopEntryList ExfInterlockedPopEntryList #define ExInterlockedPushEntryList ExfInterlockedPushEntryList -#endif /* defined(_X86_) */ +#endif #if defined(_WIN64) @@ -13260,25 +9936,25 @@ FORCEINLINE USHORT ExQueryDepthSList(IN PSLIST_HEADER ListHead) { - return (USHORT)(ListHead->Alignment & 0xffff); + return (USHORT)(ListHead->Alignment & 0xffff); } #endif NTKERNELAPI PSLIST_ENTRY ExpInterlockedFlushSList( - PSLIST_HEADER ListHead); + PSLIST_HEADER ListHead); NTKERNELAPI PSLIST_ENTRY ExpInterlockedPopEntrySList( - PSLIST_HEADER ListHead); + PSLIST_HEADER ListHead); NTKERNELAPI PSLIST_ENTRY ExpInterlockedPushEntrySList( - PSLIST_HEADER ListHead, - PSLIST_ENTRY ListEntry); + PSLIST_HEADER ListHead, + PSLIST_ENTRY ListEntry); #define ExInterlockedFlushSList(Head) \ ExpInterlockedFlushSList(Head) @@ -13287,7 +9963,7 @@ ExpInterlockedPushEntrySList( #define ExInterlockedPushEntrySList(Head, Entry, Lock) \ ExpInterlockedPushEntrySList(Head, Entry) -#else /* !defined(_WIN64) */ +#else // !defined(_WIN64) #define ExQueryDepthSList(listhead) (listhead)->Depth @@ -13295,90 +9971,37 @@ NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedFlushSList( - IN OUT PSLIST_HEADER ListHead); - -#endif /* !defined(_WIN64) */ + IN PSLIST_HEADER ListHead); #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) - NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPopEntrySList( - IN PSLIST_HEADER ListHead, - IN PKSPIN_LOCK Lock); + IN PSLIST_HEADER ListHead, + IN PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSINGLE_LIST_ENTRY ListEntry, - IN PKSPIN_LOCK Lock); - -NTKERNELAPI -PVOID -NTAPI -ExAllocateFromPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside); - -NTKERNELAPI -VOID -NTAPI -ExFreeToPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry); - -#else /* !_WIN2K_COMPAT_SLIST_USAGE */ - -#if !defined(_WIN64) + IN PSLIST_HEADER ListHead, + IN PSINGLE_LIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock); +#else #define ExInterlockedPopEntrySList(_ListHead, _Lock) \ InterlockedPopEntrySList(_ListHead) #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \ InterlockedPushEntrySList(_ListHead, _ListEntry) -#endif - -static __inline -PVOID -ExAllocateFromPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside) -{ - PVOID Entry; - - Lookaside->L.TotalAllocates++; - Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); - if (Entry == NULL) { - Lookaside->L.AllocateMisses++; - Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, - Lookaside->L.Size, - Lookaside->L.Tag); - } - return Entry; -} - -static __inline -VOID -ExFreeToPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) -{ - Lookaside->L.TotalFrees++; - if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { - Lookaside->L.FreeMisses++; - (Lookaside->L.Free)(Entry); - } else { - InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); - } -} - -#endif /* _WIN2K_COMPAT_SLIST_USAGE */ +#endif // _WIN2K_COMPAT_SLIST_USAGE +#endif // !defined(_WIN64) /* ERESOURCE_THREAD * ExGetCurrentResourceThread( * VOID); */ -#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread()) +#define ExGetCurrentResourceThread() ((ERESOURCE_THREAD)PsGetCurrentThread()) #define ExReleaseResource(R) (ExReleaseResourceLite(R)) @@ -13409,193 +10032,220 @@ ExInitializeFastMutex( #if (NTDDI_VERSION >= NTDDI_WIN2K) +NTKERNELAPI +VOID +FASTCALL +ExAcquireFastMutex( + IN OUT PFAST_MUTEX FastMutex); + +NTKERNELAPI +VOID +FASTCALL +ExReleaseFastMutex( + IN OUT PFAST_MUTEX FastMutex); + +NTKERNELAPI +BOOLEAN +FASTCALL +ExTryToAcquireFastMutex( + IN OUT PFAST_MUTEX FastMutex); + NTKERNELAPI VOID FASTCALL ExAcquireFastMutexUnsafe( - IN OUT PFAST_MUTEX FastMutex); + IN OUT PFAST_MUTEX FastMutex); NTKERNELAPI VOID FASTCALL ExReleaseFastMutexUnsafe( - IN OUT PFAST_MUTEX FastMutex); + IN OUT PFAST_MUTEX FastMutex); NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceExclusiveLite( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + IN PERESOURCE Resource, + IN BOOLEAN Wait); NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceSharedLite( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + IN PERESOURCE Resource, + IN BOOLEAN Wait); NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedStarveExclusive( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + IN PERESOURCE Resource, + IN BOOLEAN Wait); NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedWaitForExclusive( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + IN PERESOURCE Resource, + IN BOOLEAN Wait); NTKERNELAPI PVOID NTAPI ExAllocatePool( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes); + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes); + +#ifdef POOL_TAGGING +#define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD') +#endif /* POOL_TAGGING */ NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuota( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes); + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes); + +#ifdef POOL_TAGGING +#define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD') +#endif /* POOL_TAGGING */ NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuotaTag( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag); #ifndef POOL_TAGGING #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b) -#endif +#endif /* POOL_TAGGING */ NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTag( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); - -#ifndef POOL_TAGGING -#define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b) -#endif + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag); NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTagPriority( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag, - IN EX_POOL_PRIORITY Priority); + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag, + IN EX_POOL_PRIORITY Priority); NTKERNELAPI VOID NTAPI ExConvertExclusiveToSharedLite( - IN OUT PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI NTSTATUS NTAPI ExCreateCallback( - OUT PCALLBACK_OBJECT *CallbackObject, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN BOOLEAN Create, - IN BOOLEAN AllowMultipleCallbacks); + OUT PCALLBACK_OBJECT *CallbackObject, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN Create, + IN BOOLEAN AllowMultipleCallbacks); NTKERNELAPI VOID NTAPI ExDeleteNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside); + IN PNPAGED_LOOKASIDE_LIST Lookaside); NTKERNELAPI VOID NTAPI ExDeletePagedLookasideList( - IN PPAGED_LOOKASIDE_LIST Lookaside); + IN PPAGED_LOOKASIDE_LIST Lookaside); NTKERNELAPI NTSTATUS NTAPI ExDeleteResourceLite( - IN OUT PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI VOID NTAPI ExFreePool( - IN PVOID P); + IN PVOID P); + +#ifdef POOL_TAGGING +#define ExFreePool(P) ExFreePoolWithTag(P, 0) +#endif NTKERNELAPI VOID NTAPI ExFreePoolWithTag( - IN PVOID P, - IN ULONG Tag); + IN PVOID P, + IN ULONG Tag); NTKERNELAPI ULONG NTAPI ExGetExclusiveWaiterCount( - IN PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI KPROCESSOR_MODE NTAPI -ExGetPreviousMode(VOID); +ExGetPreviousMode( + VOID); NTKERNELAPI ULONG NTAPI ExGetSharedWaiterCount( - IN PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI VOID NTAPI ExInitializeNPagedLookasideList( - IN PNPAGED_LOOKASIDE_LIST Lookaside, - IN PALLOCATE_FUNCTION Allocate OPTIONAL, - IN PFREE_FUNCTION Free OPTIONAL, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + IN PNPAGED_LOOKASIDE_LIST Lookaside, + IN PALLOCATE_FUNCTION Allocate OPTIONAL, + IN PFREE_FUNCTION Free OPTIONAL, + IN ULONG Flags, + IN SIZE_T Size, + IN ULONG Tag, + IN USHORT Depth); NTKERNELAPI VOID NTAPI ExInitializePagedLookasideList( - IN PPAGED_LOOKASIDE_LIST Lookaside, - IN PALLOCATE_FUNCTION Allocate OPTIONAL, - IN PFREE_FUNCTION Free OPTIONAL, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PALLOCATE_FUNCTION Allocate OPTIONAL, + IN PFREE_FUNCTION Free OPTIONAL, + IN ULONG Flags, + IN SIZE_T Size, + IN ULONG Tag, + IN USHORT Depth); NTKERNELAPI NTSTATUS NTAPI ExInitializeResourceLite( - OUT PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI LARGE_INTEGER NTAPI ExInterlockedAddLargeInteger( - IN PLARGE_INTEGER Addend, - IN LARGE_INTEGER Increment, - IN PKSPIN_LOCK Lock); + IN PLARGE_INTEGER Addend, + IN LARGE_INTEGER Increment, + IN PKSPIN_LOCK Lock); #if defined(_WIN64) #define ExInterlockedAddLargeStatistic(Addend, Increment) \ @@ -13609,96 +10259,89 @@ NTKERNELAPI ULONG FASTCALL ExInterlockedAddUlong( - IN PULONG Addend, - IN ULONG Increment, - IN OUT PKSPIN_LOCK Lock); + IN PULONG Addend, + IN ULONG Increment, + PKSPIN_LOCK Lock); #if defined(_AMD64_) || defined(_IA64_) - #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand)) - #elif defined(_X86_) - NTKERNELAPI LONGLONG FASTCALL ExfInterlockedCompareExchange64( - IN OUT LONGLONG volatile *Destination, - IN PLONGLONG Exchange, - IN PLONGLONG Comperand); - + IN OUT LONGLONG volatile *Destination, + IN PLONGLONG Exchange, + IN PLONGLONG Comperand); #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ ExfInterlockedCompareExchange64(Destination, Exchange, Comperand) - #else - NTKERNELAPI LONGLONG FASTCALL ExInterlockedCompareExchange64( - IN OUT LONGLONG volatile *Destination, - IN PLONGLONG Exchange, - IN PLONGLONG Comparand, - IN PKSPIN_LOCK Lock); - -#endif /* defined(_AMD64_) || defined(_IA64_) */ + IN OUT LONGLONG volatile *Destination, + IN PLONGLONG Exchange, + IN PLONGLONG Comparand, + IN PKSPIN_LOCK Lock); +#endif NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedInsertHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock); NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedInsertTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPopEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead, - IN OUT PKSPIN_LOCK Lock); + IN PSINGLE_LIST_ENTRY ListHead, + IN PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPushEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead, - IN OUT PSINGLE_LIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + IN PSINGLE_LIST_ENTRY ListHead, + IN PSINGLE_LIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock); NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedRemoveHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PKSPIN_LOCK Lock); + IN PLIST_ENTRY ListHead, + IN PKSPIN_LOCK Lock); NTKERNELAPI BOOLEAN NTAPI ExIsProcessorFeaturePresent( - IN ULONG ProcessorFeature); + IN ULONG ProcessorFeature); NTKERNELAPI BOOLEAN NTAPI ExIsResourceAcquiredExclusiveLite( - IN PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI ULONG NTAPI ExIsResourceAcquiredSharedLite( - IN PERESOURCE Resource); + IN PERESOURCE Resource); #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite @@ -13706,368 +10349,243 @@ NTKERNELAPI VOID NTAPI ExLocalTimeToSystemTime( - IN PLARGE_INTEGER LocalTime, - OUT PLARGE_INTEGER SystemTime); + IN PLARGE_INTEGER LocalTime, + OUT PLARGE_INTEGER SystemTime); NTKERNELAPI VOID NTAPI ExNotifyCallback( - IN PCALLBACK_OBJECT CallbackObject, - IN PVOID Argument1 OPTIONAL, - IN PVOID Argument2 OPTIONAL); + IN PCALLBACK_OBJECT CallbackObject, + IN PVOID Argument1, + IN PVOID Argument2); NTKERNELAPI VOID NTAPI ExQueueWorkItem( - IN OUT PWORK_QUEUE_ITEM WorkItem, - IN WORK_QUEUE_TYPE QueueType); + IN PWORK_QUEUE_ITEM WorkItem, + IN WORK_QUEUE_TYPE QueueType); NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseStatus( - IN NTSTATUS Status); + IN NTSTATUS Status); NTKERNELAPI PVOID NTAPI ExRegisterCallback( - IN PCALLBACK_OBJECT CallbackObject, - IN PCALLBACK_FUNCTION CallbackFunction, - IN PVOID CallbackContext OPTIONAL); + IN PCALLBACK_OBJECT CallbackObject, + IN PCALLBACK_FUNCTION CallbackFunction, + IN PVOID CallbackContext); NTKERNELAPI NTSTATUS NTAPI ExReinitializeResourceLite( - IN OUT PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI VOID NTAPI ExReleaseResourceForThreadLite( - IN OUT PERESOURCE Resource, - IN ERESOURCE_THREAD ResourceThreadId); + IN PERESOURCE Resource, + IN ERESOURCE_THREAD ResourceThreadId); NTKERNELAPI VOID FASTCALL ExReleaseResourceLite( - IN OUT PERESOURCE Resource); + IN PERESOURCE Resource); NTKERNELAPI VOID NTAPI ExSetResourceOwnerPointer( - IN OUT PERESOURCE Resource, - IN PVOID OwnerPointer); + IN PERESOURCE Resource, + IN PVOID OwnerPointer); NTKERNELAPI ULONG NTAPI ExSetTimerResolution( - IN ULONG DesiredTime, - IN BOOLEAN SetResolution); + IN ULONG DesiredTime, + IN BOOLEAN SetResolution); NTKERNELAPI VOID NTAPI ExSystemTimeToLocalTime( - IN PLARGE_INTEGER SystemTime, - OUT PLARGE_INTEGER LocalTime); + IN PLARGE_INTEGER SystemTime, + OUT PLARGE_INTEGER LocalTime); NTKERNELAPI VOID NTAPI ExUnregisterCallback( - IN OUT PVOID CbRegistration); + IN PVOID CbRegistration); -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ + +#endif // (NTDDI_VERSION >= NTDDI_WIN2K) #if (NTDDI_VERSION >= NTDDI_WINXP) - NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + IN OUT PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExInitializeRundownProtection( - OUT PEX_RUNDOWN_REF RunRef); + OUT PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExReInitializeRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + OUT PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + IN OUT PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExRundownCompleted( - OUT PEX_RUNDOWN_REF RunRef); + OUT PEX_RUNDOWN_REF RunRef); NTKERNELAPI BOOLEAN NTAPI ExVerifySuite( - IN SUITE_TYPE SuiteType); + IN SUITE_TYPE SuiteType); NTKERNELAPI VOID FASTCALL ExWaitForRundownProtectionRelease( - IN OUT PEX_RUNDOWN_REF RunRef); + IN OUT PEX_RUNDOWN_REF RunRef); -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ +#endif // (NTDDI_VERSION >= NTDDI_WINXP) #if (NTDDI_VERSION >= NTDDI_WINXPSP2) - NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionEx( - IN OUT PEX_RUNDOWN_REF RunRef, - IN ULONG Count); + IN OUT PEX_RUNDOWN_REF RunRef, + IN ULONG Count); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionEx( - IN OUT PEX_RUNDOWN_REF RunRef, - IN ULONG Count); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ + IN OUT PEX_RUNDOWN_REF RunRef, + IN ULONG Count); +#endif // (NTDDI_VERSION >= NTDDI_WINXPSP2) #if (NTDDI_VERSION >= NTDDI_WS03SP1) - NTKERNELAPI PEX_RUNDOWN_REF_CACHE_AWARE NTAPI ExAllocateCacheAwareRundownProtection( - IN POOL_TYPE PoolType, - IN ULONG PoolTag); + IN POOL_TYPE PoolType, + IN ULONG PoolTag); NTKERNELAPI SIZE_T NTAPI ExSizeOfRundownProtectionCacheAware(VOID); - -NTKERNELAPI -PVOID -NTAPI -ExEnterCriticalRegionAndAcquireResourceShared( - IN OUT PERESOURCE Resource); - -NTKERNELAPI -PVOID -NTAPI -ExEnterCriticalRegionAndAcquireResourceExclusive( - IN OUT PERESOURCE Resource); - -NTKERNELAPI -PVOID -NTAPI -ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( - IN OUT PERESOURCE Resource); - -NTKERNELAPI -VOID -FASTCALL -ExReleaseResourceAndLeaveCriticalRegion( - IN OUT PERESOURCE Resource); - -NTKERNELAPI -VOID -NTAPI -ExInitializeRundownProtectionCacheAware( - OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, - IN SIZE_T RunRefSize); - -NTKERNELAPI -VOID -NTAPI -ExFreeCacheAwareRundownProtection( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); - -NTKERNELAPI -BOOLEAN -FASTCALL -ExAcquireRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); - -NTKERNELAPI -VOID -FASTCALL -ExReleaseRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); - -NTKERNELAPI -BOOLEAN -FASTCALL -ExAcquireRundownProtectionCacheAwareEx( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, - IN ULONG Count); - -NTKERNELAPI -VOID -FASTCALL -ExReleaseRundownProtectionCacheAwareEx( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef, - IN ULONG Count); - -NTKERNELAPI -VOID -FASTCALL -ExWaitForRundownProtectionReleaseCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef); - -NTKERNELAPI -VOID -FASTCALL -ExReInitializeRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); - -NTKERNELAPI -VOID -FASTCALL -ExRundownCompletedCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); - -#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ +#endif // (NTDDI_VERSION >= NTDDI_WS03SP1) #if (NTDDI_VERSION >= NTDDI_VISTA) - NTKERNELAPI NTSTATUS NTAPI ExInitializeLookasideListEx( - OUT PLOOKASIDE_LIST_EX Lookaside, - IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL, - IN PFREE_FUNCTION_EX Free OPTIONAL, - IN POOL_TYPE PoolType, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + OUT PLOOKASIDE_LIST_EX Lookaside, + IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL, + IN PFREE_FUNCTION_EX Free OPTIONAL, + IN POOL_TYPE PoolType, + IN ULONG Flags, + IN SIZE_T Size, + IN ULONG Tag, + IN USHORT Depth); +#endif -NTKERNELAPI -VOID -NTAPI -ExDeleteLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside); - -NTKERNELAPI -VOID -NTAPI -ExFlushLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside); - -FORCEINLINE -PVOID -ExAllocateFromLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside) -{ - PVOID Entry; - - Lookaside->L.TotalAllocates += 1; - Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); - if (Entry == NULL) { - Lookaside->L.AllocateMisses += 1; - Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type, - Lookaside->L.Size, - Lookaside->L.Tag, - Lookaside); - } - return Entry; -} - -FORCEINLINE -VOID -ExFreeToLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside, - IN PVOID Entry) -{ - Lookaside->L.TotalFrees += 1; - if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { - Lookaside->L.FreeMisses += 1; - (Lookaside->L.FreeEx)(Entry, Lookaside); - } else { - InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); - } - return; -} - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTKERNELAPI -VOID -NTAPI -ExSetResourceOwnerPointerEx( - IN OUT PERESOURCE Resource, - IN PVOID OwnerPointer, - IN ULONG Flags); - -#define FLAG_OWNER_POINTER_IS_THREAD 0x1 - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +#if !defined(MIDL_PASS) static __inline PVOID ExAllocateFromNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside) + IN PNPAGED_LOOKASIDE_LIST Lookaside) { - PVOID Entry; + PVOID Entry; - Lookaside->L.TotalAllocates++; -#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) - Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, - &Lookaside->Lock__ObsoleteButDoNotDelete); -#else - Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); -#endif - if (Entry == NULL) { - Lookaside->L.AllocateMisses++; - Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, - Lookaside->L.Size, - Lookaside->L.Tag); - } - return Entry; + Lookaside->L.TotalAllocates++; + Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); + if (Entry == NULL) { + Lookaside->L.AllocateMisses++; + Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } + return Entry; +} + +static __inline PVOID +ExAllocateFromPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside) +{ + PVOID Entry; + + Lookaside->L.TotalAllocates++; + Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); + if (Entry == NULL) { + Lookaside->L.AllocateMisses++; + Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } + return Entry; } static __inline VOID ExFreeToNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) + IN PNPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry) { - Lookaside->L.TotalFrees++; - if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { - Lookaside->L.FreeMisses++; - (Lookaside->L.Free)(Entry); - } else { -#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) - ExInterlockedPushEntrySList(&Lookaside->L.ListHead, - (PSLIST_ENTRY)Entry, - &Lookaside->Lock__ObsoleteButDoNotDelete); -#else - InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); -#endif - } + Lookaside->L.TotalFrees++; + if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.FreeMisses++; + (Lookaside->L.Free)(Entry); + } else { + InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); + } } +static __inline VOID +ExFreeToPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry) +{ + Lookaside->L.TotalFrees++; + if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.FreeMisses++; + (Lookaside->L.Free)(Entry); + } else { + InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); + } +} + +#endif // !defined(MIDL_PASS) /****************************************************************************** * Object Manager Functions * @@ -14112,7 +10630,7 @@ NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByPointer( - IN PVOID Object, + IN PVOID Object, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType OPTIONAL, IN KPROCESSOR_MODE AccessMode); @@ -14126,99 +10644,10 @@ ObReleaseObjectSecurity( #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ -#if (NTDDI_VERSION >= NTDDI_VISTA) -NTKERNELAPI -VOID -NTAPI -ObDereferenceObjectDeferDelete( - IN PVOID Object); -#endif - -#if (NTDDI_VERSION >= NTDDI_VISTASP1) -NTKERNELAPI -NTSTATUS -NTAPI -ObRegisterCallbacks( - IN POB_CALLBACK_REGISTRATION CallbackRegistration, - OUT PVOID *RegistrationHandle); - -NTKERNELAPI -VOID -NTAPI -ObUnRegisterCallbacks( - IN PVOID RegistrationHandle); - -NTKERNELAPI -USHORT -NTAPI -ObGetFilterVersion(VOID); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) - -NTKERNELAPI -NTSTATUS -NTAPI -ObReferenceObjectByHandleWithTag( - IN HANDLE Handle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Tag, - OUT PVOID *Object, - OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); - -NTKERNELAPI -LONG_PTR -FASTCALL -ObfReferenceObjectWithTag( - IN PVOID Object, - IN ULONG Tag); - -NTKERNELAPI -NTSTATUS -NTAPI -ObReferenceObjectByPointerWithTag( - IN PVOID Object, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Tag); - -NTKERNELAPI -LONG_PTR -FASTCALL -ObfDereferenceObjectWithTag( - IN PVOID Object, - IN ULONG Tag); - -NTKERNELAPI -VOID -NTAPI -ObDereferenceObjectDeferDeleteWithTag( - IN PVOID Object, - IN ULONG Tag); - -#define ObDereferenceObject ObfDereferenceObject -#define ObReferenceObject ObfReferenceObject -#define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag -#define ObReferenceObjectWithTag ObfReferenceObjectWithTag - -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - - /****************************************************************************** * Process Manager Functions * ******************************************************************************/ -NTKERNELAPI -NTSTATUS -NTAPI -PsWrapApcWow64Thread( - IN OUT PVOID *ApcContext, - IN OUT PVOID *ApcRoutine); - /* * PEPROCESS * PsGetCurrentProcess(VOID) @@ -14226,16 +10655,19 @@ PsWrapApcWow64Thread( #define PsGetCurrentProcess IoGetCurrentProcess #if !defined(_PSGETCURRENTTHREAD_) + #define _PSGETCURRENTTHREAD_ + FORCEINLINE PETHREAD NTAPI -PsGetCurrentThread(VOID) +PsGetCurrentThread ( + VOID) { return (PETHREAD)KeGetCurrentThread(); } -#endif /* !_PSGETCURRENTTHREAD_ */ +#endif #if (NTDDI_VERSION >= NTDDI_WIN2K) @@ -14243,40 +10675,41 @@ NTKERNELAPI NTSTATUS NTAPI PsCreateSystemThread( - OUT PHANDLE ThreadHandle, - IN ULONG DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN HANDLE ProcessHandle OPTIONAL, - OUT PCLIENT_ID ClientId OPTIONAL, - IN PKSTART_ROUTINE StartRoutine, - IN PVOID StartContext OPTIONAL); + OUT PHANDLE ThreadHandle, + IN ULONG DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN HANDLE ProcessHandle OPTIONAL, + OUT PCLIENT_ID ClientId OPTIONAL, + IN PKSTART_ROUTINE StartRoutine, + IN PVOID StartContext OPTIONAL); NTKERNELAPI NTSTATUS NTAPI PsTerminateSystemThread( - IN NTSTATUS ExitStatus); + IN NTSTATUS ExitStatus); - -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +#endif /****************************************************************************** * WMI Library Support Functions * ******************************************************************************/ #ifdef RUN_WPP + #if (NTDDI_VERSION >= NTDDI_WINXP) NTKERNELAPI NTSTATUS -__cdecl +DDKCDECLAPI WmiTraceMessage( - IN TRACEHANDLE LoggerHandle, - IN ULONG MessageFlags, - IN LPGUID MessageGuid, - IN USHORT MessageNumber, + IN TRACEHANDLE LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, IN ...); #endif -#endif /* RUN_WPP */ + +#endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -14284,167 +10717,82 @@ NTKERNELAPI NTSTATUS NTAPI WmiQueryTraceInformation( - IN TRACE_INFORMATION_CLASS TraceInformationClass, - OUT PVOID TraceInformation, - IN ULONG TraceInformationLength, - OUT PULONG RequiredLength OPTIONAL, - IN PVOID Buffer OPTIONAL); + IN TRACE_INFORMATION_CLASS TraceInformationClass, + OUT PVOID TraceInformation, + IN ULONG TraceInformationLength, + OUT PULONG RequiredLength OPTIONAL, + IN PVOID Buffer OPTIONAL); #if 0 /* FIXME: Get va_list from where? */ NTKERNELAPI NTSTATUS -__cdecl +DDKCDECLAPI WmiTraceMessageVa( - IN TRACEHANDLE LoggerHandle, - IN ULONG MessageFlags, - IN LPGUID MessageGuid, - IN USHORT MessageNumber, - IN va_list MessageArgList); + IN TRACEHANDLE LoggerHandle, + IN ULONG MessageFlags, + IN LPGUID MessageGuid, + IN USHORT MessageNumber, + IN va_list MessageArgList); #endif -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#ifndef TRACE_INFORMATION_CLASS_DEFINE - -#if (NTDDI_VERSION >= NTDDI_WINXP) -NTKERNELAPI -NTSTATUS -NTAPI -WmiQueryTraceInformation( - IN TRACE_INFORMATION_CLASS TraceInformationClass, - OUT PVOID TraceInformation, - IN ULONG TraceInformationLength, - OUT PULONG RequiredLength OPTIONAL, - IN PVOID Buffer OPTIONAL); #endif -#define TRACE_INFORMATION_CLASS_DEFINE - -#endif /* TRACE_INFOPRMATION_CLASS_DEFINE */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTSTATUS -NTKERNELAPI -NTAPI -EtwRegister( - IN LPCGUID ProviderId, - IN PETWENABLECALLBACK EnableCallback OPTIONAL, - IN PVOID CallbackContext OPTIONAL, - OUT PREGHANDLE RegHandle); - -NTSTATUS -NTKERNELAPI -NTAPI -EtwUnregister( - IN REGHANDLE RegHandle); - -BOOLEAN -NTKERNELAPI -NTAPI -EtwEventEnabled( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor); - -BOOLEAN -NTKERNELAPI -NTAPI -EtwProviderEnabled( - IN REGHANDLE RegHandle, - IN UCHAR Level, - IN ULONGLONG Keyword); - -NTSTATUS -NTKERNELAPI -NTAPI -EtwActivityIdControl( - IN ULONG ControlCode, - IN OUT LPGUID ActivityId); - -NTSTATUS -NTKERNELAPI -NTAPI -EtwWrite( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN LPCGUID ActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); - -NTSTATUS -NTKERNELAPI -NTAPI -EtwWriteTransfer( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN LPCGUID ActivityId OPTIONAL, - IN LPCGUID RelatedActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); - -NTSTATUS -NTKERNELAPI -NTAPI -EtwWriteString( - IN REGHANDLE RegHandle, - IN UCHAR Level, - IN ULONGLONG Keyword, - IN LPCGUID ActivityId OPTIONAL, - IN PCWSTR String); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#if (NTDDI_VERSION >= NTDDI_WIN7) -NTSTATUS -NTKERNELAPI -NTAPI -EtwWriteEx( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN ULONG64 Filter, - IN ULONG Flags, - IN LPCGUID ActivityId OPTIONAL, - IN LPCGUID RelatedActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); -#endif - - - /****************************************************************************** * Kernel Debugger Functions * ******************************************************************************/ #ifndef _DBGNT_ - ULONG -__cdecl +DDKCDECLAPI DbgPrint( - IN PCSTR Format, - IN ...); - -#if (NTDDI_VERSION >= NTDDI_WIN2K) -NTSYSAPI -ULONG -__cdecl -DbgPrintReturnControlC( - IN PCCH Format, + IN PCSTR Format, IN ...); #endif -#if (NTDDI_VERSION >= NTDDI_WINXP) +#if DBG -NTSYSAPI -ULONG -__cdecl -DbgPrintEx( - IN ULONG ComponentId, - IN ULONG Level, - IN PCSTR Format, - IN ...); +#define KdPrint(_x_) DbgPrint _x_ +#define KdPrintEx(_x_) DbgPrintEx _x_ +#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_ +#define KdBreakPoint() DbgBreakPoint() +#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) + +#else /* !DBG */ + +#define KdPrint(_x_) +#define KdPrintEx(_x_) +#define vKdPrintExWithPrefix(_x_) +#define KdBreakPoint() +#define KdBreakPointWithStatus(s) + +#endif /* !DBG */ + +#if defined(__GNUC__) + +extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; +extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent + +#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) + +extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; +extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent + +#else + +extern BOOLEAN KdDebuggerNotPresent; +extern BOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent + +#endif #ifdef _VA_LIST_DEFINED +#if (NTDDI_VERSION >= NTDDI_WINXP) NTSYSAPI ULONG @@ -14465,120 +10813,84 @@ vDbgPrintExWithPrefix( IN PCCH Format, IN va_list ap); -#endif /* _VA_LIST_DEFINED */ - -NTSYSAPI -NTSTATUS -NTAPI -DbgQueryDebugFilterState( - IN ULONG ComponentId, - IN ULONG Level); - -NTSYSAPI -NTSTATUS -NTAPI -DbgSetDebugFilterState( - IN ULONG ComponentId, - IN ULONG Level, - IN BOOLEAN State); - -#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -typedef VOID -(*PDEBUG_PRINT_CALLBACK)( - IN PSTRING Output, - IN ULONG ComponentId, - IN ULONG Level); - -NTSYSAPI -NTSTATUS -NTAPI -DbgSetDebugPrintCallback( - IN PDEBUG_PRINT_CALLBACK DebugPrintCallback, - IN BOOLEAN Enable); - -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - -#endif /* _DBGNT_ */ - -#if DBG - -#define KdPrint(_x_) DbgPrint _x_ -#define KdPrintEx(_x_) DbgPrintEx _x_ -#define vKdPrintEx(_x_) vDbgPrintEx _x_ -#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_ -#define KdBreakPoint() DbgBreakPoint() -#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) - -#else /* !DBG */ - -#define KdPrint(_x_) -#define KdPrintEx(_x_) -#define vKdPrintEx(_x_) -#define vKdPrintExWithPrefix(_x_) -#define KdBreakPoint() -#define KdBreakPointWithStatus(s) - -#endif /* !DBG */ - -#if defined(__GNUC__) - -extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; -extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; -#define KD_DEBUGGER_ENABLED KdDebuggerEnabled -#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent - -#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) - -extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; -extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; -#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled -#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent - -#else - -extern BOOLEAN KdDebuggerNotPresent; -extern BOOLEAN KdDebuggerEnabled; -#define KD_DEBUGGER_ENABLED KdDebuggerEnabled -#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent - #endif +#endif // _VA_LIST_DEFINED #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI NTSTATUS NTAPI -KdDisableDebugger(VOID); +KdDisableDebugger( + VOID); NTKERNELAPI NTSTATUS NTAPI -KdEnableDebugger(VOID); +KdEnableDebugger( + VOID); #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK) #define DbgBreakPoint __debugbreak #else VOID NTAPI -DbgBreakPoint(VOID); +DbgBreakPoint( + VOID); #endif NTSYSAPI VOID NTAPI DbgBreakPointWithStatus( - IN ULONG Status); + IN ULONG Status); -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +NTSYSAPI +ULONG +DDKCDECLAPI +DbgPrintReturnControlC( + IN PCCH Format, + IN ...); + +#endif + +#if (NTDDI_VERSION >= NTDDI_WINXP) + +NTSYSAPI +ULONG +DDKCDECLAPI +DbgPrintEx( + IN ULONG ComponentId, + IN ULONG Level, + IN PCSTR Format, + IN ...); + +NTSYSAPI +NTSTATUS +NTAPI +DbgQueryDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level); + +NTSYSAPI +NTSTATUS +NTAPI +DbgSetDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level, + IN BOOLEAN State); + +#endif #if (NTDDI_VERSION >= NTDDI_WS03) + NTKERNELAPI BOOLEAN NTAPI -KdRefreshDebuggerNotPresent(VOID); +KdRefreshDebuggerNotPresent( + VOID +); + #endif #if (NTDDI_VERSION >= NTDDI_WS03SP1) @@ -14593,20 +10905,16 @@ KdChangeOption( OUT PVOID OutBuffer, OUT PULONG OutBufferNeeded OPTIONAL); #endif -/* Hardware Abstraction Layer Functions */ - -#if (NTDDI_VERSION >= NTDDI_WIN2K) #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) - FORCEINLINE PVOID NTAPI HalAllocateCommonBuffer( IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled) + IN ULONG Length, + OUT PPHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled) { PALLOCATE_COMMON_BUFFER allocateCommonBuffer; PVOID commonBuffer; @@ -14622,10 +10930,10 @@ VOID NTAPI HalFreeCommonBuffer( IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled) + IN ULONG Length, + IN PHYSICAL_ADDRESS LogicalAddress, + IN PVOID VirtualAddress, + IN BOOLEAN CacheEnabled) { PFREE_COMMON_BUFFER freeCommonBuffer; @@ -14649,224 +10957,14 @@ HalReadDmaCounter( return counter; } -FORCEINLINE -ULONG -HalGetDmaAlignment( - IN PDMA_ADAPTER DmaAdapter) -{ - PGET_DMA_ALIGNMENT getDmaAlignment; - ULONG alignment; +#endif - getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment; - ASSERT( getDmaAlignment != NULL ); - alignment = getDmaAlignment( DmaAdapter ); - return alignment; -} - -#endif /* USE_DMA_MACROS ... */ -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #ifndef _NTTMAPI_ #define _NTTMAPI_ #include -#define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001) -#define TRANSACTIONMANAGER_SET_INFORMATION (0x0002) -#define TRANSACTIONMANAGER_RECOVER (0x0004) -#define TRANSACTIONMANAGER_RENAME (0x0008) -#define TRANSACTIONMANAGER_CREATE_RM (0x0010) -#define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020) - -#define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ - TRANSACTIONMANAGER_QUERY_INFORMATION) - -#define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ - TRANSACTIONMANAGER_SET_INFORMATION |\ - TRANSACTIONMANAGER_RECOVER |\ - TRANSACTIONMANAGER_RENAME |\ - TRANSACTIONMANAGER_CREATE_RM) - -#define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE) - -#define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ - TRANSACTIONMANAGER_GENERIC_READ |\ - TRANSACTIONMANAGER_GENERIC_WRITE |\ - TRANSACTIONMANAGER_GENERIC_EXECUTE |\ - TRANSACTIONMANAGER_BIND_TRANSACTION) - -#define TRANSACTION_QUERY_INFORMATION (0x0001) -#define TRANSACTION_SET_INFORMATION (0x0002) -#define TRANSACTION_ENLIST (0x0004) -#define TRANSACTION_COMMIT (0x0008) -#define TRANSACTION_ROLLBACK (0x0010) -#define TRANSACTION_PROPAGATE (0x0020) -#define TRANSACTION_RIGHT_RESERVED1 (0x0040) - -#define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\ - TRANSACTION_QUERY_INFORMATION |\ - SYNCHRONIZE) - -#define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ - TRANSACTION_SET_INFORMATION |\ - TRANSACTION_COMMIT |\ - TRANSACTION_ENLIST |\ - TRANSACTION_ROLLBACK |\ - TRANSACTION_PROPAGATE |\ - SYNCHRONIZE) - -#define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ - TRANSACTION_COMMIT |\ - TRANSACTION_ROLLBACK |\ - SYNCHRONIZE) - -#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ - TRANSACTION_GENERIC_READ |\ - TRANSACTION_GENERIC_WRITE |\ - TRANSACTION_GENERIC_EXECUTE) - -#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\ - STANDARD_RIGHTS_WRITE |\ - TRANSACTION_SET_INFORMATION |\ - TRANSACTION_ENLIST |\ - TRANSACTION_ROLLBACK |\ - TRANSACTION_PROPAGATE |\ - SYNCHRONIZE) - -#define RESOURCEMANAGER_QUERY_INFORMATION (0x0001) -#define RESOURCEMANAGER_SET_INFORMATION (0x0002) -#define RESOURCEMANAGER_RECOVER (0x0004) -#define RESOURCEMANAGER_ENLIST (0x0008) -#define RESOURCEMANAGER_GET_NOTIFICATION (0x0010) -#define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020) -#define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040) - -#define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ - RESOURCEMANAGER_QUERY_INFORMATION |\ - SYNCHRONIZE) - -#define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ - RESOURCEMANAGER_SET_INFORMATION |\ - RESOURCEMANAGER_RECOVER |\ - RESOURCEMANAGER_ENLIST |\ - RESOURCEMANAGER_GET_NOTIFICATION |\ - RESOURCEMANAGER_REGISTER_PROTOCOL |\ - RESOURCEMANAGER_COMPLETE_PROPAGATION |\ - SYNCHRONIZE) - -#define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ - RESOURCEMANAGER_RECOVER |\ - RESOURCEMANAGER_ENLIST |\ - RESOURCEMANAGER_GET_NOTIFICATION |\ - RESOURCEMANAGER_COMPLETE_PROPAGATION |\ - SYNCHRONIZE) - -#define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ - RESOURCEMANAGER_GENERIC_READ |\ - RESOURCEMANAGER_GENERIC_WRITE |\ - RESOURCEMANAGER_GENERIC_EXECUTE) - -#define ENLISTMENT_QUERY_INFORMATION (0x0001) -#define ENLISTMENT_SET_INFORMATION (0x0002) -#define ENLISTMENT_RECOVER (0x0004) -#define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008) -#define ENLISTMENT_SUPERIOR_RIGHTS (0x0010) - -#define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\ - ENLISTMENT_QUERY_INFORMATION) - -#define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ - ENLISTMENT_SET_INFORMATION |\ - ENLISTMENT_RECOVER |\ - ENLISTMENT_SUBORDINATE_RIGHTS |\ - ENLISTMENT_SUPERIOR_RIGHTS) - -#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ - ENLISTMENT_RECOVER |\ - ENLISTMENT_SUBORDINATE_RIGHTS |\ - ENLISTMENT_SUPERIOR_RIGHTS) - -#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ - ENLISTMENT_GENERIC_READ |\ - ENLISTMENT_GENERIC_WRITE |\ - ENLISTMENT_GENERIC_EXECUTE) - -typedef enum _TRANSACTION_OUTCOME { - TransactionOutcomeUndetermined = 1, - TransactionOutcomeCommitted, - TransactionOutcomeAborted, -} TRANSACTION_OUTCOME; - - -typedef enum _TRANSACTION_STATE { - TransactionStateNormal = 1, - TransactionStateIndoubt, - TransactionStateCommittedNotify, -} TRANSACTION_STATE; - - -typedef struct _TRANSACTION_BASIC_INFORMATION { - GUID TransactionId; - ULONG State; - ULONG Outcome; -} TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION; - -typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION { - GUID TmIdentity; - LARGE_INTEGER VirtualClock; -} TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION; - -typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { - GUID LogIdentity; -} TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION; - -typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { - ULONG LogPathLength; - WCHAR LogPath[1]; -} TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION; - -typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { - ULONGLONG LastRecoveredLsn; -} TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION; - -typedef struct _TRANSACTION_PROPERTIES_INFORMATION { - ULONG IsolationLevel; - ULONG IsolationFlags; - LARGE_INTEGER Timeout; - ULONG Outcome; - ULONG DescriptionLength; - WCHAR Description[1]; -} TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION; - -typedef struct _TRANSACTION_BIND_INFORMATION { - HANDLE TmHandle; -} TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION; - -typedef struct _TRANSACTION_ENLISTMENT_PAIR { - GUID EnlistmentId; - GUID ResourceManagerId; -} TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR; - -typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION { - ULONG NumberOfEnlistments; - TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1]; -} TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION; - -typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION { - TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair; -} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION; - -typedef struct _RESOURCEMANAGER_BASIC_INFORMATION { - GUID ResourceManagerId; - ULONG DescriptionLength; - WCHAR Description[1]; -} RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION; - -typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION { - HANDLE IoCompletionPortHandle; - ULONG_PTR CompletionKey; -} RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION; - typedef enum _KTMOBJECT_TYPE { KTMOBJECT_TRANSACTION, KTMOBJECT_TRANSACTION_MANAGER, @@ -14900,480 +10998,66 @@ typedef enum _RESOURCEMANAGER_INFORMATION_CLASS { ResourceManagerCompletionInformation, } RESOURCEMANAGER_INFORMATION_CLASS; -typedef struct _ENLISTMENT_BASIC_INFORMATION { - GUID EnlistmentId; - GUID TransactionId; - GUID ResourceManagerId; -} ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION; - -typedef struct _ENLISTMENT_CRM_INFORMATION { - GUID CrmTransactionManagerId; - GUID CrmResourceManagerId; - GUID CrmEnlistmentId; -} ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION; - typedef enum _ENLISTMENT_INFORMATION_CLASS { EnlistmentBasicInformation, EnlistmentRecoveryInformation, EnlistmentCrmInformation } ENLISTMENT_INFORMATION_CLASS; -typedef struct _TRANSACTION_LIST_ENTRY { -#if defined(__cplusplus) - ::UOW UOW; -#else - UOW UOW; -#endif -} TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY; - -typedef struct _TRANSACTION_LIST_INFORMATION { - ULONG NumberOfTransactions; - TRANSACTION_LIST_ENTRY TransactionInformation[1]; -} TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION; - -typedef NTSTATUS -(NTAPI *PFN_NT_CREATE_TRANSACTION)( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG IsolationLevel OPTIONAL, - IN ULONG IsolationFlags OPTIONAL, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); - -typedef NTSTATUS -(NTAPI *PFN_NT_OPEN_TRANSACTION)( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL); - -typedef NTSTATUS -(NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - OUT PVOID TransactionInformation, - IN ULONG TransactionInformationLength, - OUT PULONG ReturnLength OPTIONAL); - -typedef NTSTATUS -(NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - IN PVOID TransactionInformation, - IN ULONG TransactionInformationLength); - -typedef NTSTATUS -(NTAPI *PFN_NT_COMMIT_TRANSACTION)( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); - -typedef NTSTATUS -(NTAPI *PFN_NT_ROLLBACK_TRANSACTION)( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); - -#if (NTDDI_VERSION >= NTDDI_VISTA) - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCreateTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG CommitStrength OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtOpenTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN LPGUID TmIdentity OPTIONAL, - IN ULONG OpenOptions OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRenameTransactionManager( - IN PUNICODE_STRING LogFileName, - IN LPGUID ExistingTransactionManagerGuid); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRollforwardTransactionManager( - IN HANDLE TransactionManagerHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRecoverTransactionManager( - IN HANDLE TransactionManagerHandle); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtQueryInformationTransactionManager( - IN HANDLE TransactionManagerHandle, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - OUT PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength, - OUT PULONG ReturnLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtSetInformationTransactionManager( - IN HANDLE TmHandle OPTIONAL, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - IN PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtEnumerateTransactionObject( - IN HANDLE RootObjectHandle OPTIONAL, - IN KTMOBJECT_TYPE QueryType, - IN OUT PKTMOBJECT_CURSOR ObjectCursor, - IN ULONG ObjectCursorLength, - OUT PULONG ReturnLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCreateTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG IsolationLevel OPTIONAL, - IN ULONG IsolationFlags OPTIONAL, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtOpenTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN LPGUID Uow, - IN HANDLE TmHandle OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtQueryInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - OUT PVOID TransactionInformation, - IN ULONG TransactionInformationLength, - OUT PULONG ReturnLength OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtSetInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - IN PVOID TransactionInformation, - IN ULONG TransactionInformationLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCommitTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRollbackTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCreateEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE ResourceManagerHandle, - IN HANDLE TransactionHandle, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN NOTIFICATION_MASK NotificationMask, - IN PVOID EnlistmentKey OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtOpenEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE ResourceManagerHandle, - IN LPGUID EnlistmentGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtQueryInformationEnlistment( - IN HANDLE EnlistmentHandle, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - OUT PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength, - OUT PULONG ReturnLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtSetInformationEnlistment( - IN HANDLE EnlistmentHandle OPTIONAL, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - IN PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRecoverEnlistment( - IN HANDLE EnlistmentHandle, - IN PVOID EnlistmentKey OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPrePrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCommitEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRollbackEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPrePrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCommitComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtReadOnlyEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRollbackComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtSinglePhaseReject( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtCreateResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID RmGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtOpenResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID ResourceManagerGuid OPTIONAL, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRecoverResourceManager( - IN HANDLE ResourceManagerHandle); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtGetNotificationResourceManager( - IN HANDLE ResourceManagerHandle, - OUT PTRANSACTION_NOTIFICATION TransactionNotification, - IN ULONG NotificationLength, - IN PLARGE_INTEGER Timeout OPTIONAL, - OUT PULONG ReturnLength OPTIONAL, - IN ULONG Asynchronous, - IN ULONG_PTR AsynchronousContext OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtQueryInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - OUT PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength, - OUT PULONG ReturnLength OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtSetInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - IN PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtRegisterProtocolAddressInformation( - IN HANDLE ResourceManager, - IN PCRM_PROTOCOL_ID ProtocolId, - IN ULONG ProtocolInformationSize, - IN PVOID ProtocolInformation, - IN ULONG CreateOptions OPTIONAL); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPropagationComplete( - IN HANDLE ResourceManagerHandle, - IN ULONG RequestCookie, - IN ULONG BufferLength, - IN PVOID Buffer); - -NTSYSCALLAPI -NTSTATUS -NTAPI -NtPropagationFailed( - IN HANDLE ResourceManagerHandle, - IN ULONG RequestCookie, - IN NTSTATUS PropStatus); - -#endif /* NTDDI_VERSION >= NTDDI_VISTA */ - #endif /* !_NTTMAPI_ */ /****************************************************************************** * ZwXxx Functions * ******************************************************************************/ - /* Constants */ #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) #define ZwCurrentProcess() NtCurrentProcess() #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) #define ZwCurrentThread() NtCurrentThread() - - #if (NTDDI_VERSION >= NTDDI_WIN2K) - - NTSYSAPI NTSTATUS NTAPI ZwClose( - IN HANDLE Handle); + IN HANDLE Handle); NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject( - OUT PHANDLE DirectoryHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); NTSYSAPI NTSTATUS NTAPI ZwCreateFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG CreateDisposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength); + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength); NTSYSAPI NTSTATUS NTAPI ZwCreateKey( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ULONG TitleIndex, - IN PUNICODE_STRING Class OPTIONAL, - IN ULONG CreateOptions, - OUT PULONG Disposition OPTIONAL); + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG TitleIndex, + IN PUNICODE_STRING Class OPTIONAL, + IN ULONG CreateOptions, + OUT PULONG Disposition OPTIONAL); NTSYSAPI NTSTATUS @@ -15397,7 +11081,7 @@ NTSYSAPI NTSTATUS NTAPI ZwDeleteValueKey( - IN HANDLE KeyHandle, + IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName); NTSYSAPI @@ -15426,7 +11110,7 @@ NTSYSAPI NTSTATUS NTAPI ZwFlushKey( - IN HANDLE KeyHandle); + IN HANDLE KeyHandle); NTSYSAPI NTSTATUS @@ -15438,22 +11122,22 @@ NTSYSAPI NTSTATUS NTAPI ZwMakeTemporaryObject( - IN HANDLE Handle); + IN HANDLE Handle); NTSYSAPI NTSTATUS NTAPI ZwMapViewOfSection( - IN HANDLE SectionHandle, - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN ULONG_PTR ZeroBits, - IN SIZE_T CommitSize, - IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, - IN OUT PSIZE_T ViewSize, - IN SECTION_INHERIT InheritDisposition, - IN ULONG AllocationType, - IN ULONG Protect); + IN HANDLE SectionHandle, + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG_PTR ZeroBits, + IN SIZE_T CommitSize, + IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, + IN OUT PSIZE_T ViewSize, + IN SECTION_INHERIT InheritDisposition, + IN ULONG AllocationType, + IN ULONG Protect); NTSYSAPI NTSTATUS @@ -15470,35 +11154,35 @@ NTSYSAPI NTSTATUS NTAPI ZwOpenKey( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); NTSYSAPI NTSTATUS NTAPI ZwOpenSection( - OUT PHANDLE SectionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject( - OUT PHANDLE LinkHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + OUT PHANDLE LinkHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes); NTSYSAPI NTSTATUS NTAPI ZwQueryInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass); NTSYSAPI NTSTATUS @@ -15514,9 +11198,9 @@ NTSYSAPI NTSTATUS NTAPI ZwQuerySymbolicLinkObject( - IN HANDLE LinkHandle, - IN OUT PUNICODE_STRING LinkTarget, - OUT PULONG ReturnedLength OPTIONAL); + IN HANDLE LinkHandle, + IN OUT PUNICODE_STRING LinkTarget, + OUT PULONG ReturnedLength OPTIONAL); NTSYSAPI NTSTATUS @@ -15533,36 +11217,36 @@ NTSYSAPI NTSTATUS NTAPI ZwReadFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL); NTSYSAPI NTSTATUS NTAPI ZwSetInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass); NTSYSAPI NTSTATUS NTAPI ZwSetValueKey( - IN HANDLE KeyHandle, - IN PUNICODE_STRING ValueName, - IN ULONG TitleIndex OPTIONAL, - IN ULONG Type, - IN PVOID Data OPTIONAL, - IN ULONG DataSize); + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName, + IN ULONG TitleIndex OPTIONAL, + IN ULONG Type, + IN PVOID Data OPTIONAL, + IN ULONG DataSize); NTSYSAPI NTSTATUS @@ -15574,22 +11258,22 @@ NTSYSAPI NTSTATUS NTAPI ZwUnmapViewOfSection( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress OPTIONAL); + IN HANDLE ProcessHandle, + IN PVOID BaseAddress OPTIONAL); NTSYSAPI NTSTATUS NTAPI ZwWriteFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL); NTSYSAPI NTSTATUS @@ -15598,11 +11282,10 @@ ZwQueryFullAttributesFile( IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation); +#endif -#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ +#if (NTDDI_VERSION >= NTDDI_WIN2003) - -#if (NTDDI_VERSION >= NTDDI_WS03) NTSYSCALLAPI NTSTATUS NTAPI @@ -15610,6 +11293,7 @@ ZwOpenEvent( OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes); + #endif #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -15936,13 +11620,10 @@ ZwSinglePhaseReject( IN PLARGE_INTEGER TmVirtualClock OPTIONAL); -#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - +#endif #if (NTDDI_VERSION >= NTDDI_WIN7) - - NTSYSAPI NTSTATUS NTAPI @@ -16006,8 +11687,78 @@ ZwSetInformationKey( IN PVOID KeySetInformation, IN ULONG KeySetInformationLength); +#endif + +/****************************************************************************** + * Unsorted * + ******************************************************************************/ + +/* GUID Comparison */ +#ifndef __IID_ALIGNED__ +#define __IID_ALIGNED__ +#ifdef __cplusplus +inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) +{ + return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && + (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) ); +} +#else +#define IsEqualGUIDAligned(guid1, guid2) \ + ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \ + (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) ) +#endif /* __cplusplus */ +#endif /* !__IID_ALIGNED__ */ + +typedef enum { + LT_DONT_CARE, + LT_LOWEST_LATENCY +} LATENCY_TIME; + +#define MAXIMUM_SUSPEND_COUNT MAXCHAR + +#define MAXIMUM_FILENAME_LENGTH 256 + +#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') + +#define OBJECT_TYPE_CREATE (0x0001) +#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +#define DIRECTORY_QUERY (0x0001) +#define DIRECTORY_TRAVERSE (0x0002) +#define DIRECTORY_CREATE_OBJECT (0x0004) +#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) +#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) + +#define EVENT_QUERY_STATE (0x0001) +#define EVENT_MODIFY_STATE (0x0002) +#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) + +#define SEMAPHORE_QUERY_STATE (0x0001) +#define SEMAPHORE_MODIFY_STATE (0x0002) +#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) + +#define SYMBOLIC_LINK_QUERY 0x0001 +#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +#define DUPLICATE_CLOSE_SOURCE 0x00000001 +#define DUPLICATE_SAME_ACCESS 0x00000002 +#define DUPLICATE_SAME_ATTRIBUTES 0x00000004 + +/* Global debug flag */ +extern ULONG NtGlobalFlag; + +/* Service Start Types */ +#define SERVICE_BOOT_START 0x00000000 +#define SERVICE_SYSTEM_START 0x00000001 +#define SERVICE_AUTO_START 0x00000002 +#define SERVICE_DEMAND_START 0x00000003 +#define SERVICE_DISABLED 0x00000004 + +#ifndef _TRACEHANDLE_DEFINED +#define _TRACEHANDLE_DEFINED +typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; +#endif -#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #ifdef __cplusplus diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 67985379372..d4ae1c545f0 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -546,6 +546,17 @@ typedef enum _KAPC_ENVIRONMENT InsertApcEnvironment } KAPC_ENVIRONMENT; +// +// CPU Cache Types +// +typedef enum _PROCESSOR_CACHE_TYPE +{ + CacheUnified, + CacheInstruction, + CacheData, + CacheTrace, +} PROCESSOR_CACHE_TYPE; + // // PRCB DPC Data // @@ -566,6 +577,18 @@ typedef struct _PP_LOOKASIDE_LIST struct _GENERAL_LOOKASIDE *L; } PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST; +// +// CPU Cache Descriptor +// +typedef struct _CACHE_DESCRIPTOR +{ + UCHAR Level; + UCHAR Associativity; + USHORT LineSize; + ULONG Size; + PROCESSOR_CACHE_TYPE Type; +} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR; + // // Architectural Types // diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index ec4b2d33617..38791b31a21 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -1,3 +1,4 @@ + #define PASTE2(x,y) x##y #define PASTE(x,y) PASTE2(x,y) @@ -18,10 +19,6 @@ #define GDI_HANDLE_BUFFER_SIZE 34 #endif -#if defined(_NTDDK_INCLUDED_) || defined(_NTIFS_) -#define PPEB PPEB_RENAMED -#endif - typedef struct STRUCT(_PEB) { BOOLEAN InheritedAddressSpace; @@ -155,7 +152,6 @@ typedef struct STRUCT(_PEB) #endif } STRUCT(PEB), *STRUCT(PPEB); -#undef PPEB #if defined(_WIN64) && !defined(EXPLICIT_32BIT) C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x08); diff --git a/reactos/include/psdk/ktmtypes.h b/reactos/include/psdk/ktmtypes.h index 90b042f3f0b..77cf5782858 100644 --- a/reactos/include/psdk/ktmtypes.h +++ b/reactos/include/psdk/ktmtypes.h @@ -72,10 +72,7 @@ #define MAX_TRANSACTION_DESCRIPTION_LENGTH 64 #define MAX_RESOURCEMANAGER_DESCRIPTION_LENGTH 64 -#ifndef _WDMDDK_ typedef GUID UOW, *PUOW; -#endif - typedef GUID CRM_PROTOCOL_ID, *PCRM_PROTOCOL_ID; typedef ULONG NOTIFICATION_MASK; typedef ULONG SAVEPOINT_ID, *PSAVEPOINT_ID; diff --git a/reactos/include/psdk/ntdef.h b/reactos/include/psdk/ntdef.h index fdc365085b2..a0aae3ec3a3 100644 --- a/reactos/include/psdk/ntdef.h +++ b/reactos/include/psdk/ntdef.h @@ -1,13 +1,15 @@ -#ifndef _NTDEF_ -#define _NTDEF_ +#ifndef _NTDEF_H +#define _NTDEF_H -/* Dependencies */ +// +// Dependencies +// #include #include #include #include -// FIXME: Shouldn't be included! +// FIXME: Should we include these here? #include #include @@ -22,8 +24,11 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! -/* Pseudo Modifiers for Input Parameters */ + +// +// Pseudo Modifiers for Input Parameters +// #ifndef IN #define IN #endif @@ -49,21 +54,29 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #endif -/* Defines the "size" of an any-size array */ +// +// Defines the "size" of an any-size array +// #ifndef ANYSIZE_ARRAY #define ANYSIZE_ARRAY 1 #endif -/* Constant modifier */ +// +// Constant modifier +// #ifndef CONST #define CONST const #endif -/* TRUE/FALSE */ +// +// TRUE/FALSE +// #define FALSE 0 #define TRUE 1 -/* NULL/NULL64 */ +// +// NULL/NULL64 +// #ifndef NULL #ifdef __cplusplus #define NULL 0 @@ -72,8 +85,22 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define NULL ((void *)0) #define NULL64 ((void * POINTER_64)0) #endif -#endif /* NULL */ +#endif // NULL +typedef enum _EVENT_TYPE { + NotificationEvent, + SynchronizationEvent +} EVENT_TYPE; + +typedef enum _TIMER_TYPE { + NotificationTimer, + SynchronizationTimer +} TIMER_TYPE; + +typedef enum _WAIT_TYPE { + WaitAll, + WaitAny +} WAIT_TYPE; // // FIXME @@ -144,27 +171,35 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define ARGUMENT_PRESENT(ArgumentPointer) \ ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL) -/* Returns the base address of a structure from a structure member */ +// +// Returns the base address of a structure from a structure member +// #ifndef CONTAINING_RECORD #define CONTAINING_RECORD(address, type, field) \ ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field)))) #endif -/* Returns the byte offset of the specified structure's member */ +// +// Returns the byte offset of the specified structure's member +// #ifndef __GNUC__ #define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field)) #else #define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field) #endif -/* Returns the type's alignment */ +// +// Returns the type's alignment +// #if defined(_MSC_VER) && (_MSC_VER >= 1300) #define TYPE_ALIGNMENT(t) __alignof(t) #else #define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test ) #endif -/* Calling Conventions */ +// +// Calling Conventions +// #if defined(_M_IX86) #define FASTCALL __fastcall #else @@ -173,13 +208,21 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define NTAPI __stdcall +// +// Used by the DDK exclusively , don't put in drivers +// +#define DDKAPI __stdcall // Use NTAPI instead +#define DDKCDECLAPI __cdecl // Just use __cdecl -/* Import and Export Specifiers */ +// +// Import and Export Specifiers +// -/* Done the same way as in windef.h for now */ +// Done the same way as in windef.h for now #define DECLSPEC_IMPORT __declspec(dllimport) #define DECLSPEC_NORETURN __declspec(noreturn) + #ifndef DECLSPEC_ADDRSAFE #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64)) #define DECLSPEC_ADDRSAFE __declspec(address_safe) @@ -200,7 +243,9 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #endif #endif -/* Inlines */ +// +// Inlines +// #ifndef FORCEINLINE #if (_MSC_VER >= 1200) #define FORCEINLINE __forceinline @@ -227,7 +272,9 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define NTAPI_INLINE #endif -/* Use to specify structure alignment */ +// +// Use to specify structure alignment +// #ifndef DECLSPEC_ALIGN #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) #define DECLSPEC_ALIGN(x) __declspec(align(x)) @@ -238,13 +285,21 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #endif #endif -/* Use to silence unused variable warnings when it is intentional */ + + +// +// Use to silence unused variable warnings when it is intentional +// #define UNREFERENCED_PARAMETER(P) {(P)=(P);} #define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);} #define DBG_UNREFERENCED_PARAMETER(P) #define DBG_UNREFERENCED_LOCAL_VARIABLE(L) -/* min/max helper macros */ + + +// +// min/max helper macros +// #ifndef NOMINMAX #ifndef min @@ -255,17 +310,25 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif -#endif /* NOMINMAX */ +#endif // NOMINMAX -/* Tell windef.h that we have defined some basic types */ + + +// +// Tell windef.h that we have defined some basic types +// #define BASETYPES -/* Void Pointers */ +// +// Void Pointers +// typedef void *PVOID; //typedef void * POINTER_64 PVOID64; typedef PVOID PVOID64; // FIXME! -/* Handle Type */ +// +// Handle Type +// #ifdef STRICT typedef void *HANDLE; #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n @@ -275,7 +338,9 @@ typedef PVOID HANDLE; #endif typedef HANDLE *PHANDLE; -/* Upper-Case Versions of Some Standard C Types */ +// +// Upper-Case Versions of Some Standard C Types +// #ifndef VOID #define VOID void typedef char CHAR; @@ -287,25 +352,47 @@ typedef int INT; #endif typedef double DOUBLE; -/* Unsigned Types */ +// +// Used to store a non-float 8 byte aligned structure +// +typedef struct _QUAD +{ + _ANONYMOUS_UNION union + { + __GNU_EXTENSION __int64 UseThisFieldToCopy; + double DoNotUseThisField; + }; +} QUAD, *PQUAD, UQUAD, *PUQUAD; + + +// +// Unsigned Types +// typedef unsigned char UCHAR, *PUCHAR; typedef unsigned short USHORT, *PUSHORT; typedef unsigned long ULONG, *PULONG; typedef CONST UCHAR *PCUCHAR; typedef CONST USHORT *PCUSHORT; typedef CONST ULONG *PCULONG; + typedef UCHAR FCHAR; typedef USHORT FSHORT; typedef ULONG FLONG; -typedef UCHAR BOOLEAN, *PBOOLEAN; +typedef UCHAR BOOLEAN; +typedef BOOLEAN *PBOOLEAN; + typedef ULONG LOGICAL; typedef ULONG *PLOGICAL; -/* Signed Types */ +// +// Signed Types +// typedef SHORT *PSHORT; typedef LONG *PLONG; + typedef LONG NTSTATUS; typedef NTSTATUS *PNTSTATUS; + typedef signed char SCHAR; typedef SCHAR *PSCHAR; @@ -314,15 +401,22 @@ typedef SCHAR *PSCHAR; typedef LONG HRESULT; #endif -/* 64-bit types */ +// +// 64-bit types +// __GNU_EXTENSION typedef __int64 LONGLONG, *PLONGLONG; __GNU_EXTENSION typedef unsigned __int64 ULONGLONG, *PULONGLONG; typedef ULONGLONG DWORDLONG, *PDWORDLONG; -/* Update Sequence Number */ +// +// Update Sequence Number +// typedef LONGLONG USN; -/* ANSI (Multi-byte Character) types */ + +// +// ANSI (Multi-byte Character) types +// typedef CHAR *PCHAR, *LPCH, *PCH; typedef CONST CHAR *LPCCH, *PCCH; typedef CHAR *NPSTR, *LPSTR, *PSTR; @@ -331,11 +425,15 @@ typedef CONST PSTR *PCZPSTR; typedef CONST CHAR *LPCSTR, *PCSTR; typedef PCSTR *PZPCSTR; -/* Pointer to an Asciiz string */ +// +// Pointer to an Asciiz string +// typedef CHAR *PSZ; typedef CONST char *PCSZ; -/* UNICODE (Wide Character) types */ +// +// UNICODE (Wide Character) types +// typedef wchar_t WCHAR; typedef WCHAR *PWCHAR, *LPWCH, *PWCH; typedef CONST WCHAR *LPCWCH, *PCWCH; @@ -347,27 +445,25 @@ typedef CONST WCHAR *LPCWSTR, *PCWSTR; typedef PCWSTR *PZPCWSTR; typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR; -/* Cardinal Data Types */ +// +// Cardinal Data Types +// typedef char CCHAR, *PCCHAR; typedef short CSHORT, *PCSHORT; typedef ULONG CLONG, *PCLONG; -/* NLS basics (Locale and Language Ids) */ +// +// NLS basics (Locale and Language Ids) +// typedef ULONG LCID; typedef PULONG PLCID; typedef USHORT LANGID; -/* Used to store a non-float 8 byte aligned structure */ -typedef struct _QUAD -{ - _ANONYMOUS_UNION union - { - __GNU_EXTENSION __int64 UseThisFieldToCopy; - double DoNotUseThisField; - } DUMMYUNIONNAME; -} QUAD, *PQUAD, UQUAD, *PUQUAD; -/* Large Integer Unions */ + +// +// Large Integer Unions +// #if defined(MIDL_PASS) typedef struct _LARGE_INTEGER { #else @@ -382,7 +478,7 @@ typedef union _LARGE_INTEGER { ULONG LowPart; LONG HighPart; } u; -#endif /* MIDL_PASS */ +#endif //MIDL_PASS LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; @@ -400,26 +496,40 @@ typedef union _ULARGE_INTEGER { ULONG LowPart; ULONG HighPart; } u; -#endif /* MIDL_PASS */ +#endif //MIDL_PASS ULONGLONG QuadPart; } ULARGE_INTEGER, *PULARGE_INTEGER; -/* Physical Addresses are always treated as 64-bit wide */ +// +// Physical Addresses are always treated as 64-bit wide +// typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; -/* Locally Unique Identifier */ + + +// +// Locally Unique Identifier +// typedef struct _LUID { ULONG LowPart; LONG HighPart; } LUID, *PLUID; -/* Native API Return Value Macros */ + + +// +// Native API Return Value Macros +// #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) -/* String Types */ + + +// +// String Types +// typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; @@ -465,7 +575,9 @@ typedef struct _STRING64 { UNICODE_STRING64, *PUNICODE_STRING64, ANSI_STRING64, *PANSI_STRING64; -/* LangID and NLS */ +// +// LangID and NLS +// #define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p)) #define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff) #define SUBLANGID(lgid) ((USHORT)(lgid) >> 10) @@ -482,7 +594,10 @@ typedef struct _STRING64 { #define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf)) -/* Object Attributes */ + +// +// Object Attributes +// typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; @@ -493,7 +608,9 @@ typedef struct _OBJECT_ATTRIBUTES { } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; -/* Values for the Attributes member */ +// +// Values for the Attributes member +// #define OBJ_INHERIT 0x00000002 #define OBJ_PERMANENT 0x00000010 #define OBJ_EXCLUSIVE 0x00000020 @@ -504,7 +621,9 @@ typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; #define OBJ_FORCE_ACCESS_CHECK 0x00000400 #define OBJ_VALID_ATTRIBUTES 0x000007F2 -/* Helper Macro */ +// +// Helper Macro +// #define InitializeObjectAttributes(p,n,a,r,s) { \ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ (p)->RootDirectory = (r); \ @@ -514,29 +633,22 @@ typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; (p)->SecurityQualityOfService = NULL; \ } -/* Product Types */ + + +// +// Product Types +// typedef enum _NT_PRODUCT_TYPE { NtProductWinNt = 1, NtProductLanManNt, NtProductServer } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE; -typedef enum _EVENT_TYPE { - NotificationEvent, - SynchronizationEvent -} EVENT_TYPE; -typedef enum _TIMER_TYPE { - NotificationTimer, - SynchronizationTimer -} TIMER_TYPE; -typedef enum _WAIT_TYPE { - WaitAll, - WaitAny -} WAIT_TYPE; - -/* Doubly Linked Lists */ +// +// Doubly Linked Lists +// typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; @@ -554,11 +666,14 @@ typedef struct LIST_ENTRY64 ULONGLONG Blink; } LIST_ENTRY64, *PLIST_ENTRY64; -/* Singly Linked Lists */ +// +// Singly Linked Lists +// typedef struct _SINGLE_LIST_ENTRY { struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; + typedef struct _PROCESSOR_NUMBER { USHORT Group; UCHAR Number; @@ -566,19 +681,16 @@ typedef struct _PROCESSOR_NUMBER { } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER; typedef EXCEPTION_DISPOSITION -(NTAPI *PEXCEPTION_ROUTINE)( +(DDKAPI *PEXCEPTION_ROUTINE)( IN struct _EXCEPTION_RECORD *ExceptionRecord, IN PVOID EstablisherFrame, IN OUT struct _CONTEXT *ContextRecord, IN OUT PVOID DispatcherContext); -typedef struct _GROUP_AFFINITY { - KAFFINITY Mask; - USHORT Group; - USHORT Reserved[3]; -} GROUP_AFFINITY, *PGROUP_AFFINITY; -/* Helper Macros */ +// +// Helper Macros +// #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s } #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) @@ -592,7 +704,11 @@ typedef struct _GROUP_AFFINITY { #endif #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) -/* Type Limits */ + + +// +// Type Limits +// #define MINCHAR 0x80 #define MAXCHAR 0x7f #define MINSHORT 0x8000 @@ -604,17 +720,29 @@ typedef struct _GROUP_AFFINITY { #define MAXULONG 0xffffffff #define MAXLONGLONG (0x7fffffffffffffffLL) -/* Multiplication and Shift Operations */ + + +// +// Multiplication and Shift Operations +// #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b)) #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b)) #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b)) #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b)) #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b)) -/* C_ASSERT Definition */ + + +// +// C_ASSERT Definition +// #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] -/* Primary language IDs. */ + + +// +// Primary language IDs. +// #define LANG_NEUTRAL 0x00 #define LANG_INVARIANT 0x7f @@ -745,4 +873,6 @@ typedef struct _GROUP_AFFINITY { #define LANG_YORUBA 0x6a #define LANG_ZULU 0x35 -#endif /* _NTDEF_ */ + + +#endif /* _NTDEF_H */ diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index f856b079970..bd0fac136b9 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -3411,12 +3411,6 @@ typedef LONG struct _EXCEPTION_POINTERS *ExceptionInfo ); -typedef struct _GROUP_AFFINITY { - KAFFINITY Mask; - WORD Group; - WORD Reserved[3]; -} GROUP_AFFINITY, *PGROUP_AFFINITY; - typedef struct _EVENTLOGRECORD { DWORD Length; DWORD Reserved; diff --git a/reactos/ntoskrnl/include/ntoskrnl.h b/reactos/ntoskrnl/include/ntoskrnl.h index 3b56d34afac..f1052ed38df 100644 --- a/reactos/ntoskrnl/include/ntoskrnl.h +++ b/reactos/ntoskrnl/include/ntoskrnl.h @@ -19,6 +19,7 @@ /* DDK/IFS/NDK Headers */ #define _REALLY_GET_CALLERS_CALLER +#define SINGLE_GROUP_LEGACY_API #include #include #include diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 8a9fd4297c3..6a3492415c0 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -48,7 +48,7 @@ MemType[] = "LoaderXIPRom " }; -BOOLEAN Mm64BitPhysicalAddress = FALSE; +PBOOLEAN Mm64BitPhysicalAddress = FALSE; ULONG MmReadClusterSize; // // 0 | 1 is on/off paging, 2 is undocumented