<compilerflag>-mpreferred-stack-boundary=2</compilerflag>
<compilerflag compiler="midl">-m32 --win32</compilerflag>
<compilerflag compiler="cc,cxx">-gstabs+</compilerflag>
+ <compilerflag compiler="cc,cxx">-fno-set-stack-executable</compilerflag>
+ <compilerflag compiler="cc,cxx">-fno-optimize-sibling-calls</compilerflag>
<compilerflag compiler="as">-gstabs+</compilerflag>
</group>
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
+<if property="ARCH" value="i386>
+ <module name="bootcd" type="iso" output="ReactOS.iso">
<bootsector>isoboot</bootsector>
</module>
+</if>
+<ifnot property="ARCH" value="i386>
+ <module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
+ <bootsector>isoboot</bootsector>
+ </module>
+</ifnot>
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
+<if property="ARCH" value="i386>
+ <module name="livecd" type="liveiso" output="ReactOS-LiveCD.iso">
<bootsector>isoboot</bootsector>
</module>
+</if>
+<ifnot property="ARCH" value="i386>
+ <module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
+ <bootsector>isoboot</bootsector>
+ </module>
+</ifnot>
}
VOID
-DDKCDECLAPI
+__cdecl
ScsiDebugPrint(
IN ULONG DebugPrintLevel,
IN PCCHAR DebugMessage,
}
VOID
-DDKAPI
+NTAPI
ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
#undef ScsiPortConvertPhysicalAddressToUlong
ULONG
-DDKAPI
+NTAPI
ScsiPortConvertPhysicalAddressToUlong(
IN SCSI_PHYSICAL_ADDRESS Address)
{
}
SCSI_PHYSICAL_ADDRESS
-DDKAPI
+NTAPI
ScsiPortConvertUlongToPhysicalAddress(
IN ULONG UlongAddress)
{
}
VOID
-DDKAPI
+NTAPI
ScsiPortFlushDma(
IN PVOID DeviceExtension)
{
}
VOID
-DDKAPI
+NTAPI
ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension,
IN PVOID MappedAddress)
}
ULONG
-DDKAPI
+NTAPI
ScsiPortGetBusData(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
}
PVOID
-DDKAPI
+NTAPI
ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
}
PVOID
-DDKAPI
+NTAPI
ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
}
SCSI_PHYSICAL_ADDRESS
-DDKAPI
+NTAPI
ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
}
PSCSI_REQUEST_BLOCK
-DDKAPI
+NTAPI
ScsiPortGetSrb(
IN PVOID DeviceExtension,
IN UCHAR PathId,
}
PVOID
-DDKAPI
+NTAPI
ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
}
PVOID
-DDKAPI
+NTAPI
ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
}
ULONG
-DDKAPI
+NTAPI
ScsiPortInitialize(
IN PVOID Argument1,
IN PVOID Argument2,
}
VOID
-DDKAPI
+NTAPI
ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
}
VOID
-DDKAPI
+NTAPI
ScsiPortLogError(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
}
VOID
-DDKAPI
+NTAPI
ScsiPortMoveMemory(
IN PVOID WriteBuffer,
IN PVOID ReadBuffer,
}
VOID
-DDKCDECLAPI
+__cdecl
ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension,
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadPortBufferUchar(
IN PUCHAR Port,
OUT PUCHAR Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadPortBufferUlong(
IN PULONG Port,
OUT PULONG Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadPortBufferUshort(
IN PUSHORT Port,
OUT PUSHORT Buffer,
}
UCHAR
-DDKAPI
+NTAPI
ScsiPortReadPortUchar(
IN PUCHAR Port)
{
}
ULONG
-DDKAPI
+NTAPI
ScsiPortReadPortUlong(
IN PULONG Port)
{
}
USHORT
-DDKAPI
+NTAPI
ScsiPortReadPortUshort(
IN PUSHORT Port)
{
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
}
UCHAR
-DDKAPI
+NTAPI
ScsiPortReadRegisterUchar(
IN PUCHAR Register)
{
}
ULONG
-DDKAPI
+NTAPI
ScsiPortReadRegisterUlong(
IN PULONG Register)
{
}
USHORT
-DDKAPI
+NTAPI
ScsiPortReadRegisterUshort(
IN PUSHORT Register)
{
}
ULONG
-DDKAPI
+NTAPI
ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
}
VOID
-DDKAPI
+NTAPI
ScsiPortStallExecution(
IN ULONG Delay)
{
}
BOOLEAN
-DDKAPI
+NTAPI
ScsiPortValidateRange(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortUchar(
IN PUCHAR Port,
IN UCHAR Value)
}
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortUlong(
IN PULONG Port,
IN ULONG Value)
}
VOID
-DDKAPI
+NTAPI
ScsiPortWritePortUshort(
IN PUSHORT Port,
IN USHORT Value)
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterUchar(
IN PUCHAR Register,
IN ULONG Value)
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterUlong(
IN PULONG Register,
IN ULONG Value)
}
VOID
-DDKAPI
+NTAPI
ScsiPortWriteRegisterUshort(
IN PUSHORT Register,
IN USHORT Value)
#include "precomp.h"
+#ifndef _MSC_VER
const GUID IID_IKsPropertySet = {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}};
+#endif
class CControlNode : public IUnknown
{
return m_Ref;
}
- CControlNode(HANDLE hFile, ULONG NodeType, ULONG PinId) : m_Ref(0), m_hFile(hFile), m_NodeType(NodeType), m_PinId(PinId){};
+ CControlNode(IKsPropertySet * pProperty, ULONG NodeType, ULONG PinId) : m_Ref(0), m_pKsProperty(pProperty), m_NodeType(NodeType), m_PinId(PinId){};
virtual ~CControlNode(){};
protected:
LONG m_Ref;
- HANDLE m_hFile;
+ IKsPropertySet * m_pKsProperty;
ULONG m_NodeType;
ULONG m_PinId;
};
}
else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
{
- return CBDAFrequencyFilter_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ return CBDAFrequencyFilter_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
}
else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
{
- return CBDASignalStatistics_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ return CBDASignalStatistics_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
}
else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
{
- return CBDALNBInfo_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ return CBDALNBInfo_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
}
else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
{
- return CBDADigitalDemodulator_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ return CBDADigitalDemodulator_fnConstructor(m_pKsProperty, m_NodeType, refiid, Output);
}
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[MAX_PATH];
HRESULT
WINAPI
CControlNode_fnConstructor(
- HANDLE hFile,
IBaseFilter * pFilter,
ULONG NodeType,
ULONG PinId,
WCHAR Buffer[100];
HRESULT hr;
IPin * pPin = NULL;
- IKsObject * pObject = NULL;
+ IKsPropertySet * pProperty;
// store pin id
swprintf(Buffer, L"%u", PinId);
return hr;
}
- // query IKsObject interface
- hr = pPin->QueryInterface(IID_IKsObject, (void**)&pObject);
+ // query for IKsPropertySet interface
+ hr = pPin->QueryInterface(IID_IKsPropertySet, (void**)&pProperty);
+ if (FAILED(hr))
+ return hr;
#ifdef BDAPLGIN_TRACE
swprintf(Buffer, L"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
- if (SUCCEEDED(hr))
- {
- // get pin handle
- hFile = pObject->KsGetObjectHandle();
- // release IKsObject interface
- pObject->Release();
- }
// release IPin interface
pPin->Release();
// construct device control
- CControlNode * handler = new CControlNode(hFile, NodeType, PinId);
+ CControlNode * handler = new CControlNode(pProperty, NodeType, PinId);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CControlNode_fnConstructor\n");
#include "precomp.h"
-const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
-const GUID IID_IAC3Filter = {0xe4539501, 0xc609, 0x46ea, {0xad, 0x2a, 0x0e, 0x97, 0x00, 0x24, 0x56, 0x83}};
-const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
-const GUID IID_IMatrixMixer = {0xafc57835, 0x2fd1, 0x4541, {0xa6, 0xd9, 0x0d, 0xb7, 0x18, 0x56, 0xe5, 0x89}};
-const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
-const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
-const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
-const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
-const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+
+#ifndef _MSC_VER
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+
const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
-const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
const GUID KSMETHODSETID_BdaChangeSync = {0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
+const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
+const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
+const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
+const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
+const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
+
+const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+
+#endif
class CBDADeviceControl : public IBDA_DeviceControl,
public IBDA_Topology
if (FAILED(hr))
return hr;
- hr = CControlNode_fnConstructor(m_Handle, m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
+ hr = CControlNode_fnConstructor(m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
#ifdef BDAPLGIN_TRACE
swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
#include "precomp.h"
+#ifndef _MSC_VER
const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x04, 0xe1, 0xe0}};
const GUID KSPROPSETID_BdaDigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0}};
+#endif
class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
{
HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion);
HRESULT STDMETHODCALLTYPE get_SpectralInversion(SpectralInversion *pSpectralInversion);
- CBDADigitalDemodulator(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ CBDADigitalDemodulator(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
~CBDADigitalDemodulator(){};
protected:
LONG m_Ref;
- HANDLE m_hFile;
+ IKsPropertySet * m_pProperty;
ULONG m_NodeId;
};
swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
+DebugBreak();
#endif
return E_NOINTERFACE;
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
-
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_MODULATION_TYPE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pModulationType, sizeof(ModulationType), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_MODULATION_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pModulationType, sizeof(ModulationType));
+
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_TYPE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_INNER_FEC_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECMethod, sizeof(FECMethod));
+
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
-
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_RATE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_INNER_FEC_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECRate, sizeof(BinaryConvolutionCodeRate));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_TYPE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_OUTER_FEC_TYPE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECMethod, sizeof(FECMethod));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
-
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_RATE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_OUTER_FEC_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pFECRate, sizeof(BinaryConvolutionCodeRate));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_SYMBOL_RATE;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSymbolRate, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_SYMBOL_RATE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pSymbolRate, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
- Node.Property.Id = KSPROPERTY_BDA_SPECTRAL_INVERSION;
- Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSpectralInversion, sizeof(SpectralInversion), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaDigitalDemodulator, KSPROPERTY_BDA_SPECTRAL_INVERSION, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), pSpectralInversion, sizeof(SpectralInversion));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx\n", hr);
OutputDebugStringW(Buffer);
#endif
HRESULT
WINAPI
CBDADigitalDemodulator_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv)
{
// construct device control
- CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile, NodeId);
+ CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");
#include "precomp.h"
+#ifndef _MSC_VER
const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
const GUID KSPROPSETID_BdaFrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+#endif
class CBDAFrequencyFilter : public IBDA_FrequencyFilter
{
HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier);
HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier);
- CBDAFrequencyFilter(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ CBDAFrequencyFilter(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
virtual ~CBDAFrequencyFilter(){};
protected:
LONG m_Ref;
- HANDLE m_hFile;
+ IKsPropertySet * m_pProperty;
ULONG m_NodeId;
};
swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
+DebugBreak();
#endif
return E_NOINTERFACE;
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
-
// setup request
- Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
- Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulFrequency, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulFrequency, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
- Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_POLARITY;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Polarity, sizeof(Polarisation), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_POLARITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Polarity, sizeof(Polarisation));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
- Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_RANGE;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulRange, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_RANGE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulRange, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
- Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_BANDWIDTH;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulBandwidth, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_BANDWIDTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulBandwidth, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
- Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulMultiplier, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulMultiplier, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
HRESULT
WINAPI
CBDAFrequencyFilter_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet* pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv)
{
// construct device control
- CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile, NodeId);
+ CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n");
#include "precomp.h"
+#ifndef _MSC_VER
const GUID IID_IBDA_LNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x08, 0xf4}};
const GUID KSPROPSETID_BdaLNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4}};
+#endif
class CBDALNBInfo : public IBDA_LNBInfo
{
HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency);
HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency);
- CBDALNBInfo(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ CBDALNBInfo(IKsPropertySet *pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
~CBDALNBInfo(){};
protected:
LONG m_Ref;
- HANDLE m_hFile;
+ IKsPropertySet * m_pProperty;
ULONG m_NodeId;
};
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaLNBInfo;
- Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_LOW_BAND;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFLow, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_LOF_LOW_BAND, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulLOFLow, sizeof(LONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaLNBInfo;
- Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_HIGH_BAND;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFHigh, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_LOF_HIGH_BAND, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulLOFHigh, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaLNBInfo;
- Node.Property.Id = KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = m_NodeId;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulSwitchFrequency, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaLNBInfo, KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulSwitchFrequency, sizeof(ULONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
HRESULT
WINAPI
CBDALNBInfo_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet *pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv)
{
// construct device control
- CBDALNBInfo * handler = new CBDALNBInfo(hFile, NodeId);
+ CBDALNBInfo * handler = new CBDALNBInfo(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n");
#include "precomp.h"
-const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+#ifndef _MSC_VER
const GUID KSPROPSETID_BdaPinControl = {0x0ded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}};
+const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+#endif
+
class CBDAPinControl : public IBDA_PinControl
{
HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
- CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin){};
+ CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin, ULONG RegistrationCtx) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin), m_RegistrationCtx(RegistrationCtx){};
virtual ~CBDAPinControl()
{
//m_pConnectedPin->Release();
HANDLE m_Handle;
IBDA_NetworkProvider * m_pProvider;
IPin * m_pConnectedPin;
+ ULONG m_RegistrationCtx;
};
HRESULT
reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef();
return NOERROR;
}
-
-#ifdef BDAPLGIN_TRACE
- WCHAR Buffer[MAX_PATH];
- LPOLESTR lpstr;
- StringFromCLSID(refiid, &lpstr);
- swprintf(Buffer, L"CBDAPinControl::QueryInterface: NoInterface for %s", lpstr);
- OutputDebugStringW(Buffer);
- CoTaskMemFree(lpstr);
-#endif
-
+DebugBreak();
return E_NOINTERFACE;
}
//-------------------------------------------------------------------
CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
{
#ifdef BDAPLGIN_TRACE
- OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n");
+ OutputDebugStringW(L"CBDAPinControl::RegistrationContext\n");
#endif
- return E_NOTIMPL;
+ if (!pulRegistrationCtx)
+ {
+ // invalid argument
+ return E_POINTER;
+ }
+
+ if (m_RegistrationCtx)
+ {
+ // is registered
+ *pulRegistrationCtx = m_RegistrationCtx;
+ return NOERROR;
+ }
+
+ //pin not registered
+ return E_FAIL;
}
+//-------------------------------------------------------------------
HRESULT
-WINAPI
-CBDAPinControl_fnConstructor(
+GetNetworkProviderFromGraph(
+ IFilterGraph * pGraph,
+ IBDA_NetworkProvider ** pOutNetworkProvider)
+{
+ IEnumFilters *pEnumFilters = NULL;
+ IBaseFilter * ppFilter[1];
+ IBDA_NetworkProvider * pNetworkProvider = NULL;
+ HRESULT hr;
+
+ // get IEnumFilters interface
+ hr = pGraph->EnumFilters(&pEnumFilters);
+
+ if (FAILED(hr))
+ {
+ //clean up
+ *pOutNetworkProvider = NULL;
+ return hr;
+ }
+
+ while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+ {
+ // check if that filter supports the IBDA_NetworkProvider interface
+ hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
+
+ // release IBaseFilter
+ ppFilter[0]->Release();
+
+ if (SUCCEEDED(hr))
+ break;
+ }
+
+ // release IEnumFilters interface
+ pEnumFilters->Release();
+
+ //store result
+ *pOutNetworkProvider = pNetworkProvider;
+
+ if (pNetworkProvider)
+ return S_OK;
+ else
+ return E_FAIL;
+}
+
+HRESULT
+CBDAPinControl_RealConstructor(
+ HANDLE hPin,
+ IBDA_NetworkProvider *pNetworkProvider,
+ IPin * pConnectedPin,
+ ULONG RegistrationCtx,
IUnknown * pUnkOuter,
REFIID riid,
LPVOID * ppv)
{
- IPin * pConnectedPin = NULL;
- IBDA_NetworkProvider * pNetworkProvider = NULL;
- HANDLE hFile = INVALID_HANDLE_VALUE;
+ CBDAPinControl * handler = new CBDAPinControl(hPin, pNetworkProvider, pConnectedPin, RegistrationCtx);
-#if 0
- if (!IsEqualGUID(riid, IID_IUnknown))
- {
#ifdef BDAPLGIN_TRACE
- OutputDebugStringW(L"CBDAPinControl_fnConstructor: Expected IUnknown\n");
+ OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
#endif
- return REGDB_E_CLASSNOTREG;
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
}
+ return NOERROR;
+}
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ IPin * pConnectedPin = NULL;
+ IBDA_NetworkProvider * pNetworkProvider = NULL;
+ HANDLE hFile = INVALID_HANDLE_VALUE;
HRESULT hr;
IKsObject * pObject = NULL;
IPin * pPin = NULL;
- IEnumFilters *pEnumFilters = NULL;
-
- IBaseFilter * ppFilter[1];
+ IUnknown * pUnknown = NULL;
PIN_INFO PinInfo;
FILTER_INFO FilterInfo;
-
+ ULONG RegistrationCtx = 0;
if (!pUnkOuter)
return E_POINTER;
+ OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
+ //DebugBreak();
+
// query for IKsObject interface
hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
return hr;
}
+ if (!PinInfo.pFilter)
+ {
+ //clean up
+ pObject->Release();
+ pPin->Release();
+ return hr;
+ }
+
// sanity checks
- assert(PinInfo.dir == PINDIR_OUTPUT);
assert(PinInfo.pFilter != NULL);
// query filter info
// sanity check
assert(FilterInfo.pGraph != NULL);
- // get IEnumFilters interface
- hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters);
-
- if (FAILED(hr))
- {
- //clean up
- FilterInfo.pGraph->Release();
- PinInfo.pFilter->Release();
- pObject->Release();
- pPin->Release();
- return hr;
- }
+ // get network provider interface
+ hr = GetNetworkProviderFromGraph(FilterInfo.pGraph, &pNetworkProvider);
- while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+ if (SUCCEEDED(hr))
{
- // check if that filter supports the IBDA_NetworkProvider interface
- hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
-
- // release IBaseFilter
- ppFilter[0]->Release();
-
- if (SUCCEEDED(hr))
- break;
+ if (PinInfo.dir == PINDIR_OUTPUT)
+ {
+ // get connected pin handle
+ hr = pPin->ConnectedTo(&pConnectedPin);
+ if (SUCCEEDED(hr))
+ {
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+ if (hFile)
+ {
+ hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, pConnectedPin, 0, pUnkOuter, riid, ppv);
+ if (SUCCEEDED(hr))
+ {
+ // set to null to prevent releasing
+ pNetworkProvider = NULL;
+ pConnectedPin = NULL;
+ }
+ }
+ else
+ {
+ // expected file handle
+ hr = E_UNEXPECTED;
+ }
+ }
+ }
+ else
+ {
+ // get IUnknown from base filter
+ hr = PinInfo.pFilter->QueryInterface(IID_IUnknown, (void**)&pUnknown);
+ if (SUCCEEDED(hr))
+ {
+ // register device filter
+ hr = pNetworkProvider->RegisterDeviceFilter(pUnknown, &RegistrationCtx);
+ if (SUCCEEDED(hr))
+ {
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+ if (hFile)
+ {
+ hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, NULL, RegistrationCtx, pUnkOuter, riid, ppv);
+ if (SUCCEEDED(hr))
+ {
+ // set to null to prevent releasing
+ pNetworkProvider = NULL;
+ }
+ }
+ else
+ {
+ // expected file handle
+ hr = E_UNEXPECTED;
+ }
+ }
+ else
+ {
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAPinControl_fnConstructor failed to register filter with %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ DebugBreak();
+ }
+ }
+ }
}
- // release IEnumFilters interface
- pEnumFilters->Release();
-
// release IFilterGraph interface
FilterInfo.pGraph->Release();
// release IBaseFilter interface
PinInfo.pFilter->Release();
- if (pNetworkProvider)
- {
- // get connected pin handle
- hr = pPin->ConnectedTo(&pConnectedPin);
-
- // get file handle
- hFile = pObject->KsGetObjectHandle();
-
- if (FAILED(hr) || hFile == INVALID_HANDLE_VALUE)
- {
- // pin not connected
- pNetworkProvider->Release();
- // set zero
- pNetworkProvider = NULL;
- }
- }
-
// release IPin
pPin->Release();
pObject->Release();
- if (pNetworkProvider == NULL)
+ if (pNetworkProvider)
{
- // no network provider interface in graph
- return E_NOINTERFACE;
+ // release network provider
+ pNetworkProvider->Release();
}
-#endif
-
- CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin);
-#ifdef BDAPLGIN_TRACE
- OutputDebugStringW(L"CBDAPinControl_fnConstructor");
-#endif
-
- DebugBreak();
-
- if (!handler)
- return E_OUTOFMEMORY;
+ if (pConnectedPin)
+ {
+ // release connected pin
+ pConnectedPin->Release();
+ }
- if (FAILED(handler->QueryInterface(riid, ppv)))
+ if (pUnknown)
{
- /* not supported */
- delete handler;
- return E_NOINTERFACE;
+ // release filter
+ pUnknown->Release();
}
- return NOERROR;
+ return hr;
}
#ifndef PRECOMP_H__
#define PRECOMP_H__
-//#define BDAPLGIN_TRACE
+#define BDAPLGIN_TRACE
#define BUILDING_KS
#define _KSDDK_
#include <dshow.h>
#include <ks.h>
#define __STREAMS__
#include <ksproxy.h>
+#include <ksmedia.h>
#include <stdio.h>
#include <wchar.h>
#include <tchar.h>
HRESULT
WINAPI
CControlNode_fnConstructor(
- HANDLE hFile,
IBaseFilter * pFilter,
ULONG NodeType,
ULONG PinId,
HRESULT
WINAPI
CBDAFrequencyFilter_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv);
HRESULT
WINAPI
CBDASignalStatistics_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv);
HRESULT
WINAPI
CBDALNBInfo_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv);
HRESULT
WINAPI
CBDADigitalDemodulator_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv);
+extern const GUID IID_IKsObject;
+
#endif
#include "precomp.h"
+#ifndef _MSC_VER
const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}};
const GUID KSPROPSETID_BdaSignalStats = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
+#endif
class CBDASignalStatistics : public IBDA_SignalStatistics
{
HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime);
- CBDASignalStatistics(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ CBDASignalStatistics(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
~CBDASignalStatistics(){};
protected:
LONG m_Ref;
- HANDLE m_hFile;
+ IKsPropertySet * m_pProperty;
ULONG m_NodeId;
};
reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef();
return NOERROR;
}
-
return E_NOINTERFACE;
}
ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SIGNAL_STRENGTH;
- Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
+
+ assert(m_pProperty);
+
+ hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_STRENGTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plDbStrength, sizeof(LONG), &BytesReturned);
- // perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plDbStrength, sizeof(LONG), &BytesReturned);
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SIGNAL_QUALITY;
- Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plPercentQuality, sizeof(LONG), &BytesReturned);
+ hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_QUALITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plPercentQuality, sizeof(LONG), &BytesReturned);
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SIGNAL_PRESENT;
- Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Present, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_PRESENT, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Present, sizeof(ULONG), &BytesReturned);
+
// store result
*pfPresent = Present;
ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SIGNAL_LOCKED;
- Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Locked, sizeof(ULONG), &BytesReturned);
+ hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_LOCKED, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Locked, sizeof(ULONG), &BytesReturned);
+
*pfLocked = Locked;
#ifdef BDAPLGIN_TRACE
{
KSP_NODE Node;
HRESULT hr;
- ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
- Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &lmsSampleTime, sizeof(LONG), &BytesReturned);
+ hr = m_pProperty->Set(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &lmsSampleTime, sizeof(LONG));
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
- swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx\n", m_NodeId, hr);
OutputDebugStringW(Buffer);
#endif
ULONG BytesReturned;
// setup request
- Node.Property.Set = KSPROPSETID_BdaSignalStats;
- Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
- Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
Node.NodeId = (ULONG)-1;
+ Node.Reserved = 0;
// perform request
- hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plmsSampleTime, sizeof(LONG), &BytesReturned);
+ hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plmsSampleTime, sizeof(LONG), &BytesReturned);
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[100];
HRESULT
WINAPI
CBDASignalStatistics_fnConstructor(
- HANDLE hFile,
+ IKsPropertySet * pProperty,
ULONG NodeId,
REFIID riid,
LPVOID * ppv)
{
// construct device control
- CBDASignalStatistics * handler = new CBDASignalStatistics(hFile, NodeId);
+ CBDASignalStatistics * handler = new CBDASignalStatistics(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");
SYSTEM_INFO SystemInfo;
EnterCriticalSection(&m_CriticalSection);
+
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::SetProperties\n");
+#endif
if (!pRequest || !pActual)
return E_POINTER;
//TODO integer overflow checks
EnterCriticalSection(&m_CriticalSection);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::Commit\n");
+#endif
if (m_Mode == KsAllocatorMode_Kernel)
{
{
EnterCriticalSection(&m_CriticalSection);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::Decommit\n");
+#endif
if (m_Mode == KsAllocatorMode_Kernel)
{
DWORD dwFlags)
{
IMediaSample * Sample = NULL;
- OutputDebugStringW(L"CKsAllocator::GetBuffer\n");
+
+ if (!m_Commited)
+ return VFW_E_NOT_COMMITTED;
do
{
{
EnterCriticalSection(&m_CriticalSection);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n");
+#endif
// media sample always 1 ref count in free list
pBuffer->AddRef();
IMemAllocatorNotifyCallbackTemp *pNotify)
{
EnterCriticalSection(&m_CriticalSection);
+
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::SetNotify\n");
+#endif
if (pNotify)
pNotify->AddRef();
KSALLOCATOR_FRAMING AllocatorFraming;
HANDLE hPin;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n");
+#endif
if (m_hAllocator)
{
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator_Constructor\n");
+#endif
CKsAllocator * handler = new CKsAllocator();
STDMETHODCALLTYPE
CKsBasicAudio::Stop()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CKsBasicAudio::Pause()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::Run(
REFERENCE_TIME tStart)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::SetSyncSource(
IReferenceClock *pClock)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CKsBasicAudio::NotifyGraphChange()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::GetTypeInfoCount(
UINT *pctinfo)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
LCID lcid,
ITypeInfo **ppTInfo)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LCID lcid,
DISPID *rgDispId)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
EXCEPINFO *pExcepInfo,
UINT *puArgErr)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::put_Volume(
long lVolume)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::get_Volume(
long *plVolume)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::put_Balance(
long lBalance)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
CKsBasicAudio::get_Balance(
long *plBalance)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
+
return E_NOTIMPL;
}
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsBasicAudio_Constructor\n");
+#endif
CKsBasicAudio * handler = new CKsBasicAudio();
const GUID KSCATEGORY_CLOCK = {0x53172480, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
#endif
+const GUID IID_IKsClockForwarder = {0x877e4352, 0x6fea, 0x11d0, {0xb8, 0x63, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+
DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter);
class CKsClockForwarder : public IDistributorNotify,
reinterpret_cast<IUnknown*>(*Output)->AddRef();
return NOERROR;
}
- if (IsEqualGUID(refiid, IID_IKsObject))
+ if (IsEqualGUID(refiid, IID_IKsObject) ||
+ IsEqualGUID(refiid, IID_IKsClockForwarder))
{
*Output = (IKsObject*)(this);
reinterpret_cast<IKsObject*>(*Output)->AddRef();
return NOERROR;
}
-#if 0
- if (IsEqualGUID(refiid, IID_IKsClockForwarder))
- {
- *Output = PVOID(this);
- reinterpret_cast<IKsObject*>(*Output)->AddRef();
- return NOERROR;
- }
-#endif
-
return E_NOINTERFACE;
}
STDMETHODCALLTYPE
CKsClockForwarder::Stop()
{
- OutputDebugString("CKsClockForwarder::Stop\n");
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"CKsClockForwarder::Stop m_ThreadStarted %u m_PendingStop %u m_hThread %p m_hEvent %p m_Handle %p\n", m_ThreadStarted, m_PendingStop, m_hThread, m_hEvent, m_Handle);
+ OutputDebugStringW(Buffer);
+#endif
+ m_Time = 0;
if (m_ThreadStarted)
{
// signal pending stop
STDMETHODCALLTYPE
CKsClockForwarder::Pause()
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::Pause\n");
+#endif
if (!m_hEvent)
{
CKsClockForwarder::Run(
REFERENCE_TIME tStart)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::Run\n");
+#endif
m_Time = tStart;
CKsClockForwarder::SetSyncSource(
IReferenceClock *pClock)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::SetSyncSource\n");
+#endif
if (pClock)
pClock->AddRef();
STDMETHODCALLTYPE
CKsClockForwarder::NotifyGraphChange()
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::NotifyGraphChange\n");
- DebugBreak();
- return E_NOTIMPL;
+#endif
+
+ return NOERROR;
}
//-------------------------------------------------------------------
if (SUCCEEDED(hr))
m_State = State;
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CKsClockForwarder::SetClockState m_State %u State %u hr %lx\n", m_State, State, hr);
+ OutputDebugStringW(Buffer);
+#endif
+
return hr;
}
HRESULT hr;
HANDLE handle;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsClockForwarder_Constructor\n");
+#endif
// open default clock
hr = KsOpenDefaultDevice(KSCATEGORY_CLOCK, GENERIC_READ | GENERIC_WRITE, &handle);
if (hr != NOERROR)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+#endif
return hr;
}
STDMETHODCALLTYPE
CVPConfig::Stop()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPConfig::Pause()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::Run(
REFERENCE_TIME tStart)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetSyncSource(
IReferenceClock *pClock)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPConfig::NotifyGraphChange()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPDWORD pdwNumConnectInfo,
IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetConnectInfo(
DWORD dwChosenEntry)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::GetVPDataInfo(
LPAMVPDATAINFO pamvpDataInfo)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPAMVPSIZE pamvpSize,
OUT LPDWORD pdwMaxPixelsPerSecond)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
DWORD dwNumFormats,
IN LPDDPIXELFORMAT pDDPixelFormats)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPDWORD pdwNumFormats,
IN OUT LPDDPIXELFORMAT pddPixelFormats)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetVideoFormat(
DWORD dwChosenEntry)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPConfig::SetInvertPolarity()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::GetOverlaySurface(
LPDIRECTDRAWSURFACE* ppddOverlaySurface)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetDirectDrawKernelHandle(
ULONG_PTR dwDDKernelHandle)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetVideoPortID(
IN DWORD dwVideoPortID)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
DWORD cHandles,
IN ULONG_PTR *rgDDKernelHandles)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
IN DWORD dwXOrigin,
IN DWORD dwYOrigin)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::IsVPDecimationAllowed(
LPBOOL pbIsDecimationAllowed)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPConfig::SetScalingFactors(
LPAMVPSIZE pamvpSize)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
-
-
HRESULT
WINAPI
CVPConfig_Constructor(
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CVPConfig_Constructor\n");
+#endif
CVPConfig * handler = new CVPConfig();
STDMETHODCALLTYPE
CVPVBIConfig::Stop()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPVBIConfig::Pause()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::Run(
REFERENCE_TIME tStart)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::SetSyncSource(
IReferenceClock *pClock)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPVBIConfig::NotifyGraphChange()
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPDWORD pdwNumConnectInfo,
IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::SetConnectInfo(
DWORD dwChosenEntry)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::GetVPDataInfo(
LPAMVPDATAINFO pamvpDataInfo)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPAMVPSIZE pamvpSize,
OUT LPDWORD pdwMaxPixelsPerSecond)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
DWORD dwNumFormats,
IN LPDDPIXELFORMAT pDDPixelFormats)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
LPDWORD pdwNumFormats,
IN OUT LPDDPIXELFORMAT pddPixelFormats)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::SetVideoFormat(
DWORD dwChosenEntry)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CVPVBIConfig::SetInvertPolarity()
{
- OutputDebugString("UNIMPLEMENTED\n");
+ #ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::GetOverlaySurface(
LPDIRECTDRAWSURFACE* ppddOverlaySurface)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::SetDirectDrawKernelHandle(
ULONG_PTR dwDDKernelHandle)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
CVPVBIConfig::SetVideoPortID(
IN DWORD dwVideoPortID)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
DWORD cHandles,
IN ULONG_PTR *rgDDKernelHandles)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
IN DWORD dwXOrigin,
IN DWORD dwYOrigin)
{
- OutputDebugString("UNIMPLEMENTED\n");
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+#endif
return E_NOTIMPL;
}
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CVPVBIConfig_Constructor\n");
+#endif
CVPVBIConfig * handler = new CVPVBIConfig();
ULONG Index;
HRESULT hr = S_FALSE;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n");
+#endif
DataList = (PKSMULTIPLE_ITEM)DataRanges;
DataRange = (PKSDATARANGE)(DataList + 1);
CKsDataTypeHandler::KsSetMediaType(
IN const AM_MEDIA_TYPE* AmMediaType)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n");
+#endif
if (m_Type)
{
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n");
+#endif
+
CKsDataTypeHandler * handler = new CKsDataTypeHandler();
if (!handler)
return NOERROR;
}
- WCHAR Buffer[MAX_PATH];
- LPOLESTR lpstr;
- StringFromCLSID(refiid, &lpstr);
- swprintf(Buffer, L"CEnumMediaTypes::QueryInterface: NoInterface for %s\n", lpstr);
- OutputDebugStringW(Buffer);
- CoTaskMemFree(lpstr);
-
return E_NOINTERFACE;
}
CEnumMediaTypes::Clone(
IEnumMediaTypes **ppEnum)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
+#endif
return E_NOTIMPL;
}
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(riid, &lpstr);
- swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s\n", lpstr);
OutputDebugStringW(Buffer);
#endif
CEnumPins::Clone(
IEnumPins **ppEnum)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
public ISpecifyPropertyPages
{
public:
+ typedef std::vector<IUnknown *>ProxyPluginVector;
+
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef()
HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt);
HRESULT STDMETHODCALLTYPE CreatePin(const AM_MEDIA_TYPE *pmt);
HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
- CInputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, HANDLE hFilter, ULONG PinId, KSPIN_COMMUNICATION Communication);
+ HRESULT STDMETHODCALLTYPE GetSupportedSets(LPGUID * pOutGuid, PULONG NumGuids);
+ HRESULT STDMETHODCALLTYPE LoadProxyPlugins(LPGUID pGuids, ULONG NumGuids);
+ CInputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, ULONG PinId, KSPIN_COMMUNICATION Communication);
virtual ~CInputPin(){};
protected:
LONG m_Ref;
IBaseFilter * m_ParentFilter;
LPCWSTR m_PinName;
- HANDLE m_hFilter;
HANDLE m_hPin;
ULONG m_PinId;
IMemAllocator * m_MemAllocator;
LPWSTR m_FilterName;
FRAMING_PROP m_FramingProp[4];
PKSALLOCATOR_FRAMING_EX m_FramingEx[4];
+ ProxyPluginVector m_Plugins;
};
CInputPin::CInputPin(
- IBaseFilter * ParentFilter,
+ IBaseFilter * ParentFilter,
LPCWSTR PinName,
- HANDLE hFilter,
ULONG PinId,
KSPIN_COMMUNICATION Communication) : m_Ref(0),
m_ParentFilter(ParentFilter),
m_PinName(PinName),
- m_hFilter(hFilter),
m_hPin(INVALID_HANDLE_VALUE),
m_PinId(PinId),
m_MemAllocator(0),
m_KsAllocatorEx(0),
m_PipeAllocatorFlag(0),
m_bPinBusCacheInitialized(0),
- m_FilterName(0)
+ m_FilterName(0),
+ m_Plugins()
{
ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
+ HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ assert(hr == S_OK);
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+ assert(hFilter);
+
+ KsObjectParent->Release();
+
+
ZeroMemory(&m_MediaFormat, sizeof(AM_MEDIA_TYPE));
- HRESULT hr = KsGetMediaType(0, &m_MediaFormat, m_hFilter, m_PinId);
+ hr = KsGetMediaType(0, &m_MediaFormat, hFilter, m_PinId);
assert(hr == S_OK);
}
IBaseFilter *pSelf,
Quality q)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Notify NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
CInputPin::SetSink(
IQualityControl *piqc)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
CInputPin::KsAddAggregate(
IN REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
CInputPin::KsRemoveAggregate(
REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
IPin *ppinOut,
IGraphBuilder *pGraph)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Backout\n");
+#endif
+
return S_OK;
}
CInputPin::KsPinFactory(
ULONG* PinFactory)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsPinFactory\n");
+#endif
+
*PinFactory = m_PinId;
return S_OK;
}
STDMETHODCALLTYPE
CInputPin::GetAllocator(IMemAllocator **ppAllocator)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::GetAllocator\n");
+#endif
+
return VFW_E_NO_ALLOCATOR;
}
STDMETHODCALLTYPE
CInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly)
{
- WCHAR Buffer[100];
HRESULT hr;
ALLOCATOR_PROPERTIES Properties;
hr = pAllocator->GetProperties(&Properties);
+
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
swprintf(Buffer, L"CInputPin::NotifyAllocator hr %lx bReadOnly, %u cbAlign %u cbBuffer %u cbPrefix %u cBuffers %u\n", hr, bReadOnly, Properties.cbAlign, Properties.cbBuffer, Properties.cbPrefix, Properties.cBuffers);
OutputDebugStringW(Buffer);
+#endif
if (pAllocator)
{
else
hr = E_NOTIMPL;
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
swprintf(Buffer, L"CInputPin::GetAllocatorRequirements hr %lx m_hPin %p cBuffers %u cbBuffer %u cbAlign %u cbPrefix %u\n", hr, m_hPin, pProps->cBuffers, pProps->cbBuffer, pProps->cbAlign, pProps->cbPrefix);
OutputDebugStringW(Buffer);
+#endif
return hr;
}
STDMETHODCALLTYPE
CInputPin::Receive(IMediaSample *pSample)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Receive NotImplemented\n");
DebugBreak();
+#endif
+
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n");
DebugBreak();
+#endif
+
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CInputPin::ReceiveCanBlock( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n");
DebugBreak();
+#endif
+
return S_FALSE;
}
CInputPin::KsQueryMediums(
PKSMULTIPLE_ITEM* MediumList)
{
- return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+ HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
+ return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
}
HRESULT
CInputPin::KsQueryInterfaces(
PKSMULTIPLE_ITEM* InterfaceList)
{
- return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+ HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
+ return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
}
HRESULT
ULONG Proportion,
REFERENCE_TIME TimeDelta)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n");
+#endif
+
DebugBreak();
return E_NOTIMPL;
}
IMediaSample* Sample,
HRESULT hr)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n");
+#endif
}
STDMETHODCALLTYPE
CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Connect NotImplemented\n");
DebugBreak();
+#endif
return NOERROR;
}
m_Pin->Release();
m_Pin = NULL;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Disconnect\n");
+#endif
+
return S_OK;
}
HRESULT
if (!m_Pin)
return VFW_E_NOT_CONNECTED;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n");
DebugBreak();
+#endif
+
return E_NOTIMPL;
}
HRESULT
HRESULT hr;
ULONG MediaTypeCount = 0, Index;
AM_MEDIA_TYPE * MediaTypes;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
// query media type count
- hr = KsGetMediaTypeCount(m_hFilter, m_PinId, &MediaTypeCount);
+ hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
if (FAILED(hr) || !MediaTypeCount)
return hr;
for(Index = 0; Index < MediaTypeCount; Index++)
{
// get media type
- hr = KsGetMediaType(Index, &MediaTypes[Index], m_hFilter, m_PinId);
+ hr = KsGetMediaType(Index, &MediaTypes[Index], hFilter, m_PinId);
if (FAILED(hr))
{
// failed
STDMETHODCALLTYPE
CInputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::QueryInternalConnections NotImplemented\n");
+#endif
return E_NOTIMPL;
}
HRESULT
STDMETHODCALLTYPE
CInputPin::EndOfStream( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::EndOfStream NotImplemented\n");
+#endif
return E_NOTIMPL;
}
HRESULT
STDMETHODCALLTYPE
CInputPin::BeginFlush( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::BeginFlush NotImplemented\n");
+#endif
return E_NOTIMPL;
}
HRESULT
STDMETHODCALLTYPE
CInputPin::EndFlush( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::EndFlush NotImplemented\n");
+#endif
return E_NOTIMPL;
}
HRESULT
STDMETHODCALLTYPE
CInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::NewSegment NotImplemented\n");
+#endif
return E_NOTIMPL;
}
PKSMULTIPLE_ITEM MultipleItem;
PKSDATAFORMAT DataFormat;
HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
if (!pmt)
return E_POINTER;
- hr = KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
+
+ hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
if (FAILED(hr))
return S_FALSE;
{
// format is supported
CoTaskMemFree(MultipleItem);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CheckFormat format OK\n");
+#endif
return S_OK;
}
DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize);
if (FAILED(hr))
{
// failed to load interface handler plugin
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePin failed to load InterfaceHandlerPlugin\n");
+#endif
CoTaskMemFree(MediumList);
CoTaskMemFree(InterfaceList);
if (FAILED(hr))
{
// failed to load interface handler plugin
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePin failed to initialize InterfaceHandlerPlugin\n");
+#endif
InterfaceHandler->Release();
CoTaskMemFree(MediumList);
CoTaskMemFree(InterfaceList);
}
else
{
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
swprintf(Buffer, L"CInputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
OutputDebugStringW(Buffer);
DebugBreak();
+#endif
hr = E_FAIL;
}
PKSDATAFORMAT DataFormat;
ULONG Length;
HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
+
+ if (!pmt)
+ return E_POINTER;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
if (m_hPin != INVALID_HANDLE_VALUE)
{
}
// create pin
- hr = KsCreatePin(m_hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
+ hr = KsCreatePin(hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
if (SUCCEEDED(hr))
{
CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
+#ifdef KSPROXY_TRACE
LPOLESTR pMajor, pSub, pFormat;
StringFromIID(m_MediaFormat.majortype, &pMajor);
StringFromIID(m_MediaFormat.subtype , &pSub);
StringFromIID(m_MediaFormat.formattype, &pFormat);
+
WCHAR Buffer[200];
swprintf(Buffer, L"CInputPin::CreatePinHandle Major %s SubType %s Format %s pbFormat %p cbFormat %u\n", pMajor, pSub, pFormat, pmt->pbFormat, pmt->cbFormat);
CoTaskMemFree(pMajor);
CoTaskMemFree(pSub);
CoTaskMemFree(pFormat);
OutputDebugStringW(Buffer);
+#endif
if (pmt->cbFormat)
{
CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat);
}
+ LPGUID pGuid;
+ ULONG NumGuids = 0;
+
+ // get all supported sets
+ hr = GetSupportedSets(&pGuid, &NumGuids);
+ if (FAILED(hr))
+ {
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+#endif
+ return hr;
+ }
+
+ // load all proxy plugins
+ hr = LoadProxyPlugins(pGuid, NumGuids);
+ if (FAILED(hr))
+ {
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+#endif
+ return hr;
+ }
+
+ // free sets
+ CoTaskMemFree(pGuid);
+
+
//TODO
// connect pin pipes
return hr;
}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::GetSupportedSets(
+ LPGUID * pOutGuid,
+ PULONG NumGuids)
+{
+ KSPROPERTY Property;
+ LPGUID pGuid;
+ ULONG NumProperty = 0;
+ ULONG NumMethods = 0;
+ ULONG NumEvents = 0;
+ ULONG Length;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ Property.Set = GUID_NULL;
+ Property.Id = 0;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumProperty);
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumMethods);
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumEvents);
+
+ Length = NumProperty + NumMethods + NumEvents;
+
+ // allocate guid buffer
+ pGuid = (LPGUID)CoTaskMemAlloc(Length);
+ if (!pGuid)
+ {
+ // failed
+ return E_OUTOFMEMORY;
+ }
+
+ NumProperty /= sizeof(GUID);
+ NumMethods /= sizeof(GUID);
+ NumEvents /= sizeof(GUID);
+
+ // get all properties
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+
+ // get all methods
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+ // get all events
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+ OutputDebugStringW(Buffer);
+#endif
+
+ *pOutGuid = pGuid;
+ *NumGuids = NumProperty+NumEvents+NumMethods;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::LoadProxyPlugins(
+ LPGUID pGuids,
+ ULONG NumGuids)
+{
+ ULONG Index;
+ LPOLESTR pStr;
+ HKEY hKey, hSubKey;
+ HRESULT hr;
+ IUnknown * pUnknown;
+
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\MediaInterfaces", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+ {
+ OutputDebugStringW(L"CInputPin::LoadProxyPlugins failed to open MediaInterfaces key\n");
+ return E_FAIL;
+ }
+
+ // enumerate all sets
+ for(Index = 0; Index < NumGuids; Index++)
+ {
+ // convert to string
+ hr = StringFromCLSID(pGuids[Index], &pStr);
+ if (FAILED(hr))
+ return E_FAIL;
+
+ // now try open class key
+ if (RegOpenKeyExW(hKey, pStr, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+ {
+ // no plugin for that set exists
+ CoTaskMemFree(pStr);
+ continue;
+ }
+
+ // try load plugin
+ hr = CoCreateInstance(pGuids[Index], (IBaseFilter*)this, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
+ if (SUCCEEDED(hr))
+ {
+ // store plugin
+ m_Plugins.push_back(pUnknown);
+ }
+ // close key
+ RegCloseKey(hSubKey);
+ }
+
+ // close media interfaces key
+ RegCloseKey(hKey);
+ return S_OK;
+}
+
HRESULT
WINAPI
CInputPin_Constructor(
REFIID riid,
LPVOID * ppv)
{
- CInputPin * handler = new CInputPin(ParentFilter, PinName, hFilter, PinId, Communication);
+ CInputPin * handler = new CInputPin(ParentFilter, PinName, PinId, Communication);
if (!handler)
return E_OUTOFMEMORY;
if (SampleList[Index]->IsSyncPoint() == S_OK)
Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT;
}
-
+#ifdef KSPROXY_TRACE
WCHAR Buffer[200];
swprintf(Buffer, L"CKsInterfaceHandler::KsProcessMediaSamples PinName %s BufferLength %lu Property Buffer %p ExtendedSize %u lActual %u dwSampleFlags %lx\n", m_PinName, Properties.cbBuffer, Properties.pbBuffer, ExtendedSize, Properties.lActual, Properties.dwSampleFlags);
- //OutputDebugStringW(Buffer);
+ OutputDebugStringW(Buffer);
+#endif
CurStreamHeader->Size = sizeof(KSSTREAM_HEADER) + ExtendedSize;
CurStreamHeader->PresentationTime.Denominator = 1;
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n");
+#endif
CKsInterfaceHandler * handler = new CKsInterfaceHandler();
}
if (IsEqualGUID(refiid, IID_IMediaSample2))
{
-
- OutputDebugStringW(L"CMediaSample::QueryInterface requested IMediaSample2 interface\n");
#if 0
*Output = (IMediaSample2*)(this);
reinterpret_cast<IMediaSample2*>(*Output)->AddRef();
STDMETHODCALLTYPE
CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType)
{
- OutputDebugStringW(L"CMediaSample::GetMediaType\n");
-
if (!m_MediaType)
{
*ppMediaType = NULL;
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CMediaSample_Constructor\n");
+#endif
CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize);
HANDLE handle;
KSNODE_CREATE NodeCreate;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsNode_Constructor\n");
+#endif
//setup request
NodeCreate.CreateFlags = 0;
{
public:
+ typedef std::vector<IUnknown *>ProxyPluginVector;
+
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef()
HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
HRESULT WINAPI IoProcessRoutine();
HRESULT WINAPI InitializeIOThread();
+ HRESULT STDMETHODCALLTYPE GetSupportedSets(LPGUID * pOutGuid, PULONG NumGuids);
+ HRESULT STDMETHODCALLTYPE LoadProxyPlugins(LPGUID pGuids, ULONG NumGuids);
friend DWORD WINAPI COutputPin_IoThreadStartup(LPVOID lpParameter);
friend HRESULT STDMETHODCALLTYPE COutputPin_SetState(IPin * Pin, KSSTATE State);
LPCWSTR m_PinName;
HANDLE m_hPin;
ULONG m_PinId;
- IKsObject * m_KsObjectParent;
IPin * m_Pin;
IKsAllocatorEx * m_KsAllocatorEx;
ULONG m_PipeAllocatorFlag;
KSPIN_INTERFACE m_Interface;
KSPIN_MEDIUM m_Medium;
AM_MEDIA_TYPE m_MediaFormat;
-
- IMediaSeeking * m_FilterMediaSeeking;
ALLOCATOR_PROPERTIES m_Properties;
IKsInterfaceHandler * m_InterfaceHandler;
BOOL m_IoThreadStarted;
KSSTATE m_State;
+ CRITICAL_SECTION m_Lock;
+
+ ProxyPluginVector m_Plugins;
};
COutputPin::~COutputPin()
{
- if (m_KsObjectParent)
- m_KsObjectParent->Release();
}
COutputPin::COutputPin(
m_PinName(PinName),
m_hPin(INVALID_HANDLE_VALUE),
m_PinId(PinId),
- m_KsObjectParent(0),
m_Pin(0),
m_KsAllocatorEx(0),
m_PipeAllocatorFlag(0),
m_MemInputPin(0),
m_IoCount(0),
m_Communication(Communication),
- m_FilterMediaSeeking(0),
m_InterfaceHandler(0),
m_hStartEvent(0),
m_hBufferAvailable(0),
m_hStopEvent(0),
m_StopInProgress(0),
m_IoThreadStarted(0),
- m_State(KSSTATE_STOP)
+ m_State(KSSTATE_STOP),
+ m_Plugins()
{
HRESULT hr;
+ IKsObject * KsObjectParent;
- hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&m_KsObjectParent);
- assert(hr == S_OK);
-
- hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&m_FilterMediaSeeking);
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
assert(hr == S_OK);
ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
- hr = KsGetMediaType(0, &m_MediaFormat, m_KsObjectParent->KsGetObjectHandle(), m_PinId);
+ hr = KsGetMediaType(0, &m_MediaFormat, KsObjectParent->KsGetObjectHandle(), m_PinId);
assert(hr == S_OK);
+
+ InitializeCriticalSection(&m_Lock);
+
+ KsObjectParent->Release();
};
HRESULT
if (IsEqualGUID(refiid, IID_IUnknown) ||
IsEqualGUID(refiid, IID_IPin))
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_IPin\n");
+#endif
*Output = PVOID(this);
reinterpret_cast<IUnknown*>(*Output)->AddRef();
return NOERROR;
if (FAILED(hr))
return hr;
}
-
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsObject\n");
+#endif
*Output = (IKsObject*)(this);
reinterpret_cast<IKsObject*>(*Output)->AddRef();
return NOERROR;
if (FAILED(hr))
return hr;
}
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPropertySet\n");
+#endif
*Output = (IKsPropertySet*)(this);
reinterpret_cast<IKsPropertySet*>(*Output)->AddRef();
return NOERROR;
}
else if (IsEqualGUID(refiid, IID_IKsControl))
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsControl\n");
+#endif
*Output = (IKsControl*)(this);
reinterpret_cast<IKsControl*>(*Output)->AddRef();
return NOERROR;
#endif
else if (IsEqualGUID(refiid, IID_IKsPinFactory))
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPinFactory\n");
+#endif
*Output = (IKsPinFactory*)(this);
reinterpret_cast<IKsPinFactory*>(*Output)->AddRef();
return NOERROR;
}
else if (IsEqualGUID(refiid, IID_ISpecifyPropertyPages))
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryInterface IID_ISpecifyPropertyPages\n");
+#endif
*Output = (ISpecifyPropertyPages*)(this);
reinterpret_cast<ISpecifyPropertyPages*>(*Output)->AddRef();
return NOERROR;
return NOERROR;
}
+#ifdef KSPROXY_TRACE
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"COutputPin::QueryInterface: NoInterface for %s PinId %u PinName %s\n", lpstr, m_PinId, m_PinName);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
+#endif
return E_NOINTERFACE;
}
COutputPin::SuggestAllocatorProperties(
const ALLOCATOR_PROPERTIES *pprop)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::SuggestAllocatorProperties\n");
+#endif
if (m_Pin)
{
COutputPin::GetAllocatorProperties(
ALLOCATOR_PROPERTIES *pprop)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::GetAllocatorProperties\n");
+#endif
if (!m_Pin)
{
COutputPin::SetFormat(
AM_MEDIA_TYPE *pmt)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::SetFormat NotImplemented\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
COutputPin::GetFormat(AM_MEDIA_TYPE **ppmt)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::GetFormat NotImplemented\n");
+#endif
return E_NOTIMPL;
}
int *piCount,
int *piSize)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::GetNumberOfCapabilities NotImplemented\n");
+#endif
return E_NOTIMPL;
}
AM_MEDIA_TYPE **ppmt,
BYTE *pSCC)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::GetStreamCaps NotImplemented\n");
+#endif
return E_NOTIMPL;
}
STDMETHODCALLTYPE
COutputPin::NotifyRelease()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::NotifyRelease\n");
+#endif
// notify thread of new available sample
SetEvent(m_hBufferAvailable);
COutputPin::GetCapabilities(
DWORD *pCapabilities)
{
- return m_FilterMediaSeeking->GetCapabilities(pCapabilities);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetCapabilities(pCapabilities);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::CheckCapabilities(
DWORD *pCapabilities)
{
- return m_FilterMediaSeeking->CheckCapabilities(pCapabilities);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->CheckCapabilities(pCapabilities);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::IsFormatSupported(
const GUID *pFormat)
{
- return m_FilterMediaSeeking->IsFormatSupported(pFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->IsFormatSupported(pFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::QueryPreferredFormat(
GUID *pFormat)
{
- return m_FilterMediaSeeking->QueryPreferredFormat(pFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->QueryPreferredFormat(pFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::GetTimeFormat(
GUID *pFormat)
{
- return m_FilterMediaSeeking->GetTimeFormat(pFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetTimeFormat(pFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::IsUsingTimeFormat(
const GUID *pFormat)
{
- return m_FilterMediaSeeking->IsUsingTimeFormat(pFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->IsUsingTimeFormat(pFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::SetTimeFormat(
const GUID *pFormat)
{
- return m_FilterMediaSeeking->SetTimeFormat(pFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->SetTimeFormat(pFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::GetDuration(
LONGLONG *pDuration)
{
- return m_FilterMediaSeeking->GetDuration(pDuration);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetDuration(pDuration);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::GetStopPosition(
LONGLONG *pStop)
{
- return m_FilterMediaSeeking->GetStopPosition(pStop);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetStopPosition(pStop);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
COutputPin::GetCurrentPosition(
LONGLONG *pCurrent)
{
- return m_FilterMediaSeeking->GetCurrentPosition(pCurrent);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetCurrentPosition(pCurrent);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
LONGLONG Source,
const GUID *pSourceFormat)
{
- return m_FilterMediaSeeking->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
LONGLONG *pStop,
DWORD dwStopFlags)
{
- return m_FilterMediaSeeking->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
LONGLONG *pCurrent,
LONGLONG *pStop)
{
- return m_FilterMediaSeeking->GetPositions(pCurrent, pStop);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetPositions(pCurrent, pStop);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
LONGLONG *pEarliest,
LONGLONG *pLatest)
{
- return m_FilterMediaSeeking->GetAvailable(pEarliest, pLatest);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetAvailable(pEarliest, pLatest);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::SetRate(
double dRate)
{
- return m_FilterMediaSeeking->SetRate(dRate);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->SetRate(dRate);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::GetRate(
double *pdRate)
{
- return m_FilterMediaSeeking->GetRate(pdRate);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetRate(pdRate);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
HRESULT
COutputPin::GetPreroll(
LONGLONG *pllPreroll)
{
- return m_FilterMediaSeeking->GetPreroll(pllPreroll);
+ IMediaSeeking * FilterMediaSeeking;
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&FilterMediaSeeking);
+ if (FAILED(hr))
+ return hr;
+
+ hr = FilterMediaSeeking->GetPreroll(pllPreroll);
+
+ FilterMediaSeeking->Release();
+ return hr;
}
//-------------------------------------------------------------------
IBaseFilter *pSelf,
Quality q)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Notify NotImplemented\n");
+#endif
return E_NOTIMPL;
}
COutputPin::SetSink(
IQualityControl *piqc)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::SetSink NotImplemented\n");
+#endif
return E_NOTIMPL;
}
COutputPin::KsAddAggregate(
IN REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsAddAggregate NotImplemented\n");
+#endif
return E_NOTIMPL;
}
COutputPin::KsRemoveAggregate(
REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsRemoveAggregate NotImplemented\n");
+#endif
return E_NOTIMPL;
}
COutputPin::KsQueryMediums(
PKSMULTIPLE_ITEM* MediumList)
{
- HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
- return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+ HRESULT hr;
+ HANDLE hFilter;
+ IKsObject * KsObjectParent;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return E_NOINTERFACE;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ if (hFilter)
+ hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+ else
+ hr = E_HANDLE;
+
+ KsObjectParent->Release();
+
+ return hr;
}
HRESULT
COutputPin::KsQueryInterfaces(
PKSMULTIPLE_ITEM* InterfaceList)
{
- HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+ HRESULT hr;
+ HANDLE hFilter;
+ IKsObject * KsObjectParent;
- return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ if (hFilter)
+ hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+ else
+ hr = E_HANDLE;
+
+ KsObjectParent->Release();
+
+ return hr;
}
HRESULT
KSPIN_INTERFACE& Interface,
KSPIN_MEDIUM& Medium)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsCreateSinkPinHandle NotImplemented\n");
+#endif
return E_NOTIMPL;
}
ULONG BytesReturned;
HRESULT hr;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsPropagateAcquire\n");
+#endif
assert(m_hPin != INVALID_HANDLE_VALUE);
State = KSSTATE_ACQUIRE;
hr = KsProperty(&Property, sizeof(KSPROPERTY), (LPVOID)&State, sizeof(KSSTATE), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ m_State = State;
+ }
//TODO
//propagate to connected pin on the pipe
ULONG Proportion,
REFERENCE_TIME TimeDelta)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsQualityNotify NotImplemented\n");
+#endif
return E_NOTIMPL;
}
IMediaSample* Sample,
HRESULT hr)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsNotifyError NotImplemented\n");
+#endif
}
STDMETHODCALLTYPE
COutputPin::GetPages(CAUUID *pPages)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::GetPages NotImplemented\n");
+#endif
if (!pPages)
return E_POINTER;
COutputPin::KsPinFactory(
ULONG* PinFactory)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsPinFactory\n");
+#endif
+
*PinFactory = m_PinId;
return S_OK;
}
IPin *ppinOut,
IGraphBuilder *pGraph)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Render\n");
+#endif
return S_OK;
}
IPin *ppinOut,
IGraphBuilder *pGraph)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Backout\n");
+#endif
+
return S_OK;
}
//-------------------------------------------------------------------
STDMETHODCALLTYPE
COutputPin::KsGetObjectHandle()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsGetObjectHandle\n");
+#endif
+
assert(m_hPin != INVALID_HANDLE_VALUE);
return m_hPin;
}
ULONG* BytesReturned)
{
HRESULT hr;
- WCHAR Buffer[100];
- LPOLESTR pstr;
assert(m_hPin != INVALID_HANDLE_VALUE);
hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
-
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
+ LPOLESTR pstr;
StringFromCLSID(Property->Set, &pstr);
swprintf(Buffer, L"COutputPin::KsProperty Set %s Id %lu Flags %x hr %x\n", pstr, Property->Id, Property->Flags, hr);
OutputDebugStringW(Buffer);
+#endif
return hr;
}
ULONG* BytesReturned)
{
assert(m_hPin != INVALID_HANDLE_VALUE);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsMethod\n");
+#endif
return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
}
{
assert(m_hPin != INVALID_HANDLE_VALUE);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::KsEvent\n");
+#endif
if (EventLength)
return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
KSPROPERTY Property;
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QuerySupported\n");
+#endif
Property.Set = guidPropSet;
Property.Id = dwPropID;
HRESULT hr;
ALLOCATOR_PROPERTIES Properties;
IMemAllocatorCallbackTemp *pMemCallback;
- WCHAR Buffer[200];
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
OutputDebugStringW(L"COutputPin::Connect called\n");
+#endif
+
if (pmt)
{
hr = pReceivePin->QueryAccept(pmt);
hr = pReceivePin->QueryInterface(IID_IMemInputPin, (void**)&m_MemInputPin);
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Connect no IMemInputPin interface\n");
+#endif
+
DebugBreak();
return hr;
}
hr = m_MemAllocator->SetProperties(&Properties, &m_Properties);
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::Connect IMemAllocator::SetProperties failed with hr %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
m_MemAllocator->Release();
m_MemInputPin->Release();
return hr;
hr = m_MemAllocator->Commit();
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::Connect IMemAllocator::Commit failed with hr %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
m_MemAllocator->Release();
m_MemInputPin->Release();
return hr;
hr = m_MemAllocator->QueryInterface(IID_IMemAllocatorCallbackTemp, (void**)&pMemCallback);
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::Connect No IMemAllocatorCallbackTemp interface hr %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
m_MemAllocator->Release();
m_MemInputPin->Release();
return hr;
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::Connect IMemAllocatorNotifyCallbackTemp::SetNotify failed hr %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
m_MemAllocator->Release();
m_MemInputPin->Release();
return hr;
hr = m_MemInputPin->NotifyAllocator(m_MemAllocator, TRUE);
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::Connect IMemInputPin::NotifyAllocator failed with hr %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
m_MemAllocator->Release();
m_MemInputPin->Release();
return hr;
// increment reference count
pReceivePin->AddRef();
m_Pin = pReceivePin;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Connect success\n");
+#endif
}
else
{
STDMETHODCALLTYPE
COutputPin::Disconnect( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Disconnect\n");
+#endif
if (!m_Pin)
{
m_MemInputPin->Release();
m_MemAllocator->Release();
+ CloseHandle(m_hPin);
+ m_hPin = INVALID_HANDLE_VALUE;
+
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::Disconnect\n");
+#endif
return S_OK;
}
HRESULT
STDMETHODCALLTYPE
COutputPin::ConnectedTo(IPin **pPin)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::ConnectedTo\n");
+#endif
if (!pPin)
return E_POINTER;
STDMETHODCALLTYPE
COutputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::ConnectionMediaType called\n");
+#endif
+
return E_NOTIMPL;
}
HRESULT
STDMETHODCALLTYPE
COutputPin::QueryAccept(const AM_MEDIA_TYPE *pmt)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"COutputPin::QueryAccept called\n");
+#endif
+
return E_NOTIMPL;
}
HRESULT
ULONG MediaTypeCount = 0, Index;
AM_MEDIA_TYPE * MediaTypes;
HANDLE hFilter;
+ IKsObject * KsObjectParent;
- if (!m_KsObjectParent)
- {
- // no interface
- return E_NOINTERFACE;
- }
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
// get parent filter handle
- hFilter = m_KsObjectParent->KsGetObjectHandle();
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ // release IKsObject
+ KsObjectParent->Release();
// query media type count
hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
PKSMULTIPLE_ITEM MultipleItem;
PKSDATAFORMAT DataFormat;
HRESULT hr;
+ IKsObject * KsObjectParent;
+ HANDLE hFilter;
if (!pmt)
return E_POINTER;
- HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
- assert(hFilter != NULL);
+ // get IKsObject interface
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ // get parent filter handle
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ // release IKsObject
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
+
hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
if (FAILED(hr))
}
else
{
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
swprintf(Buffer, L"COutputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
OutputDebugStringW(Buffer);
DebugBreak();
+#endif
+
hr = E_FAIL;
}
PKSDATAFORMAT DataFormat;
ULONG Length;
HRESULT hr;
+ HANDLE hFilter;
+ IKsObject * KsObjectParent;
+
//KSALLOCATOR_FRAMING Framing;
//KSPROPERTY Property;
//ULONG BytesReturned;
CopyMemory((DataFormat + 1), pmt->pbFormat, pmt->cbFormat);
}
- HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
- assert(hFilter != NULL);
+ // get IKsObject interface
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&KsObjectParent);
+ if (FAILED(hr))
+ return hr;
+
+ // get parent filter handle
+ hFilter = KsObjectParent->KsGetObjectHandle();
+
+ // release IKsObject
+ KsObjectParent->Release();
+
+ if (!hFilter)
+ return E_HANDLE;
// create pin
hr = KsCreatePin(hFilter, PinConnect, GENERIC_READ, &m_hPin);
CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
+#ifdef KSPROXY_TRACE
LPOLESTR pMajor, pSub, pFormat;
StringFromIID(m_MediaFormat.majortype, &pMajor);
StringFromIID(m_MediaFormat.subtype , &pSub);
CoTaskMemFree(pSub);
CoTaskMemFree(pFormat);
OutputDebugStringW(Buffer);
+#endif
if (pmt->cbFormat)
{
DebugBreak();
}
+ LPGUID pGuid;
+ ULONG NumGuids = 0;
+
+ // get all supported sets
+ hr = GetSupportedSets(&pGuid, &NumGuids);
+ if (FAILED(hr))
+ {
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+#endif
+ return hr;
+ }
+
+ // load all proxy plugins
+ hr = LoadProxyPlugins(pGuid, NumGuids);
+ if (FAILED(hr))
+ {
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+#endif
+ return hr;
+ }
+
+ // free sets
+ CoTaskMemFree(pGuid);
+
+
//TODO
// connect pin pipes
return hr;
}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetSupportedSets(
+ LPGUID * pOutGuid,
+ PULONG NumGuids)
+{
+ KSPROPERTY Property;
+ LPGUID pGuid;
+ ULONG NumProperty = 0;
+ ULONG NumMethods = 0;
+ ULONG NumEvents = 0;
+ ULONG Length;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ Property.Set = GUID_NULL;
+ Property.Id = 0;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumProperty);
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumMethods);
+ KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumEvents);
+
+ Length = NumProperty + NumMethods + NumEvents;
+
+ // allocate guid buffer
+ pGuid = (LPGUID)CoTaskMemAlloc(Length);
+ if (!pGuid)
+ {
+ // failed
+ return E_OUTOFMEMORY;
+ }
+
+ NumProperty /= sizeof(GUID);
+ NumMethods /= sizeof(GUID);
+ NumEvents /= sizeof(GUID);
+
+ // get all properties
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+
+ // get all methods
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+ // get all events
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+ OutputDebugStringW(Buffer);
+#endif
+
+ *pOutGuid = pGuid;
+ *NumGuids = NumProperty+NumEvents+NumMethods;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::LoadProxyPlugins(
+ LPGUID pGuids,
+ ULONG NumGuids)
+{
+ ULONG Index;
+ LPOLESTR pStr;
+ HKEY hKey, hSubKey;
+ HRESULT hr;
+ IUnknown * pUnknown;
+
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\MediaInterfaces", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+ {
+ OutputDebugStringW(L"CKsProxy::LoadProxyPlugins failed to open MediaInterfaces key\n");
+ return E_FAIL;
+ }
+
+ // enumerate all sets
+ for(Index = 0; Index < NumGuids; Index++)
+ {
+ // convert to string
+ hr = StringFromCLSID(pGuids[Index], &pStr);
+ if (FAILED(hr))
+ return E_FAIL;
+
+ // now try open class key
+ if (RegOpenKeyExW(hKey, pStr, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+ {
+ // no plugin for that set exists
+ CoTaskMemFree(pStr);
+ continue;
+ }
+
+ // try load plugin
+ hr = CoCreateInstance(pGuids[Index], (IBaseFilter*)this, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
+ if (SUCCEEDED(hr))
+ {
+ // store plugin
+ m_Plugins.push_back(pUnknown);
+ }
+ // close key
+ RegCloseKey(hSubKey);
+ }
+
+ // close media interfaces key
+ RegCloseKey(hKey);
+ return S_OK;
+}
+
+
HRESULT
WINAPI
COutputPin::IoProcessRoutine()
HRESULT hr;
PKSSTREAM_SEGMENT StreamSegment;
HANDLE hEvent;
- WCHAR Buffer[100];
IMediaSample * Samples[1];
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+#endif
+
// first wait for the start event to signal
WaitForSingleObject(m_hStartEvent, INFINITE);
assert(m_InterfaceHandler);
- REFERENCE_TIME Start = 0;
- REFERENCE_TIME Stop = 1;
do
{
if (m_StopInProgress)
break;
}
+ assert(m_State == KSSTATE_RUN);
+ assert(m_MemAllocator);
+
// get buffer
hr = m_MemAllocator->GetBuffer(&Sample, NULL, NULL, AM_GBF_NOWAIT);
if (FAILED(hr))
{
- OutputDebugStringW(L"OutOfSamples\n");
- m_Pin->BeginFlush();
WaitForSingleObject(m_hBufferAvailable, INFINITE);
- m_Pin->EndFlush();
- OutputDebugStringW(L"After Wait OutOfSamples\n");
// now retry again
continue;
}
&StreamSegment);
if (FAILED(hr) || !StreamSegment)
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::IoProcessRoutine KsProcessMediaSamples FAILED PinName %s hr %lx\n", m_PinName, hr);
OutputDebugStringW(Buffer);
- SetEvent(m_hStopEvent);
- m_IoThreadStarted = false;
- ExitThread(0);
+#endif
+ break;
}
// get completion event
if (SUCCEEDED(hr))
{
- LONG Length = Sample->GetActualDataLength();
- Stop += Length;
- // Sample->SetMediaTime(&Start, &Stop);
- Start = Stop;
+ assert(m_MemInputPin);
// now deliver the sample
hr = m_MemInputPin->Receive(Sample);
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"COutputPin::IoProcessRoutine PinName %s IMemInputPin::Receive hr %lx Sample %p m_MemAllocator %p\n", m_PinName, hr, Sample, m_MemAllocator);
OutputDebugStringW(Buffer);
+#endif
+
if (FAILED(hr))
- DebugBreak();
+ break;
+
Sample = NULL;
}
}while(TRUE);
if (!m_hStartEvent)
m_hStartEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
- else
- ResetEvent(m_hStartEvent);
if (!m_hStartEvent)
return E_OUTOFMEMORY;
if (!m_hStopEvent)
m_hStopEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
- else
- ResetEvent(m_hStopEvent);
if (!m_hStopEvent)
return E_OUTOFMEMORY;
if (!m_hBufferAvailable)
m_hBufferAvailable = CreateEventW(NULL, FALSE, FALSE, NULL);
- else
- ResetEvent(m_hBufferAvailable);
if (!m_hBufferAvailable)
return E_OUTOFMEMORY;
HRESULT hr = S_OK;
KSPROPERTY Property;
KSSTATE CurState;
- WCHAR Buffer[100];
ULONG BytesReturned;
-
COutputPin * pPin = (COutputPin*)Pin;
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+#endif
Property.Set = KSPROPSETID_Connection;
Property.Id = KSPROPERTY_CONNECTION_STATE;
Property.Flags = KSPROPERTY_TYPE_SET;
+ EnterCriticalSection(&pPin->m_Lock);
- if (pPin->m_State < State)
+ if (pPin->m_State <= State)
{
if (pPin->m_State == KSSTATE_STOP)
{
+ hr = pPin->InitializeIOThread();
+ if (FAILED(hr))
+ {
+ // failed to initialize I/O thread
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"Failed to initialize I/O Thread\n");
+#endif
+ LeaveCriticalSection(&pPin->m_Lock);
+ return hr;
+ }
CurState = KSSTATE_ACQUIRE;
hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_STOP KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
OutputDebugStringW(Buffer);
+#endif
+
if (FAILED(hr))
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
pPin->m_State = CurState;
if (pPin->m_State == State)
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
}
if (pPin->m_State == KSSTATE_ACQUIRE)
{
CurState = KSSTATE_PAUSE;
hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState KSSTATE_ACQUIRE KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
OutputDebugStringW(Buffer);
+#endif
+
if (FAILED(hr))
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
pPin->m_State = CurState;
if (pPin->m_State == State)
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
}
+ if (State == KSSTATE_RUN && pPin->m_State == KSSTATE_PAUSE)
+ {
+ CurState = KSSTATE_RUN;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- CurState = KSSTATE_RUN;
- hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
-
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_RUN PinName %s hr %lx\n", pPin->m_PinName, hr);
- OutputDebugStringW(Buffer);
- if (FAILED(hr))
- return hr;
-
- // signal start event
- SetEvent(pPin->m_hStartEvent);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_PAUSE KSSTATE_RUN PinName %s hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+#endif
+ if (SUCCEEDED(hr))
+ {
+ pPin->m_State = CurState;
+ // signal start event
+ SetEvent(pPin->m_hStartEvent);
+ }
+ }
- pPin->m_State = CurState;
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
}
else
{
if (pPin->m_State == KSSTATE_RUN)
{
+ // setting pending stop flag
+ pPin->m_StopInProgress = true;
+
+ // release any waiting threads
+ SetEvent(pPin->m_hBufferAvailable);
+
+ // wait until i/o thread is done
+ WaitForSingleObject(pPin->m_hStopEvent, INFINITE);
+
CurState = KSSTATE_PAUSE;
hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %u hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_RUN KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
OutputDebugStringW(Buffer);
+#endif
+
if (FAILED(hr))
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
pPin->m_State = CurState;
- if (pPin->m_State == State)
+ if (FAILED(hr))
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
}
if (pPin->m_State == KSSTATE_PAUSE)
{
CurState = KSSTATE_ACQUIRE;
hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %u hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_PAUSE KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
OutputDebugStringW(Buffer);
+#endif
+
if (FAILED(hr))
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
pPin->m_State = CurState;
if (pPin->m_State == State)
+ {
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
+ }
}
- // setting pending stop flag
- pPin->m_StopInProgress = true;
+ CloseHandle(pPin->m_hStopEvent);
+ CloseHandle(pPin->m_hStartEvent);
+ CloseHandle(pPin->m_hBufferAvailable);
+
+ /* close event handles */
+ pPin->m_hStopEvent = NULL;
+ pPin->m_hStartEvent = NULL;
+ pPin->m_hBufferAvailable = NULL;
CurState = KSSTATE_STOP;
hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
- swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_STOP PinName %s hr %lx\n", pPin->m_PinName, hr);
+#ifdef KSPROXY_TRACE
+ swprintf(Buffer, L"COutputPin_SetState Setting State CurState: KSSTATE_ACQUIRE KSSTATE_STOP PinName %s hr %lx\n", pPin->m_PinName, hr);
OutputDebugStringW(Buffer);
- if (FAILED(hr))
- return hr;
+#endif
- // release any waiting threads
- SetEvent(pPin->m_hBufferAvailable);
+ if (SUCCEEDED(hr))
+ {
+ // store state
+ pPin->m_State = CurState;
+ }
- // wait until i/o thread is done
- WaitForSingleObject(pPin->m_hStopEvent, INFINITE);
+ // unset pending stop flag
+ pPin->m_StopInProgress = false;
- pPin->m_State = CurState;
+ LeaveCriticalSection(&pPin->m_Lock);
return hr;
}
}
-
HRESULT
WINAPI
COutputPin_Constructor(
#define _FORCENAMELESSUNION
#define BUILDING_KS
#define _KSDDK_
+//#define KSPROXY_TRACE
#include <dshow.h>
//#include <streams.h>
#include <ks.h>
InterlockedDecrement(&m_Ref);
if (!m_Ref)
{
- delete this;
+ //delete this;
return 0;
}
return m_Ref;
HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages);
- CKsProxy() : m_Ref(0), m_pGraph(0), m_ReferenceClock((IReferenceClock*)this), m_FilterState(State_Stopped), m_hDevice(0), m_Plugins(), m_Pins(), m_DevicePath(0), m_hClock(0) {};
+ CKsProxy();
~CKsProxy()
{
if (m_hDevice)
LPWSTR m_DevicePath;
CLSID m_DeviceInterfaceGUID;
HANDLE m_hClock;
+ CRITICAL_SECTION m_Lock;
};
+CKsProxy::CKsProxy() : m_Ref(0),
+ m_pGraph(0),
+ m_ReferenceClock((IReferenceClock*)this),
+ m_FilterState(State_Stopped),
+ m_hDevice(0),
+ m_Plugins(),
+ m_Pins(),
+ m_DevicePath(0),
+ m_hClock(0)
+{
+ InitializeCriticalSection(&m_Lock);
+}
+
+
HRESULT
STDMETHODCALLTYPE
CKsProxy::QueryInterface(
HRESULT hr = m_Plugins[Index]->QueryInterface(refiid, Output);
if (SUCCEEDED(hr))
{
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CKsProxy::QueryInterface plugin %lu supports interface %s\n", Index, lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
+#endif
return hr;
}
}
}
-
+#ifdef KSPROXY_TRACE
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CKsProxy::QueryInterface: NoInterface for %s !!!\n", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
-
+#endif
return E_NOINTERFACE;
}
STDMETHODCALLTYPE
CKsProxy::GetPages(CAUUID *pPages)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n");
+#endif
if (!pPages)
return E_POINTER;
CKsProxy::KsGetTime(
LONGLONG* Time)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
}
CKsProxy::KsSetTime(
LONGLONG Time)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
}
CKsProxy::KsGetPhysicalTime(
LONGLONG* Time)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetPhysicalTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
}
CKsProxy::KsSetPhysicalTime(
LONGLONG Time)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetPhysicalTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
}
CKsProxy::KsGetCorrelatedTime(
KSCORRELATED_TIME* CorrelatedTime)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetCorrelatedTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
}
CKsProxy::KsSetCorrelatedTime(
KSCORRELATED_TIME* CorrelatedTime)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetCorrelatedTime\n");
+#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
}
CKsProxy::KsGetCorrelatedPhysicalTime(
KSCORRELATED_TIME* CorrelatedTime)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetCorrelatedPhysicalTime\n");
+#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
}
CKsProxy::KsSetCorrelatedPhysicalTime(
KSCORRELATED_TIME* CorrelatedTime)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetCorrelatedPhysicalTime\n");
+#endif
+
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
}
CKsProxy::KsGetResolution(
KSRESOLUTION* Resolution)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetResolution\n");
+#endif
return PerformClockProperty(KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_TYPE_GET, (PVOID)Resolution, sizeof(KSRESOLUTION));
}
CKsProxy::KsGetState(
KSSTATE* State)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetState\n");
+#endif
return PerformClockProperty(KSPROPERTY_CLOCK_STATE, KSPROPERTY_TYPE_GET, (PVOID)State, sizeof(KSSTATE));
}
KSPROPERTY Property;
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetTime\n");
+#endif
if (!pTime)
return E_POINTER;
ULONG BytesReturned;
PKSEVENT_TIME_MARK Event;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::AdviseTime\n");
+#endif
//
//FIXME locks
ULONG BytesReturned;
PKSEVENT_TIME_INTERVAL Event;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n");
+#endif
//
//FIXME locks
HRESULT hr;
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Unadvise\n");
+#endif
if (m_hClock)
{
Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetCapabilities\n");
+#endif
+
if (!pCapabilities)
return E_POINTER;
DWORD Capabilities;
HRESULT hr;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::CheckCapabilities\n");
+#endif
if (!pCapabilities)
return E_POINTER;
ULONG Index;
HRESULT hr = S_FALSE;
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
LPOLESTR pstr;
StringFromCLSID(*pFormat, &pstr);
swprintf(Buffer, L"CKsProxy::IsFormatSupported %s\n",pstr);
OutputDebugStringW(Buffer);
+#endif
if (!pFormat)
return E_POINTER;
hr = GetMediaSeekingFormats(&FormatList);
if (SUCCEEDED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy::IsFormatSupported NumFormat %lu\n",FormatList->Count);
OutputDebugStringW(Buffer);
+#endif
//iterate through format list
pGuid = (LPGUID)(FormatList + 1);
{
// plugin does not support interface
hr = S_FALSE;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n");
+#endif
break;
}
HRESULT hr;
ULONG Index;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n");
+#endif
if (!pFormat)
return E_POINTER;
Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetTimeFormat\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
{
GUID Format;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n");
+#endif
if (FAILED(QueryPreferredFormat(&Format)))
return S_FALSE;
Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
Property.Flags = KSPROPERTY_TYPE_SET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetTimeFormat\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
Property.Id = KSPROPERTY_MEDIASEEKING_DURATION;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetDuration\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pDuration, sizeof(LONGLONG), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
Property.Id = KSPROPERTY_MEDIASEEKING_STOPPOSITION;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetStopPosition\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pStop, sizeof(LONGLONG), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
Property.Id = KSPROPERTY_MEDIASEEKING_POSITION;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetCurrentPosition\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pCurrent, sizeof(LONGLONG), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
Property.Property.Id = KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT;
Property.Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n");
+#endif
if (!pTargetFormat)
{
Positions.Stop = *pStop;
Positions.StopFlags = (KS_SEEKING_FLAGS)dwStopFlags;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetPositions\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Positions, sizeof(KSPROPERTY_POSITIONS), &BytesReturned);
if (SUCCEEDED(hr))
{
HRESULT hr;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPositions\n");
+#endif
hr = GetCurrentPosition(pCurrent);
if (SUCCEEDED(hr))
Property.Id = KSPROPERTY_MEDIASEEKING_AVAILABLE;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetAvailable\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Media, sizeof(KSPROPERTY_MEDIAAVAILABLE), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
CKsProxy::SetRate(
double dRate)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetRate\n");
+#endif
return E_NOTIMPL;
}
CKsProxy::GetRate(
double *pdRate)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetRate\n");
+#endif
return E_NOTIMPL;
}
Property.Id = KSPROPERTY_MEDIASEEKING_PREROLL;
Property.Flags = KSPROPERTY_TYPE_GET;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPreroll\n");
+#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pllPreroll, sizeof(LONGLONG), &BytesReturned);
if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
HRESULT hr;
PIN_DIRECTION PinDirection;
KSPIN_COMMUNICATION Communication;
- WCHAR Buffer[100];
+
for(Index = 0; Index < m_Pins.size(); Index++)
{
}
}
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
swprintf(Buffer, L"CKsProxy::GetMiscFlags stub Flags %x\n", Flags);
OutputDebugStringW(Buffer);
+#endif
+
return Flags;
}
ULONG DataLength,
ULONG* BytesReturned)
{
- assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsProperty\n");
+#endif
+
+ assert(m_hDevice != 0);
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
}
ULONG DataLength,
ULONG* BytesReturned)
{
- assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsMethod\n");
+#endif
+
+ assert(m_hDevice != 0);
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
}
ULONG DataLength,
ULONG* BytesReturned)
{
- assert(m_hDevice != 0);
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsEvent\n");
+#endif
+
+ assert(m_hDevice != 0);
if (EventLength)
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
else
{
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Set\n");
+#endif
if (cbInstanceData)
{
{
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Get\n");
+#endif
if (cbInstanceData)
{
KSPROPERTY Property;
ULONG BytesReturned;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QuerySupported\n");
+#endif
Property.Set = guidPropSet;
Property.Id = dwPropID;
{
HRESULT hr;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n");
+#endif
*Interface = NULL;
CKsProxy::KsAddAggregate(
IN REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n");
+#endif
return E_NOTIMPL;
}
CKsProxy::KsRemoveAggregate(
REFGUID AggregateClass)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CKsProxy::IsDirty()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n");
DebugBreak();
+#endif
return E_NOTIMPL;
}
ULONG PinId;
LPOLESTR pMajor, pSub, pFormat;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Load\n");
+#endif
#if 0
ULONG Version = ReadInt(pStm, hr);
IStream *pStm,
BOOL fClearDirty)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Save Notimplemented\n");
+#endif
+
return E_NOTIMPL;
}
CKsProxy::GetSizeMax(
ULARGE_INTEGER *pcbSize)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n");
DebugBreak();
+#endif
+
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink)
{
-
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::DeviceInfo\n");
+#endif
if (!m_DevicePath)
{
STDMETHODCALLTYPE
CKsProxy::Reassociate(void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Reassociate\n");
+#endif
if (!m_DevicePath || m_hDevice)
{
STDMETHODCALLTYPE
CKsProxy::Disassociate(void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Disassociate\n");
+#endif
if (!m_hDevice)
return E_HANDLE;
STDMETHODCALLTYPE
CKsProxy::KsGetClockHandle()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n");
+#endif
+
return m_hClock;
}
STDMETHODCALLTYPE
CKsProxy::KsGetObjectHandle()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n");
+#endif
+
return m_hDevice;
}
STDMETHODCALLTYPE
CKsProxy::InitNew( void)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::InitNew\n");
+#endif
+
return S_OK;
}
KSPIN_DATAFLOW DataFlow;
KSPIN_COMMUNICATION Communication;
HRESULT hr;
- WCHAR Buffer[100];
LPWSTR PinName;
IPin * pPin;
ULONG InputPin = 0;
// store pins
m_Pins.push_back(pPin);
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
swprintf(Buffer, L"Index %lu DataFlow %lu Name %s\n", Index, DataFlow, PinName);
OutputDebugStringW(Buffer);
+#endif
+
}
return S_OK;
CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
{
HRESULT hr;
- WCHAR Buffer[100];
VARIANT varName;
LPGUID pGuid;
ULONG NumGuids = 0;
HDEVINFO hList;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
OutputDebugStringW(L"CKsProxy::Load\n");
+#endif
// read device path
varName.vt = VT_BSTR;
if (FAILED(hr))
{
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy::Load Read %lx\n", hr);
OutputDebugStringW(Buffer);
+#endif
return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
}
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"DevicePath: ");
OutputDebugStringW(varName.bstrVal);
OutputDebugStringW(L"\n");
+#endif
// create device list
hList = SetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL);
if (m_hDevice == INVALID_HANDLE_VALUE)
{
// failed to open device
+#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy:: failed to open device with %lx\n", GetLastError());
OutputDebugStringW(Buffer);
-
+#endif
return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
}
STDMETHODCALLTYPE
CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Save\n");
+#endif
return E_NOTIMPL;
}
CKsProxy::GetClassID(
CLSID *pClassID)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetClassID\n");
+#endif
CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID));
return S_OK;
STDMETHODCALLTYPE
CKsProxy::Stop()
{
- OutputDebugStringW(L"CKsProxy::Stop : NotImplemented\n");
- return E_NOTIMPL;
+ HRESULT hr;
+
+#ifdef KSPROXY_TRACE
+ OutputDebugStringW(L"CKsProxy::Stop\n");
+#endif
+
+ EnterCriticalSection(&m_Lock);
+
+ hr = SetPinState(KSSTATE_STOP);
+ if (SUCCEEDED(hr))
+ m_FilterState = State_Stopped;
+
+ LeaveCriticalSection(&m_Lock);
+
+ return hr;
}
HRESULT
{
HRESULT hr = S_OK;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Pause\n");
+#endif
- if (m_FilterState == State_Stopped)
- {
- hr = SetPinState(KSSTATE_PAUSE);
- if (FAILED(hr))
- return hr;
+ EnterCriticalSection(&m_Lock);
+ if (m_FilterState == State_Running)
+ {
+ hr = SetPinState(KSSTATE_STOP);
}
+ if (SUCCEEDED(hr))
+ {
+ if (m_FilterState == State_Stopped)
+ {
+ hr = SetPinState(KSSTATE_PAUSE);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ m_FilterState = State_Paused;
- m_FilterState = State_Paused;
+ LeaveCriticalSection(&m_Lock);
return hr;
}
{
HRESULT hr;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Run\n");
+#endif
+
+ EnterCriticalSection(&m_Lock);
if (m_FilterState == State_Stopped)
{
+ LeaveCriticalSection(&m_Lock);
// setting filter state to pause
hr = Pause();
if (FAILED(hr))
return hr;
+ EnterCriticalSection(&m_Lock);
assert(m_FilterState == State_Paused);
}
hr = SetPinState(KSSTATE_RUN);
- if (FAILED(hr))
- return hr;
- m_FilterState = State_Running;
+ if (SUCCEEDED(hr))
+ {
+ m_FilterState = State_Running;
+ }
+
+ LeaveCriticalSection(&m_Lock);
return hr;
}
// now set state
hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesReturned);
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
swprintf(Buffer, L"CKsProxy::SetPinState Index %u State %u hr %lx\n", Index, State, hr);
OutputDebugStringW(Buffer);
+#endif
if (FAILED(hr))
return hr;
DWORD dwMilliSecsTimeout,
FILTER_STATE *State)
{
+ if (!State)
+ return E_POINTER;
+
*State = m_FilterState;
return S_OK;
}
ULONG BytesReturned;
PIN_DIRECTION PinDir;
-// Plug In Distributor: IKsClock
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetSyncSource\n");
+#endif
// FIXME
// need locks
}
m_ReferenceClock = pClock;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetSyncSource done\n");
+#endif
return S_OK;
}
CKsProxy::GetSyncSource(
IReferenceClock **pClock)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetSyncSource\n");
+#endif
if (!pClock)
return E_POINTER;
CKsProxy::EnumPins(
IEnumPins **ppEnum)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::EnumPins\n");
+#endif
+
return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum);
}
{
ULONG PinId;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::FindPin\n");
+#endif
if (!ppPin)
return E_POINTER;
if (!pInfo)
return E_POINTER;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n");
+#endif
pInfo->achName[0] = L'\0';
pInfo->pGraph = m_pGraph;
IFilterGraph *pGraph,
LPCWSTR pName)
{
- OutputDebugStringW(L"CKsProxy::JoinFilterGraph\n");
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CKsProxy::JoinFilterGraph pName %s pGraph %p m_Ref %u\n", pName, pGraph, m_Ref);
+ OutputDebugStringW(Buffer);
+#endif
if (pGraph)
{
CKsProxy::QueryVendorInfo(
LPWSTR *pVendorInfo)
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n");
+#endif
return StringFromCLSID(CLSID_Proxy, pVendorInfo);
}
STDMETHODCALLTYPE
CKsProxy::Register()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n");
+#endif
+
return E_NOTIMPL;
}
STDMETHODCALLTYPE
CKsProxy::Unregister()
{
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n");
+#endif
return E_NOTIMPL;
}
REFIID riid,
LPVOID * ppv)
{
+#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
LPOLESTR pstr;
StringFromCLSID(riid, &pstr);
swprintf(Buffer, L"CKsProxy_Constructor pUnkOuter %p riid %s\n", pUnkOuter, pstr);
OutputDebugStringW(Buffer);
+#endif
CKsProxy * handler = new CKsProxy();
CKsQualityForwarder::KsFlushClient(
IN IKsPin *Pin)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("UNIMPLEMENTED\n");
+#endif
}
HRESULT
HRESULT hr;
HANDLE handle;
+#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsQualityForwarder_Constructor\n");
+#endif
// open default clock
hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle);
if (hr != NOERROR)
{
+#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+#endif
return hr;
}
+++ /dev/null
-LIBRARY "idndl.dll"
-
-EXPORTS
- DownlevelGetLocaleScripts = DownlevelGetLocaleScripts@12 @1
- DownlevelGetStringScripts@20 = kernel32.GetStringScripts @2
- DownlevelVerifyScripts@20 = kernel32.VerifyScripts @3
</group>
<redefine name="WINVER">0x600</redefine>
<file>idndl.cpp</file>
- <importlibrary definition="idndl-$(ARCH).def" />
+ <importlibrary definition="idndl.spec" />
</module>
--- /dev/null
+
+ 1 stdcall DownlevelGetLocaleScripts(ptr ptr long) DownlevelGetLocaleScripts
+ 2 stdcall DownlevelGetStringScripts(long ptr long ptr long) kernel32.GetStringScripts
+ 3 stdcall DownlevelVerifyScripts(long ptr long ptr long) kernel32.VerifyScripts
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id$
- *
+/*
* PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/acledit.c
* PURPOSE: Access Control List Editor
-/* $Id$
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/stubs.c
if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
if (psmd->uId == FCIDM_MENU_FAVORITES)
infoPtr->dwFlags |= SMIF_DROPCASCADE;
- else
- infoPtr->dwFlags |= SMIF_TRACKPOPUP;
+ else{
+ infoPtr->dwFlags |= SMIF_TRACKPOPUP;}
if ((infoPtr->dwMask & SMIM_ICON) != 0)
infoPtr->iIcon = -1;
}
INT Height,
UINT Planes,
UINT BitsPixel,
- PCVOID pUnsafeBits)
+ CONST VOID* pUnsafeBits)
{
/* FIXME some part should be done in user mode */
if (Width && Height)
typedef VOID
(WINAPI *PINTERFACE_DEREFERENCE)(
PVOID Context);
-#define DDKAPI __stdcall // FIXME
#include <ntndk.h>
#include <hidusage.h>
#include <hidclass.h>
pTeb->HasFiberData = FALSE;
/* free the fiber */
- if (pTeb->NtTib.FiberData != NULL)
+ if(pTeb->NtTib.FiberData != NULL)
{
RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData);
}
<define name="wcsnicmp">_wcsnicmp</define>
<define name="_SETUPAPI_" />
+ <define name="_CFGMGR32_" />
<library>pnp_client</library>
<library>uuid</library>
<library>wine</library>
#include <pseh/pseh2.h>
-/* This hack definition is necessary as long as setupapi
- depends on Wine "compatibility" headers */
-typedef ULONG RESOURCEID;
-typedef RESOURCEID *PRESOURCEID;
-
#include <pnp_c.h>
#include "rpc_private.h"
#include "resource.h"
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057
#define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
+#define CMP_MAGIC 0x01234567
+
struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */
{
LIST_ENTRY ListEntry;
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassUnload(PVOID ClassData)
{
PBATTERY_CLASS_DATA BattClass = ClassData;
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassSystemControl(PVOID ClassData,
PVOID WmiLibContext,
PDEVICE_OBJECT DeviceObject,
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassQueryWmiDataBlock(PVOID ClassData,
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassStatusNotify(PVOID ClassData)
{
PBATTERY_CLASS_DATA BattClass = ClassData;
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
PVOID *ClassData)
{
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassIoctl(PVOID ClassData,
PIRP Irp)
{
<directory name="cmbatt">
<xi:include href="cmbatt/cmbatt.rbuild" />
</directory>
+<directory name="compbatt">
+ <xi:include href="compbatt/compbatt.rbuild" />
+</directory>
</group>
<module name="acpi" type="kernelmodedriver" installbase="system32/drivers" installname="acpi.sys" allowwarnings="true">
</directory>
<file>osl.c</file>
<file>acpienum.c</file>
+ <file>eval.c</file>
<file>interface.c</file>
<file>pnp.c</file>
<file>power.c</file>
LIST_HEAD(acpi_bus_event_list);
//DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
KEVENT AcpiEventQueue;
+KDPC event_dpc;
static int
Event Management
-------------------------------------------------------------------------- */
+void
+acpi_bus_generate_event_dpc(PKDPC Dpc,
+ PVOID DeferredContext,
+ PVOID SystemArgument1,
+ PVOID SystemArgument2)
+{
+ struct acpi_bus_event *event = SystemArgument1;
+ KIRQL OldIrql;
+
+ KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
+ list_add_tail(&event->node, &acpi_bus_event_list);
+ KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
+
+ KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
+}
int
acpi_bus_generate_event (
int data)
{
struct acpi_bus_event *event = NULL;
- //unsigned long flags = 0;
- KIRQL OldIrql;
- DPRINT1("acpi_bus_generate_event");
+ DPRINT("acpi_bus_generate_event");
if (!device)
return_VALUE(AE_BAD_PARAMETER);
event->type = type;
event->data = data;
- //spin_lock_irqsave(&acpi_bus_event_lock, flags);
- KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
- list_add_tail(&event->node, &acpi_bus_event_list);
- KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
- //spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
-
- KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
- //wake_up_interruptible(&acpi_bus_event_queue);
+ if (!KeInsertQueueDpc(&event_dpc, event, NULL))
+ ExFreePool(event);
return_VALUE(0);
}
//DECLARE_WAITQUEUE(wait, current);
- DPRINT1("acpi_bus_receive_event");
+ DPRINT("acpi_bus_receive_event");
if (!event)
return AE_BAD_PARAMETER;
case ACPI_BUS_TYPE_SYSTEM:
sprintf(device->pnp.bus_id, "%s", "ACPI");
break;
+ case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_POWER_BUTTON:
sprintf(device->pnp.bus_id, "%s", "PWRF");
break;
+ case ACPI_BUS_TYPE_SLEEP_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON:
sprintf(device->pnp.bus_id, "%s", "SLPF");
break;
hid = ACPI_THERMAL_HID;
break;
case ACPI_BUS_TYPE_POWER_BUTTON:
+ hid = ACPI_BUTTON_HID_POWER;
+ break;
+ case ACPI_BUS_TYPE_POWER_BUTTONF:
hid = ACPI_BUTTON_HID_POWERF;
break;
case ACPI_BUS_TYPE_SLEEP_BUTTON:
+ hid = ACPI_BUTTON_HID_SLEEP;
+ break;
+ case ACPI_BUS_TYPE_SLEEP_BUTTONF:
hid = ACPI_BUTTON_HID_SLEEPF;
break;
}
*/
switch (type) {
case ACPI_BUS_TYPE_POWER_BUTTON:
+ case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON:
+ case ACPI_BUS_TYPE_SLEEP_BUTTONF:
break;
default:
status = AcpiAttachData(device->handle,
if (!root)
return_VALUE(AE_NOT_FOUND);
- /*
- * Enumerate all fixed-feature devices.
+ /* If ACPI_FADT_POWER_BUTTON is set, then a control
+ * method power button is present. Otherwise, a fixed
+ * power button is present.
*/
if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON)
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTON);
+ else
+ {
+ /* Enable the fixed power button so we get notified if it is pressed */
+ AcpiWriteBitRegister(ACPI_BITREG_POWER_BUTTON_ENABLE, 1);
+ result = acpi_bus_add(&device, acpi_root,
+ NULL, ACPI_BUS_TYPE_POWER_BUTTONF);
+ }
+
+ /* This one is a bit more complicated and we do it wrong
+ * right now. If ACPI_FADT_SLEEP_BUTTON is set but no
+ * device object is present then no sleep button is present, but
+ * if the flags is clear and there is no device object then it is
+ * a fixed sleep button. If the flag is set and there is a device object
+ * the we have a control method button just like above.
+ */
if (AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON)
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
+ else
+ {
+ /* Enable the fixed sleep button so we get notified if it is pressed */
+ AcpiWriteBitRegister(ACPI_BITREG_SLEEP_BUTTON_ENABLE, 1);
+
+ result = acpi_bus_add(&device, acpi_root,
+ NULL, ACPI_BUS_TYPE_SLEEP_BUTTONF);
+ }
return_VALUE(result);
}
Initialization/Cleanup
-------------------------------------------------------------------------- */
-static int
-acpi_bus_init_irq (void)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OBJECT arg = {ACPI_TYPE_INTEGER};
- ACPI_OBJECT_LIST arg_list = {1, &arg};
- //char *message = NULL;
-
- DPRINT("acpi_bus_init_irq");
-
- /*
- * Let the system know what interrupt model we are using by
- * evaluating the \_PIC object, if exists.
- */
-
- //switch (acpi_irq_model) {
- //case ACPI_IRQ_MODEL_PIC:
- // message = "PIC";
- // break;
- //case ACPI_IRQ_MODEL_IOAPIC:
- // message = "IOAPIC";
- // break;
- //case ACPI_IRQ_MODEL_IOSAPIC:
- // message = "IOSAPIC";
- // break;
- //default:
- // DPRINT1("Unknown interrupt routing model\n");
- // return_VALUE(AE_NOT_FOUND);
- //}
-
- //DPRINT("Using %s for interrupt routing\n", message);
-
- //arg.Integer.Value = acpi_irq_model;
-
- //status = AcpiEvaluateObject(NULL, "\\_PIC", &arg_list, NULL);
- //if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
- // ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PIC\n"));
- // return_VALUE(AE_NOT_FOUND);
- //}
-
- return_VALUE(0);
-}
-
-
-//void
-//acpi_early_init (void)
-//{
-// ACPI_STATUS status = AE_OK;
-//
-// DPRINT("acpi_early_init");
-//
-// if (acpi_disabled)
-// return_VOID;
-//
- /* enable workarounds, unless strict ACPI spec. compliance */
-// if (!acpi_strict)
-// acpi_gbl_enable_interpreter_slack = TRUE;
-//
-// status = acpi_reallocate_root_table();
-// if (ACPI_FAILURE(status)) {
-// printk(KERN_ERR PREFIX
-// "Unable to reallocate ACPI tables\n");
-// goto error0;
-// }
-//
-// status = acpi_initialize_subsystem();
-// if (ACPI_FAILURE(status)) {
-// printk(KERN_ERR PREFIX
-// "Unable to initialize the ACPI Interpreter\n");
-// goto error0;
-// }
-//
-// status = acpi_load_tables();
-// if (ACPI_FAILURE(status)) {
-// printk(KERN_ERR PREFIX
-// "Unable to load the System Description Tables\n");
-// goto error0;
-// }
-//
-//#ifdef CONFIG_X86
-// if (!acpi_ioapic) {
-// /* compatible (0) means level (3) */
-// if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
-// acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
-// acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
-// }
-// /* Set PIC-mode SCI trigger type */
-// acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
-// (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
-// } else {
-// /*
-// * now that acpi_gbl_FADT is initialized,
-// * update it with result from INT_SRC_OVR parsing
-// */
-// acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
-// }
-//#endif
-//
-// status =
-// acpi_enable_subsystem(~
-// (ACPI_NO_HARDWARE_INIT |
-// ACPI_NO_ACPI_ENABLE));
-// if (ACPI_FAILURE(status)) {
-// printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
-// goto error0;
-// }
-//
-// return;
-//
-// error0:
-// disable_acpi();
-// return;
-//}
-
int
acpi_bus_init (void)
{
DPRINT("acpi_bus_init");
+ KeInitializeDpc(&event_dpc, acpi_bus_generate_event_dpc, NULL);
+
status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION);
if (ACPI_FAILURE(status)) {
DPRINT1("Unable to start the ACPI Interpreter\n");
/* Initialize sleep structures */
//acpi_sleep_init();
- /*
- * Get the system interrupt model and evaluate \_PIC.
- */
- result = acpi_bus_init_irq();
- if (result)
- goto error1;
-
/*
* Register the for all standard device notifications.
*/
if (result)
goto error2;
+
/*
* Enumerate devices in the ACPI namespace.
*/
if (result)
DPRINT1("acpi_bus_scan failed\n");
- //acpi_motherboard_init();
return_VALUE(0);
/* Mimic structured exception handling */
UINT8 type;
unsigned long pushed;
};
+
+struct acpi_device *power_button;
+struct acpi_device *sleep_button;
+struct acpi_device *lid_button;
+
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
ACPI_STATUS status = AE_OK;
struct acpi_button *button = NULL;
- static struct acpi_device *power_button;
- static struct acpi_device *sleep_button;
- static struct acpi_device *lid_button;
-
ACPI_FUNCTION_TRACE("acpi_button_add");
if (!device)
#include <acpi_bus.h>
#include <acpi_drivers.h>
+#include <initguid.h>
+#include <poclass.h>
+
#define NDEBUG
#include <debug.h>
{
NTSTATUS status;
POWER_STATE state;
+ struct acpi_device *device = NULL;
PAGED_CODE ();
+ if (DeviceData->AcpiHandle)
+ acpi_bus_get_device(DeviceData->AcpiHandle, &device);
+
//
// NB: Because we are a bus enumerator, we have no one to whom we could
// defer these irps. Therefore we do not pass them down but merely
switch (IrpStack->MinorFunction) {
case IRP_MN_START_DEVICE:
-
//
// Here we do what ever initialization and ``turning on'' that is
// required to allow others to access this device.
break;
}
+ DeviceData->InterfaceName.Length = 0;
+
+ if (!device)
+ {
+ IoRegisterDeviceInterface(DeviceData->Common.Self,
+ &GUID_DEVICE_SYS_BUTTON,
+ NULL,
+ &DeviceData->InterfaceName);
+ }
+ else if (device->flags.hardware_id &&
+ strstr(device->pnp.hardware_id, ACPI_THERMAL_HID))
+ {
+ IoRegisterDeviceInterface(DeviceData->Common.Self,
+ &GUID_DEVICE_THERMAL_ZONE,
+ NULL,
+ &DeviceData->InterfaceName);
+ }
+ else if (device->flags.hardware_id &&
+ strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID))
+ {
+ IoRegisterDeviceInterface(DeviceData->Common.Self,
+ &GUID_DEVICE_LID,
+ NULL,
+ &DeviceData->InterfaceName);
+ }
+ else if (device->flags.hardware_id &&
+ strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))
+ {
+ IoRegisterDeviceInterface(DeviceData->Common.Self,
+ &GUID_DEVICE_PROCESSOR,
+ NULL,
+ &DeviceData->InterfaceName);
+ }
+
+ if (DeviceData->InterfaceName.Length != 0)
+ IoSetDeviceInterfaceState(&DeviceData->InterfaceName, TRUE);
+
state.DeviceState = PowerDeviceD0;
PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state);
DeviceData->Common.DevicePowerState = PowerDeviceD0;
case IRP_MN_STOP_DEVICE:
+ if (DeviceData->InterfaceName.Length != 0)
+ IoSetDeviceInterfaceState(&DeviceData->InterfaceName, FALSE);
+
//
// Here we shut down the device and give up and unmap any resources
// we acquired for the device.
deviceCapabilities->UniqueID = device->flags.unique_id;
deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui;
deviceCapabilities->Address = device->pnp.bus_address;
- deviceCapabilities->RawDeviceOK = FALSE;
}
- else
+
+ if (!device ||
+ (device->flags.hardware_id &&
+ (strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID) ||
+ strstr(device->pnp.hardware_id, ACPI_THERMAL_HID) ||
+ strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))))
{
- deviceCapabilities->EjectSupported = FALSE;
- deviceCapabilities->HardwareDisabled = FALSE;
- deviceCapabilities->Removable = FALSE;
- deviceCapabilities->SurpriseRemovalOK = FALSE;
- deviceCapabilities->UniqueID = FALSE;
- deviceCapabilities->NoDisplayInUI = FALSE;
- deviceCapabilities->Address = 0;
-
- /* The ACPI driver will run fixed buttons */
- deviceCapabilities->RawDeviceOK = TRUE;
+ /* Allow ACPI to control the device if it is a lid button,
+ * a thermal zone, a processor, or a fixed feature button */
+ deviceCapabilities->RawDeviceOK = TRUE;
}
deviceCapabilities->SilentInstall = FALSE;
<file>cmbpnp.c</file>
<file>cmbwmi.c</file>
<file>cmbatt.rc</file>
+ <pch>cmbatt.h</pch>
</module>
NTSTATUS
NTAPI
-CmBattGetPsrData(PDEVICE_OBJECT DeviceObject,
- PULONG PsrData)
+CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer,
+ IN ULONG InputBufferLength,
+ IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
+ IN ULONG OutputBufferLength)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ PIRP Irp;
+ NTSTATUS Status;
+ KEVENT Event;
+ IO_STATUS_BLOCK IoStatusBlock;
+ PAGED_CODE();
+
+ /* Initialize our wait event */
+ KeInitializeEvent(&Event, SynchronizationEvent, 0);
+
+ /* Allocate the IRP */
+ Irp = IoBuildDeviceIoControlRequest(IoControlCode,
+ DeviceObject,
+ InputBuffer,
+ InputBufferLength,
+ OutputBuffer,
+ OutputBufferLength,
+ 0,
+ &Event,
+ &IoStatusBlock);
+ if (!Irp)
+ {
+ /* No IRP, fail */
+ if (CmBattDebug & 0x4C)
+ DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
+ return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+ /* Call ACPI */
+ if (CmBattDebug & 0x40)
+ DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n",
+ Irp, KeGetCurrentThread());
+ Status = IoCallDriver(DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ /* Wait for completion */
+ KeWaitForSingleObject(&Event,
+ Executive,
+ KernelMode,
+ FALSE,
+ NULL);
+ Status = Irp->IoStatus.Status;
+ }
+
+ /* Check if caller wanted output */
+ if (OutputBuffer)
+ {
+ /* Make sure it's valid ACPI output buffer */
+ if ((OutputBuffer->Signature != ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE) ||
+ !(OutputBuffer->Count))
+ {
+ /* It isn't, so set failure code */
+ Status = STATUS_ACPI_INVALID_DATA;
+ }
+ }
+
+ /* Return status */
+ if (CmBattDebug & 0x40)
+ DbgPrint("CmBattSendDownStreamIrp: Irp %x completed %x! [Tid] %x\n",
+ Irp, Status, KeGetCurrentThread());
+ return Status;
}
NTSTATUS
NTAPI
-CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
- PACPI_BIF_DATA BifData)
+CmBattGetPsrData(IN PDEVICE_OBJECT DeviceObject,
+ OUT PULONG PsrData)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+ ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+ ACPI_EVAL_INPUT_BUFFER InputBuffer;
+ PAGED_CODE();
+ if (CmBattDebug & 0x40)
+ DbgPrint("CmBattGetPsrData: Entered with Pdo %x Tid %x\n",
+ DeviceObject, KeGetCurrentThread());
+
+ /* Initialize to zero */
+ ASSERT(PsrData != NULL);
+ *PsrData = 0;
+
+ /* Request the _PSR method */
+ *(PULONG)InputBuffer.MethodName = 'RSP_';
+ InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+ /* Send it to ACPI */
+ Status = CmBattSendDownStreamIrp(DeviceObject,
+ IOCTL_ACPI_EVAL_METHOD,
+ &InputBuffer,
+ sizeof(InputBuffer),
+ &OutputBuffer,
+ sizeof(OutputBuffer));
+ if (NT_SUCCESS(Status))
+ {
+ /* Read the result */
+ Status = GetDwordElement(OutputBuffer.Argument, PsrData);
+ if (CmBattDebug & 0x440)
+ DbgPrint("CmBattGetPsrData: _PSR method returned %x \n", *PsrData);
+}
+ else if (CmBattDebug & 0x44C)
+ {
+ /* Failure */
+ DbgPrint("CmBattGetPsrData: Failed _PSR method - Status (0x%x)\n", Status);
+ }
+
+ /* Return status */
+ return Status;
}
NTSTATUS
NTAPI
-CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
- PACPI_BST_DATA BstData)
+CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject,
+ OUT PULONG StaData)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+ ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+ ACPI_EVAL_INPUT_BUFFER InputBuffer;
+ PAGED_CODE();
+ if (CmBattDebug & 0x40)
+ DbgPrint("CmBattGetStaData: Entered with Pdo %x Tid %x\n",
+ DeviceObject, KeGetCurrentThread());
+
+ /* Initialize to zero */
+ ASSERT(StaData != NULL);
+ *StaData = 0;
+
+ /* Request the _PSR method */
+ *(PULONG)InputBuffer.MethodName = 'ATS_';
+ InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+ /* Send it to ACPI */
+ Status = CmBattSendDownStreamIrp(DeviceObject,
+ IOCTL_ACPI_EVAL_METHOD,
+ &InputBuffer,
+ sizeof(InputBuffer),
+ &OutputBuffer,
+ sizeof(OutputBuffer));
+ if (NT_SUCCESS(Status))
+ {
+ /* Read the result */
+ Status = GetDwordElement(OutputBuffer.Argument, StaData);
+ if (CmBattDebug & 0x440)
+ DbgPrint("CmBattGetStaData: _STA method returned %x \n", *StaData);
}
+ else if (CmBattDebug & 0x44C)
+ {
+ /* Failure */
+ DbgPrint("CmBattGetStaData: Failed _STA method - Status (0x%x)\n", Status);
+ Status = STATUS_NO_SUCH_DEVICE;
+ }
+
+ /* Return status */
+ return Status;
+}
NTSTATUS
NTAPI
-CmBattGetStaData(PDEVICE_OBJECT DeviceObject,
- PULONG StaData)
+CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject,
+ OUT PULONG UniqueId)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+ ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
+ ACPI_EVAL_INPUT_BUFFER InputBuffer;
+ PAGED_CODE();
+ if (CmBattDebug & 0x40)
+ DbgPrint("CmBattGetUniqueId: Entered with Pdo %x Tid %x\n",
+ DeviceObject, KeGetCurrentThread());
+
+ /* Initialize to zero */
+ ASSERT(UniqueId != NULL);
+ *UniqueId = 0;
+
+ /* Request the _PSR method */
+ *(PULONG)InputBuffer.MethodName = 'DIU_';
+ InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
+
+ /* Send it to ACPI */
+ Status = CmBattSendDownStreamIrp(DeviceObject,
+ IOCTL_ACPI_EVAL_METHOD,
+ &InputBuffer,
+ sizeof(InputBuffer),
+ &OutputBuffer,
+ sizeof(OutputBuffer));
+ if (NT_SUCCESS(Status))
+ {
+ /* Read the result */
+ Status = GetDwordElement(OutputBuffer.Argument, UniqueId);
+ if (CmBattDebug & 0x440)
+ DbgPrint("CmBattGetUniqueId: _UID method returned %x \n", *UniqueId);
+}
+ else if (CmBattDebug & 0x44C)
+ {
+ /* Failure */
+ DbgPrint("CmBattGetUniqueId: Failed _UID method - Status (0x%x)\n", Status);
+ Status = STATUS_NO_SUCH_DEVICE;
+ }
+
+ /* Return status */
+ return Status;
}
NTSTATUS
NTAPI
-CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject,
- PULONG UniqueId)
+CmBattSetTripPpoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG AlarmValue)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status;
+ ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER InputBuffer;
+ PAGED_CODE();
+ if (CmBattDebug & 0x440)
+ DbgPrint("CmBattSetTripPpoint: _BTP Alarm Value %x Device %x Tid %x\n",
+ AlarmValue, DeviceExtension->DeviceId, KeGetCurrentThread);
+
+ /* Request the _BTP method */
+ *(PULONG)InputBuffer.MethodName = 'PTB_';
+ InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE;
+ InputBuffer.IntegerArgument = AlarmValue;
+
+ /* Send it to ACPI */
+ Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice,
+ IOCTL_ACPI_EVAL_METHOD,
+ &InputBuffer,
+ sizeof(InputBuffer),
+ NULL,
+ 0);
+ if (!(NT_SUCCESS(Status)) && (CmBattDebug & 0x440))
+ DbgPrint("CmBattSetTripPpoint: Failed _BTP method on device %x - Status (0x%x)\n",
+ DeviceExtension->DeviceId, Status);
+
+ /* Return status */
+ return Status;
}
NTSTATUS
NTAPI
-CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension,
- ULONG AlarmValue)
+CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ PACPI_BIF_DATA BifData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
NTSTATUS
NTAPI
-CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
- IN ULONG IoControlCode,
- IN PVOID InputBuffer,
- IN ULONG InputBufferLength,
- IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
- IN ULONG OutputBufferLength)
+CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ PACPI_BST_DATA BstData)
{
PIRP Irp;
NTSTATUS Status;
DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
-
+
/* Call ACPI */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n", Irp, KeGetCurrentThread());
--- /dev/null
+/*
+ * PROJECT: ReactOS Composite Battery Driver
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/drivers/bus/acpi/compbatt/compbatt.c
+ * PURPOSE: Main Initialization Code and IRP Handling
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* GLOBALS ********************************************************************/
+
+ULONG CompBattDebug;
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+CompBattOpenClose(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattSystemControl(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattMonitorIrpComplete(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PKEVENT Event)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_ENTRY BatteryData)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattIoctl(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+ OUT PULONG Tag)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattSetStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG BatteryTag,
+ IN PBATTERY_NOTIFY BatteryNotify)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG Tag)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattQueryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG Tag,
+ IN PBATTERY_STATUS BatteryStatus)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInformation,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetEstimatedTime(OUT PULONG Time,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION FdoExtension,
+ IN ULONG Tag,
+ IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
+ IN OPTIONAL LONG AtRate,
+ IN PVOID Buffer,
+ IN ULONG BufferLength,
+ OUT PULONG ReturnedLength)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+DriverEntry(IN PDRIVER_OBJECT DriverObject,
+ IN PUNICODE_STRING RegistryPath)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
--- /dev/null
+/*
+ * PROJECT: ReactOS Composite Battery Driver
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/drivers/bus/acpi/compbatt/compbatt.h
+ * PURPOSE: Main Header File
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+#include <ntddk.h>
+#include <initguid.h>
+#include <batclass.h>
+#include <debug.h>
+
+typedef struct _COMPBATT_BATTERY_ENTRY
+{
+ LIST_ENTRY BatteryLink;
+ IO_REMOVE_LOCK RemoveLock;
+ PDEVICE_OBJECT DeviceObject;
+ PIRP Irp;
+ WORK_QUEUE_ITEM WorkItem;
+ BOOLEAN WaitFlag;
+ BATTERY_WAIT_STATUS WaitStatus;
+ union
+ {
+ BATTERY_WAIT_STATUS WorkerWaitStatus;
+ BATTERY_STATUS WorkerStatus;
+ };
+ ULONG Tag;
+ ULONG Flags;
+ BATTERY_INFORMATION BatteryInformation;
+ BATTERY_STATUS BatteryStatus;
+ ULONGLONG InterruptTime;
+ UNICODE_STRING BatteryName;
+} COMPBATT_BATTERY_ENTRY, *PCOMPBATT_BATTERY_ENTRY;
+
+typedef struct _COMPBATT_DEVICE_EXTENSION
+{
+ PVOID ClassData;
+ ULONG NextTag;
+ LIST_ENTRY BatteryList;
+ FAST_MUTEX Lock;
+ ULONG Tag;
+ ULONG Flags;
+ BATTERY_INFORMATION BatteryInformation;
+ BATTERY_STATUS BatteryStatus;
+ ULONGLONG InterruptTime;
+ POWER_STATE PowerState;
+ ULONG LowCapacity;
+ ULONG HighCapacity;
+ PDEVICE_OBJECT AttachedDevice;
+ PDEVICE_OBJECT DeviceObject;
+ PVOID NotificationEntry;
+} COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION;
+
+extern ULONG CmBattDebug;
+
+/* EOF */
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
+<module name="compbatt" type="kernelmodedriver" installbase="system32/drivers" installname="compbatt.sys">
+ <library>ntoskrnl</library>
+ <library>hal</library>
+ <library>battc</library>
+ <include base="compbatt">.</include>
+ <file>compbatt.c</file>
+ <file>compmisc.c</file>
+ <file>comppnp.c</file>
+ <file>compbatt.rc</file>
+ <pch>compbatt.h</pch>
+</module>
--- /dev/null
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "Composite Battery Driver\0"
+#define REACTOS_STR_INTERNAL_NAME "compbatt\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "compbatt.sys\0"
+#include <reactos/version.rc>
--- /dev/null
+/*
+ * PROJECT: ReactOS Composite Battery Driver
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/drivers/bus/acpi/compbatt/compmisc.c
+ * PURPOSE: Miscellaneous Support Routines
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+BatteryIoctl(IN ULONG IoControlCode,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PVOID InputBuffer,
+ IN ULONG InputBufferLength,
+ IN PVOID OutputBuffer,
+ IN ULONG OutputBufferLength,
+ IN BOOLEAN InternalDeviceIoControl)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetDeviceObjectPointer(IN PCUNICODE_STRING DeviceName,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PFILE_OBJECT *FileObject,
+ OUT PDEVICE_OBJECT *DeviceObject)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
--- /dev/null
+/*
+ * PROJECT: ReactOS Composite Battery Driver
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/drivers/bus/acpi/compbatt/comppnp.c
+ * PURPOSE: Plug-and-Play IOCTL/IRP Handling
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "compbatt.h"
+
+/* FUNCTIONS ******************************************************************/
+
+NTSTATUS
+NTAPI
+CompBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+PCOMPBATT_BATTERY_ENTRY
+NTAPI
+RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return NULL;
+}
+
+BOOLEAN
+NTAPI
+IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+NTSTATUS
+NTAPI
+CompBattAddNewBattery(IN PCUNICODE_STRING BatteryName,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification,
+ IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattAddDevice(IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT PdoDeviceObject)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+CompBattPnpDispatch(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
--- /dev/null
+#include <ntddk.h>
+
+#include <acpi.h>
+
+#include <acpisys.h>
+#include <acpi_bus.h>
+#include <acpi_drivers.h>
+#include <acpiioct.h>
+
+#include <glue.h>
+#include <accommon.h>
+#include <acobject.h>
+#include <actypes.h>
+
+#include <wdmguid.h>
+#define NDEBUG
+#include <debug.h>
+
+NTSTATUS
+NTAPI
+Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
+ PIRP Irp)
+{
+ ULONG Signature;
+ NTSTATUS Status;
+ ACPI_OBJECT_LIST ParamList;
+ PACPI_EVAL_INPUT_BUFFER EvalInputBuff = Irp->AssociatedIrp.SystemBuffer;
+ ACPI_BUFFER RetBuff = {ACPI_ALLOCATE_BUFFER, NULL};
+ PACPI_EVAL_OUTPUT_BUFFER OutputBuf;
+ PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
+ ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER *SimpleInt;
+ ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING *SimpleStr;
+
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG))
+ return STATUS_INVALID_PARAMETER;
+
+ Signature = *((PULONG)Irp->AssociatedIrp.SystemBuffer);
+
+ switch (Signature)
+ {
+ case ACPI_EVAL_INPUT_BUFFER_SIGNATURE:
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER))
+ return STATUS_INVALID_PARAMETER;
+
+ ParamList.Count = 0;
+ break;
+
+ case ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE:
+ SimpleInt = Irp->AssociatedIrp.SystemBuffer;
+
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER))
+ return STATUS_INVALID_PARAMETER;
+
+ ParamList.Count = 1;
+
+ ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
+ if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
+
+ ParamList.Pointer[0].Type = ACPI_TYPE_INTEGER;
+ ParamList.Pointer[0].Integer.Value = SimpleInt->IntegerArgument;
+ break;
+
+ case ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_SIGNATURE:
+ SimpleStr = Irp->AssociatedIrp.SystemBuffer;
+
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING))
+ return STATUS_INVALID_PARAMETER;
+
+ ParamList.Count = 1;
+
+ ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
+ if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
+
+ ParamList.Pointer[0].String.Pointer = (CHAR*)SimpleStr->String;
+ ParamList.Pointer[0].String.Length = SimpleStr->StringLength;
+ break;
+
+ default:
+ DPRINT1("Unsupported input buffer signature: %d\n", Signature);
+ return STATUS_NOT_IMPLEMENTED;
+ }
+
+ Status = AcpiEvaluateObject(DeviceData->AcpiHandle,
+ (CHAR*)EvalInputBuff->MethodName,
+ &ParamList,
+ &RetBuff);
+
+ if (ParamList.Count != 0)
+ ExFreePool(ParamList.Pointer);
+
+ if (ACPI_SUCCESS(Status))
+ {
+ ACPI_OBJECT *Obj = RetBuff.Pointer;
+ ULONG ExtraParamLength;
+
+ /* If we didn't get anything back then we're done */
+ if (!RetBuff.Pointer || RetBuff.Length == 0)
+ return STATUS_SUCCESS;
+
+ switch (Obj->Type)
+ {
+ case ACPI_TYPE_INTEGER:
+ ExtraParamLength = sizeof(ULONG);
+ break;
+
+ case ACPI_TYPE_STRING:
+ ExtraParamLength = Obj->String.Length;
+ break;
+
+ case ACPI_TYPE_BUFFER:
+ ExtraParamLength = Obj->Buffer.Length;
+ break;
+
+ case ACPI_TYPE_PACKAGE:
+ DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
+ return STATUS_UNSUCCESSFUL;
+
+ default:
+ ASSERT(FALSE);
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ /* Enough space for a ULONG is always included */
+ if (ExtraParamLength >= sizeof(ULONG))
+ ExtraParamLength -= sizeof(ULONG);
+ else
+ ExtraParamLength = 0;
+
+ OutputBuf = ExAllocatePool(NonPagedPool, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+ ExtraParamLength);
+ if (!OutputBuf) return STATUS_INSUFFICIENT_RESOURCES;
+
+ OutputBuf->Signature = ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE;
+ OutputBuf->Length = ExtraParamLength + sizeof(ACPI_METHOD_ARGUMENT);
+ OutputBuf->Count = 1;
+
+ switch (Obj->Type)
+ {
+ case ACPI_TYPE_INTEGER:
+ ACPI_METHOD_SET_ARGUMENT_INTEGER(OutputBuf->Argument, Obj->Integer.Value);
+ break;
+
+ case ACPI_TYPE_STRING:
+ ACPI_METHOD_SET_ARGUMENT_STRING(OutputBuf->Argument, Obj->String.Pointer);
+ break;
+
+ case ACPI_TYPE_BUFFER:
+ ACPI_METHOD_SET_ARGUMENT_BUFFER(OutputBuf->Argument, Obj->Buffer.Pointer, Obj->Buffer.Length);
+ break;
+
+ case ACPI_TYPE_PACKAGE:
+ DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
+ return STATUS_UNSUCCESSFUL;
+
+ default:
+ ASSERT(FALSE);
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength >= sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+ ExtraParamLength)
+ {
+ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, OutputBuf, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
+ ExtraParamLength);
+ Irp->IoStatus.Information = sizeof(ACPI_EVAL_OUTPUT_BUFFER) + ExtraParamLength;
+ ExFreePool(OutputBuf);
+ return STATUS_SUCCESS;
+ }
+ else
+ {
+ ExFreePool(OutputBuf);
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+ }
+ else
+ {
+ DPRINT1("Query method %s failed on %p\n", EvalInputBuff->MethodName, DeviceData->AcpiHandle);
+ return STATUS_UNSUCCESSFUL;
+ }
+}
ACPI_BUS_TYPE_SYSTEM,
ACPI_BUS_TYPE_POWER_BUTTON,
ACPI_BUS_TYPE_SLEEP_BUTTON,
+ ACPI_BUS_TYPE_POWER_BUTTONF,
+ ACPI_BUS_TYPE_SLEEP_BUTTONF,
ACPI_BUS_DEVICE_TYPE_COUNT
};
// Link point to hold all the PDOs for a single bus together
LIST_ENTRY Link;
ULONG InterfaceRefCount;
+ UNICODE_STRING InterfaceName;
} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
// A synchronization for access to the device extension.
FAST_MUTEX Mutex;
- // The name returned from IoRegisterDeviceInterface,
- // which is used as a handle for IoSetDeviceInterfaceState.
- UNICODE_STRING InterfaceName;
-
} FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
#define FDO_FROM_PDO(pdoData) \
ACPIEnumerateDevices(
PFDO_DEVICE_DATA DeviceExtension);
+NTSTATUS
+NTAPI
+Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
+ PIRP Irp);
+
NTSTATUS
NTAPI
Bus_CreateClose (
#include <acpi_bus.h>
#include <acpi_drivers.h>
+#include <acpiioct.h>
+#include <poclass.h>
+
#define NDEBUG
#include <debug.h>
#endif
-
+extern struct acpi_device *sleep_button;
+extern struct acpi_device *power_button;
NTSTATUS
NTAPI
PDEVICE_OBJECT deviceObject = NULL;
PFDO_DEVICE_DATA deviceData = NULL;
PWCHAR deviceName = NULL;
+#ifndef NDEBUG
ULONG nameLength;
+#endif
PAGED_CODE ();
NTSTATUS
NTAPI
-ACPIDispatchDeviceControl(
+ACPIDispatchCreateClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
- PIO_STACK_LOCATION IrpSp;
- NTSTATUS Status;
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ Irp->IoStatus.Information = 0;
- DPRINT("Called. IRP is at (0x%X)\n", Irp);
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
- Irp->IoStatus.Information = 0;
+ return STATUS_SUCCESS;
+}
- IrpSp = IoGetCurrentIrpStackLocation(Irp);
- switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) {
- default:
- DPRINT("Unknown IOCTL 0x%X\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
- Status = STATUS_NOT_IMPLEMENTED;
- break;
- }
+VOID
+NTAPI
+ButtonWaitThread(PVOID Context)
+{
+ PIRP Irp = Context;
+ int result;
+ struct acpi_bus_event event;
+ ULONG ButtonEvent;
- if (Status != STATUS_PENDING) {
- Irp->IoStatus.Status = Status;
+ while (ACPI_SUCCESS(result = acpi_bus_receive_event(&event)) &&
+ event.type != ACPI_BUTTON_NOTIFY_STATUS);
- DPRINT("Completing IRP at 0x%X\n", Irp);
+ if (!ACPI_SUCCESS(result))
+ {
+ Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
+ }
+ else
+ {
+ if (strstr(event.bus_id, "PWRF"))
+ ButtonEvent = SYS_BUTTON_POWER;
+ else if (strstr(event.bus_id, "SLPF"))
+ ButtonEvent = SYS_BUTTON_SLEEP;
+ else
+ ButtonEvent = 0;
+
+ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &ButtonEvent, sizeof(ButtonEvent));
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ Irp->IoStatus.Information = sizeof(ULONG);
+ }
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- }
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+}
+
- DPRINT("Leaving. Status 0x%X\n", Status);
+NTSTATUS
+NTAPI
+ACPIDispatchDeviceControl(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ PIO_STACK_LOCATION irpStack;
+ NTSTATUS status = STATUS_NOT_SUPPORTED;
+ PCOMMON_DEVICE_DATA commonData;
+ ULONG Caps = 0;
+ HANDLE ThreadHandle;
+
+ PAGED_CODE ();
+
+ irpStack = IoGetCurrentIrpStackLocation (Irp);
+ ASSERT (IRP_MJ_DEVICE_CONTROL == irpStack->MajorFunction);
+
+ commonData = (PCOMMON_DEVICE_DATA) DeviceObject->DeviceExtension;
+
+ Irp->IoStatus.Information = 0;
+
+ if (!commonData->IsFDO)
+ {
+ switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
+ {
+ case IOCTL_ACPI_EVAL_METHOD:
+ status = Bus_PDO_EvalMethod((PPDO_DEVICE_DATA)commonData,
+ Irp);
+ break;
+
+ case IOCTL_GET_SYS_BUTTON_CAPS:
+ if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
+ {
+ status = STATUS_BUFFER_TOO_SMALL;
+ break;
+ }
+
+ if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0D"))
+ {
+ DPRINT1("Lid button reported to power manager\n");
+ Caps |= SYS_BUTTON_LID;
+ }
+ else if (((PPDO_DEVICE_DATA)commonData)->AcpiHandle == NULL)
+ {
+ /* We have to return both at the same time because since we
+ * have a NULL handle we are the fixed feature DO and we will
+ * only be called once (not once per device)
+ */
+ if (power_button)
+ {
+ DPRINT1("Fixed power button reported to power manager\n");
+ Caps |= SYS_BUTTON_POWER;
+ }
+ if (sleep_button)
+ {
+ DPRINT1("Fixed sleep button reported to power manager\n");
+ Caps |= SYS_BUTTON_SLEEP;
+ }
+ }
+ if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0C"))
+ {
+ DPRINT1("Control method power button reported to power manager\n");
+ Caps |= SYS_BUTTON_POWER;
+ }
+ else if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0E"))
+ {
+ DPRINT1("Control method sleep reported to power manager\n");
+ Caps |= SYS_BUTTON_SLEEP;
+ }
+ else
+ {
+ DPRINT1("IOCTL_GET_SYS_BUTTON_CAPS sent to a non-button device\n");
+ status = STATUS_INVALID_PARAMETER;
+ }
+
+ if (Caps != 0)
+ {
+ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &Caps, sizeof(Caps));
+ Irp->IoStatus.Information = sizeof(Caps);
+ status = STATUS_SUCCESS;
+ }
+ break;
+
+ case IOCTL_GET_SYS_BUTTON_EVENT:
+ PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, ButtonWaitThread, Irp);
+ ZwClose(ThreadHandle);
+
+ status = STATUS_PENDING;
+ break;
+
+ default:
+ DPRINT1("Unsupported IOCTL: %x\n", irpStack->Parameters.DeviceIoControl.IoControlCode);
+ break;
+ }
+ }
+ else
+ DPRINT1("IOCTL sent to the ACPI FDO! Kill the caller!\n");
- return Status;
+ if (status != STATUS_PENDING)
+ {
+ Irp->IoStatus.Status = status;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ }
+ else
+ IoMarkIrpPending(Irp);
+
+ return status;
}
NTSTATUS
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ACPIDispatchDeviceControl;
DriverObject->MajorFunction [IRP_MJ_PNP] = Bus_PnP;
DriverObject->MajorFunction [IRP_MJ_POWER] = Bus_Power;
+ DriverObject->MajorFunction [IRP_MJ_CREATE] = ACPIDispatchCreateClose;
+ DriverObject->MajorFunction [IRP_MJ_CLOSE] = ACPIDispatchCreateClose;
DriverObject->DriverExtension->AddDevice = Bus_AddDevice;
DPRINT("Waiting for semaphore %p\n", Handle);
ASSERT(Mutex);
- ExAcquireFastMutex(Mutex);
+ /* HACK: We enter here at a high IRQL sometimes
+ * because we get called from DPCs and ISRs and
+ * we can't use a fast mutex at that IRQL */
+ if (KeGetCurrentIrql() <= APC_LEVEL)
+ ExAcquireFastMutex(Mutex);
+
return AE_OK;
}
DPRINT("AcpiOsSignalSemaphore %p\n",Handle);
ASSERT(Mutex);
- ExReleaseFastMutex(Mutex);
+ /* HACK: We enter here at a high IRQL sometimes
+ * because we get called from DPCs and ISRs and
+ * we can't use a fast mutex at that IRQL */
+ if (KeGetCurrentIrql() <= APC_LEVEL)
+ ExReleaseFastMutex(Mutex);
+
return AE_OK;
}
/* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
#include <stdarg.h>
#include <windef.h>
#include <dde.h>
-#include <ddk/ddkmapi.h>
+#include <ddkmapi.h>
/* Prototypes */
VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);
/* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
/* Win32 Headers */
#define WINBASEAPI
/* 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
#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,
SCSIPORT_API
VOID
-DDKCDECLAPI
+__cdecl
ScsiDebugPrint(
ULONG DebugPrintLevel,
PCCHAR DebugMessage,
IN UCHAR Channel
);
-ULONG DDKAPI
+ULONG NTAPI
AtapiFindController(
IN PVOID HwDeviceExtension,
IN PVOID Context,
PVOID Argument2
);
-extern ULONG DDKAPI
+extern ULONG NTAPI
UniataFindCompatBusMasterController1(
IN PVOID HwDeviceExtension,
IN PVOID Context,
OUT PBOOLEAN Again
);
-extern ULONG DDKAPI
+extern ULONG NTAPI
UniataFindCompatBusMasterController2(
IN PVOID HwDeviceExtension,
IN PVOID Context,
ULONG NewNumberChannels
);
-extern ULONG DDKAPI
+extern ULONG NTAPI
UniataFindBusMasterController(
IN PVOID HwDeviceExtension,
IN PVOID Context,
OUT PBOOLEAN Again
);
-extern ULONG DDKAPI
+extern ULONG NTAPI
UniataFindFakeBusMasterController(
IN PVOID HwDeviceExtension,
IN PVOID Context,
/* Compiler dependencies */
/***************************************************/
-#define DDKAPI __stdcall
#define DDKFASTAPI __fastcall
-#define DDKCDECLAPI __cdecl
/* Are we under GNU C (mingw) ??? */
#ifdef __GNUC__
UCHAR g_foo = 0;
BOOLEAN
-DDKAPI
+NTAPI
AtapiResetController__(
IN PVOID HwDeviceExtension,
IN ULONG PathId,
#ifndef UNIATA_CORE
VOID
-DDKAPI
+NTAPI
AtapiCallBack_X(
IN PVOID HwDeviceExtension
);
#endif
RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
AtapiInterruptDpc(
IN PVOID HwDeviceExtension
);
RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension
);
);
SCSI_ADAPTER_CONTROL_STATUS
-DDKAPI
+NTAPI
AtapiAdapterControl(
IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
#ifndef UNIATA_CORE
VOID
-DDKAPI
+NTAPI
AtapiTimerDpc(
IN PVOID HwDeviceExtension
)
--*/
BOOLEAN
-DDKAPI
+NTAPI
AtapiResetController(
IN PVOID HwDeviceExtension,
IN ULONG PathId
--*/
BOOLEAN
-DDKAPI
+NTAPI
AtapiHwInitialize(
IN PVOID HwDeviceExtension
)
--*/
BOOLEAN
-DDKAPI
+NTAPI
AtapiInterrupt(
IN PVOID HwDeviceExtension
)
} // end AtapiInterrupt2()
RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
AtapiInterruptDpc(
IN PVOID HwDeviceExtension
)
RETTYPE_XXableInterrupts
-DDKAPI
+NTAPI
AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension
)
--*/
BOOLEAN
-DDKAPI
+NTAPI
AtapiStartIo(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
--*/
extern "C"
ULONG
-DDKAPI
+NTAPI
DriverEntry(
IN PVOID DriverObject,
IN PVOID Argument2
SCSI_ADAPTER_CONTROL_STATUS
-DDKAPI
+NTAPI
AtapiAdapterControl(
IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
extern "C"
NTHALAPI
VOID
-DDKAPI
+NTAPI
HalDisplayString (
PUCHAR String
);
typedef
BOOLEAN
-(DDKAPI *PHW_INITIALIZE) (
+(NTAPI *PHW_INITIALIZE) (
IN PVOID DeviceExtension
);
typedef
BOOLEAN
-(DDKAPI *PHW_STARTIO) (
+(NTAPI *PHW_STARTIO) (
IN PVOID DeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
);
typedef
BOOLEAN
-(DDKAPI *PHW_INTERRUPT) (
+(NTAPI *PHW_INTERRUPT) (
IN PVOID DeviceExtension
);
typedef
VOID
-(DDKAPI *PHW_TIMER) (
+(NTAPI *PHW_TIMER) (
IN PVOID DeviceExtension
);
typedef
VOID
-(DDKAPI *PHW_DMA_STARTED) (
+(NTAPI *PHW_DMA_STARTED) (
IN PVOID DeviceExtension
);
typedef
ULONG
-(DDKAPI *PHW_FIND_ADAPTER) (
+(NTAPI *PHW_FIND_ADAPTER) (
IN PVOID DeviceExtension,
IN PVOID HwContext,
IN PVOID BusInformation,
typedef
BOOLEAN
-(DDKAPI *PHW_RESET_BUS) (
+(NTAPI *PHW_RESET_BUS) (
IN PVOID DeviceExtension,
IN ULONG PathId
);
typedef
BOOLEAN
-(DDKAPI *PHW_ADAPTER_STATE) (
+(NTAPI *PHW_ADAPTER_STATE) (
IN PVOID DeviceExtension,
IN PVOID Context,
IN BOOLEAN SaveState
typedef
SCSI_ADAPTER_CONTROL_STATUS
-(DDKAPI *PHW_ADAPTER_CONTROL) (
+(NTAPI *PHW_ADAPTER_CONTROL) (
IN PVOID DeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
IN PVOID Parameters
//
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortInitialize(
IN PVOID Argument1,
IN PVOID Argument2,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension,
IN PVOID MappedAddress
);
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortGetBusData(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
);
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
);
SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
);
SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
);
SCSIPORT_API
-PSCSI_REQUEST_BLOCK DDKAPI
+PSCSI_REQUEST_BLOCK NTAPI
ScsiPortGetSrb(
IN PVOID DeviceExtension,
IN UCHAR PathId,
);
SCSIPORT_API
-SCSI_PHYSICAL_ADDRESS DDKAPI
+SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
);
SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
);
SCSIPORT_API
-PVOID DDKAPI
+PVOID NTAPI
ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortFlushDma(
IN PVOID DeviceExtension
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
);
SCSIPORT_API
-VOID DDKCDECLAPI
+VOID __cdecl
ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortLogError(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortMoveMemory(
IN PVOID WriteBuffer,
IN PVOID ReadBuffer,
);
SCSIPORT_API
-UCHAR DDKAPI
+UCHAR NTAPI
ScsiPortReadPortUchar(
IN PUCHAR Port
);
SCSIPORT_API
-USHORT DDKAPI
+USHORT NTAPI
ScsiPortReadPortUshort(
IN PUSHORT Port
);
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortReadPortUlong(
IN PULONG Port
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadPortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadPortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadPortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
);
SCSIPORT_API
-UCHAR DDKAPI
+UCHAR NTAPI
ScsiPortReadRegisterUchar(
IN PUCHAR Register
);
SCSIPORT_API
-USHORT DDKAPI
+USHORT NTAPI
ScsiPortReadRegisterUshort(
IN PUSHORT Register
);
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortReadRegisterUlong(
IN PULONG Register
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortReadRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortStallExecution(
IN ULONG Delay
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortUchar(
IN PUCHAR Port,
IN UCHAR Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortUshort(
IN PUSHORT Port,
IN USHORT Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortUlong(
IN PULONG Port,
IN ULONG Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWritePortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterUchar(
IN PUCHAR Register,
IN UCHAR Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterUshort(
IN PUSHORT Register,
IN USHORT Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterUlong(
IN PULONG Register,
IN ULONG Value
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
);
SCSIPORT_API
-VOID DDKAPI
+VOID NTAPI
ScsiPortWriteRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
);
SCSIPORT_API
-SCSI_PHYSICAL_ADDRESS DDKAPI
+SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortConvertUlongToPhysicalAddress(
ULONG UlongAddress
);
SCSIPORT_API
-ULONG DDKAPI
+ULONG NTAPI
ScsiPortConvertPhysicalAddressToUlong(
SCSI_PHYSICAL_ADDRESS Address
);
#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
SCSIPORT_API
-BOOLEAN DDKAPI
+BOOLEAN NTAPI
ScsiPortValidateRange(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
// begin_ntminitape
SCSIPORT_API
-VOID DDKCDECLAPI
+VOID __cdecl
ScsiDebugPrint(
ULONG DebugPrintLevel,
PCCHAR DebugMessage,
#define DDKFASTAPI __fastcall
#define FASTCALL __fastcall
-#define DDKCDECLAPI __cdecl
ULONG DbgPrint(PCCH Format,...);
</if>
<if property="ARCH" value="amd64">
- <directory name="halx86">
- <xi:include href="halx86/directory.rbuild" />
- </directory>
+ <directory name="halx86">
+ <xi:include href="halx86/directory.rbuild" />
+ </directory>
</if>
<if property="ARCH" value="powerpc">
/* INCLUDES ******************************************************************/
#include <asm.h>
-#include <internal/i386/asmmacro.S>
.intel_syntax noprefix
/* GLOBALS *******************************************************************/
+.globl _HalpPerfCounter
_HalpLastPerfCounterLow: .long 0
_HalpLastPerfCounterHigh: .long 0
+_HalpPerfCounter:
_HalpPerfCounterLow: .long 0
_HalpPerfCounterHigh: .long 0
+_HalpSystemHardwareFlags: .long 0
_UnhandledMsg:
.asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n"
ret
.endfunc
+#ifndef _MINIHAL_
.globl _KeStallExecutionProcessor@4
.func KeStallExecutionProcessor@4
_KeStallExecutionProcessor@4:
/* Return */
ret 4
.endfunc
+#endif
.global _KeQueryPerformanceCounter@4
.func KeQueryPerformanceCounter@4
mov _HalpLastPerfCounterHigh, eax
jmp LoopPreInt
.endfunc
-
-.globl _HalpClockInterrupt@0
-.func HalpClockInterrupt@0
-TRAP_FIXUPS hci_a, hci_t, DoFixupV86, DoFixupAbios
-_HalpClockInterrupt@0:
-
- /* Enter trap */
- INT_PROLOG hci_a, hci_t, DoPushFakeErrorCode
-
- /* Push vector and make stack for IRQL */
- push 0x30
- sub esp, 4
-
- /* Begin the interrupt */
- push esp
- push 0x30
- push CLOCK2_LEVEL
- call _HalBeginSystemInterrupt@12
-
- /* Check if it's spurious */
- or al, al
- jz Spurious
-
- /* Update the performance counter */
- xor ebx, ebx
- mov eax, _HalpCurrentRollOver
- add _HalpPerfCounterLow, eax
- adc _HalpPerfCounterHigh, ebx
-
- /* Get the time increment and check if someone changed the clock rate */
- mov eax, _HalpCurrentTimeIncrement
- cmp _HalpClockSetMSRate, ebx
- jz _KeUpdateSystemTime@0
-
- /* FIXME: Someone did! */
- int 3
-
-Spurious:
-
- /* Exit the interrupt */
- add esp, 8
- jmp _Kei386EoiHelper@0
-.endfunc
-
-.globl _HalpProfileInterrupt@0
-.func HalpProfileInterrupt@0
-TRAP_FIXUPS hpi_a, hpi_t, DoFixupV86, DoFixupAbios
-_HalpProfileInterrupt@0:
-
- /* Enter trap */
- INT_PROLOG hpi_a, hpi_t, DoPushFakeErrorCode
-
- /* Push vector and make stack for IRQL */
- push 0x38
- sub esp, 4
-
- /* Begin the interrupt */
- push esp
- push 0x38
- push PROFILE_LEVEL
- call _HalBeginSystemInterrupt@12
-
- /* Check if it's spurious */
- or al, al
- jz Spurious
-
- /* FIXME: We should not be getting profile interrupts yet! */
- int 3
-.endfunc
+++ /dev/null
-/*
- * FILE: hal/halx86/generic/bios.S
- * COPYRIGHT: See COPYING in the top level directory
- * PURPOSE: V8086 Real-Mode BIOS Thunking
- * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <asm.h>
-#include <internal/i386/asmmacro.S>
-.intel_syntax noprefix
-
-//
-// HAL BIOS Frame
-//
-#define HALP_BIOS_FRAME_SS 0x00
-#define HALP_BIOS_FRAME_ESP 0x04
-#define HALP_BIOS_FRAME_EFLAGS 0x08
-#define HALP_BIOS_FRAME_CS 0x0C
-#define HALP_BIOS_FRAME_EIP 0x10
-#define HALP_BIOS_FRAME_TRAP_FRAME 0x14
-#define HALP_BIOS_FRAME_CS_LIMIT 0x18
-#define HALP_BIOS_FRAME_CS_BASE 0x1C
-#define HALP_BIOS_FRAME_CS_FLAGS 0x20
-#define HALP_BIOS_FRAME_SS_LIMIT 0x24
-#define HALP_BIOS_FRAME_SS_BASE 0x28
-#define HALP_BIOS_FRAME_SS_FLAGS 0x2C
-#define HALP_BIOS_FRAME_PREFIX 0x30
-#define HALP_BIOS_FRAME_LENGTH 0x34
-
-/* GLOBALS *******************************************************************/
-
-_HalpSavedEsp:
- .long 0
-
-_InvalidMsg:
- .asciz "HAL: An invalid V86 opcode was encountered at address %x:%x\n"
-
-_InvalidGpfMsg:
- .asciz "HAL: Trap0D while not in V86 mode\n"
-
-_UnhandledMsg:
- .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx [%s]!!!\n"
-
-/* FUNCTIONS *****************************************************************/
-
-.globl _HalpBiosCall@0
-.func HalpBiosCall@0
-_HalpBiosCall@0:
-
- /* Set up stack pointer */
- push ebp
- mov ebp, esp
-
- /* Build a trap frame */
- pushfd
- push edi
- push esi
- push ebx
- push ds
- push es
- push fs
- push gs
- push offset _HalpRealModeEnd
-
- /* Save the stack */
- mov _HalpSavedEsp, esp
-
- /* Turn off alignment faults */
- mov eax, cr0
- and eax, ~CR0_AM
- mov cr0, eax
-
- /* Setup a new stack */
- mov esi, fs:KPCR_TSS
- mov eax, esp
- sub eax, NPX_FRAME_LENGTH
- mov [esi+KTSS_ESP0], eax
-
- /* Save V86 registers */
- push 0
- push 0
- push 0
- push 0
- push 0x2000
-
- /* Get linear delta between stack and code */
- mov eax, offset _HalpRealModeEnd-4
- sub eax, offset _HalpRealModeStart
-
- /* Get offset of code */
- mov edx, offset _HalpRealModeStart
- and edx, 0xFFF
-
- /* Add offset to linear address and save the new V86 SP */
- add eax, edx
- push eax
-
- /* Start building interrupt frame. Setup V86 EFLAGS and IOPL 3 */
- pushfd
- or dword ptr [esp], EFLAGS_V86_MASK
- or dword ptr [esp], 0x3000
-
- /* Push the CS and IP */
- push 0x2000
- push edx
-
- /* Do the interrupt return (jump to V86 mode) */
- iretd
-
-.globl _HalpRealModeStart
-_HalpRealModeStart:
-
- /* Set mode 13 */
- mov ax, 0x12
- .byte 0
- .byte 0
-
- /* Do the interrupt */
- int 0x10
-
- /* BOP to exit V86 mode */
- .byte 0xC4
- .byte 0xC4
-
- /* The stack lives here */
-.align 4
- .space 2048
-.globl _HalpRealModeEnd
-_HalpRealModeEnd:
-
- /* We're back, clean up the trap frame */
- pop gs
- pop fs
- pop es
- pop ds
- pop ebx
- pop esi
- pop edi
- popfd
-
- /* Return to caller */
- pop ebp
- ret 0
-.endfunc
-
-.globl _HalpOpcodeInvalid@0
-.func HalpOpcodeInvalid@0
-_HalpOpcodeInvalid@0:
-
- /* This should never happen -- is the IOPM damaged? */
- push [esi+HALP_BIOS_FRAME_EIP]
- push [esi+HALP_BIOS_FRAME_CS]
- push offset _InvalidMsg
- call _DbgPrint
- add esp, 12
-
- /* Break */
- int 3
-
- /* Nothing to return */
- xor eax, eax
- ret 0
-.endfunc
-
-.globl _HalpPushInt@0
-.func HalpPushInt@0
-_HalpPushInt@0:
-
- /* Save EBX */
- push ebx
-
- /* Get SS offset and base */
- mov edx, [esi+HALP_BIOS_FRAME_ESP]
- mov ebx, [esi+HALP_BIOS_FRAME_SS_BASE]
-
- /* Convert to 16-bits */
- and edx, 0xFFFF
- sub dx, 2
-
- /* Get EFLAGS and write them into the linear address of SP */
- mov ax, word ptr [esi+HALP_BIOS_FRAME_EFLAGS]
- mov [ebx+edx], ax
- sub dx, 2
-
- /* Get CS segment and write it into SP */
- mov ax, word ptr [esi+HALP_BIOS_FRAME_CS]
- mov [ebx+edx], ax
- sub dx, 2
-
- /* Get IP and write it into SP */
- mov ax, word ptr [esi+HALP_BIOS_FRAME_EIP]
- mov [ebx+edx], ax
-
- /* Get new IP value (the interrupt ID is in ECX, so this is in the IVT) */
- mov eax, [ecx*4]
- push eax
-
- /* Now save the new IP */
- movzx eax, ax
- mov [esi+HALP_BIOS_FRAME_EIP], eax
-
- /* Save the new CS of this IP */
- pop eax
- shr eax, 16
- mov [esi+HALP_BIOS_FRAME_CS], eax
-
- /* Update the stack pointer after our manual interrupt frame construction */
- mov word ptr [esi+HALP_BIOS_FRAME_ESP], dx
-
- /* Get CS and convert it to linear format */
- mov eax, [esi+HALP_BIOS_FRAME_CS]
- shl eax, 4
- mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
- mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
- mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
-
- /* Return success and restore EBX */
- mov eax, 1
- pop ebx
- ret 0
-.endfunc
-
-.globl _HalpOpcodeINTnn@0
-.func HalpOpcodeINTnn@0
-_HalpOpcodeINTnn@0:
-
- /* Save non-volatiles and stack */
- push ebp
- push esi
- push ebx
-
- /* Get SS and convert it to linear format */
- mov eax, [esi+HALP_BIOS_FRAME_SS]
- shl eax, 4
- mov [esi+HALP_BIOS_FRAME_SS_BASE], eax
- mov dword ptr [esi+HALP_BIOS_FRAME_SS_LIMIT], 0xFFFF
- mov dword ptr [esi+HALP_BIOS_FRAME_SS_FLAGS], 0
-
- /* Increase IP and check if we're past the CS limit */
- inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
- mov edi, [esi+HALP_BIOS_FRAME_EIP]
- cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
- ja EipLimitReached
-
- /* Convert IP to linear address and read the interrupt number */
- add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
- movzx ecx, byte ptr [edi]
-
- /* Increase EIP and do the interrupt, check for status */
- inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
- call _HalpPushInt@0
- test eax, 0xFFFF
- jz Done
-
- /* Update the trap frame */
- mov ebp, [esi+HALP_BIOS_FRAME_TRAP_FRAME]
- mov eax, [esi+HALP_BIOS_FRAME_SS]
- mov [ebp+KTRAP_FRAME_SS], eax
- mov eax, [esi+HALP_BIOS_FRAME_ESP]
- mov [ebp+KTRAP_FRAME_ESP], eax
- mov eax, [esi+HALP_BIOS_FRAME_CS]
- mov [ebp+KTRAP_FRAME_CS], eax
- mov eax, [esi+HALP_BIOS_FRAME_EFLAGS]
- mov [ebp+KTRAP_FRAME_EFLAGS], eax
-
- /* Set success code */
- mov eax, 1
-
-Done:
- /* Restore volatiles */
- pop ebx
- pop edi
- pop ebp
- ret 0
-
-EipLimitReached:
- /* Set failure code */
- xor eax, eax
- jmp Done
-.endfunc
-
-.globl _HalpDispatchV86Opcode@0
-.func HalpDispatchV86Opcode@0
-_HalpDispatchV86Opcode@0:
-
- /* Make space for the HAL BIOS Frame on the stack */
- push ebp
- mov ebp, esp
- sub esp, HALP_BIOS_FRAME_LENGTH
-
- /* Save non-volatiles */
- push esi
- push edi
-
- /* Save pointer to the trap frame */
- mov esi, [ebp]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_TRAP_FRAME], esi
-
- /* Save SS */
- movzx eax, word ptr [esi+KTRAP_FRAME_SS]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_SS], eax
-
- /* Save ESP */
- mov eax, [esi+KTRAP_FRAME_ESP]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_ESP], eax
-
- /* Save EFLAGS */
- mov eax, [esi+KTRAP_FRAME_EFLAGS]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EFLAGS], eax
-
- /* Save CS */
- movzx eax, word ptr [esi+KTRAP_FRAME_CS]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_CS], eax
-
- /* Save EIP */
- mov eax, [esi+KTRAP_FRAME_EIP]
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EIP], eax
-
- /* No prefix */
- xor eax, eax
- mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_PREFIX], eax
-
- /* Set pointer to HAL BIOS Frame */
- lea esi, [ebp-HALP_BIOS_FRAME_LENGTH]
-
- /* Convert CS to linear format */
- mov eax, [esi+HALP_BIOS_FRAME_CS]
- shl eax, 4
- mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
- mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
- mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
-
- /* Make sure IP is within the CS Limit */
- mov edi, [esi+HALP_BIOS_FRAME_EIP]
- cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
- ja DispatchError
-
- /* Convert IP to linear address and read the opcode */
- add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
- mov dl, [edi]
-
- /* We only deal with interrupts */
- cmp dl, 0xCD
- je DispatchInt
-
- /* Anything else is invalid */
- call _HalpOpcodeInvalid@0
- jmp DispatchError
-
-DispatchInt:
- /* Handle dispatching the interrupt */
- call _HalpOpcodeINTnn@0
- test eax, 0xFFFF
- jz DispatchReturn
-
- /* Update the trap frame EIP */
- mov edi, [ebp-0x20]
- mov eax, [ebp-0x24]
- mov [edi+KTRAP_FRAME_EIP], eax
-
- /* Set success code */
- mov eax, 1
-
-DispatchReturn:
- /* Restore registers and return */
- pop edi
- pop esi
- mov esp, ebp
- pop ebp
- ret 0
-
-DispatchError:
- /* Set failure code and return */
- xor eax, eax
- jmp DispatchReturn
-.endfunc
-
-.func Ki16BitStackException
-_Ki16BitStackException:
-
- /* Save stack */
- push ss
- push esp
-
- /* Go to kernel mode thread stack */
- mov eax, PCR[KPCR_CURRENT_THREAD]
- add esp, [eax+KTHREAD_INITIAL_STACK]
-
- /* Switch to good stack segment */
- UNHANDLED_PATH "16-Bit Stack"
-.endfunc
-
-.globl _HalpTrap0D@0
-.func HalpTrap0D@0
-TRAP_FIXUPS htd_a, htd_t, DoFixupV86, DoFixupAbios
-_HalpTrap0D@0:
-
- /* Enter trap */
- TRAP_PROLOG htd_a, htd_t
-
- /* Check if this is a V86 trap */
- test dword ptr [ebp+KTRAP_FRAME_EFLAGS], EFLAGS_V86_MASK
- jnz DoDispatch
-
- /* This is weird -- but might happen during an NMI */
- push offset _InvalidGpfMsg
- call _DbgPrint
- add esp, 4
-
- /* Loop forever */
- jmp $
-
-DoDispatch:
- /* Handle the opcode */
- call _HalpDispatchV86Opcode@0
-
- /* Exit the interrupt */
- jmp _Kei386EoiHelper@0
-.endfunc
-
-.globl _HalpTrap06@0
-.func HalpTrap06@0
-_HalpTrap06@0:
-
- /* Restore DS/ES segments */
- mov eax, KGDT_R3_DATA | RPL_MASK
- mov ds, ax
- mov es, ax
-
- /* Restore ESP and return */
- mov esp, _HalpSavedEsp
- ret 0
-.endfunc
return;
}
+#ifdef _M_IX86
+/* x86 fastcall wrappers */
+
+#undef KeRaiseIrql
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeRaiseIrql(KIRQL NewIrql,
+ PKIRQL OldIrql)
+{
+ /* Call the fastcall function */
+ *OldIrql = KfRaiseIrql(NewIrql);
+}
+
+#undef KeLowerIrql
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeLowerIrql(KIRQL NewIrql)
+{
+ /* Call the fastcall function */
+ KfLowerIrql(NewIrql);
+}
+
+#undef KeAcquireSpinLock
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeAcquireSpinLock(PKSPIN_LOCK SpinLock,
+ PKIRQL OldIrql)
+{
+ /* Call the fastcall function */
+ *OldIrql = KfAcquireSpinLock(SpinLock);
+}
+
+#undef KeReleaseSpinLock
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeReleaseSpinLock(PKSPIN_LOCK SpinLock,
+ KIRQL NewIrql)
+{
+ /* Call the fastcall function */
+ KfReleaseSpinLock(SpinLock, NewIrql);
+}
+
+#endif
+
* FILE: hal/halx86/up/spinlock.c
* PURPOSE: Spinlock and Queued Spinlock Support
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
- * Timo Kreuzer (timo.kreuzer@reactos.org)
*/
/* INCLUDES ******************************************************************/
-/* Enable this (and the define in irq.S) to make UP HAL work for MP Kernel */
-/* #define CONFIG_SMP */
+/* This file is compiled twice. Once for UP and once for MP */
#include <hal.h>
#define NDEBUG
#ifdef _M_IX86
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeAcquireSpinLock(PKSPIN_LOCK SpinLock,
- PKIRQL OldIrql)
-{
- /* Call the fastcall function */
- *OldIrql = KfAcquireSpinLock(SpinLock);
-}
-
/*
* @implemented
*/
return OldIrql;
}
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeReleaseSpinLock(PKSPIN_LOCK SpinLock,
- KIRQL NewIrql)
-{
- /* Call the fastcall function */
- KfReleaseSpinLock(SpinLock, NewIrql);
-}
-
/*
* @implemented
*/
return TRUE;
}
-#undef KeRaiseIrql
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeRaiseIrql(KIRQL NewIrql,
- PKIRQL OldIrql)
-{
- /* Call the fastcall function */
- *OldIrql = KfRaiseIrql(NewIrql);
-}
-
-#undef KeLowerIrql
-/*
- * @implemented
- */
-VOID
-NTAPI
-KeLowerIrql(KIRQL NewIrql)
-{
- /* Call the fastcall function */
- KfLowerIrql(NewIrql);
-}
-
#endif
VOID
</directory>
<file>beep.c</file>
<file>cmos.c</file>
+ <file>display.c</file>
<file>dma.c</file>
<file>drive.c</file>
- <file>display.c</file>
+ <file>halinit.c</file>
+ <file>misc.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>sysinfo.c</file>
<file>timer.c</file>
+ <file>usage.c</file>
+ <if property="ARCH" value="i386">
+ <directory name="i386">
+ <file>portio.c</file>
+ <file>systimer.S</file>
<if property="ARCH" value="i386">
<file>bios.c</file>
<file>halinit.c</file>
<file>misc.c</file>
<file>pic.c</file>
- <file>trap.S</file>
- <file>usage.c</file>
+ <file>trap.S</file>
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
<pch>hal.h</pch>
</directory>
</module>
+
<module name="mini_hal" type="objectlibrary">
<include>include</include>
<include base="ntoskrnl">include</include>
<file>dma.c</file>
<file>display.c</file>
<file>drive.c</file>
+ <file>misc.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>spinlock.c</file>
<file>timer.c</file>
<file>usage.c</file>
<if property="ARCH" value="i386">
- <file>bios.c</file>
- <file>misc.c</file>
- <file>pic.c</file>
- <file>trap.S</file>
- <file>usage.c</file>
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
- <file>v86.s</file>
</directory>
</if>
<if property="ARCH" value="amd64">
</directory>
<directory name="up">
<file>halinit_up.c</file>
+ <file>pic.c</file>
+ <file>processor.c</file>
</directory>
</module>
</group>
<directory name="generic">
<file>spinlock.c</file>
</directory>
+ <directory name="up">
+ <file>pic.c</file>
+ <file>processor.c</file>
+ </directory>
<directory name="up">
<file>processor.c</file>
<if property="ARCH" value="i386">
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
<include base="hal">include</include>
<include base="ntoskrnl">include</include>
- <include base="x86emu">.</include>
+ <!-- include base="x86emu">.</include -->
<define name="_DISABLE_TIDENTS" />
<define name="_NTHAL_" />
<define name="_X86BIOS_" />
<library>hal_generic</library>
<library>hal_generic_up</library>
<library>ntoskrnl</library>
- <library>x86emu</library>
-
- <directory name="up">
- <file>halinit_up.c</file>
- <file>halup.rc</file>
- </directory>
+ <!-- library>x86emu</library -->
<directory name="mp">
+ <file>halinit_mp.c</file>
+ <file>halmp.rc</file>
<directory name="amd64">
- <file>mps.S</file>
- </directory>
- </directory>
- <directory name="generic">
- <directory name="amd64">
- <file>x86bios.c</file>
+ <!-- file>mps.S</file -->
</directory>
</directory>
-
</module>
</group>
<library>ntoskrnl</library>
<library>libcntpr</library>
<directory name="mp">
- <file>mpsirql.c</file>
- <directory name="i386">
- <file>mps.S</file>
- <file>mpsboot.asm</file>
- </directory>
+ <if property="ARCH" value="i386">
+ <directory name="i386">
+ <file>mps.S</file>
+ <file>mpsboot.asm</file>
+ <file>mpsirql.c</file>
+ </directory>
+ </if>
</directory>
</module>
</group>
NTAPI
HalpSetInterruptGate(ULONG Index, PVOID Address);
+
+VOID
+FASTCALL
+KeUpdateSystemTime(
+ IN PKTRAP_FRAME TrapFrame,
+ IN ULONG Increment,
+ IN KIRQL OldIrql
+);
+
#ifdef _M_AMD64
#define KfLowerIrql KeLowerIrql
#ifndef CONFIG_SMP
HalpLowerIrql (NewIrql, FALSE);
}
+
/**********************************************************************
* NAME EXPORTED
* KfRaiseIrql
return OldIrql;
}
-
/**********************************************************************
* NAME EXPORTED
* KeRaiseIrqlToDpcLevel
#define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \
{ Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \
- Argument->DataLength = strlen((PUCHAR)StrData) + sizeof(UCHAR); \
+ Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
#define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \
+++ /dev/null
-
-/* $Id: $
- *
- * COPYRIGHT: This file is in the public domain.
- * PROJECT: ReactOS kernel
- * FILE:
- * PURPOSE: headers
- * PROGRAMMER: Magnus Olsen (greatlrd)
- *
- */
-
-#if !defined(_ATSCMEDIA_)
-#define _ATSCMEDIA_
-#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC)
-#define STATIC_BDANETWORKTYPE_ATSC 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0
-DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC);
-#endif
+++ /dev/null
-/*
- * cfgmgr32.h
- *
- * PnP configuration manager
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#ifndef _CFGMGR32_H_
-#define _CFGMGR32_H_
-
-#include "cfg.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(_CFGMGR32_)
-#define CMAPI
-#else
-#define CMAPI DECLSPEC_IMPORT
-#endif
-
-#include <pshpack1.h>
-
-#define CR_SUCCESS 0x00000000
-#define CR_DEFAULT 0x00000001
-#define CR_OUT_OF_MEMORY 0x00000002
-#define CR_INVALID_POINTER 0x00000003
-#define CR_INVALID_FLAG 0x00000004
-#define CR_INVALID_DEVNODE 0x00000005
-#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
-#define CR_INVALID_RES_DES 0x00000006
-#define CR_INVALID_LOG_CONF 0x00000007
-#define CR_INVALID_ARBITRATOR 0x00000008
-#define CR_INVALID_NODELIST 0x00000009
-#define CR_DEVNODE_HAS_REQS 0x0000000A
-#define CR_DEVINST_HAS_REQS CR_DEVNODE_HAS_REQS
-#define CR_INVALID_RESOURCEID 0x0000000B
-#define CR_DLVXD_NOT_FOUND 0x0000000C
-#define CR_NO_SUCH_DEVNODE 0x0000000D
-#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
-#define CR_NO_MORE_LOG_CONF 0x0000000E
-#define CR_NO_MORE_RES_DES 0x0000000F
-#define CR_ALREADY_SUCH_DEVNODE 0x00000010
-#define CR_ALREADY_SUCH_DEVINST CR_ALREADY_SUCH_DEVNODE
-#define CR_INVALID_RANGE_LIST 0x00000011
-#define CR_INVALID_RANGE 0x00000012
-#define CR_FAILURE 0x00000013
-#define CR_NO_SUCH_LOGICAL_DEV 0x00000014
-#define CR_CREATE_BLOCKED 0x00000015
-#define CR_NOT_SYSTEM_VM 0x00000016
-#define CR_REMOVE_VETOED 0x00000017
-#define CR_APM_VETOED 0x00000018
-#define CR_INVALID_LOAD_TYPE 0x00000019
-#define CR_BUFFER_SMALL 0x0000001A
-#define CR_NO_ARBITRATOR 0x0000001B
-#define CR_NO_REGISTRY_HANDLE 0x0000001C
-#define CR_REGISTRY_ERROR 0x0000001D
-#define CR_INVALID_DEVICE_ID 0x0000001E
-#define CR_INVALID_DATA 0x0000001F
-#define CR_INVALID_API 0x00000020
-#define CR_DEVLOADER_NOT_READY 0x00000021
-#define CR_NEED_RESTART 0x00000022
-#define CR_NO_MORE_HW_PROFILES 0x00000023
-#define CR_DEVICE_NOT_THERE 0x00000024
-#define CR_NO_SUCH_VALUE 0x00000025
-#define CR_WRONG_TYPE 0x00000026
-#define CR_INVALID_PRIORITY 0x00000027
-#define CR_NOT_DISABLEABLE 0x00000028
-#define CR_FREE_RESOURCES 0x00000029
-#define CR_QUERY_VETOED 0x0000002A
-#define CR_CANT_SHARE_IRQ 0x0000002B
-#define CR_NO_DEPENDENT 0x0000002C
-#define CR_SAME_RESOURCES 0x0000002D
-#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
-#define CR_INVALID_MACHINENAME 0x0000002F
-#define CR_REMOTE_COMM_FAILURE 0x00000030
-#define CR_MACHINE_UNAVAILABLE 0x00000031
-#define CR_NO_CM_SERVICES 0x00000032
-#define CR_ACCESS_DENIED 0x00000033
-#define CR_CALL_NOT_IMPLEMENTED 0x00000034
-#define CR_INVALID_PROPERTY 0x00000035
-#define CR_DEVICE_INTERFACE_ACTIVE 0x00000036
-#define CR_NO_SUCH_DEVICE_INTERFACE 0x00000037
-#define CR_INVALID_REFERENCE_STRING 0x00000038
-#define CR_INVALID_CONFLICT_LIST 0x00000039
-#define CR_INVALID_INDEX 0x0000003A
-#define CR_INVALID_STRUCTURE_SIZE 0x0000003B
-
-#define RegDisposition_OpenAlways 0x00000000
-#define RegDisposition_OpenExisting 0x00000001
-#define RegDisposition_Bits 0x00000001
-
-
-typedef DWORD RETURN_TYPE;
-typedef RETURN_TYPE CONFIGRET;
-
-typedef HANDLE HMACHINE;
-typedef HMACHINE *PHMACHINE;
-
-typedef DWORD_PTR RES_DES;
-typedef RES_DES *PRES_DES;
-
-typedef DWORD_PTR RANGE_ELEMENT;
-typedef RANGE_ELEMENT *PRANGE_ELEMENT;
-
-typedef ULONG_PTR CONFLICT_LIST;
-typedef CONFLICT_LIST *PCONFLICT_LIST;
-
-typedef DWORD_PTR LOG_CONF;
-typedef LOG_CONF *PLOG_CONF;
-
-typedef ULONG PRIORITY;
-typedef PRIORITY *PPRIORITY;
-
-typedef DWORD_PTR RANGE_LIST;
-typedef RANGE_LIST *PRANGE_LIST;
-
-typedef DWORD DEVNODE, DEVINST;
-typedef DEVNODE *PDEVNODE, *PDEVINST;
-
-typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
-typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
-
-#ifdef UNICODE
-typedef DEVNODEID_W DEVNODEID;
-typedef DEVINSTID_W DEVINSTID;
-#else
-typedef DEVNODEID_A DEVNODEID;
-typedef DEVINSTID_A DEVINSTID;
-#endif
-
-typedef ULONG REGDISPOSITION;
-
-typedef ULONG RESOURCEID;
-typedef RESOURCEID *PRESOURCEID;
-
-#define CM_RESDES_WIDTH_DEFAULT 0x00000000
-#define CM_RESDES_WIDTH_32 0x00000001
-#define CM_RESDES_WIDTH_64 0x00000002
-#define CM_RESDES_WIDTH_BITS 0x00000003
-
-
-#define MAX_CONFIG_VALUE 9999
-#define MAX_INSTANCE_VALUE 9999
-
-#define MAX_DEVICE_ID_LEN 200
-#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
-
-#define MAX_CLASS_NAME_LEN 32
-#define MAX_GUID_STRING_LEN 39
-#define MAX_PROFILE_LEN 80
-
-
-#define ResType_All 0x00000000
-#define ResType_None 0x00000000
-#define ResType_Mem 0x00000001
-#define ResType_IO 0x00000002
-#define ResType_DMA 0x00000003
-#define ResType_IRQ 0x00000004
-#define ResType_DoNotUse 0x00000005
-#define ResType_BusNumber 0x00000006
-#define ResType_MAX 0x00000006
-#define ResType_Ignored_Bit 0x00008000
-#define ResType_ClassSpecific 0x0000FFFF
-#define ResType_Reserved 0x00008000
-#define ResType_DevicePrivate 0x00008001
-#define ResType_PcCardConfig 0x00008002
-#define ResType_MfCardConfig 0x00008003
-
-#define CM_GETIDLIST_FILTER_NONE 0x00000000
-#define CM_GETIDLIST_FILTER_ENUMERATOR 0x00000001
-#define CM_GETIDLIST_FILTER_SERVICE 0x00000002
-#define CM_GETIDLIST_FILTER_EJECTRELATIONS 0x00000004
-#define CM_GETIDLIST_FILTER_REMOVALRELATIONS 0x00000008
-#define CM_GETIDLIST_FILTER_POWERRELATIONS 0x00000010
-#define CM_GETIDLIST_FILTER_BUSRELATIONS 0x00000020
-#define CM_GETIDLIST_DONOTGENERATE 0x10000040
-#define CM_GETIDLIST_FILTER_BITS 0x1000007F
-
-#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT 0x00000000
-#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES 0x00000001
-#define CM_GET_DEVICE_INTERFACE_LIST_BITS 0x00000001
-
-#define CM_DRP_DEVICEDESC 0x00000001
-#define CM_DRP_HARDWAREID 0x00000002
-#define CM_DRP_COMPATIBLEIDS 0x00000003
-#define CM_DRP_UNUSED0 0x00000004
-#define CM_DRP_SERVICE 0x00000005
-#define CM_DRP_UNUSED1 0x00000006
-#define CM_DRP_UNUSED2 0x00000007
-#define CM_DRP_CLASS 0x00000008
-#define CM_DRP_CLASSGUID 0x00000009
-#define CM_DRP_DRIVER 0x0000000A
-#define CM_DRP_CONFIGFLAGS 0x0000000B
-#define CM_DRP_MFG 0x0000000C
-#define CM_DRP_FRIENDLYNAME 0x0000000D
-#define CM_DRP_LOCATION_INFORMATION 0x0000000E
-#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
-#define CM_DRP_CAPABILITIES 0x00000010
-#define CM_DRP_UI_NUMBER 0x00000011
-#define CM_DRP_UPPERFILTERS 0x00000012
-#define CM_DRP_LOWERFILTERS 0x00000013
-#define CM_DRP_BUSTYPEGUID 0x00000014
-#define CM_DRP_LEGACYBUSTYPE 0x00000015
-#define CM_DRP_BUSNUMBER 0x00000016
-#define CM_DRP_ENUMERATOR_NAME 0x00000017
-
-#define CM_DRP_MIN 0x00000001
-#define CM_DRP_MAX 0x00000017
-
-#define CM_REGISTRY_HARDWARE 0x00000000
-#define CM_REGISTRY_SOFTWARE 0x00000001
-#define CM_REGISTRY_USER 0x00000100
-#define CM_REGISTRY_CONFIG 0x00000200
-#define CM_REGISTRY_BITS 0x00000301
-
-#define CM_DEVCAP_LOCKSUPPORTED 0x00000001
-#define CM_DEVCAP_EJECTSUPPORTED 0x00000002
-#define CM_DEVCAP_REMOVABLE 0x00000004
-#define CM_DEVCAP_DOCKDEVICE 0x00000008
-#define CM_DEVCAP_UNIQUEID 0x00000010
-#define CM_DEVCAP_SILENTINSTALL 0x00000020
-#define CM_DEVCAP_RAWDEVICEOK 0x00000040
-#define CM_DEVCAP_SURPRISEREMOVALOK 0x00000080
-#define CM_DEVCAP_HARDWAREDISABLED 0x00000100
-#define CM_DEVCAP_NONDYNAMIC 0x00000200
-
-typedef struct BusNumber_Des_s {
- DWORD BUSD_Count;
- DWORD BUSD_Type;
- DWORD BUSD_Flags;
- ULONG BUSD_Alloc_Base;
- ULONG BUSD_Alloc_End;
-} BUSNUMBER_DES, *PBUSNUMBER_DES;
-
-typedef struct BusNumber_Range_s {
- ULONG BUSR_Min;
- ULONG BUSR_Max;
- ULONG BUSR_nBusNumbers;
- ULONG BUSR_Flags;
-} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
-
-#define BusNumberType_Range sizeof(BUSNUMBER_RANGE)
-
-typedef struct BusNumber_Resource_s {
- BUSNUMBER_DES BusNumber_Header;
- BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY];
-} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
-
-typedef struct CS_Des_s {
- DWORD CSD_SignatureLength;
- DWORD CSD_LegacyDataOffset;
- DWORD CSD_LegacyDataSize;
- DWORD CSD_Flags;
- GUID CSD_ClassGuid;
- BYTE CSD_Signature[ANYSIZE_ARRAY];
-} CS_DES, *PCS_DES;
-
-typedef struct CS_Resource_s {
- CS_DES CS_Header;
-} CS_RESOURCE, *PCS_RESOURCE;
-
-typedef struct DevPrivate_Des_s {
- DWORD PD_Count;
- DWORD PD_Type;
- DWORD PD_Data1;
- DWORD PD_Data2;
- DWORD PD_Data3;
- DWORD PD_Flags;
-} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
-
-typedef struct DevPrivate_Range_s {
- DWORD PR_Data1;
- DWORD PR_Data2;
- DWORD PR_Data3;
-} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
-
-#define PType_Range sizeof(DEVPRIVATE_RANGE)
-
-typedef struct DevPrivate_Resource_s {
- DEVPRIVATE_DES PRV_Header;
- DEVPRIVATE_RANGE PRV_Data[ANYSIZE_ARRAY];
-} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
-
-/* DMA_DES.DD_Flags constants and masks */
-#define mDD_Width 0x3
-#define fDD_BYTE 0x0
-#define fDD_WORD 0x1
-#define fDD_DWORD 0x2
-#define fDD_BYTE_AND_WORD 0x3
-
-#define mDD_BusMaster 0x4
-#define fDD_NoBusMaster 0x0
-#define fDD_BusMaster 0x4
-
-#define mDD_Type 0x18
-#define fDD_TypeStandard 0x00
-#define fDD_TypeA 0x08
-#define fDD_TypeB 0x10
-#define fDD_TypeF 0x18
-
-typedef struct DMA_Des_s {
- DWORD DD_Count;
- DWORD DD_Type;
- DWORD DD_Flags;
- ULONG DD_Alloc_Chan;
-} DMA_DES, *PDMA_DES;
-
-typedef struct DMA_Range_s {
- ULONG DR_Min;
- ULONG DR_Max;
- ULONG DR_Flags;
-} DMA_RANGE, *PDMA_RANGE;
-
-#define DType_Range sizeof(DMA_RANGE)
-
-typedef struct DMA_Resource_s {
- DMA_DES DMA_Header;
- DMA_RANGE DMA_Data[ANYSIZE_ARRAY];
-} DMA_RESOURCE, *PDMA_RESOURCE;
-
-/* IO_DES.Type constants and masks */
-#define fIOD_PortType 0x1
-#define fIOD_Memory 0x0
-#define fIOD_IO 0x1
-#define fIOD_DECODE 0x00fc
-#define fIOD_10_BIT_DECODE 0x0004
-#define fIOD_12_BIT_DECODE 0x0008
-#define fIOD_16_BIT_DECODE 0x0010
-#define fIOD_POSITIVE_DECODE 0x0020
-#define fIOD_PASSIVE_DECODE 0x0040
-#define fIOD_WINDOW_DECODE 0x0080
-
-typedef struct IO_Des_s {
- DWORD IOD_Count;
- DWORD IOD_Type;
- DWORDLONG IOD_Alloc_Base;
- DWORDLONG IOD_Alloc_End;
- DWORD IOD_DesFlags;
-} IO_DES, *PIO_DES;
-
-/* IO_RANGE.IOR_Alias constants */
-#define IO_ALIAS_10_BIT_DECODE 0x00000004
-#define IO_ALIAS_12_BIT_DECODE 0x00000010
-#define IO_ALIAS_16_BIT_DECODE 0x00000000
-#define IO_ALIAS_POSITIVE_DECODE 0x000000FF
-
-typedef struct IO_Range_s {
- DWORDLONG IOR_Align;
- DWORD IOR_nPorts;
- DWORDLONG IOR_Min;
- DWORDLONG IOR_Max;
- DWORD IOR_RangeFlags;
- DWORDLONG IOR_Alias;
-} IO_RANGE, *PIO_RANGE;
-
-#define IOType_Range sizeof(IO_RANGE)
-
-typedef struct IO_Resource_s {
- IO_DES IO_Header;
- IO_RANGE IO_Data[ANYSIZE_ARRAY];
-} IO_RESOURCE, *PIO_RESOURCE;
-
-/* IRQ_DES.IRQD_flags constants */
-#define mIRQD_Share 0x1
-#define fIRQD_Exclusive 0x0
-#define fIRQD_Share 0x1
-
-#define fIRQD_Share_Bit 0
-#define fIRQD_Level_Bit 1
-
-#define mIRQD_Edge_Level 0x2
-#define fIRQD_Level 0x0
-#define fIRQD_Edge 0x2
-
-typedef struct IRQ_Des_32_s {
- DWORD IRQD_Count;
- DWORD IRQD_Type;
- DWORD IRQD_Flags;
- ULONG IRQD_Alloc_Num;
- ULONG32 IRQD_Affinity;
-} IRQ_DES_32, *PIRQ_DES_32;
-
-typedef struct IRQ_Des_64_s {
- DWORD IRQD_Count;
- DWORD IRQD_Type;
- DWORD IRQD_Flags;
- ULONG IRQD_Alloc_Num;
- ULONG64 IRQD_Affinity;
-} IRQ_DES_64, *PIRQ_DES_64;
-
-#ifdef _WIN64
-typedef IRQ_DES_64 IRQ_DES;
-typedef PIRQ_DES_64 PIRQ_DES;
-#else
-typedef IRQ_DES_32 IRQ_DES;
-typedef PIRQ_DES_32 PIRQ_DES;
-#endif
-
-typedef struct IRQ_Range_s {
- ULONG IRQR_Min;
- ULONG IRQR_Max;
- ULONG IRQR_Flags;
-} IRQ_RANGE, *PIRQ_RANGE;
-
-#define IRQType_Range sizeof(IRQ_RANGE)
-
-typedef struct IRQ_Resource_s {
- IRQ_DES IRQ_Header;
- IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
-} IRQ_RESOURCE, *PIRQ_RESOURCE;
-
-/* MEM_DES.MD_Flags constants */
-#define mMD_MemoryType 0x1
-#define fMD_MemoryType mMD_MemoryType
-#define fMD_ROM 0x0
-#define fMD_RAM 0x1
-
-#define mMD_32_24 0x2
-#define fMD_32_24 mMD_32_24
-#define fMD_24 0x0
-#define fMD_32 0x2
-
-#define mMD_Prefetchable 0x4
-#define fMD_Prefetchable mMD_Prefetchable
-#define fMD_Pref mMD_Prefetchable
-#define fMD_PrefetchDisallowed 0x0
-#define fMD_PrefetchAllowed 0x4
-
-#define mMD_Readable 0x8
-#define fMD_Readable mMD_Readable
-#define fMD_ReadAllowed 0x0
-#define fMD_ReadDisallowed 0x8
-
-#define mMD_CombinedWrite 0x10
-#define fMD_CombinedWrite mMD_CombinedWrite
-#define fMD_CombinedWriteDisallowed 0x0
-#define fMD_CombinedWriteAllowed 0x10
-
-#define mMD_Cacheable 0x20
-#define fMD_NonCacheable 0x0
-#define fMD_Cacheable 0x20
-
-typedef struct Mem_Des_s {
- DWORD MD_Count;
- DWORD MD_Type;
- DWORDLONG MD_Alloc_Base;
- DWORDLONG MD_Alloc_End;
- DWORD MD_Flags;
- DWORD MD_Reserved;
-} MEM_DES, *PMEM_DES;
-
-typedef struct Mem_Range_s {
- DWORDLONG MR_Align;
- ULONG MR_nBytes;
- DWORDLONG MR_Min;
- DWORDLONG MR_Max;
- DWORD MR_Flags;
- DWORD MR_Reserved;
-} MEM_RANGE, *PMEM_RANGE;
-
-#define MType_Range sizeof(MEM_RANGE)
-
-typedef struct Mem_Resource_s {
- MEM_DES MEM_Header;
- MEM_RANGE MEM_Data[ANYSIZE_ARRAY];
-} MEM_RESOURCE, *PMEM_RESOURCE;
-
-/* MFCARD_DES.PMF_Flags constants */
-#define fPMF_AUDIO_ENABLE 0x8
-#define mPMF_AUDIO_ENABLE fPMF_AUDIO_ENABLE
-
-typedef struct MfCard_Des_s {
- DWORD PMF_Count;
- DWORD PMF_Type;
- DWORD PMF_Flags;
- BYTE PMF_ConfigOptions;
- BYTE PMF_IoResourceIndex;
- BYTE PMF_Reserved[2];
- DWORD PMF_ConfigRegisterBase;
-} MFCARD_DES, *PMFCARD_DES;
-
-typedef struct MfCard_Resource_s {
- MFCARD_DES MfCard_Header;
-} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
-
-/* PCCARD_DES.PCD_Flags constants */
-
-typedef struct PcCard_Des_s {
- DWORD PCD_Count;
- DWORD PCD_Type;
- DWORD PCD_Flags;
- BYTE PCD_ConfigIndex;
- BYTE PCD_Reserved[3];
- DWORD PCD_MemoryCardBase1;
- DWORD PCD_MemoryCardBase2;
-} PCCARD_DES, *PPCCARD_DES;
-
-#define mPCD_IO_8_16 0x1
-#define fPCD_IO_8 0x0
-#define fPCD_IO_16 0x1
-#define mPCD_MEM_8_16 0x2
-#define fPCD_MEM_8 0x0
-#define fPCD_MEM_16 0x2
-#define mPCD_MEM_A_C 0xC
-#define fPCD_MEM1_A 0x4
-#define fPCD_MEM2_A 0x8
-#define fPCD_IO_ZW_8 0x10
-#define fPCD_IO_SRC_16 0x20
-#define fPCD_IO_WS_16 0x40
-#define mPCD_MEM_WS 0x300
-#define fPCD_MEM_WS_ONE 0x100
-#define fPCD_MEM_WS_TWO 0x200
-#define fPCD_MEM_WS_THREE 0x300
-
-#define fPCD_MEM_A 0x4
-
-#define fPCD_ATTRIBUTES_PER_WINDOW 0x8000
-
-#define fPCD_IO1_16 0x00010000
-#define fPCD_IO1_ZW_8 0x00020000
-#define fPCD_IO1_SRC_16 0x00040000
-#define fPCD_IO1_WS_16 0x00080000
-
-#define fPCD_IO2_16 0x00100000
-#define fPCD_IO2_ZW_8 0x00200000
-#define fPCD_IO2_SRC_16 0x00400000
-#define fPCD_IO2_WS_16 0x00800000
-
-#define mPCD_MEM1_WS 0x03000000
-#define fPCD_MEM1_WS_ONE 0x01000000
-#define fPCD_MEM1_WS_TWO 0x02000000
-#define fPCD_MEM1_WS_THREE 0x03000000
-#define fPCD_MEM1_16 0x04000000
-
-#define mPCD_MEM2_WS 0x30000000
-#define fPCD_MEM2_WS_ONE 0x10000000
-#define fPCD_MEM2_WS_TWO 0x20000000
-#define fPCD_MEM2_WS_THREE 0x30000000
-#define fPCD_MEM2_16 0x40000000
-
-#define PCD_MAX_MEMORY 2
-#define PCD_MAX_IO 2
-
-typedef struct PcCard_Resource_s {
- PCCARD_DES PcCard_Header;
-} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
-
-
-/* CONFLICT_DETAILS.CD.ulMask constants */
-#define CM_CDMASK_DEVINST 0x00000001
-#define CM_CDMASK_RESDES 0x00000002
-#define CM_CDMASK_FLAGS 0x00000004
-#define CM_CDMASK_DESCRIPTION 0x00000008
-#define CM_CDMASK_VALID 0x0000000F
-
-/* CONFLICT_DETAILS.CD.ulFlags constants */
-#define CM_CDFLAGS_DRIVER 0x00000001
-#define CM_CDFLAGS_ROOT_OWNED 0x00000002
-#define CM_CDFLAGS_RESERVED 0x00000004
-
-typedef struct _CONFLICT_DETAILS_A {
- ULONG CD_ulSize;
- ULONG CD_ulMask;
- DEVINST CD_dnDevInst;
- RES_DES CD_rdResDes;
- ULONG CD_ulFlags;
- CHAR CD_szDescription[MAX_PATH];
-} CONFLICT_DETAILS_A , *PCONFLICT_DETAILS_A;
-
-typedef struct _CONFLICT_DETAILS_W {
- ULONG CD_ulSize;
- ULONG CD_ulMask;
- DEVINST CD_dnDevInst;
- RES_DES CD_rdResDes;
- ULONG CD_ulFlags;
- WCHAR CD_szDescription[MAX_PATH];
-} CONFLICT_DETAILS_W , *PCONFLICT_DETAILS_W;
-
-#ifdef UNICODE
-typedef CONFLICT_DETAILS_W CONFLICT_DETAILS;
-typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
-#else
-typedef CONFLICT_DETAILS_A CONFLICT_DETAILS;
-typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
-#endif
-
-
-#define CMP_MAGIC 0x01234567
-
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_Init_Detection(
- IN DWORD dwMagic);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_RegisterNotification(
- IN HANDLE hRecipient,
- IN LPVOID lpvNotificationFilter,
- IN DWORD dwFlags,
- OUT PULONG pluhDevNotify);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_Report_LogOn(
- IN DWORD dwMagic,
- IN DWORD dwProcessId);
-
-CMAPI
-CONFIGRET
-WINAPI
-CMP_UnregisterNotification(IN ULONG luhDevNotify);
-
-/* FIXME: Missing CMP_WaitNoPendingInstallEvents */
-/* FIXME: Missing CMP_WaitServicesAvailable */
-
-/* CM_Add_Empty_Log_Conf.ulFlags constants */
-#define BASIC_LOG_CONF 0x00000000
-#define FILTERED_LOG_CONF 0x00000001
-#define ALLOC_LOG_CONF 0x00000002
-#define BOOT_LOG_CONF 0x00000003
-#define FORCED_LOG_CONF 0x00000004
-#define OVERRIDE_LOG_CONF 0x00000005
-#define NUM_LOG_CONF 0x00000006
-#define LOG_CONF_BITS 0x00000007
-
-#define PRIORITY_EQUAL_FIRST 0x00000008
-#define PRIORITY_EQUAL_LAST 0x00000000
-#define PRIORITY_BIT 0x00000008
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Empty_Log_Conf(
- OUT PLOG_CONF plcLogConf,
- IN DEVINST dnDevInst,
- IN PRIORITY Priority,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Empty_Log_Conf_Ex(
- OUT PLOG_CONF plcLogConf,
- IN DEVINST dnDevInst,
- IN PRIORITY Priority,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* CM_Add_ID.ulFlags constants */
-#define CM_ADD_ID_HARDWARE 0x00000000
-#define CM_ADD_ID_COMPATIBLE 0x00000001
-#define CM_ADD_ID_BITS 0x00000001
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_IDA(
- IN DEVINST dnDevInst,
- IN PSTR pszID,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_ID_ExA(
- IN DEVINST dnDevInst,
- IN PSTR pszID,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_ID_ExW(
- IN DEVINST dnDevInst,
- IN PWSTR pszID,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_IDW(
- IN DEVINST dnDevInst,
- IN PWSTR pszID,
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Add_ID CM_Add_IDW
-#define CM_Add_ID_Ex CM_Add_ID_ExW
-#else
-#define CM_Add_ID CM_Add_IDA
-#define CM_Add_ID_Ex CM_Add_ID_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Add_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Res_Des(
- OUT PRES_DES prdResDes,
- IN LOG_CONF lcLogConf,
- IN RESOURCEID ResourceID,
- IN PCVOID ResourceData,
- IN ULONG ResourceLen,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Add_Res_Des_Ex(
- OUT PRES_DES prdResDes,
- IN LOG_CONF lcLogConf,
- IN RESOURCEID ResourceID,
- IN PCVOID ResourceData,
- IN ULONG ResourceLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Connect_MachineA(
- IN PCSTR UNCServerName,
- OUT PHMACHINE phMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Connect_MachineW(
- IN PCWSTR UNCServerName,
- OUT PHMACHINE phMachine);
-
-#ifdef UNICODE
-#define CM_Connect_Machine CM_Connect_MachineW
-#else
-#define CM_Connect_Machine CM_Connect_MachineA
-#endif /* UNICODE */
-
-/* Flags for CM_Create_DevNode[_Ex].ulFlags constants */
-#define CM_CREATE_DEVNODE_NORMAL 0x00000000
-#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
-#define CM_CREATE_DEVNODE_PHANTOM 0x00000002
-#define CM_CREATE_DEVNODE_GENERATE_ID 0x00000004
-#define CM_CREATE_DEVNODE_DO_NOT_INSTALL 0x00000008
-#define CM_CREATE_DEVNODE_BITS 0x0000000F
-
-#define CM_CREATE_DEVINST_NORMAL CM_CREATE_DEVNODE_NORMAL
-#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
-#define CM_CREATE_DEVINST_PHANTOM CM_CREATE_DEVNODE_PHANTOM
-#define CM_CREATE_DEVINST_GENERATE_ID CM_CREATE_DEVNODE_GENERATE_ID
-#define CM_CREATE_DEVINST_DO_NOT_INSTALL CM_CREATE_DEVNODE_DO_NOT_INSTALL
-#define CM_CREATE_DEVINST_BITS CM_CREATE_DEVNODE_BITS
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNodeA(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_A pDeviceID,
- IN DEVINST dnParent,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNodeW(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_W pDeviceID,
- IN DEVINST dnParent,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNode_ExA(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_A pDeviceID,
- IN DEVINST dnParent,
- IN ULONG ulFlags,
- IN HANDLE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Create_DevNode_ExW(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_W pDeviceID,
- IN DEVINST dnParent,
- IN ULONG ulFlags,
- IN HANDLE hMachine);
-
-#define CM_Create_DevInstW CM_Create_DevNodeW
-#define CM_Create_DevInstA CM_Create_DevNodeA
-#define CM_Create_DevInst_ExW CM_Create_DevNode_ExW
-#define CM_Create_DevInst_ExA CM_Create_DevNode_ExA
-#ifdef UNICODE
-#define CM_Create_DevNode CM_Create_DevNodeW
-#define CM_Create_DevInst CM_Create_DevNodeW
-#define CM_Create_DevNode_Ex CM_Create_DevNode_ExW
-#define CM_Create_DevInst_Ex CM_Create_DevInst_ExW
-#else
-#define CM_Create_DevNode CM_Create_DevNodeA
-#define CM_Create_DevInst CM_Create_DevNodeA
-#define CM_Create_DevNode_Ex CM_Create_DevNode_ExA
-#define CM_Create_DevInst_Ex CM_Create_DevNode_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Create_Range_List */
-
-/* Flags for CM_Delete_Class_Key.ulFlags constants */
-#define CM_DELETE_CLASS_ONLY 0x00000000
-#define CM_DELETE_CLASS_SUBKEYS 0x00000001
-#define CM_DELETE_CLASS_BITS 0x00000001
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_Class_Key(
- IN LPGUID ClassGuid,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_Class_Key_Ex(
- IN LPGUID ClassGuid,
- IN ULONG ulFlags,
- IN HANDLE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_DevNode_Key(
- IN DEVNODE dnDevNode,
- IN ULONG ulHardwareProfile,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Delete_DevNode_Key_Ex(
- IN DEVNODE dnDevNode,
- IN ULONG ulHardwareProfile,
- IN ULONG ulFlags,
- IN HANDLE hMachine);
-
-#define CM_Delete_DevInst_Key CM_Delete_DevNode_Key
-#define CM_Delete_DevInst_Key_Ex CM_Delete_DevNode_Key_Ex
-
-/* FIXME: Obsolete CM_Delete_Range */
-/* FIXME: Obsolete CM_Detected_Resource_Conflict */
-/* FIXME: Obsolete CM_Detected_Resource_Conflict_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disable_DevNode(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disable_DevNode_Ex(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Disable_DevInst CM_Disable_DevNode
-#define CM_Disable_DevInst_Ex CM_Disable_DevNode_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Disconnect_Machine(
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enable_DevNode(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enable_DevNode_Ex(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Enable_DevInst CM_Enable_DevNode
-#define CM_Enable_DevInst_Ex CM_Enable_DevNode_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Classes(
- IN ULONG ulClassIndex,
- OUT LPGUID ClassGuid,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Classes_Ex(
- IN ULONG ulClassIndex,
- OUT LPGUID ClassGuid,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_EnumeratorsA(
- IN ULONG ulEnumIndex,
- OUT PCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Enumerators_ExA(
- IN ULONG ulEnumIndex,
- OUT PCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_Enumerators_ExW(
- IN ULONG ulEnumIndex,
- OUT PWCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Enumerate_EnumeratorsW(
- IN ULONG ulEnumIndex,
- OUT PWCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
-#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
-#else
-#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsA
-#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Find_Range */
-/* FIXME: Obsolete CM_First_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf(
- IN LOG_CONF lcLogConfToBeFreed,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf_Ex(
- IN LOG_CONF lcLogConfToBeFreed,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Log_Conf_Handle(
- IN LOG_CONF lcLogConf);
-
-/* FIXME: Obsolete CM_Free_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des_Ex(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Res_Des_Handle(
- IN RES_DES rdResDes);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Free_Resource_Conflict_Handle(
- IN CONFLICT_LIST clConflictList);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Child(
- OUT PDEVINST pdnDevInst,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Child_Ex(
- OUT PDEVINST pdnDevInst,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_NameA(
- IN LPGUID ClassGuid,
- OUT PCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_NameW(
- IN LPGUID ClassGuid,
- OUT PWCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Name_ExA(
- IN LPGUID ClassGuid,
- OUT PCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Name_ExW(
- IN LPGUID ClassGuid,
- OUT PWCHAR Buffer,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#ifdef UNICODE
-#define CM_Get_Class_Name CM_Get_Class_NameW
-#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExW
-#else
-#define CM_Get_Class_Name CM_Get_Class_NameA
-#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_NameA(
- IN LPGUID ClassGuid,
- OUT LPSTR pszKeyName,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_NameW(
- IN LPGUID ClassGuid,
- OUT LPWSTR pszKeyName,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_Name_ExA(
- IN LPGUID ClassGuid,
- OUT LPSTR pszKeyName,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Class_Key_Name_ExW(
- IN LPGUID ClassGuid,
- OUT LPWSTR pszKeyName,
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#ifdef UNICODE
-#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameW
-#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExW
-#else
-#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameA
-#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Get_Class_Registry_Property */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Depth(
- OUT PULONG pulDepth,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Depth_Ex(
- OUT PULONG pulDepth,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_IDA(
- IN DEVINST dnDevInst,
- OUT PCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ExA(
- IN DEVINST dnDevInst,
- OUT PCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ExW(
- IN DEVINST dnDevInst,
- OUT PWCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_IDW(
- IN DEVINST dnDevInst,
- OUT PWCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID CM_Get_Device_IDW
-#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
-#else
-#define CM_Get_Device_ID CM_Get_Device_IDA
-#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ListA(
- IN PCSTR pszFilter, OPTIONAL
- OUT PCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_ExA(
- IN PCSTR pszFilter, OPTIONAL
- OUT PCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_ExW(
- IN PCWSTR pszFilter, OPTIONAL
- OUT PWCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_ListW(
- IN PCWSTR pszFilter, OPTIONAL
- OUT PWCHAR Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
-#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExW
-#else
-#define CM_Get_Device_ID_List CM_Get_Device_ID_ListA
-#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_SizeA(
- OUT PULONG pulLen,
- IN PCSTR pszFilter, OPTIONAL
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_Size_ExA(
- OUT PULONG pulLen,
- IN PCSTR pszFilter, OPTIONAL
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_Size_ExW(
- OUT PULONG pulLen,
- IN PCWSTR pszFilter, OPTIONAL
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_List_SizeW(
- OUT PULONG pulLen,
- IN PCWSTR pszFilter, OPTIONAL
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
-#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExW
-#else
-#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeA
-#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_Size(
- OUT PULONG pulLen,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Device_ID_Size_Ex(
- OUT PULONG pulLen,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Get_Device_Interface_Alias */
-/* FIXME: Obsolete CM_Get_Device_Interface_Alias_Ex */
-/* FIXME: Obsolete CM_Get_Device_Interface_List */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Ex */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Size */
-/* FIXME: Obsolete CM_Get_Device_Interface_List_Size_Ex */
-/* FIXME: Obsolete CM_Get_DevNode_Custom_Property */
-/* FIXME: Obsolete CM_Get_DevNode_Custom_Property_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_PropertyA(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- OUT PULONG pulRegDataType, OPTIONAL
- OUT PVOID Buffer, OPTIONAL
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_PropertyW(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- OUT PULONG pulRegDataType, OPTIONAL
- OUT PVOID Buffer, OPTIONAL
- IN OUT PULONG pulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_Property_ExA(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- OUT PULONG pulRegDataType, OPTIONAL
- OUT PVOID Buffer, OPTIONAL
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Registry_Property_ExW(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- OUT PULONG pulRegDataType, OPTIONAL
- OUT PVOID Buffer, OPTIONAL
- IN OUT PULONG pulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevInst_Registry_Property_ExW CM_Get_DevNode_Registry_Property_ExW
-#define CM_Get_DevInst_Registry_Property_ExA CM_Get_DevNode_Registry_Property_ExA
-
-#ifdef UNICODE
-#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
-#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW
-#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
-#else
-#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
-#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA
-#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Status(
- OUT PULONG pulStatus,
- OUT PULONG pulProblemNumber,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_DevNode_Status_Ex(
- OUT PULONG pulStatus,
- OUT PULONG pulProblemNumber,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Get_DevInst_Status CM_Get_DevNode_Status
-#define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
-
-/* CM_Get_First_Log_Conf.ulFlags constants */
-#define BASIC_LOG_CONF 0x00000000 /* Specifies the req list. */
-#define FILTERED_LOG_CONF 0x00000001 /* Specifies the filtered req list. */
-#define ALLOC_LOG_CONF 0x00000002 /* Specifies the Alloc Element. */
-#define BOOT_LOG_CONF 0x00000003 /* Specifies the RM Alloc Element. */
-#define FORCED_LOG_CONF 0x00000004 /* Specifies the Forced Log Conf */
-#define OVERRIDE_LOG_CONF 0x00000005 /* Specifies the Override req list. */
-#define NUM_LOG_CONF 0x00000006 /* Number of Log Conf type */
-#define LOG_CONF_BITS 0x00000007 /* The bits of the log conf type. */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_First_Log_Conf(
- OUT PLOG_CONF plcLogConf, OPTIONAL
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_First_Log_Conf_Ex(
- OUT PLOG_CONF plcLogConf, OPTIONAL
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Global_State(
- OUT PULONG pulState,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Global_State_Ex(
- OUT PULONG pulState,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Get_Hardware_Profile_Info */
-/* FIXME: Obsolete CM_Get_Hardware_Profile_Info_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_FlagsA(
- IN DEVINSTID_A szDevInstName,
- IN ULONG ulHardwareProfile,
- OUT PULONG pulValue,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_FlagsW(
- IN DEVINSTID_W szDevInstName,
- IN ULONG ulHardwareProfile,
- OUT PULONG pulValue,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_Flags_ExA(
- IN DEVINSTID_A szDevInstName,
- IN ULONG ulHardwareProfile,
- OUT PULONG pulValue,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_HW_Prof_Flags_ExW(
- IN DEVINSTID_W szDevInstName,
- IN ULONG ulHardwareProfile,
- OUT PULONG pulValue,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#ifdef UNICODE
-#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsW
-#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExW
-#else
-#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsA
-#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Log_Conf_Priority(
- IN LOG_CONF lcLogConf,
- OUT PPRIORITY pPriority,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Log_Conf_Priority_Ex(
- IN LOG_CONF lcLogConf,
- OUT PPRIORITY pPriority,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Log_Conf(
- OUT PLOG_CONF plcLogConf, OPTIONAL
- IN LOG_CONF lcLogConf,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Log_Conf_Ex(
- OUT PLOG_CONF plcLogConf, OPTIONAL
- IN LOG_CONF lcLogConf,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Res_Des(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN RESOURCEID ForResource,
- OUT PRESOURCEID pResourceID,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Next_Res_Des_Ex(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN RESOURCEID ForResource,
- OUT PRESOURCEID pResourceID,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Parent(
- OUT PDEVINST pdnDevInst,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Parent_Ex(
- OUT PDEVINST pdnDevInst,
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data(
- IN RES_DES rdResDes,
- OUT PVOID Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Ex(
- IN RES_DES rdResDes,
- OUT PVOID Buffer,
- IN ULONG BufferLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Size(
- OUT PULONG pulSize,
- IN RES_DES rdResDes,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Res_Des_Data_Size_Ex(
- OUT PULONG pulSize,
- IN RES_DES rdResDes,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_Count(
- IN CONFLICT_LIST clConflictList,
- OUT PULONG pulCount);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_DetailsA(
- IN CONFLICT_LIST clConflictList,
- IN ULONG ulIndex,
- IN OUT PCONFLICT_DETAILS_A pConflictDetails);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Resource_Conflict_DetailsW(
- IN CONFLICT_LIST clConflictList,
- IN ULONG ulIndex,
- IN OUT PCONFLICT_DETAILS_W pConflictDetails);
-
-#ifdef UNICODE
-#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
-#else
-#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Sibling(
- OUT PDEVINST pdnDevInst,
- IN DEVINST DevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Get_Sibling_Ex(
- OUT PDEVINST pdnDevInst,
- IN DEVINST DevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-WORD
-WINAPI
-CM_Get_Version(
- VOID);
-
-CMAPI
-WORD
-WINAPI
-CM_Get_Version_Ex(
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Intersect_Range_List */
-/* FIXME: Obsolete CM_Invert_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Is_Dock_Station_Present(
- OUT PBOOL pbPresent);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Is_Dock_Station_Present_Ex(
- OUT PBOOL pbPresent,
- IN HMACHINE hMachine);
-
-/* CM_Locate_DevNode.ulFlags constants */
-#define CM_LOCATE_DEVNODE_NORMAL 0x00000000
-#define CM_LOCATE_DEVNODE_PHANTOM 0x00000001
-#define CM_LOCATE_DEVNODE_CANCELREMOVE 0x00000002
-#define CM_LOCATE_DEVNODE_NOVALIDATION 0x00000004
-#define CM_LOCATE_DEVNODE_BITS 0x00000007
-
-#define CM_LOCATE_DEVINST_NORMAL CM_LOCATE_DEVNODE_NORMAL
-#define CM_LOCATE_DEVINST_PHANTOM CM_LOCATE_DEVNODE_PHANTOM
-#define CM_LOCATE_DEVINST_CANCELREMOVE CM_LOCATE_DEVNODE_CANCELREMOVE
-#define CM_LOCATE_DEVINST_NOVALIDATION CM_LOCATE_DEVNODE_NOVALIDATION
-#define CM_LOCATE_DEVINST_BITS CM_LOCATE_DEVNODE_BITS
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNodeA(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_A pDeviceID, OPTIONAL
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNode_ExA(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_A pDeviceID, OPTIONAL
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNode_ExW(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_W pDeviceID, OPTIONAL
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Locate_DevNodeW(
- OUT PDEVINST pdnDevInst,
- IN DEVINSTID_W pDeviceID, OPTIONAL
- IN ULONG ulFlags);
-
-#define CM_Locate_DevInstA CM_Locate_DevNodeA
-#define CM_Locate_DevInstW CM_Locate_DevNodeW
-#define CM_Locate_DevInst_ExA CM_Locate_DevNode_ExA
-#define CM_Locate_DevInst_ExW CM_Locate_DevNode_ExW
-
-#ifdef UNICODE
-#define CM_Locate_DevNode CM_Locate_DevNodeW
-#define CM_Locate_DevInst CM_Locate_DevNodeW
-#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExW
-#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExW
-#else
-#define CM_Locate_DevNode CM_Locate_DevNodeA
-#define CM_Locate_DevInst CM_Locate_DevNodeA
-#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExA
-#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExA
-#endif /* UNICODE */
-
-/* FIXME: Obsolete CM_Merge_Range_List */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Modify_Res_Des(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN RESOURCEID ResourceID,
- IN PCVOID ResourceData,
- IN ULONG ResourceLen,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Modify_Res_Des_Ex(
- OUT PRES_DES prdResDes,
- IN RES_DES rdResDes,
- IN RESOURCEID ResourceID,
- IN PCVOID ResourceData,
- IN ULONG ResourceLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Move_DevNode */
-/* FIXME: Obsolete CM_Move_DevNode_Ex */
-/* FIXME: Obsolete CM_Next_Range */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_KeyA(
- IN LPGUID ClassGuid, OPTIONAL
- IN LPCSTR pszClassName, OPTIONAL
- IN REGSAM samDesired,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkClass,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_KeyW(
- IN LPGUID ClassGuid, OPTIONAL
- IN LPCWSTR pszClassName, OPTIONAL
- IN REGSAM samDesired,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkClass,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_Key_ExA(
- IN LPGUID pszClassGuid, OPTIONAL
- IN LPCSTR pszClassName, OPTIONAL
- IN REGSAM samDesired,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkClass,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_Class_Key_ExW(
- IN LPGUID pszClassGuid, OPTIONAL
- IN LPCWSTR pszClassName, OPTIONAL
- IN REGSAM samDesired,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkClass,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#ifdef UNICODE
-#define CM_Open_Class_Key CM_Open_Class_KeyW
-#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExW
-#else
-#define CM_Open_Class_Key CM_Open_Class_KeyA
-#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_DevNode_Key(
- IN DEVINST dnDevNode,
- IN REGSAM samDesired,
- IN ULONG ulHardwareProfile,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkDevice,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Open_DevNode_Key_Ex(
- IN DEVINST dnDevNode,
- IN REGSAM samDesired,
- IN ULONG ulHardwareProfile,
- IN REGDISPOSITION Disposition,
- OUT PHKEY phkDevice,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Open_DevInst_Key CM_Open_DevNode_Key
-#define CM_Open_DevInst_Key_Ex CM_Open_DevNode_Key_Ex
-
-/* CM_Query_And_Remove_SubTree.ulFlags constants */
-#define CM_REMOVE_UI_OK 0x00000000
-#define CM_REMOVE_UI_NOT_OK 0x00000001
-#define CM_REMOVE_NO_RESTART 0x00000002
-#define CM_REMOVE_BITS 0x00000003
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTreeA(
- IN DEVINST dnAncestor,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTreeW(
- IN DEVINST dnAncestor,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPWSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTree_ExA(
- IN DEVINST dnAncestor,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_And_Remove_SubTree_ExW(
- IN DEVINST dnAncestor,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPWSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data_Ex */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
-/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
-/* FIXME: Obsolete CM_Query_Remove_SubTree */
-/* FIXME: Obsolete CM_Query_Remove_SubTree_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Query_Resource_Conflict_List(
- OUT PCONFLICT_LIST pclConflictList,
- IN DEVINST dnDevInst,
- IN RESOURCEID ResourceID,
- IN PCVOID ResourceData,
- IN ULONG ResourceLen,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* CM_Reenumerate_DevNode.ulFlags constants */
-#define CM_REENUMERATE_NORMAL 0x00000000
-#define CM_REENUMERATE_SYNCHRONOUS 0x00000001
-#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
-#define CM_REENUMERATE_ASYNCHRONOUS 0x00000004
-#define CM_REENUMERATE_BITS 0x00000007
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Reenumerate_DevNode(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Reenumerate_DevNode_Ex(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
-#define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
-
-/* FIXME: Obsolete CM_Register_Device_Driver */
-/* FIXME: Obsolete CM_Register_Device_Driver_Ex */
-/* FIXME: Obsolete CM_Register_Device_Interface */
-/* FIXME: Obsolete CM_Register_Device_Interface_Ex */
-/* FIXME: Obsolete CM_Remove_SubTree */
-/* FIXME: Obsolete CM_Remove_SubTree_Ex */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_EjectA(
- IN DEVINST dnDevInst,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_Eject_ExW(
- IN DEVINST dnDevInst,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPWSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_Eject_ExA(
- IN DEVINST dnDevInst,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Device_EjectW(
- IN DEVINST dnDevInst,
- OUT PPNP_VETO_TYPE pVetoType,
- OUT LPWSTR pszVetoName,
- IN ULONG ulNameLength,
- IN ULONG ulFlags);
-
-#ifdef UNICODE
-#define CM_Request_Device_Eject CM_Request_Device_EjectW
-#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExW
-#else
-#define CM_Request_Device_Eject CM_Request_Device_EjectA
-#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Eject_PC(
- VOID);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Request_Eject_PC_Ex(
- IN HMACHINE hMachine);
-
-/* CM_Run_Detection[_Ex].ulFlags constants */
-#define CM_DETECT_NEW_PROFILE 0x00000001
-#define CM_DETECT_CRASHED 0x00000002
-#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
-#define CM_DETECT_RUN 0x80000000
-#define CM_DETECT_BITS 0x80000007
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Run_Detection(
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Run_Detection_Ex(
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Set_Class_Registry_Property */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Problem(
- IN DEVINST dnDevInst,
- IN ULONG ulProblem,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Problem_Ex(
- IN DEVINST dnDevInst,
- IN ULONG ulProblem,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Set_DevInst_Problem CM_Set_DevNode_Problem
-#define CM_Set_DevInst_Problem_Ex CM_Set_DevNode_Problem_Ex
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_PropertyA(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- IN PCVOID Buffer, OPTIONAL
- IN ULONG ulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_PropertyW(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- IN PCVOID Buffer, OPTIONAL
- IN ULONG ulLength,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_Property_ExA(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- IN PCVOID Buffer, OPTIONAL
- IN ULONG ulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_DevNode_Registry_Property_ExW(
- IN DEVINST dnDevInst,
- IN ULONG ulProperty,
- IN PCVOID Buffer, OPTIONAL
- IN ULONG ulLength,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevInst_Registry_Property_ExW CM_Set_DevNode_Registry_Property_ExW
-#define CM_Set_DevInst_Registry_Property_ExA CM_Set_DevNode_Registry_Property_ExA
-
-#ifdef UNICODE
-#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
-#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyW
-#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
-#else
-#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
-#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyA
-#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
-#endif /* UNICODE */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof(
- IN ULONG ulHardwareProfile,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Ex(
- IN ULONG ulHardwareProfile,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* CM_Set_HW_Prof_Flags[_Ex].ulFlags constants */
-#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK (0x00000001)
-#define CM_SET_HW_PROF_FLAGS_BITS (0x00000001)
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_FlagsA(
- IN DEVINSTID_A szDevInstName,
- IN ULONG ulConfig,
- IN ULONG ulValue,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_FlagsW(
- IN DEVINSTID_W szDevInstName,
- IN ULONG ulConfig,
- IN ULONG ulValue,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Flags_ExA(
- IN DEVINSTID_A szDevInstName,
- IN ULONG ulConfig,
- IN ULONG ulValue,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Set_HW_Prof_Flags_ExW(
- IN DEVINSTID_W szDevInstName,
- IN ULONG ulConfig,
- IN ULONG ulValue,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-#ifdef UNICODE
-#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsW
-#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExW
-#else
-#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsA
-#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExA
-#endif /* UNICODE */
-
-/* CM_Setup_DevInst[_Ex].ulFlags constants */
-#define CM_SETUP_DEVNODE_READY (0x00000000)
-#define CM_SETUP_DEVINST_READY CM_SETUP_DEVNODE_READY
-#define CM_SETUP_DOWNLOAD (0x00000001)
-#define CM_SETUP_WRITE_LOG_CONFS (0x00000002)
-#define CM_SETUP_PROP_CHANGE (0x00000003)
-#define CM_SETUP_DEVNODE_RESET (0x00000004)
-#define CM_SETUP_DEVINST_RESET CM_SETUP_DEVNODE_RESET
-#define CM_SETUP_BITS (0x00000007)
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Setup_DevNode(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Setup_DevNode_Ex(
- IN DEVINST dnDevInst,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Test_Range_Available */
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Uninstall_DevNode(
- IN DEVINST dnPhantom,
- IN ULONG ulFlags);
-
-CMAPI
-CONFIGRET
-WINAPI
-CM_Uninstall_DevNode_Ex(
- IN DEVINST dnPhantom,
- IN ULONG ulFlags,
- IN HMACHINE hMachine);
-
-/* FIXME: Obsolete CM_Unregister_Device_Interface */
-/* FIXME: Obsolete CM_Unregister_Device_Interface_Ex */
-
-#define CM_WaitNoPendingInstallEvents CMP_WaitNoPendingInstallEvents
-
-CMAPI
-DWORD
-WINAPI
-CMP_WaitNoPendingInstallEvents(
- IN DWORD dwTimeout);
-
-#include <poppack.h>
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CFGMGR32_H_ */
--- /dev/null
+#pragma once
+
+#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
+
+typedef union _MCI_ADDR {
+ struct {
+ ULONG Address;
+ ULONG Reserved;
+ } DUMMYSTRUCTNAME;
+ ULONGLONG QuadPart;
+} MCI_ADDR, *PMCI_ADDR;
+
+typedef enum {
+ HAL_MCE_RECORD,
+ HAL_MCA_RECORD
+} MCA_EXCEPTION_TYPE;
+
+#if defined(_AMD64_)
+
+#if (NTDDI_VERSION <= NTDDI_WINXP)
+
+typedef union _MCI_STATS {
+ struct {
+ USHORT McaCod;
+ USHORT ModelErrorCode;
+ ULONG OtherInfo:25;
+ ULONG Damage:1;
+ ULONG AddressValid:1;
+ ULONG MiscValid:1;
+ ULONG Enabled:1;
+ ULONG Uncorrected:1;
+ ULONG OverFlow:1;
+ ULONG Valid:1;
+ } MciStatus;
+ ULONG64 QuadPart;
+} MCI_STATS, *PMCI_STATS;
+
+#else
+
+typedef union _MCI_STATS {
+ struct {
+ USHORT McaErrorCode;
+ USHORT ModelErrorCode;
+ ULONG OtherInformation:25;
+ ULONG ContextCorrupt:1;
+ ULONG AddressValid:1;
+ ULONG MiscValid:1;
+ ULONG ErrorEnabled:1;
+ ULONG UncorrectedError:1;
+ ULONG StatusOverFlow:1;
+ ULONG Valid:1;
+ } MciStatus;
+ ULONG64 QuadPart;
+} MCI_STATS, *PMCI_STATS;
+
+#endif /* (NTDDI_VERSION <= NTDDI_WINXP) */
+
+#endif /* defined(_AMD64_) */
+
+#if defined(_X86_)
+typedef union _MCI_STATS {
+ struct {
+ USHORT McaCod;
+ USHORT MsCod;
+ ULONG OtherInfo:25;
+ ULONG Damage:1;
+ ULONG AddressValid:1;
+ ULONG MiscValid:1;
+ ULONG Enabled:1;
+ ULONG UnCorrected:1;
+ ULONG OverFlow:1;
+ ULONG Valid:1;
+ } MciStats;
+ ULONGLONG QuadPart;
+} MCI_STATS, *PMCI_STATS;
+#endif
+
+#define MCA_EXTREG_V2MAX 24
+
+#if defined(_X86_) || defined(_AMD64_)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+typedef struct _MCA_EXCEPTION {
+ ULONG VersionNumber;
+ MCA_EXCEPTION_TYPE ExceptionType;
+ LARGE_INTEGER TimeStamp;
+ ULONG ProcessorNumber;
+ ULONG Reserved1;
+ union {
+ struct {
+ UCHAR BankNumber;
+ UCHAR Reserved2[7];
+ MCI_STATS Status;
+ MCI_ADDR Address;
+ ULONGLONG Misc;
+ } Mca;
+ struct {
+ ULONGLONG Address;
+ ULONGLONG Type;
+ } Mce;
+ } u;
+ ULONG ExtCnt;
+ ULONG Reserved3;
+ ULONGLONG ExtReg[MCA_EXTREG_V2MAX];
+} MCA_EXCEPTION, *PMCA_EXCEPTION;
+
+#else
+
+typedef struct _MCA_EXCEPTION {
+ ULONG VersionNumber;
+ MCA_EXCEPTION_TYPE ExceptionType;
+ LARGE_INTEGER TimeStamp;
+ ULONG ProcessorNumber;
+ ULONG Reserved1;
+ union {
+ struct {
+ UCHAR BankNumber;
+ UCHAR Reserved2[7];
+ MCI_STATS Status;
+ MCI_ADDR Address;
+ ULONGLONG Misc;
+ } Mca;
+ struct {
+ ULONGLONG Address;
+ ULONGLONG Type;
+ } Mce;
+ } u;
+} MCA_EXCEPTION, *PMCA_EXCEPTION;
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+typedef MCA_EXCEPTION CMC_EXCEPTION, *PCMC_EXCEPTION;
+typedef MCA_EXCEPTION CPE_EXCEPTION, *PCPE_EXCEPTION;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#define MCA_EXCEPTION_V1_SIZE FIELD_OFFSET(MCA_EXCEPTION, ExtCnt)
+#define MCA_EXCEPTION_V2_SIZE sizeof(struct _MCA_EXCEPTION)
+#endif
+
+#endif /* defined(_X86_) || defined(_AMD64_) */
+
+#if defined(_AMD64_) || defined(_IA64_)
+
+typedef UCHAR ERROR_SEVERITY, *PERROR_SEVERITY;
+
+typedef enum _ERROR_SEVERITY_VALUE {
+ ErrorRecoverable = 0,
+ ErrorFatal = 1,
+ ErrorCorrected = 2,
+ ErrorOthers = 3,
+} ERROR_SEVERITY_VALUE;
+
+#endif
+
+#if defined(_IA64_)
+
+typedef union _ERROR_REVISION {
+ USHORT Revision;
+ struct {
+ UCHAR Minor;
+ UCHAR Major;
+ } DUMMYSTRUCTNAME;
+} ERROR_REVISION, *PERROR_REVISION;
+
+#if (NTDDI_VERSION > NTDDI_WINXP)
+#define ERROR_MAJOR_REVISION_SAL_03_00 0
+#define ERROR_MINOR_REVISION_SAL_03_00 2
+#define ERROR_REVISION_SAL_03_00 {ERROR_MINOR_REVISION_SAL_03_00,ERROR_MAJOR_REVISION_SAL_03_00}
+#define ERROR_FIXED_SECTION_REVISION {2,0}
+#else
+#define ERROR_REVISION_SAL_03_00 {2,0}
+#endif /* (NTDDI_VERSION > NTDDI_WINXP) */
+
+typedef union _ERROR_TIMESTAMP {
+ ULONGLONG TimeStamp;
+ struct {
+ UCHAR Seconds;
+ UCHAR Minutes;
+ UCHAR Hours;
+ UCHAR Reserved;
+ UCHAR Day;
+ UCHAR Month;
+ UCHAR Year;
+ UCHAR Century;
+ } DUMMYSTRUCTNAME;
+} ERROR_TIMESTAMP, *PERROR_TIMESTAMP;
+
+typedef struct _ERROR_GUID {
+ ULONG Data1;
+ USHORT Data2;
+ USHORT Data3;
+ UCHAR Data4[8];
+} ERROR_GUID, *PERROR_GUID;
+
+typedef ERROR_GUID _ERROR_DEVICE_GUID;
+typedef _ERROR_DEVICE_GUID ERROR_DEVICE_GUID, *PERROR_DEVICE_GUID;
+
+typedef ERROR_GUID _ERROR_PLATFORM_GUID;
+typedef _ERROR_PLATFORM_GUID ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID;
+
+typedef union _ERROR_RECORD_VALID {
+ UCHAR Valid;
+ struct {
+ UCHAR OemPlatformID:1;
+ UCHAR Reserved:7;
+ } DUMMYSTRUCTNAME;
+} ERROR_RECORD_VALID, *PERROR_RECORD_VALID;
+
+typedef struct _ERROR_RECORD_HEADER {
+ ULONGLONG Id;
+ ERROR_REVISION Revision;
+ ERROR_SEVERITY ErrorSeverity;
+ ERROR_RECORD_VALID Valid;
+ ULONG Length;
+ ERROR_TIMESTAMP TimeStamp;
+ UCHAR OemPlatformId[16];
+} ERROR_RECORD_HEADER, *PERROR_RECORD_HEADER;
+
+typedef union _ERROR_RECOVERY_INFO {
+ UCHAR RecoveryInfo;
+ struct {
+ UCHAR Corrected:1;
+ UCHAR NotContained:1;
+ UCHAR Reset:1;
+ UCHAR Reserved:4;
+ UCHAR Valid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_RECOVERY_INFO, *PERROR_RECOVERY_INFO;
+
+typedef struct _ERROR_SECTION_HEADER {
+ ERROR_DEVICE_GUID Guid;
+ ERROR_REVISION Revision;
+ ERROR_RECOVERY_INFO RecoveryInfo;
+ UCHAR Reserved;
+ ULONG Length;
+} ERROR_SECTION_HEADER, *PERROR_SECTION_HEADER;
+
+#if !defined(__midl) && defined(_MSC_EXTENSIONS)
+__inline
+USHORT
+NTAPI
+GetFwMceLogProcessorNumber(
+ PERROR_RECORD_HEADER Log)
+{
+ PERROR_SECTION_HEADER section = (PERROR_SECTION_HEADER)((ULONG64)Log + sizeof(*Log));
+ USHORT lid = (USHORT)((UCHAR)(section->Reserved));
+ lid |= (USHORT)((UCHAR)(Log->TimeStamp.Reserved) << 8);
+ return( lid );
+}
+#endif
+
+#define ERROR_PROCESSOR_GUID {0xe429faf1, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_MODINFO_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG CheckInfo:1;
+ ULONGLONG RequestorIdentifier:1;
+ ULONGLONG ResponderIdentifier:1;
+ ULONGLONG TargetIdentifier:1;
+ ULONGLONG PreciseIP:1;
+ ULONGLONG Reserved:59;
+ } DUMMYSTRUCTNAME;
+} ERROR_MODINFO_VALID, *PERROR_MODINFO_VALID;
+
+typedef enum _ERROR_CHECK_IS {
+ isIA64 = 0,
+ isIA32 = 1,
+} ERROR_CHECK_IS;
+
+typedef enum _ERROR_CACHE_CHECK_OPERATION {
+ CacheUnknownOp = 0,
+ CacheLoad = 1,
+ CacheStore = 2,
+ CacheInstructionFetch = 3,
+ CacheDataPrefetch = 4,
+ CacheSnoop = 5,
+ CacheCastOut = 6,
+ CacheMoveIn = 7,
+} ERROR_CACHE_CHECK_OPERATION;
+
+typedef enum _ERROR_CACHE_CHECK_MESI {
+ CacheInvalid = 0,
+ CacheHeldShared = 1,
+ CacheHeldExclusive = 2,
+ CacheModified = 3,
+} ERROR_CACHE_CHECK_MESI;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef union _ERROR_CACHE_CHECK {
+ ULONGLONG CacheCheck;
+ struct {
+ ULONGLONG Operation:4;
+ ULONGLONG Level:2;
+ ULONGLONG Reserved1:2;
+ ULONGLONG DataLine:1;
+ ULONGLONG TagLine:1;
+ ULONGLONG DataCache:1;
+ ULONGLONG InstructionCache:1;
+ ULONGLONG MESI:3;
+ ULONGLONG MESIValid:1;
+ ULONGLONG Way:5;
+ ULONGLONG WayIndexValid:1;
+ ULONGLONG Reserved2:1;
+ ULONGLONG DP:1;
+ ULONGLONG Reserved3:8;
+ ULONGLONG Index:20;
+ ULONGLONG Reserved4:2;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
+
+# else
+
+typedef union _ERROR_CACHE_CHECK {
+ ULONGLONG CacheCheck;
+ struct {
+ ULONGLONG Operation:4;
+ ULONGLONG Level:2;
+ ULONGLONG Reserved1:2;
+ ULONGLONG DataLine:1;
+ ULONGLONG TagLine:1;
+ ULONGLONG DataCache:1;
+ ULONGLONG InstructionCache:1;
+ ULONGLONG MESI:3;
+ ULONGLONG MESIValid:1;
+ ULONGLONG Way:5;
+ ULONGLONG WayIndexValid:1;
+ ULONGLONG Reserved2:10;
+ ULONGLONG Index:20;
+ ULONGLONG Reserved3:2;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+typedef enum _ERROR_TLB_CHECK_OPERATION {
+ TlbUnknownOp = 0,
+ TlbAccessWithLoad = 1,
+ TlbAccessWithStore = 2,
+ TlbAccessWithInstructionFetch = 3,
+ TlbAccessWithDataPrefetch = 4,
+ TlbShootDown = 5,
+ TlbProbe = 6,
+ TlbVhptFill = 7,
+ TlbPurge = 8,
+} ERROR_TLB_CHECK_OPERATION;
+
+typedef union _ERROR_TLB_CHECK {
+ ULONGLONG TlbCheck;
+ struct {
+ ULONGLONG TRSlot:8;
+ ULONGLONG TRSlotValid:1;
+ ULONGLONG Reserved1:1;
+ ULONGLONG Level:2;
+ ULONGLONG Reserved2:4;
+ ULONGLONG DataTransReg:1;
+ ULONGLONG InstructionTransReg:1;
+ ULONGLONG DataTransCache:1;
+ ULONGLONG InstructionTransCache:1;
+ ULONGLONG Operation:4;
+ ULONGLONG Reserved3:30;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_TLB_CHECK, *PERROR_TLB_CHECK;
+
+typedef enum _ERROR_BUS_CHECK_OPERATION {
+ BusUnknownOp = 0,
+ BusPartialRead = 1,
+ BusPartialWrite = 2,
+ BusFullLineRead = 3,
+ BusFullLineWrite = 4,
+ BusWriteBack = 5,
+ BusSnoopProbe = 6,
+ BusIncomingPtcG = 7,
+ BusWriteCoalescing = 8,
+} ERROR_BUS_CHECK_OPERATION;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef union _ERROR_BUS_CHECK {
+ ULONGLONG BusCheck;
+ struct {
+ ULONGLONG Size:5;
+ ULONGLONG Internal:1;
+ ULONGLONG External:1;
+ ULONGLONG CacheTransfer:1;
+ ULONGLONG Type:8;
+ ULONGLONG Severity:5;
+ ULONGLONG Hierarchy:2;
+ ULONGLONG DP:1;
+ ULONGLONG Status:8;
+ ULONGLONG Reserved1:22;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
+
+#else
+
+typedef union _ERROR_BUS_CHECK {
+ ULONGLONG BusCheck;
+ struct {
+ ULONGLONG Size:5;
+ ULONGLONG Internal:1;
+ ULONGLONG External:1;
+ ULONGLONG CacheTransfer:1;
+ ULONGLONG Type:8;
+ ULONGLONG Severity:5;
+ ULONGLONG Hierarchy:2;
+ ULONGLONG Reserved1:1;
+ ULONGLONG Status:8;
+ ULONGLONG Reserved2:22;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
+
+#endif
+
+typedef enum _ERROR_REGFILE_CHECK_IDENTIFIER {
+ RegFileUnknownId = 0,
+ GeneralRegisterBank1 = 1,
+ GeneralRegisterBank0 = 2,
+ FloatingPointRegister = 3,
+ BranchRegister = 4,
+ PredicateRegister = 5,
+ ApplicationRegister = 6,
+ ControlRegister = 7,
+ RegionRegister = 8,
+ ProtectionKeyRegister = 9,
+ DataBreakPointRegister = 10,
+ InstructionBreakPointRegister = 11,
+ PerformanceMonitorControlRegister = 12,
+ PerformanceMonitorDataRegister = 13,
+} ERROR_REGFILE_CHECK_IDENTIFIER;
+
+typedef enum _ERROR_REGFILE_CHECK_OPERATION {
+ RegFileUnknownOp = 0,
+ RegFileRead = 1,
+ RegFileWrite = 2,
+} ERROR_REGFILE_CHECK_OPERATION;
+
+typedef union _ERROR_REGFILE_CHECK {
+ ULONGLONG RegFileCheck;
+ struct {
+ ULONGLONG Identifier:4;
+ ULONGLONG Operation:4;
+ ULONGLONG RegisterNumber:7;
+ ULONGLONG RegisterNumberValid:1;
+ ULONGLONG Reserved1:38;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG Reserved2:3;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_REGFILE_CHECK, *PERROR_REGFILE_CHECK;
+
+#if (NTDDK_VERSION <= WINXP)
+typedef enum _ERROR_MS_CHECK_OPERATION {
+ MsUnknownOp = 0,
+ MsReadOrLoad = 1,
+ MsWriteOrStore = 2
+} ERROR_MS_CHECK_OPERATION;
+#else
+typedef enum _ERROR_MS_CHECK_OPERATION {
+ MsUnknownOp = 0,
+ MsReadOrLoad = 1,
+ MsWriteOrStore = 2,
+ MsOverTemperature = 3,
+ MsNormalTemperature = 4
+} ERROR_MS_CHECK_OPERATION;
+#endif
+
+typedef union _ERROR_MS_CHECK {
+ ULONGLONG MsCheck;
+ struct {
+ ULONGLONG StructureIdentifier:5;
+ ULONGLONG Level:3;
+ ULONGLONG ArrayId:4;
+ ULONGLONG Operation:4;
+ ULONGLONG Way:6;
+ ULONGLONG WayValid:1;
+ ULONGLONG IndexValid:1;
+ ULONGLONG Reserved1:8;
+ ULONGLONG Index:8;
+ ULONGLONG Reserved2:14;
+ ULONGLONG InstructionSet:1;
+ ULONGLONG InstructionSetValid:1;
+ ULONGLONG PrivilegeLevel:2;
+ ULONGLONG PrivilegeLevelValid:1;
+ ULONGLONG MachineCheckCorrected:1;
+ ULONGLONG TargetAddressValid:1;
+ ULONGLONG RequestIdValid:1;
+ ULONGLONG ResponderIdValid:1;
+ ULONGLONG PreciseIPValid:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_MS_CHECK, *PERROR_MS_CHECK;
+
+typedef union _ERROR_CHECK_INFO {
+ ULONGLONG CheckInfo;
+ ERROR_CACHE_CHECK CacheCheck;
+ ERROR_TLB_CHECK TlbCheck;
+ ERROR_BUS_CHECK BusCheck;
+ ERROR_REGFILE_CHECK RegFileCheck;
+ ERROR_MS_CHECK MsCheck;
+} ERROR_CHECK_INFO, *PERROR_CHECK_INFO;
+
+typedef struct _ERROR_MODINFO {
+ ERROR_MODINFO_VALID Valid;
+ ERROR_CHECK_INFO CheckInfo;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ ULONGLONG PreciseIP;
+} ERROR_MODINFO, *PERROR_MODINFO;
+
+typedef union _ERROR_PROCESSOR_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorMap:1;
+ ULONGLONG StateParameter:1;
+ ULONGLONG CRLid:1;
+ ULONGLONG StaticStruct:1;
+ ULONGLONG CacheCheckNum:4;
+ ULONGLONG TlbCheckNum:4;
+ ULONGLONG BusCheckNum:4;
+ ULONGLONG RegFileCheckNum:4;
+ ULONGLONG MsCheckNum:4;
+ ULONGLONG CpuIdInfo:1;
+ ULONGLONG Reserved:39;
+ } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_VALID, *PERROR_PROCESSOR_VALID;
+
+typedef union _ERROR_PROCESSOR_ERROR_MAP {
+ ULONGLONG ErrorMap;
+ struct {
+ ULONGLONG Cid:4;
+ ULONGLONG Tid:4;
+ ULONGLONG Eic:4;
+ ULONGLONG Edc:4;
+ ULONGLONG Eit:4;
+ ULONGLONG Edt:4;
+ ULONGLONG Ebh:4;
+ ULONGLONG Erf:4;
+ ULONGLONG Ems:16;
+ ULONGLONG Reserved:16;
+ } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_ERROR_MAP, *PERROR_PROCESSOR_ERROR_MAP;
+
+typedef ERROR_PROCESSOR_ERROR_MAP _ERROR_PROCESSOR_LEVEL_INDEX;
+typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCESSOR_LEVEL_INDEX;
+
+typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
+ ULONGLONG StateParameter;
+ struct {
+ ULONGLONG reserved0:2;
+ ULONGLONG rz:1;
+ ULONGLONG ra:1;
+ ULONGLONG me:1;
+ ULONGLONG mn:1;
+ ULONGLONG sy:1;
+ ULONGLONG co:1;
+ ULONGLONG ci:1;
+ ULONGLONG us:1;
+ ULONGLONG hd:1;
+ ULONGLONG tl:1;
+ ULONGLONG mi:1;
+ ULONGLONG pi:1;
+ ULONGLONG pm:1;
+ ULONGLONG dy:1;
+ ULONGLONG in:1;
+ ULONGLONG rs:1;
+ ULONGLONG cm:1;
+ ULONGLONG ex:1;
+ ULONGLONG cr:1;
+ ULONGLONG pc:1;
+ ULONGLONG dr:1;
+ ULONGLONG tr:1;
+ ULONGLONG rr:1;
+ ULONGLONG ar:1;
+ ULONGLONG br:1;
+ ULONGLONG pr:1;
+ ULONGLONG fp:1;
+ ULONGLONG b1:1;
+ ULONGLONG b0:1;
+ ULONGLONG gr:1;
+ ULONGLONG dsize:16;
+ ULONGLONG reserved1:11;
+ ULONGLONG cc:1;
+ ULONGLONG tc:1;
+ ULONGLONG bc:1;
+ ULONGLONG rc:1;
+ ULONGLONG uc:1;
+ } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_STATE_PARAMETER, *PERROR_PROCESSOR_STATE_PARAMETER;
+
+typedef union _PROCESSOR_LOCAL_ID {
+ ULONGLONG LocalId;
+ struct {
+ ULONGLONG reserved:16;
+ ULONGLONG eid:8;
+ ULONGLONG id:8;
+ ULONGLONG ignored:32;
+ } DUMMYSTRUCTNAME;
+} PROCESSOR_LOCAL_ID, *PPROCESSOR_LOCAL_ID;
+
+typedef struct _ERROR_PROCESSOR_MS {
+ ULONGLONG MsError[1];
+} ERROR_PROCESSOR_MS, *PERROR_PROCESSOR_MS;
+
+typedef struct _ERROR_PROCESSOR_CPUID_INFO {
+ ULONGLONG CpuId0;
+ ULONGLONG CpuId1;
+ ULONGLONG CpuId2;
+ ULONGLONG CpuId3;
+ ULONGLONG CpuId4;
+ ULONGLONG Reserved;
+} ERROR_PROCESSOR_CPUID_INFO, *PERROR_PROCESSOR_CPUID_INFO;
+
+typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG MinState:1;
+ ULONGLONG BR:1;
+ ULONGLONG CR:1;
+ ULONGLONG AR:1;
+ ULONGLONG RR:1;
+ ULONGLONG FR:1;
+ ULONGLONG Reserved:58;
+ } DUMMYSTRUCTNAME;
+} ERROR_PROCESSOR_STATIC_INFO_VALID, *PERROR_PROCESSOR_STATIC_INFO_VALID;
+
+typedef struct _ERROR_PROCESSOR_STATIC_INFO {
+ ERROR_PROCESSOR_STATIC_INFO_VALID Valid;
+ UCHAR MinState[1024];
+ ULONGLONG BR[8];
+ ULONGLONG CR[128];
+ ULONGLONG AR[128];
+ ULONGLONG RR[8];
+ ULONGLONG FR[2 * 128];
+} ERROR_PROCESSOR_STATIC_INFO, *PERROR_PROCESSOR_STATIC_INFO;
+
+typedef struct _ERROR_PROCESSOR {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PROCESSOR_VALID Valid;
+ ERROR_PROCESSOR_ERROR_MAP ErrorMap;
+ ERROR_PROCESSOR_STATE_PARAMETER StateParameter;
+ PROCESSOR_LOCAL_ID CRLid;
+} ERROR_PROCESSOR, *PERROR_PROCESSOR;
+
+#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_SHIFT 59
+#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_MASK 0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_SHIFT 60
+#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_MASK 0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_SHIFT 61
+#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_MASK 0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_SHIFT 62
+#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_MASK 0x1
+#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT 63
+#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK 0x1
+
+#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_SHIFT ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT
+#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_MASK ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK
+
+typedef enum _ERR_TYPES {
+ ERR_INTERNAL = 1,
+ ERR_BUS = 16,
+ ERR_MEM = 4,
+ ERR_TLB = 5,
+ ERR_CACHE = 6,
+ ERR_FUNCTION = 7,
+ ERR_SELFTEST = 8,
+ ERR_FLOW = 9,
+ ERR_MAP = 17,
+ ERR_IMPROPER = 18,
+ ERR_UNIMPL = 19,
+ ERR_LOL = 20,
+ ERR_RESPONSE = 21,
+ ERR_PARITY = 22,
+ ERR_PROTOCOL = 23,
+ ERR_ERROR = 24,
+ ERR_TIMEOUT = 25,
+ ERR_POISONED = 26,
+} _ERR_TYPE;
+
+typedef union _ERROR_STATUS {
+ ULONGLONG Status;
+ struct {
+ ULONGLONG Reserved0:8;
+ ULONGLONG Type:8;
+ ULONGLONG Address:1;
+ ULONGLONG Control:1;
+ ULONGLONG Data:1;
+ ULONGLONG Responder:1;
+ ULONGLONG Requestor:1;
+ ULONGLONG FirstError:1;
+ ULONGLONG Overflow:1;
+ ULONGLONG Reserved1:41;
+ } DUMMYSTRUCTNAME;
+} ERROR_STATUS, *PERROR_STATUS;
+
+typedef struct _ERROR_OEM_DATA {
+ USHORT Length;
+} ERROR_OEM_DATA, *PERROR_OEM_DATA;
+
+typedef union _ERROR_BUS_SPECIFIC_DATA {
+ ULONGLONG BusSpecificData;
+ struct {
+ ULONGLONG LockAsserted:1;
+ ULONGLONG DeferLogged:1;
+ ULONGLONG IOQEmpty:1;
+ ULONGLONG DeferredTransaction:1;
+ ULONGLONG RetriedTransaction:1;
+ ULONGLONG MemoryClaimedTransaction:1;
+ ULONGLONG IOClaimedTransaction:1;
+ ULONGLONG ResponseParitySignal:1;
+ ULONGLONG DeferSignal:1;
+ ULONGLONG HitMSignal:1;
+ ULONGLONG HitSignal:1;
+ ULONGLONG RequestBusFirstCycle:6;
+ ULONGLONG RequestBusSecondCycle:6;
+ ULONGLONG AddressParityBusFirstCycle:2;
+ ULONGLONG AddressParityBusSecondCycle:2;
+ ULONGLONG ResponseBus:3;
+ ULONGLONG RequestParitySignalFirstCycle:1;
+ ULONGLONG RequestParitySignalSecondCycle:1;
+ ULONGLONG Reserved:32;
+ } DUMMYSTRUCTNAME;
+} ERROR_BUS_SPECIFIC_DATA, *PERROR_BUS_SPECIFIC_DATA;
+
+#define ERROR_MEMORY_GUID {0xe429faf2, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_MEMORY_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG PhysicalAddress:1;
+ ULONGLONG AddressMask:1;
+ ULONGLONG Node:1;
+ ULONGLONG Card:1;
+ ULONGLONG Module:1;
+ ULONGLONG Bank:1;
+ ULONGLONG Device:1;
+ ULONGLONG Row:1;
+ ULONGLONG Column:1;
+ ULONGLONG BitPosition:1;
+ ULONGLONG RequestorId:1;
+ ULONGLONG ResponderId:1;
+ ULONGLONG TargetId:1;
+ ULONGLONG BusSpecificData:1;
+ ULONGLONG OemId:1;
+ ULONGLONG OemData:1;
+ ULONGLONG Reserved:47;
+ } DUMMYSTRUCTNAME;
+} ERROR_MEMORY_VALID, *PERROR_MEMORY_VALID;
+
+typedef struct _ERROR_MEMORY {
+ ERROR_SECTION_HEADER Header;
+ ERROR_MEMORY_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ULONGLONG PhysicalAddress;
+ ULONGLONG PhysicalAddressMask;
+ USHORT Node;
+ USHORT Card;
+ USHORT Module;
+ USHORT Bank;
+ USHORT Device;
+ USHORT Row;
+ USHORT Column;
+ USHORT BitPosition;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ ULONGLONG BusSpecificData;
+ UCHAR OemId[16];
+ ERROR_OEM_DATA OemData;
+} ERROR_MEMORY, *PERROR_MEMORY;
+
+#define ERROR_PCI_BUS_GUID {0xe429faf4, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PCI_BUS_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG ErrorType:1;
+ ULONGLONG Id:1;
+ ULONGLONG Address:1;
+ ULONGLONG Data:1;
+ ULONGLONG CmdType:1;
+ ULONGLONG RequestorId:1;
+ ULONGLONG ResponderId:1;
+ ULONGLONG TargetId:1;
+ ULONGLONG OemId:1;
+ ULONGLONG OemData:1;
+ ULONGLONG Reserved:53;
+ } DUMMYSTRUCTNAME;
+} ERROR_PCI_BUS_VALID, *PERROR_PCI_BUS_VALID;
+
+typedef struct _ERROR_PCI_BUS_TYPE {
+ UCHAR Type;
+ UCHAR Reserved;
+} ERROR_PCI_BUS_TYPE, *PERROR_PCI_BUS_TYPE;
+
+#define PciBusUnknownError ((UCHAR)0)
+#define PciBusDataParityError ((UCHAR)1)
+#define PciBusSystemError ((UCHAR)2)
+#define PciBusMasterAbort ((UCHAR)3)
+#define PciBusTimeOut ((UCHAR)4)
+#define PciMasterDataParityError ((UCHAR)5)
+#define PciAddressParityError ((UCHAR)6)
+#define PciCommandParityError ((UCHAR)7)
+
+typedef struct _ERROR_PCI_BUS_ID {
+ UCHAR BusNumber;
+ UCHAR SegmentNumber;
+} ERROR_PCI_BUS_ID, *PERROR_PCI_BUS_ID;
+
+typedef struct _ERROR_PCI_BUS {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PCI_BUS_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ERROR_PCI_BUS_TYPE Type;
+ ERROR_PCI_BUS_ID Id;
+ UCHAR Reserved[4];
+ ULONGLONG Address;
+ ULONGLONG Data;
+ ULONGLONG CmdType;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ UCHAR OemId[16];
+ ERROR_OEM_DATA OemData;
+} ERROR_PCI_BUS, *PERROR_PCI_BUS;
+
+#define ERROR_PCI_COMPONENT_GUID {0xe429faf6, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PCI_COMPONENT_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG Info:1;
+ ULONGLONG MemoryMappedRegistersPairs:1;
+ ULONGLONG ProgrammedIORegistersPairs:1;
+ ULONGLONG RegistersDataPairs:1;
+ ULONGLONG OemData:1;
+ ULONGLONG Reserved:58;
+ } DUMMYSTRUCTNAME;
+} ERROR_PCI_COMPONENT_VALID, *PERROR_PCI_COMPONENT_VALID;
+
+typedef struct _ERROR_PCI_COMPONENT_INFO {
+ USHORT VendorId;
+ USHORT DeviceId;
+ UCHAR ClassCodeInterface;
+ UCHAR ClassCodeSubClass;
+ UCHAR ClassCodeBaseClass;
+ UCHAR FunctionNumber;
+ UCHAR DeviceNumber;
+ UCHAR BusNumber;
+ UCHAR SegmentNumber;
+ UCHAR Reserved0;
+ ULONG Reserved1;
+} ERROR_PCI_COMPONENT_INFO, *PERROR_PCI_COMPONENT_INFO;
+
+typedef struct _ERROR_PCI_COMPONENT {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PCI_COMPONENT_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ERROR_PCI_COMPONENT_INFO Info;
+ ULONG MemoryMappedRegistersPairs;
+ ULONG ProgrammedIORegistersPairs;
+} ERROR_PCI_COMPONENT, *PERROR_PCI_COMPONENT;
+
+#define ERROR_SYSTEM_EVENT_LOG_GUID {0xe429faf3, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_SYSTEM_EVENT_LOG_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG RecordId:1;
+ ULONGLONG RecordType:1;
+ ULONGLONG GeneratorId:1;
+ ULONGLONG EVMRev:1;
+ ULONGLONG SensorType:1;
+ ULONGLONG SensorNum:1;
+ ULONGLONG EventDirType:1;
+ ULONGLONG EventData1:1;
+ ULONGLONG EventData2:1;
+ ULONGLONG EventData3:1;
+ ULONGLONG Reserved:54;
+ } DUMMYSTRUCTNAME;
+} ERROR_SYSTEM_EVENT_LOG_VALID, *PSYSTEM_EVENT_LOG_VALID;
+
+typedef struct _ERROR_SYSTEM_EVENT_LOG {
+ ERROR_SECTION_HEADER Header;
+ ERROR_SYSTEM_EVENT_LOG_VALID Valid;
+ USHORT RecordId;
+ UCHAR RecordType;
+ ULONG TimeStamp;
+ USHORT GeneratorId;
+ UCHAR EVMRevision;
+ UCHAR SensorType;
+ UCHAR SensorNumber;
+ UCHAR EventDir;
+ UCHAR Data1;
+ UCHAR Data2;
+ UCHAR Data3;
+} ERROR_SYSTEM_EVENT_LOG, *PERROR_SYSTEM_EVENT_LOG;
+
+#define ERROR_SMBIOS_GUID {0xe429faf5, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_SMBIOS_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG EventType:1;
+ ULONGLONG Length:1;
+ ULONGLONG TimeStamp:1;
+ ULONGLONG OemData:1;
+ ULONGLONG Reserved:60;
+ } DUMMYSTRUCTNAME;
+} ERROR_SMBIOS_VALID, *PERROR_SMBIOS_VALID;
+
+typedef UCHAR ERROR_SMBIOS_EVENT_TYPE, *PERROR_SMBIOS_EVENT_TYPE;
+
+typedef struct _ERROR_SMBIOS {
+ ERROR_SECTION_HEADER Header;
+ ERROR_SMBIOS_VALID Valid;
+ ERROR_SMBIOS_EVENT_TYPE EventType;
+ UCHAR Length;
+ ERROR_TIMESTAMP TimeStamp;
+ ERROR_OEM_DATA OemData;
+} ERROR_SMBIOS, *PERROR_SMBIOS;
+
+#define ERROR_PLATFORM_SPECIFIC_GUID {0xe429faf7, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_SPECIFIC_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG RequestorId:1;
+ ULONGLONG ResponderId:1;
+ ULONGLONG TargetId:1;
+ ULONGLONG BusSpecificData:1;
+ ULONGLONG OemId:1;
+ ULONGLONG OemData:1;
+ ULONGLONG OemDevicePath:1;
+ ULONGLONG Reserved:56;
+ } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_SPECIFIC_VALID, *PERROR_PLATFORM_SPECIFIC_VALID;
+
+typedef struct _ERROR_PLATFORM_SPECIFIC {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PLATFORM_SPECIFIC_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+ UCHAR OemId[16];
+ ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_SPECIFIC, *PERROR_PLATFORM_SPECIFIC;
+
+#define ERROR_PLATFORM_BUS_GUID {0xe429faf9, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_BUS_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG RequestorId:1;
+ ULONGLONG ResponderId:1;
+ ULONGLONG TargetId:1;
+ ULONGLONG BusSpecificData:1;
+ ULONGLONG OemId:1;
+ ULONGLONG OemData:1;
+ ULONGLONG OemDevicePath:1;
+ ULONGLONG Reserved:56;
+ } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_BUS_VALID, *PERROR_PLATFORM_BUS_VALID;
+
+typedef struct _ERROR_PLATFORM_BUS {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PLATFORM_BUS_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+ UCHAR OemId[16];
+ ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_BUS, *PERROR_PLATFORM_BUS;
+
+#define ERROR_PLATFORM_HOST_CONTROLLER_GUID {0xe429faf8, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
+
+typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID {
+ ULONGLONG Valid;
+ struct {
+ ULONGLONG ErrorStatus:1;
+ ULONGLONG RequestorId:1;
+ ULONGLONG ResponderId:1;
+ ULONGLONG TargetId:1;
+ ULONGLONG BusSpecificData:1;
+ ULONGLONG OemId:1;
+ ULONGLONG OemData:1;
+ ULONGLONG OemDevicePath:1;
+ ULONGLONG Reserved:56;
+ } DUMMYSTRUCTNAME;
+} ERROR_PLATFORM_HOST_CONTROLLER_VALID, *PERROR_PLATFORM_HOST_CONTROLLER_VALID;
+
+typedef struct _ERROR_PLATFORM_HOST_CONTROLLER {
+ ERROR_SECTION_HEADER Header;
+ ERROR_PCI_COMPONENT_VALID Valid;
+ ERROR_STATUS ErrorStatus;
+ ULONGLONG RequestorId;
+ ULONGLONG ResponderId;
+ ULONGLONG TargetId;
+ ERROR_BUS_SPECIFIC_DATA BusSpecificData;
+ UCHAR OemId[16];
+ ERROR_OEM_DATA OemData;
+} ERROR_PLATFORM_HOST_CONTROLLER, *PERROR_PLATFORM_HOST_CONTROLLER;
+
+typedef ERROR_RECORD_HEADER ERROR_LOGRECORD, *PERROR_LOGRECORD;
+typedef ERROR_RECORD_HEADER MCA_EXCEPTION, *PMCA_EXCEPTION;
+typedef ERROR_RECORD_HEADER CMC_EXCEPTION, *PCMC_EXCEPTION;
+typedef ERROR_RECORD_HEADER CPE_EXCEPTION, *PCPE_EXCEPTION;
+#if (NTDDI_VERSION > NTDDI_WINXP)
+typedef ERROR_RECORD_HEADER INIT_EXCEPTION, *PINIT_EXCEPTION;
+#endif
+
+#endif /* defined(_IA64_) */
+
+#endif /* defined(_X86_) || defined(_IA64_) || defined(_AMD64_) */
+++ /dev/null
-/*
- * ntstatus.h
- *
- * Windows NT status codes
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#ifndef _NTSTATUS_
-#define _NTSTATUS_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(STATUS_SUCCESS)
-#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
-#endif /* !STATUS_SUCCESS */
-#define FACILITY_DEBUGGER 0x1
-#define FACILITY_RPC_RUNTIME 0x2
-#define FACILITY_RPC_STUBS 0x3
-#define FACILITY_IO_ERROR_CODE 0x4
-#define FACILITY_TERMINAL_SERVER 0xA
-#define FACILITY_USB_ERROR_CODE 0x10
-#define FACILITY_HID_ERROR_CODE 0x11
-#define FACILITY_FIREWIRE_ERROR_CODE 0x12
-#define FACILITY_CLUSTER_ERROR_CODE 0x13
-#define FACILITY_ACPI_ERROR_CODE 0x14
-#define FACILITY_SXS_ERROR_CODE 0x15
-#define STATUS_SEVERITY_SUCCESS 0x0
-#define STATUS_SEVERITY_INFORMATIONAL 0x1
-#define STATUS_SEVERITY_WARNING 0x2
-#define STATUS_SEVERITY_ERROR 0x3
-#define STATUS_WAIT_0 ((NTSTATUS)0x00000000L)
-#define STATUS_WAIT_1 ((NTSTATUS)0x00000001L)
-#define STATUS_WAIT_2 ((NTSTATUS)0x00000002L)
-#define STATUS_WAIT_3 ((NTSTATUS)0x00000003L)
-#define STATUS_WAIT_63 ((NTSTATUS)0x0000003FL)
-#define STATUS_ABANDONED ((NTSTATUS)0x00000080L)
-#define STATUS_ABANDONED_WAIT_0 ((NTSTATUS)0x00000080L)
-#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS)0x000000BFL)
-#define STATUS_USER_APC ((NTSTATUS)0x000000C0L)
-#define STATUS_KERNEL_APC ((NTSTATUS)0x00000100L)
-#define STATUS_ALERTED ((NTSTATUS)0x00000101L)
-#define STATUS_TIMEOUT ((NTSTATUS)0x00000102L)
-#define STATUS_PENDING ((NTSTATUS)0x00000103L)
-#define STATUS_REPARSE ((NTSTATUS)0x00000104L)
-#define STATUS_MORE_ENTRIES ((NTSTATUS)0x00000105L)
-#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106L)
-#define STATUS_SOME_NOT_MAPPED ((NTSTATUS)0x00000107L)
-#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS)0x00000108L)
-#define STATUS_VOLUME_MOUNTED ((NTSTATUS)0x00000109L)
-#define STATUS_RXACT_COMMITTED ((NTSTATUS)0x0000010AL)
-#define STATUS_NOTIFY_CLEANUP ((NTSTATUS)0x0000010BL)
-#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS)0x0000010CL)
-#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS)0x0000010DL)
-#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010EL)
-#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS)0x00000110L)
-#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS)0x00000111L)
-#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS)0x00000112L)
-#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS)0x00000113L)
-#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS)0x00000114L)
-#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS)0x00000115L)
-#define STATUS_CRASH_DUMP ((NTSTATUS)0x00000116L)
-#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS)0x00000117L)
-#define STATUS_REPARSE_OBJECT ((NTSTATUS)0x00000118L)
-#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119L)
-#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS)0x00000120L)
-#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS)0x00000121L)
-#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS)0x00000122L)
-#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS)0x00000123L)
-#define STATUS_PROCESS_IN_JOB ((NTSTATUS)0x00000124L)
-#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000L)
-#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS)0x40000001L)
-#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS)0x40000002L)
-#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS)0x40000003L)
-#define STATUS_RXACT_STATE_CREATED ((NTSTATUS)0x40000004L)
-#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS)0x40000005L)
-#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS)0x40000006L)
-#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS)0x40000007L)
-#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS)0x40000008L)
-#define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009L)
-#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000AL)
-#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS)0x4000000BL)
-#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS)0x4000000CL)
-#define STATUS_NULL_LM_PASSWORD ((NTSTATUS)0x4000000DL)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000EL)
-#define STATUS_RECEIVE_PARTIAL ((NTSTATUS)0x4000000FL)
-#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS)0x40000010L)
-#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011L)
-#define STATUS_EVENT_DONE ((NTSTATUS)0x40000012L)
-#define STATUS_EVENT_PENDING ((NTSTATUS)0x40000013L)
-#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS)0x40000014L)
-#define STATUS_FATAL_APP_EXIT ((NTSTATUS)0x40000015L)
-#define STATUS_PREDEFINED_HANDLE ((NTSTATUS)0x40000016L)
-#define STATUS_WAS_UNLOCKED ((NTSTATUS)0x40000017L)
-#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS)0x40000018L)
-#define STATUS_WAS_LOCKED ((NTSTATUS)0x40000019L)
-#define STATUS_LOG_HARD_ERROR ((NTSTATUS)0x4000001AL)
-#define STATUS_ALREADY_WIN32 ((NTSTATUS)0x4000001BL)
-#define STATUS_WX86_UNSIMULATE ((NTSTATUS)0x4000001CL)
-#define STATUS_WX86_CONTINUE ((NTSTATUS)0x4000001DL)
-#define STATUS_WX86_SINGLE_STEP ((NTSTATUS)0x4000001EL)
-#define STATUS_WX86_BREAKPOINT ((NTSTATUS)0x4000001FL)
-#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS)0x40000020L)
-#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021L)
-#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS)0x40000022L)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS)0x40000023L)
-#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS)0x40000024L)
-#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS)0x40000025L)
-#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS)0x40000026L)
-#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS)0x40000027L)
-#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS)0x40000028L)
-#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS)0x40000029L)
-#define STATUS_HIBERNATED ((NTSTATUS)0x4000002AL)
-#define STATUS_RESUME_HIBERNATION ((NTSTATUS)0x4000002BL)
-#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001L)
-#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS)0x80000002L)
-#define STATUS_BREAKPOINT ((NTSTATUS)0x80000003L)
-#define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004L)
-#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L)
-#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
-#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS)0x80000007L)
-#define STATUS_HANDLES_CLOSED ((NTSTATUS)0x8000000AL)
-#define STATUS_NO_INHERITANCE ((NTSTATUS)0x8000000BL)
-#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS)0x8000000CL)
-#define STATUS_PARTIAL_COPY ((NTSTATUS)0x8000000DL)
-#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS)0x8000000EL)
-#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS)0x8000000FL)
-#define STATUS_DEVICE_OFF_LINE ((NTSTATUS)0x80000010L)
-#define STATUS_DEVICE_BUSY ((NTSTATUS)0x80000011L)
-#define STATUS_NO_MORE_EAS ((NTSTATUS)0x80000012L)
-#define STATUS_INVALID_EA_NAME ((NTSTATUS)0x80000013L)
-#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS)0x80000014L)
-#define STATUS_INVALID_EA_FLAG ((NTSTATUS)0x80000015L)
-#define STATUS_VERIFY_REQUIRED ((NTSTATUS)0x80000016L)
-#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS)0x80000017L)
-#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS)0x80000018L)
-#define STATUS_NO_MORE_ENTRIES ((NTSTATUS)0x8000001AL)
-#define STATUS_FILEMARK_DETECTED ((NTSTATUS)0x8000001BL)
-#define STATUS_MEDIA_CHANGED ((NTSTATUS)0x8000001CL)
-#define STATUS_BUS_RESET ((NTSTATUS)0x8000001DL)
-#define STATUS_END_OF_MEDIA ((NTSTATUS)0x8000001EL)
-#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS)0x8000001FL)
-#define STATUS_MEDIA_CHECK ((NTSTATUS)0x80000020L)
-#define STATUS_SETMARK_DETECTED ((NTSTATUS)0x80000021L)
-#define STATUS_NO_DATA_DETECTED ((NTSTATUS)0x80000022L)
-#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023L)
-#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS)0x80000024L)
-#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS)0x80000025L)
-#define STATUS_LONGJUMP ((NTSTATUS)0x80000026L)
-#define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS)0x80000027L)
-#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS)0x80000028L)
-#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS)0x80000029L)
-#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS)0x80130001L)
-#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002L)
-#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS)0x80130003L)
-#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS)0x80130004L)
-#define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS)0x80130005L)
-#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
-#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L)
-#define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003L)
-#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
-#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC0000005L)
-#define STATUS_IN_PAGE_ERROR ((NTSTATUS)0xC0000006L)
-#define STATUS_PAGEFILE_QUOTA ((NTSTATUS)0xC0000007L)
-#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008L)
-#define STATUS_BAD_INITIAL_STACK ((NTSTATUS)0xC0000009L)
-#define STATUS_BAD_INITIAL_PC ((NTSTATUS)0xC000000AL)
-#define STATUS_INVALID_CID ((NTSTATUS)0xC000000BL)
-#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS)0xC000000CL)
-#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL)
-#define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000EL)
-#define STATUS_NO_SUCH_FILE ((NTSTATUS)0xC000000FL)
-#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010L)
-#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011L)
-#define STATUS_WRONG_VOLUME ((NTSTATUS)0xC0000012L)
-#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS)0xC0000013L)
-#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS)0xC0000014L)
-#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS)0xC0000015L)
-#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS)0xC0000016L)
-#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017L)
-#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L)
-#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS)0xC0000019L)
-#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS)0xC000001AL)
-#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS)0xC000001BL)
-#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS)0xC000001CL)
-#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS)0xC000001DL)
-#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS)0xC000001EL)
-#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001FL)
-#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020L)
-#define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021L)
-#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
-#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
-#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024L)
-#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025L)
-#define STATUS_INVALID_DISPOSITION ((NTSTATUS)0xC0000026L)
-#define STATUS_UNWIND ((NTSTATUS)0xC0000027L)
-#define STATUS_BAD_STACK ((NTSTATUS)0xC0000028L)
-#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS)0xC0000029L)
-#define STATUS_NOT_LOCKED ((NTSTATUS)0xC000002AL)
-#define STATUS_PARITY_ERROR ((NTSTATUS)0xC000002BL)
-#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS)0xC000002CL)
-#define STATUS_NOT_COMMITTED ((NTSTATUS)0xC000002DL)
-#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS)0xC000002EL)
-#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS)0xC000002FL)
-#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS)0xC0000030L)
-#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS)0xC0000031L)
-#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS)0xC0000032L)
-#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS)0xC0000033L)
-#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
-#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS)0xC0000035L)
-#define STATUS_PORT_DISCONNECTED ((NTSTATUS)0xC0000037L)
-#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xC0000038L)
-#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xC0000039L)
-#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003AL)
-#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xC000003BL)
-#define STATUS_DATA_OVERRUN ((NTSTATUS)0xC000003CL)
-#define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xC000003DL)
-#define STATUS_DATA_ERROR ((NTSTATUS)0xC000003EL)
-#define STATUS_CRC_ERROR ((NTSTATUS)0xC000003FL)
-#define STATUS_SECTION_TOO_BIG ((NTSTATUS)0xC0000040L)
-#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS)0xC0000041L)
-#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS)0xC0000042L)
-#define STATUS_SHARING_VIOLATION ((NTSTATUS)0xC0000043L)
-#define STATUS_QUOTA_EXCEEDED ((NTSTATUS)0xC0000044L)
-#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045L)
-#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046L)
-#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047L)
-#define STATUS_PORT_ALREADY_SET ((NTSTATUS)0xC0000048L)
-#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS)0xC0000049L)
-#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS)0xC000004AL)
-#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS)0xC000004BL)
-#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS)0xC000004CL)
-#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS)0xC000004DL)
-#define STATUS_SECTION_PROTECTION ((NTSTATUS)0xC000004EL)
-#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS)0xC000004FL)
-#define STATUS_EA_TOO_LARGE ((NTSTATUS)0xC0000050L)
-#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS)0xC0000051L)
-#define STATUS_NO_EAS_ON_FILE ((NTSTATUS)0xC0000052L)
-#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS)0xC0000053L)
-#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS)0xC0000054L)
-#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS)0xC0000055L)
-#define STATUS_DELETE_PENDING ((NTSTATUS)0xC0000056L)
-#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS)0xC0000057L)
-#define STATUS_UNKNOWN_REVISION ((NTSTATUS)0xC0000058L)
-#define STATUS_REVISION_MISMATCH ((NTSTATUS)0xC0000059L)
-#define STATUS_INVALID_OWNER ((NTSTATUS)0xC000005AL)
-#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS)0xC000005BL)
-#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS)0xC000005CL)
-#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS)0xC000005DL)
-#define STATUS_NO_LOGON_SERVERS ((NTSTATUS)0xC000005EL)
-#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS)0xC000005FL)
-#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS)0xC0000060L)
-#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061L)
-#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS)0xC0000062L)
-#define STATUS_USER_EXISTS ((NTSTATUS)0xC0000063L)
-#define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064L)
-#define STATUS_GROUP_EXISTS ((NTSTATUS)0xC0000065L)
-#define STATUS_NO_SUCH_GROUP ((NTSTATUS)0xC0000066L)
-#define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067L)
-#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068L)
-#define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069L)
-#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006AL)
-#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006BL)
-#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006CL)
-#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006DL)
-#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006EL)
-#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006FL)
-#define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070L)
-#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071L)
-#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072L)
-#define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073L)
-#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074L)
-#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075L)
-#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS)0xC0000076L)
-#define STATUS_INVALID_ACL ((NTSTATUS)0xC0000077L)
-#define STATUS_INVALID_SID ((NTSTATUS)0xC0000078L)
-#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS)0xC0000079L)
-#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007AL)
-#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007BL)
-#define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL)
-#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS)0xC000007DL)
-#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS)0xC000007EL)
-#define STATUS_DISK_FULL ((NTSTATUS)0xC000007FL)
-#define STATUS_SERVER_DISABLED ((NTSTATUS)0xC0000080L)
-#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS)0xC0000081L)
-#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS)0xC0000082L)
-#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS)0xC0000083L)
-#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS)0xC0000084L)
-#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS)0xC0000085L)
-#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS)0xC0000086L)
-#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS)0xC0000087L)
-#define STATUS_NOT_MAPPED_DATA ((NTSTATUS)0xC0000088L)
-#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS)0xC0000089L)
-#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS)0xC000008AL)
-#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS)0xC000008BL)
-#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS)0xC000008CL)
-#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS)0xC000008DL)
-#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS)0xC000008EL)
-#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS)0xC000008FL)
-#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS)0xC0000090L)
-#define STATUS_FLOAT_OVERFLOW ((NTSTATUS)0xC0000091L)
-#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000092L)
-#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS)0xC0000093L)
-#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094L)
-#define STATUS_INTEGER_OVERFLOW ((NTSTATUS)0xC0000095L)
-#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS)0xC0000096L)
-#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS)0xC0000097L)
-#define STATUS_FILE_INVALID ((NTSTATUS)0xC0000098L)
-#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS)0xC0000099L)
-#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009AL)
-#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS)0xC000009BL)
-#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS)0xC000009CL)
-#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS)0xC000009DL)
-#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS)0xC000009EL)
-#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS)0xC000009FL)
-#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS)0xC00000A0L)
-#define STATUS_WORKING_SET_QUOTA ((NTSTATUS)0xC00000A1L)
-#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS)0xC00000A2L)
-#define STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3L)
-#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS)0xC00000A4L)
-#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS)0xC00000A5L)
-#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS)0xC00000A6L)
-#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS)0xC00000A7L)
-#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS)0xC00000A8L)
-#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS)0xC00000A9L)
-#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS)0xC00000AAL)
-#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS)0xC00000ABL)
-#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000ACL)
-#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000ADL)
-#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AEL)
-#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS)0xC00000AFL)
-#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0L)
-#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1L)
-#define STATUS_PIPE_CONNECTED ((NTSTATUS)0xC00000B2L)
-#define STATUS_PIPE_LISTENING ((NTSTATUS)0xC00000B3L)
-#define STATUS_INVALID_READ_MODE ((NTSTATUS)0xC00000B4L)
-#define STATUS_IO_TIMEOUT ((NTSTATUS)0xC00000B5L)
-#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS)0xC00000B6L)
-#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS)0xC00000B7L)
-#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS)0xC00000B8L)
-#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS)0xC00000B9L)
-#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BAL)
-#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BBL)
-#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS)0xC00000BCL)
-#define STATUS_DUPLICATE_NAME ((NTSTATUS)0xC00000BDL)
-#define STATUS_BAD_NETWORK_PATH ((NTSTATUS)0xC00000BEL)
-#define STATUS_NETWORK_BUSY ((NTSTATUS)0xC00000BFL)
-#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS)0xC00000C0L)
-#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS)0xC00000C1L)
-#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS)0xC00000C2L)
-#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS)0xC00000C3L)
-#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS)0xC00000C4L)
-#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS)0xC00000C5L)
-#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS)0xC00000C6L)
-#define STATUS_NO_SPOOL_SPACE ((NTSTATUS)0xC00000C7L)
-#define STATUS_PRINT_CANCELLED ((NTSTATUS)0xC00000C8L)
-#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS)0xC00000C9L)
-#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS)0xC00000CAL)
-#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS)0xC00000CBL)
-#define STATUS_BAD_NETWORK_NAME ((NTSTATUS)0xC00000CCL)
-#define STATUS_TOO_MANY_NAMES ((NTSTATUS)0xC00000CDL)
-#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS)0xC00000CEL)
-#define STATUS_SHARING_PAUSED ((NTSTATUS)0xC00000CFL)
-#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS)0xC00000D0L)
-#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS)0xC00000D1L)
-#define STATUS_NET_WRITE_FAULT ((NTSTATUS)0xC00000D2L)
-#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS)0xC00000D3L)
-#define STATUS_NOT_SAME_DEVICE ((NTSTATUS)0xC00000D4L)
-#define STATUS_FILE_RENAMED ((NTSTATUS)0xC00000D5L)
-#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS)0xC00000D6L)
-#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS)0xC00000D7L)
-#define STATUS_CANT_WAIT ((NTSTATUS)0xC00000D8L)
-#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9L)
-#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS)0xC00000DAL)
-#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS)0xC00000DBL)
-#define STATUS_INVALID_SERVER_STATE ((NTSTATUS)0xC00000DCL)
-#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS)0xC00000DDL)
-#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS)0xC00000DEL)
-#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS)0xC00000DFL)
-#define STATUS_DOMAIN_EXISTS ((NTSTATUS)0xC00000E0L)
-#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00000E1L)
-#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS)0xC00000E2L)
-#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS)0xC00000E3L)
-#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS)0xC00000E4L)
-#define STATUS_INTERNAL_ERROR ((NTSTATUS)0xC00000E5L)
-#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS)0xC00000E6L)
-#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS)0xC00000E7L)
-#define STATUS_INVALID_USER_BUFFER ((NTSTATUS)0xC00000E8L)
-#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9L)
-#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS)0xC00000EAL)
-#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS)0xC00000EBL)
-#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS)0xC00000ECL)
-#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS)0xC00000EDL)
-#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS)0xC00000EEL)
-#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS)0xC00000EFL)
-#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0L)
-#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS)0xC00000F1L)
-#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS)0xC00000F2L)
-#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS)0xC00000F3L)
-#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS)0xC00000F4L)
-#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS)0xC00000F5L)
-#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS)0xC00000F6L)
-#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS)0xC00000F7L)
-#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS)0xC00000F8L)
-#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS)0xC00000F9L)
-#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS)0xC00000FAL)
-#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS)0xC00000FBL)
-#define STATUS_REDIRECTOR_STARTED ((NTSTATUS)0xC00000FCL)
-#define STATUS_STACK_OVERFLOW ((NTSTATUS)0xC00000FDL)
-#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS)0xC00000FEL)
-#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS)0xC00000FFL)
-#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS)0xC0000100L)
-#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS)0xC0000101L)
-#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS)0xC0000102L)
-#define STATUS_NOT_A_DIRECTORY ((NTSTATUS)0xC0000103L)
-#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS)0xC0000104L)
-#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS)0xC0000105L)
-#define STATUS_NAME_TOO_LONG ((NTSTATUS)0xC0000106L)
-#define STATUS_FILES_OPEN ((NTSTATUS)0xC0000107L)
-#define STATUS_CONNECTION_IN_USE ((NTSTATUS)0xC0000108L)
-#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS)0xC0000109L)
-#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS)0xC000010AL)
-#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS)0xC000010BL)
-#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS)0xC000010CL)
-#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS)0xC000010DL)
-#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS)0xC000010EL)
-#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS)0xC000010FL)
-#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS)0xC0000110L)
-#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS)0xC0000111L)
-#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS)0xC0000112L)
-#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS)0xC0000113L)
-#define STATUS_ABIOS_INVALID_LID ((NTSTATUS)0xC0000114L)
-#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115L)
-#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS)0xC0000116L)
-#define STATUS_NO_LDT ((NTSTATUS)0xC0000117L)
-#define STATUS_INVALID_LDT_SIZE ((NTSTATUS)0xC0000118L)
-#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS)0xC0000119L)
-#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS)0xC000011AL)
-#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS)0xC000011BL)
-#define STATUS_RXACT_INVALID_STATE ((NTSTATUS)0xC000011CL)
-#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS)0xC000011DL)
-#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS)0xC000011EL)
-#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS)0xC000011FL)
-#define STATUS_CANCELLED ((NTSTATUS)0xC0000120L)
-#define STATUS_CANNOT_DELETE ((NTSTATUS)0xC0000121L)
-#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS)0xC0000122L)
-#define STATUS_FILE_DELETED ((NTSTATUS)0xC0000123L)
-#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS)0xC0000124L)
-#define STATUS_SPECIAL_GROUP ((NTSTATUS)0xC0000125L)
-#define STATUS_SPECIAL_USER ((NTSTATUS)0xC0000126L)
-#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS)0xC0000127L)
-#define STATUS_FILE_CLOSED ((NTSTATUS)0xC0000128L)
-#define STATUS_TOO_MANY_THREADS ((NTSTATUS)0xC0000129L)
-#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS)0xC000012AL)
-#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS)0xC000012BL)
-#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS)0xC000012CL)
-#define STATUS_COMMITMENT_LIMIT ((NTSTATUS)0xC000012DL)
-#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS)0xC000012EL)
-#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS)0xC000012FL)
-#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS)0xC0000130L)
-#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS)0xC0000131L)
-#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS)0xC0000132L)
-#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS)0xC0000133L)
-#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS)0xC0000134L)
-#define STATUS_DLL_NOT_FOUND ((NTSTATUS)0xC0000135L)
-#define STATUS_OPEN_FAILED ((NTSTATUS)0xC0000136L)
-#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS)0xC0000137L)
-#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000138L)
-#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139L)
-#define STATUS_CONTROL_C_EXIT ((NTSTATUS)0xC000013AL)
-#define STATUS_LOCAL_DISCONNECT ((NTSTATUS)0xC000013BL)
-#define STATUS_REMOTE_DISCONNECT ((NTSTATUS)0xC000013CL)
-#define STATUS_REMOTE_RESOURCES ((NTSTATUS)0xC000013DL)
-#define STATUS_LINK_FAILED ((NTSTATUS)0xC000013EL)
-#define STATUS_LINK_TIMEOUT ((NTSTATUS)0xC000013FL)
-#define STATUS_INVALID_CONNECTION ((NTSTATUS)0xC0000140L)
-#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141L)
-#define STATUS_DLL_INIT_FAILED ((NTSTATUS)0xC0000142L)
-#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS)0xC0000143L)
-#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS)0xC0000144L)
-#define STATUS_APP_INIT_FAILURE ((NTSTATUS)0xC0000145L)
-#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS)0xC0000146L)
-#define STATUS_NO_PAGEFILE ((NTSTATUS)0xC0000147L)
-#define STATUS_INVALID_LEVEL ((NTSTATUS)0xC0000148L)
-#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS)0xC0000149L)
-#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS)0xC000014AL)
-#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014BL)
-#define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014CL)
-#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014DL)
-#define STATUS_NO_EVENT_PAIR ((NTSTATUS)0xC000014EL)
-#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS)0xC000014FL)
-#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS)0xC0000150L)
-#define STATUS_NO_SUCH_ALIAS ((NTSTATUS)0xC0000151L)
-#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS)0xC0000152L)
-#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS)0xC0000153L)
-#define STATUS_ALIAS_EXISTS ((NTSTATUS)0xC0000154L)
-#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS)0xC0000155L)
-#define STATUS_TOO_MANY_SECRETS ((NTSTATUS)0xC0000156L)
-#define STATUS_SECRET_TOO_LONG ((NTSTATUS)0xC0000157L)
-#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158L)
-#define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159L)
-#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015AL)
-#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015BL)
-#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015CL)
-#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015DL)
-#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015EL)
-#define STATUS_FT_MISSING_MEMBER ((NTSTATUS)0xC000015FL)
-#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS)0xC0000160L)
-#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS)0xC0000161L)
-#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS)0xC0000162L)
-#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS)0xC0000163L)
-#define STATUS_FLOPPY_VOLUME ((NTSTATUS)0xC0000164L)
-#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS)0xC0000165L)
-#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS)0xC0000166L)
-#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS)0xC0000167L)
-#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS)0xC0000168L)
-#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS)0xC0000169L)
-#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS)0xC000016AL)
-#define STATUS_DISK_RESET_FAILED ((NTSTATUS)0xC000016BL)
-#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS)0xC000016CL)
-#define STATUS_FT_ORPHANING ((NTSTATUS)0xC000016DL)
-#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS)0xC000016EL)
-#define STATUS_PARTITION_FAILURE ((NTSTATUS)0xC0000172L)
-#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS)0xC0000173L)
-#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS)0xC0000174L)
-#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS)0xC0000175L)
-#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS)0xC0000176L)
-#define STATUS_EOM_OVERFLOW ((NTSTATUS)0xC0000177L)
-#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178L)
-#define STATUS_NO_SUCH_MEMBER ((NTSTATUS)0xC000017AL)
-#define STATUS_INVALID_MEMBER ((NTSTATUS)0xC000017BL)
-#define STATUS_KEY_DELETED ((NTSTATUS)0xC000017CL)
-#define STATUS_NO_LOG_SPACE ((NTSTATUS)0xC000017DL)
-#define STATUS_TOO_MANY_SIDS ((NTSTATUS)0xC000017EL)
-#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017FL)
-#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS)0xC0000180L)
-#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS)0xC0000181L)
-#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182L)
-#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS)0xC0000183L)
-#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184L)
-#define STATUS_IO_DEVICE_ERROR ((NTSTATUS)0xC0000185L)
-#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS)0xC0000186L)
-#define STATUS_BACKUP_CONTROLLER ((NTSTATUS)0xC0000187L)
-#define STATUS_LOG_FILE_FULL ((NTSTATUS)0xC0000188L)
-#define STATUS_TOO_LATE ((NTSTATUS)0xC0000189L)
-#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS)0xC000018AL)
-#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS)0xC000018BL)
-#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS)0xC000018CL)
-#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018DL)
-#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS)0xC000018EL)
-#define STATUS_EVENTLOG_CANT_START ((NTSTATUS)0xC000018FL)
-#define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190L)
-#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191L)
-#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192L)
-#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193L)
-#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194L)
-#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195L)
-#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196L)
-#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS)0xC0000197L)
-#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS)0xC0000198L)
-#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS)0xC0000199L)
-#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019AL)
-#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019BL)
-#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS)0xC000019CL)
-#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS)0xC0000202L)
-#define STATUS_USER_SESSION_DELETED ((NTSTATUS)0xC0000203L)
-#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS)0xC0000204L)
-#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS)0xC0000205L)
-#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS)0xC0000206L)
-#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207L)
-#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS)0xC0000208L)
-#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS)0xC0000209L)
-#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS)0xC000020AL)
-#define STATUS_ADDRESS_CLOSED ((NTSTATUS)0xC000020BL)
-#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS)0xC000020CL)
-#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020DL)
-#define STATUS_TOO_MANY_NODES ((NTSTATUS)0xC000020EL)
-#define STATUS_TRANSACTION_ABORTED ((NTSTATUS)0xC000020FL)
-#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS)0xC0000210L)
-#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS)0xC0000211L)
-#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS)0xC0000212L)
-#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS)0xC0000213L)
-#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS)0xC0000214L)
-#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS)0xC0000215L)
-#define STATUS_NOT_SERVER_SESSION ((NTSTATUS)0xC0000216L)
-#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS)0xC0000217L)
-#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218L)
-#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS)0xC0000219L)
-#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021AL)
-#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS)0xC000021BL)
-#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS)0xC000021CL)
-#define STATUS_VDM_HARD_ERROR ((NTSTATUS)0xC000021DL)
-#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS)0xC000021EL)
-#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS)0xC000021FL)
-#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS)0xC0000220L)
-#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221L)
-#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222L)
-#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223L)
-#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224L)
-#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
-#define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226L)
-#define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227L)
-#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS)0xC0000228L)
-#define STATUS_FAIL_CHECK ((NTSTATUS)0xC0000229L)
-#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS)0xC000022AL)
-#define STATUS_OBJECTID_EXISTS ((NTSTATUS)0xC000022BL)
-#define STATUS_CONVERT_TO_LARGE ((NTSTATUS)0xC000022CL)
-#define STATUS_RETRY ((NTSTATUS)0xC000022DL)
-#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS)0xC000022EL)
-#define STATUS_ALLOCATE_BUCKET ((NTSTATUS)0xC000022FL)
-#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS)0xC0000230L)
-#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231L)
-#define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232L)
-#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233L)
-#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234L)
-#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235L)
-#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236L)
-#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237L)
-#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238L)
-#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS)0xC0000239L)
-#define STATUS_CONNECTION_INVALID ((NTSTATUS)0xC000023AL)
-#define STATUS_CONNECTION_ACTIVE ((NTSTATUS)0xC000023BL)
-#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS)0xC000023CL)
-#define STATUS_HOST_UNREACHABLE ((NTSTATUS)0xC000023DL)
-#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS)0xC000023EL)
-#define STATUS_PORT_UNREACHABLE ((NTSTATUS)0xC000023FL)
-#define STATUS_REQUEST_ABORTED ((NTSTATUS)0xC0000240L)
-#define STATUS_CONNECTION_ABORTED ((NTSTATUS)0xC0000241L)
-#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS)0xC0000242L)
-#define STATUS_USER_MAPPED_FILE ((NTSTATUS)0xC0000243L)
-#define STATUS_AUDIT_FAILED ((NTSTATUS)0xC0000244L)
-#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245L)
-#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS)0xC0000246L)
-#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS)0xC0000247L)
-#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS)0xC0000248L)
-#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS)0xC0000249L)
-#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS)0xC0000250L)
-#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS)0xC0000251L)
-#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS)0xC0000252L)
-#define STATUS_LPC_REPLY_LOST ((NTSTATUS)0xC0000253L)
-#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS)0xC0000254L)
-#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS)0xC0000255L)
-#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS)0xC0000256L)
-#define STATUS_PATH_NOT_COVERED ((NTSTATUS)0xC0000257L)
-#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS)0xC0000258L)
-#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS)0xC0000259L)
-#define STATUS_PWD_TOO_SHORT ((NTSTATUS)0xC000025AL)
-#define STATUS_PWD_TOO_RECENT ((NTSTATUS)0xC000025BL)
-#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS)0xC000025CL)
-#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS)0xC000025EL)
-#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS)0xC000025FL)
-#define STATUS_INVALID_HW_PROFILE ((NTSTATUS)0xC0000260L)
-#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261L)
-#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000262L)
-#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263L)
-#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS)0xC0000264L)
-#define STATUS_TOO_MANY_LINKS ((NTSTATUS)0xC0000265L)
-#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS)0xC0000266L)
-#define STATUS_FILE_IS_OFFLINE ((NTSTATUS)0xC0000267L)
-#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS)0xC0000268L)
-#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS)0xC0000269L)
-#define STATUS_LICENSE_VIOLATION ((NTSTATUS)0xC000026AL)
-#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS)0xC000026BL)
-#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS)0xC000026CL)
-#define STATUS_DFS_UNAVAILABLE ((NTSTATUS)0xC000026DL)
-#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS)0xC000026EL)
-#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS)0xC000026FL)
-#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000270L)
-#define STATUS_VALIDATE_CONTINUE ((NTSTATUS)0xC0000271L)
-#define STATUS_NO_MATCH ((NTSTATUS)0xC0000272L)
-#define STATUS_NO_MORE_MATCHES ((NTSTATUS)0xC0000273L)
-#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS)0xC0000275L)
-#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS)0xC0000276L)
-#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS)0xC0000277L)
-#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS)0xC0000278L)
-#define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS)0xC0000279L)
-#define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000280L)
-#define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS)0xC0000281L)
-#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS)0xC0000282L)
-#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS)0xC0000283L)
-#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS)0xC0000284L)
-#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS)0xC0000285L)
-#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS)0xC0000286L)
-#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS)0xC0000287L)
-#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS)0x80000288L)
-#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS)0x80000289L)
-#define STATUS_ENCRYPTION_FAILED ((NTSTATUS)0xC000028AL)
-#define STATUS_DECRYPTION_FAILED ((NTSTATUS)0xC000028BL)
-#define STATUS_RANGE_NOT_FOUND ((NTSTATUS)0xC000028CL)
-#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS)0xC000028DL)
-#define STATUS_NO_EFS ((NTSTATUS)0xC000028EL)
-#define STATUS_WRONG_EFS ((NTSTATUS)0xC000028FL)
-#define STATUS_NO_USER_KEYS ((NTSTATUS)0xC0000290L)
-#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS)0xC0000291L)
-#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS)0xC0000292L)
-#define STATUS_FILE_ENCRYPTED ((NTSTATUS)0xC0000293L)
-#define STATUS_WAKE_SYSTEM ((NTSTATUS)0x40000294L)
-#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295L)
-#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS)0xC0000296L)
-#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS)0xC0000297L)
-#define STATUS_WMI_TRY_AGAIN ((NTSTATUS)0xC0000298L)
-#define STATUS_SHARED_POLICY ((NTSTATUS)0xC0000299L)
-#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS)0xC000029AL)
-#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS)0xC000029BL)
-#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS)0xC000029CL)
-#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029DL)
-#define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS)0xC000029EL)
-#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS)0xC000029FL)
-#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS)0xC00002A0L)
-#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS)0xC00002A1L)
-#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS)0xC00002A2L)
-#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS)0xC00002A3L)
-#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS)0xC00002A4L)
-#define STATUS_DS_BUSY ((NTSTATUS)0xC00002A5L)
-#define STATUS_DS_UNAVAILABLE ((NTSTATUS)0xC00002A6L)
-#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS)0xC00002A7L)
-#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS)0xC00002A8L)
-#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS)0xC00002A9L)
-#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS)0xC00002AAL)
-#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS)0xC00002ABL)
-#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS)0xC00002ACL)
-#define STATUS_DS_CANT_ON_RDN ((NTSTATUS)0xC00002ADL)
-#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS)0xC00002AEL)
-#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS)0xC00002AFL)
-#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS)0xC00002B0L)
-#define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS)0xC00002B1L)
-#define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS)0xC00002B2L)
-#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS)0xC00002B3L)
-#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS)0xC00002B4L)
-#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS)0xC00002B5L)
-#define STATUS_DEVICE_REMOVED ((NTSTATUS)0xC00002B6L)
-#define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS)0xC00002B7L)
-#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS)0xC00002B8L)
-#define STATUS_NOINTERFACE ((NTSTATUS)0xC00002B9L)
-#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00002C1L)
-#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS)0xC00002C2L)
-#define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS)0xC00002C3L)
-#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS)0xC00002C4L)
-#define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS)0xC00002C5L)
-#define STATUS_WMI_READ_ONLY ((NTSTATUS)0xC00002C6L)
-#define STATUS_WMI_SET_FAILURE ((NTSTATUS)0xC00002C7L)
-#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS)0xC00002C8L)
-#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS)0xC00002C9L)
-#define STATUS_TRANSPORT_FULL ((NTSTATUS)0xC00002CAL)
-#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002CBL)
-#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS)0xC00002CCL)
-#define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS)0xC00002CDL)
-#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS)0xC00002CEL)
-#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS)0xC00002CFL)
-#define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS)0xC00002D0L)
-#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1L)
-#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS)0xC00002D2L)
-#define STATUS_POWER_STATE_INVALID ((NTSTATUS)0xC00002D3L)
-#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS)0xC00002D4L)
-#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D5L)
-#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D6L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC00002D8L)
-#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D9L)
-#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS)0xC00002DAL)
-#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS)0xC00002DBL)
-#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS)0xC00002DCL)
-#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS)0xC00002DDL)
-#define STATUS_INSUFFICIENT_POWER ((NTSTATUS)0xC00002DEL)
-#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DFL)
-#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS)0xC00002E0L)
-#define STATUS_DS_CANT_START ((NTSTATUS)0xC00002E1L)
-#define STATUS_DS_INIT_FAILURE ((NTSTATUS)0xC00002E2L)
-#define STATUS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002E3L)
-#define STATUS_DS_GC_REQUIRED ((NTSTATUS)0xC00002E4L)
-#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS)0xC00002E5L)
-#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS)0xC00002E6L)
-#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS)0xC00002E7L)
-#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS)0xC00002E8L)
-#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS)0xC00002E9L)
-#define STATUS_CANNOT_MAKE ((NTSTATUS)0xC00002EAL)
-#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS)0xC00002EBL)
-#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002ECL)
-#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002EDL)
-#define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS)0xC00002EEL)
-#define STATUS_NO_TGT_REPLY ((NTSTATUS)0xC00002EFL)
-#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS)0xC00002F0L)
-#define STATUS_NO_IP_ADDRESSES ((NTSTATUS)0xC00002F1L)
-#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS)0xC00002F2L)
-#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS)0xC00002F3L)
-#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS)0xC00002F4L)
-#define STATUS_MUST_BE_KDC ((NTSTATUS)0xC00002F5L)
-#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS)0xC00002F6L)
-#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS)0xC00002F7L)
-#define STATUS_NO_PA_DATA ((NTSTATUS)0xC00002F8L)
-#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS)0xC00002F9L)
-#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS)0xC00002FAL)
-#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS)0xC00002FBL)
-#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS)0xC00002FCL)
-#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS)0xC00002FDL)
-#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FEL)
-#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FFL)
-#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS)0xC0000300L)
-#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS)0xC0000301L)
-#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS)0xC0000302L)
-#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS)0xC0000303L)
-#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS)0xC0000304L)
-#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS)0xC0000305L)
-#define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS)0xC0000306L)
-#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS)0xC0000307L)
-#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS)0xC0000308L)
-#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS)0xC0000309L)
-#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS)0xC000030AL)
-#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS)0xC000030BL)
-#define STATUS_PKINIT_FAILURE ((NTSTATUS)0xC0000320L)
-#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS)0xC0000321L)
-#define STATUS_NO_KERB_KEY ((NTSTATUS)0xC0000322L)
-#define STATUS_HOST_DOWN ((NTSTATUS)0xC0000350L)
-#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS)0xC0000351L)
-#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS)0xC0000352L)
-#define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353L)
-#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354L)
-#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS)0xC0000355L)
-#define STATUS_AUDITING_DISABLED ((NTSTATUS)0xC0000356L)
-#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS)0xC0000357L)
-#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC0000358L)
-#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS)0xC0000359L)
-#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS)0xC000035AL)
-#define STATUS_BAD_BINDINGS ((NTSTATUS)0xC000035BL)
-#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS)0xC000035CL)
-#define STATUS_APPHELP_BLOCK ((NTSTATUS)0xC000035DL)
-#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS)0xC000035EL)
-#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS)0xC000035FL)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS)0xC0000361L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS)0xC0000362L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS)0xC0000363L)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS)0xC0000364L)
-#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS)0xC0000365L)
-#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS)0xC0000366L)
-#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS)0x00000367L)
-#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000368L)
-#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369L)
-#define STATUS_MCA_OCCURED ((NTSTATUS)0xC000036AL)
-#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS)0xC000036BL)
-#define STATUS_DRIVER_BLOCKED ((NTSTATUS)0xC000036CL)
-#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS)0xC000036DL)
-#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS)0xC000036EL)
-#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036FL)
-#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS)0x40000370L)
-#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS)0xC0000380L)
-#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS)0xC0000381L)
-#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS)0xC0000382L)
-#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS)0xC0000383L)
-#define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS)0xC0000384L)
-#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385L)
-#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386L)
-#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387L)
-#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388L)
-#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389L)
-#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038AL)
-#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038BL)
-#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS)0xC000038CL)
-#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS)0xC000038DL)
-#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038EL)
-#define STATUS_ASSERTION_FAILURE ((NTSTATUS)0xC0000420L)
-#define STATUS_CALLBACK_POP_STACK ((NTSTATUS)0xC0000423L)
-#define STATUS_WOW_ASSERTION ((NTSTATUS)0xC0009898L)
-#define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS)0xC0020001L)
-#define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS)0xC0020002L)
-#define RPC_NT_INVALID_BINDING ((NTSTATUS)0xC0020003L)
-#define RPC_NT_PROTSEQ_NOT_SUPPORTED ((NTSTATUS)0xC0020004L)
-#define RPC_NT_INVALID_RPC_PROTSEQ ((NTSTATUS)0xC0020005L)
-#define RPC_NT_INVALID_STRING_UUID ((NTSTATUS)0xC0020006L)
-#define RPC_NT_INVALID_ENDPOINT_FORMAT ((NTSTATUS)0xC0020007L)
-#define RPC_NT_INVALID_NET_ADDR ((NTSTATUS)0xC0020008L)
-#define RPC_NT_NO_ENDPOINT_FOUND ((NTSTATUS)0xC0020009L)
-#define RPC_NT_INVALID_TIMEOUT ((NTSTATUS)0xC002000AL)
-#define RPC_NT_OBJECT_NOT_FOUND ((NTSTATUS)0xC002000BL)
-#define RPC_NT_ALREADY_REGISTERED ((NTSTATUS)0xC002000CL)
-#define RPC_NT_TYPE_ALREADY_REGISTERED ((NTSTATUS)0xC002000DL)
-#define RPC_NT_ALREADY_LISTENING ((NTSTATUS)0xC002000EL)
-#define RPC_NT_NO_PROTSEQS_REGISTERED ((NTSTATUS)0xC002000FL)
-#define RPC_NT_NOT_LISTENING ((NTSTATUS)0xC0020010L)
-#define RPC_NT_UNKNOWN_MGR_TYPE ((NTSTATUS)0xC0020011L)
-#define RPC_NT_UNKNOWN_IF ((NTSTATUS)0xC0020012L)
-#define RPC_NT_NO_BINDINGS ((NTSTATUS)0xC0020013L)
-#define RPC_NT_NO_PROTSEQS ((NTSTATUS)0xC0020014L)
-#define RPC_NT_CANT_CREATE_ENDPOINT ((NTSTATUS)0xC0020015L)
-#define RPC_NT_OUT_OF_RESOURCES ((NTSTATUS)0xC0020016L)
-#define RPC_NT_SERVER_UNAVAILABLE ((NTSTATUS)0xC0020017L)
-#define RPC_NT_SERVER_TOO_BUSY ((NTSTATUS)0xC0020018L)
-#define RPC_NT_INVALID_NETWORK_OPTIONS ((NTSTATUS)0xC0020019L)
-#define RPC_NT_NO_CALL_ACTIVE ((NTSTATUS)0xC002001AL)
-#define RPC_NT_CALL_FAILED ((NTSTATUS)0xC002001BL)
-#define RPC_NT_CALL_FAILED_DNE ((NTSTATUS)0xC002001CL)
-#define RPC_NT_PROTOCOL_ERROR ((NTSTATUS)0xC002001DL)
-#define RPC_NT_UNSUPPORTED_TRANS_SYN ((NTSTATUS)0xC002001FL)
-#define RPC_NT_UNSUPPORTED_TYPE ((NTSTATUS)0xC0020021L)
-#define RPC_NT_INVALID_TAG ((NTSTATUS)0xC0020022L)
-#define RPC_NT_INVALID_BOUND ((NTSTATUS)0xC0020023L)
-#define RPC_NT_NO_ENTRY_NAME ((NTSTATUS)0xC0020024L)
-#define RPC_NT_INVALID_NAME_SYNTAX ((NTSTATUS)0xC0020025L)
-#define RPC_NT_UNSUPPORTED_NAME_SYNTAX ((NTSTATUS)0xC0020026L)
-#define RPC_NT_UUID_NO_ADDRESS ((NTSTATUS)0xC0020028L)
-#define RPC_NT_DUPLICATE_ENDPOINT ((NTSTATUS)0xC0020029L)
-#define RPC_NT_UNKNOWN_AUTHN_TYPE ((NTSTATUS)0xC002002AL)
-#define RPC_NT_MAX_CALLS_TOO_SMALL ((NTSTATUS)0xC002002BL)
-#define RPC_NT_STRING_TOO_LONG ((NTSTATUS)0xC002002CL)
-#define RPC_NT_PROTSEQ_NOT_FOUND ((NTSTATUS)0xC002002DL)
-#define RPC_NT_PROCNUM_OUT_OF_RANGE ((NTSTATUS)0xC002002EL)
-#define RPC_NT_BINDING_HAS_NO_AUTH ((NTSTATUS)0xC002002FL)
-#define RPC_NT_UNKNOWN_AUTHN_SERVICE ((NTSTATUS)0xC0020030L)
-#define RPC_NT_UNKNOWN_AUTHN_LEVEL ((NTSTATUS)0xC0020031L)
-#define RPC_NT_INVALID_AUTH_IDENTITY ((NTSTATUS)0xC0020032L)
-#define RPC_NT_UNKNOWN_AUTHZ_SERVICE ((NTSTATUS)0xC0020033L)
-#define EPT_NT_INVALID_ENTRY ((NTSTATUS)0xC0020034L)
-#define EPT_NT_CANT_PERFORM_OP ((NTSTATUS)0xC0020035L)
-#define EPT_NT_NOT_REGISTERED ((NTSTATUS)0xC0020036L)
-#define RPC_NT_NOTHING_TO_EXPORT ((NTSTATUS)0xC0020037L)
-#define RPC_NT_INCOMPLETE_NAME ((NTSTATUS)0xC0020038L)
-#define RPC_NT_INVALID_VERS_OPTION ((NTSTATUS)0xC0020039L)
-#define RPC_NT_NO_MORE_MEMBERS ((NTSTATUS)0xC002003AL)
-#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED ((NTSTATUS)0xC002003BL)
-#define RPC_NT_INTERFACE_NOT_FOUND ((NTSTATUS)0xC002003CL)
-#define RPC_NT_ENTRY_ALREADY_EXISTS ((NTSTATUS)0xC002003DL)
-#define RPC_NT_ENTRY_NOT_FOUND ((NTSTATUS)0xC002003EL)
-#define RPC_NT_NAME_SERVICE_UNAVAILABLE ((NTSTATUS)0xC002003FL)
-#define RPC_NT_INVALID_NAF_ID ((NTSTATUS)0xC0020040L)
-#define RPC_NT_CANNOT_SUPPORT ((NTSTATUS)0xC0020041L)
-#define RPC_NT_NO_CONTEXT_AVAILABLE ((NTSTATUS)0xC0020042L)
-#define RPC_NT_INTERNAL_ERROR ((NTSTATUS)0xC0020043L)
-#define RPC_NT_ZERO_DIVIDE ((NTSTATUS)0xC0020044L)
-#define RPC_NT_ADDRESS_ERROR ((NTSTATUS)0xC0020045L)
-#define RPC_NT_FP_DIV_ZERO ((NTSTATUS)0xC0020046L)
-#define RPC_NT_FP_UNDERFLOW ((NTSTATUS)0xC0020047L)
-#define RPC_NT_FP_OVERFLOW ((NTSTATUS)0xC0020048L)
-#define RPC_NT_NO_MORE_ENTRIES ((NTSTATUS)0xC0030001L)
-#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL ((NTSTATUS)0xC0030002L)
-#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE ((NTSTATUS)0xC0030003L)
-#define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS)0xC0030004L)
-#define RPC_NT_SS_CONTEXT_MISMATCH ((NTSTATUS)0xC0030005L)
-#define RPC_NT_SS_CONTEXT_DAMAGED ((NTSTATUS)0xC0030006L)
-#define RPC_NT_SS_HANDLES_MISMATCH ((NTSTATUS)0xC0030007L)
-#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS)0xC0030008L)
-#define RPC_NT_NULL_REF_POINTER ((NTSTATUS)0xC0030009L)
-#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE ((NTSTATUS)0xC003000AL)
-#define RPC_NT_BYTE_COUNT_TOO_SMALL ((NTSTATUS)0xC003000BL)
-#define RPC_NT_BAD_STUB_DATA ((NTSTATUS)0xC003000CL)
-#define RPC_NT_CALL_IN_PROGRESS ((NTSTATUS)0xC0020049L)
-#define RPC_NT_NO_MORE_BINDINGS ((NTSTATUS)0xC002004AL)
-#define RPC_NT_GROUP_MEMBER_NOT_FOUND ((NTSTATUS)0xC002004BL)
-#define EPT_NT_CANT_CREATE ((NTSTATUS)0xC002004CL)
-#define RPC_NT_INVALID_OBJECT ((NTSTATUS)0xC002004DL)
-#define RPC_NT_NO_INTERFACES ((NTSTATUS)0xC002004FL)
-#define RPC_NT_CALL_CANCELLED ((NTSTATUS)0xC0020050L)
-#define RPC_NT_BINDING_INCOMPLETE ((NTSTATUS)0xC0020051L)
-#define RPC_NT_COMM_FAILURE ((NTSTATUS)0xC0020052L)
-#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL ((NTSTATUS)0xC0020053L)
-#define RPC_NT_NO_PRINC_NAME ((NTSTATUS)0xC0020054L)
-#define RPC_NT_NOT_RPC_ERROR ((NTSTATUS)0xC0020055L)
-#define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS)0x40020056L)
-#define RPC_NT_SEC_PKG_ERROR ((NTSTATUS)0xC0020057L)
-#define RPC_NT_NOT_CANCELLED ((NTSTATUS)0xC0020058L)
-#define RPC_NT_INVALID_ES_ACTION ((NTSTATUS)0xC0030059L)
-#define RPC_NT_WRONG_ES_VERSION ((NTSTATUS)0xC003005AL)
-#define RPC_NT_WRONG_STUB_VERSION ((NTSTATUS)0xC003005BL)
-#define RPC_NT_INVALID_PIPE_OBJECT ((NTSTATUS)0xC003005CL)
-#define RPC_NT_INVALID_PIPE_OPERATION ((NTSTATUS)0xC003005DL)
-#define RPC_NT_WRONG_PIPE_VERSION ((NTSTATUS)0xC003005EL)
-#define RPC_NT_PIPE_CLOSED ((NTSTATUS)0xC003005FL)
-#define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS)0xC0030060L)
-#define RPC_NT_PIPE_EMPTY ((NTSTATUS)0xC0030061L)
-#define RPC_NT_INVALID_ASYNC_HANDLE ((NTSTATUS)0xC0020062L)
-#define RPC_NT_INVALID_ASYNC_CALL ((NTSTATUS)0xC0020063L)
-#define RPC_NT_SEND_INCOMPLETE ((NTSTATUS)0x400200AFL)
-#define STATUS_ACPI_INVALID_OPCODE ((NTSTATUS)0xC0140001L)
-#define STATUS_ACPI_STACK_OVERFLOW ((NTSTATUS)0xC0140002L)
-#define STATUS_ACPI_ASSERT_FAILED ((NTSTATUS)0xC0140003L)
-#define STATUS_ACPI_INVALID_INDEX ((NTSTATUS)0xC0140004L)
-#define STATUS_ACPI_INVALID_ARGUMENT ((NTSTATUS)0xC0140005L)
-#define STATUS_ACPI_FATAL ((NTSTATUS)0xC0140006L)
-#define STATUS_ACPI_INVALID_SUPERNAME ((NTSTATUS)0xC0140007L)
-#define STATUS_ACPI_INVALID_ARGTYPE ((NTSTATUS)0xC0140008L)
-#define STATUS_ACPI_INVALID_OBJTYPE ((NTSTATUS)0xC0140009L)
-#define STATUS_ACPI_INVALID_TARGETTYPE ((NTSTATUS)0xC014000AL)
-#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT ((NTSTATUS)0xC014000BL)
-#define STATUS_ACPI_ADDRESS_NOT_MAPPED ((NTSTATUS)0xC014000CL)
-#define STATUS_ACPI_INVALID_EVENTTYPE ((NTSTATUS)0xC014000DL)
-#define STATUS_ACPI_HANDLER_COLLISION ((NTSTATUS)0xC014000EL)
-#define STATUS_ACPI_INVALID_DATA ((NTSTATUS)0xC014000FL)
-#define STATUS_ACPI_INVALID_REGION ((NTSTATUS)0xC0140010L)
-#define STATUS_ACPI_INVALID_ACCESS_SIZE ((NTSTATUS)0xC0140011L)
-#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK ((NTSTATUS)0xC0140012L)
-#define STATUS_ACPI_ALREADY_INITIALIZED ((NTSTATUS)0xC0140013L)
-#define STATUS_ACPI_NOT_INITIALIZED ((NTSTATUS)0xC0140014L)
-#define STATUS_ACPI_INVALID_MUTEX_LEVEL ((NTSTATUS)0xC0140015L)
-#define STATUS_ACPI_MUTEX_NOT_OWNED ((NTSTATUS)0xC0140016L)
-#define STATUS_ACPI_MUTEX_NOT_OWNER ((NTSTATUS)0xC0140017L)
-#define STATUS_ACPI_RS_ACCESS ((NTSTATUS)0xC0140018L)
-#define STATUS_ACPI_INVALID_TABLE ((NTSTATUS)0xC0140019L)
-#define STATUS_ACPI_REG_HANDLER_FAILED ((NTSTATUS)0xC0140020L)
-#define STATUS_ACPI_POWER_REQUEST_FAILED ((NTSTATUS)0xC0140021L)
-#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001L)
-#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002L)
-#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003L)
-#define STATUS_CTX_CDM_CONNECT ((NTSTATUS)0x400A0004L)
-#define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS)0x400A0005L)
-#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS)0xC00A0006L)
-#define STATUS_CTX_NO_OUTBUF ((NTSTATUS)0xC00A0007L)
-#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS)0xC00A0008L)
-#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS)0xC00A0009L)
-#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS)0xC00A000AL)
-#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS)0xC00A000BL)
-#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS)0xC00A000CL)
-#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS)0xC00A000DL)
-#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS)0xC00A000EL)
-#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS)0xC00A000FL)
-#define STATUS_CTX_TD_ERROR ((NTSTATUS)0xC00A0010L)
-#define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS)0xC00A0012L)
-#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013L)
-#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS)0xC00A0014L)
-#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS)0xC00A0015L)
-#define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS)0xC00A0016L)
-#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS)0xC00A0017L)
-#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS)0xC00A0018L)
-#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS)0xC00A0022L)
-#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS)0xC00A0024L)
-#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS)0xC00A0026L)
-#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS)0xC00A0027L)
-#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS)0xC00A0028L)
-#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS)0xC00A002AL)
-#define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS)0xC00A002BL)
-#define STATUS_CTX_INVALID_WD ((NTSTATUS)0xC00A002EL)
-#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS)0xC00A002FL)
-#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS)0xC00A0030L)
-#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS)0xC00A0031L)
-#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS)0xC00A0032L)
-#define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS)0xC00A0033L)
-#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034L)
-#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS)0xC00A0035L)
-#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS)0xC00A0036L)
-#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS)0xC0040035L)
-#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS)0xC0040036L)
-#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037L)
-#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS)0xC0150001L)
-#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS)0xC0150002L)
-#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS)0xC0150003L)
-#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS)0xC0150004L)
-#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005L)
-#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS)0xC0150006L)
-#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS)0xC0150007L)
-#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS)0xC0150008L)
-#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS)0xC0150009L)
-#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS)0xC015000AL)
-#define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS)0xC015000BL)
-#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS)0xC015000CL)
-#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000DL)
-#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS)0xC015000EL)
-#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS)0xC015000FL)
-#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS)0xC0150010L)
-#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011L)
-#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS)0xC0150012L)
-#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS)0xC0150013L)
-#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS)0xC0130001L)
-#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS)0xC0130002L)
-#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS)0xC0130003L)
-#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS)0xC0130004L)
-#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS)0xC0130005L)
-#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS)0xC0130006L)
-#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007L)
-#define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS)0xC0130008L)
-#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS)0xC0130009L)
-#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS)0xC013000AL)
-#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS)0xC013000BL)
-#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS)0xC013000CL)
-#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS)0xC013000DL)
-#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS)0xC013000EL)
-#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS)0xC013000FL)
-#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS)0xC0130010L)
-#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS)0xC0130011L)
-#define STATUS_CLUSTER_NODE_UP ((NTSTATUS)0xC0130012L)
-#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS)0xC0130013L)
-#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS)0xC0130014L)
-#define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS)0xC0130015L)
-#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS)0xC0130016L)
-#define STATUS_CLUSTER_POISONED ((NTSTATUS)0xC0130017L)
-
-/*
-* Debug codes
-*/
-
-#define DBG_EXCEPTION_HANDLED ((NTSTATUS)0x00010001)
-#define DBG_CONTINUE ((NTSTATUS)0x00010002)
-#define DBG_REPLY_LATER ((NTSTATUS)0x40010001)
-#define DBG_UNABLE_TO_PROVIDE_HANDLE ((NTSTATUS)0x40010002)
-#define DBG_TERMINATE_THREAD ((NTSTATUS)0x40010003)
-#define DBG_TERMINATE_PROCESS ((NTSTATUS)0x40010004)
-#define DBG_CONTROL_C ((NTSTATUS)0x40010005)
-#define DBG_PRINTEXCEPTION_C ((NTSTATUS)0x40010006)
-#define DBG_RIPEXCEPTION ((NTSTATUS)0x40010007)
-#define DBG_CONTROL_BREAK ((NTSTATUS)0x40010008)
-#define DBG_COMMAND_EXCEPTION ((NTSTATUS)0x40010009)
-#define DBG_EXCEPTION_NOT_HANDLED ((NTSTATUS)0x80010001)
-#define DBG_NO_STATE_CHANGE ((NTSTATUS)0xC0010001)
-#define DBG_APP_NOT_IDLE ((NTSTATUS)0xC0010002)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-
-#ifndef __XMLDSODID_H__
-#define __XMLDSODID_H__
-#define DISPID_XOBJ_MIN 0x00010000
-#define DISPID_XOBJ_MAX 0x0001FFFF
-#define DISPID_XOBJ_BASE DISPID_XOBJ_MIN
-#define DISPID_XMLDSO DISPID_XOBJ_BASE
-#define DISPID_XMLDSO_DOCUMENT DISPID_XMLDSO + 1
-#define DISPID_XMLDSO_JAVADSOCOMPATIBLE DISPID_XMLDSO_DOCUMENT + 1
-#endif
\ No newline at end of file
--- /dev/null
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "strmif.idl";
+import "tuner.idl";
+import "bdaiface.idl";
+#endif
+
+interface IMPEG2_TIF_CONTROL;
+interface IATSCChannelInfo;
+interface IMPEG2PIDMap;
+
+[
+ object,
+ uuid(DFEF4A68-EE61-415f-9CCB-CD95F2F98A3A),
+ pointer_default(unique)
+]
+interface IBDA_TIF_REGISTRATION : IUnknown
+{
+ HRESULT
+ RegisterTIFEx(
+ [in] IPin * pTIFInputPin,
+ [in, out] ULONG * ppvRegistrationContext,
+ [in, out] IUnknown ** ppMpeg2DataControl);
+
+ HRESULT
+ UnregisterTIF(
+ [in] ULONG pvRegistrationContext);
+}
+
+[
+ object,
+ uuid(F9BAC2F9-4149-4916-B2EF-FAA202326862),
+ pointer_default(unique)
+]
+interface IMPEG2_TIF_CONTROL : IUnknown
+{
+ HRESULT
+ RegisterTIF(
+ [in] IUnknown * pUnkTIF,
+ [in, out] ULONG * ppvRegistrationContext);
+
+ HRESULT
+ UnregisterTIF(
+ [in] ULONG pvRegistrationContext);
+
+ HRESULT
+ AddPIDs(
+ [in] ULONG ulcPIDs,
+ [in] ULONG * pulPIDs);
+
+ HRESULT
+ DeletePIDs(
+ [in] ULONG ulcPIDs,
+ [in] ULONG * pulPIDs);
+
+ HRESULT
+ GetPIDCount(
+ [out] ULONG * pulcPIDs);
+
+ HRESULT
+ GetPIDs(
+ [out] ULONG * pulcPIDs,
+ [out] ULONG * pulPIDs);
+}
+
+[
+ object,
+ uuid(A3B152DF-7A90-4218-AC54-9830BEE8C0B6),
+ pointer_default(unique)
+]
+interface ITuneRequestInfo : IUnknown
+{
+ HRESULT
+ GetLocatorData(
+ [in] ITuneRequest *Request);
+
+ HRESULT
+ GetComponentData(
+ [in] ITuneRequest *CurrentRequest);
+
+ HRESULT
+ CreateComponentList(
+ [in] ITuneRequest *CurrentRequest);
+
+ HRESULT
+ GetNextProgram (
+ [in] ITuneRequest *CurrentRequest,
+ [out, retval] ITuneRequest **TuneRequest);
+
+ HRESULT
+ GetPreviousProgram(
+ [in] ITuneRequest *CurrentRequest,
+ [out, retval] ITuneRequest **TuneRequest);
+
+ HRESULT
+ GetNextLocator(
+ [in] ITuneRequest *CurrentRequest,
+ [out, retval] ITuneRequest **TuneRequest);
+
+ HRESULT
+ GetPreviousLocator(
+ [in] ITuneRequest *CurrentRequest,
+ [out, retval] ITuneRequest **TuneRequest);
+}
+
+[
+ object,
+ uuid(EFDA0C80-F395-42c3-9B3C-56B37DEC7BB7),
+ pointer_default(unique)
+]
+interface IGuideDataEvent : IUnknown
+{
+ HRESULT
+ GuideDataAcquired();
+
+ HRESULT ProgramChanged(
+ [in] VARIANT varProgramDescriptionID);
+
+ HRESULT ServiceChanged(
+ [in] VARIANT varServiceDescriptionID);
+
+ HRESULT ScheduleEntryChanged(
+ [in] VARIANT varScheduleEntryDescriptionID);
+
+ HRESULT ProgramDeleted(
+ [in] VARIANT varProgramDescriptionID);
+
+ HRESULT ServiceDeleted(
+ [in] VARIANT varServiceDescriptionID);
+
+ HRESULT ScheduleDeleted(
+ [in] VARIANT varScheduleEntryDescriptionID);
+}
+
+[
+ object,
+ uuid(88EC5E58-BB73-41d6-99CE-66C524B8B591),
+ pointer_default(unique)
+]
+interface IGuideDataProperty : IUnknown
+{
+ HRESULT
+ get_Name(
+ [out] BSTR *pbstrName);
+
+ HRESULT
+ get_Language(
+ [out] long *idLang);
+
+ HRESULT
+ get_Value(
+ [out] VARIANT *pvar);
+}
+
+[
+ object,
+ uuid(AE44423B-4571-475c-AD2C-F40A771D80EF),
+ pointer_default(unique)
+]
+interface IEnumGuideDataProperties : IUnknown
+{
+ HRESULT
+ Next(
+ [in] unsigned long celt,
+ [out] IGuideDataProperty **ppprop,
+ [out] unsigned long *pcelt);
+
+ HRESULT
+ Skip(
+ [in] unsigned long celt);
+
+ HRESULT
+ Reset();
+
+ HRESULT
+ Clone(
+ [out] IEnumGuideDataProperties **ppenum);
+}
+
+[
+ object,
+ uuid(1993299C-CED6-4788-87A3-420067DCE0C7),
+ pointer_default(unique)
+]
+interface IEnumTuneRequests : IUnknown
+{
+ HRESULT
+ Next(
+ [in] unsigned long celt,
+ [out] ITuneRequest **ppprop,
+ [out] unsigned long *pcelt);
+
+ HRESULT
+ Skip(
+ [in] unsigned long celt);
+
+ HRESULT
+ Reset();
+
+ HRESULT
+ Clone(
+ [out] IEnumTuneRequests **ppenum);
+}
+
+[
+ object,
+ uuid(61571138-5B01-43cd-AEAF-60B784A0BF93),
+ pointer_default(unique)
+]
+interface IGuideData : IUnknown
+{
+ HRESULT
+ GetServices(
+ [out, retval] IEnumTuneRequests ** ppEnumTuneRequests);
+
+ HRESULT
+ GetServiceProperties(
+ [in] ITuneRequest * pTuneRequest,
+ [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+
+ HRESULT
+ GetGuideProgramIDs(
+ [out, retval] IEnumVARIANT ** pEnumPrograms);
+
+ HRESULT
+ GetProgramProperties(
+ [in] VARIANT varProgramDescriptionID,
+ [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+
+ HRESULT
+ GetScheduleEntryIDs(
+ [out, retval] IEnumVARIANT ** pEnumScheduleEntries);
+
+ HRESULT
+ GetScheduleEntryProperties(
+ [in] VARIANT varScheduleEntryDescriptionID,
+ [out, retval] IEnumGuideDataProperties ** ppEnumProperties);
+}
+
+[
+ object,
+ uuid(4764ff7c-fa95-4525-af4d-d32236db9e38),
+ pointer_default(unique)
+]
+interface IGuideDataLoader : IUnknown
+{
+ HRESULT Init([in] IGuideData *pGuideStore);
+ HRESULT Terminate();
+};
+
+[
+ uuid(8224A083-7F8C-432D-B83E-3C5E9BDE3528),
+ version(1.0),
+]
+library PSISLOADLib
+{
+ importlib("stdole32.tlb");
+ importlib("stdole2.tlb");
+
+ [
+ uuid(14EB8748-1753-4393-95AE-4F7E7A87AAD6),
+ helpstring("TIFLoad Class")
+ ]
+ coclass TIFLoad
+ {
+ interface IGuideDataLoader;
+ interface IGuideDataEvent;
+ };
+};
+
<module name="dxsdk" type="idlheader">
<file>amstream.idl</file>
<file>austream.idl</file>
+ <file>bdatif.idl</file>
<file>ddstream.idl</file>
<file>dmodshow.idl</file>
<file>mixerocx.idl</file>
-
#define PASTE2(x,y) x##y
#define PASTE(x,y) PASTE2(x,y)
KPRIORITY BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
-} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
typedef struct _PROCESS_ACCESS_TOKEN
{
--- /dev/null
+#pragma once
+
+#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC)
+
+#define STATIC_BDANETWORKTYPE_ATSC 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0
+
+DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC);
typedef NTSTATUS
-(DDKAPI*BCLASS_DISABLE_STATUS_NOTIFY)(
+(NTAPI *BCLASS_DISABLE_STATUS_NOTIFY)(
IN PVOID Context);
typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_INFORMATION)(
+(NTAPI *BCLASS_QUERY_INFORMATION)(
IN PVOID Context,
IN ULONG BatteryTag,
IN BATTERY_QUERY_INFORMATION_LEVEL Level,
OUT PULONG ReturnedLength);
typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_STATUS)(
+(NTAPI *BCLASS_QUERY_STATUS)(
IN PVOID Context,
IN ULONG BatteryTag,
OUT PBATTERY_STATUS BatteryStatus);
typedef NTSTATUS
-(DDKAPI*BCLASS_QUERY_TAG)(
+(NTAPI *BCLASS_QUERY_TAG)(
IN PVOID Context,
OUT PULONG BatteryTag);
typedef NTSTATUS
-(DDKAPI*BCLASS_SET_INFORMATION)(
+(NTAPI *BCLASS_SET_INFORMATION)(
IN PVOID Context,
IN ULONG BatteryTag,
IN BATTERY_SET_INFORMATION_LEVEL Level,
IN PVOID Buffer OPTIONAL);
typedef NTSTATUS
-(DDKAPI*BCLASS_SET_STATUS_NOTIFY)(
+(NTAPI *BCLASS_SET_STATUS_NOTIFY)(
IN PVOID Context,
IN ULONG BatteryTag,
IN PBATTERY_NOTIFY BatteryNotify);
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassInitializeDevice(
IN PBATTERY_MINIPORT_INFO MiniportInfo,
IN PVOID *ClassData);
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassIoctl(
IN PVOID ClassData,
IN PIRP Irp);
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassQueryWmiDataBlock(
IN PVOID ClassData,
IN PDEVICE_OBJECT DeviceObject,
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassStatusNotify(
IN PVOID ClassData);
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassSystemControl(
IN PVOID ClassData,
IN PVOID WmiLibContext, /* PWMILIB_CONTEXT */
BCLASSAPI
NTSTATUS
-DDKAPI
+NTAPI
BatteryClassUnload(
IN PVOID ClassData);
*
*/
-#ifndef _CFG_INCLUDED_
+#pragma once
+
#define _CFG_INCLUDED_
#ifdef __cplusplus
#define CM_PROB_DRIVER_BLOCKED 0x00000030
#define CM_PROB_REGISTRY_TOO_LARGE 0x00000031
#define CM_PROB_SETPROPERTIES_FAILED 0x00000032
-#define NUM_CM_PROB 0x00000033
+#define CM_PROB_WAITING_ON_DEPENDENCY 0x00000033
+#define CM_PROB_UNSIGNED_DRIVER 0x00000034
+
+#define NUM_CM_PROB_V1 0x00000025
+#define NUM_CM_PROB_V2 0x00000032
+#define NUM_CM_PROB_V3 0x00000033
+#define NUM_CM_PROB_V4 0x00000034
+#define NUM_CM_PROB_V5 0x00000035
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define NUM_CM_PROB NUM_CM_PROB_V5
+#elif (NTDDI_VERSION >= NTDDI_WS08)
+#define NUM_CM_PROB NUM_CM_PROB_V4
+#elif (NTDDI_VERSION >= NTDDI_WS03)
+#define NUM_CM_PROB NUM_CM_PROB_V3
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+#define NUM_CM_PROB NUM_CM_PROB_V2
+#elif (NTDDI_VERSION >= WIN2K)
+#define NUM_CM_PROB NUM_CM_PROB_V1
+#endif
#define LCPRI_FORCECONFIG 0x00000000
#define LCPRI_BOOTCONFIG 0x00000001
#define LCPRI_DISABLED 0x0000FFFF
#define MAX_LCPRI 0x0000FFFF
-#define DN_ROOT_ENUMERATED 0x00000001 /* Was enumerated by ROOT */
-#define DN_DRIVER_LOADED 0x00000002 /* Has Register_Device_Driver */
-#define DN_ENUM_LOADED 0x00000004 /* Has Register_Enumerator */
-#define DN_STARTED 0x00000008 /* Is currently configured */
-#define DN_MANUAL 0x00000010 /* Manually installed */
-#define DN_NEED_TO_ENUM 0x00000020 /* May need reenumeration */
-#define DN_NOT_FIRST_TIME 0x00000040 /* Has received a config (Win9x only) */
-#define DN_HARDWARE_ENUM 0x00000080 /* Enum generates hardware ID */
-#define DN_LIAR 0x00000100 /* Lied about can reconfig once (Win9x only) */
-#define DN_HAS_MARK 0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
-#define DN_HAS_PROBLEM 0x00000400 /* Need device installer */
-#define DN_FILTERED 0x00000800 /* Is filtered */
-#define DN_MOVED 0x00001000 /* Has been moved (Win9x only) */
-#define DN_DISABLEABLE 0x00002000 /* Can be rebalanced */
-#define DN_REMOVABLE 0x00004000 /* Can be removed */
-#define DN_PRIVATE_PROBLEM 0x00008000 /* Has a private problem */
-#define DN_MF_PARENT 0x00010000 /* Multi function parent */
-#define DN_MF_CHILD 0x00020000 /* Multi function child */
+#define DN_ROOT_ENUMERATED 0x00000001 /* Was enumerated by ROOT */
+#define DN_DRIVER_LOADED 0x00000002 /* Has Register_Device_Driver */
+#define DN_ENUM_LOADED 0x00000004 /* Has Register_Enumerator */
+#define DN_STARTED 0x00000008 /* Is currently configured */
+#define DN_MANUAL 0x00000010 /* Manually installed */
+#define DN_NEED_TO_ENUM 0x00000020 /* May need reenumeration */
+#define DN_NOT_FIRST_TIME 0x00000040 /* Has received a config (Win9x only) */
+#define DN_HARDWARE_ENUM 0x00000080 /* Enum generates hardware ID */
+#define DN_LIAR 0x00000100 /* Lied about can reconfig once (Win9x only) */
+#define DN_HAS_MARK 0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
+#define DN_HAS_PROBLEM 0x00000400 /* Need device installer */
+#define DN_FILTERED 0x00000800 /* Is filtered */
+#define DN_MOVED 0x00001000 /* Has been moved (Win9x only) */
+#define DN_DISABLEABLE 0x00002000 /* Can be rebalanced */
+#define DN_REMOVABLE 0x00004000 /* Can be removed */
+#define DN_PRIVATE_PROBLEM 0x00008000 /* Has a private problem */
+#define DN_MF_PARENT 0x00010000 /* Multi function parent */
+#define DN_MF_CHILD 0x00020000 /* Multi function child */
#define DN_WILL_BE_REMOVED 0x00040000
#define DN_NOT_FIRST_TIMEE 0x00080000
#define DN_STOP_FREE_RES 0x00100000
#define DN_NO_SHOW_IN_DM 0x40000000
#define DN_BOOT_LOG_PROB 0x80000000
-#define DN_NEED_RESTART DN_LIAR
-#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
-#define DN_LEGACY_DRIVER DN_MOVED
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+#define DN_NEED_RESTART DN_LIAR
+#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
+#define DN_LEGACY_DRIVER DN_MOVED
#define DN_CHILD_WITH_INVALID_ID DN_HAS_MARK
+#elif (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#define DN_NEED_RESTART 0x00000100
+
+#endif
+
+#define DN_CHANGEABLE_FLAGS (DN_NOT_FIRST_TIME + \
+ DN_HARDWARE_ENUM + \
+ DN_HAS_MARK + \
+ DN_DISABLEABLE + \
+ DN_REMOVABLE + \
+ DN_MF_CHILD + \
+ DN_MF_PARENT + \
+ DN_NOT_FIRST_TIMEE + \
+ DN_STOP_FREE_RES + \
+ DN_REBAL_CANDIDATE + \
+ DN_NT_ENUMERATOR + \
+ DN_NT_DRIVER + \
+ DN_SILENT_INSTALL + \
+ DN_NO_SHOW_IN_DM)
typedef enum _PNP_VETO_TYPE {
PNP_VetoTypeUnknown,
PNP_VetoLegacyDriver
} PNP_VETO_TYPE, *PPNP_VETO_TYPE;
-#define CM_GLOBAL_STATE_CAN_DO_UI 0x00000001
-#define CM_GLOBAL_STATE_ON_BIG_STACK 0x00000002
-#define CM_GLOBAL_STATE_SERVICES_AVAILABLE 0x00000004
-#define CM_GLOBAL_STATE_SHUTTING_DOWN 0x00000008
-#define CM_GLOBAL_STATE_DETECTION_PENDING 0x00000010
-
#ifdef __cplusplus
}
#endif
-#endif /* _CFG_INCLUDED_ */
--- /dev/null
+/*
+ * cfgmgr32.h
+ *
+ * PnP configuration manager
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#define _CFGMGR32_H_
+
+#include <cfg.h>
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_CFGMGR32_)
+#define CMAPI
+#else
+#define CMAPI DECLSPEC_IMPORT
+#endif
+
+typedef CONST VOID *PCVOID;
+
+#define MAX_CONFIG_VALUE 9999
+#define MAX_INSTANCE_VALUE 9999
+
+#define MAX_DEVICE_ID_LEN 200
+#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
+
+#define MAX_CLASS_NAME_LEN 32
+#define MAX_GUID_STRING_LEN 39
+#define MAX_PROFILE_LEN 80
+
+#define MAX_MEM_REGISTERS 9
+#define MAX_IO_PORTS 20
+#define MAX_IRQS 7
+#define MAX_DMA_CHANNELS 7
+
+#define DWORD_MAX 0xffffffffUL
+#define DWORDLONG_MAX 0xffffffffffffffffui64
+
+#define CONFIGMG_VERSION 0x0400
+
+#ifdef NT_INCLUDED
+
+typedef unsigned __int64 DWORDLONG;
+typedef DWORDLONG *PDWORDLONG;
+
+#endif /* NT_INCLUDED */
+
+typedef DWORD RETURN_TYPE;
+typedef RETURN_TYPE CONFIGRET;
+
+typedef DWORD DEVNODE, DEVINST;
+typedef DEVNODE *PDEVNODE, *PDEVINST;
+
+typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+
+#ifdef UNICODE
+typedef DEVNODEID_W DEVNODEID;
+typedef DEVINSTID_W DEVINSTID;
+#else
+typedef DEVNODEID_A DEVNODEID;
+typedef DEVINSTID_A DEVINSTID;
+#endif
+
+typedef DWORD_PTR LOG_CONF;
+typedef LOG_CONF *PLOG_CONF;
+
+typedef DWORD_PTR RES_DES;
+typedef RES_DES *PRES_DES;
+
+typedef ULONG RESOURCEID;
+typedef RESOURCEID *PRESOURCEID;
+
+typedef ULONG PRIORITY;
+typedef PRIORITY *PPRIORITY;
+
+typedef DWORD_PTR RANGE_LIST;
+typedef RANGE_LIST *PRANGE_LIST;
+
+typedef DWORD_PTR RANGE_ELEMENT;
+typedef RANGE_ELEMENT *PRANGE_ELEMENT;
+
+typedef HANDLE HMACHINE;
+typedef HMACHINE *PHMACHINE;
+
+typedef ULONG_PTR CONFLICT_LIST;
+typedef CONFLICT_LIST *PCONFLICT_LIST;
+
+typedef struct _CONFLICT_DETAILS_A {
+ ULONG CD_ulSize;
+ ULONG CD_ulMask;
+ DEVINST CD_dnDevInst;
+ RES_DES CD_rdResDes;
+ ULONG CD_ulFlags;
+ CHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_A, *PCONFLICT_DETAILS_A;
+
+typedef struct _CONFLICT_DETAILS_W {
+ ULONG CD_ulSize;
+ ULONG CD_ulMask;
+ DEVINST CD_dnDevInst;
+ RES_DES CD_rdResDes;
+ ULONG CD_ulFlags;
+ WCHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_W, *PCONFLICT_DETAILS_W;
+
+#ifdef UNICODE
+typedef CONFLICT_DETAILS_W CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
+#else
+typedef CONFLICT_DETAILS_A CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
+#endif
+
+/* CONFLICT_DETAILS.CD.ulMask constants */
+#define CM_CDMASK_DEVINST 0x00000001
+#define CM_CDMASK_RESDES 0x00000002
+#define CM_CDMASK_FLAGS 0x00000004
+#define CM_CDMASK_DESCRIPTION 0x00000008
+#define CM_CDMASK_VALID 0x0000000F
+
+/* CONFLICT_DETAILS.CD.ulFlags constants */
+#define CM_CDFLAGS_DRIVER 0x00000001
+#define CM_CDFLAGS_ROOT_OWNED 0x00000002
+#define CM_CDFLAGS_RESERVED 0x00000004
+
+typedef ULONG REGDISPOSITION;
+
+#include <pshpack1.h>
+
+/* MEM_DES.MD_Flags constants */
+#define mMD_MemoryType 0x1
+#define fMD_MemoryType mMD_MemoryType
+#define fMD_ROM 0x0
+#define fMD_RAM 0x1
+
+#define mMD_32_24 0x2
+#define fMD_32_24 mMD_32_24
+#define fMD_24 0x0
+#define fMD_32 0x2
+
+#define mMD_Prefetchable 0x4
+#define fMD_Prefetchable mMD_Prefetchable
+#define fMD_Pref mMD_Prefetchable
+#define fMD_PrefetchDisallowed 0x0
+#define fMD_PrefetchAllowed 0x4
+
+#define mMD_Readable 0x8
+#define fMD_Readable mMD_Readable
+#define fMD_ReadAllowed 0x0
+#define fMD_ReadDisallowed 0x8
+
+#define mMD_CombinedWrite 0x10
+#define fMD_CombinedWrite mMD_CombinedWrite
+#define fMD_CombinedWriteDisallowed 0x0
+#define fMD_CombinedWriteAllowed 0x10
+
+#define mMD_Cacheable 0x20
+#define fMD_NonCacheable 0x0
+#define fMD_Cacheable 0x20
+#define fMD_WINDOW_DECODE 0x40
+#define fMD_MEMORY_BAR 0x80
+
+typedef struct Mem_Range_s {
+ DWORDLONG MR_Align;
+ ULONG MR_nBytes;
+ DWORDLONG MR_Min;
+ DWORDLONG MR_Max;
+ DWORD MR_Flags;
+ DWORD MR_Reserved;
+} MEM_RANGE, *PMEM_RANGE;
+
+typedef struct Mem_Des_s {
+ DWORD MD_Count;
+ DWORD MD_Type;
+ DWORDLONG MD_Alloc_Base;
+ DWORDLONG MD_Alloc_End;
+ DWORD MD_Flags;
+ DWORD MD_Reserved;
+} MEM_DES, *PMEM_DES;
+
+typedef struct Mem_Resource_s {
+ MEM_DES MEM_Header;
+ MEM_RANGE MEM_Data[ANYSIZE_ARRAY];
+} MEM_RESOURCE, *PMEM_RESOURCE;
+
+#define MType_Range sizeof(MEM_RANGE)
+
+typedef struct Mem_Large_Range_s {
+ DWORDLONG MLR_Align;
+ ULONGLONG MLR_nBytes;
+ DWORDLONG MLR_Min;
+ DWORDLONG MLR_Max;
+ DWORD MLR_Flags;
+ DWORD MLR_Reserved;
+} MEM_LARGE_RANGE, *PMEM_LARGE_RANGE;
+
+typedef struct Mem_Large_Des_s {
+ DWORD MLD_Count;
+ DWORD MLD_Type;
+ DWORDLONG MLD_Alloc_Base;
+ DWORDLONG MLD_Alloc_End;
+ DWORD MLD_Flags;
+ DWORD MLD_Reserved;
+} MEM_LARGE_DES, *PMEM_LARGE_DES;
+
+typedef struct Mem_Large_Resource_s {
+ MEM_LARGE_DES MEM_LARGE_Header;
+ MEM_LARGE_RANGE MEM_LARGE_Data[ANYSIZE_ARRAY];
+} MEM_LARGE_RESOURCE, *PMEM_LARGE_RESOURCE;
+
+#define MLType_Range sizeof(struct Mem_Large_Range_s)
+
+/* IO_DES.Type constants and masks */
+#define fIOD_PortType 0x1
+#define fIOD_Memory 0x0
+#define fIOD_IO 0x1
+#define fIOD_DECODE 0x00fc
+#define fIOD_10_BIT_DECODE 0x0004
+#define fIOD_12_BIT_DECODE 0x0008
+#define fIOD_16_BIT_DECODE 0x0010
+#define fIOD_POSITIVE_DECODE 0x0020
+#define fIOD_PASSIVE_DECODE 0x0040
+#define fIOD_WINDOW_DECODE 0x0080
+#define fIOD_PORT_BAR 0x0100
+
+/* IO_RANGE.IOR_Alias constants */
+#define IO_ALIAS_10_BIT_DECODE 0x00000004
+#define IO_ALIAS_12_BIT_DECODE 0x00000010
+#define IO_ALIAS_16_BIT_DECODE 0x00000000
+#define IO_ALIAS_POSITIVE_DECODE 0x000000FF
+
+typedef struct IO_Range_s {
+ DWORDLONG IOR_Align;
+ DWORD IOR_nPorts;
+ DWORDLONG IOR_Min;
+ DWORDLONG IOR_Max;
+ DWORD IOR_RangeFlags;
+ DWORDLONG IOR_Alias;
+} IO_RANGE, *PIO_RANGE;
+
+typedef struct IO_Des_s {
+ DWORD IOD_Count;
+ DWORD IOD_Type;
+ DWORDLONG IOD_Alloc_Base;
+ DWORDLONG IOD_Alloc_End;
+ DWORD IOD_DesFlags;
+} IO_DES, *PIO_DES;
+
+typedef struct IO_Resource_s {
+ IO_DES IO_Header;
+ IO_RANGE IO_Data[ANYSIZE_ARRAY];
+} IO_RESOURCE, *PIO_RESOURCE;
+
+#define IOA_Local 0xff
+
+#define IOType_Range sizeof(IO_RANGE)
+
+/* DMA_DES.DD_Flags constants and masks */
+#define mDD_Width 0x3
+#define fDD_BYTE 0x0
+#define fDD_WORD 0x1
+#define fDD_DWORD 0x2
+#define fDD_BYTE_AND_WORD 0x3
+
+#define mDD_BusMaster 0x4
+#define fDD_NoBusMaster 0x0
+#define fDD_BusMaster 0x4
+
+#define mDD_Type 0x18
+#define fDD_TypeStandard 0x00
+#define fDD_TypeA 0x08
+#define fDD_TypeB 0x10
+#define fDD_TypeF 0x18
+
+typedef struct DMA_Des_s {
+ DWORD DD_Count;
+ DWORD DD_Type;
+ DWORD DD_Flags;
+ ULONG DD_Alloc_Chan;
+} DMA_DES, *PDMA_DES;
+
+typedef struct DMA_Range_s {
+ ULONG DR_Min;
+ ULONG DR_Max;
+ ULONG DR_Flags;
+} DMA_RANGE, *PDMA_RANGE;
+
+#define DType_Range sizeof(DMA_RANGE)
+
+typedef struct DMA_Resource_s {
+ DMA_DES DMA_Header;
+ DMA_RANGE DMA_Data[ANYSIZE_ARRAY];
+} DMA_RESOURCE, *PDMA_RESOURCE;
+
+/* IRQ_DES.IRQD_flags constants */
+#define mIRQD_Share 0x1
+#define fIRQD_Exclusive 0x0
+#define fIRQD_Share 0x1
+
+#define fIRQD_Share_Bit 0
+#define fIRQD_Level_Bit 1
+
+#define mIRQD_Edge_Level 0x2
+#define fIRQD_Level 0x0
+#define fIRQD_Edge 0x2
+
+typedef struct IRQ_Range_s {
+ ULONG IRQR_Min;
+ ULONG IRQR_Max;
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT IRQR_Flags;
+ USHORT IRQR_Rsvdz;
+#else
+ ULONG IRQR_Flags;
+#endif
+} IRQ_RANGE, *PIRQ_RANGE;
+
+typedef struct IRQ_Des_32_s {
+ DWORD IRQD_Count;
+ DWORD IRQD_Type;
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT IRQD_Flags;
+ USHORT IRQD_Group;
+#else
+ DWORD IRQD_Flags;
+#endif
+ ULONG IRQD_Alloc_Num;
+ ULONG32 IRQD_Affinity;
+} IRQ_DES_32, *PIRQ_DES_32;
+
+typedef struct IRQ_Des_64_s {
+ DWORD IRQD_Count;
+ DWORD IRQD_Type;
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT IRQD_Flags;
+ USHORT IRQD_Group;
+#else
+ DWORD IRQD_Flags;
+#endif
+ ULONG IRQD_Alloc_Num;
+ ULONG64 IRQD_Affinity;
+} IRQ_DES_64, *PIRQ_DES_64;
+
+#ifdef _WIN64
+typedef IRQ_DES_64 IRQ_DES;
+typedef PIRQ_DES_64 PIRQ_DES;
+#else
+typedef IRQ_DES_32 IRQ_DES;
+typedef PIRQ_DES_32 PIRQ_DES;
+#endif
+
+typedef struct IRQ_Resource_32_s {
+ IRQ_DES_32 IRQ_Header;
+ IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
+} IRQ_RESOURCE_32, *PIRQ_RESOURCE_32;
+
+typedef struct IRQ_Resource_64_s {
+ IRQ_DES_64 IRQ_Header;
+ IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
+} IRQ_RESOURCE_64, *PIRQ_RESOURCE_64;
+
+#ifdef _WIN64
+typedef IRQ_RESOURCE_64 IRQ_RESOURCE;
+typedef PIRQ_RESOURCE_64 PIRQ_RESOURCE;
+#else
+typedef IRQ_RESOURCE_32 IRQ_RESOURCE;
+typedef PIRQ_RESOURCE_32 PIRQ_RESOURCE;
+#endif
+
+#define IRQType_Range sizeof(IRQ_RANGE)
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_RESDES_WIDTH_DEFAULT 0x00000000
+#define CM_RESDES_WIDTH_32 0x00000001
+#define CM_RESDES_WIDTH_64 0x00000002
+#define CM_RESDES_WIDTH_BITS 0x00000003
+#endif
+
+typedef struct DevPrivate_Range_s {
+ DWORD PR_Data1;
+ DWORD PR_Data2;
+ DWORD PR_Data3;
+} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
+
+typedef struct DevPrivate_Des_s {
+ DWORD PD_Count;
+ DWORD PD_Type;
+ DWORD PD_Data1;
+ DWORD PD_Data2;
+ DWORD PD_Data3;
+ DWORD PD_Flags;
+} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
+
+#define PType_Range sizeof(DEVPRIVATE_RANGE)
+
+typedef struct DevPrivate_Resource_s {
+ DEVPRIVATE_DES PRV_Header;
+ DEVPRIVATE_RANGE PRV_Data[ANYSIZE_ARRAY];
+} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
+
+typedef struct CS_Des_s {
+ DWORD CSD_SignatureLength;
+ DWORD CSD_LegacyDataOffset;
+ DWORD CSD_LegacyDataSize;
+ DWORD CSD_Flags;
+ GUID CSD_ClassGuid;
+ BYTE CSD_Signature[ANYSIZE_ARRAY];
+} CS_DES, *PCS_DES;
+
+typedef struct CS_Resource_s {
+ CS_DES CS_Header;
+} CS_RESOURCE, *PCS_RESOURCE;
+
+#define mPCD_IO_8_16 0x1
+#define fPCD_IO_8 0x0
+#define fPCD_IO_16 0x1
+#define mPCD_MEM_8_16 0x2
+#define fPCD_MEM_8 0x0
+#define fPCD_MEM_16 0x2
+#define mPCD_MEM_A_C 0xC
+#define fPCD_MEM1_A 0x4
+#define fPCD_MEM2_A 0x8
+#define fPCD_IO_ZW_8 0x10
+#define fPCD_IO_SRC_16 0x20
+#define fPCD_IO_WS_16 0x40
+#define mPCD_MEM_WS 0x300
+#define fPCD_MEM_WS_ONE 0x100
+#define fPCD_MEM_WS_TWO 0x200
+#define fPCD_MEM_WS_THREE 0x300
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+#define fPCD_MEM_A 0x4
+
+#define fPCD_ATTRIBUTES_PER_WINDOW 0x8000
+
+#define fPCD_IO1_16 0x00010000
+#define fPCD_IO1_ZW_8 0x00020000
+#define fPCD_IO1_SRC_16 0x00040000
+#define fPCD_IO1_WS_16 0x00080000
+
+#define fPCD_IO2_16 0x00100000
+#define fPCD_IO2_ZW_8 0x00200000
+#define fPCD_IO2_SRC_16 0x00400000
+#define fPCD_IO2_WS_16 0x00800000
+
+#define mPCD_MEM1_WS 0x03000000
+#define fPCD_MEM1_WS_ONE 0x01000000
+#define fPCD_MEM1_WS_TWO 0x02000000
+#define fPCD_MEM1_WS_THREE 0x03000000
+#define fPCD_MEM1_16 0x04000000
+
+#define mPCD_MEM2_WS 0x30000000
+#define fPCD_MEM2_WS_ONE 0x10000000
+#define fPCD_MEM2_WS_TWO 0x20000000
+#define fPCD_MEM2_WS_THREE 0x30000000
+#define fPCD_MEM2_16 0x40000000
+
+#define PCD_MAX_MEMORY 2
+#define PCD_MAX_IO 2
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+typedef struct PcCard_Des_s {
+ DWORD PCD_Count;
+ DWORD PCD_Type;
+ DWORD PCD_Flags;
+ BYTE PCD_ConfigIndex;
+ BYTE PCD_Reserved[3];
+ DWORD PCD_MemoryCardBase1;
+ DWORD PCD_MemoryCardBase2;
+#if (WINVER >= _WIN32_WINNT_WINXP)
+ DWORD PCD_MemoryCardBase[PCD_MAX_MEMORY];
+ WORD PCD_MemoryFlags[PCD_MAX_MEMORY];
+ BYTE PCD_IoFlags[PCD_MAX_IO];
+#endif
+} PCCARD_DES, *PPCCARD_DES;
+
+typedef struct PcCard_Resource_s {
+ PCCARD_DES PcCard_Header;
+} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
+
+/* MFCARD_DES.PMF_Flags constants */
+#define fPMF_AUDIO_ENABLE 0x8
+#define mPMF_AUDIO_ENABLE fPMF_AUDIO_ENABLE
+
+typedef struct MfCard_Des_s {
+ DWORD PMF_Count;
+ DWORD PMF_Type;
+ DWORD PMF_Flags;
+ BYTE PMF_ConfigOptions;
+ BYTE PMF_IoResourceIndex;
+ BYTE PMF_Reserved[2];
+ DWORD PMF_ConfigRegisterBase;
+} MFCARD_DES, *PMFCARD_DES;
+
+typedef struct MfCard_Resource_s {
+ MFCARD_DES MfCard_Header;
+} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
+
+typedef struct BusNumber_Des_s {
+ DWORD BUSD_Count;
+ DWORD BUSD_Type;
+ DWORD BUSD_Flags;
+ ULONG BUSD_Alloc_Base;
+ ULONG BUSD_Alloc_End;
+} BUSNUMBER_DES, *PBUSNUMBER_DES;
+
+typedef struct BusNumber_Range_s {
+ ULONG BUSR_Min;
+ ULONG BUSR_Max;
+ ULONG BUSR_nBusNumbers;
+ ULONG BUSR_Flags;
+} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
+
+#define BusNumberType_Range sizeof(BUSNUMBER_RANGE)
+
+typedef struct BusNumber_Resource_s {
+ BUSNUMBER_DES BusNumber_Header;
+ BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY];
+} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
+
+#define CM_HWPI_NOT_DOCKABLE 0x00000000
+#define CM_HWPI_UNDOCKED 0x00000001
+#define CM_HWPI_DOCKED 0x00000002
+
+typedef struct HWProfileInfo_sA {
+ ULONG HWPI_ulHWProfile;
+ CHAR HWPI_szFriendlyName[MAX_PROFILE_LEN];
+ DWORD HWPI_dwFlags;
+} HWPROFILEINFO_A, *PHWPROFILEINFO_A;
+
+typedef struct HWProfileInfo_sW {
+ ULONG HWPI_ulHWProfile;
+ WCHAR HWPI_szFriendlyName[MAX_PROFILE_LEN];
+ DWORD HWPI_dwFlags;
+} HWPROFILEINFO_W, *PHWPROFILEINFO_W;
+
+#ifdef UNICODE
+typedef HWPROFILEINFO_W HWPROFILEINFO;
+typedef PHWPROFILEINFO_W PHWPROFILEINFO;
+#else
+typedef HWPROFILEINFO_A HWPROFILEINFO;
+typedef PHWPROFILEINFO_A PHWPROFILEINFO;
+#endif
+
+#include <poppack.h>
+
+#define ResType_All 0x00000000
+#define ResType_None 0x00000000
+#define ResType_Mem 0x00000001
+#define ResType_IO 0x00000002
+#define ResType_DMA 0x00000003
+#define ResType_IRQ 0x00000004
+#define ResType_DoNotUse 0x00000005
+#define ResType_BusNumber 0x00000006
+#define ResType_MemLarge 0x00000007
+#define ResType_MAX 0x00000007
+#define ResType_Ignored_Bit 0x00008000
+#define ResType_ClassSpecific 0x0000FFFF
+#define ResType_Reserved 0x00008000
+#define ResType_DevicePrivate 0x00008001
+#define ResType_PcCardConfig 0x00008002
+#define ResType_MfCardConfig 0x00008003
+
+#define CM_ADD_RANGE_ADDIFCONFLICT 0x00000000
+#define CM_ADD_RANGE_DONOTADDIFCONFLICT 0x00000001
+#define CM_ADD_RANGE_BITS 0x00000001
+
+#define BASIC_LOG_CONF 0x00000000
+#define FILTERED_LOG_CONF 0x00000001
+#define ALLOC_LOG_CONF 0x00000002
+#define BOOT_LOG_CONF 0x00000003
+#define FORCED_LOG_CONF 0x00000004
+#define OVERRIDE_LOG_CONF 0x00000005
+#define NUM_LOG_CONF 0x00000006
+#define LOG_CONF_BITS 0x00000007
+
+#define PRIORITY_EQUAL_FIRST 0x00000008
+#define PRIORITY_EQUAL_LAST 0x00000000
+#define PRIORITY_BIT 0x00000008
+
+#define RegDisposition_OpenAlways 0x00000000
+#define RegDisposition_OpenExisting 0x00000001
+#define RegDisposition_Bits 0x00000001
+
+/* CM_Add_ID.ulFlags constants */
+#define CM_ADD_ID_HARDWARE 0x00000000
+#define CM_ADD_ID_COMPATIBLE 0x00000001
+#define CM_ADD_ID_BITS 0x00000001
+
+/* Flags for CM_Create_DevNode[_Ex].ulFlags constants */
+#define CM_CREATE_DEVNODE_NORMAL 0x00000000
+#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
+#define CM_CREATE_DEVNODE_PHANTOM 0x00000002
+#define CM_CREATE_DEVNODE_GENERATE_ID 0x00000004
+#define CM_CREATE_DEVNODE_DO_NOT_INSTALL 0x00000008
+#define CM_CREATE_DEVNODE_BITS 0x0000000F
+
+#define CM_CREATE_DEVINST_NORMAL CM_CREATE_DEVNODE_NORMAL
+#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
+#define CM_CREATE_DEVINST_PHANTOM CM_CREATE_DEVNODE_PHANTOM
+#define CM_CREATE_DEVINST_GENERATE_ID CM_CREATE_DEVNODE_GENERATE_ID
+#define CM_CREATE_DEVINST_DO_NOT_INSTALL CM_CREATE_DEVNODE_DO_NOT_INSTALL
+#define CM_CREATE_DEVINST_BITS CM_CREATE_DEVNODE_BITS
+
+/* Flags for CM_Delete_Class_Key.ulFlags constants */
+#define CM_DELETE_CLASS_ONLY 0x00000000
+#define CM_DELETE_CLASS_SUBKEYS 0x00000001
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_DELETE_CLASS_INTERFACE 0x00000002
+#endif
+#define CM_DELETE_CLASS_BITS 0x00000003
+
+/* CM_Run_Detection[_Ex].ulFlags constants */
+#define CM_DETECT_NEW_PROFILE 0x00000001
+#define CM_DETECT_CRASHED 0x00000002
+#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
+#define CM_DETECT_RUN 0x80000000
+#define CM_DETECT_BITS 0x80000007
+
+#define CM_DISABLE_POLITE 0x00000000
+#define CM_DISABLE_ABSOLUTE 0x00000001
+#define CM_DISABLE_HARDWARE 0x00000002
+#define CM_DISABLE_UI_NOT_OK 0x00000004
+#define CM_DISABLE_BITS 0x00000007
+
+#define CM_GETIDLIST_FILTER_NONE 0x00000000
+#define CM_GETIDLIST_FILTER_ENUMERATOR 0x00000001
+#define CM_GETIDLIST_FILTER_SERVICE 0x00000002
+#define CM_GETIDLIST_FILTER_EJECTRELATIONS 0x00000004
+#define CM_GETIDLIST_FILTER_REMOVALRELATIONS 0x00000008
+#define CM_GETIDLIST_FILTER_POWERRELATIONS 0x00000010
+#define CM_GETIDLIST_FILTER_BUSRELATIONS 0x00000020
+#define CM_GETIDLIST_DONOTGENERATE 0x10000040
+#if (WINVER <= _WIN32_WINNT_VISTA)
+#define CM_GETIDLIST_FILTER_BITS 0x1000007F
+#endif
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_GETIDLIST_FILTER_TRANSPORTRELATIONS 0x00000080
+#define CM_GETIDLIST_FILTER_PRESENT 0x00000100
+#define CM_GETIDLIST_FILTER_CLASS 0x00000200
+#define CM_GETIDLIST_FILTER_BITS 0x100003FF
+#endif
+
+#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT 0x00000000
+#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES 0x00000001
+#define CM_GET_DEVICE_INTERFACE_LIST_BITS 0x00000001
+
+#define CM_DRP_DEVICEDESC 0x00000001
+#define CM_DRP_HARDWAREID 0x00000002
+#define CM_DRP_COMPATIBLEIDS 0x00000003
+#define CM_DRP_UNUSED0 0x00000004
+#define CM_DRP_SERVICE 0x00000005
+#define CM_DRP_UNUSED1 0x00000006
+#define CM_DRP_UNUSED2 0x00000007
+#define CM_DRP_CLASS 0x00000008
+#define CM_DRP_CLASSGUID 0x00000009
+#define CM_DRP_DRIVER 0x0000000A
+#define CM_DRP_CONFIGFLAGS 0x0000000B
+#define CM_DRP_MFG 0x0000000C
+#define CM_DRP_FRIENDLYNAME 0x0000000D
+#define CM_DRP_LOCATION_INFORMATION 0x0000000E
+#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
+#define CM_DRP_CAPABILITIES 0x00000010
+#define CM_DRP_UI_NUMBER 0x00000011
+#define CM_DRP_UPPERFILTERS 0x00000012
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_CRP_UPPERFILTERS CM_DRP_UPPERFILTERS
+#endif
+#define CM_DRP_LOWERFILTERS 0x00000013
+#if (WINVER >= _WIN32_WINNT_VISTA)
+#define CM_CRP_LOWERFILTERS CM_DRP_LOWERFILTERS
+#endif
+#define CM_DRP_BUSTYPEGUID 0x00000014
+#define CM_DRP_LEGACYBUSTYPE 0x00000015
+#define CM_DRP_BUSNUMBER 0x00000016
+#define CM_DRP_ENUMERATOR_NAME 0x00000017
+#define CM_DRP_SECURITY 0x00000018
+#define CM_CRP_SECURITY CM_DRP_SECURITY
+#define CM_DRP_SECURITY_SDS 0x00000019
+#define CM_CRP_SECURITY_SDS CM_DRP_SECURITY_SDS
+#define CM_DRP_DEVTYPE 0x0000001A
+#define CM_CRP_DEVTYPE CM_DRP_DEVTYPE
+#define CM_DRP_EXCLUSIVE 0x0000001B
+#define CM_CRP_EXCLUSIVE CM_DRP_EXCLUSIVE
+#define CM_DRP_CHARACTERISTICS 0x0000001C
+#define CM_CRP_CHARACTERISTICS CM_DRP_CHARACTERISTICS
+#define CM_DRP_ADDRESS 0x0000001D
+#define CM_DRP_UI_NUMBER_DESC_FORMAT 0x0000001E
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_DRP_DEVICE_POWER_DATA 0x0000001F
+#define CM_DRP_REMOVAL_POLICY 0x00000020
+#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT 0x00000021
+#define CM_DRP_REMOVAL_POLICY_OVERRIDE 0x00000022
+#define CM_DRP_INSTALL_STATE 0x00000023
+#endif
+#if (WINVER >= _WIN32_WINNT_WS03)
+#define CM_DRP_LOCATION_PATHS 0x00000024
+#endif
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_DRP_BASE_CONTAINERID 0x00000025
+#endif
+#define CM_DRP_MIN 0x00000001
+#define CM_CRP_MIN CM_DRP_MIN
+#define CM_DRP_MAX 0x00000025
+#define CM_CRP_MAX CM_DRP_MAX
+
+#define CM_DEVCAP_LOCKSUPPORTED 0x00000001
+#define CM_DEVCAP_EJECTSUPPORTED 0x00000002
+#define CM_DEVCAP_REMOVABLE 0x00000004
+#define CM_DEVCAP_DOCKDEVICE 0x00000008
+#define CM_DEVCAP_UNIQUEID 0x00000010
+#define CM_DEVCAP_SILENTINSTALL 0x00000020
+#define CM_DEVCAP_RAWDEVICEOK 0x00000040
+#define CM_DEVCAP_SURPRISEREMOVALOK 0x00000080
+#define CM_DEVCAP_HARDWAREDISABLED 0x00000100
+#define CM_DEVCAP_NONDYNAMIC 0x00000200
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+#define CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL 1
+#define CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL 2
+#define CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL 3
+
+#define CM_INSTALL_STATE_INSTALLED 0
+#define CM_INSTALL_STATE_NEEDS_REINSTALL 1
+#define CM_INSTALL_STATE_FAILED_INSTALL 2
+#define CM_INSTALL_STATE_FINISH_INSTALL 3
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+/* CM_Locate_DevNode.ulFlags constants */
+#define CM_LOCATE_DEVNODE_NORMAL 0x00000000
+#define CM_LOCATE_DEVNODE_PHANTOM 0x00000001
+#define CM_LOCATE_DEVNODE_CANCELREMOVE 0x00000002
+#define CM_LOCATE_DEVNODE_NOVALIDATION 0x00000004
+#define CM_LOCATE_DEVNODE_BITS 0x00000007
+
+#define CM_LOCATE_DEVINST_NORMAL CM_LOCATE_DEVNODE_NORMAL
+#define CM_LOCATE_DEVINST_PHANTOM CM_LOCATE_DEVNODE_PHANTOM
+#define CM_LOCATE_DEVINST_CANCELREMOVE CM_LOCATE_DEVNODE_CANCELREMOVE
+#define CM_LOCATE_DEVINST_NOVALIDATION CM_LOCATE_DEVNODE_NOVALIDATION
+#define CM_LOCATE_DEVINST_BITS CM_LOCATE_DEVNODE_BITS
+
+#define CM_OPEN_CLASS_KEY_INSTALLER 0x00000000
+#define CM_OPEN_CLASS_KEY_INTERFACE 0x00000001
+#define CM_OPEN_CLASS_KEY_BITS 0x00000001
+
+/* CM_Query_And_Remove_SubTree.ulFlags constants */
+#define CM_REMOVE_UI_OK 0x00000000
+#define CM_REMOVE_UI_NOT_OK 0x00000001
+#define CM_REMOVE_NO_RESTART 0x00000002
+#define CM_REMOVE_BITS 0x00000003
+
+#define CM_QUERY_REMOVE_UI_OK (CM_REMOVE_UI_OK)
+#define CM_QUERY_REMOVE_UI_NOT_OK (CM_REMOVE_UI_NOT_OK)
+#define CM_QUERY_REMOVE_BITS (CM_QUERY_REMOVE_UI_OK|CM_QUERY_REMOVE_UI_NOT_OK)
+
+/* CM_Reenumerate_DevNode.ulFlags constants */
+#define CM_REENUMERATE_NORMAL 0x00000000
+#define CM_REENUMERATE_SYNCHRONOUS 0x00000001
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
+#define CM_REENUMERATE_ASYNCHRONOUS 0x00000004
+#endif
+#define CM_REENUMERATE_BITS 0x00000007
+
+#define CM_REGISTER_DEVICE_DRIVER_STATIC 0x00000000
+#define CM_REGISTER_DEVICE_DRIVER_DISABLEABLE 0x00000001
+#define CM_REGISTER_DEVICE_DRIVER_REMOVABLE 0x00000002
+#define CM_REGISTER_DEVICE_DRIVER_BITS 0x00000003
+
+#define CM_REGISTRY_HARDWARE 0x00000000
+#define CM_REGISTRY_SOFTWARE 0x00000001
+#define CM_REGISTRY_USER 0x00000100
+#define CM_REGISTRY_CONFIG 0x00000200
+#define CM_REGISTRY_BITS 0x00000301
+
+#define CM_SET_DEVNODE_PROBLEM_NORMAL 0x00000000
+#define CM_SET_DEVNODE_PROBLEM_OVERRIDE 0x00000001
+#define CM_SET_DEVNODE_PROBLEM_BITS 0x00000001
+
+#define CM_SET_DEVINST_PROBLEM_NORMAL CM_SET_DEVNODE_PROBLEM_NORMAL
+#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE
+#define CM_SET_DEVINST_PROBLEM_BITS CM_SET_DEVNODE_PROBLEM_BITS
+
+/* CM_Set_HW_Prof_Flags[_Ex].ulFlags constants */
+#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK 0x00000001
+#define CM_SET_HW_PROF_FLAGS_BITS 0x00000001
+
+/* CM_Setup_DevInst[_Ex].ulFlags constants */
+#define CM_SETUP_DEVNODE_READY 0x00000000
+#define CM_SETUP_DEVINST_READY CM_SETUP_DEVNODE_READY
+#define CM_SETUP_DOWNLOAD 0x00000001
+#define CM_SETUP_WRITE_LOG_CONFS 0x00000002
+#define CM_SETUP_PROP_CHANGE 0x00000003
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_SETUP_DEVNODE_RESET 0x00000004
+#define CM_SETUP_DEVINST_RESET CM_SETUP_DEVNODE_RESET
+#endif
+#define CM_SETUP_BITS 0x00000007
+
+#define CM_QUERY_ARBITRATOR_RAW 0x00000000
+#define CM_QUERY_ARBITRATOR_TRANSLATED 0x00000001
+#define CM_QUERY_ARBITRATOR_BITS 0x00000001
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+#define CM_CUSTOMDEVPROP_MERGE_MULTISZ 0x00000001
+#define CM_CUSTOMDEVPROP_BITS 0x00000001
+#endif
+
+#define CM_NAME_ATTRIBUTE_NAME_RETRIEVED_FROM_DEVICE 0x1
+#define CM_NAME_ATTRIBUTE_USER_ASSIGNED_NAME 0x2
+
+#define CR_SUCCESS 0x00000000
+#define CR_DEFAULT 0x00000001
+#define CR_OUT_OF_MEMORY 0x00000002
+#define CR_INVALID_POINTER 0x00000003
+#define CR_INVALID_FLAG 0x00000004
+#define CR_INVALID_DEVNODE 0x00000005
+#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
+#define CR_INVALID_RES_DES 0x00000006
+#define CR_INVALID_LOG_CONF 0x00000007
+#define CR_INVALID_ARBITRATOR 0x00000008
+#define CR_INVALID_NODELIST 0x00000009
+#define CR_DEVNODE_HAS_REQS 0x0000000A
+#define CR_DEVINST_HAS_REQS CR_DEVNODE_HAS_REQS
+#define CR_INVALID_RESOURCEID 0x0000000B
+#define CR_DLVXD_NOT_FOUND 0x0000000C
+#define CR_NO_SUCH_DEVNODE 0x0000000D
+#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
+#define CR_NO_MORE_LOG_CONF 0x0000000E
+#define CR_NO_MORE_RES_DES 0x0000000F
+#define CR_ALREADY_SUCH_DEVNODE 0x00000010
+#define CR_ALREADY_SUCH_DEVINST CR_ALREADY_SUCH_DEVNODE
+#define CR_INVALID_RANGE_LIST 0x00000011
+#define CR_INVALID_RANGE 0x00000012
+#define CR_FAILURE 0x00000013
+#define CR_NO_SUCH_LOGICAL_DEV 0x00000014
+#define CR_CREATE_BLOCKED 0x00000015
+#define CR_NOT_SYSTEM_VM 0x00000016
+#define CR_REMOVE_VETOED 0x00000017
+#define CR_APM_VETOED 0x00000018
+#define CR_INVALID_LOAD_TYPE 0x00000019
+#define CR_BUFFER_SMALL 0x0000001A
+#define CR_NO_ARBITRATOR 0x0000001B
+#define CR_NO_REGISTRY_HANDLE 0x0000001C
+#define CR_REGISTRY_ERROR 0x0000001D
+#define CR_INVALID_DEVICE_ID 0x0000001E
+#define CR_INVALID_DATA 0x0000001F
+#define CR_INVALID_API 0x00000020
+#define CR_DEVLOADER_NOT_READY 0x00000021
+#define CR_NEED_RESTART 0x00000022
+#define CR_NO_MORE_HW_PROFILES 0x00000023
+#define CR_DEVICE_NOT_THERE 0x00000024
+#define CR_NO_SUCH_VALUE 0x00000025
+#define CR_WRONG_TYPE 0x00000026
+#define CR_INVALID_PRIORITY 0x00000027
+#define CR_NOT_DISABLEABLE 0x00000028
+#define CR_FREE_RESOURCES 0x00000029
+#define CR_QUERY_VETOED 0x0000002A
+#define CR_CANT_SHARE_IRQ 0x0000002B
+#define CR_NO_DEPENDENT 0x0000002C
+#define CR_SAME_RESOURCES 0x0000002D
+#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
+#define CR_INVALID_MACHINENAME 0x0000002F
+#define CR_REMOTE_COMM_FAILURE 0x00000030
+#define CR_MACHINE_UNAVAILABLE 0x00000031
+#define CR_NO_CM_SERVICES 0x00000032
+#define CR_ACCESS_DENIED 0x00000033
+#define CR_CALL_NOT_IMPLEMENTED 0x00000034
+#define CR_INVALID_PROPERTY 0x00000035
+#define CR_DEVICE_INTERFACE_ACTIVE 0x00000036
+#define CR_NO_SUCH_DEVICE_INTERFACE 0x00000037
+#define CR_INVALID_REFERENCE_STRING 0x00000038
+#define CR_INVALID_CONFLICT_LIST 0x00000039
+#define CR_INVALID_INDEX 0x0000003A
+#define CR_INVALID_STRUCTURE_SIZE 0x0000003B
+#define NUM_CR_RESULTS 0x0000003C
+
+#define CM_GLOBAL_STATE_CAN_DO_UI 0x00000001
+#define CM_GLOBAL_STATE_ON_BIG_STACK 0x00000002
+#define CM_GLOBAL_STATE_SERVICES_AVAILABLE 0x00000004
+#define CM_GLOBAL_STATE_SHUTTING_DOWN 0x00000008
+#define CM_GLOBAL_STATE_DETECTION_PENDING 0x00000010
+#if (WINVER >= _WIN32_WINNT_WIN7)
+#define CM_GLOBAL_STATE_REBOOT_REQUIRED 0x00000020
+#endif
+
+/* FIXME : These definitions don't exist in the official header
+
+#define CMP_MAGIC 0x01234567
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_Init_Detection(IN DWORD dwMagic);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_RegisterNotification(
+ IN HANDLE hRecipient,
+ IN LPVOID lpvNotificationFilter,
+ IN DWORD dwFlags,
+ OUT PULONG pluhDevNotify);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_Report_LogOn(
+ IN DWORD dwMagic,
+ IN DWORD dwProcessId);
+
+CMAPI
+CONFIGRET
+WINAPI
+CMP_UnregisterNotification(IN ULONG luhDevNotify);
+
+*/
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf(
+ OUT PLOG_CONF plcLogConf,
+ IN DEVINST dnDevInst,
+ IN PRIORITY Priority,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf_Ex(
+ OUT PLOG_CONF plcLogConf,
+ IN DEVINST dnDevInst,
+ IN PRIORITY Priority,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDA(
+ IN DEVINST dnDevInst,
+ IN PSTR pszID,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExA(
+ IN DEVINST dnDevInst,
+ IN PSTR pszID,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExW(
+ IN DEVINST dnDevInst,
+ IN PWSTR pszID,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDW(
+ IN DEVINST dnDevInst,
+ IN PWSTR pszID,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Add_ID CM_Add_IDW
+#define CM_Add_ID_Ex CM_Add_ID_ExW
+#else
+#define CM_Add_ID CM_Add_IDA
+#define CM_Add_ID_Ex CM_Add_ID_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Range(
+ IN DWORDLONG ullStartValue,
+ IN DWORDLONG ullEndValue,
+ IN RANGE_LIST rlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des(
+ OUT PRES_DES prdResDes OPTIONAL,
+ IN LOG_CONF lcLogConf,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des_Ex(
+ OUT PRES_DES prdResDes OPTIONAL,
+ IN LOG_CONF lcLogConf,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineA(
+ IN PCSTR UNCServerName OPTIONAL,
+ OUT PHMACHINE phMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineW(
+ IN PCWSTR UNCServerName OPTIONAL,
+ OUT PHMACHINE phMachine);
+
+#ifdef UNICODE
+#define CM_Connect_Machine CM_Connect_MachineW
+#else
+#define CM_Connect_Machine CM_Connect_MachineA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+#define CM_Create_DevInstW CM_Create_DevNodeW
+#define CM_Create_DevInstA CM_Create_DevNodeA
+#define CM_Create_DevInst_ExW CM_Create_DevNode_ExW
+#define CM_Create_DevInst_ExA CM_Create_DevNode_ExA
+#ifdef UNICODE
+#define CM_Create_DevNode CM_Create_DevNodeW
+#define CM_Create_DevInst CM_Create_DevNodeW
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExW
+#define CM_Create_DevInst_Ex CM_Create_DevInst_ExW
+#else
+#define CM_Create_DevNode CM_Create_DevNodeA
+#define CM_Create_DevInst CM_Create_DevNodeA
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExA
+#define CM_Create_DevInst_Ex CM_Create_DevNode_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_Range_List(
+ OUT PRANGE_LIST prlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key(
+ IN LPGUID ClassGuid,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key_Ex(
+ IN LPGUID ClassGuid,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key(
+ IN DEVNODE dnDevNode,
+ IN ULONG ulHardwareProfile,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key_Ex(
+ IN DEVNODE dnDevNode,
+ IN ULONG ulHardwareProfile,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+#define CM_Delete_DevInst_Key CM_Delete_DevNode_Key
+#define CM_Delete_DevInst_Key_Ex CM_Delete_DevNode_Key_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Range(
+ IN DWORDLONG ullStartValue,
+ IN DWORDLONG ullEndValue,
+ IN RANGE_LIST rlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict(
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ OUT PBOOL pbConflictDetected,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict_Ex(
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ OUT PBOOL pbConflictDetected,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disable_DevNode(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disable_DevNode_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Disable_DevInst CM_Disable_DevNode
+#define CM_Disable_DevInst_Ex CM_Disable_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disconnect_Machine(
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Dup_Range_List(
+ IN RANGE_LIST rlhOld,
+ IN RANGE_LIST rlhNew,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enable_DevNode(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enable_DevNode_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Enable_DevInst CM_Enable_DevNode
+#define CM_Enable_DevInst_Ex CM_Enable_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+ IN ULONG ulClassIndex,
+ OUT LPGUID ClassGuid,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes_Ex(
+ IN ULONG ulClassIndex,
+ OUT LPGUID ClassGuid,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsA(
+ IN ULONG ulEnumIndex,
+ OUT PCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExA(
+ IN ULONG ulEnumIndex,
+ OUT PCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExW(
+ IN ULONG ulEnumIndex,
+ OUT PWCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsW(
+ IN ULONG ulEnumIndex,
+ OUT PWCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
+#else
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsA
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Find_Range(
+ OUT PDWORDLONG pullStart,
+ IN DWORDLONG ullStart,
+ IN ULONG ulLength,
+ IN DWORDLONG ullAlignment,
+ IN DWORDLONG ullEnd,
+ IN RANGE_LIST rlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_First_Range(
+ IN RANGE_LIST rlh,
+ OUT PDWORDLONG pullStart,
+ OUT PDWORDLONG pullEnd,
+ OUT PRANGE_ELEMENT preElement,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf(
+ IN LOG_CONF lcLogConfToBeFreed,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Ex(
+ IN LOG_CONF lcLogConfToBeFreed,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Handle(
+ IN LOG_CONF lcLogConf);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Range_List(
+ IN RANGE_LIST rlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Ex(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Handle(
+ IN RES_DES rdResDes);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Resource_Conflict_Handle(
+ IN CONFLICT_LIST clConflictList);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child_Ex(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_NameA(
+ IN LPGUID ClassGuid,
+ OUT PCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_NameW(
+ IN LPGUID ClassGuid,
+ OUT PWCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Name_ExA(
+ IN LPGUID ClassGuid,
+ OUT PCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Name_ExW(
+ IN LPGUID ClassGuid,
+ OUT PWCHAR Buffer,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_Class_Name CM_Get_Class_NameW
+#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExW
+#else
+#define CM_Get_Class_Name CM_Get_Class_NameA
+#define CM_Get_Class_Name_Ex CM_Get_Class_Name_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameA(
+ IN LPGUID ClassGuid,
+ OUT LPSTR pszKeyName,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameW(
+ IN LPGUID ClassGuid,
+ OUT LPWSTR pszKeyName,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExA(
+ IN LPGUID ClassGuid,
+ OUT LPSTR pszKeyName,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExW(
+ IN LPGUID ClassGuid,
+ OUT LPWSTR pszKeyName,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameW
+#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExW
+#else
+#define CM_Get_Class_Key_Name CM_Get_Class_Key_NameA
+#define CM_Get_Class_Key_Name_Ex CM_Get_Class_Key_Name_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth(
+ OUT PULONG pulDepth,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth_Ex(
+ OUT PULONG pulDepth,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDA(
+ IN DEVINST dnDevInst,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExA(
+ IN DEVINST dnDevInst,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExW(
+ IN DEVINST dnDevInst,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDW(
+ IN DEVINST dnDevInst,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID CM_Get_Device_IDW
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
+#else
+#define CM_Get_Device_ID CM_Get_Device_IDA
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListA(
+ IN PCSTR pszFilter OPTIONAL,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExA(
+ IN PCSTR pszFilter OPTIONAL,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExW(
+ IN PCWSTR pszFilter OPTIONAL,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListW(
+ IN PCWSTR pszFilter OPTIONAL,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExW
+#else
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListA
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeA(
+ OUT PULONG pulLen,
+ IN PCSTR pszFilter OPTIONAL,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExA(
+ OUT PULONG pulLen,
+ IN PCSTR pszFilter OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExW(
+ OUT PULONG pulLen,
+ IN PCWSTR pszFilter OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeW(
+ OUT PULONG pulLen,
+ IN PCWSTR pszFilter OPTIONAL,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExW
+#else
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeA
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size(
+ OUT PULONG pulLen,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size_Ex(
+ OUT PULONG pulLen,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyA(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyW(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExA(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExW(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevInst_Registry_Property_ExW CM_Get_DevNode_Registry_Property_ExW
+#define CM_Get_DevInst_Registry_Property_ExA CM_Get_DevNode_Registry_Property_ExA
+
+#ifdef UNICODE
+#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
+#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW
+#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW
+#else
+#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
+#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA
+#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA
+#endif /* UNICODE */
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyA(
+ IN DEVINST dnDevInst,
+ IN PCSTR pszCustomPropertyName,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyW(
+ IN DEVINST dnDevInst,
+ IN PCWSTR pszCustomPropertyName,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExA(
+ IN DEVINST dnDevInst,
+ IN PCSTR pszCustomPropertyName,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExW(
+ IN DEVINST dnDevInst,
+ IN PCWSTR pszCustomPropertyName,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Get_DevInst_Custom_PropertyW CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevInst_Custom_PropertyA CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevInst_Custom_Property_ExW CM_Get_DevNode_Custom_Property_ExW
+#define CM_Get_DevInst_Custom_Property_ExA CM_Get_DevNode_Custom_Property_ExA
+#ifdef UNICODE
+#define CM_Get_DevInst_Custom_Property CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevInst_Custom_Property_Ex CM_Get_DevNode_Custom_Property_ExW
+#define CM_Get_DevNode_Custom_Property CM_Get_DevNode_Custom_PropertyW
+#define CM_Get_DevNode_Custom_Property_Ex CM_Get_DevNode_Custom_Property_ExW
+#else
+#define CM_Get_DevInst_Custom_Property CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevInst_Custom_Property_Ex CM_Get_DevNode_Custom_Property_ExA
+#define CM_Get_DevNode_Custom_Property CM_Get_DevNode_Custom_PropertyA
+#define CM_Get_DevNode_Custom_Property_Ex CM_Get_DevNode_Custom_Property_ExA
+#endif
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status(
+ OUT PULONG pulStatus,
+ OUT PULONG pulProblemNumber,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status_Ex(
+ OUT PULONG pulStatus,
+ OUT PULONG pulProblemNumber,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Get_DevInst_Status CM_Get_DevNode_Status
+#define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf(
+ OUT PLOG_CONF plcLogConf OPTIONAL,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf_Ex(
+ OUT PLOG_CONF plcLogConf OPTIONAL,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Global_State(
+ OUT PULONG pulState,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Global_State_Ex(
+ OUT PULONG pulState,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoA(
+ IN ULONG ulIndex,
+ OUT PHWPROFILEINFO_A pHWProfileInfo,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExA(
+ IN ULONG ulIndex,
+ OUT PHWPROFILEINFO_A pHWProfileInfo,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoW(
+ IN ULONG ulIndex,
+ OUT PHWPROFILEINFO_W pHWProfileInfo,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExW(
+ IN ULONG ulIndex,
+ OUT PHWPROFILEINFO_W pHWProfileInfo,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Hardware_Profile_Info CM_Get_Hardware_Profile_InfoW
+#define CM_Get_Hardware_Profile_Info_Ex CM_Get_Hardware_Profile_Info_ExW
+#else
+#define CM_Get_Hardware_Profile_Info CM_Get_Hardware_Profile_InfoA
+#define CM_Get_Hardware_Profile_Info_Ex CM_Get_Hardware_Profile_Info_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsA(
+ IN DEVINSTID_A szDevInstName,
+ IN ULONG ulHardwareProfile,
+ OUT PULONG pulValue,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsW(
+ IN DEVINSTID_W szDevInstName,
+ IN ULONG ulHardwareProfile,
+ OUT PULONG pulValue,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExA(
+ IN DEVINSTID_A szDevInstName,
+ IN ULONG ulHardwareProfile,
+ OUT PULONG pulValue,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExW(
+ IN DEVINSTID_W szDevInstName,
+ IN ULONG ulHardwareProfile,
+ OUT PULONG pulValue,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsW
+#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExW
+#else
+#define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsA
+#define CM_Get_HW_Prof_Flags_Ex CM_Get_HW_Prof_Flags_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasA(
+ IN LPCSTR pszDeviceInterface,
+ IN LPGUID AliasInterfaceGuid,
+ OUT LPSTR pszAliasDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasW(
+ IN LPCWSTR pszDeviceInterface,
+ IN LPGUID AliasInterfaceGuid,
+ OUT LPWSTR pszAliasDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExA(
+ IN LPCSTR pszDeviceInterface,
+ IN LPGUID AliasInterfaceGuid,
+ OUT LPSTR pszAliasDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExW(
+ IN LPCWSTR pszDeviceInterface,
+ IN LPGUID AliasInterfaceGuid,
+ OUT LPWSTR pszAliasDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_Alias CM_Get_Device_Interface_AliasW
+#define CM_Get_Device_Interface_Alias_Ex CM_Get_Device_Interface_Alias_ExW
+#else
+#define CM_Get_Device_Interface_Alias CM_Get_Device_Interface_AliasA
+#define CM_Get_Device_Interface_Alias_Ex CM_Get_Device_Interface_Alias_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListA(
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListW(
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExA(
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ OUT PCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExW(
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ OUT PWCHAR Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_List CM_Get_Device_Interface_ListW
+#define CM_Get_Device_Interface_List_Ex CM_Get_Device_Interface_List_ExW
+#else
+#define CM_Get_Device_Interface_List CM_Get_Device_Interface_ListA
+#define CM_Get_Device_Interface_List_Ex CM_Get_Device_Interface_List_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeA(
+ OUT PULONG pulLen,
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeW(
+ OUT PULONG pulLen,
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExA(
+ OUT PULONG pulLen,
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExW(
+ OUT PULONG pulLen,
+ IN LPGUID InterfaceClassGuid,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Device_Interface_List_Size CM_Get_Device_Interface_List_SizeW
+#define CM_Get_Device_Interface_List_Size_Ex CM_Get_Device_Interface_List_Size_ExW
+#else
+#define CM_Get_Device_Interface_List_Size CM_Get_Device_Interface_List_SizeA
+#define CM_Get_Device_Interface_List_Size_Ex CM_Get_Device_Interface_List_Size_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority(
+ IN LOG_CONF lcLogConf,
+ OUT PPRIORITY pPriority,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority_Ex(
+ IN LOG_CONF lcLogConf,
+ OUT PPRIORITY pPriority,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf(
+ OUT PLOG_CONF plcLogConf OPTIONAL,
+ IN LOG_CONF lcLogConf,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf_Ex(
+ OUT PLOG_CONF plcLogConf OPTIONAL,
+ IN LOG_CONF lcLogConf,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN RESOURCEID ForResource,
+ OUT PRESOURCEID pResourceID,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des_Ex(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN RESOURCEID ForResource,
+ OUT PRESOURCEID pResourceID,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent_Ex(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data(
+ IN RES_DES rdResDes,
+ OUT PVOID Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Ex(
+ IN RES_DES rdResDes,
+ OUT PVOID Buffer,
+ IN ULONG BufferLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size(
+ OUT PULONG pulSize,
+ IN RES_DES rdResDes,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size_Ex(
+ OUT PULONG pulSize,
+ IN RES_DES rdResDes,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_Count(
+ IN CONFLICT_LIST clConflictList,
+ OUT PULONG pulCount);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsA(
+ IN CONFLICT_LIST clConflictList,
+ IN ULONG ulIndex,
+ IN OUT PCONFLICT_DETAILS_A pConflictDetails);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsW(
+ IN CONFLICT_LIST clConflictList,
+ IN ULONG ulIndex,
+ IN OUT PCONFLICT_DETAILS_W pConflictDetails);
+
+#ifdef UNICODE
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
+#else
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyW(
+ IN LPGUID ClassGuid,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyW(
+ IN LPGUID ClassGuid,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyA(
+ IN LPGUID ClassGuid,
+ IN ULONG ulProperty,
+ OUT PULONG pulRegDataType OPTIONAL,
+ OUT PVOID Buffer OPTIONAL,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyA(
+ IN LPGUID ClassGuid,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Get_Class_Registry_Property CM_Get_Class_Registry_PropertyW
+#define CM_Set_Class_Registry_Property CM_Set_Class_Registry_PropertyW
+#else
+#define CM_Get_Class_Registry_Property CM_Get_Class_Registry_PropertyA
+#define CM_Set_Class_Registry_Property CM_Set_Class_Registry_PropertyA
+#endif // UNICODE
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST DevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling_Ex(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINST DevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version(VOID);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version_Ex(
+ IN HMACHINE hMachine);
+
+#if (WINVER >= _WIN32_WINNT_WINXP)
+
+CMAPI
+BOOL
+WINAPI
+CM_Is_Version_Available(
+ IN WORD wVersion);
+
+CMAPI
+BOOL
+WINAPI
+CM_Is_Version_Available_Ex(
+ IN WORD wVersion,
+ IN HMACHINE hMachine OPTIONAL);
+
+#endif /* (WINVER >= _WIN32_WINNT_WINXP) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Intersect_Range_List(
+ IN RANGE_LIST rlhOld1,
+ IN RANGE_LIST rlhOld2,
+ IN RANGE_LIST rlhNew,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Invert_Range_List(
+ IN RANGE_LIST rlhOld,
+ IN RANGE_LIST rlhNew,
+ IN DWORDLONG ullMaxValue,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present(
+ OUT PBOOL pbPresent);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present_Ex(
+ OUT PBOOL pbPresent,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID OPTIONAL,
+ IN ULONG ulFlags);
+
+#define CM_Locate_DevInstA CM_Locate_DevNodeA
+#define CM_Locate_DevInstW CM_Locate_DevNodeW
+#define CM_Locate_DevInst_ExA CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_ExW CM_Locate_DevNode_ExW
+
+#ifdef UNICODE
+#define CM_Locate_DevNode CM_Locate_DevNodeW
+#define CM_Locate_DevInst CM_Locate_DevNodeW
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExW
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExW
+#else
+#define CM_Locate_DevNode CM_Locate_DevNodeA
+#define CM_Locate_DevInst CM_Locate_DevNodeA
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Merge_Range_List(
+ IN RANGE_LIST rlhOld1,
+ IN RANGE_LIST rlhOld2,
+ IN RANGE_LIST rlhNew,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des_Ex(
+ OUT PRES_DES prdResDes,
+ IN RES_DES rdResDes,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Move_DevNode(
+ IN DEVINST dnFromDevInst,
+ IN DEVINST dnToDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Move_DevNode_Ex(
+ IN DEVINST dnFromDevInst,
+ IN DEVINST dnToDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Move_DevInst CM_Move_DevNode
+#define CM_Move_DevInst_Ex CM_Move_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Next_Range(
+ IN OUT PRANGE_ELEMENT preElement,
+ OUT PDWORDLONG pullStart,
+ OUT PDWORDLONG pullEnd,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyA(
+ IN LPGUID ClassGuid OPTIONAL,
+ IN LPCSTR pszClassName OPTIONAL,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkClass,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyW(
+ IN LPGUID ClassGuid OPTIONAL,
+ IN LPCWSTR pszClassName OPTIONAL,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkClass,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExA(
+ IN LPGUID pszClassGuid OPTIONAL,
+ IN LPCSTR pszClassName OPTIONAL,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkClass,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExW(
+ IN LPGUID pszClassGuid OPTIONAL,
+ IN LPCWSTR pszClassName OPTIONAL,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkClass,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Open_Class_Key CM_Open_Class_KeyW
+#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExW
+#else
+#define CM_Open_Class_Key CM_Open_Class_KeyA
+#define CM_Open_Class_Key_Ex CM_Open_Class_Key_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key(
+ IN DEVINST dnDevNode,
+ IN REGSAM samDesired,
+ IN ULONG ulHardwareProfile,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDevice,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key_Ex(
+ IN DEVINST dnDevNode,
+ IN REGSAM samDesired,
+ IN ULONG ulHardwareProfile,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDevice,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Open_DevInst_Key CM_Open_DevNode_Key
+#define CM_Open_DevInst_Key_Ex CM_Open_DevNode_Key_Ex
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_KeyA(
+ IN LPCSTR pszDeviceInterface,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_KeyW(
+ IN LPCWSTR pszDeviceInterface,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_Key_ExA(
+ IN LPCSTR pszDeviceInterface,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Open_Device_Interface_Key_ExW(
+ IN LPCWSTR pszDeviceInterface,
+ IN REGSAM samDesired,
+ IN REGDISPOSITION Disposition,
+ OUT PHKEY phkDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Open_Device_Interface_Key CM_Open_Device_Interface_KeyW
+#define CM_Open_Device_Interface_Key_Ex CM_Open_Device_Interface_Key_ExW
+#else
+#define CM_Open_Device_Interface_Key CM_Open_Device_Interface_KeyA
+#define CM_Open_Device_Interface_Key_Ex CM_Open_Device_Interface_Key_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_KeyA(
+ IN LPCSTR pszDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_KeyW(
+ IN LPCWSTR pszDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_Key_ExA(
+ IN LPCSTR pszDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Delete_Device_Interface_Key_ExW(
+ IN LPCWSTR pszDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Delete_Device_Interface_Key CM_Delete_Device_Interface_KeyW
+#define CM_Delete_Device_Interface_Key_Ex CM_Delete_Device_Interface_Key_ExW
+#else
+#define CM_Delete_Device_Interface_Key CM_Delete_Device_Interface_KeyA
+#define CM_Delete_Device_Interface_Key_Ex CM_Delete_Device_Interface_Key_ExA
+#endif
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data(
+ OUT PVOID pData,
+ IN ULONG DataLen,
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data_Ex(
+ OUT PVOID pData,
+ IN ULONG DataLen,
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size(
+ OUT PULONG pulSize,
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size_Ex(
+ OUT PULONG pulSize,
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree(
+ IN DEVINST dnAncestor,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree_Ex(
+ IN DEVINST dnAncestor,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeA(
+ IN DEVINST dnAncestor,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeW(
+ IN DEVINST dnAncestor,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPWSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExA(
+ IN DEVINST dnAncestor,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExW(
+ IN DEVINST dnAncestor,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPWSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Query_And_Remove_SubTree CM_Query_And_Remove_SubTreeW
+#define CM_Query_And_Remove_SubTree_Ex CM_Query_And_Remove_SubTree_ExW
+#else
+#define CM_Query_And_Remove_SubTree CM_Query_And_Remove_SubTreeA
+#define CM_Query_And_Remove_SubTree_Ex CM_Query_And_Remove_SubTree_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Resource_Conflict_List(
+ OUT PCONFLICT_LIST pclConflictList,
+ IN DEVINST dnDevInst,
+ IN RESOURCEID ResourceID,
+ IN PCVOID ResourceData,
+ IN ULONG ResourceLen,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
+#define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceA(
+ IN DEVINST dnDevInst,
+ IN LPGUID InterfaceClassGuid,
+ IN LPCSTR pszReference OPTIONAL,
+ OUT LPSTR pszDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceW(
+ IN DEVINST dnDevInst,
+ IN LPGUID InterfaceClassGuid,
+ IN LPCWSTR pszReference OPTIONAL,
+ OUT LPWSTR pszDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExA(
+ IN DEVINST dnDevInst,
+ IN LPGUID InterfaceClassGuid,
+ IN LPCSTR pszReference OPTIONAL,
+ OUT LPSTR pszDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExW(
+ IN DEVINST dnDevInst,
+ IN LPGUID InterfaceClassGuid,
+ IN LPCWSTR pszReference OPTIONAL,
+ OUT LPWSTR pszDeviceInterface,
+ IN OUT PULONG pulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Register_Device_Interface CM_Register_Device_InterfaceW
+#define CM_Register_Device_Interface_Ex CM_Register_Device_Interface_ExW
+#else
+#define CM_Register_Device_Interface CM_Register_Device_InterfaceA
+#define CM_Register_Device_Interface_Ex CM_Register_Device_Interface_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectA(
+ IN DEVINST dnDevInst,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExW(
+ IN DEVINST dnDevInst,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPWSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExA(
+ IN DEVINST dnDevInst,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectW(
+ IN DEVINST dnDevInst,
+ OUT PPNP_VETO_TYPE pVetoType,
+ OUT LPWSTR pszVetoName,
+ IN ULONG ulNameLength,
+ IN ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Request_Device_Eject CM_Request_Device_EjectW
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExW
+#else
+#define CM_Request_Device_Eject CM_Request_Device_EjectA
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC(VOID);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC_Ex(
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Run_Detection(
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Run_Detection_Ex(
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+
+CONFIGRET
+CM_Apply_PowerScheme(VOID);
+
+CONFIGRET
+CM_Write_UserPowerKey(
+ IN CONST GUID *SchemeGuid OPTIONAL,
+ IN CONST GUID *SubGroupOfPowerSettingsGuid OPTIONAL,
+ IN CONST GUID *PowerSettingGuid OPTIONAL,
+ IN ULONG AccessFlags,
+ IN ULONG Type,
+ IN UCHAR *Buffer,
+ IN DWORD BufferSize,
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_Set_ActiveScheme(
+ IN CONST GUID *SchemeGuid,
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_Restore_DefaultPowerScheme(
+ IN CONST GUID *SchemeGuid,
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_RestoreAll_DefaultPowerSchemes(
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_Duplicate_PowerScheme(
+ IN CONST GUID *SourceSchemeGuid,
+ IN GUID **DestinationSchemeGuid,
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_Delete_PowerScheme(
+ IN CONST GUID *SchemeGuid,
+ OUT PDWORD Error);
+
+CONFIGRET
+CM_Import_PowerScheme(
+ IN LPCWSTR ImportFileNamePath,
+ IN OUT GUID **DestinationSchemeGuid,
+ OUT PDWORD Error);
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProblem,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProblem,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Set_DevInst_Problem CM_Set_DevNode_Problem
+#define CM_Set_DevInst_Problem_Ex CM_Set_DevNode_Problem_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceA(
+ IN LPCSTR pszDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceW(
+ IN LPCWSTR pszDeviceInterface,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExA(
+ IN LPCSTR pszDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExW(
+ IN LPCWSTR pszDeviceInterface,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#ifdef UNICODE
+#define CM_Unregister_Device_Interface CM_Unregister_Device_InterfaceW
+#define CM_Unregister_Device_Interface_Ex CM_Unregister_Device_Interface_ExW
+#else
+#define CM_Unregister_Device_Interface CM_Unregister_Device_InterfaceA
+#define CM_Unregister_Device_Interface_Ex CM_Unregister_Device_Interface_ExA
+#endif
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Remove_SubTree(
+ IN DEVINST dnAncestor,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Remove_SubTree_Ex(
+ IN DEVINST dnAncestor,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyA(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyW(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExA(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExW(
+ IN DEVINST dnDevInst,
+ IN ULONG ulProperty,
+ IN PCVOID Buffer OPTIONAL,
+ IN ULONG ulLength,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevInst_Registry_Property_ExW CM_Set_DevNode_Registry_Property_ExW
+#define CM_Set_DevInst_Registry_Property_ExA CM_Set_DevNode_Registry_Property_ExA
+
+#ifdef UNICODE
+#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
+#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyW
+#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW
+#else
+#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
+#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyA
+#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof(
+ IN ULONG ulHardwareProfile,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Ex(
+ IN ULONG ulHardwareProfile,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsA(
+ IN DEVINSTID_A szDevInstName,
+ IN ULONG ulConfig,
+ IN ULONG ulValue,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsW(
+ IN DEVINSTID_W szDevInstName,
+ IN ULONG ulConfig,
+ IN ULONG ulValue,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExA(
+ IN DEVINSTID_A szDevInstName,
+ IN ULONG ulConfig,
+ IN ULONG ulValue,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExW(
+ IN DEVINSTID_W szDevInstName,
+ IN ULONG ulConfig,
+ IN ULONG ulValue,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsW
+#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExW
+#else
+#define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsA
+#define CM_Set_HW_Prof_Flags_Ex CM_Set_HW_Prof_Flags_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Setup_DevNode(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Setup_DevNode_Ex(
+ IN DEVINST dnDevInst,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine OPTIONAL);
+
+#define CM_Setup_DevInst CM_Setup_DevNode
+#define CM_Setup_DevInst_Ex CM_Setup_DevNode_Ex
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Test_Range_Available(
+ IN DWORDLONG ullStartValue,
+ IN DWORDLONG ullEndValue,
+ IN RANGE_LIST rlh,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode(
+ IN DEVINST dnPhantom,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode_Ex(
+ IN DEVINST dnPhantom,
+ IN ULONG ulFlags,
+ IN HMACHINE hMachine);
+
+#define CM_Uninstall_DevInst CM_Uninstall_DevNode
+#define CM_Uninstall_DevInst_Ex CM_Uninstall_DevNode_Ex
+
+
+#if (WINVER >= _WIN32_WINNT_WIN2K)
+
+#define CM_WaitNoPendingInstallEvents CMP_WaitNoPendingInstallEvents
+
+CMAPI
+DWORD
+WINAPI
+CMP_WaitNoPendingInstallEvents(
+ IN DWORD dwTimeout);
+
+#endif /* (WINVER >= _WIN32_WINNT_WIN2K) */
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null
+#ifndef _DEVPROPDEF_H_
+#define _DEVPROPDEF_H_
+
+typedef ULONG DEVPROPTYPE, *PDEVPROPTYPE;
+
+#define DEVPROP_TYPEMOD_ARRAY 0x00001000
+#define DEVPROP_TYPEMOD_LIST 0x00002000
+
+#define DEVPROP_TYPE_EMPTY 0x00000000
+#define DEVPROP_TYPE_NULL 0x00000001
+#define DEVPROP_TYPE_SBYTE 0x00000002
+#define DEVPROP_TYPE_BYTE 0x00000003
+#define DEVPROP_TYPE_INT16 0x00000004
+#define DEVPROP_TYPE_UINT16 0x00000005
+#define DEVPROP_TYPE_INT32 0x00000006
+#define DEVPROP_TYPE_UINT32 0x00000007
+#define DEVPROP_TYPE_INT64 0x00000008
+#define DEVPROP_TYPE_UINT64 0x00000009
+#define DEVPROP_TYPE_FLOAT 0x0000000A
+#define DEVPROP_TYPE_DOUBLE 0x0000000B
+#define DEVPROP_TYPE_DECIMAL 0x0000000C
+#define DEVPROP_TYPE_GUID 0x0000000D
+#define DEVPROP_TYPE_CURRENCY 0x0000000E
+#define DEVPROP_TYPE_DATE 0x0000000F
+#define DEVPROP_TYPE_FILETIME 0x00000010
+#define DEVPROP_TYPE_BOOLEAN 0x00000011
+#define DEVPROP_TYPE_STRING 0x00000012
+#define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST)
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR 0x00000013
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x00000014
+#define DEVPROP_TYPE_DEVPROPKEY 0x00000015
+#define DEVPROP_TYPE_DEVPROPTYPE 0x00000016
+#define DEVPROP_TYPE_BINARY (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY)
+#define DEVPROP_TYPE_ERROR 0x00000017
+#define DEVPROP_TYPE_NTSTATUS 0x00000018
+#define DEVPROP_TYPE_STRING_INDIRECT 0x00000019
+
+#define MAX_DEVPROP_TYPE 0x00000019
+#define MAX_DEVPROP_TYPEMOD 0x00002000
+
+#define DEVPROP_MASK_TYPE 0x00000FFF
+#define DEVPROP_MASK_TYPEMOD 0x0000F000
+
+typedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN;
+
+#define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1)
+#define DEVPROP_FALSE ((DEVPROP_BOOLEAN) 0)
+
+#ifndef DEVPROPKEY_DEFINED
+#define DEVPROPKEY_DEFINED
+
+typedef GUID DEVPROPGUID, *PDEVPROPGUID;
+typedef ULONG DEVPROPID, *PDEVPROPID;
+
+typedef struct _DEVPROPKEY {
+ DEVPROPGUID fmtid;
+ DEVPROPID pid;
+} DEVPROPKEY, *PDEVPROPKEY;
+
+#endif /* DEVPROPKEY_DEFINED */
+
+#define DEVPROPID_FIRST_USABLE 2
+
+#endif /* _DEVPROPDEF_H_ */
+
+#ifdef DEFINE_DEVPROPKEY
+#undef DEFINE_DEVPROPKEY
+#endif
+#ifdef INITGUID
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY DECLSPEC_SELECTANY name = {{ l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}}, pid}
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY name
+#endif /* INITGUID */
+
+#ifndef IsEqualDevPropKey
+
+#ifdef __cplusplus
+#define IsEqualDevPropKey(a, b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid, (b).fmtid))
+#else
+#define IsEqualDevPropKey(a, b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid, &(b).fmtid))
+#endif
+
+#endif /* !IsEqualDevPropKey */
+
--- /dev/null
+#pragma once
+
+#ifndef EVNTAPI
+#ifndef MIDL_PASS
+#ifdef _EVNT_SOURCE_
+#define EVNTAPI __stdcall
+#else
+#define EVNTAPI DECLSPEC_IMPORT __stdcall
+#endif /* _EVNT_SOURCE_ */
+#endif /* MIDL_PASS */
+#endif /* EVNTAPI */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_MIN_LEVEL (0)
+#define EVENT_MAX_LEVEL (0xff)
+
+#define EVENT_ACTIVITY_CTRL_GET_ID (1)
+#define EVENT_ACTIVITY_CTRL_SET_ID (2)
+#define EVENT_ACTIVITY_CTRL_CREATE_ID (3)
+#define EVENT_ACTIVITY_CTRL_GET_SET_ID (4)
+#define EVENT_ACTIVITY_CTRL_CREATE_SET_ID (5)
+
+typedef ULONGLONG REGHANDLE, *PREGHANDLE;
+
+#define MAX_EVENT_DATA_DESCRIPTORS (128)
+#define MAX_EVENT_FILTER_DATA_SIZE (1024)
+
+#define EVENT_FILTER_TYPE_SCHEMATIZED (0x80000000)
+
+typedef struct _EVENT_DATA_DESCRIPTOR {
+ ULONGLONG Ptr;
+ ULONG Size;
+ ULONG Reserved;
+} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
+
+typedef struct _EVENT_DESCRIPTOR {
+ USHORT Id;
+ UCHAR Version;
+ UCHAR Channel;
+ UCHAR Level;
+ UCHAR Opcode;
+ USHORT Task;
+ ULONGLONG Keyword;
+} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_DESCRIPTOR {
+ ULONGLONG Ptr;
+ ULONG Size;
+ ULONG Type;
+} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_HEADER {
+ USHORT Id;
+ UCHAR Version;
+ UCHAR Reserved[5];
+ ULONGLONG InstanceId;
+ ULONG Size;
+ ULONG NextOffset;
+} EVENT_FILTER_HEADER, *PEVENT_FILTER_HEADER;
+
+#ifndef _ETW_KM_
+
+typedef VOID
+(NTAPI *PENABLECALLBACK)(
+ IN LPCGUID SourceId,
+ IN ULONG IsEnabled,
+ IN UCHAR Level,
+ IN ULONGLONG MatchAnyKeyword,
+ IN ULONGLONG MatchAllKeyword,
+ IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL,
+ IN OUT PVOID CallbackContext OPTIONAL);
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventRegister(
+ IN LPCGUID ProviderId,
+ IN PENABLECALLBACK EnableCallback OPTIONAL,
+ IN PVOID CallbackContext OPTIONAL,
+ OUT PREGHANDLE RegHandle);
+
+ULONG
+EVNTAPI
+EventUnregister(
+ IN REGHANDLE RegHandle);
+
+BOOLEAN
+EVNTAPI
+EventEnabled(
+ IN REGHANDLE RegHandle,
+ IN PCEVENT_DESCRIPTOR EventDescriptor);
+
+BOOLEAN
+EVNTAPI
+EventProviderEnabled(
+ IN REGHANDLE RegHandle,
+ IN UCHAR Level,
+ IN ULONGLONG Keyword);
+
+ULONG
+EVNTAPI
+EventWrite(
+ IN REGHANDLE RegHandle,
+ IN PCEVENT_DESCRIPTOR EventDescriptor,
+ IN ULONG UserDataCount,
+ IN PEVENT_DATA_DESCRIPTOR UserData);
+
+ULONG
+EVNTAPI
+EventWriteTransfer(
+ IN REGHANDLE RegHandle,
+ IN PCEVENT_DESCRIPTOR EventDescriptor,
+ IN LPCGUID ActivityId OPTIONAL,
+ IN LPCGUID RelatedActivityId OPTIONAL,
+ IN ULONG UserDataCount,
+ IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+
+ULONG
+EVNTAPI
+EventWriteString(
+ IN REGHANDLE RegHandle,
+ IN UCHAR Level,
+ IN ULONGLONG Keyword,
+ IN PCWSTR String);
+
+ULONG
+EVNTAPI
+EventActivityIdControl(
+ IN ULONG ControlCode,
+ IN OUT LPGUID ActivityId);
+
+#endif /* (WINVER >= _WIN32_WINNT_VISTA) */
+
+#if (WINVER >= _WIN32_WINNT_WIN7)
+ULONG
+EVNTAPI
+EventWriteEx(
+ 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
+
+#endif // _ETW_KM_
+
+FORCEINLINE
+VOID
+EventDataDescCreate(
+ OUT PEVENT_DATA_DESCRIPTOR EventDataDescriptor,
+ IN const VOID* DataPtr,
+ IN ULONG DataSize)
+{
+ EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr;
+ EventDataDescriptor->Size = DataSize;
+ EventDataDescriptor->Reserved = 0;
+}
+
+FORCEINLINE
+VOID
+EventDescCreate(
+ OUT PEVENT_DESCRIPTOR EventDescriptor,
+ IN USHORT Id,
+ IN UCHAR Version,
+ IN UCHAR Channel,
+ IN UCHAR Level,
+ IN USHORT Task,
+ IN UCHAR Opcode,
+ IN ULONGLONG Keyword)
+{
+ EventDescriptor->Id = Id;
+ EventDescriptor->Version = Version;
+ EventDescriptor->Channel = Channel;
+ EventDescriptor->Level = Level;
+ EventDescriptor->Task = Task;
+ EventDescriptor->Opcode = Opcode;
+ EventDescriptor->Keyword = Keyword;
+}
+
+FORCEINLINE
+VOID
+EventDescZero(
+ OUT PEVENT_DESCRIPTOR EventDescriptor)
+{
+ memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR));
+}
+
+FORCEINLINE
+USHORT
+EventDescGetId(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Id);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetVersion(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Version);
+}
+
+FORCEINLINE
+USHORT
+EventDescGetTask(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Task);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetOpcode(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Opcode);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetChannel(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Channel);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetLevel(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Level);
+}
+
+FORCEINLINE
+ULONGLONG
+EventDescGetKeyword(
+ IN PCEVENT_DESCRIPTOR EventDescriptor)
+{
+ return (EventDescriptor->Keyword);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetId(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN USHORT Id)
+{
+ EventDescriptor->Id = Id;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetVersion(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN UCHAR Version)
+{
+ EventDescriptor->Version = Version;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetTask(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN USHORT Task)
+{
+ EventDescriptor->Task = Task;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetOpcode(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN UCHAR Opcode)
+{
+ EventDescriptor->Opcode = Opcode;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetLevel(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN UCHAR Level)
+{
+ EventDescriptor->Level = Level;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetChannel(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN UCHAR Channel)
+{
+ EventDescriptor->Channel = Channel;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetKeyword(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN ULONGLONG Keyword)
+{
+ EventDescriptor->Keyword = Keyword;
+ return (EventDescriptor);
+}
+
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescOrKeyword(
+ IN PEVENT_DESCRIPTOR EventDescriptor,
+ IN ULONGLONG Keyword)
+{
+ EventDescriptor->Keyword |= Keyword;
+ return (EventDescriptor);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
#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 */
/*
- * Win32 definitions for Windows NT
+ * ntstatus.h
*
- * Copyright 1996 Alexandre Julliard
+ * Windows NT status codes
*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * This file is part of the w32api package.
*
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _NTSTATUS_
#define _NTSTATUS_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef WIN32_NO_STATUS
-/*
- * Debug codes
- */
+#define FACILITY_DEBUGGER 0x1
+#define FACILITY_RPC_RUNTIME 0x2
+#define FACILITY_RPC_STUBS 0x3
+#define FACILITY_IO_ERROR_CODE 0x4
+#define FACILITY_TERMINAL_SERVER 0xA
+#define FACILITY_USB_ERROR_CODE 0x10
+#define FACILITY_HID_ERROR_CODE 0x11
+#define FACILITY_FIREWIRE_ERROR_CODE 0x12
+#define FACILITY_CLUSTER_ERROR_CODE 0x13
+#define FACILITY_ACPI_ERROR_CODE 0x14
+#define FACILITY_SXS_ERROR_CODE 0x15
-#define DBG_EXCEPTION_HANDLED ((NTSTATUS)0x00010001)
-#define DBG_CONTINUE ((NTSTATUS)0x00010002)
-#define DBG_REPLY_LATER ((NTSTATUS)0x40010001)
-#define DBG_UNABLE_TO_PROVIDE_HANDLE ((NTSTATUS)0x40010002)
-#define DBG_TERMINATE_THREAD ((NTSTATUS)0x40010003)
-#define DBG_TERMINATE_PROCESS ((NTSTATUS)0x40010004)
-#define DBG_CONTROL_C ((NTSTATUS)0x40010005)
-#define DBG_PRINTEXCEPTION_C ((NTSTATUS)0x40010006)
-#define DBG_RIPEXCEPTION ((NTSTATUS)0x40010007)
-#define DBG_CONTROL_BREAK ((NTSTATUS)0x40010008)
-#define DBG_COMMAND_EXCEPTION ((NTSTATUS)0x40010009)
-#define DBG_EXCEPTION_NOT_HANDLED ((NTSTATUS)0x80010001)
-#define DBG_NO_STATE_CHANGE ((NTSTATUS)0xC0010001)
-#define DBG_APP_NOT_IDLE ((NTSTATUS)0xC0010002)
+/* Debug codes */
-/*
- * Exception codes
- */
+#define DBG_EXCEPTION_HANDLED ((NTSTATUS)0x00010001)
+#define DBG_CONTINUE ((NTSTATUS)0x00010002)
+#define DBG_REPLY_LATER ((NTSTATUS)0x40010001)
+#define DBG_UNABLE_TO_PROVIDE_HANDLE ((NTSTATUS)0x40010002)
+#define DBG_TERMINATE_THREAD ((NTSTATUS)0x40010003)
+#define DBG_TERMINATE_PROCESS ((NTSTATUS)0x40010004)
+#define DBG_CONTROL_C ((NTSTATUS)0x40010005)
+#define DBG_PRINTEXCEPTION_C ((NTSTATUS)0x40010006)
+#define DBG_RIPEXCEPTION ((NTSTATUS)0x40010007)
+#define DBG_CONTROL_BREAK ((NTSTATUS)0x40010008)
+#define DBG_COMMAND_EXCEPTION ((NTSTATUS)0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED ((NTSTATUS)0x80010001)
+#define DBG_NO_STATE_CHANGE ((NTSTATUS)0xC0010001)
+#define DBG_APP_NOT_IDLE ((NTSTATUS)0xC0010002)
+
+/* Exception codes */
-#define STATUS_SUCCESS ((NTSTATUS)0x00000000)
-#define STATUS_SEVERITY_SUCCESS 0x0
-#define STATUS_SEVERITY_INFORMATIONAL 0x1
-#define STATUS_SEVERITY_WARNING 0x2
-#define STATUS_SEVERITY_ERROR 0x3
+#if !defined(STATUS_SUCCESS)
+#define STATUS_SUCCESS ((NTSTATUS)0x00000000)
+#endif
+#define STATUS_SEVERITY_SUCCESS 0x0
+#define STATUS_SEVERITY_INFORMATIONAL 0x1
+#define STATUS_SEVERITY_WARNING 0x2
+#define STATUS_SEVERITY_ERROR 0x3
-#define STATUS_WAIT_1 ((NTSTATUS)0x00000001)
-#define STATUS_WAIT_2 ((NTSTATUS)0x00000002)
-#define STATUS_WAIT_3 ((NTSTATUS)0x00000003)
-#define STATUS_WAIT_63 ((NTSTATUS)0x0000003f)
-#define STATUS_ABANDONED ((NTSTATUS)0x00000080)
-#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS)0x000000BF)
-#define STATUS_USER_APC ((NTSTATUS)0x000000C0)
-#define STATUS_KERNEL_APC ((NTSTATUS)0x00000100)
-#define STATUS_ALERTED ((NTSTATUS)0x00000101)
-#define STATUS_TIMEOUT ((NTSTATUS)0x00000102)
-#define STATUS_PENDING ((NTSTATUS)0x00000103)
-#define STATUS_REPARSE ((NTSTATUS)0x00000104)
-#define STATUS_MORE_ENTRIES ((NTSTATUS)0x00000105)
-#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106)
-#define STATUS_SOME_NOT_MAPPED ((NTSTATUS)0x00000107)
-#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS)0x00000108)
-#define STATUS_VOLUME_MOUNTED ((NTSTATUS)0x00000109)
-#define STATUS_RXACT_COMMITTED ((NTSTATUS)0x0000010A)
-#define STATUS_NOTIFY_CLEANUP ((NTSTATUS)0x0000010B)
-#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS)0x0000010C)
-#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS)0x0000010D)
-#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010E)
-#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS)0x00000110)
-#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS)0x00000111)
-#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS)0x00000112)
-#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS)0x00000113)
-#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS)0x00000114)
-#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS)0x00000115)
-#define STATUS_CRASH_DUMP ((NTSTATUS)0x00000116)
-#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS)0x00000117)
-#define STATUS_REPARSE_OBJECT ((NTSTATUS)0x00000118)
-#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119)
-#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS)0x00000120)
-#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS)0x00000121)
-#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS)0x00000122)
-#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS)0x00000123)
-#define STATUS_PROCESS_IN_JOB ((NTSTATUS)0x00000124)
-#define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS)0x00000125)
+#define STATUS_WAIT_1 ((NTSTATUS)0x00000001)
+#define STATUS_WAIT_2 ((NTSTATUS)0x00000002)
+#define STATUS_WAIT_3 ((NTSTATUS)0x00000003)
+#define STATUS_WAIT_63 ((NTSTATUS)0x0000003f)
+#define STATUS_ABANDONED ((NTSTATUS)0x00000080)
+#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS)0x000000BF)
+#define STATUS_USER_APC ((NTSTATUS)0x000000C0)
+#define STATUS_KERNEL_APC ((NTSTATUS)0x00000100)
+#define STATUS_ALERTED ((NTSTATUS)0x00000101)
+#define STATUS_TIMEOUT ((NTSTATUS)0x00000102)
+#define STATUS_PENDING ((NTSTATUS)0x00000103)
+#define STATUS_REPARSE ((NTSTATUS)0x00000104)
+#define STATUS_MORE_ENTRIES ((NTSTATUS)0x00000105)
+#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106)
+#define STATUS_SOME_NOT_MAPPED ((NTSTATUS)0x00000107)
+#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS)0x00000108)
+#define STATUS_VOLUME_MOUNTED ((NTSTATUS)0x00000109)
+#define STATUS_RXACT_COMMITTED ((NTSTATUS)0x0000010A)
+#define STATUS_NOTIFY_CLEANUP ((NTSTATUS)0x0000010B)
+#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS)0x0000010C)
+#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS)0x0000010D)
+#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010E)
+#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS)0x00000110)
+#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS)0x00000111)
+#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS)0x00000112)
+#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS)0x00000113)
+#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS)0x00000114)
+#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS)0x00000115)
+#define STATUS_CRASH_DUMP ((NTSTATUS)0x00000116)
+#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS)0x00000117)
+#define STATUS_REPARSE_OBJECT ((NTSTATUS)0x00000118)
+#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119)
+#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS)0x00000120)
+#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS)0x00000121)
+#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS)0x00000122)
+#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS)0x00000123)
+#define STATUS_PROCESS_IN_JOB ((NTSTATUS)0x00000124)
+#define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS)0x00000125)
#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS)0x00000126)
-#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000)
-#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS)0x40000001)
-#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS)0x40000002)
-#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS)0x40000003)
-#define STATUS_RXACT_STATE_CREATED ((NTSTATUS)0x40000004)
-#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS)0x40000005)
-#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS)0x40000006)
-#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS)0x40000007)
-#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS)0x40000008)
-#define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009)
-#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000A)
-#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS)0x4000000B)
-#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS)0x4000000C)
-#define STATUS_NULL_LM_PASSWORD ((NTSTATUS)0x4000000D)
-#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000E)
-#define STATUS_RECEIVE_PARTIAL ((NTSTATUS)0x4000000F)
-#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS)0x40000010)
-#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011)
-#define STATUS_EVENT_DONE ((NTSTATUS)0x40000012)
-#define STATUS_EVENT_PENDING ((NTSTATUS)0x40000013)
-#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS)0x40000014)
-#define STATUS_FATAL_APP_EXIT ((NTSTATUS)0x40000015)
-#define STATUS_PREDEFINED_HANDLE ((NTSTATUS)0x40000016)
-#define STATUS_WAS_UNLOCKED ((NTSTATUS)0x40000017)
-#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS)0x40000018)
-#define STATUS_WAS_LOCKED ((NTSTATUS)0x40000019)
-#define STATUS_LOG_HARD_ERROR ((NTSTATUS)0x4000001A)
-#define STATUS_ALREADY_WIN32 ((NTSTATUS)0x4000001B)
-#define STATUS_WX86_UNSIMULATE ((NTSTATUS)0x4000001C)
-#define STATUS_WX86_CONTINUE ((NTSTATUS)0x4000001D)
-#define STATUS_WX86_SINGLE_STEP ((NTSTATUS)0x4000001E)
-#define STATUS_WX86_BREAKPOINT ((NTSTATUS)0x4000001F)
-#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS)0x40000020)
-#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021)
-#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS)0x40000022)
+#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000)
+#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS)0x40000001)
+#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS)0x40000002)
+#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS)0x40000003)
+#define STATUS_RXACT_STATE_CREATED ((NTSTATUS)0x40000004)
+#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS)0x40000005)
+#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS)0x40000006)
+#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS)0x40000007)
+#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS)0x40000008)
+#define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009)
+#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000A)
+#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS)0x4000000B)
+#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS)0x4000000C)
+#define STATUS_NULL_LM_PASSWORD ((NTSTATUS)0x4000000D)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000E)
+#define STATUS_RECEIVE_PARTIAL ((NTSTATUS)0x4000000F)
+#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS)0x40000010)
+#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011)
+#define STATUS_EVENT_DONE ((NTSTATUS)0x40000012)
+#define STATUS_EVENT_PENDING ((NTSTATUS)0x40000013)
+#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS)0x40000014)
+#define STATUS_FATAL_APP_EXIT ((NTSTATUS)0x40000015)
+#define STATUS_PREDEFINED_HANDLE ((NTSTATUS)0x40000016)
+#define STATUS_WAS_UNLOCKED ((NTSTATUS)0x40000017)
+#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS)0x40000018)
+#define STATUS_WAS_LOCKED ((NTSTATUS)0x40000019)
+#define STATUS_LOG_HARD_ERROR ((NTSTATUS)0x4000001A)
+#define STATUS_ALREADY_WIN32 ((NTSTATUS)0x4000001B)
+#define STATUS_WX86_UNSIMULATE ((NTSTATUS)0x4000001C)
+#define STATUS_WX86_CONTINUE ((NTSTATUS)0x4000001D)
+#define STATUS_WX86_SINGLE_STEP ((NTSTATUS)0x4000001E)
+#define STATUS_WX86_BREAKPOINT ((NTSTATUS)0x4000001F)
+#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS)0x40000020)
+#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021)
+#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS)0x40000022)
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS)0x40000023)
-#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS)0x40000024)
-#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS)0x40000025)
-#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS)0x40000026)
-#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS)0x40000027)
-#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS)0x40000028)
-#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS)0x40000029)
-#define STATUS_HIBERNATED ((NTSTATUS)0x4000002A)
-#define STATUS_RESUME_HIBERNATION ((NTSTATUS)0x4000002B)
-#define STATUS_FIRMWARE_UPDATED ((NTSTATUS)0x4000002C)
-#define STATUS_WAKE_SYSTEM ((NTSTATUS)0x40000294)
-#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS)0x40000370)
+#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS)0x40000024)
+#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS)0x40000025)
+#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS)0x40000026)
+#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS)0x40000027)
+#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS)0x40000028)
+#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS)0x40000029)
+#define STATUS_HIBERNATED ((NTSTATUS)0x4000002A)
+#define STATUS_RESUME_HIBERNATION ((NTSTATUS)0x4000002B)
+#define STATUS_FIRMWARE_UPDATED ((NTSTATUS)0x4000002C)
+#define STATUS_WAKE_SYSTEM ((NTSTATUS)0x40000294)
+#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS)0x40000370)
#define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS)0x40020056)
#define RPC_NT_SEND_INCOMPLETE ((NTSTATUS)0x400200AF)
#define STATUS_CTX_CDM_CONNECT ((NTSTATUS)0x400A0004)
#define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS)0x400A0005)
-#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000D)
+#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000D)
-#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001)
-#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS)0x80000002)
-#define STATUS_BREAKPOINT ((NTSTATUS)0x80000003)
-#define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004)
-#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005)
-#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006)
-#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS)0x80000007)
+#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS)0x80000002)
+#define STATUS_BREAKPOINT ((NTSTATUS)0x80000003)
+#define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004)
+#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005)
+#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006)
+#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS)0x80000007)
-#define STATUS_HANDLES_CLOSED ((NTSTATUS)0x8000000A)
-#define STATUS_NO_INHERITANCE ((NTSTATUS)0x8000000B)
-#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS)0x8000000C)
-#define STATUS_PARTIAL_COPY ((NTSTATUS)0x8000000D)
-#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS)0x8000000E)
-#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS)0x8000000F)
-#define STATUS_DEVICE_OFF_LINE ((NTSTATUS)0x80000010)
-#define STATUS_DEVICE_BUSY ((NTSTATUS)0x80000011)
-#define STATUS_NO_MORE_EAS ((NTSTATUS)0x80000012)
-#define STATUS_INVALID_EA_NAME ((NTSTATUS)0x80000013)
-#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS)0x80000014)
-#define STATUS_INVALID_EA_FLAG ((NTSTATUS)0x80000015)
-#define STATUS_VERIFY_REQUIRED ((NTSTATUS)0x80000016)
-#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS)0x80000017)
-#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS)0x80000018)
-#define STATUS_NO_MORE_ENTRIES ((NTSTATUS)0x8000001A)
-#define STATUS_FILEMARK_DETECTED ((NTSTATUS)0x8000001B)
-#define STATUS_MEDIA_CHANGED ((NTSTATUS)0x8000001C)
-#define STATUS_BUS_RESET ((NTSTATUS)0x8000001D)
-#define STATUS_END_OF_MEDIA ((NTSTATUS)0x8000001E)
-#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS)0x8000001F)
-#define STATUS_MEDIA_CHECK ((NTSTATUS)0x80000020)
-#define STATUS_SETMARK_DETECTED ((NTSTATUS)0x80000021)
-#define STATUS_NO_DATA_DETECTED ((NTSTATUS)0x80000022)
-#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023)
-#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS)0x80000024)
-#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS)0x80000025)
-#define STATUS_LONGJUMP ((NTSTATUS)0x80000026)
+#define STATUS_HANDLES_CLOSED ((NTSTATUS)0x8000000A)
+#define STATUS_NO_INHERITANCE ((NTSTATUS)0x8000000B)
+#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS)0x8000000C)
+#define STATUS_PARTIAL_COPY ((NTSTATUS)0x8000000D)
+#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS)0x8000000E)
+#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS)0x8000000F)
+#define STATUS_DEVICE_OFF_LINE ((NTSTATUS)0x80000010)
+#define STATUS_DEVICE_BUSY ((NTSTATUS)0x80000011)
+#define STATUS_NO_MORE_EAS ((NTSTATUS)0x80000012)
+#define STATUS_INVALID_EA_NAME ((NTSTATUS)0x80000013)
+#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS)0x80000014)
+#define STATUS_INVALID_EA_FLAG ((NTSTATUS)0x80000015)
+#define STATUS_VERIFY_REQUIRED ((NTSTATUS)0x80000016)
+#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS)0x80000017)
+#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS)0x80000018)
+#define STATUS_NO_MORE_ENTRIES ((NTSTATUS)0x8000001A)
+#define STATUS_FILEMARK_DETECTED ((NTSTATUS)0x8000001B)
+#define STATUS_MEDIA_CHANGED ((NTSTATUS)0x8000001C)
+#define STATUS_BUS_RESET ((NTSTATUS)0x8000001D)
+#define STATUS_END_OF_MEDIA ((NTSTATUS)0x8000001E)
+#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS)0x8000001F)
+#define STATUS_MEDIA_CHECK ((NTSTATUS)0x80000020)
+#define STATUS_SETMARK_DETECTED ((NTSTATUS)0x80000021)
+#define STATUS_NO_DATA_DETECTED ((NTSTATUS)0x80000022)
+#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023)
+#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS)0x80000024)
+#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS)0x80000025)
+#define STATUS_LONGJUMP ((NTSTATUS)0x80000026)
#define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS)0x80000027)
-#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS)0x80000028)
-#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS)0x80000029)
-#define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS)0x8000002A)
-#define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS)0x8000002B)
-#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS)0x8000002C)
+#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS)0x80000028)
+#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS)0x80000029)
+#define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS)0x8000002A)
+#define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS)0x8000002B)
+#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS)0x8000002C)
-#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS)0x80000288)
-#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS)0x80000289)
+#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS)0x80000288)
+#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS)0x80000289)
-#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS)0x80130001)
-#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002)
+#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS)0x80130001)
+#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002)
#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS)0x80130003)
#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS)0x80130004)
#define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS)0x80130005)
-#define STATUS_WAIT_0 ((NTSTATUS)0x00000000)
-#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001)
-#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002)
-#define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003)
-#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004)
-#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC0000005)
-#define STATUS_IN_PAGE_ERROR ((NTSTATUS)0xC0000006)
-#define STATUS_PAGEFILE_QUOTA ((NTSTATUS)0xC0000007)
-#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008)
-#define STATUS_BAD_INITIAL_STACK ((NTSTATUS)0xC0000009)
-#define STATUS_BAD_INITIAL_PC ((NTSTATUS)0xC000000A)
-#define STATUS_INVALID_CID ((NTSTATUS)0xC000000B)
-#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS)0xC000000C)
-#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000D)
-#define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000E)
-#define STATUS_NO_SUCH_FILE ((NTSTATUS)0xC000000F)
-#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010)
-#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011)
-#define STATUS_WRONG_VOLUME ((NTSTATUS)0xC0000012)
-#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS)0xC0000013)
-#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS)0xC0000014)
-#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS)0xC0000015)
-#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS)0xC0000016)
-#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017)
-#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018)
-#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS)0xC0000019)
-#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS)0xC000001A)
-#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS)0xC000001B)
-#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS)0xC000001C)
-#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS)0xC000001D)
-#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS)0xC000001E)
-#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001F)
-#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020)
-#define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021)
-#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022)
-#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023)
-#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024)
-#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025)
-#define STATUS_INVALID_DISPOSITION ((NTSTATUS)0xC0000026)
-#define STATUS_UNWIND ((NTSTATUS)0xC0000027)
-#define STATUS_BAD_STACK ((NTSTATUS)0xC0000028)
-#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS)0xC0000029)
-#define STATUS_NOT_LOCKED ((NTSTATUS)0xC000002A)
-#define STATUS_PARITY_ERROR ((NTSTATUS)0xC000002B)
-#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS)0xC000002C)
-#define STATUS_NOT_COMMITTED ((NTSTATUS)0xC000002D)
-#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS)0xC000002E)
-#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS)0xC000002F)
-#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS)0xC0000030)
-#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS)0xC0000031)
-#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS)0xC0000032)
-#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS)0xC0000033)
-#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034)
-#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS)0xC0000035)
-#define STATUS_PORT_DISCONNECTED ((NTSTATUS)0xC0000037)
-#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xC0000038)
-#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xC0000039)
-#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003A)
-#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xC000003B)
-#define STATUS_DATA_OVERRUN ((NTSTATUS)0xC000003C)
-#define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xC000003D)
-#define STATUS_DATA_ERROR ((NTSTATUS)0xC000003E)
-#define STATUS_CRC_ERROR ((NTSTATUS)0xC000003F)
-#define STATUS_SECTION_TOO_BIG ((NTSTATUS)0xC0000040)
-#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS)0xC0000041)
-#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS)0xC0000042)
-#define STATUS_SHARING_VIOLATION ((NTSTATUS)0xC0000043)
-#define STATUS_QUOTA_EXCEEDED ((NTSTATUS)0xC0000044)
-#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045)
-#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046)
-#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047)
-#define STATUS_PORT_ALREADY_SET ((NTSTATUS)0xC0000048)
-#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS)0xC0000049)
-#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS)0xC000004A)
-#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS)0xC000004B)
-#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS)0xC000004C)
-#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS)0xC000004D)
-#define STATUS_SECTION_PROTECTION ((NTSTATUS)0xC000004E)
-#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS)0xC000004F)
-#define STATUS_EA_TOO_LARGE ((NTSTATUS)0xC0000050)
-#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS)0xC0000051)
-#define STATUS_NO_EAS_ON_FILE ((NTSTATUS)0xC0000052)
-#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS)0xC0000053)
-#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS)0xC0000054)
-#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS)0xC0000055)
-#define STATUS_DELETE_PENDING ((NTSTATUS)0xC0000056)
-#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS)0xC0000057)
-#define STATUS_UNKNOWN_REVISION ((NTSTATUS)0xC0000058)
-#define STATUS_REVISION_MISMATCH ((NTSTATUS)0xC0000059)
-#define STATUS_INVALID_OWNER ((NTSTATUS)0xC000005A)
-#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS)0xC000005B)
-#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS)0xC000005C)
-#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS)0xC000005D)
-#define STATUS_NO_LOGON_SERVERS ((NTSTATUS)0xC000005E)
-#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS)0xC000005F)
-#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS)0xC0000060)
-#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061)
-#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS)0xC0000062)
-#define STATUS_USER_EXISTS ((NTSTATUS)0xC0000063)
-#define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064)
-#define STATUS_GROUP_EXISTS ((NTSTATUS)0xC0000065)
-#define STATUS_NO_SUCH_GROUP ((NTSTATUS)0xC0000066)
-#define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067)
-#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068)
-#define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069)
-#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006A)
-#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006B)
-#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006C)
-#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006D)
-#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006E)
-#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006F)
-#define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070)
-#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071)
-#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072)
-#define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073)
-#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074)
-#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075)
-#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS)0xC0000076)
-#define STATUS_INVALID_ACL ((NTSTATUS)0xC0000077)
-#define STATUS_INVALID_SID ((NTSTATUS)0xC0000078)
-#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS)0xC0000079)
-#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007A)
-#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007B)
-#define STATUS_NO_TOKEN ((NTSTATUS)0xC000007C)
-#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS)0xC000007D)
-#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS)0xC000007E)
-#define STATUS_DISK_FULL ((NTSTATUS)0xC000007F)
-#define STATUS_SERVER_DISABLED ((NTSTATUS)0xC0000080)
-#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS)0xC0000081)
-#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS)0xC0000082)
-#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS)0xC0000083)
-#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS)0xC0000084)
-#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS)0xC0000085)
-#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS)0xC0000086)
-#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS)0xC0000087)
-#define STATUS_NOT_MAPPED_DATA ((NTSTATUS)0xC0000088)
-#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS)0xC0000089)
-#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS)0xC000008A)
-#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS)0xC000008B)
-#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS)0xC000008C)
-#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS)0xC000008D)
-#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS)0xC000008E)
-#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS)0xC000008F)
-#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS)0xC0000090)
-#define STATUS_FLOAT_OVERFLOW ((NTSTATUS)0xC0000091)
-#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000092)
-#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS)0xC0000093)
-#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094)
-#define STATUS_INTEGER_OVERFLOW ((NTSTATUS)0xC0000095)
-#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS)0xC0000096)
-#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS)0xC0000097)
-#define STATUS_FILE_INVALID ((NTSTATUS)0xC0000098)
-#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS)0xC0000099)
-#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
-#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS)0xC000009B)
-#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS)0xC000009C)
-#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS)0xC000009D)
-#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS)0xC000009E)
-#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS)0xC000009F)
-#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS)0xC00000A0)
-#define STATUS_WORKING_SET_QUOTA ((NTSTATUS)0xC00000A1)
-#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS)0xC00000A2)
-#define STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3)
-#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS)0xC00000A4)
-#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS)0xC00000A5)
-#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS)0xC00000A6)
-#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS)0xC00000A7)
-#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS)0xC00000A8)
-#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS)0xC00000A9)
-#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS)0xC00000AA)
-#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS)0xC00000AB)
-#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000AC)
-#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000AD)
-#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AE)
-#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS)0xC00000AF)
-#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0)
-#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1)
-#define STATUS_PIPE_CONNECTED ((NTSTATUS)0xC00000B2)
-#define STATUS_PIPE_LISTENING ((NTSTATUS)0xC00000B3)
-#define STATUS_INVALID_READ_MODE ((NTSTATUS)0xC00000B4)
-#define STATUS_IO_TIMEOUT ((NTSTATUS)0xC00000B5)
-#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS)0xC00000B6)
-#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS)0xC00000B7)
-#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS)0xC00000B8)
-#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS)0xC00000B9)
-#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BA)
-#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BB)
-#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS)0xC00000BC)
-#define STATUS_DUPLICATE_NAME ((NTSTATUS)0xC00000BD)
-#define STATUS_BAD_NETWORK_PATH ((NTSTATUS)0xC00000BE)
-#define STATUS_NETWORK_BUSY ((NTSTATUS)0xC00000BF)
-#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS)0xC00000C0)
-#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS)0xC00000C1)
-#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS)0xC00000C2)
-#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS)0xC00000C3)
-#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS)0xC00000C4)
-#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS)0xC00000C5)
-#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS)0xC00000C6)
-#define STATUS_NO_SPOOL_SPACE ((NTSTATUS)0xC00000C7)
-#define STATUS_PRINT_CANCELLED ((NTSTATUS)0xC00000C8)
-#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS)0xC00000C9)
-#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS)0xC00000CA)
-#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS)0xC00000CB)
-#define STATUS_BAD_NETWORK_NAME ((NTSTATUS)0xC00000CC)
-#define STATUS_TOO_MANY_NAMES ((NTSTATUS)0xC00000CD)
-#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS)0xC00000CE)
-#define STATUS_SHARING_PAUSED ((NTSTATUS)0xC00000CF)
-#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS)0xC00000D0)
-#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS)0xC00000D1)
-#define STATUS_NET_WRITE_FAULT ((NTSTATUS)0xC00000D2)
-#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS)0xC00000D3)
-#define STATUS_NOT_SAME_DEVICE ((NTSTATUS)0xC00000D4)
-#define STATUS_FILE_RENAMED ((NTSTATUS)0xC00000D5)
-#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS)0xC00000D6)
-#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS)0xC00000D7)
-#define STATUS_CANT_WAIT ((NTSTATUS)0xC00000D8)
-#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9)
-#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS)0xC00000DA)
-#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS)0xC00000DB)
-#define STATUS_INVALID_SERVER_STATE ((NTSTATUS)0xC00000DC)
-#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS)0xC00000DD)
-#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS)0xC00000DE)
-#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS)0xC00000DF)
-#define STATUS_DOMAIN_EXISTS ((NTSTATUS)0xC00000E0)
-#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00000E1)
-#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS)0xC00000E2)
-#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS)0xC00000E3)
-#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS)0xC00000E4)
-#define STATUS_INTERNAL_ERROR ((NTSTATUS)0xC00000E5)
-#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS)0xC00000E6)
-#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS)0xC00000E7)
-#define STATUS_INVALID_USER_BUFFER ((NTSTATUS)0xC00000E8)
-#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9)
-#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS)0xC00000EA)
-#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS)0xC00000EB)
-#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS)0xC00000EC)
-#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS)0xC00000ED)
-#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS)0xC00000EE)
-#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS)0xC00000EF)
-#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0)
-#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS)0xC00000F1)
-#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS)0xC00000F2)
-#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS)0xC00000F3)
-#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS)0xC00000F4)
-#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS)0xC00000F5)
-#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS)0xC00000F6)
-#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS)0xC00000F7)
-#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS)0xC00000F8)
-#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS)0xC00000F9)
-#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS)0xC00000FA)
-#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS)0xC00000FB)
-#define STATUS_REDIRECTOR_STARTED ((NTSTATUS)0xC00000FC)
-#define STATUS_STACK_OVERFLOW ((NTSTATUS)0xC00000FD)
-#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS)0xC00000FE)
-#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS)0xC00000FF)
-#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS)0xC0000100)
-#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS)0xC0000101)
-#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS)0xC0000102)
-#define STATUS_NOT_A_DIRECTORY ((NTSTATUS)0xC0000103)
-#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS)0xC0000104)
-#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS)0xC0000105)
-#define STATUS_NAME_TOO_LONG ((NTSTATUS)0xC0000106)
-#define STATUS_FILES_OPEN ((NTSTATUS)0xC0000107)
-#define STATUS_CONNECTION_IN_USE ((NTSTATUS)0xC0000108)
-#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS)0xC0000109)
-#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS)0xC000010A)
-#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS)0xC000010B)
-#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS)0xC000010C)
-#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS)0xC000010D)
-#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS)0xC000010E)
-#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS)0xC000010F)
-#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS)0xC0000110)
-#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS)0xC0000111)
-#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS)0xC0000112)
-#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS)0xC0000113)
-#define STATUS_ABIOS_INVALID_LID ((NTSTATUS)0xC0000114)
-#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115)
-#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS)0xC0000116)
-#define STATUS_NO_LDT ((NTSTATUS)0xC0000117)
-#define STATUS_INVALID_LDT_SIZE ((NTSTATUS)0xC0000118)
-#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS)0xC0000119)
-#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS)0xC000011A)
-#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS)0xC000011B)
-#define STATUS_RXACT_INVALID_STATE ((NTSTATUS)0xC000011C)
-#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS)0xC000011D)
-#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS)0xC000011E)
-#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS)0xC000011F)
-#define STATUS_CANCELLED ((NTSTATUS)0xC0000120)
-#define STATUS_CANNOT_DELETE ((NTSTATUS)0xC0000121)
-#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS)0xC0000122)
-#define STATUS_FILE_DELETED ((NTSTATUS)0xC0000123)
-#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS)0xC0000124)
-#define STATUS_SPECIAL_GROUP ((NTSTATUS)0xC0000125)
-#define STATUS_SPECIAL_USER ((NTSTATUS)0xC0000126)
-#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS)0xC0000127)
-#define STATUS_FILE_CLOSED ((NTSTATUS)0xC0000128)
-#define STATUS_TOO_MANY_THREADS ((NTSTATUS)0xC0000129)
-#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS)0xC000012A)
-#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS)0xC000012B)
-#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS)0xC000012C)
-#define STATUS_COMMITMENT_LIMIT ((NTSTATUS)0xC000012D)
-#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS)0xC000012E)
-#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS)0xC000012F)
-#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS)0xC0000130)
-#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS)0xC0000131)
-#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS)0xC0000132)
-#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS)0xC0000133)
-#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS)0xC0000134)
-#define STATUS_DLL_NOT_FOUND ((NTSTATUS)0xC0000135)
-#define STATUS_OPEN_FAILED ((NTSTATUS)0xC0000136)
-#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS)0xC0000137)
-#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000138)
-#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139)
-#define STATUS_CONTROL_C_EXIT ((NTSTATUS)0xC000013A)
-#define STATUS_LOCAL_DISCONNECT ((NTSTATUS)0xC000013B)
-#define STATUS_REMOTE_DISCONNECT ((NTSTATUS)0xC000013C)
-#define STATUS_REMOTE_RESOURCES ((NTSTATUS)0xC000013D)
-#define STATUS_LINK_FAILED ((NTSTATUS)0xC000013E)
-#define STATUS_LINK_TIMEOUT ((NTSTATUS)0xC000013F)
-#define STATUS_INVALID_CONNECTION ((NTSTATUS)0xC0000140)
-#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141)
-#define STATUS_DLL_INIT_FAILED ((NTSTATUS)0xC0000142)
-#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS)0xC0000143)
-#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS)0xC0000144)
-#define STATUS_APP_INIT_FAILURE ((NTSTATUS)0xC0000145)
-#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS)0xC0000146)
-#define STATUS_NO_PAGEFILE ((NTSTATUS)0xC0000147)
-#define STATUS_INVALID_LEVEL ((NTSTATUS)0xC0000148)
-#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS)0xC0000149)
-#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS)0xC000014A)
-#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014B)
-#define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C)
-#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014D)
-#define STATUS_NO_EVENT_PAIR ((NTSTATUS)0xC000014E)
-#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS)0xC000014F)
-#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS)0xC0000150)
-#define STATUS_NO_SUCH_ALIAS ((NTSTATUS)0xC0000151)
-#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS)0xC0000152)
-#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS)0xC0000153)
-#define STATUS_ALIAS_EXISTS ((NTSTATUS)0xC0000154)
-#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS)0xC0000155)
-#define STATUS_TOO_MANY_SECRETS ((NTSTATUS)0xC0000156)
-#define STATUS_SECRET_TOO_LONG ((NTSTATUS)0xC0000157)
-#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158)
-#define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159)
-#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015A)
-#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015B)
-#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C)
-#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015D)
-#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015E)
-#define STATUS_FT_MISSING_MEMBER ((NTSTATUS)0xC000015F)
-#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS)0xC0000160)
-#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS)0xC0000161)
-#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS)0xC0000162)
-#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS)0xC0000163)
-#define STATUS_FLOPPY_VOLUME ((NTSTATUS)0xC0000164)
-#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS)0xC0000165)
-#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS)0xC0000166)
-#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS)0xC0000167)
-#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS)0xC0000168)
-#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS)0xC0000169)
-#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS)0xC000016A)
-#define STATUS_DISK_RESET_FAILED ((NTSTATUS)0xC000016B)
-#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS)0xC000016C)
-#define STATUS_FT_ORPHANING ((NTSTATUS)0xC000016D)
+#define STATUS_WAIT_0 ((NTSTATUS)0x00000000)
+#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001)
+#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002)
+#define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003)
+#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004)
+#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC0000005)
+#define STATUS_IN_PAGE_ERROR ((NTSTATUS)0xC0000006)
+#define STATUS_PAGEFILE_QUOTA ((NTSTATUS)0xC0000007)
+#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008)
+#define STATUS_BAD_INITIAL_STACK ((NTSTATUS)0xC0000009)
+#define STATUS_BAD_INITIAL_PC ((NTSTATUS)0xC000000A)
+#define STATUS_INVALID_CID ((NTSTATUS)0xC000000B)
+#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS)0xC000000C)
+#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000D)
+#define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000E)
+#define STATUS_NO_SUCH_FILE ((NTSTATUS)0xC000000F)
+#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010)
+#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011)
+#define STATUS_WRONG_VOLUME ((NTSTATUS)0xC0000012)
+#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS)0xC0000013)
+#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS)0xC0000014)
+#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS)0xC0000015)
+#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS)0xC0000016)
+#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017)
+#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018)
+#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS)0xC0000019)
+#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS)0xC000001A)
+#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS)0xC000001B)
+#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS)0xC000001C)
+#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS)0xC000001D)
+#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS)0xC000001E)
+#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001F)
+#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020)
+#define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021)
+#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022)
+#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023)
+#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024)
+#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025)
+#define STATUS_INVALID_DISPOSITION ((NTSTATUS)0xC0000026)
+#define STATUS_UNWIND ((NTSTATUS)0xC0000027)
+#define STATUS_BAD_STACK ((NTSTATUS)0xC0000028)
+#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS)0xC0000029)
+#define STATUS_NOT_LOCKED ((NTSTATUS)0xC000002A)
+#define STATUS_PARITY_ERROR ((NTSTATUS)0xC000002B)
+#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS)0xC000002C)
+#define STATUS_NOT_COMMITTED ((NTSTATUS)0xC000002D)
+#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS)0xC000002E)
+#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS)0xC000002F)
+#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS)0xC0000030)
+#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS)0xC0000031)
+#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS)0xC0000032)
+#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS)0xC0000033)
+#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034)
+#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS)0xC0000035)
+#define STATUS_PORT_DISCONNECTED ((NTSTATUS)0xC0000037)
+#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xC0000038)
+#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xC0000039)
+#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003A)
+#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xC000003B)
+#define STATUS_DATA_OVERRUN ((NTSTATUS)0xC000003C)
+#define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xC000003D)
+#define STATUS_DATA_ERROR ((NTSTATUS)0xC000003E)
+#define STATUS_CRC_ERROR ((NTSTATUS)0xC000003F)
+#define STATUS_SECTION_TOO_BIG ((NTSTATUS)0xC0000040)
+#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS)0xC0000041)
+#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS)0xC0000042)
+#define STATUS_SHARING_VIOLATION ((NTSTATUS)0xC0000043)
+#define STATUS_QUOTA_EXCEEDED ((NTSTATUS)0xC0000044)
+#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045)
+#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046)
+#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047)
+#define STATUS_PORT_ALREADY_SET ((NTSTATUS)0xC0000048)
+#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS)0xC0000049)
+#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS)0xC000004A)
+#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS)0xC000004B)
+#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS)0xC000004C)
+#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS)0xC000004D)
+#define STATUS_SECTION_PROTECTION ((NTSTATUS)0xC000004E)
+#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS)0xC000004F)
+#define STATUS_EA_TOO_LARGE ((NTSTATUS)0xC0000050)
+#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS)0xC0000051)
+#define STATUS_NO_EAS_ON_FILE ((NTSTATUS)0xC0000052)
+#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS)0xC0000053)
+#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS)0xC0000054)
+#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS)0xC0000055)
+#define STATUS_DELETE_PENDING ((NTSTATUS)0xC0000056)
+#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS)0xC0000057)
+#define STATUS_UNKNOWN_REVISION ((NTSTATUS)0xC0000058)
+#define STATUS_REVISION_MISMATCH ((NTSTATUS)0xC0000059)
+#define STATUS_INVALID_OWNER ((NTSTATUS)0xC000005A)
+#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS)0xC000005B)
+#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS)0xC000005C)
+#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS)0xC000005D)
+#define STATUS_NO_LOGON_SERVERS ((NTSTATUS)0xC000005E)
+#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS)0xC000005F)
+#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS)0xC0000060)
+#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061)
+#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS)0xC0000062)
+#define STATUS_USER_EXISTS ((NTSTATUS)0xC0000063)
+#define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064)
+#define STATUS_GROUP_EXISTS ((NTSTATUS)0xC0000065)
+#define STATUS_NO_SUCH_GROUP ((NTSTATUS)0xC0000066)
+#define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067)
+#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068)
+#define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069)
+#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006A)
+#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006B)
+#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006C)
+#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006D)
+#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006E)
+#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006F)
+#define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070)
+#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071)
+#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072)
+#define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073)
+#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074)
+#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075)
+#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS)0xC0000076)
+#define STATUS_INVALID_ACL ((NTSTATUS)0xC0000077)
+#define STATUS_INVALID_SID ((NTSTATUS)0xC0000078)
+#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS)0xC0000079)
+#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007A)
+#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007B)
+#define STATUS_NO_TOKEN ((NTSTATUS)0xC000007C)
+#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS)0xC000007D)
+#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS)0xC000007E)
+#define STATUS_DISK_FULL ((NTSTATUS)0xC000007F)
+#define STATUS_SERVER_DISABLED ((NTSTATUS)0xC0000080)
+#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS)0xC0000081)
+#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS)0xC0000082)
+#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS)0xC0000083)
+#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS)0xC0000084)
+#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS)0xC0000085)
+#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS)0xC0000086)
+#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS)0xC0000087)
+#define STATUS_NOT_MAPPED_DATA ((NTSTATUS)0xC0000088)
+#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS)0xC0000089)
+#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS)0xC000008A)
+#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS)0xC000008B)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS)0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS)0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS)0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS)0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS)0xC0000090)
+#define STATUS_FLOAT_OVERFLOW ((NTSTATUS)0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS)0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094)
+#define STATUS_INTEGER_OVERFLOW ((NTSTATUS)0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS)0xC0000096)
+#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS)0xC0000097)
+#define STATUS_FILE_INVALID ((NTSTATUS)0xC0000098)
+#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS)0xC0000099)
+#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
+#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS)0xC000009B)
+#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS)0xC000009C)
+#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS)0xC000009D)
+#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS)0xC000009E)
+#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS)0xC000009F)
+#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS)0xC00000A0)
+#define STATUS_WORKING_SET_QUOTA ((NTSTATUS)0xC00000A1)
+#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS)0xC00000A2)
+#define STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3)
+#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS)0xC00000A4)
+#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS)0xC00000A5)
+#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS)0xC00000A6)
+#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS)0xC00000A7)
+#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS)0xC00000A8)
+#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS)0xC00000A9)
+#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS)0xC00000AA)
+#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS)0xC00000AB)
+#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000AC)
+#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000AD)
+#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AE)
+#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS)0xC00000AF)
+#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0)
+#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1)
+#define STATUS_PIPE_CONNECTED ((NTSTATUS)0xC00000B2)
+#define STATUS_PIPE_LISTENING ((NTSTATUS)0xC00000B3)
+#define STATUS_INVALID_READ_MODE ((NTSTATUS)0xC00000B4)
+#define STATUS_IO_TIMEOUT ((NTSTATUS)0xC00000B5)
+#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS)0xC00000B6)
+#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS)0xC00000B7)
+#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS)0xC00000B8)
+#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS)0xC00000B9)
+#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BA)
+#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BB)
+#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS)0xC00000BC)
+#define STATUS_DUPLICATE_NAME ((NTSTATUS)0xC00000BD)
+#define STATUS_BAD_NETWORK_PATH ((NTSTATUS)0xC00000BE)
+#define STATUS_NETWORK_BUSY ((NTSTATUS)0xC00000BF)
+#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS)0xC00000C0)
+#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS)0xC00000C1)
+#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS)0xC00000C2)
+#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS)0xC00000C3)
+#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS)0xC00000C4)
+#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS)0xC00000C5)
+#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS)0xC00000C6)
+#define STATUS_NO_SPOOL_SPACE ((NTSTATUS)0xC00000C7)
+#define STATUS_PRINT_CANCELLED ((NTSTATUS)0xC00000C8)
+#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS)0xC00000C9)
+#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS)0xC00000CA)
+#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS)0xC00000CB)
+#define STATUS_BAD_NETWORK_NAME ((NTSTATUS)0xC00000CC)
+#define STATUS_TOO_MANY_NAMES ((NTSTATUS)0xC00000CD)
+#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS)0xC00000CE)
+#define STATUS_SHARING_PAUSED ((NTSTATUS)0xC00000CF)
+#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS)0xC00000D0)
+#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS)0xC00000D1)
+#define STATUS_NET_WRITE_FAULT ((NTSTATUS)0xC00000D2)
+#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS)0xC00000D3)
+#define STATUS_NOT_SAME_DEVICE ((NTSTATUS)0xC00000D4)
+#define STATUS_FILE_RENAMED ((NTSTATUS)0xC00000D5)
+#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS)0xC00000D6)
+#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS)0xC00000D7)
+#define STATUS_CANT_WAIT ((NTSTATUS)0xC00000D8)
+#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9)
+#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS)0xC00000DA)
+#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS)0xC00000DB)
+#define STATUS_INVALID_SERVER_STATE ((NTSTATUS)0xC00000DC)
+#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS)0xC00000DD)
+#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS)0xC00000DE)
+#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS)0xC00000DF)
+#define STATUS_DOMAIN_EXISTS ((NTSTATUS)0xC00000E0)
+#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00000E1)
+#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS)0xC00000E2)
+#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS)0xC00000E3)
+#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS)0xC00000E4)
+#define STATUS_INTERNAL_ERROR ((NTSTATUS)0xC00000E5)
+#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS)0xC00000E6)
+#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS)0xC00000E7)
+#define STATUS_INVALID_USER_BUFFER ((NTSTATUS)0xC00000E8)
+#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9)
+#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS)0xC00000EA)
+#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS)0xC00000EB)
+#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS)0xC00000EC)
+#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS)0xC00000ED)
+#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS)0xC00000EE)
+#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS)0xC00000EF)
+#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0)
+#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS)0xC00000F1)
+#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS)0xC00000F2)
+#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS)0xC00000F3)
+#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS)0xC00000F4)
+#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS)0xC00000F5)
+#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS)0xC00000F6)
+#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS)0xC00000F7)
+#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS)0xC00000F8)
+#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS)0xC00000F9)
+#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS)0xC00000FA)
+#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS)0xC00000FB)
+#define STATUS_REDIRECTOR_STARTED ((NTSTATUS)0xC00000FC)
+#define STATUS_STACK_OVERFLOW ((NTSTATUS)0xC00000FD)
+#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS)0xC00000FE)
+#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS)0xC00000FF)
+#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS)0xC0000100)
+#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS)0xC0000101)
+#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS)0xC0000102)
+#define STATUS_NOT_A_DIRECTORY ((NTSTATUS)0xC0000103)
+#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS)0xC0000104)
+#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS)0xC0000105)
+#define STATUS_NAME_TOO_LONG ((NTSTATUS)0xC0000106)
+#define STATUS_FILES_OPEN ((NTSTATUS)0xC0000107)
+#define STATUS_CONNECTION_IN_USE ((NTSTATUS)0xC0000108)
+#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS)0xC0000109)
+#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS)0xC000010A)
+#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS)0xC000010B)
+#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS)0xC000010C)
+#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS)0xC000010D)
+#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS)0xC000010E)
+#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS)0xC000010F)
+#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS)0xC0000110)
+#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS)0xC0000111)
+#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS)0xC0000112)
+#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS)0xC0000113)
+#define STATUS_ABIOS_INVALID_LID ((NTSTATUS)0xC0000114)
+#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115)
+#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS)0xC0000116)
+#define STATUS_NO_LDT ((NTSTATUS)0xC0000117)
+#define STATUS_INVALID_LDT_SIZE ((NTSTATUS)0xC0000118)
+#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS)0xC0000119)
+#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS)0xC000011A)
+#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS)0xC000011B)
+#define STATUS_RXACT_INVALID_STATE ((NTSTATUS)0xC000011C)
+#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS)0xC000011D)
+#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS)0xC000011E)
+#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS)0xC000011F)
+#define STATUS_CANCELLED ((NTSTATUS)0xC0000120)
+#define STATUS_CANNOT_DELETE ((NTSTATUS)0xC0000121)
+#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS)0xC0000122)
+#define STATUS_FILE_DELETED ((NTSTATUS)0xC0000123)
+#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS)0xC0000124)
+#define STATUS_SPECIAL_GROUP ((NTSTATUS)0xC0000125)
+#define STATUS_SPECIAL_USER ((NTSTATUS)0xC0000126)
+#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS)0xC0000127)
+#define STATUS_FILE_CLOSED ((NTSTATUS)0xC0000128)
+#define STATUS_TOO_MANY_THREADS ((NTSTATUS)0xC0000129)
+#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS)0xC000012A)
+#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS)0xC000012B)
+#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS)0xC000012C)
+#define STATUS_COMMITMENT_LIMIT ((NTSTATUS)0xC000012D)
+#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS)0xC000012E)
+#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS)0xC000012F)
+#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS)0xC0000130)
+#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS)0xC0000131)
+#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS)0xC0000132)
+#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS)0xC0000133)
+#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS)0xC0000134)
+#define STATUS_DLL_NOT_FOUND ((NTSTATUS)0xC0000135)
+#define STATUS_OPEN_FAILED ((NTSTATUS)0xC0000136)
+#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS)0xC0000137)
+#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000138)
+#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139)
+#define STATUS_CONTROL_C_EXIT ((NTSTATUS)0xC000013A)
+#define STATUS_LOCAL_DISCONNECT ((NTSTATUS)0xC000013B)
+#define STATUS_REMOTE_DISCONNECT ((NTSTATUS)0xC000013C)
+#define STATUS_REMOTE_RESOURCES ((NTSTATUS)0xC000013D)
+#define STATUS_LINK_FAILED ((NTSTATUS)0xC000013E)
+#define STATUS_LINK_TIMEOUT ((NTSTATUS)0xC000013F)
+#define STATUS_INVALID_CONNECTION ((NTSTATUS)0xC0000140)
+#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141)
+#define STATUS_DLL_INIT_FAILED ((NTSTATUS)0xC0000142)
+#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS)0xC0000143)
+#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS)0xC0000144)
+#define STATUS_APP_INIT_FAILURE ((NTSTATUS)0xC0000145)
+#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS)0xC0000146)
+#define STATUS_NO_PAGEFILE ((NTSTATUS)0xC0000147)
+#define STATUS_INVALID_LEVEL ((NTSTATUS)0xC0000148)
+#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS)0xC0000149)
+#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS)0xC000014A)
+#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014B)
+#define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C)
+#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014D)
+#define STATUS_NO_EVENT_PAIR ((NTSTATUS)0xC000014E)
+#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS)0xC000014F)
+#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS)0xC0000150)
+#define STATUS_NO_SUCH_ALIAS ((NTSTATUS)0xC0000151)
+#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS)0xC0000152)
+#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS)0xC0000153)
+#define STATUS_ALIAS_EXISTS ((NTSTATUS)0xC0000154)
+#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS)0xC0000155)
+#define STATUS_TOO_MANY_SECRETS ((NTSTATUS)0xC0000156)
+#define STATUS_SECRET_TOO_LONG ((NTSTATUS)0xC0000157)
+#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158)
+#define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159)
+#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015A)
+#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015B)
+#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C)
+#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015D)
+#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015E)
+#define STATUS_FT_MISSING_MEMBER ((NTSTATUS)0xC000015F)
+#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS)0xC0000160)
+#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS)0xC0000161)
+#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS)0xC0000162)
+#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS)0xC0000163)
+#define STATUS_FLOPPY_VOLUME ((NTSTATUS)0xC0000164)
+#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS)0xC0000165)
+#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS)0xC0000166)
+#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS)0xC0000167)
+#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS)0xC0000168)
+#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS)0xC0000169)
+#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS)0xC000016A)
+#define STATUS_DISK_RESET_FAILED ((NTSTATUS)0xC000016B)
+#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS)0xC000016C)
+#define STATUS_FT_ORPHANING ((NTSTATUS)0xC000016D)
#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS)0xC000016E)
-#define STATUS_PARTITION_FAILURE ((NTSTATUS)0xC0000172)
-#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS)0xC0000173)
-#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS)0xC0000174)
-#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS)0xC0000175)
-#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS)0xC0000176)
-#define STATUS_EOM_OVERFLOW ((NTSTATUS)0xC0000177)
-#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178)
-#define STATUS_NO_SUCH_MEMBER ((NTSTATUS)0xC000017A)
-#define STATUS_INVALID_MEMBER ((NTSTATUS)0xC000017B)
-#define STATUS_KEY_DELETED ((NTSTATUS)0xC000017C)
-#define STATUS_NO_LOG_SPACE ((NTSTATUS)0xC000017D)
-#define STATUS_TOO_MANY_SIDS ((NTSTATUS)0xC000017E)
-#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017F)
-#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS)0xC0000180)
-#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS)0xC0000181)
-#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182)
-#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS)0xC0000183)
-#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184)
-#define STATUS_IO_DEVICE_ERROR ((NTSTATUS)0xC0000185)
-#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS)0xC0000186)
-#define STATUS_BACKUP_CONTROLLER ((NTSTATUS)0xC0000187)
-#define STATUS_LOG_FILE_FULL ((NTSTATUS)0xC0000188)
-#define STATUS_TOO_LATE ((NTSTATUS)0xC0000189)
-#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS)0xC000018A)
-#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS)0xC000018B)
-#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS)0xC000018C)
-#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018D)
-#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS)0xC000018E)
-#define STATUS_EVENTLOG_CANT_START ((NTSTATUS)0xC000018F)
-#define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190)
-#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191)
-#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192)
-#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193)
-#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194)
-#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195)
-#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196)
-#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS)0xC0000197)
+#define STATUS_PARTITION_FAILURE ((NTSTATUS)0xC0000172)
+#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS)0xC0000173)
+#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS)0xC0000174)
+#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS)0xC0000175)
+#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS)0xC0000176)
+#define STATUS_EOM_OVERFLOW ((NTSTATUS)0xC0000177)
+#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178)
+#define STATUS_NO_SUCH_MEMBER ((NTSTATUS)0xC000017A)
+#define STATUS_INVALID_MEMBER ((NTSTATUS)0xC000017B)
+#define STATUS_KEY_DELETED ((NTSTATUS)0xC000017C)
+#define STATUS_NO_LOG_SPACE ((NTSTATUS)0xC000017D)
+#define STATUS_TOO_MANY_SIDS ((NTSTATUS)0xC000017E)
+#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017F)
+#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS)0xC0000180)
+#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS)0xC0000181)
+#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182)
+#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS)0xC0000183)
+#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184)
+#define STATUS_IO_DEVICE_ERROR ((NTSTATUS)0xC0000185)
+#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS)0xC0000186)
+#define STATUS_BACKUP_CONTROLLER ((NTSTATUS)0xC0000187)
+#define STATUS_LOG_FILE_FULL ((NTSTATUS)0xC0000188)
+#define STATUS_TOO_LATE ((NTSTATUS)0xC0000189)
+#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS)0xC000018A)
+#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS)0xC000018B)
+#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS)0xC000018C)
+#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018D)
+#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS)0xC000018E)
+#define STATUS_EVENTLOG_CANT_START ((NTSTATUS)0xC000018F)
+#define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190)
+#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191)
+#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192)
+#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193)
+#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194)
+#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195)
+#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196)
+#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS)0xC0000197)
#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS)0xC0000198)
#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS)0xC0000199)
-#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019A)
-#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019B)
-#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS)0xC000019C)
-#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS)0xC0000202)
-#define STATUS_USER_SESSION_DELETED ((NTSTATUS)0xC0000203)
-#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS)0xC0000204)
-#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS)0xC0000205)
-#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS)0xC0000206)
-#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207)
-#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS)0xC0000208)
-#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS)0xC0000209)
-#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS)0xC000020A)
-#define STATUS_ADDRESS_CLOSED ((NTSTATUS)0xC000020B)
-#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS)0xC000020C)
-#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020D)
-#define STATUS_TOO_MANY_NODES ((NTSTATUS)0xC000020E)
-#define STATUS_TRANSACTION_ABORTED ((NTSTATUS)0xC000020F)
-#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS)0xC0000210)
-#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS)0xC0000211)
-#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS)0xC0000212)
-#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS)0xC0000213)
-#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS)0xC0000214)
-#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS)0xC0000215)
-#define STATUS_NOT_SERVER_SESSION ((NTSTATUS)0xC0000216)
-#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS)0xC0000217)
-#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218)
-#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS)0xC0000219)
-#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021A)
-#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS)0xC000021B)
-#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS)0xC000021C)
-#define STATUS_VDM_HARD_ERROR ((NTSTATUS)0xC000021D)
-#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS)0xC000021E)
-#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS)0xC000021F)
-#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS)0xC0000220)
-#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221)
-#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222)
+#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019A)
+#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019B)
+#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS)0xC000019C)
+#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS)0xC0000202)
+#define STATUS_USER_SESSION_DELETED ((NTSTATUS)0xC0000203)
+#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS)0xC0000204)
+#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS)0xC0000205)
+#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS)0xC0000206)
+#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207)
+#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS)0xC0000208)
+#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS)0xC0000209)
+#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS)0xC000020A)
+#define STATUS_ADDRESS_CLOSED ((NTSTATUS)0xC000020B)
+#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS)0xC000020C)
+#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020D)
+#define STATUS_TOO_MANY_NODES ((NTSTATUS)0xC000020E)
+#define STATUS_TRANSACTION_ABORTED ((NTSTATUS)0xC000020F)
+#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS)0xC0000210)
+#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS)0xC0000211)
+#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS)0xC0000212)
+#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS)0xC0000213)
+#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS)0xC0000214)
+#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS)0xC0000215)
+#define STATUS_NOT_SERVER_SESSION ((NTSTATUS)0xC0000216)
+#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS)0xC0000217)
+#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218)
+#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS)0xC0000219)
+#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021A)
+#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS)0xC000021B)
+#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS)0xC000021C)
+#define STATUS_VDM_HARD_ERROR ((NTSTATUS)0xC000021D)
+#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS)0xC000021E)
+#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS)0xC000021F)
+#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS)0xC0000220)
+#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221)
+#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222)
#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223)
-#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224)
-#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225)
-#define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226)
-#define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227)
-#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS)0xC0000228)
-#define STATUS_FAIL_CHECK ((NTSTATUS)0xC0000229)
-#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS)0xC000022A)
-#define STATUS_OBJECTID_EXISTS ((NTSTATUS)0xC000022B)
-#define STATUS_CONVERT_TO_LARGE ((NTSTATUS)0xC000022C)
-#define STATUS_RETRY ((NTSTATUS)0xC000022D)
-#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS)0xC000022E)
-#define STATUS_ALLOCATE_BUCKET ((NTSTATUS)0xC000022F)
-#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS)0xC0000230)
-#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231)
-#define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232)
-#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233)
-#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234)
-#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235)
-#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236)
-#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237)
-#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238)
-#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS)0xC0000239)
-#define STATUS_CONNECTION_INVALID ((NTSTATUS)0xC000023A)
-#define STATUS_CONNECTION_ACTIVE ((NTSTATUS)0xC000023B)
-#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS)0xC000023C)
-#define STATUS_HOST_UNREACHABLE ((NTSTATUS)0xC000023D)
-#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS)0xC000023E)
-#define STATUS_PORT_UNREACHABLE ((NTSTATUS)0xC000023F)
-#define STATUS_REQUEST_ABORTED ((NTSTATUS)0xC0000240)
-#define STATUS_CONNECTION_ABORTED ((NTSTATUS)0xC0000241)
-#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS)0xC0000242)
-#define STATUS_USER_MAPPED_FILE ((NTSTATUS)0xC0000243)
-#define STATUS_AUDIT_FAILED ((NTSTATUS)0xC0000244)
-#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245)
-#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS)0xC0000246)
-#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS)0xC0000247)
-#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS)0xC0000248)
-#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS)0xC0000249)
-#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS)0xC0000250)
-#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS)0xC0000251)
-#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS)0xC0000252)
-#define STATUS_LPC_REPLY_LOST ((NTSTATUS)0xC0000253)
-#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS)0xC0000254)
-#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS)0xC0000255)
-#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS)0xC0000256)
-#define STATUS_PATH_NOT_COVERED ((NTSTATUS)0xC0000257)
-#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS)0xC0000258)
-#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS)0xC0000259)
-#define STATUS_PWD_TOO_SHORT ((NTSTATUS)0xC000025A)
-#define STATUS_PWD_TOO_RECENT ((NTSTATUS)0xC000025B)
-#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS)0xC000025C)
-#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS)0xC000025E)
-#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS)0xC000025F)
-#define STATUS_INVALID_HW_PROFILE ((NTSTATUS)0xC0000260)
-#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261)
-#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000262)
-#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263)
-#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS)0xC0000264)
-#define STATUS_TOO_MANY_LINKS ((NTSTATUS)0xC0000265)
-#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS)0xC0000266)
-#define STATUS_FILE_IS_OFFLINE ((NTSTATUS)0xC0000267)
-#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS)0xC0000268)
-#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS)0xC0000269)
-#define STATUS_LICENSE_VIOLATION ((NTSTATUS)0xC000026A)
-#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS)0xC000026B)
-#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS)0xC000026C)
-#define STATUS_DFS_UNAVAILABLE ((NTSTATUS)0xC000026D)
-#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS)0xC000026E)
-#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS)0xC000026F)
-#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000270)
-#define STATUS_VALIDATE_CONTINUE ((NTSTATUS)0xC0000271)
-#define STATUS_NO_MATCH ((NTSTATUS)0xC0000272)
-#define STATUS_NO_MORE_MATCHES ((NTSTATUS)0xC0000273)
-#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS)0xC0000275)
-#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS)0xC0000276)
-#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS)0xC0000277)
-#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS)0xC0000278)
+#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224)
+#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225)
+#define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226)
+#define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227)
+#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS)0xC0000228)
+#define STATUS_FAIL_CHECK ((NTSTATUS)0xC0000229)
+#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS)0xC000022A)
+#define STATUS_OBJECTID_EXISTS ((NTSTATUS)0xC000022B)
+#define STATUS_CONVERT_TO_LARGE ((NTSTATUS)0xC000022C)
+#define STATUS_RETRY ((NTSTATUS)0xC000022D)
+#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS)0xC000022E)
+#define STATUS_ALLOCATE_BUCKET ((NTSTATUS)0xC000022F)
+#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS)0xC0000230)
+#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231)
+#define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232)
+#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233)
+#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234)
+#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235)
+#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236)
+#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237)
+#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238)
+#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS)0xC0000239)
+#define STATUS_CONNECTION_INVALID ((NTSTATUS)0xC000023A)
+#define STATUS_CONNECTION_ACTIVE ((NTSTATUS)0xC000023B)
+#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS)0xC000023C)
+#define STATUS_HOST_UNREACHABLE ((NTSTATUS)0xC000023D)
+#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS)0xC000023E)
+#define STATUS_PORT_UNREACHABLE ((NTSTATUS)0xC000023F)
+#define STATUS_REQUEST_ABORTED ((NTSTATUS)0xC0000240)
+#define STATUS_CONNECTION_ABORTED ((NTSTATUS)0xC0000241)
+#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS)0xC0000242)
+#define STATUS_USER_MAPPED_FILE ((NTSTATUS)0xC0000243)
+#define STATUS_AUDIT_FAILED ((NTSTATUS)0xC0000244)
+#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245)
+#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS)0xC0000246)
+#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS)0xC0000247)
+#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS)0xC0000248)
+#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS)0xC0000249)
+#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS)0xC0000250)
+#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS)0xC0000251)
+#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS)0xC0000252)
+#define STATUS_LPC_REPLY_LOST ((NTSTATUS)0xC0000253)
+#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS)0xC0000254)
+#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS)0xC0000255)
+#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS)0xC0000256)
+#define STATUS_PATH_NOT_COVERED ((NTSTATUS)0xC0000257)
+#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS)0xC0000258)
+#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS)0xC0000259)
+#define STATUS_PWD_TOO_SHORT ((NTSTATUS)0xC000025A)
+#define STATUS_PWD_TOO_RECENT ((NTSTATUS)0xC000025B)
+#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS)0xC000025C)
+#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS)0xC000025E)
+#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS)0xC000025F)
+#define STATUS_INVALID_HW_PROFILE ((NTSTATUS)0xC0000260)
+#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261)
+#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000262)
+#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263)
+#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS)0xC0000264)
+#define STATUS_TOO_MANY_LINKS ((NTSTATUS)0xC0000265)
+#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS)0xC0000266)
+#define STATUS_FILE_IS_OFFLINE ((NTSTATUS)0xC0000267)
+#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS)0xC0000268)
+#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS)0xC0000269)
+#define STATUS_LICENSE_VIOLATION ((NTSTATUS)0xC000026A)
+#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS)0xC000026B)
+#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS)0xC000026C)
+#define STATUS_DFS_UNAVAILABLE ((NTSTATUS)0xC000026D)
+#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS)0xC000026E)
+#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS)0xC000026F)
+#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000270)
+#define STATUS_VALIDATE_CONTINUE ((NTSTATUS)0xC0000271)
+#define STATUS_NO_MATCH ((NTSTATUS)0xC0000272)
+#define STATUS_NO_MORE_MATCHES ((NTSTATUS)0xC0000273)
+#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS)0xC0000275)
+#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS)0xC0000276)
+#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS)0xC0000277)
+#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS)0xC0000278)
#define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS)0xC0000279)
#define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000280)
#define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS)0xC0000281)
-#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS)0xC0000282)
-#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS)0xC0000283)
-#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS)0xC0000284)
-#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS)0xC0000285)
-#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS)0xC0000286)
-#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS)0xC0000287)
-#define STATUS_ENCRYPTION_FAILED ((NTSTATUS)0xC000028A)
-#define STATUS_DECRYPTION_FAILED ((NTSTATUS)0xC000028B)
-#define STATUS_RANGE_NOT_FOUND ((NTSTATUS)0xC000028C)
-#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS)0xC000028D)
-#define STATUS_NO_EFS ((NTSTATUS)0xC000028E)
-#define STATUS_WRONG_EFS ((NTSTATUS)0xC000028F)
-#define STATUS_NO_USER_KEYS ((NTSTATUS)0xC0000290)
-#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS)0xC0000291)
-#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS)0xC0000292)
-#define STATUS_FILE_ENCRYPTED ((NTSTATUS)0xC0000293)
-#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295)
-#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS)0xC0000296)
-#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS)0xC0000297)
-#define STATUS_WMI_TRY_AGAIN ((NTSTATUS)0xC0000298)
-#define STATUS_SHARED_POLICY ((NTSTATUS)0xC0000299)
-#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS)0xC000029A)
-#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS)0xC000029B)
-#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS)0xC000029C)
-#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029D)
+#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS)0xC0000282)
+#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS)0xC0000283)
+#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS)0xC0000284)
+#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS)0xC0000285)
+#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS)0xC0000286)
+#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS)0xC0000287)
+#define STATUS_ENCRYPTION_FAILED ((NTSTATUS)0xC000028A)
+#define STATUS_DECRYPTION_FAILED ((NTSTATUS)0xC000028B)
+#define STATUS_RANGE_NOT_FOUND ((NTSTATUS)0xC000028C)
+#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS)0xC000028D)
+#define STATUS_NO_EFS ((NTSTATUS)0xC000028E)
+#define STATUS_WRONG_EFS ((NTSTATUS)0xC000028F)
+#define STATUS_NO_USER_KEYS ((NTSTATUS)0xC0000290)
+#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS)0xC0000291)
+#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS)0xC0000292)
+#define STATUS_FILE_ENCRYPTED ((NTSTATUS)0xC0000293)
+#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295)
+#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS)0xC0000296)
+#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS)0xC0000297)
+#define STATUS_WMI_TRY_AGAIN ((NTSTATUS)0xC0000298)
+#define STATUS_SHARED_POLICY ((NTSTATUS)0xC0000299)
+#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS)0xC000029A)
+#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS)0xC000029B)
+#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS)0xC000029C)
+#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029D)
#define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS)0xC000029E)
-#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS)0xC000029F)
-#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS)0xC00002A0)
-#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS)0xC00002A1)
+#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS)0xC000029F)
+#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS)0xC00002A0)
+#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS)0xC00002A1)
#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS)0xC00002A2)
#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS)0xC00002A3)
#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS)0xC00002A4)
-#define STATUS_DS_BUSY ((NTSTATUS)0xC00002A5)
-#define STATUS_DS_UNAVAILABLE ((NTSTATUS)0xC00002A6)
-#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS)0xC00002A7)
-#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS)0xC00002A8)
-#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS)0xC00002A9)
-#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS)0xC00002AA)
-#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS)0xC00002AB)
-#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS)0xC00002AC)
-#define STATUS_DS_CANT_ON_RDN ((NTSTATUS)0xC00002AD)
-#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS)0xC00002AE)
-#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS)0xC00002AF)
-#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS)0xC00002B0)
+#define STATUS_DS_BUSY ((NTSTATUS)0xC00002A5)
+#define STATUS_DS_UNAVAILABLE ((NTSTATUS)0xC00002A6)
+#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS)0xC00002A7)
+#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS)0xC00002A8)
+#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS)0xC00002A9)
+#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS)0xC00002AA)
+#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS)0xC00002AB)
+#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS)0xC00002AC)
+#define STATUS_DS_CANT_ON_RDN ((NTSTATUS)0xC00002AD)
+#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS)0xC00002AE)
+#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS)0xC00002AF)
+#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS)0xC00002B0)
#define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS)0xC00002B1)
#define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS)0xC00002B2)
-#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS)0xC00002B3)
-#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS)0xC00002B4)
-#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS)0xC00002B5)
-#define STATUS_DEVICE_REMOVED ((NTSTATUS)0xC00002B6)
+#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS)0xC00002B3)
+#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS)0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS)0xC00002B5)
+#define STATUS_DEVICE_REMOVED ((NTSTATUS)0xC00002B6)
#define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS)0xC00002B7)
-#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS)0xC00002B8)
-#define STATUS_NOINTERFACE ((NTSTATUS)0xC00002B9)
-#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00002C1)
-#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS)0xC00002C2)
+#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS)0xC00002B8)
+#define STATUS_NOINTERFACE ((NTSTATUS)0xC00002B9)
+#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00002C1)
+#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS)0xC00002C2)
#define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS)0xC00002C3)
-#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS)0xC00002C4)
+#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS)0xC00002C4)
#define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS)0xC00002C5)
-#define STATUS_WMI_READ_ONLY ((NTSTATUS)0xC00002C6)
-#define STATUS_WMI_SET_FAILURE ((NTSTATUS)0xC00002C7)
-#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS)0xC00002C8)
-#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS)0xC00002C9)
-#define STATUS_TRANSPORT_FULL ((NTSTATUS)0xC00002CA)
-#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002CB)
-#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS)0xC00002CC)
+#define STATUS_WMI_READ_ONLY ((NTSTATUS)0xC00002C6)
+#define STATUS_WMI_SET_FAILURE ((NTSTATUS)0xC00002C7)
+#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS)0xC00002C8)
+#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS)0xC00002C9)
+#define STATUS_TRANSPORT_FULL ((NTSTATUS)0xC00002CA)
+#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002CB)
+#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS)0xC00002CC)
#define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS)0xC00002CD)
-#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS)0xC00002CE)
-#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS)0xC00002CF)
+#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS)0xC00002CE)
+#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS)0xC00002CF)
#define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS)0xC00002D0)
-#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1)
-#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS)0xC00002D2)
-#define STATUS_POWER_STATE_INVALID ((NTSTATUS)0xC00002D3)
-#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS)0xC00002D4)
-#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D5)
-#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D6)
-#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7)
-#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC00002D8)
-#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D9)
-#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS)0xC00002DA)
+#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1)
+#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS)0xC00002D2)
+#define STATUS_POWER_STATE_INVALID ((NTSTATUS)0xC00002D3)
+#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS)0xC00002D4)
+#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D5)
+#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D6)
+#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7)
+#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC00002D8)
+#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D9)
+#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS)0xC00002DA)
#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS)0xC00002DB)
-#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS)0xC00002DC)
-#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS)0xC00002DD)
-#define STATUS_INSUFFICIENT_POWER ((NTSTATUS)0xC00002DE)
-#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DF)
-#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS)0xC00002E0)
-#define STATUS_DS_CANT_START ((NTSTATUS)0xC00002E1)
-#define STATUS_DS_INIT_FAILURE ((NTSTATUS)0xC00002E2)
-#define STATUS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002E3)
-#define STATUS_DS_GC_REQUIRED ((NTSTATUS)0xC00002E4)
-#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS)0xC00002E5)
-#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS)0xC00002E6)
+#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS)0xC00002DC)
+#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS)0xC00002DD)
+#define STATUS_INSUFFICIENT_POWER ((NTSTATUS)0xC00002DE)
+#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DF)
+#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS)0xC00002E0)
+#define STATUS_DS_CANT_START ((NTSTATUS)0xC00002E1)
+#define STATUS_DS_INIT_FAILURE ((NTSTATUS)0xC00002E2)
+#define STATUS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002E3)
+#define STATUS_DS_GC_REQUIRED ((NTSTATUS)0xC00002E4)
+#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS)0xC00002E5)
+#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS)0xC00002E6)
#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS)0xC00002E7)
-#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS)0xC00002E8)
+#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS)0xC00002E8)
#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS)0xC00002E9)
-#define STATUS_CANNOT_MAKE ((NTSTATUS)0xC00002EA)
-#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS)0xC00002EB)
-#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002EC)
+#define STATUS_CANNOT_MAKE ((NTSTATUS)0xC00002EA)
+#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS)0xC00002EB)
+#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002EC)
#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002ED)
#define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS)0xC00002EE)
-#define STATUS_NO_TGT_REPLY ((NTSTATUS)0xC00002EF)
-#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS)0xC00002F0)
-#define STATUS_NO_IP_ADDRESSES ((NTSTATUS)0xC00002F1)
-#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS)0xC00002F2)
-#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS)0xC00002F3)
-#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS)0xC00002F4)
-#define STATUS_MUST_BE_KDC ((NTSTATUS)0xC00002F5)
+#define STATUS_NO_TGT_REPLY ((NTSTATUS)0xC00002EF)
+#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS)0xC00002F0)
+#define STATUS_NO_IP_ADDRESSES ((NTSTATUS)0xC00002F1)
+#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS)0xC00002F2)
+#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS)0xC00002F3)
+#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS)0xC00002F4)
+#define STATUS_MUST_BE_KDC ((NTSTATUS)0xC00002F5)
#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS)0xC00002F6)
-#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS)0xC00002F7)
-#define STATUS_NO_PA_DATA ((NTSTATUS)0xC00002F8)
-#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS)0xC00002F9)
-#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS)0xC00002FA)
-#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS)0xC00002FB)
-#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS)0xC00002FC)
-#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS)0xC00002FD)
-#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FE)
+#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS)0xC00002F7)
+#define STATUS_NO_PA_DATA ((NTSTATUS)0xC00002F8)
+#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS)0xC00002F9)
+#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS)0xC00002FA)
+#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS)0xC00002FB)
+#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS)0xC00002FC)
+#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS)0xC00002FD)
+#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FE)
#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FF)
-#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS)0xC0000300)
-#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS)0xC0000301)
-#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS)0xC0000302)
-#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS)0xC0000303)
-#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS)0xC0000304)
-#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS)0xC0000305)
+#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS)0xC0000300)
+#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS)0xC0000301)
+#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS)0xC0000302)
+#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS)0xC0000303)
+#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS)0xC0000304)
+#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS)0xC0000305)
#define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS)0xC0000306)
-#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS)0xC0000307)
-#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS)0xC0000308)
-#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS)0xC0000309)
-#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS)0xC000030A)
-#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS)0xC000030B)
-#define STATUS_PKINIT_FAILURE ((NTSTATUS)0xC0000320)
+#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS)0xC0000307)
+#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS)0xC0000308)
+#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS)0xC0000309)
+#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS)0xC000030A)
+#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS)0xC000030B)
+#define STATUS_PKINIT_FAILURE ((NTSTATUS)0xC0000320)
#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS)0xC0000321)
-#define STATUS_NO_KERB_KEY ((NTSTATUS)0xC0000322)
-#define STATUS_HOST_DOWN ((NTSTATUS)0xC0000350)
-#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS)0xC0000351)
-#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS)0xC0000352)
-#define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353)
-#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354)
-#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS)0xC0000355)
-#define STATUS_AUDITING_DISABLED ((NTSTATUS)0xC0000356)
-#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS)0xC0000357)
+#define STATUS_NO_KERB_KEY ((NTSTATUS)0xC0000322)
+#define STATUS_HOST_DOWN ((NTSTATUS)0xC0000350)
+#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS)0xC0000351)
+#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS)0xC0000352)
+#define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353)
+#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354)
+#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS)0xC0000355)
+#define STATUS_AUDITING_DISABLED ((NTSTATUS)0xC0000356)
+#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS)0xC0000357)
#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC0000358)
-#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS)0xC0000359)
-#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS)0xC000035A)
-#define STATUS_BAD_BINDINGS ((NTSTATUS)0xC000035B)
-#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS)0xC000035C)
-#define STATUS_APPHELP_BLOCK ((NTSTATUS)0xC000035D)
-#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS)0xC000035E)
-#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS)0xC000035F)
+#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS)0xC0000359)
+#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS)0xC000035A)
+#define STATUS_BAD_BINDINGS ((NTSTATUS)0xC000035B)
+#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS)0xC000035C)
+#define STATUS_APPHELP_BLOCK ((NTSTATUS)0xC000035D)
+#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS)0xC000035E)
+#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS)0xC000035F)
#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS)0xC0000361)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS)0xC0000362)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS)0xC0000362)
#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS)0xC0000363)
-#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS)0xC0000364)
-#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS)0xC0000365)
-#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS)0xC0000366)
-#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS)0x00000367)
-#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000368)
-#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369)
-#define STATUS_MCA_OCCURED ((NTSTATUS)0xC000036A)
-#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS)0xC000036B)
-#define STATUS_DRIVER_BLOCKED ((NTSTATUS)0xC000036C)
-#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS)0xC000036D)
-#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS)0xC000036E)
-#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036F)
-#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS)0xC0000380)
-#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS)0xC0000381)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS)0xC0000364)
+#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS)0xC0000365)
+#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS)0xC0000366)
+#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS)0x00000367)
+#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000368)
+#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369)
+#define STATUS_MCA_OCCURED ((NTSTATUS)0xC000036A)
+#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS)0xC000036B)
+#define STATUS_DRIVER_BLOCKED ((NTSTATUS)0xC000036C)
+#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS)0xC000036D)
+#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS)0xC000036E)
+#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036F)
+#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS)0xC0000380)
+#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS)0xC0000381)
#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS)0xC0000382)
-#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS)0xC0000383)
+#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS)0xC0000383)
#define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS)0xC0000384)
-#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385)
-#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386)
-#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387)
-#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388)
-#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389)
-#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038A)
-#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038B)
-#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS)0xC000038C)
-#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS)0xC000038D)
-#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038E)
-#define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS)0xC000038F)
-#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000401)
-#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000402)
+#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385)
+#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386)
+#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387)
+#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388)
+#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389)
+#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038A)
+#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038B)
+#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS)0xC000038C)
+#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS)0xC000038D)
+#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038E)
+#define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS)0xC000038F)
+#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000401)
+#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000402)
#define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS)0xC0000403)
-#define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS)0xC0000404)
-#define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS)0xC0000405)
-#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS)0xC0000406)
-#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS)0xC0000407)
-#define STATUS_USER2USER_REQUIRED ((NTSTATUS)0xC0000408)
-#define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS)0xC0000409)
-#define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS)0xC000040A)
-#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS)0xC000040B)
-#define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS)0xC000040C)
-#define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS)0xC000040D)
-#define STATUS_KDC_CERT_EXPIRED ((NTSTATUS)0xC000040E)
-#define STATUS_KDC_CERT_REVOKED ((NTSTATUS)0xC000040F)
-#define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS)0xC0000410)
-#define STATUS_HIBERNATION_FAILURE ((NTSTATUS)0xC0000411)
-#define STATUS_DELAY_LOAD_FAILED ((NTSTATUS)0xC0000412)
-#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413)
-#define STATUS_VDM_DISALLOWED ((NTSTATUS)0xC0000414)
-#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS)0xC0000415)
-#define STATUS_ASSERTION_FAILURE ((NTSTATUS)0xC0000420L)
-#define STATUS_CALLBACK_POP_STACK ((NTSTATUS)0xC0000423)
-#define STATUS_WOW_ASSERTION ((NTSTATUS)0xC0009898)
+#define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS)0xC0000404)
+#define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS)0xC0000405)
+#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS)0xC0000406)
+#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS)0xC0000407)
+#define STATUS_USER2USER_REQUIRED ((NTSTATUS)0xC0000408)
+#define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS)0xC0000409)
+#define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS)0xC000040A)
+#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS)0xC000040B)
+#define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS)0xC000040C)
+#define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS)0xC000040D)
+#define STATUS_KDC_CERT_EXPIRED ((NTSTATUS)0xC000040E)
+#define STATUS_KDC_CERT_REVOKED ((NTSTATUS)0xC000040F)
+#define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS)0xC0000410)
+#define STATUS_HIBERNATION_FAILURE ((NTSTATUS)0xC0000411)
+#define STATUS_DELAY_LOAD_FAILED ((NTSTATUS)0xC0000412)
+#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS)0xC0000413)
+#define STATUS_VDM_DISALLOWED ((NTSTATUS)0xC0000414)
+#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS)0xC0000415)
+#define STATUS_ASSERTION_FAILURE ((NTSTATUS)0xC0000420L)
+#define STATUS_CALLBACK_POP_STACK ((NTSTATUS)0xC0000423)
+#define STATUS_WOW_ASSERTION ((NTSTATUS)0xC0009898)
#define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS)0xC0020001)
#define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS)0xC0020002)
#define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS)0xC0030060)
#define RPC_NT_PIPE_EMPTY ((NTSTATUS)0xC0030061)
-#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS)0xC0040035)
-#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS)0xC0040036)
+#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS)0xC0040035)
+#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS)0xC0040036)
#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037)
-#define STATUS_PNP_INVALID_ID ((NTSTATUS)0xC0040038)
+#define STATUS_PNP_INVALID_ID ((NTSTATUS)0xC0040038)
+
+#define STATUS_ACPI_INVALID_OPCODE ((NTSTATUS)0xC0140001L)
+#define STATUS_ACPI_STACK_OVERFLOW ((NTSTATUS)0xC0140002L)
+#define STATUS_ACPI_ASSERT_FAILED ((NTSTATUS)0xC0140003L)
+#define STATUS_ACPI_INVALID_INDEX ((NTSTATUS)0xC0140004L)
+#define STATUS_ACPI_INVALID_ARGUMENT ((NTSTATUS)0xC0140005L)
+#define STATUS_ACPI_FATAL ((NTSTATUS)0xC0140006L)
+#define STATUS_ACPI_INVALID_SUPERNAME ((NTSTATUS)0xC0140007L)
+#define STATUS_ACPI_INVALID_ARGTYPE ((NTSTATUS)0xC0140008L)
+#define STATUS_ACPI_INVALID_OBJTYPE ((NTSTATUS)0xC0140009L)
+#define STATUS_ACPI_INVALID_TARGETTYPE ((NTSTATUS)0xC014000AL)
+#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT ((NTSTATUS)0xC014000BL)
+#define STATUS_ACPI_ADDRESS_NOT_MAPPED ((NTSTATUS)0xC014000CL)
+#define STATUS_ACPI_INVALID_EVENTTYPE ((NTSTATUS)0xC014000DL)
+#define STATUS_ACPI_HANDLER_COLLISION ((NTSTATUS)0xC014000EL)
+#define STATUS_ACPI_INVALID_DATA ((NTSTATUS)0xC014000FL)
+#define STATUS_ACPI_INVALID_REGION ((NTSTATUS)0xC0140010L)
+#define STATUS_ACPI_INVALID_ACCESS_SIZE ((NTSTATUS)0xC0140011L)
+#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK ((NTSTATUS)0xC0140012L)
+#define STATUS_ACPI_ALREADY_INITIALIZED ((NTSTATUS)0xC0140013L)
+#define STATUS_ACPI_NOT_INITIALIZED ((NTSTATUS)0xC0140014L)
+#define STATUS_ACPI_INVALID_MUTEX_LEVEL ((NTSTATUS)0xC0140015L)
+#define STATUS_ACPI_MUTEX_NOT_OWNED ((NTSTATUS)0xC0140016L)
+#define STATUS_ACPI_MUTEX_NOT_OWNER ((NTSTATUS)0xC0140017L)
+#define STATUS_ACPI_RS_ACCESS ((NTSTATUS)0xC0140018L)
+#define STATUS_ACPI_INVALID_TABLE ((NTSTATUS)0xC0140019L)
+#define STATUS_ACPI_REG_HANDLER_FAILED ((NTSTATUS)0xC0140020L)
+#define STATUS_ACPI_POWER_REQUEST_FAILED ((NTSTATUS)0xC0140021L)
#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001)
-#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002)
-#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003)
-#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS)0xC00A0006)
-#define STATUS_CTX_NO_OUTBUF ((NTSTATUS)0xC00A0007)
-#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS)0xC00A0008)
-#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS)0xC00A0009)
-#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS)0xC00A000A)
+#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002)
+#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003)
+#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS)0xC00A0006)
+#define STATUS_CTX_NO_OUTBUF ((NTSTATUS)0xC00A0007)
+#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS)0xC00A0008)
+#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS)0xC00A0009)
+#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS)0xC00A000A)
#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS)0xC00A000B)
#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS)0xC00A000C)
#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS)0xC00A000D)
-#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS)0xC00A000E)
-#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS)0xC00A000F)
-#define STATUS_CTX_TD_ERROR ((NTSTATUS)0xC00A0010)
+#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS)0xC00A000E)
+#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS)0xC00A000F)
+#define STATUS_CTX_TD_ERROR ((NTSTATUS)0xC00A0010)
#define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS)0xC00A0012)
-#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013)
-#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS)0xC00A0014)
-#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS)0xC00A0015)
+#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013)
+#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS)0xC00A0014)
+#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS)0xC00A0015)
#define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS)0xC00A0016)
-#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS)0xC00A0017)
-#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS)0xC00A0018)
-#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS)0xC00A0022)
-#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS)0xC00A0024)
-#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS)0xC00A0026)
-#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS)0xC00A0027)
-#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS)0xC00A0028)
-#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS)0xC00A002A)
+#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS)0xC00A0017)
+#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS)0xC00A0018)
+#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS)0xC00A0022)
+#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS)0xC00A0024)
+#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS)0xC00A0026)
+#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS)0xC00A0027)
+#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS)0xC00A0028)
+#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS)0xC00A002A)
#define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS)0xC00A002B)
-#define STATUS_CTX_INVALID_WD ((NTSTATUS)0xC00A002E)
-#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS)0xC00A002F)
-#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS)0xC00A0030)
-#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS)0xC00A0031)
-#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS)0xC00A0032)
+#define STATUS_CTX_INVALID_WD ((NTSTATUS)0xC00A002E)
+#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS)0xC00A002F)
+#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS)0xC00A0030)
+#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS)0xC00A0031)
+#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS)0xC00A0032)
#define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS)0xC00A0033)
-#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034)
+#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034)
#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS)0xC00A0035)
-#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS)0xC00A0036)
+#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS)0xC00A0036)
-#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS)0xC0130001)
-#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS)0xC0130002)
-#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS)0xC0130003)
-#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS)0xC0130004)
+#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS)0xC0130001)
+#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS)0xC0130002)
+#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS)0xC0130003)
+#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS)0xC0130004)
#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS)0xC0130005)
-#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS)0xC0130006)
-#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007)
+#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS)0xC0130006)
+#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007)
#define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS)0xC0130008)
#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS)0xC0130009)
-#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS)0xC013000A)
+#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS)0xC013000A)
#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS)0xC013000B)
-#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS)0xC013000C)
-#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS)0xC013000D)
-#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS)0xC013000E)
+#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS)0xC013000C)
+#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS)0xC013000D)
+#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS)0xC013000E)
#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS)0xC013000F)
-#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS)0xC0130010)
-#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS)0xC0130011)
-#define STATUS_CLUSTER_NODE_UP ((NTSTATUS)0xC0130012)
-#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS)0xC0130013)
-#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS)0xC0130014)
+#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS)0xC0130010)
+#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS)0xC0130011)
+#define STATUS_CLUSTER_NODE_UP ((NTSTATUS)0xC0130012)
+#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS)0xC0130013)
+#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS)0xC0130014)
#define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS)0xC0130015)
#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS)0xC0130016)
-#define STATUS_CLUSTER_POISONED ((NTSTATUS)0xC0130017)
+#define STATUS_CLUSTER_POISONED ((NTSTATUS)0xC0130017)
-#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS)0xC0150001)
-#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS)0xC0150002)
+#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS)0xC0150001)
+#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS)0xC0150002)
#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS)0xC0150003)
-#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS)0xC0150004)
-#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005)
-#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS)0xC0150006)
+#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS)0xC0150004)
+#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005)
+#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS)0xC0150006)
#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS)0xC0150007)
-#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS)0xC0150008)
-#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS)0xC0150009)
-#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS)0xC015000A)
+#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS)0xC0150008)
+#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS)0xC0150009)
+#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS)0xC015000A)
#define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS)0xC015000B)
-#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS)0xC015000C)
+#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS)0xC015000C)
#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS)0xC015000E)
-#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS)0xC015000F)
-#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS)0xC0150010)
-#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011)
+#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS)0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS)0xC0150010)
+#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011)
#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS)0xC0150012)
#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS)0xC0150013)
#define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS)0xC0150014)
-#define STATUS_SXS_CORRUPTION ((NTSTATUS)0xC0150015)
+#define STATUS_SXS_CORRUPTION ((NTSTATUS)0xC0150015)
#endif /* WIN32_NO_STATUS */
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _NTSTATUS_ */
*
*/
-#ifndef __TVOUT_H
-#define __TVOUT_H
-
-
-#if _MSC_VER > 1000
#pragma once
-#endif
-
#ifndef GUID_DEFINED
#include <guiddef.h>
#define VP_CP_CMD_CHANGE 0x00000004
typedef struct _VIDEOPARAMETERS {
- GUID Guid;
- ULONG dwOffset;
- ULONG dwCommand;
- ULONG dwFlags;
- ULONG dwMode;
- ULONG dwTVStandard;
- ULONG dwAvailableModes;
- ULONG dwAvailableTVStandard;
- ULONG dwFlickerFilter;
- ULONG dwOverScanX;
- ULONG dwOverScanY;
- ULONG dwMaxUnscaledX;
- ULONG dwMaxUnscaledY;
- ULONG dwPositionX;
- ULONG dwPositionY;
- ULONG dwBrightness;
- ULONG dwContrast;
- ULONG dwCPType;
- ULONG dwCPCommand;
- ULONG dwCPStandard;
- ULONG dwCPKey;
- ULONG bCP_APSTriggerBits;
- UCHAR bOEMCopyProtection[256];
-} VIDEOPARAMETERS, *PVIDEOPARAMETERS, FAR *LPVIDEOPARAMETERS;
-
-
-#endif /* __TVOUT_H */
+ GUID Guid;
+ ULONG dwOffset;
+ ULONG dwCommand;
+ ULONG dwFlags;
+ ULONG dwMode;
+ ULONG dwTVStandard;
+ ULONG dwAvailableModes;
+ ULONG dwAvailableTVStandard;
+ ULONG dwFlickerFilter;
+ ULONG dwOverScanX;
+ ULONG dwOverScanY;
+ ULONG dwMaxUnscaledX;
+ ULONG dwMaxUnscaledY;
+ ULONG dwPositionX;
+ ULONG dwPositionY;
+ ULONG dwBrightness;
+ ULONG dwContrast;
+ ULONG dwCPType;
+ ULONG dwCPCommand;
+ ULONG dwCPStandard;
+ ULONG dwCPKey;
+ ULONG bCP_APSTriggerBits;
+ UCHAR bOEMCopyProtection[256];
+} VIDEOPARAMETERS, *PVIDEOPARAMETERS, *LPVIDEOPARAMETERS;
#include <poppack.h>
+#endif /* USB_KERNEL_IOCTL */
+
#ifdef __cplusplus
}
#endif
DWORD WINAPI GetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD);
#endif
BOOL WINAPI FlushFileBuffers(HANDLE);
-BOOL WINAPI FlushInstructionCache(HANDLE,PCVOID,DWORD);
-BOOL WINAPI FlushViewOfFile(PCVOID,SIZE_T);
+BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);
PVOID WINAPI FlsGetValue(DWORD);
BOOL WINAPI FlsSetValue(DWORD,PVOID);
BOOL WINAPI FlsFree(DWORD);
-DWORD WINAPI FormatMessageA(DWORD,PCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
-DWORD WINAPI FormatMessageW(DWORD,PCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
+DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
+DWORD WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
BOOL WINAPI FreeEnvironmentStringsA(LPSTR);
BOOL WINAPI FreeEnvironmentStringsW(LPWSTR);
BOOL WINAPI FreeLibrary(HMODULE);
HGLOBAL WINAPI GlobalFree(HGLOBAL);
UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,int);
UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,int);
-HGLOBAL WINAPI GlobalHandle(PCVOID);
+HGLOBAL WINAPI GlobalHandle(LPCVOID);
LPVOID WINAPI GlobalLock(HGLOBAL);
VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
#if (_WIN32_WINNT >= 0x0500)
#if (_WIN32_WINNT >= 0x0501)
BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
#endif
-DWORD WINAPI HeapSize(HANDLE,DWORD,PCVOID);
+SIZE_T WINAPI HeapSize(HANDLE,DWORD,LPCVOID);
BOOL WINAPI HeapUnlock(HANDLE);
-BOOL WINAPI HeapValidate(HANDLE,DWORD,PCVOID);
+BOOL WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
BOOL WINAPI ImpersonateAnonymousToken(HANDLE);
BOOL WINAPI ImpersonateLoggedOnUser(HANDLE);
#endif /* __INTERLOCKED_DECLARED */
BOOL WINAPI IsBadCodePtr(FARPROC);
-BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT_PTR);
+BOOL WINAPI IsBadHugeReadPtr(CONST VOID*,UINT_PTR);
BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT_PTR);
-BOOL WINAPI IsBadReadPtr(PCVOID,UINT_PTR);
+BOOL WINAPI IsBadReadPtr(CONST VOID*,UINT_PTR);
BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR);
BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR);
BOOL WINAPI IsBadWritePtr(PVOID,UINT_PTR);
#endif
BOOL WINAPI IsProcessorFeaturePresent(DWORD);
BOOL WINAPI IsSystemResumeAutomatic(void);
-BOOL WINAPI IsTextUnicode(PCVOID,int,LPINT);
+BOOL WINAPI IsTextUnicode(CONST VOID*,int,LPINT);
#if (_WIN32_WINNT >= 0x0600)
BOOL WINAPI IsThreadAFiber(VOID);
#endif
BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
BOOL WINAPI ReadFileEx(HANDLE,PVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
-BOOL WINAPI ReadProcessMemory(HANDLE,PCVOID,PVOID,SIZE_T,PSIZE_T);
+BOOL WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,PSIZE_T);
#if (_WIN32_WINNT >= 0x0600)
VOID WINAPI RecoveryFinished(BOOL);
HRESULT WINAPI RecoveryInProgress(OUT PBOOL);
VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
#endif
BOOL WINAPI WinLoadTrustProvider(GUID*);
-BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED);
-BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
+BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
BOOL WINAPI SetConsoleTitleA(LPCSTR);
BOOL WINAPI SetConsoleTitleW(LPCWSTR);
BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*);
-BOOL WINAPI WriteConsoleA(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
-BOOL WINAPI WriteConsoleW(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI WriteConsoleA(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
+BOOL WINAPI WriteConsoleW(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
typedef int *LPLONG;
#endif
typedef DWORD *PDWORD,*LPDWORD;
-typedef CONST void *PCVOID,*LPCVOID;
+typedef CONST void *LPCVOID;
typedef unsigned int UINT,*PUINT,*LPUINT;
HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
-HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,PCVOID);
+HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,CONST VOID*);
HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*);
HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
HDC WINAPI CreateCompatibleDC(HDC);
HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
-HBITMAP WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,PCVOID,const BITMAPINFO*,UINT);
+HBITMAP WINAPI CreateDIBitmap(HDC,CONST BITMAPINFOHEADER*,DWORD,CONST VOID*,CONST BITMAPINFO*,UINT);
HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
-HBRUSH WINAPI CreateDIBPatternBrushPt(PCVOID,UINT);
+HBRUSH WINAPI CreateDIBPatternBrushPt(CONST VOID*,UINT);
HBITMAP WINAPI CreateDIBSection(HDC,const BITMAPINFO*,UINT,PVOID*,HANDLE,DWORD);
HBITMAP WINAPI CreateDiscardableBitmap(HDC,int,int);
HRGN WINAPI CreateEllipticRgn(int,int,int,int);
HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL);
int WINAPI SetAbortProc(HDC,ABORTPROC);
int WINAPI SetArcDirection(HDC,int);
-LONG WINAPI SetBitmapBits(HBITMAP,DWORD,PCVOID);
+LONG WINAPI SetBitmapBits(HBITMAP,DWORD,CONST VOID*);
BOOL WINAPI SetBitmapDimensionEx(HBITMAP,int,int,LPSIZE);
COLORREF WINAPI SetBkColor(HDC,COLORREF);
int WINAPI SetBkMode(HDC,int);
#endif
BOOL WINAPI SetDeviceGammaRamp(HDC,PVOID);
UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);
-int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
-int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
+int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT);
+int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT);
HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE*);
int WINAPI SetGraphicsMode(HDC,int);
int WINAPI SetICMMode(HDC,int);
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;
HACCEL WINAPI CreateAcceleratorTableA(LPACCEL,int);
HACCEL WINAPI CreateAcceleratorTableW(LPACCEL,int);
BOOL WINAPI CreateCaret(HWND,HBITMAP,int,int);
-HCURSOR WINAPI CreateCursor(HINSTANCE,int,int,int,int,PCVOID,PCVOID);
+HCURSOR WINAPI CreateCursor(HINSTANCE,int,int,int,int,CONST VOID*,CONST VOID*);
#if defined(_WINGDI_) && !defined(NOGDI)
HDESK WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
HDESK WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
cpp_quote("#ifndef _CFGMGR32_H_")
typedef unsigned long RESOURCEID;
+
+typedef struct _HWPROFILEINFO {
+ DWORD HWPI_ulHWProfile;
+ WCHAR HWPI_szFriendlyName[80];
+ DWORD HWPI_dwFlags;
+} HWPROFILEINFO;
+
cpp_quote("#endif")
typedef unsigned long DEVPROPTYPE;
typedef [range(0, PNP_MAX_PROP_SIZE)] unsigned long PNP_PROP_SIZE;
DWORD pid;
} DEVPROPKEY;
-typedef struct _HWPROFILEINFO {
- DWORD HWPI_ulHWProfile;
- WCHAR HWPI_szFriendlyName[80];
- DWORD HWPI_dwFlags;
-} HWPROFILEINFO;
-
[
uuid (809F4e40-A03D-11CE-8F69-08003E30051B),
version(1.0),
+++ /dev/null
-/*
- * Copyright (C) 2005 Mike McCormack
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _CFGMGR32_H_
-#define _CFGMGR32_H_
-
-/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */
-#ifdef __WINESRC__
-# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) /* nothing */
-#else /* __WINESRC__ */
-# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type;
-#endif /* __WINESRC__ */
-
-typedef DWORD CONFIGRET;
-typedef HANDLE HMACHINE;
-typedef HMACHINE *PHMACHINE;
-typedef DWORD DEVINST;
-typedef DEVINST *PDEVINST;
-typedef DWORD DEVNODE;
-typedef DEVNODE *PDEVNODE;
-typedef ULONG REGDISPOSITION;
-typedef DWORD_PTR LOG_CONF;
-typedef LOG_CONF *PLOG_CONF;
-typedef ULONG PRIORITY;
-typedef PRIORITY *PPRIORITY;
-
-
-typedef CHAR *DEVINSTID_A;
-typedef WCHAR *DEVINSTID_W;
-DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
-
-#define CR_SUCCESS 0x00000000
-#define CR_OUT_OF_MEMORY 0x00000002
-#define CR_INVALID_POINTER 0x00000003
-#define CR_INVALID_FLAG 0x00000004
-#define CR_INVALID_DEVNODE 0x00000005
-#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
-#define CR_INVALID_LOG_CONF 0x00000007
-#define CR_NO_SUCH_DEVNODE 0x0000000D
-#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
-#define CR_FAILURE 0x00000013
-#define CR_BUFFER_SMALL 0x0000001A
-#define CR_REGISTRY_ERROR 0x0000001D
-#define CR_INVALID_DEVICE_ID 0x0000001E
-#define CR_INVALID_DATA 0x0000001F
-#define CR_NO_SUCH_VALUE 0x00000025
-#define CR_INVALID_PRIORITY 0x00000027
-#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
-#define CR_INVALID_MACHINENAME 0x0000002F
-#define CR_ACCESS_DENIED 0x00000033
-#define CR_CALL_NOT_IMPLEMENTED 0x00000034
-#define CR_INVALID_PROPERTY 0x00000035
-
-#define MAX_CLASS_NAME_LEN 32
-#define MAX_GUID_STRING_LEN 39
-#define MAX_PROFILE_LEN 80
-#define MAX_DEVICE_ID_LEN 200
-#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
-
-/* Disposition values for CM_Open_Class_Key[_Ex] */
-#define RegDisposition_OpenAlways 0x00000000
-#define RegDisposition_OpenExisting 0x00000001
-#define RegDisposition_Bits 0x00000001
-
-/* ulFlags for CM_Add_ID[_Ex] */
-#define CM_ADD_ID_HARDWARE 0x00000000
-#define CM_ADD_ID_COMPATIBLE 0x00000001
-#define CM_ADD_ID_BITS 0x00000001
-
-/* ulFlags for CM_Open_Class_Key[_Ex] */
-#define CM_OPEN_CLASS_KEY_INSTALLER 0x00000000
-#define CM_OPEN_CLASS_KEY_INTERFACE 0x00000001
-#define CM_OPEN_CLASS_KEY_BITS 0x00000001
-
-/* ulFlags for CM_Locate_DevNode[_Ex] */
-#define CM_LOCATE_DEVNODE_NORMAL 0x00000000
-#define CM_LOCATE_DEVNODE_PHANTOM 0x00000001
-#define CM_LOCATE_DEVNODE_CANCELREMOVE 0x00000002
-#define CM_LOCATE_DEVNODE_NOVALIDATION 0x00000004
-#define CM_LOCATE_DEVNODE_BITS 0x00000007
-
-#define CM_LOCATE_DEVINST_NORMAL CM_LOCATE_DEVNODE_NORMAL
-#define CM_LOCATE_DEVINST_PHANTOM CM_LOCATE_DEVNODE_PHANTOM
-#define CM_LOCATE_DEVINST_CANCELREMOVE CM_LOCATE_DEVNODE_CANCELREMOVE
-#define CM_LOCATE_DEVINST_NOVALIDATION CM_LOCATE_DEVNODE_NOVALIDATION
-#define CM_LOCATE_DEVINST_BITS CM_LOCATE_DEVNODE_BITS
-
-/* ulFlags for CM_Set_DevNode_Problem[_Ex] */
-#define CM_SET_DEVNODE_PROBLEM_NORMAL 0x00000000
-#define CM_SET_DEVNODE_PROBLEM_OVERRIDE 0x00000001
-#define CM_SET_DEVNODE_PROBLEM_BITS 0x00000001
-
-#define CM_SET_DEVINST_PROBLEM_NORMAL CM_SET_DEVNODE_PROBLEM_NORMAL
-#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE
-#define CM_SET_DEVINST_PROBLEM_BITS CM_SET_DEVNODE_PROBLEM_BITS
-
-/* Properties for CM_Get/Set_DevNode_Registry_Property[_Ex]A/W */
-#define CM_DRP_DEVICEDESC 0x00000001
-#define CM_DRP_HARDWAREID 0x00000002
-#define CM_DRP_COMPATIBLEIDS 0x00000003
-#define CM_DRP_UNUSED0 0x00000004
-#define CM_DRP_SERVICE 0x00000005
-#define CM_DRP_UNUSED1 0x00000006
-#define CM_DRP_UNUSED2 0x00000007
-#define CM_DRP_CLASS 0x00000008
-#define CM_DRP_CLASSGUID 0x00000009
-#define CM_DRP_DRIVER 0x0000000A
-#define CM_DRP_CONFIGFLAGS 0x0000000B
-#define CM_DRP_MFG 0x0000000C
-#define CM_DRP_FRIENDLYNAME 0x0000000D
-#define CM_DRP_LOCATION_INFORMATION 0x0000000E
-#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F
-#define CM_DRP_CAPABILITIES 0x00000010
-#define CM_DRP_UI_NUMBER 0x00000011
-#define CM_DRP_UPPERFILTERS 0x00000012
-#define CM_DRP_LOWERFILTERS 0x00000013
-#define CM_DRP_BUSTYPEGUID 0x00000014
-#define CM_DRP_LEGACYBUSTYPE 0x00000015
-#define CM_DRP_BUSNUMBER 0x00000016
-#define CM_DRP_ENUMERATOR_NAME 0x00000017
-
-#define CM_DRP_MIN 0x00000001
-#define CM_DRP_MAX 0x00000017
-
-/* ulFlags for CM_Delete_Class_Key[_Ex] */
-#define CM_DELETE_CLASS_ONLY 0x00000000
-#define CM_DELETE_CLASS_SUBKEYS 0x00000001
-#define CM_DELETE_CLASS_BITS 0x00000001
-
-/* ulFlags for CM_Get_Device_ID_List and CM_Get_Device_ID_List_Size */
-#define CM_GETIDLIST_FILTER_NONE (0x00000000)
-#define CM_GETIDLIST_FILTER_ENUMERATOR (0x00000001)
-#define CM_GETIDLIST_FILTER_SERVICE (0x00000002)
-#define CM_GETIDLIST_FILTER_EJECTRELATIONS (0x00000004)
-#define CM_GETIDLIST_FILTER_REMOVALRELATIONS (0x00000008)
-#define CM_GETIDLIST_FILTER_POWERRELATIONS (0x00000010)
-#define CM_GETIDLIST_FILTER_BUSRELATIONS (0x00000020)
-#define CM_GETIDLIST_DONOTGENERATE (0x10000040)
-#define CM_GETIDLIST_FILTER_BITS (0x1000007F)
-
-/* ulFlags for CM_Reenumerate_DevNode[_Ex] */
-#define CM_REENUMERATE_NORMAL 0x00000000
-#define CM_REENUMERATE_SYNCHRONOUS 0x00000001
-#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
-#define CM_REENUMERATE_ASYNCHRONOUS 0x00000004
-#define CM_REENUMERATE_BITS 0x00000007
-
-/* ulFlags for CM_Run_Detection[_Ex] */
-#define CM_DETECT_NEW_PROFILE 0x00000001
-#define CM_DETECT_CRASHED 0x00000002
-#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004
-#define CM_DETECT_RUN 0x80000000
-#define CM_DETECT_BITS 0x80000007
-
-/* ulFlags for CM_Setup_DevInst[_Ex] */
-#define CM_SETUP_DEVNODE_READY 0x00000000
-#define CM_SETUP_DEVINST_READY CM_SETUP_DEVNODE_READY
-#define CM_SETUP_DOWNLOAD 0x00000001
-#define CM_SETUP_WRITE_LOG_CONFS 0x00000002
-#define CM_SETUP_PROP_CHANGE 0x00000003
-#define CM_SETUP_DEVNODE_RESET 0x00000004
-#define CM_SETUP_DEVINST_RESET CM_SETUP_DEVNODE_RESET
-#define CM_SETUP_BITS 0x00000007
-
-/* ulFlags for CM_Create_DevNode[_Ex]A/W */
-#define CM_CREATE_DEVNODE_NORMAL 0x00000000
-#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
-#define CM_CREATE_DEVNODE_PHANTOM 0x00000002
-#define CM_CREATE_DEVNODE_GENERATE_ID 0x00000004
-#define CM_CREATE_DEVNODE_DO_NOT_INSTALL 0x00000008
-#define CM_CREATE_DEVNODE_BITS 0x0000000F
-
-#define CM_CREATE_DEVINST_NORMAL CM_CREATE_DEVNODE_NORMAL
-#define CM_CREATE_DEVINST_NO_WAIT_INSTALL CM_CREATE_DEVNODE_NO_WAIT_INSTALL
-#define CM_CREATE_DEVINST_PHANTOM CM_CREATE_DEVNODE_PHANTOM
-#define CM_CREATE_DEVINST_GENERATE_ID CM_CREATE_DEVNODE_GENERATE_ID
-#define CM_CREATE_DEVINST_DO_NOT_INSTALL CM_CREATE_DEVNODE_DO_NOT_INSTALL
-#define CM_CREATE_DEVINST_BITS CM_CREATE_DEVNODE_BITS
-
-/* ulFlags for CM_Set_HW_Prof_Flags[_Ex]A/W */
-#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK 0x00000001
-#define CM_SET_HW_PROF_FLAGS_BITS 0x00000001
-
-/* ulFlags for Log_Conf functions */
-#define BASIC_LOG_CONF 0x00000000
-#define FILTERED_LOG_CONF 0x00000001
-#define ALLOC_LOG_CONF 0x00000002
-#define BOOT_LOG_CONF 0x00000003
-#define FORCED_LOG_CONF 0x00000004
-#define OVERRIDE_LOG_CONF 0x00000005
-#define NUM_LOG_CONF 0x00000006
-#define LOG_CONF_BITS 0x00000007
-
-#define PRIORITY_EQUAL_FIRST 0x00000008
-#define PRIORITY_EQUAL_LAST 0x00000000
-#define PRIORITY_BIT 0x00000008
-
-#define CMP_MAGIC 0x01234567
-
-
-CONFIGRET WINAPI CMP_Init_Detection( DWORD );
-CONFIGRET WINAPI CMP_Report_LogOn( DWORD, DWORD );
-
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf( PLOG_CONF, DEVINST, PRIORITY, ULONG );
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex( PLOG_CONF, DEVINST, PRIORITY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Add_IDA( DEVINST, PSTR, ULONG );
-CONFIGRET WINAPI CM_Add_IDW( DEVINST, PWSTR, ULONG );
-#define CM_Add_ID WINELIB_NAME_AW(CM_Add_ID)
-CONFIGRET WINAPI CM_Add_ID_ExA( DEVINST, PSTR, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Add_ID_ExW( DEVINST, PWSTR, ULONG, HMACHINE );
-#define CM_Add_ID_Ex WINELIB_NAME_AW(CM_Add_ID_Ex)
-CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE );
-CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE );
-#define CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)
-CONFIGRET WINAPI CM_Create_DevNodeA( PDEVINST, DEVINSTID_A, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Create_DevNodeW( PDEVINST, DEVINSTID_W, DEVINST, ULONG );
-#define CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)
-CONFIGRET WINAPI CM_Create_DevNode_ExA( PDEVINST, DEVINSTID_A, DEVINST, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Create_DevNode_ExW( PDEVINST, DEVINSTID_W, DEVINST, ULONG, HANDLE );
-#define CM_Create_DevNode_Ex WINELIB_NAME_AW(CM_Create_DevNode_Ex)
-CONFIGRET WINAPI CM_Delete_Class_Key( LPGUID, ULONG );
-CONFIGRET WINAPI CM_Delete_Class_Key_Ex( LPGUID, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Delete_DevNode_Key( DEVNODE, ULONG, ULONG );
-CONFIGRET WINAPI CM_Delete_DevNode_Key_Ex( DEVNODE, ULONG, ULONG, HANDLE );
-CONFIGRET WINAPI CM_Disable_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Disable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Disconnect_Machine( HMACHINE );
-CONFIGRET WINAPI CM_Enable_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Enable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_Classes( ULONG, LPGUID, ULONG );
-CONFIGRET WINAPI CM_Enumerate_Classes_Ex( ULONG, LPGUID, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsA( ULONG, PCHAR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsW( ULONG, PWCHAR, PULONG, ULONG );
-#define CM_Enumerate_Enumerators WINELIB_NAME_AW(CM_Enumerate_Enumerators)
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA( ULONG, PCHAR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW( ULONG, PWCHAR, PULONG, ULONG, HMACHINE );
-#define CM_Enumerate_Enumerators_Ex WINELIB_NAME_AW(CM_Enumerate_Enumerators_Ex)
-CONFIGRET WINAPI CM_Free_Log_Conf( LOG_CONF, ULONG );
-CONFIGRET WINAPI CM_Free_Log_Conf_Ex( LOG_CONF, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Free_Log_Conf_Handle( LOG_CONF );
-CONFIGRET WINAPI CM_Get_Child( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Key_NameA( LPGUID, LPSTR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Class_Key_NameW( LPGUID, LPWSTR, PULONG, ULONG );
-#define CM_Get_Class_Key_Name WINELIB_NAME_AW(CM_Get_Class_Key_Name)
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA( LPGUID, LPSTR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW( LPGUID, LPWSTR, PULONG, ULONG, HMACHINE );
-#define CM_Get_Class_Key_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Key_Name_Ex)
-CONFIGRET WINAPI CM_Get_Class_NameA( LPGUID, PCHAR, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Class_NameW( LPGUID, PWCHAR, PULONG, ULONG );
-#define CM_Get_Class_Name WINELIB_NAME_AW(CM_Get_Class_Name)
-CONFIGRET WINAPI CM_Get_Class_Name_ExA( LPGUID, PCHAR, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Class_Name_ExW( LPGUID, PWCHAR, PULONG, ULONG, HMACHINE );
-#define CM_Get_Class_Name_Ex WINELIB_NAME_AW(CM_Get_Class_Name_Ex)
-CONFIGRET WINAPI CM_Get_Depth( PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
-#define CM_Get_DevNode_Registry_Property WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property)
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
-#define CM_Get_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property_Ex)
-CONFIGRET WINAPI CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_IDA( DEVINST, PCHAR, ULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Device_IDW( DEVINST, PWCHAR, ULONG, ULONG );
-#define CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)
-CONFIGRET WINAPI CM_Get_Device_ID_ExW( DEVINST, PWCHAR, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_ExA( DEVINST, PCHAR, ULONG, ULONG, HMACHINE );
-#define CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_ListA( PCSTR, PCHAR, ULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_ListW( PCWSTR, PWCHAR, ULONG, ULONG );
-#define CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List)
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExA( PCSTR, PCHAR, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExW( PCWSTR, PWCHAR, ULONG, ULONG, HMACHINE );
-#define CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( PULONG, PCSTR, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( PULONG, PCWSTR, ULONG );
-#define CM_Get_Device_ID_List_Size WINELIB_NAME_AW(CM_Get_Device_ID_List_Size)
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( PULONG, PCSTR, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( PULONG, PCWSTR, ULONG, HMACHINE );
-#define CM_Get_Device_ID_List_Size_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Size_Ex)
-CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( PULONG, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_First_Log_Conf( PLOG_CONF, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( PLOG_CONF, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Global_State( PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_HW_Prof( ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_HW_Prof_Ex( ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA( DEVINSTID_A, ULONG, PULONG, ULONG );
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW( DEVINSTID_W, ULONG, PULONG, ULONG );
-#define CM_Get_HW_Prof_Flags WINELIB_NAME_AW(CM_Get_HW_Prof_Flags)
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, PULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, PULONG, ULONG, HMACHINE );
-#define CM_Get_HW_Prof_Flags_Ex WINELIB_NAME_AW(CM_Get_HW_Prof_Flags_Ex)
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority( LOG_CONF, PPRIORITY, ULONG );
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex( LOG_CONF, PPRIORITY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Next_Log_Conf( PLOG_CONF, LOG_CONF, ULONG );
-CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex( PLOG_CONF, LOG_CONF, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Get_Sibling( PDEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Get_Sibling_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
-WORD WINAPI CM_Get_Version( VOID );
-WORD WINAPI CM_Get_Version_Ex( HMACHINE );
-
-CONFIGRET WINAPI CM_Is_Dock_Station_Present( PBOOL );
-CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex( PBOOL, HMACHINE );
-CONFIGRET WINAPI CM_Locate_DevNodeA( PDEVINST, DEVINSTID_A, ULONG );
-CONFIGRET WINAPI CM_Locate_DevNodeW( PDEVINST, DEVINSTID_W, ULONG );
-#define CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode)
-CONFIGRET WINAPI CM_Locate_DevNode_ExA( PDEVINST, DEVINSTID_A, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Locate_DevNode_ExW( PDEVINST, DEVINSTID_W, ULONG, HMACHINE );
-#define CM_Locate_DevNode_Ex WINELIB_NAME_AW(CM_Locate_DevNode_Ex)
-
-CONFIGRET WINAPI CM_Move_DevNode( DEVINST, DEVINST, ULONG );
-CONFIGRET WINAPI CM_Move_DevNode_Ex( DEVINST, DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Open_Class_KeyA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
-CONFIGRET WINAPI CM_Open_Class_KeyW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
-#define CM_Open_Class_Key WINELIB_NAME_AW(CM_Open_Class_Key)
-CONFIGRET WINAPI CM_Open_Class_Key_ExA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Open_Class_Key_ExW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-#define CM_Open_Class_Key_Ex WINELIB_NAME_AW(CM_Open_Class_Key_Ex)
-CONFIGRET WINAPI CM_Open_DevNode_Key( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG );
-CONFIGRET WINAPI CM_Open_DevNode_Key_Ex( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Reenumerate_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Reenumerate_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Request_Eject_PC( VOID );
-CONFIGRET WINAPI CM_Request_Eject_PC_Ex( HMACHINE );
-
-CONFIGRET WINAPI CM_Run_Detection( ULONG );
-CONFIGRET WINAPI CM_Run_Detection_Ex( ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Problem( DEVINST, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex( DEVINST, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA( DEVINST, ULONG, PCVOID, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW( DEVINST, ULONG, PCVOID, ULONG, ULONG );
-#define CM_Set_DevNode_Registry_Property WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property)
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
-#define CM_Set_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property_Ex)
-
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsA( DEVINSTID_A, ULONG, ULONG, ULONG );
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsW( DEVINSTID_W, ULONG, ULONG, ULONG );
-#define CM_Set_HW_Prof_Flags WINELIB_NAME_AW(CM_Set_HW_Prof_Flags)
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, ULONG, ULONG, HMACHINE );
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, ULONG, ULONG, HMACHINE );
-#define CM_Set_HW_Prof_Flags_Ex WINELIB_NAME_AW(CM_Set_HW_Prof_Flags_Ex)
-CONFIGRET WINAPI CM_Setup_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Setup_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-CONFIGRET WINAPI CM_Uninstall_DevNode( DEVINST, ULONG );
-CONFIGRET WINAPI CM_Uninstall_DevNode_Ex( DEVINST, ULONG, HMACHINE );
-
-#endif /* _CFGMGR32_H_ */
--- /dev/null
+$if (_WDMDDK_)
+/** 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
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#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);
+}
+
+$endif /* _NTDDK_ */
--- /dev/null
+$if (_NTDDK_)
+
+#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
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+$if (_WDMDDK_)
+#include <armddk.h>
+$endif
--- /dev/null
+/******************************************************************************
+ * Configuration Manager Functions *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmRegisterCallback(
+ IN PEX_CALLBACK_FUNCTION Function,
+ IN PVOID Context OPTIONAL,
+ OUT PLARGE_INTEGER Cookie);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmUnRegisterCallback(
+ 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
+
+$endif
+
--- /dev/null
+/******************************************************************************
+ * Configuration Manager Types *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+/* Resource list definitions */
+typedef int CM_RESOURCE_TYPE;
+
+#define CmResourceTypeNull 0
+#define CmResourceTypePort 1
+#define CmResourceTypeInterrupt 2
+#define CmResourceTypeMemory 3
+#define CmResourceTypeDma 4
+#define CmResourceTypeDeviceSpecific 5
+#define CmResourceTypeBusNumber 6
+#define CmResourceTypeNonArbitrated 128
+#define CmResourceTypeConfigData 128
+#define CmResourceTypeDevicePrivate 129
+#define CmResourceTypePcCardConfig 130
+#define CmResourceTypeMfCardConfig 131
+
+/* KEY_VALUE_Xxx.Type */
+#define REG_NONE 0
+#define REG_SZ 1
+#define REG_EXPAND_SZ 2
+#define REG_BINARY 3
+#define REG_DWORD 4
+#define REG_DWORD_LITTLE_ENDIAN 4
+#define REG_DWORD_BIG_ENDIAN 5
+#define REG_LINK 6
+#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
+
+/* Registry Access Rights */
+#define KEY_QUERY_VALUE (0x0001)
+#define KEY_SET_VALUE (0x0002)
+#define KEY_CREATE_SUB_KEY (0x0004)
+#define KEY_ENUMERATE_SUB_KEYS (0x0008)
+#define KEY_NOTIFY (0x0010)
+#define KEY_CREATE_LINK (0x0020)
+#define KEY_WOW64_32KEY (0x0200)
+#define KEY_WOW64_64KEY (0x0100)
+#define KEY_WOW64_RES (0x0300)
+
+#define KEY_READ ((STANDARD_RIGHTS_READ |\
+ KEY_QUERY_VALUE |\
+ KEY_ENUMERATE_SUB_KEYS |\
+ KEY_NOTIFY) \
+ & \
+ (~SYNCHRONIZE))
+
+#define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
+ KEY_SET_VALUE |\
+ KEY_CREATE_SUB_KEY) \
+ & \
+ (~SYNCHRONIZE))
+
+#define KEY_EXECUTE ((KEY_READ) \
+ & \
+ (~SYNCHRONIZE))
+
+#define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
+ KEY_QUERY_VALUE |\
+ KEY_SET_VALUE |\
+ KEY_CREATE_SUB_KEY |\
+ KEY_ENUMERATE_SUB_KEYS |\
+ KEY_NOTIFY |\
+ KEY_CREATE_LINK) \
+ & \
+ (~SYNCHRONIZE))
+
+/* Registry Open/Create Options */
+#define REG_OPTION_RESERVED (0x00000000L)
+#define REG_OPTION_NON_VOLATILE (0x00000000L)
+#define REG_OPTION_VOLATILE (0x00000001L)
+#define REG_OPTION_CREATE_LINK (0x00000002L)
+#define REG_OPTION_BACKUP_RESTORE (0x00000004L)
+#define REG_OPTION_OPEN_LINK (0x00000008L)
+
+#define REG_LEGAL_OPTION \
+ (REG_OPTION_RESERVED |\
+ REG_OPTION_NON_VOLATILE |\
+ REG_OPTION_VOLATILE |\
+ REG_OPTION_CREATE_LINK |\
+ 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)
+
+/* Key restore & hive load flags */
+#define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
+#define REG_REFRESH_HIVE (0x00000002L)
+#define REG_NO_LAZY_FLUSH (0x00000004L)
+#define REG_FORCE_RESTORE (0x00000008L)
+#define REG_APP_HIVE (0x00000010L)
+#define REG_PROCESS_PRIVATE (0x00000020L)
+#define REG_START_JOURNAL (0x00000040L)
+#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
+
+/* Notify Filter Values */
+#define REG_NOTIFY_CHANGE_NAME (0x00000001L)
+#define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
+#define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
+#define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
+
+#define REG_LEGAL_CHANGE_FILTER \
+ (REG_NOTIFY_CHANGE_NAME |\
+ REG_NOTIFY_CHANGE_ATTRIBUTES |\
+ REG_NOTIFY_CHANGE_LAST_SET |\
+ REG_NOTIFY_CHANGE_SECURITY)
+
+#include <pshpack4.h>
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ USHORT Flags;
+ union {
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Generic;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Port;
+ struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+#else
+ ULONG Level;
+#endif
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Interrupt;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ struct {
+ __GNU_EXTENSION union {
+ struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Group;
+#else
+ USHORT Reserved;
+#endif
+ USHORT MessageCount;
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Raw;
+ struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+#else
+ ULONG Level;
+#endif
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Translated;
+ } DUMMYUNIONNAME;
+ } MessageInterrupt;
+#endif
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Memory;
+ struct {
+ ULONG Channel;
+ ULONG Port;
+ ULONG Reserved1;
+ } Dma;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Start;
+ ULONG Length;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG DataSize;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } DeviceSpecificData;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length40;
+ } Memory40;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length48;
+ } Memory48;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length64;
+ } Memory64;
+#endif
+ } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+#include <poppack.h>
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
+#define CmResourceTypeNull 0
+#define CmResourceTypePort 1
+#define CmResourceTypeInterrupt 2
+#define CmResourceTypeMemory 3
+#define CmResourceTypeDma 4
+#define CmResourceTypeDeviceSpecific 5
+#define CmResourceTypeBusNumber 6
+#define CmResourceTypeMemoryLarge 7
+#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,
+ CmResourceShareDeviceExclusive,
+ CmResourceShareDriverExclusive,
+ CmResourceShareShared
+} CM_SHARE_DISPOSITION;
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
+#define CM_RESOURCE_PORT_MEMORY 0x0000
+#define CM_RESOURCE_PORT_IO 0x0001
+#define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
+#define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
+#define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
+#define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
+#define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
+#define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
+#define CM_RESOURCE_PORT_BAR 0x0100
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
+#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
+#define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
+#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
+#define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
+#define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
+#define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
+#define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
+#define CM_RESOURCE_MEMORY_24 0x0010
+#define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
+#define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
+#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
+#define CM_RESOURCE_DMA_32 0x0002
+#define CM_RESOURCE_DMA_8_AND_16 0x0004
+#define CM_RESOURCE_DMA_BUS_MASTER 0x0008
+#define CM_RESOURCE_DMA_TYPE_A 0x0010
+#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;
+ 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;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+ 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 <pshpack1.h>
+
+typedef struct _CM_INT13_DRIVE_PARAMETER {
+ 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;
+ ULONG ProductId;
+ UCHAR DeviceType[3];
+ USHORT DeviceAttributes;
+} CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
+
+typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
+ UCHAR Signature[4];
+ UCHAR Revision;
+ UCHAR Length;
+ USHORT ControlField;
+ UCHAR Checksum;
+ ULONG EventFlagAddress;
+ USHORT RealModeEntryOffset;
+ USHORT RealModeEntrySegment;
+ USHORT ProtectedModeEntryOffset;
+ ULONG ProtectedModeCodeBaseAddress;
+ ULONG OemDeviceId;
+ USHORT RealModeDataBaseAddress;
+ ULONG ProtectedModeDataBaseAddress;
+} CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
+
+#include <poppack.h>
+
+typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
+ 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;
+} CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
+
+typedef struct _CM_SCSI_DEVICE_DATA {
+ 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;
+} 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
+} KEY_INFORMATION_CLASS;
+
+typedef struct _KEY_BASIC_INFORMATION {
+ 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];
+} 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];
+} 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];
+} 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];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+ 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];
+} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
+
+typedef struct _KEY_VALUE_ENTRY {
+ PUNICODE_STRING ValueName;
+ ULONG DataLength;
+ ULONG DataOffset;
+ ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+ KeyValueBasicInformation,
+ KeyValueFullInformation,
+ KeyValuePartialInformation,
+ KeyValueFullInformationAlign64,
+ 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;
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+
+typedef enum _REG_NOTIFY_CLASS {
+ RegNtDeleteKey,
+ RegNtPreDeleteKey = RegNtDeleteKey,
+ RegNtSetValueKey,
+ RegNtPreSetValueKey = RegNtSetValueKey,
+ RegNtDeleteValueKey,
+ RegNtPreDeleteValueKey = RegNtDeleteValueKey,
+ RegNtSetInformationKey,
+ RegNtPreSetInformationKey = RegNtSetInformationKey,
+ RegNtRenameKey,
+ RegNtPreRenameKey = RegNtRenameKey,
+ RegNtEnumerateKey,
+ RegNtPreEnumerateKey = RegNtEnumerateKey,
+ RegNtEnumerateValueKey,
+ RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
+ RegNtQueryKey,
+ RegNtPreQueryKey = RegNtQueryKey,
+ RegNtQueryValueKey,
+ RegNtPreQueryValueKey = RegNtQueryValueKey,
+ RegNtQueryMultipleValueKey,
+ RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
+ RegNtPreCreateKey,
+ RegNtPostCreateKey,
+ RegNtPreOpenKey,
+ RegNtPostOpenKey,
+ RegNtKeyHandleClose,
+ RegNtPreKeyHandleClose = RegNtKeyHandleClose,
+ RegNtPostDeleteKey,
+ RegNtPostSetValueKey,
+ RegNtPostDeleteValueKey,
+ RegNtPostSetInformationKey,
+ RegNtPostRenameKey,
+ RegNtPostEnumerateKey,
+ RegNtPostEnumerateValueKey,
+ RegNtPostQueryKey,
+ RegNtPostQueryValueKey,
+ RegNtPostQueryMultipleValueKey,
+ RegNtPostKeyHandleClose,
+ RegNtPreCreateKeyEx,
+ RegNtPostCreateKeyEx,
+ RegNtPreOpenKeyEx,
+ RegNtPostOpenKeyEx,
+ RegNtPreFlushKey,
+ RegNtPostFlushKey,
+ RegNtPreLoadKey,
+ RegNtPostLoadKey,
+ RegNtPreUnLoadKey,
+ RegNtPostUnLoadKey,
+ RegNtPreQueryKeySecurity,
+ RegNtPostQueryKeySecurity,
+ RegNtPreSetKeySecurity,
+ RegNtPostSetKeySecurity,
+ RegNtCallbackObjectContextCleanup,
+ RegNtPreRestoreKey,
+ RegNtPostRestoreKey,
+ RegNtPreSaveKey,
+ RegNtPostSaveKey,
+ RegNtPreReplaceKey,
+ RegNtPostReplaceKey,
+ MaxRegNtNotifyClass
+} 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;
+
+typedef struct _REG_DELETE_KEY_INFORMATION {
+ PVOID Object;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+, REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
+#endif
+;
+
+typedef struct _REG_SET_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ ULONG TitleIndex;
+ ULONG Type;
+ PVOID Data;
+ ULONG DataSize;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
+ PVOID Object;
+ KEY_SET_INFORMATION_CLASS KeySetInformationClass;
+ PVOID KeySetInformation;
+ ULONG KeySetInformationLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_KEY_INFORMATION {
+ PVOID Object;
+ ULONG Index;
+ KEY_INFORMATION_CLASS KeyInformationClass;
+ PVOID KeyInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
+
+typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ ULONG Index;
+ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+ PVOID KeyValueInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_KEY_INFORMATION {
+ PVOID Object;
+ KEY_INFORMATION_CLASS KeyInformationClass;
+ PVOID KeyInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+ PVOID KeyValueInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
+
+typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PKEY_VALUE_ENTRY ValueEntries;
+ ULONG EntryCount;
+ PVOID ValueBuffer;
+ PULONG BufferLength;
+ PULONG RequiredBufferLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ 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;;
+
+typedef struct _REG_POST_CREATE_KEY_INFORMATION {
+ PUNICODE_STRING CompleteName;
+ PVOID Object;
+ NTSTATUS Status;
+} REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
+
+typedef struct _REG_POST_OPERATION_INFORMATION {
+ PVOID Object;
+ NTSTATUS Status;
+ PVOID PreInformation;
+ NTSTATUS ReturnStatus;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+} REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
+
+typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
+ PVOID Object;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ 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)
+
+$endif
+$if (_NTDDK_)
+
+typedef struct _KEY_NAME_INFORMATION {
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
+
+typedef struct _KEY_CACHED_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG SubKeys;
+ ULONG MaxNameLen;
+ ULONG Values;
+ ULONG MaxValueNameLen;
+ ULONG MaxValueDataLen;
+ ULONG NameLength;
+} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
+
+typedef struct _KEY_VIRTUALIZATION_INFORMATION {
+ ULONG VirtualizationCandidate:1;
+ ULONG VirtualizationEnabled:1;
+ ULONG VirtualTarget:1;
+ ULONG VirtualStore:1;
+ ULONG VirtualSource:1;
+ ULONG Reserved:27;
+} KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
+
+#define CmResourceTypeMaximum 8
+
+typedef struct _CM_PCCARD_DEVICE_DATA {
+ UCHAR Flags;
+ UCHAR ErrorCode;
+ USHORT Reserved;
+ ULONG BusData;
+ ULONG DeviceId;
+ ULONG LegacyBaseAddress;
+ UCHAR IRQMap[16];
+} CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA;
+
+$endif /* _NTDDK_ */
--- /dev/null
+/******************************************************************************
+ * Executive Functions *
+ ******************************************************************************/
+$if (_NTDDK_)
+static __inline PVOID
+ExAllocateFromZone(
+ IN PZONE_HEADER Zone)
+{
+ if (Zone->FreeList.Next)
+ Zone->FreeList.Next = Zone->FreeList.Next->Next;
+ return (PVOID) Zone->FreeList.Next;
+}
+
+static __inline PVOID
+ExFreeToZone(
+ IN PZONE_HEADER Zone,
+ IN PVOID Block)
+{
+ ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+ Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+ return ((PSINGLE_LIST_ENTRY) Block)->Next;
+}
+
+/*
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ * IN PZONE_HEADER Zone,
+ * IN PKSPIN_LOCK Lock)
+ */
+#define ExInterlockedAllocateFromZone(Zone, Lock) \
+ ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
+
+/* PVOID
+ * ExInterlockedFreeToZone(
+ * IN PZONE_HEADER Zone,
+ * IN PVOID Block,
+ * IN PKSPIN_LOCK Lock);
+ */
+#define ExInterlockedFreeToZone(Zone, Block, Lock) \
+ ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
+
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ * IN PZONE_HEADER Zone)
+ */
+#define ExIsFullZone(Zone) \
+ ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
+
+/* BOOLEAN
+ * ExIsObjectInFirstZoneSegment(
+ * IN PZONE_HEADER Zone,
+ * IN PVOID Object);
+ */
+#define ExIsObjectInFirstZoneSegment(Zone,Object) \
+ ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
+ ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
+ (Zone)->TotalSegmentSize)) )
+
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
+
+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
+
+$endif
+
+$if (_WDMDDK_)
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
+#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
+#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
+#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
+#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
+
+#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);
+
+#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_)
+#define ExInterlockedAddUlong ExfInterlockedAddUlong
+#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
+#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
+#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
+#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
+#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
+#endif /* defined(_X86_) */
+
+#if defined(_WIN64)
+
+#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
+ defined(_NTHAL_) || defined(_NTOSP_)
+NTKERNELAPI
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead);
+#else
+FORCEINLINE
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+{
+ return (USHORT)(ListHead->Alignment & 0xffff);
+}
+#endif
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedFlushSList(
+ PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPopEntrySList(
+ PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPushEntrySList(
+ PSLIST_HEADER ListHead,
+ PSLIST_ENTRY ListEntry);
+
+#define ExInterlockedFlushSList(Head) \
+ ExpInterlockedFlushSList(Head)
+#define ExInterlockedPopEntrySList(Head, Lock) \
+ ExpInterlockedPopEntrySList(Head)
+#define ExInterlockedPushEntrySList(Head, Entry, Lock) \
+ ExpInterlockedPushEntrySList(Head, Entry)
+
+#else /* !defined(_WIN64) */
+
+#define ExQueryDepthSList(listhead) (listhead)->Depth
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList(
+ IN OUT PSLIST_HEADER ListHead);
+
+#endif /* !defined(_WIN64) */
+
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPopEntrySList(
+ 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)
+#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 */
+
+
+/* ERESOURCE_THREAD
+ * ExGetCurrentResourceThread(
+ * VOID);
+ */
+#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
+
+#define ExReleaseResource(R) (ExReleaseResourceLite(R))
+
+/* VOID
+ * ExInitializeWorkItem(
+ * IN PWORK_QUEUE_ITEM Item,
+ * IN PWORKER_THREAD_ROUTINE Routine,
+ * IN PVOID Context)
+ */
+#define ExInitializeWorkItem(Item, Routine, Context) \
+{ \
+ (Item)->WorkerRoutine = Routine; \
+ (Item)->Parameter = Context; \
+ (Item)->List.Flink = NULL; \
+}
+
+FORCEINLINE
+VOID
+ExInitializeFastMutex(
+ OUT PFAST_MUTEX FastMutex)
+{
+ FastMutex->Count = FM_LOCK_BIT;
+ FastMutex->Owner = NULL;
+ FastMutex->Contention = 0;
+ KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
+ return;
+}
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExExtendZone(
+ IN OUT PZONE_HEADER Zone,
+ IN OUT PVOID Segment,
+ IN ULONG SegmentSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeZone(
+ OUT PZONE_HEADER Zone,
+ IN ULONG BlockSize,
+ IN OUT PVOID InitialSegment,
+ IN ULONG InitialSegmentSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInterlockedExtendZone(
+ IN OUT PZONE_HEADER Zone,
+ IN OUT PVOID Segment,
+ IN ULONG SegmentSize,
+ IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExUuidCreate(
+ OUT UUID *Uuid);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseAccessViolation(VOID);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseDatatypeMisalignment(VOID);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+ExAcquireFastMutexUnsafe(
+ IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseFastMutexUnsafe(
+ IN OUT PFAST_MUTEX FastMutex);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireResourceExclusiveLite(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireResourceSharedLite(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedStarveExclusive(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExAcquireSharedWaitForExclusive(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePool(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuota(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithQuotaTag(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag);
+
+#ifndef POOL_TAGGING
+#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
+#endif
+
+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
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTagPriority(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag,
+ IN EX_POOL_PRIORITY Priority);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExConvertExclusiveToSharedLite(
+ IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExCreateCallback(
+ OUT PCALLBACK_OBJECT *CallbackObject,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN BOOLEAN Create,
+ IN BOOLEAN AllowMultipleCallbacks);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDeleteNPagedLookasideList(
+ IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDeletePagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExDeleteResourceLite(
+ IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePool(
+ IN PVOID P);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePoolWithTag(
+ IN PVOID P,
+ IN ULONG Tag);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExGetExclusiveWaiterCount(
+ IN PERESOURCE Resource);
+
+NTKERNELAPI
+KPROCESSOR_MODE
+NTAPI
+ExGetPreviousMode(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExGetSharedWaiterCount(
+ 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);
+
+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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExInitializeResourceLite(
+ OUT PERESOURCE Resource);
+
+NTKERNELAPI
+LARGE_INTEGER
+NTAPI
+ExInterlockedAddLargeInteger(
+ IN PLARGE_INTEGER Addend,
+ IN LARGE_INTEGER Increment,
+ IN PKSPIN_LOCK Lock);
+
+#if defined(_WIN64)
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+ (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
+#else
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+ _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
+#endif
+
+NTKERNELAPI
+ULONG
+FASTCALL
+ExInterlockedAddUlong(
+ IN PULONG Addend,
+ IN ULONG Increment,
+ IN OUT 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);
+
+#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_) */
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertHeadList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY ListEntry,
+ IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedInsertTailList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY ListEntry,
+ IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPopEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead,
+ IN OUT 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);
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExInterlockedRemoveHeadList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PKSPIN_LOCK Lock);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExIsProcessorFeaturePresent(
+ IN ULONG ProcessorFeature);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExIsResourceAcquiredExclusiveLite(
+ IN PERESOURCE Resource);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExIsResourceAcquiredSharedLite(
+ IN PERESOURCE Resource);
+
+#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
+
+NTKERNELAPI
+VOID
+NTAPI
+ExLocalTimeToSystemTime(
+ IN PLARGE_INTEGER LocalTime,
+ OUT PLARGE_INTEGER SystemTime);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExNotifyCallback(
+ IN PCALLBACK_OBJECT CallbackObject,
+ IN PVOID Argument1 OPTIONAL,
+ IN PVOID Argument2 OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExQueueWorkItem(
+ IN OUT PWORK_QUEUE_ITEM WorkItem,
+ IN WORK_QUEUE_TYPE QueueType);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+ExRaiseStatus(
+ IN NTSTATUS Status);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExRegisterCallback(
+ IN PCALLBACK_OBJECT CallbackObject,
+ IN PCALLBACK_FUNCTION CallbackFunction,
+ IN PVOID CallbackContext OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ExReinitializeResourceLite(
+ IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExReleaseResourceForThreadLite(
+ IN OUT PERESOURCE Resource,
+ IN ERESOURCE_THREAD ResourceThreadId);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceLite(
+ IN OUT PERESOURCE Resource);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExSetResourceOwnerPointer(
+ IN OUT PERESOURCE Resource,
+ IN PVOID OwnerPointer);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExSetTimerResolution(
+ IN ULONG DesiredTime,
+ IN BOOLEAN SetResolution);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExSystemTimeToLocalTime(
+ IN PLARGE_INTEGER SystemTime,
+ OUT PLARGE_INTEGER LocalTime);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExUnregisterCallback(
+ IN OUT PVOID CbRegistration);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExInitializeRundownProtection(
+ OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReInitializeRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExRundownCompleted(
+ OUT PEX_RUNDOWN_REF RunRef);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExVerifySuite(
+ IN SUITE_TYPE SuiteType);
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease(
+ IN OUT PEX_RUNDOWN_REF RunRef);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx(
+ 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) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+NTKERNELAPI
+PEX_RUNDOWN_REF_CACHE_AWARE
+NTAPI
+ExAllocateCacheAwareRundownProtection(
+ 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) */
+
+#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);
+
+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) */
+
+static __inline PVOID
+ExAllocateFromNPagedLookasideList(
+ IN OUT PNPAGED_LOOKASIDE_LIST Lookaside)
+{
+ 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;
+}
+
+static __inline VOID
+ExFreeToNPagedLookasideList(
+ IN OUT 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
+ }
+}
+
+$endif
+
--- /dev/null
+/******************************************************************************
+ * Executive Types *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#define EX_RUNDOWN_ACTIVE 0x1
+#define EX_RUNDOWN_COUNT_SHIFT 0x1
+#define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
+
+typedef struct _FAST_MUTEX {
+ volatile LONG Count;
+ PKTHREAD Owner;
+ ULONG Contention;
+ KEVENT Event;
+ ULONG OldIrql;
+} 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
+} SUITE_TYPE;
+
+typedef enum _EX_POOL_PRIORITY {
+ 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_))
+#define LOOKASIDE_ALIGN
+#else
+#define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
+#endif
+
+typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
+
+typedef PVOID
+(NTAPI *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);
+
+typedef VOID
+(NTAPI *PFREE_FUNCTION)(
+ IN PVOID Buffer);
+
+typedef VOID
+(NTAPI *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;
+
+#define GENERAL_LOOKASIDE_LAYOUT \
+ union { \
+ SLIST_HEADER ListHead; \
+ SINGLE_LIST_ENTRY SingleListHead; \
+ } DUMMYUNIONNAME; \
+ USHORT Depth; \
+ USHORT MaximumDepth; \
+ ULONG TotalAllocates; \
+ union { \
+ ULONG AllocateMisses; \
+ ULONG AllocateHits; \
+ } DUMMYUNIONNAME2; \
+ \
+ ULONG TotalFrees; \
+ union { \
+ ULONG FreeMisses; \
+ ULONG FreeHits; \
+ } DUMMYUNIONNAME3; \
+ \
+ POOL_TYPE Type; \
+ ULONG Tag; \
+ ULONG Size; \
+ union { \
+ PALLOCATE_FUNCTION_EX AllocateEx; \
+ PALLOCATE_FUNCTION Allocate; \
+ } DUMMYUNIONNAME4; \
+ \
+ union { \
+ PFREE_FUNCTION_EX FreeEx; \
+ PFREE_FUNCTION Free; \
+ } DUMMYUNIONNAME5; \
+ \
+ LIST_ENTRY ListEntry; \
+ ULONG LastTotalAllocates; \
+ union { \
+ ULONG LastAllocateMisses; \
+ ULONG LastAllocateHits; \
+ } DUMMYUNIONNAME6; \
+ ULONG Future[2];
+
+typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
+ GENERAL_LOOKASIDE_LAYOUT
+} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
+
+typedef struct _GENERAL_LOOKASIDE_POOL {
+ 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;
+#if !defined(_AMD64_) && !defined(_IA64_)
+ FAST_MUTEX Lock__ObsoleteButDoNotDelete;
+#endif
+} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
+
+typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
+ GENERAL_LOOKASIDE L;
+#if !defined(_AMD64_) && !defined(_IA64_)
+ 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;
+} 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;
+ };
+} 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 VOID
+(NTAPI WORKER_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;
+} 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
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+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
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+
+
+..\..\output-i386\tools\hpp\hpp.exe wdm.template.h wdm.h
+..\..\output-i386\tools\hpp\hpp.exe ntddk.template.h ntddk.h
--- /dev/null
+/* Hardware Abstraction Layer Functions */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+$if (_WDMDDK_)
+
+FORCEINLINE
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN ULONG Length,
+ OUT PPHYSICAL_ADDRESS LogicalAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+ PVOID commonBuffer;
+
+ allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+ ASSERT( allocateCommonBuffer != NULL );
+ commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+ return commonBuffer;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+HalFreeCommonBuffer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN ULONG Length,
+ IN PHYSICAL_ADDRESS LogicalAddress,
+ IN PVOID VirtualAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PFREE_COMMON_BUFFER freeCommonBuffer;
+
+ freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+ ASSERT( freeCommonBuffer != NULL );
+ freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+HalReadDmaCounter(
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ PREAD_DMA_COUNTER readDmaCounter;
+ ULONG counter;
+
+ readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+ ASSERT( readDmaCounter != NULL );
+ counter = readDmaCounter( DmaAdapter );
+ return counter;
+}
+
+FORCEINLINE
+ULONG
+HalGetDmaAlignment(
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ PGET_DMA_ALIGNMENT getDmaAlignment;
+ ULONG alignment;
+
+ getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
+ ASSERT( getDmaAlignment != NULL );
+ alignment = getDmaAlignment( DmaAdapter );
+ return alignment;
+}
+
+$endif
+$if (_NTDDK_)
+
+/* Nothing here */
+
+#else /* USE_DMA_MACROS ... */
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+BOOLEAN
+NTAPI
+IoFlushAdapterBuffers(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN ULONG Length,
+ IN BOOLEAN WriteToDevice);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+IoFreeMapRegisters(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PVOID MapRegisterBase,
+ IN ULONG NumberOfMapRegisters);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Length,
+ OUT PPHYSICAL_ADDRESS LogicalAddress,
+ IN BOOLEAN CacheEnabled);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
+NTAPI
+HalFreeCommonBuffer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Length,
+ IN PHYSICAL_ADDRESS LogicalAddress,
+ IN PVOID VirtualAddress,
+ IN BOOLEAN CacheEnabled);
+
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+ULONG
+NTAPI
+HalReadDmaCounter(
+ IN PADAPTER_OBJECT AdapterObject);
+
+NTHALAPI
+NTSTATUS
+NTAPI
+HalAllocateAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PWAIT_CONTEXT_BLOCK Wcb,
+ IN ULONG NumberOfMapRegisters,
+ IN PDRIVER_CONTROL ExecutionRoutine);
+
+$endif /* _NTDDK_ */
+#endif /* USE_DMA_MACROS ... */
+$if (_NTDDK_)
+
+#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 /* _NTDDK_ */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+$if (_NTDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+VOID
+FASTCALL
+HalExamineMBR(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG MBRTypeIdentifier,
+ OUT PVOID *Buffer);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTSTATUS
+NTAPI
+HalAllocateHardwareCounters(
+ IN PGROUP_AFFINITY GroupAffinty,
+ IN ULONG GroupCount,
+ IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
+ OUT PHANDLE CounterSetHandle);
+
+NTSTATUS
+NTAPI
+HalFreeHardwareCounters(
+ IN HANDLE CounterSetHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#if defined(_IA64_)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTHALAPI
+ULONG
+NTAPI
+HalGetDmaAlignmentRequirement(VOID);
+#endif
+#endif /* defined(_IA64_) */
+
+#if defined(_M_IX86) || defined(_M_AMD64)
+#define HalGetDmaAlignmentRequirement() 1L
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
+typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
+
+NTHALAPI
+VOID
+NTAPI
+HalBugCheckSystem(
+ IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
+ IN PWHEA_ERROR_RECORD ErrorRecord);
+
+#else
+
+typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
+
+NTHALAPI
+VOID
+NTAPI
+HalBugCheckSystem(
+ IN PWHEA_ERROR_RECORD ErrorRecord);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+/* Hardware Abstraction Layer Types */
+
+$if (_NTDDK_)
+typedef BOOLEAN
+(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
+ IN ULONG Columns,
+ IN ULONG Rows);
+
+typedef PBUS_HANDLER
+(FASTCALL *pHalHandlerForBus)(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber);
+
+typedef VOID
+(FASTCALL *pHalReferenceBusHandler)(
+ IN PBUS_HANDLER BusHandler);
+
+typedef enum _HAL_QUERY_INFORMATION_CLASS {
+ HalInstalledBusInformation,
+ HalProfileSourceInformation,
+ HalInformationClassUnused1,
+ HalPowerInformation,
+ HalProcessorSpeedInformation,
+ HalCallbackInformation,
+ HalMapRegisterInformation,
+ HalMcaLogInformation,
+ HalFrameBufferCachingInformation,
+ HalDisplayBiosInformation,
+ HalProcessorFeatureInformation,
+ HalNumaTopologyInterface,
+ HalErrorInformation,
+ HalCmcLogInformation,
+ HalCpeLogInformation,
+ HalQueryMcaInterface,
+ HalQueryAMLIIllegalIOPortAddresses,
+ HalQueryMaxHotPlugMemoryAddress,
+ HalPartitionIpiInterface,
+ HalPlatformInformation,
+ HalQueryProfileSourceList,
+ HalInitLogInformation,
+ HalFrequencyInformation,
+ HalProcessorBrandString,
+ HalHypervisorInformation,
+ HalPlatformTimerInformation,
+ HalAcpiAuditInformation
+} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
+
+typedef enum _HAL_SET_INFORMATION_CLASS {
+ HalProfileSourceInterval,
+ HalProfileSourceInterruptHandler,
+ HalMcaRegisterDriver,
+ HalKernelErrorHandler,
+ HalCmcRegisterDriver,
+ HalCpeRegisterDriver,
+ HalMcaLog,
+ HalCmcLog,
+ HalCpeLog,
+ HalGenerateCmcInterrupt,
+ HalProfileSourceTimerHandler,
+ HalEnlightenment,
+ HalProfileDpgoSourceInterruptHandler
+} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
+
+typedef NTSTATUS
+(NTAPI *pHalQuerySystemInformation)(
+ IN HAL_QUERY_INFORMATION_CLASS InformationClass,
+ IN ULONG BufferSize,
+ IN OUT PVOID Buffer,
+ OUT PULONG ReturnedLength);
+
+typedef NTSTATUS
+(NTAPI *pHalSetSystemInformation)(
+ IN HAL_SET_INFORMATION_CLASS InformationClass,
+ IN ULONG BufferSize,
+ IN PVOID Buffer);
+
+typedef VOID
+(FASTCALL *pHalExamineMBR)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG MBRTypeIdentifier,
+ OUT PVOID *Buffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoReadPartitionTable)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoSetPartitionInformation)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG PartitionNumber,
+ IN ULONG PartitionType);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoWritePartitionTable)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG SectorsPerTrack,
+ IN ULONG NumberOfHeads,
+ IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+typedef NTSTATUS
+(NTAPI *pHalQueryBusSlots)(
+ IN PBUS_HANDLER BusHandler,
+ IN ULONG BufferSize,
+ OUT PULONG SlotNumbers,
+ OUT PULONG ReturnedLength);
+
+typedef NTSTATUS
+(NTAPI *pHalInitPnpDriver)(
+ VOID);
+
+typedef struct _PM_DISPATCH_TABLE {
+ ULONG Signature;
+ ULONG Version;
+ PVOID Function[1];
+} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
+
+typedef NTSTATUS
+(NTAPI *pHalInitPowerManagement)(
+ IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
+ OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
+
+typedef struct _DMA_ADAPTER*
+(NTAPI *pHalGetDmaAdapter)(
+ IN PVOID Context,
+ IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
+ OUT PULONG NumberOfMapRegisters);
+
+typedef NTSTATUS
+(NTAPI *pHalGetInterruptTranslator)(
+ IN INTERFACE_TYPE ParentInterfaceType,
+ IN ULONG ParentBusNumber,
+ IN INTERFACE_TYPE BridgeInterfaceType,
+ IN USHORT Size,
+ IN USHORT Version,
+ OUT PTRANSLATOR_INTERFACE Translator,
+ OUT PULONG BridgeBusNumber);
+
+typedef NTSTATUS
+(NTAPI *pHalStartMirroring)(
+ VOID);
+
+typedef NTSTATUS
+(NTAPI *pHalEndMirroring)(
+ IN ULONG PassNumber);
+
+typedef NTSTATUS
+(NTAPI *pHalMirrorPhysicalMemory)(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN LARGE_INTEGER NumberOfBytes);
+
+typedef NTSTATUS
+(NTAPI *pHalMirrorVerify)(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN LARGE_INTEGER NumberOfBytes);
+
+typedef BOOLEAN
+(NTAPI *pHalTranslateBusAddress)(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress);
+
+typedef NTSTATUS
+(NTAPI *pHalAssignSlotResources)(
+ IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING DriverClassName OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+typedef VOID
+(NTAPI *pHalHaltSystem)(
+ VOID);
+
+typedef BOOLEAN
+(NTAPI *pHalResetDisplay)(
+ VOID);
+
+typedef struct _MAP_REGISTER_ENTRY {
+ PVOID MapRegister;
+ BOOLEAN WriteToDevice;
+} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
+
+typedef UCHAR
+(NTAPI *pHalVectorToIDTEntry)(
+ ULONG Vector);
+
+typedef BOOLEAN
+(NTAPI *pHalFindBusAddressTranslation)(
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress,
+ IN OUT PULONG_PTR Context,
+ IN BOOLEAN NextBus);
+
+typedef VOID
+(NTAPI *pHalEndOfBoot)(
+ VOID);
+
+typedef PVOID
+(NTAPI *pHalGetAcpiTable)(
+ IN ULONG Signature,
+ IN PCSTR OemId OPTIONAL,
+ IN PCSTR OemTableId OPTIONAL);
+
+#if defined(_IA64_)
+typedef NTSTATUS
+(*pHalGetErrorCapList)(
+ IN OUT PULONG CapsListLength,
+ IN OUT PUCHAR ErrorCapList);
+
+typedef NTSTATUS
+(*pHalInjectError)(
+ IN ULONG BufferLength,
+ IN PUCHAR Buffer);
+#endif
+
+typedef VOID
+(NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
+ VOID);
+
+typedef VOID
+(NTAPI *pHalSetPciErrorHandlerCallback)(
+ IN PCI_ERROR_HANDLER_CALLBACK Callback);
+
+#if 1 /* Not present in WDK 7600 */
+typedef VOID
+(FASTCALL *pHalIoAssignDriveLetters)(
+ IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+ IN PSTRING NtDeviceName,
+ OUT PUCHAR NtSystemPath,
+ OUT PSTRING NtSystemPathString);
+#endif
+
+typedef struct {
+ ULONG Version;
+ pHalQuerySystemInformation HalQuerySystemInformation;
+ pHalSetSystemInformation HalSetSystemInformation;
+ pHalQueryBusSlots HalQueryBusSlots;
+ ULONG Spare1;
+ pHalExamineMBR HalExamineMBR;
+#if 1 /* Not present in WDK 7600 */
+ pHalIoAssignDriveLetters HalIoAssignDriveLetters;
+#endif
+ pHalIoReadPartitionTable HalIoReadPartitionTable;
+ pHalIoSetPartitionInformation HalIoSetPartitionInformation;
+ pHalIoWritePartitionTable HalIoWritePartitionTable;
+ pHalHandlerForBus HalReferenceHandlerForBus;
+ pHalReferenceBusHandler HalReferenceBusHandler;
+ pHalReferenceBusHandler HalDereferenceBusHandler;
+ pHalInitPnpDriver HalInitPnpDriver;
+ pHalInitPowerManagement HalInitPowerManagement;
+ pHalGetDmaAdapter HalGetDmaAdapter;
+ pHalGetInterruptTranslator HalGetInterruptTranslator;
+ pHalStartMirroring HalStartMirroring;
+ pHalEndMirroring HalEndMirroring;
+ pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
+ pHalEndOfBoot HalEndOfBoot;
+ pHalMirrorVerify HalMirrorVerify;
+ pHalGetAcpiTable HalGetCachedAcpiTable;
+ pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback;
+#if defined(_IA64_)
+ pHalGetErrorCapList HalGetErrorCapList;
+ pHalInjectError HalInjectError;
+#endif
+} HAL_DISPATCH, *PHAL_DISPATCH;
+
+/* GCC/MSVC and WDK compatible declaration */
+extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
+
+#if defined(_NTOSKRNL_) || defined(_BLDR_)
+#define HALDISPATCH (&HalDispatchTable)
+#else
+/* This is a WDK compatibility definition */
+#define HalDispatchTable (&HalDispatchTable)
+#define HALDISPATCH HalDispatchTable
+#endif
+
+#define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
+#define HalDispatchTableVersion HALDISPATCH->Version
+#define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
+#define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
+#define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
+#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
+#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
+#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
+#define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
+#define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
+#define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
+#define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
+#define HalStartMirroring HALDISPATCH->HalStartMirroring
+#define HalEndMirroring HALDISPATCH->HalEndMirroring
+#define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
+#define HalEndOfBoot HALDISPATCH->HalEndOfBoot
+#define HalMirrorVerify HALDISPATCH->HalMirrorVerify
+#define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
+#define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
+#if defined(_IA64_)
+#define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
+#define HalInjectError HALDISPATCH->HalInjectError
+#endif
+
+typedef struct _HAL_BUS_INFORMATION {
+ INTERFACE_TYPE BusType;
+ BUS_DATA_TYPE ConfigurationType;
+ ULONG BusNumber;
+ ULONG Reserved;
+} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
+ KPROFILE_SOURCE Source;
+ BOOLEAN Supported;
+ ULONG Interval;
+} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
+
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
+ KPROFILE_SOURCE Source;
+ BOOLEAN Supported;
+ ULONG_PTR Interval;
+ ULONG_PTR DefInterval;
+ ULONG_PTR MaxInterval;
+ ULONG_PTR MinInterval;
+} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
+
+typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
+ KPROFILE_SOURCE Source;
+ ULONG_PTR Interval;
+} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
+
+typedef struct _HAL_PROFILE_SOURCE_LIST {
+ KPROFILE_SOURCE Source;
+ PWSTR Description;
+} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
+
+typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
+ HalDisplayInt10Bios,
+ HalDisplayEmulatedBios,
+ HalDisplayNoBios
+} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
+
+typedef struct _HAL_POWER_INFORMATION {
+ ULONG TBD;
+} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
+
+typedef struct _HAL_PROCESSOR_SPEED_INFO {
+ ULONG ProcessorSpeed;
+} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
+
+typedef struct _HAL_CALLBACKS {
+ PCALLBACK_OBJECT SetSystemInformation;
+ PCALLBACK_OBJECT BusCheck;
+} HAL_CALLBACKS, *PHAL_CALLBACKS;
+
+typedef struct _HAL_PROCESSOR_FEATURE {
+ ULONG UsableFeatureBits;
+} HAL_PROCESSOR_FEATURE;
+
+typedef NTSTATUS
+(NTAPI *PHALIOREADWRITEHANDLER)(
+ IN BOOLEAN fRead,
+ IN ULONG dwAddr,
+ IN ULONG dwSize,
+ 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
+$endif
+
--- /dev/null
+$if (_WDMDDK_)
+/** 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);
+
+$endif
+
--- /dev/null
+/******************************************************************************
+ * INTERLOCKED Functions *
+ ******************************************************************************/
+//
+// Intrinsics (note: taken from our winnt.h)
+// FIXME: 64-bit
+//
+#if defined(__GNUC__)
+
+static __inline__ BOOLEAN
+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;
+#else
+ return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
+#endif
+}
+
+static __inline__ BOOLEAN
+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;
+#else
+ return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
+#endif
+}
+
+#endif /* defined(__GNUC__) */
+
+#define BitScanForward _BitScanForward
+#define BitScanReverse _BitScanReverse
+#define BitTest _bittest
+#define BitTestAndComplement _bittestandcomplement
+#define BitTestAndSet _bittestandset
+#define BitTestAndReset _bittestandreset
+#define InterlockedBitTestAndSet _interlockedbittestandset
+#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
+
+#if !defined(__INTERLOCKED_DECLARED)
+#define __INTERLOCKED_DECLARED
+
+#if defined (_X86_)
+#if defined(NO_INTERLOCKED_INTRINSICS)
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedIncrement(
+ IN OUT LONG volatile *Addend);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedDecrement(
+ IN OUT LONG volatile *Addend);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedCompareExchange(
+ IN OUT LONG volatile *Destination,
+ IN LONG Exchange,
+ IN LONG Comparand);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedExchange(
+ IN OUT LONG volatile *Destination,
+ IN LONG Value);
+
+NTKERNELAPI
+LONG
+FASTCALL
+InterlockedExchangeAdd(
+ IN OUT LONG volatile *Addend,
+ IN LONG Value);
+
+#else /* !defined(NO_INTERLOCKED_INTRINSICS) */
+
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedOr _InterlockedOr
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedXor _InterlockedXor
+
+#endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
+
+#endif /* defined (_X86_) */
+
+#if !defined (_WIN64)
+/*
+ * PVOID
+ * InterlockedExchangePointer(
+ * IN OUT PVOID volatile *Target,
+ * IN PVOID Value)
+ */
+#define InterlockedExchangePointer(Target, Value) \
+ ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
+
+/*
+ * PVOID
+ * InterlockedCompareExchangePointer(
+ * IN OUT PVOID *Destination,
+ * IN PVOID Exchange,
+ * IN PVOID Comparand)
+ */
+#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
+ ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
+#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
+
+#endif // !defined (_WIN64)
+
+#if defined (_M_AMD64)
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
+#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
+#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedOr _InterlockedOr
+#define InterlockedXor _InterlockedXor
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedAdd _InterlockedAdd
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedAnd64 _InterlockedAnd64
+#define InterlockedOr64 _InterlockedOr64
+#define InterlockedXor64 _InterlockedXor64
+#define InterlockedIncrement64 _InterlockedIncrement64
+#define InterlockedDecrement64 _InterlockedDecrement64
+#define InterlockedAdd64 _InterlockedAdd64
+#define InterlockedExchange64 _InterlockedExchange64
+#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
+#define InterlockedCompareExchange64 _InterlockedCompareExchange64
+#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
+#define InterlockedExchangePointer _InterlockedExchangePointer
+#define InterlockedBitTestAndSet64 _interlockedbittestandset64
+#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
+
+#endif // _M_AMD64
+
+#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
+//#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for?
+FORCEINLINE
+LONG64
+InterlockedAdd64(
+ IN OUT LONG64 volatile *Addend,
+ IN LONG64 Value)
+{
+ return InterlockedExchangeAdd64(Addend, Value) + Value;
+}
+//#endif
+#endif
+
+#endif /* !__INTERLOCKED_DECLARED */
+
+
--- /dev/null
+/******************************************************************************
+ * I/O Manager Functions *
+ ******************************************************************************/
+$if (_NTDDK_)
+/*
+ * VOID IoAssignArcName(
+ * IN PUNICODE_STRING ArcName,
+ * IN PUNICODE_STRING DeviceName);
+ */
+#define IoAssignArcName(_ArcName, _DeviceName) ( \
+ IoCreateSymbolicLink((_ArcName), (_DeviceName)))
+
+/*
+ * VOID
+ * IoDeassignArcName(
+ * IN PUNICODE_STRING ArcName)
+ */
+#define IoDeassignArcName IoDeleteSymbolicLink
+
+VOID
+FORCEINLINE
+NTAPI
+IoInitializeDriverCreateContext(
+ PIO_DRIVER_CREATE_CONTEXT DriverContext)
+{
+ RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
+ DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
+}
+$endif
+
+
+$if (_WDMDDK_)
+/*
+ * 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
+NTAPI
+READ_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+READ_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+READ_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+UCHAR
+NTAPI
+READ_PORT_UCHAR(
+ IN PUCHAR Port);
+
+NTHALAPI
+ULONG
+NTAPI
+READ_PORT_ULONG(
+ IN PULONG Port);
+
+NTHALAPI
+USHORT
+NTAPI
+READ_PORT_USHORT(
+ IN PUSHORT Port);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+READ_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+UCHAR
+NTAPI
+READ_REGISTER_UCHAR(
+ IN PUCHAR Register);
+
+NTKERNELAPI
+ULONG
+NTAPI
+READ_REGISTER_ULONG(
+ IN PULONG Register);
+
+NTKERNELAPI
+USHORT
+NTAPI
+READ_REGISTER_USHORT(
+ IN PUSHORT Register);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_UCHAR(
+ IN PUCHAR Port,
+ IN UCHAR Value);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_ULONG(
+ IN PULONG Port,
+ IN ULONG Value);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_USHORT(
+ IN PUSHORT Port,
+ IN USHORT Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_UCHAR(
+ IN PUCHAR Register,
+ IN UCHAR Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_ULONG(
+ IN PULONG Register,
+ IN ULONG Value);
+
+NTKERNELAPI
+VOID
+NTAPI
+WRITE_REGISTER_USHORT(
+ IN PUSHORT Register,
+ IN USHORT Value);
+
+#else
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_PORT_UCHAR(
+ IN PUCHAR Port)
+{
+ return __inbyte((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+ULONG
+READ_PORT_ULONG(
+ IN PULONG Port)
+{
+ return __indword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+USHORT
+READ_PORT_USHORT(
+ IN PUSHORT Port)
+{
+ return __inword((USHORT)(ULONG_PTR)Port);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __movsb(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __movsd(Register, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __movsw(Register, Buffer, Count);
+}
+
+FORCEINLINE
+UCHAR
+READ_REGISTER_UCHAR(
+ IN volatile UCHAR *Register)
+{
+ return *Register;
+}
+
+FORCEINLINE
+ULONG
+READ_REGISTER_ULONG(
+ IN volatile ULONG *Register)
+{
+ return *Register;
+}
+
+FORCEINLINE
+USHORT
+READ_REGISTER_USHORT(
+ IN volatile USHORT *Register)
+{
+ return *Register;
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_UCHAR(
+ IN PUCHAR Port,
+ IN UCHAR Value)
+{
+ __outbyte((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_ULONG(
+ IN PULONG Port,
+ IN ULONG Value)
+{
+ __outdword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_USHORT(
+ IN PUSHORT Port,
+ IN USHORT Value)
+{
+ __outword((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsb(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsd(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsw(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_UCHAR(
+ IN volatile UCHAR *Register,
+ IN UCHAR Value)
+{
+ LONG Synch;
+ *Register = Value;
+ InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_ULONG(
+ IN volatile ULONG *Register,
+ IN ULONG Value)
+{
+ LONG Synch;
+ *Register = Value;
+ InterlockedOr(&Synch, 1);
+}
+
+FORCEINLINE
+VOID
+WRITE_REGISTER_USHORT(
+ IN volatile USHORT *Register,
+ IN USHORT Value)
+{
+ LONG Sync;
+ *Register = Value;
+ InterlockedOr(&Sync, 1);
+}
+#endif
+
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
+ (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+
+#define DMA_MACROS_DEFINED
+
+FORCEINLINE
+NTSTATUS
+IoAllocateAdapterChannel(
+ 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 );
+}
+
+FORCEINLINE
+BOOLEAN
+NTAPI
+IoFlushAdapterBuffers(
+ 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);
+}
+
+FORCEINLINE
+VOID
+NTAPI
+IoFreeAdapterChannel(
+ IN PDMA_ADAPTER 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)
+{
+ 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)
+{
+ PMAP_TRANSFER MapTransfer;
+
+ MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
+ ASSERT(MapTransfer);
+ return MapTransfer(DmaAdapter,
+ Mdl,
+ MapRegisterBase,
+ CurrentVa,
+ Length,
+ WriteToDevice);
+}
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG NumberOfMapRegisters,
+ IN PDRIVER_CONTROL ExecutionRoutine,
+ IN PVOID Context);
+#endif
+
+#if !defined(DMA_MACROS_DEFINED)
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
+NTAPI
+IoMapTransfer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN OUT PULONG Length,
+ IN BOOLEAN WriteToDevice);
+#endif
+
+NTKERNELAPI
+VOID
+NTAPI
+IoAllocateController(
+ IN PCONTROLLER_OBJECT ControllerObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PDRIVER_CONTROL ExecutionRoutine,
+ IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+PCONTROLLER_OBJECT
+NTAPI
+IoCreateController(
+ IN ULONG Size);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDeleteController(
+ IN PCONTROLLER_OBJECT ControllerObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeController(
+ IN PCONTROLLER_OBJECT ControllerObject);
+
+NTKERNELAPI
+PCONFIGURATION_INFORMATION
+NTAPI
+IoGetConfigurationInformation(VOID);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetDeviceToVerify(
+ IN PETHREAD Thread);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoCancelFileOpen(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PFILE_OBJECT FileObject);
+
+NTKERNELAPI
+PGENERIC_MAPPING
+NTAPI
+IoGetFileObjectGenericMapping(VOID);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoMakeAssociatedIrp(
+ IN PIRP Irp,
+ IN CCHAR StackSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryDeviceDescription(
+ IN PINTERFACE_TYPE BusType OPTIONAL,
+ IN PULONG BusNumber OPTIONAL,
+ IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
+ IN PULONG ControllerNumber OPTIONAL,
+ IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
+ IN PULONG PeripheralNumber OPTIONAL,
+ IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+ IN OUT PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRaiseHardError(
+ IN PIRP Irp,
+ IN PVPB Vpb OPTIONAL,
+ IN PDEVICE_OBJECT RealDeviceObject);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoRaiseInformationalHardError(
+ IN NTSTATUS ErrorStatus,
+ IN PUNICODE_STRING String OPTIONAL,
+ IN PKTHREAD Thread OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterBootDriverReinitialization(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterDriverReinitialization(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceByPointer(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportDetectedDevice(
+ IN PDRIVER_OBJECT DriverObject,
+ IN INTERFACE_TYPE LegacyBusType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
+ IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
+ IN BOOLEAN ResourceAssigned,
+ IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportResourceForDetection(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+ IN ULONG DriverListSize OPTIONAL,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+ IN ULONG DeviceListSize OPTIONAL,
+ OUT PBOOLEAN ConflictDetected);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportResourceUsage(
+ IN PUNICODE_STRING DriverClassName OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+ IN ULONG DriverListSize OPTIONAL,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+ IN ULONG DeviceListSize OPTIONAL,
+ IN BOOLEAN OverrideConflict,
+ OUT PBOOLEAN ConflictDetected);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetHardErrorOrVerifyDevice(
+ IN PIRP Irp,
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAssignResources(
+ IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING DriverClassName OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoSetThreadHardErrorMode(
+ IN BOOLEAN EnableHardErrors);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+IoAcquireCancelSpinLock(
+ 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);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAllocateDriverObjectExtension(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PVOID ClientIdentificationAddress,
+ IN ULONG DriverObjectExtensionSize,
+ OUT PVOID *DriverObjectExtension);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoAllocateErrorLogEntry(
+ IN PVOID IoObject,
+ IN UCHAR EntrySize);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoAllocateIrp(
+ 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);
+
+NTKERNELAPI
+PIO_WORKITEM
+NTAPI
+IoAllocateWorkItem(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDevice(
+ 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);
+
+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);
+
+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);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoBuildPartialMdl(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IofCallDriver(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN OUT PIRP Irp);
+#define IoCallDriver IofCallDriver
+
+NTKERNELAPI
+VOID
+FASTCALL
+IofCompleteRequest(
+ IN PIRP Irp,
+ IN CCHAR PriorityBoost);
+#define IoCompleteRequest IofCompleteRequest
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoCancelIrp(
+ 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);
+
+NTKERNELAPI
+VOID
+FASTCALL
+IofCompleteRequest(
+ 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);
+
+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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFile(
+ 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);
+
+NTKERNELAPI
+PKEVENT
+NTAPI
+IoCreateNotificationEvent(
+ IN PUNICODE_STRING EventName,
+ OUT PHANDLE EventHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN PUNICODE_STRING DeviceName);
+
+NTKERNELAPI
+PKEVENT
+NTAPI
+IoCreateSynchronizationEvent(
+ IN PUNICODE_STRING EventName,
+ OUT PHANDLE EventHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateUnprotectedSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN PUNICODE_STRING DeviceName);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDeleteDevice(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoDeleteSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDetachDevice(
+ IN OUT PDEVICE_OBJECT TargetDevice);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoDisconnectInterrupt(
+ IN PKINTERRUPT InterruptObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeIrp(
+ IN PIRP Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeMdl(
+ IN PMDL Mdl);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeWorkItem(
+ IN PIO_WORKITEM IoWorkItem);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDevice(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDeviceReference(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetBootDiskInformation(
+ IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
+ IN ULONG Size);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceInterfaceAlias(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN CONST GUID *AliasInterfaceClassGuid,
+ OUT PUNICODE_STRING AliasSymbolicLinkName);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoGetCurrentProcess(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceInterfaces(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoGetDeviceProperty(
+ 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);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoGetDriverObjectExtension(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PVOID ClientIdentificationAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+IoGetInitialStack(VOID);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetRelatedDeviceObject(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInitializeIrp(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoInitializeTimer(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoInvalidateDeviceState(
+ IN PDEVICE_OBJECT PhysicalDeviceObject);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsWdmVersionAvailable(
+ IN UCHAR MajorVersion,
+ IN UCHAR MinorVersion);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoOpenDeviceInterfaceRegistryKey(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterDeviceInterface(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterShutdownNotification(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseCancelSpinLock(
+ IN KIRQL Irql);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseRemoveLockAndWaitEx(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRemoveShareAccess(
+ IN PFILE_OBJECT FileObject,
+ IN OUT PSHARE_ACCESS ShareAccess);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReportTargetDeviceChange(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRequestDeviceEject(
+ IN PDEVICE_OBJECT PhysicalDeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReuseIrp(
+ IN OUT PIRP Irp,
+ IN NTSTATUS Status);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetDeviceInterfaceState(
+ 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);
+
+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
+IoUnregisterPlugPlayNotification(
+ IN PVOID NotificationEntry);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterShutdownNotification(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUpdateShareAccess(
+ IN PFILE_OBJECT FileObject,
+ IN OUT PSHARE_ACCESS ShareAccess);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIAllocateInstanceIds(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIRegistrationControl(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIWriteEvent(
+ IN OUT 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
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_NTDDK_)
+#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) */
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG PartitionNumber,
+ IN ULONG PartitionType);
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG SectorsPerTrack,
+ IN ULONG NumberOfHeads,
+ IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateDisk(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN struct _CREATE_DISK* Disk OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadDiskSignature(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG BytesPerSector,
+ OUT PDISK_SIGNATURE Signature);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoReadPartitionTableEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetPartitionInformationEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG PartitionNumber,
+ IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetSystemPartition(
+ IN PUNICODE_STRING VolumeNameString);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVerifyPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN FixErrors);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVolumeDeviceToDosName(
+ IN PVOID VolumeDeviceObject,
+ OUT PUNICODE_STRING DosName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWritePartitionTableEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCreateFileSpecifyDeviceObjectHint(
+ OUT PHANDLE FileHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER AllocationSize OPTIONAL,
+ IN ULONG FileAttributes,
+ IN ULONG ShareAccess,
+ IN ULONG Disposition,
+ IN ULONG CreateOptions,
+ IN PVOID EaBuffer OPTIONAL,
+ IN ULONG EaLength,
+ IN CREATE_FILE_TYPE CreateFileType,
+ IN PVOID InternalParameters OPTIONAL,
+ IN ULONG Options,
+ IN PVOID DeviceObject OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoAttachDeviceToDeviceStackSafe(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice,
+ OUT PDEVICE_OBJECT *AttachedToDeviceObject);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitialize(
+ IN PIO_CSQ Csq,
+ IN PIO_CSQ_INSERT_IRP 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
+VOID
+NTAPI
+IoCsqInsertIrp(
+ IN PIO_CSQ Csq,
+ IN PIRP Irp,
+ IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveIrp(
+ IN PIO_CSQ Csq,
+ IN PIO_CSQ_IRP_CONTEXT Context);
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoCsqRemoveNextIrp(
+ IN PIO_CSQ Csq,
+ IN PVOID PeekContext OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoForwardIrpSynchronously(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+
+NTKERNELAPI
+VOID
+NTAPI
+IoFreeErrorLogEntry(
+ 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);
+
+VOID
+NTAPI
+IoSetStartIoAttributes(
+ 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);
+
+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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIHandleToInstanceName(
+ IN PVOID DataBlockObject,
+ IN HANDLE FileHandle,
+ OUT PUNICODE_STRING InstanceName);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIOpenBlock(
+ IN GUID *DataBlockGuid,
+ IN ULONG DesiredAccess,
+ OUT PVOID *DataBlockObject);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQueryAllData(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQuerySingleInstance(
+ 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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMISetSingleInstance(
+ 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
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoValidateDeviceIoControlAccess(
+ IN PIRP Irp,
+ IN ULONG RequiredAccess);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+$if (_NTDDK_)
+NTKERNELAPI
+IO_PAGING_PRIORITY
+FASTCALL
+IoGetPagingIoPriority(
+ IN PIRP Irp);
+$endif
+
+$if (_WDMDDK_)
+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
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+$if (_NTDDK_)
+#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
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+$if (_NTDDK_)
+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
+
+$if (_WDMDDK_)
+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
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$if (_WDMDDK_)
+#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
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+IoSetFileObjectIgnoreSharing(
+ IN PFILE_OBJECT FileObject);
+$endif
+
+$if (_WDMDDK_)
+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
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+#if defined(_WIN64)
+NTKERNELAPI
+ULONG
+NTAPI
+IoWMIDeviceObjectToProviderId(
+ IN PDEVICE_OBJECT DeviceObject);
+#else
+#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
+#endif
+
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ * IN CCHAR StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
+ ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
+
+FORCEINLINE
+VOID
+IoSkipCurrentIrpStackLocation(
+ IN OUT PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation <= Irp->StackCount);
+ Irp->CurrentLocation++;
+ Irp->Tail.Overlay.CurrentStackLocation++;
+}
+
+FORCEINLINE
+VOID
+IoSetNextIrpStackLocation(
+ IN OUT PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation > 0);
+ Irp->CurrentLocation--;
+ Irp->Tail.Overlay.CurrentStackLocation--;
+}
+
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetNextIrpStackLocation(
+ IN PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation > 0);
+ return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+}
+
+FORCEINLINE
+VOID
+IoSetCompletionRoutine(
+ IN PIRP Irp,
+ IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
+ IN PVOID Context OPTIONAL,
+ IN BOOLEAN InvokeOnSuccess,
+ IN BOOLEAN InvokeOnError,
+ IN BOOLEAN InvokeOnCancel)
+{
+ PIO_STACK_LOCATION irpSp;
+ ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
+ irpSp = IoGetNextIrpStackLocation(Irp);
+ irpSp->CompletionRoutine = CompletionRoutine;
+ irpSp->Context = Context;
+ irpSp->Control = 0;
+
+ if (InvokeOnSuccess) {
+ irpSp->Control = SL_INVOKE_ON_SUCCESS;
+ }
+
+ if (InvokeOnError) {
+ irpSp->Control |= SL_INVOKE_ON_ERROR;
+ }
+
+ if (InvokeOnCancel) {
+ irpSp->Control |= SL_INVOKE_ON_CANCEL;
+ }
+}
+
+/*
+ * PDRIVER_CANCEL
+ * IoSetCancelRoutine(
+ * IN PIRP Irp,
+ * IN PDRIVER_CANCEL CancelRoutine)
+ */
+#define IoSetCancelRoutine(_Irp, \
+ _CancelRoutine) \
+ ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
+ (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
+
+/*
+ * VOID
+ * IoRequestDpc(
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN PIRP Irp,
+ * IN PVOID Context);
+ */
+#define IoRequestDpc(DeviceObject, Irp, Context)( \
+ KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
+
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+/*
+ * VOID
+ * IoReleaseRemoveLockAndWait(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLockAndWait(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+#if defined(_WIN64)
+NTKERNELAPI
+BOOLEAN
+IoIs32bitProcess(
+ IN PIRP Irp OPTIONAL);
+#endif
+
+#define PLUGPLAY_REGKEY_DEVICE 1
+#define PLUGPLAY_REGKEY_DRIVER 2
+#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
+
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetCurrentIrpStackLocation(
+ IN PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+ return Irp->Tail.Overlay.CurrentStackLocation;
+}
+
+FORCEINLINE
+VOID
+IoMarkIrpPending(
+ IN OUT PIRP Irp)
+{
+ IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
+}
+
+/*
+ * BOOLEAN
+ * IoIsErrorUserInduced(
+ * IN NTSTATUS Status);
+ */
+#define IoIsErrorUserInduced(Status) \
+ ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
+ ((Status) == STATUS_IO_TIMEOUT) || \
+ ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
+ ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
+ ((Status) == STATUS_VERIFY_REQUIRED) || \
+ ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
+ ((Status) == STATUS_WRONG_VOLUME)))
+
+/* VOID
+ * IoInitializeRemoveLock(
+ * IN PIO_REMOVE_LOCK Lock,
+ * IN ULONG AllocateTag,
+ * IN ULONG MaxLockedMinutes,
+ * IN ULONG HighWatermark)
+ */
+#define IoInitializeRemoveLock( \
+ Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
+ IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
+ HighWatermark, sizeof(IO_REMOVE_LOCK))
+
+VOID
+FORCEINLINE
+IoInitializeDpcRequest(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIO_DPC_ROUTINE DpcRoutine)
+{
+ KeInitializeDpc( &DeviceObject->Dpc,
+ (PKDEFERRED_ROUTINE) DpcRoutine,
+ DeviceObject );
+}
+
+#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
+
+/*
+ * ULONG
+ * IoGetFunctionCodeFromCtlCode(
+ * IN ULONG ControlCode)
+ */
+#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
+ (((_ControlCode) >> 2) & 0x00000FFF)
+
+FORCEINLINE
+VOID
+IoCopyCurrentIrpStackLocationToNext(
+ IN OUT PIRP Irp)
+{
+ PIO_STACK_LOCATION irpSp;
+ PIO_STACK_LOCATION nextIrpSp;
+ irpSp = IoGetCurrentIrpStackLocation(Irp);
+ nextIrpSp = IoGetNextIrpStackLocation(Irp);
+ RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
+ nextIrpSp->Control = 0;
+}
+
+NTKERNELAPI
+VOID
+NTAPI
+IoGetStackLimits(
+ OUT PULONG_PTR LowLimit,
+ OUT PULONG_PTR HighLimit);
+
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(VOID)
+{
+ ULONG_PTR End, Begin;
+ ULONG_PTR Result;
+
+ IoGetStackLimits(&Begin, &End);
+ Result = (ULONG_PTR)(&End) - Begin;
+ 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
+$endif
+
--- /dev/null
+/******************************************************************************
+ * I/O Manager Types *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#define WDM_MAJORVERSION 0x06
+#define WDM_MINORVERSION 0x00
+
+#if defined(_WIN64)
+
+#ifndef USE_DMA_MACROS
+#define USE_DMA_MACROS
+#endif
+
+#ifndef NO_LEGACY_DRIVERS
+#define NO_LEGACY_DRIVERS
+#endif
+
+#endif /* defined(_WIN64) */
+
+#define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
+
+#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
+
+#define POOL_COLD_ALLOCATION 256
+#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
+#define POOL_RAISE_IF_ALLOCATION_FAILURE 16
+
+#define IO_TYPE_ADAPTER 1
+#define IO_TYPE_CONTROLLER 2
+#define IO_TYPE_DEVICE 3
+#define IO_TYPE_DRIVER 4
+#define IO_TYPE_FILE 5
+#define IO_TYPE_IRP 6
+#define IO_TYPE_MASTER_ADAPTER 7
+#define IO_TYPE_OPEN_PACKET 8
+#define IO_TYPE_TIMER 9
+#define IO_TYPE_VPB 10
+#define IO_TYPE_ERROR_LOG 11
+#define IO_TYPE_ERROR_MESSAGE 12
+#define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
+
+#define IO_TYPE_CSQ_IRP_CONTEXT 1
+#define IO_TYPE_CSQ 2
+#define IO_TYPE_CSQ_EX 3
+
+/* IO_RESOURCE_DESCRIPTOR.Option */
+#define IO_RESOURCE_PREFERRED 0x01
+#define IO_RESOURCE_DEFAULT 0x02
+#define IO_RESOURCE_ALTERNATIVE 0x08
+
+#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
+
+#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 {
+ ULONG HandleAttributes;
+ ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
+typedef struct _CLIENT_ID {
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+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)];
+} VPB, *PVPB;
+
+typedef enum _IO_ALLOCATION_ACTION {
+ KeepObject = 1,
+ DeallocateObject,
+ DeallocateObjectKeepRegisters
+} 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;
+
+typedef struct _WAIT_CONTEXT_BLOCK {
+ KDEVICE_QUEUE_ENTRY WaitQueueEntry;
+ PDRIVER_CONTROL DeviceRoutine;
+ PVOID DeviceContext;
+ ULONG NumberOfMapRegisters;
+ PVOID DeviceObject;
+ PVOID CurrentIrp;
+ PKDPC BufferChainingDpc;
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+
+$endif
+/* DEVICE_OBJECT.Flags */
+$if (_NTDDK_)
+#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
+$endif
+$if (_WDMDDK_)
+#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;
+ union {
+ 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;
+} 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;
+} 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;
+} IO_REMOVE_LOCK_DBG_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK {
+ IO_REMOVE_LOCK_COMMON_BLOCK Common;
+#if 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);
+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;
+} 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; \
+ 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; \
+ } 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; \
+ } 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; \
+ } Range[PCI_TYPE2_ADDRESSES-1]; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ USHORT BridgeControl; \
+ } type2; \
+ } u;
+
+typedef enum _CREATE_FILE_TYPE {
+ CreateFileTypeNone,
+ CreateFileTypeNamedPipe,
+ CreateFileTypeMailslot
+} CREATE_FILE_TYPE;
+
+#define IO_FORCE_ACCESS_CHECK 0x001
+#define IO_NO_PARAMETER_CHECKING 0x100
+
+#define IO_REPARSE 0x0
+#define IO_REMOUNT 0x1
+
+typedef struct _IO_STATUS_BLOCK {
+ _ANONYMOUS_UNION union {
+ NTSTATUS Status;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+ 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 VOID
+(NTAPI *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;
+
+#define EVENT_INCREMENT 1
+#define IO_NO_INCREMENT 0
+#define IO_CD_ROM_INCREMENT 1
+#define IO_DISK_INCREMENT 1
+#define IO_KEYBOARD_INCREMENT 6
+#define IO_MAILSLOT_INCREMENT 2
+#define IO_MOUSE_INCREMENT 6
+#define IO_NAMED_PIPE_INCREMENT 2
+#define IO_NETWORK_INCREMENT 2
+#define IO_PARALLEL_INCREMENT 1
+#define IO_SERIAL_INCREMENT 2
+#define IO_SOUND_INCREMENT 8
+#define IO_VIDEO_INCREMENT 1
+#define SEMAPHORE_INCREMENT 1
+
+#define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
+
+typedef struct _BOOTDISK_INFORMATION {
+ 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;
+} 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 <pshpack1.h>
+
+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;
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
+
+typedef struct _EISA_MEMORY_CONFIGURATION {
+ EISA_MEMORY_TYPE ConfigurationByte;
+ UCHAR DataSize;
+ USHORT AddressLowWord;
+ UCHAR AddressHighByte;
+ USHORT MemorySize;
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+
+typedef struct _EISA_IRQ_DESCRIPTOR {
+ 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_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
+
+typedef struct _DMA_CONFIGURATION_BYTE0 {
+ 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;
+} DMA_CONFIGURATION_BYTE1;
+
+typedef struct _EISA_DMA_CONFIGURATION {
+ DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
+ DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
+
+typedef struct _EISA_PORT_DESCRIPTOR {
+ 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_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;
+
+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];
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
+
+#include <poppack.h>
+
+/* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
+
+#define EISA_FUNCTION_ENABLED 0x80
+#define EISA_FREE_FORM_DATA 0x40
+#define EISA_HAS_PORT_INIT_ENTRY 0x20
+#define EISA_HAS_PORT_RANGE 0x10
+#define EISA_HAS_DMA_ENTRY 0x08
+#define EISA_HAS_IRQ_ENTRY 0x04
+#define EISA_HAS_MEMORY_ENTRY 0x02
+#define EISA_HAS_TYPE_ENTRY 0x01
+#define EISA_HAS_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
+
+/* CM_EISA_SLOT_INFORMATION.ReturnCode */
+
+#define EISA_INVALID_SLOT 0x80
+#define EISA_INVALID_FUNCTION 0x81
+#define EISA_INVALID_CONFIGURATION 0x82
+#define EISA_EMPTY_SLOT 0x83
+#define EISA_INVALID_BIOS_CALL 0x86
+
+/*
+** Plug and Play structures
+*/
+
+typedef VOID
+(NTAPI *PINTERFACE_REFERENCE)(
+ PVOID Context);
+
+typedef VOID
+(NTAPI *PINTERFACE_DEREFERENCE)(
+ PVOID Context);
+
+typedef BOOLEAN
+(NTAPI TRANSLATE_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;
+
+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
+
+/* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
+#define PCI_USE_SUBSYSTEM_IDS 0x00000001
+#define PCI_USE_REVISION 0x00000002
+#define PCI_USE_VENDEV_IDS 0x00000004
+#define PCI_USE_CLASS_SUBCLASS 0x00000008
+#define PCI_USE_PROGIF 0x00000010
+#define PCI_USE_LOCAL_BUS 0x00000020
+#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;
+} 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;
+
+typedef BOOLEAN
+(NTAPI PCI_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;
+} 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;
+} PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
+
+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;
+} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+
+typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+ 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;
+} HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
+
+#undef INTERFACE
+
+typedef struct _INTERFACE {
+ 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;
+} PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
+
+typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
+
+/* PNP_DEVICE_STATE */
+
+#define PNP_DEVICE_DISABLED 0x00000001
+#define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
+#define PNP_DEVICE_FAILED 0x00000004
+#define PNP_DEVICE_REMOVED 0x00000008
+#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
+#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];
+} TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
+
+typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ struct _FILE_OBJECT *FileObject;
+} TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#include <devpropdef.h>
+#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,
+ DeviceUsageTypeHibernation,
+ DeviceUsageTypeDumpFile
+} DEVICE_USAGE_NOTIFICATION_TYPE;
+
+typedef struct _POWER_SEQUENCE {
+ ULONG SequenceD1;
+ ULONG SequenceD2;
+ ULONG SequenceD3;
+} POWER_SEQUENCE, *PPOWER_SEQUENCE;
+
+typedef enum {
+ DevicePropertyDeviceDescription = 0x0,
+ DevicePropertyHardwareID = 0x1,
+ DevicePropertyCompatibleIDs = 0x2,
+ DevicePropertyBootConfiguration = 0x3,
+ DevicePropertyBootConfigurationTranslated = 0x4,
+ DevicePropertyClassName = 0x5,
+ DevicePropertyClassGuid = 0x6,
+ DevicePropertyDriverKeyName = 0x7,
+ DevicePropertyManufacturer = 0x8,
+ DevicePropertyFriendlyName = 0x9,
+ DevicePropertyLocationInformation = 0xa,
+ DevicePropertyPhysicalDeviceObjectName = 0xb,
+ DevicePropertyBusTypeGuid = 0xc,
+ DevicePropertyLegacyBusType = 0xd,
+ DevicePropertyBusNumber = 0xe,
+ DevicePropertyEnumeratorName = 0xf,
+ DevicePropertyAddress = 0x10,
+ DevicePropertyUINumber = 0x11,
+ DevicePropertyInstallState = 0x12,
+ DevicePropertyRemovalPolicy = 0x13,
+ DevicePropertyResourceRequirements = 0x14,
+ DevicePropertyAllocatedResources = 0x15,
+ DevicePropertyContainerID = 0x16
+} DEVICE_REGISTRY_PROPERTY;
+
+typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
+ EventCategoryReserved,
+ EventCategoryHardwareProfileChange,
+ EventCategoryDeviceInterfaceChange,
+ 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)(
+ IN PVOID NotificationStructure,
+ IN PVOID Context);
+typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
+
+typedef VOID
+(NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
+ IN PVOID Context);
+typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
+
+typedef enum _FILE_INFORMATION_CLASS {
+ FileDirectoryInformation = 1,
+ FileFullDirectoryInformation,
+ FileBothDirectoryInformation,
+ FileBasicInformation,
+ FileStandardInformation,
+ FileInternalInformation,
+ FileEaInformation,
+ FileAccessInformation,
+ FileNameInformation,
+ FileRenameInformation,
+ FileLinkInformation,
+ FileNamesInformation,
+ FileDispositionInformation,
+ FilePositionInformation,
+ FileFullEaInformation,
+ FileModeInformation,
+ FileAlignmentInformation,
+ FileAllInformation,
+ FileAllocationInformation,
+ FileEndOfFileInformation,
+ FileAlternateNameInformation,
+ FileStreamInformation,
+ FilePipeInformation,
+ FilePipeLocalInformation,
+ FilePipeRemoteInformation,
+ FileMailslotQueryInformation,
+ FileMailslotSetInformation,
+ FileCompressionInformation,
+ FileObjectIdInformation,
+ FileCompletionInformation,
+ FileMoveClusterInformation,
+ FileQuotaInformation,
+ FileReparsePointInformation,
+ FileNetworkOpenInformation,
+ FileAttributeTagInformation,
+ FileTrackingInformation,
+ FileIdBothDirectoryInformation,
+ FileIdFullDirectoryInformation,
+ FileValidDataLengthInformation,
+ FileShortNameInformation,
+ FileIoCompletionNotificationInformation,
+ FileIoStatusBlockRangeInformation,
+ FileIoPriorityHintInformation,
+ FileSfioReserveInformation,
+ FileSfioVolumeInformation,
+ FileHardLinkInformation,
+ FileProcessIdsUsingFileInformation,
+ FileNormalizedNameInformation,
+ FileNetworkPhysicalNameInformation,
+ FileIdGlobalTxDirectoryInformation,
+ FileIsRemoteDeviceInformation,
+ FileAttributeCacheInformation,
+ FileNumaNodeInformation,
+ FileStandardLinkInformation,
+ FileRemoteProtocolInformation,
+ FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+typedef struct _FILE_POSITION_INFORMATION {
+ LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+ 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;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+ 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;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+ FileFsVolumeInformation = 1,
+ FileFsLabelInformation,
+ FileFsSizeInformation,
+ FileFsDeviceInformation,
+ FileFsAttributeInformation,
+ FileFsControlInformation,
+ FileFsFullSizeInformation,
+ FileFsObjectIdInformation,
+ FileFsDriverPathInformation,
+ FileFsVolumeFlagsInformation,
+ FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+typedef struct _FILE_FS_DEVICE_INFORMATION {
+ 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];
+} 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 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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+typedef VOID
+(NTAPI FAST_IO_ACQUIRE_FILE)(
+ IN struct _FILE_OBJECT *FileObject);
+typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
+
+typedef VOID
+(NTAPI FAST_IO_RELEASE_FILE)(
+ IN struct _FILE_OBJECT *FileObject);
+typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
+
+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;
+
+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;
+
+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;
+
+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;
+
+typedef BOOLEAN
+(NTAPI FAST_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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+
+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;
+} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
+
+typedef struct _SECTION_OBJECT_POINTERS {
+ PVOID DataSectionObject;
+ PVOID SharedCacheMap;
+ PVOID ImageSectionObject;
+} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+
+typedef struct _IO_COMPLETION_CONTEXT {
+ PVOID Port;
+ PVOID Key;
+} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+
+/* FILE_OBJECT.Flags */
+#define FO_FILE_OPEN 0x00000001
+#define FO_SYNCHRONOUS_IO 0x00000002
+#define FO_ALERTABLE_IO 0x00000004
+#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FO_WRITE_THROUGH 0x00000010
+#define FO_SEQUENTIAL_ONLY 0x00000020
+#define FO_CACHE_SUPPORTED 0x00000040
+#define FO_NAMED_PIPE 0x00000080
+#define FO_STREAM_FILE 0x00000100
+#define FO_MAILSLOT 0x00000200
+#define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
+#define FO_QUEUE_IRP_TO_THREAD 0x00000400
+#define FO_DIRECT_DEVICE_OPEN 0x00000800
+#define FO_FILE_MODIFIED 0x00001000
+#define FO_FILE_SIZE_CHANGED 0x00002000
+#define FO_CLEANUP_COMPLETE 0x00004000
+#define FO_TEMPORARY_FILE 0x00008000
+#define FO_DELETE_ON_CLOSE 0x00010000
+#define FO_OPENED_CASE_SENSITIVE 0x00020000
+#define FO_HANDLE_CREATED 0x00040000
+#define FO_FILE_FAST_IO_READ 0x00080000
+#define FO_RANDOM_ACCESS 0x00100000
+#define FO_FILE_OPEN_CANCELLED 0x00200000
+#define FO_VOLUME_OPEN 0x00400000
+#define FO_REMOTE_ORIGIN 0x01000000
+#define FO_DISALLOW_EXCLUSIVE 0x02000000
+#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
+#define VPB_LOCKED 0x0002
+#define VPB_PERSISTENT 0x0004
+#define VPB_REMOVE_PENDING 0x0008
+#define VPB_RAW_MOUNT 0x0010
+#define VPB_DIRECT_WRITES_ALLOWED 0x0020
+
+/* IRP.Flags */
+
+#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
+
+#define SL_RESTART_SCAN 0x01
+#define SL_RETURN_SINGLE_ENTRY 0x02
+#define SL_INDEX_SPECIFIED 0x04
+
+#define SL_WATCH_TREE 0x01
+
+#define SL_ALLOW_RAW_MOUNT 0x01
+
+#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 IRP_NOCACHE 0x00000001
+#define IRP_PAGING_IO 0x00000002
+#define IRP_MOUNT_COMPLETION 0x00000002
+#define IRP_SYNCHRONOUS_API 0x00000004
+#define IRP_ASSOCIATED_IRP 0x00000008
+#define IRP_BUFFERED_IO 0x00000010
+#define IRP_DEALLOCATE_BUFFER 0x00000020
+#define IRP_INPUT_OPERATION 0x00000040
+#define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
+#define IRP_CREATE_OPERATION 0x00000080
+#define IRP_READ_OPERATION 0x00000100
+#define IRP_WRITE_OPERATION 0x00000200
+#define IRP_CLOSE_OPERATION 0x00000400
+#define IRP_DEFER_IO_COMPLETION 0x00000800
+#define IRP_OB_QUERY_NAME 0x00001000
+#define IRP_HOLD_DEVICE_QUEUE 0x00002000
+
+#define IRP_QUOTA_CHARGED 0x01
+#define IRP_ALLOCATED_MUST_SUCCEED 0x02
+#define IRP_ALLOCATED_FIXED_SIZE 0x04
+#define IRP_LOOKASIDE_ALLOCATION 0x08
+
+/*
+** IRP function codes
+*/
+
+#define IRP_MJ_CREATE 0x00
+#define IRP_MJ_CREATE_NAMED_PIPE 0x01
+#define IRP_MJ_CLOSE 0x02
+#define IRP_MJ_READ 0x03
+#define IRP_MJ_WRITE 0x04
+#define IRP_MJ_QUERY_INFORMATION 0x05
+#define IRP_MJ_SET_INFORMATION 0x06
+#define IRP_MJ_QUERY_EA 0x07
+#define IRP_MJ_SET_EA 0x08
+#define IRP_MJ_FLUSH_BUFFERS 0x09
+#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
+#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
+#define IRP_MJ_DIRECTORY_CONTROL 0x0c
+#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
+#define IRP_MJ_DEVICE_CONTROL 0x0e
+#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
+#define IRP_MJ_SCSI 0x0f
+#define IRP_MJ_SHUTDOWN 0x10
+#define IRP_MJ_LOCK_CONTROL 0x11
+#define IRP_MJ_CLEANUP 0x12
+#define IRP_MJ_CREATE_MAILSLOT 0x13
+#define IRP_MJ_QUERY_SECURITY 0x14
+#define IRP_MJ_SET_SECURITY 0x15
+#define IRP_MJ_POWER 0x16
+#define IRP_MJ_SYSTEM_CONTROL 0x17
+#define IRP_MJ_DEVICE_CHANGE 0x18
+#define IRP_MJ_QUERY_QUOTA 0x19
+#define IRP_MJ_SET_QUOTA 0x1a
+#define IRP_MJ_PNP 0x1b
+#define IRP_MJ_PNP_POWER 0x1b
+#define IRP_MJ_MAXIMUM_FUNCTION 0x1b
+
+#define IRP_MN_SCSI_CLASS 0x01
+
+#define IRP_MN_START_DEVICE 0x00
+#define IRP_MN_QUERY_REMOVE_DEVICE 0x01
+#define IRP_MN_REMOVE_DEVICE 0x02
+#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
+#define IRP_MN_STOP_DEVICE 0x04
+#define IRP_MN_QUERY_STOP_DEVICE 0x05
+#define IRP_MN_CANCEL_STOP_DEVICE 0x06
+
+#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
+#define IRP_MN_QUERY_INTERFACE 0x08
+#define IRP_MN_QUERY_CAPABILITIES 0x09
+#define IRP_MN_QUERY_RESOURCES 0x0A
+#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
+#define IRP_MN_QUERY_DEVICE_TEXT 0x0C
+#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+
+#define IRP_MN_READ_CONFIG 0x0F
+#define IRP_MN_WRITE_CONFIG 0x10
+#define IRP_MN_EJECT 0x11
+#define IRP_MN_SET_LOCK 0x12
+#define IRP_MN_QUERY_ID 0x13
+#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
+#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
+#define IRP_MN_SET_POWER 0x02
+#define IRP_MN_QUERY_POWER 0x03
+
+#define IRP_MN_QUERY_ALL_DATA 0x00
+#define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
+#define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
+#define IRP_MN_CHANGE_SINGLE_ITEM 0x03
+#define IRP_MN_ENABLE_EVENTS 0x04
+#define IRP_MN_DISABLE_EVENTS 0x05
+#define IRP_MN_ENABLE_COLLECTION 0x06
+#define IRP_MN_DISABLE_COLLECTION 0x07
+#define IRP_MN_REGINFO 0x08
+#define IRP_MN_EXECUTE_METHOD 0x09
+
+#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;
+} 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];
+} 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;
+} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+
+#define ERROR_LOG_LIMIT_SIZE 240
+#define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
+ sizeof(IO_ERROR_LOG_PACKET) + \
+ (sizeof(WCHAR) * 40))
+#define ERROR_LOG_MESSAGE_LIMIT_SIZE \
+ (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
+#define IO_ERROR_LOG_MESSAGE_LENGTH \
+ ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
+ ERROR_LOG_MESSAGE_LIMIT_SIZE : \
+ PORT_MAXIMUM_MESSAGE_LENGTH)
+#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,
+ Width32Bits,
+ MaximumDmaWidth
+} DMA_WIDTH, *PDMA_WIDTH;
+
+typedef enum _DMA_SPEED {
+ Compatible,
+ TypeA,
+ TypeB,
+ TypeC,
+ TypeF,
+ MaximumDmaSpeed
+} DMA_SPEED, *PDMA_SPEED;
+
+/* DEVICE_DESCRIPTION.Version */
+
+#define DEVICE_DESCRIPTION_VERSION 0x0000
+#define DEVICE_DESCRIPTION_VERSION1 0x0001
+#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;
+} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
+
+typedef enum _DEVICE_RELATION_TYPE {
+ BusRelations,
+ EjectionRelations,
+ PowerRelations,
+ RemovalRelations,
+ TargetDeviceRelation,
+ SingleBusRelations,
+ TransportRelations
+} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
+
+typedef struct _DEVICE_RELATIONS {
+ ULONG Count;
+ PDEVICE_OBJECT Objects[1];
+} DEVICE_RELATIONS, *PDEVICE_RELATIONS;
+
+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;
+} SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
+
+#if defined(_MSC_EXTENSIONS)
+
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+#pragma warning(disable:4200)
+typedef struct _SCATTER_GATHER_LIST {
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ SCATTER_GATHER_ELEMENT Elements[1];
+} SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
+
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#else
+#pragma warning(default:4200)
+#endif
+
+#else
+
+struct _SCATTER_GATHER_LIST;
+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);
+typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
+
+typedef struct _DRIVER_EXTENSION {
+ struct _DRIVER_OBJECT *DriverObject;
+ PDRIVER_ADD_DEVICE AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+#define DRVO_UNLOAD_INVOKED 0x00000001
+#define DRVO_LEGACY_DRIVER 0x00000002
+#define DRVO_BUILTIN_DRIVER 0x00000004
+
+typedef NTSTATUS
+(NTAPI 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);
+typedef DRIVER_STARTIO *PDRIVER_STARTIO;
+
+typedef VOID
+(NTAPI 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);
+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;
+ 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;
+
+typedef struct _DMA_ADAPTER {
+ USHORT Version;
+ USHORT Size;
+ struct _DMA_OPERATIONS* DmaOperations;
+} DMA_ADAPTER, *PDMA_ADAPTER;
+
+typedef VOID
+(NTAPI *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);
+
+typedef VOID
+(NTAPI *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);
+
+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);
+
+typedef VOID
+(NTAPI *PFREE_ADAPTER_CHANNEL)(
+ IN PDMA_ADAPTER DmaAdapter);
+
+typedef VOID
+(NTAPI *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);
+
+typedef ULONG
+(NTAPI *PGET_DMA_ALIGNMENT)(
+ IN PDMA_ADAPTER DmaAdapter);
+
+typedef ULONG
+(NTAPI *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;
+
+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);
+
+typedef VOID
+(NTAPI *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);
+
+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);
+
+typedef NTSTATUS
+(NTAPI *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;
+} DMA_OPERATIONS, *PDMA_OPERATIONS;
+
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+ UCHAR Option;
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ UCHAR Spare1;
+ USHORT Flags;
+ USHORT Spare2;
+ union {
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Port;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Memory;
+ struct {
+ ULONG MinimumVector;
+ ULONG MaximumVector;
+ } Interrupt;
+ struct {
+ ULONG MinimumChannel;
+ ULONG MaximumChannel;
+ } Dma;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Generic;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Length;
+ ULONG MinBusNumber;
+ ULONG MaxBusNumber;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ 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];
+} 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];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
+
+typedef VOID
+(NTAPI 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;
+ union {
+ 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;
+ union {
+ struct {
+ _ANONYMOUS_UNION union {
+ PIO_APC_ROUTINE UserApcRoutine;
+ PVOID IssuingProcess;
+ } DUMMYUNIONNAME;
+ PVOID UserApcContext;
+ } AsynchronousParameters;
+ LARGE_INTEGER AllocationSize;
+ } Overlay;
+ volatile PDRIVER_CANCEL CancelRoutine;
+ PVOID UserBuffer;
+ union {
+ struct {
+ _ANONYMOUS_UNION union {
+ KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+ _ANONYMOUS_STRUCT struct {
+ PVOID DriverContext[4];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PETHREAD Thread;
+ PCHAR AuxiliaryBuffer;
+ _ANONYMOUS_STRUCT struct {
+ LIST_ENTRY ListEntry;
+ _ANONYMOUS_UNION union {
+ struct _IO_STACK_LOCATION *CurrentStackLocation;
+ ULONG PacketType;
+ } DUMMYUNIONNAME;
+ } DUMMYSTRUCTNAME;
+ struct _FILE_OBJECT *OriginalFileObject;
+ } Overlay;
+ KAPC Apc;
+ PVOID CompletionKey;
+ } Tail;
+} IRP, *PIRP;
+
+typedef enum _IO_PAGING_PRIORITY {
+ IoPagingPriorityInvalid,
+ IoPagingPriorityNormal,
+ IoPagingPriorityHigh,
+ IoPagingPriorityReserved1,
+ IoPagingPriorityReserved2
+} IO_PAGING_PRIORITY;
+
+typedef NTSTATUS
+(NTAPI 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;
+
+typedef NTSTATUS
+(NTAPI *PMM_DLL_INITIALIZE)(
+ IN PUNICODE_STRING RegistryPath);
+
+typedef NTSTATUS
+(NTAPI *PMM_DLL_UNLOAD)(
+ VOID);
+
+typedef VOID
+(NTAPI IO_TIMER_ROUTINE)(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN PVOID Context);
+typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+
+typedef struct _IO_SECURITY_CONTEXT {
+ 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;
+} 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;
+
+typedef VOID
+(NTAPI *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);
+
+typedef VOID
+(NTAPI *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);
+
+typedef VOID
+(NTAPI *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;
+} IO_CSQ, *PIO_CSQ;
+
+typedef enum _BUS_QUERY_ID_TYPE {
+ BusQueryDeviceID,
+ BusQueryHardwareIDs,
+ BusQueryCompatibleIDs,
+ BusQueryInstanceID,
+ BusQueryDeviceSerialNumber
+} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+
+typedef enum _DEVICE_TEXT_TYPE {
+ DeviceTextDescription,
+ 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;
+
+#if !defined(_AMD64_) && !defined(_IA64_)
+#include <pshpack4.h>
+#endif
+typedef struct _IO_STACK_LOCATION {
+ 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;
+ } Create;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Read;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Write;
+ struct {
+ ULONG Length;
+ PUNICODE_STRING FileName;
+ FILE_INFORMATION_CLASS FileInformationClass;
+ ULONG FileIndex;
+ } QueryDirectory;
+ struct {
+ ULONG Length;
+ ULONG CompletionFilter;
+ } NotifyDirectory;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ } QueryFile;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ PFILE_OBJECT FileObject;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ BOOLEAN ReplaceIfExists;
+ BOOLEAN AdvanceOnly;
+ } DUMMYSTRUCTNAME;
+ ULONG ClusterCount;
+ HANDLE DeleteHandle;
+ } DUMMYUNIONNAME;
+ } SetFile;
+ struct {
+ ULONG Length;
+ PVOID EaList;
+ ULONG EaListLength;
+ ULONG EaIndex;
+ } QueryEa;
+ struct {
+ ULONG Length;
+ } SetEa;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+ } QueryVolume;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS FsInformationClass;
+ } SetVolume;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG InputBufferLength;
+ ULONG FsControlCode;
+ PVOID Type3InputBuffer;
+ } FileSystemControl;
+ struct {
+ PLARGE_INTEGER Length;
+ ULONG Key;
+ LARGE_INTEGER ByteOffset;
+ } LockControl;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG POINTER_ALIGNMENT InputBufferLength;
+ ULONG POINTER_ALIGNMENT IoControlCode;
+ PVOID Type3InputBuffer;
+ } DeviceIoControl;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ ULONG POINTER_ALIGNMENT Length;
+ } QuerySecurity;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ } SetSecurity;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } MountVolume;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } VerifyVolume;
+ struct {
+ struct _SCSI_REQUEST_BLOCK *Srb;
+ } Scsi;
+ struct {
+ ULONG Length;
+ PSID StartSid;
+ struct _FILE_GET_QUOTA_INFORMATION *SidList;
+ ULONG SidListLength;
+ } QueryQuota;
+ struct {
+ ULONG Length;
+ } SetQuota;
+ struct {
+ DEVICE_RELATION_TYPE Type;
+ } QueryDeviceRelations;
+ struct {
+ CONST GUID *InterfaceType;
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE Interface;
+ PVOID InterfaceSpecificData;
+ } QueryInterface;
+ struct {
+ PDEVICE_CAPABILITIES Capabilities;
+ } DeviceCapabilities;
+ struct {
+ PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+ } FilterResourceRequirements;
+ struct {
+ ULONG WhichSpace;
+ PVOID Buffer;
+ ULONG Offset;
+ ULONG POINTER_ALIGNMENT Length;
+ } ReadWriteConfig;
+ struct {
+ BOOLEAN Lock;
+ } SetLock;
+ struct {
+ BUS_QUERY_ID_TYPE IdType;
+ } QueryId;
+ struct {
+ DEVICE_TEXT_TYPE DeviceTextType;
+ LCID POINTER_ALIGNMENT LocaleId;
+ } QueryDeviceText;
+ struct {
+ BOOLEAN InPath;
+ BOOLEAN Reserved[3];
+ DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+ } UsageNotification;
+ struct {
+ SYSTEM_POWER_STATE PowerState;
+ } WaitWake;
+ struct {
+ PPOWER_SEQUENCE PowerSequence;
+ } PowerSequence;
+ struct {
+ 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;
+ } StartDevice;
+ struct {
+ ULONG_PTR ProviderId;
+ PVOID DataPath;
+ ULONG BufferSize;
+ PVOID Buffer;
+ } WMI;
+ struct {
+ PVOID Argument1;
+ PVOID Argument2;
+ PVOID Argument3;
+ PVOID Argument4;
+ } Others;
+ } Parameters;
+ PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID Context;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#if !defined(_AMD64_) && !defined(_IA64_)
+#include <poppack.h>
+#endif
+
+/* IO_STACK_LOCATION.Control */
+
+#define SL_PENDING_RETURNED 0x01
+#define SL_ERROR_RETURNED 0x02
+#define SL_INVOKE_ON_CANCEL 0x20
+#define SL_INVOKE_ON_SUCCESS 0x40
+#define SL_INVOKE_ON_ERROR 0x80
+
+#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
+#define FILE_CREATED 0x00000002
+#define FILE_OVERWRITTEN 0x00000003
+#define FILE_EXISTS 0x00000004
+#define FILE_DOES_NOT_EXIST 0x00000005
+
+#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
+#define FILE_WRITE_TO_END_OF_FILE 0xffffffff
+
+/* also in winnt.h */
+#define FILE_LIST_DIRECTORY 0x00000001
+#define FILE_READ_DATA 0x00000001
+#define FILE_ADD_FILE 0x00000002
+#define FILE_WRITE_DATA 0x00000002
+#define FILE_ADD_SUBDIRECTORY 0x00000004
+#define FILE_APPEND_DATA 0x00000004
+#define FILE_CREATE_PIPE_INSTANCE 0x00000004
+#define FILE_READ_EA 0x00000008
+#define FILE_WRITE_EA 0x00000010
+#define FILE_EXECUTE 0x00000020
+#define FILE_TRAVERSE 0x00000020
+#define FILE_DELETE_CHILD 0x00000040
+#define FILE_READ_ATTRIBUTES 0x00000080
+#define FILE_WRITE_ATTRIBUTES 0x00000100
+
+#define FILE_SHARE_READ 0x00000001
+#define FILE_SHARE_WRITE 0x00000002
+#define FILE_SHARE_DELETE 0x00000004
+#define FILE_SHARE_VALID_FLAGS 0x00000007
+
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#define FILE_ATTRIBUTE_DEVICE 0x00000040
+#define FILE_ATTRIBUTE_NORMAL 0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+#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
+
+#define FILE_VALID_OPTION_FLAGS 0x00ffffff
+#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
+#define FILE_VALID_SET_FLAGS 0x00000036
+
+#define FILE_SUPERSEDE 0x00000000
+#define FILE_OPEN 0x00000001
+#define FILE_CREATE 0x00000002
+#define FILE_OPEN_IF 0x00000003
+#define FILE_OVERWRITE 0x00000004
+#define FILE_OVERWRITE_IF 0x00000005
+#define FILE_MAXIMUM_DISPOSITION 0x00000005
+
+#define FILE_DIRECTORY_FILE 0x00000001
+#define FILE_WRITE_THROUGH 0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE 0x00000040
+#define FILE_CREATE_TREE_CONNECTION 0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+#define FILE_NO_EA_KNOWLEDGE 0x00000200
+#define FILE_OPEN_REMOTE_INSTANCE 0x00000400
+#define FILE_RANDOM_ACCESS 0x00000800
+#define FILE_DELETE_ON_CLOSE 0x00001000
+#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
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
+
+#define FILE_ANY_ACCESS 0x00000000
+#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
+#define FILE_READ_ACCESS 0x00000001
+#define FILE_WRITE_ACCESS 0x00000002
+
+#define FILE_ALL_ACCESS \
+ (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ 0x1FF)
+
+#define FILE_GENERIC_EXECUTE \
+ (STANDARD_RIGHTS_EXECUTE | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_EXECUTE | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_READ \
+ (STANDARD_RIGHTS_READ | \
+ FILE_READ_DATA | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_READ_EA | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_WRITE \
+ (STANDARD_RIGHTS_WRITE | \
+ FILE_WRITE_DATA | \
+ FILE_WRITE_ATTRIBUTES | \
+ FILE_WRITE_EA | \
+ FILE_APPEND_DATA | \
+ SYNCHRONIZE)
+
+/* 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)
+$endif
+$if (_NTDDK_)
+
+#ifndef _ARC_DDK_
+#define _ARC_DDK_
+typedef enum _CONFIGURATION_TYPE {
+ ArcSystem,
+ CentralProcessor,
+ FloatingPointProcessor,
+ PrimaryIcache,
+ PrimaryDcache,
+ SecondaryIcache,
+ SecondaryDcache,
+ SecondaryCache,
+ EisaAdapter,
+ TcAdapter,
+ ScsiAdapter,
+ DtiAdapter,
+ MultiFunctionAdapter,
+ DiskController,
+ TapeController,
+ CdromController,
+ WormController,
+ SerialController,
+ NetworkController,
+ DisplayController,
+ ParallelController,
+ PointerController,
+ KeyboardController,
+ AudioController,
+ OtherController,
+ DiskPeripheral,
+ FloppyDiskPeripheral,
+ TapePeripheral,
+ ModemPeripheral,
+ MonitorPeripheral,
+ PrinterPeripheral,
+ PointerPeripheral,
+ KeyboardPeripheral,
+ TerminalPeripheral,
+ OtherPeripheral,
+ LinePeripheral,
+ NetworkPeripheral,
+ SystemMemory,
+ DockingInformation,
+ RealModeIrqRoutingTable,
+ RealModePCIEnumeration,
+ MaximumType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+#endif /* !_ARC_DDK_ */
+
+/*
+** IRP function codes
+*/
+
+#define IRP_MN_QUERY_DIRECTORY 0x01
+#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
+
+#define IRP_MN_USER_FS_REQUEST 0x00
+#define IRP_MN_MOUNT_VOLUME 0x01
+#define IRP_MN_VERIFY_VOLUME 0x02
+#define IRP_MN_LOAD_FILE_SYSTEM 0x03
+#define IRP_MN_TRACK_LINK 0x04
+#define IRP_MN_KERNEL_CALL 0x04
+
+#define IRP_MN_LOCK 0x01
+#define IRP_MN_UNLOCK_SINGLE 0x02
+#define IRP_MN_UNLOCK_ALL 0x03
+#define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
+
+#define IRP_MN_FLUSH_AND_PURGE 0x01
+
+#define IRP_MN_NORMAL 0x00
+#define IRP_MN_DPC 0x01
+#define IRP_MN_MDL 0x02
+#define IRP_MN_COMPLETE 0x04
+#define IRP_MN_COMPRESSED 0x08
+
+#define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
+#define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
+#define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
+
+#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
+
+#define IO_CHECK_CREATE_PARAMETERS 0x0200
+#define IO_ATTACH_DEVICE 0x0400
+#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
+
+typedef
+NTSTATUS
+(NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
+ IN PVOID Context,
+ IN PUNICODE_STRING PathName,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG BusNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
+ IN CONFIGURATION_TYPE ControllerType,
+ IN ULONG ControllerNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
+ IN CONFIGURATION_TYPE PeripheralType,
+ IN ULONG PeripheralNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
+
+typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
+ IoQueryDeviceIdentifier = 0,
+ IoQueryDeviceConfigurationData,
+ IoQueryDeviceComponentInformation,
+ IoQueryDeviceMaxData
+} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
+
+typedef VOID
+(NTAPI *PDRIVER_REINITIALIZE)(
+ IN struct _DRIVER_OBJECT *DriverObject,
+ IN PVOID Context OPTIONAL,
+ IN ULONG Count);
+
+typedef struct _CONTROLLER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PVOID ControllerExtension;
+ KDEVICE_QUEUE DeviceWaitQueue;
+ ULONG Spare1;
+ LARGE_INTEGER Spare2;
+} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
+
+#define DRVO_REINIT_REGISTERED 0x00000008
+#define DRVO_INITIALIZED 0x00000010
+#define DRVO_BOOTREINIT_REGISTERED 0x00000020
+#define DRVO_LEGACY_RESOURCES 0x00000040
+
+typedef struct _CONFIGURATION_INFORMATION {
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CdRomCount;
+ ULONG TapeCount;
+ ULONG ScsiPortCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+ BOOLEAN AtDiskPrimaryAddressClaimed;
+ BOOLEAN AtDiskSecondaryAddressClaimed;
+ ULONG Version;
+ ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef struct _DISK_SIGNATURE {
+ ULONG PartitionStyle;
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG Signature;
+ ULONG CheckSum;
+ } Mbr;
+ struct {
+ GUID DiskId;
+ } Gpt;
+ } DUMMYUNIONNAME;
+} DISK_SIGNATURE, *PDISK_SIGNATURE;
+
+typedef struct _TXN_PARAMETER_BLOCK {
+ USHORT Length;
+ USHORT TxFsContext;
+ PVOID TransactionObject;
+} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
+
+#define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
+
+typedef struct _IO_DRIVER_CREATE_CONTEXT {
+ CSHORT Size;
+ struct _ECP_LIST *ExtraCreateParameter;
+ PVOID DeviceObjectHint;
+ PTXN_PARAMETER_BLOCK TxnParameters;
+} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
+
+typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PGET_SET_DEVICE_DATA SetBusData;
+ PGET_SET_DEVICE_DATA GetBusData;
+ UCHAR CapabilityID;
+} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
+
+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_ACTION {
+ ArbiterActionTestAllocation,
+ ArbiterActionRetestAllocation,
+ ArbiterActionCommitAllocation,
+ ArbiterActionRollbackAllocation,
+ ArbiterActionQueryAllocatedResources,
+ ArbiterActionWriteReservedResources,
+ ArbiterActionQueryConflict,
+ ArbiterActionQueryArbitrate,
+ ArbiterActionAddReserved,
+ ArbiterActionBootAllocation
+} ARBITER_ACTION, *PARBITER_ACTION;
+
+typedef struct _ARBITER_CONFLICT_INFO {
+ PDEVICE_OBJECT OwningObject;
+ ULONGLONG Start;
+ ULONGLONG End;
+} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
+
+typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
+ 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;
+ } Parameters;
+} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
+
+typedef enum _ARBITER_REQUEST_SOURCE {
+ ArbiterRequestUndefined = -1,
+ ArbiterRequestLegacyReported,
+ ArbiterRequestHalReported,
+ ArbiterRequestLegacyAssigned,
+ ArbiterRequestPnpDetected,
+ ArbiterRequestPnpEnumerated
+} ARBITER_REQUEST_SOURCE;
+
+typedef enum _ARBITER_RESULT {
+ ArbiterResultUndefined = -1,
+ ArbiterResultSuccess,
+ ArbiterResultExternalConflict,
+ ArbiterResultNullRequest
+} ARBITER_RESULT;
+
+#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
+
+typedef struct _ARBITER_LIST_ENTRY {
+ LIST_ENTRY ListEntry;
+ ULONG AlternativeCount;
+ PIO_RESOURCE_DESCRIPTOR Alternatives;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ ARBITER_REQUEST_SOURCE RequestSource;
+ ULONG Flags;
+ LONG_PTR WorkSpace;
+ INTERFACE_TYPE InterfaceType;
+ ULONG SlotNumber;
+ ULONG BusNumber;
+ PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
+ PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
+ ARBITER_RESULT Result;
+} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
+
+typedef NTSTATUS
+(NTAPI *PARBITER_HANDLER)(
+ IN OUT PVOID Context,
+ IN ARBITER_ACTION Action,
+ IN OUT PARBITER_PARAMETERS Parameters);
+
+#define ARBITER_PARTIAL 0x00000001
+
+typedef struct _ARBITER_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PARBITER_HANDLER ArbiterHandler;
+ ULONG Flags;
+} ARBITER_INTERFACE, *PARBITER_INTERFACE;
+
+typedef enum _RESOURCE_TRANSLATION_DIRECTION {
+ TranslateChildToParent,
+ TranslateParentToChild
+} RESOURCE_TRANSLATION_DIRECTION;
+
+typedef NTSTATUS
+(NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
+ 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;
+$endif
+
--- /dev/null
+/******************************************************************************
+ * Kernel Debugger Functions *
+ ******************************************************************************/
+$if (_NTDDK_)
+NTSYSAPI
+ULONG
+NTAPI
+DbgPrompt(
+ IN PCCH Prompt,
+ OUT PCH Response,
+ IN ULONG MaximumResponseLength);
+$endif
+
+$if (_WDMDDK_)
+#ifndef _DBGNT_
+
+ULONG
+__cdecl
+DbgPrint(
+ IN PCSTR Format,
+ IN ...);
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+ULONG
+__cdecl
+DbgPrintReturnControlC(
+ IN PCCH Format,
+ IN ...);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTSYSAPI
+ULONG
+__cdecl
+DbgPrintEx(
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN PCSTR Format,
+ IN ...);
+
+#ifdef _VA_LIST_DEFINED
+
+NTSYSAPI
+ULONG
+NTAPI
+vDbgPrintEx(
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN PCCH Format,
+ IN va_list ap);
+
+NTSYSAPI
+ULONG
+NTAPI
+vDbgPrintExWithPrefix(
+ IN PCCH Prefix,
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ 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
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdDisableDebugger(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdEnableDebugger(VOID);
+
+#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
+#define DbgBreakPoint __debugbreak
+#else
+VOID
+NTAPI
+DbgBreakPoint(VOID);
+#endif
+
+NTSYSAPI
+VOID
+NTAPI
+DbgBreakPointWithStatus(
+ IN ULONG Status);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KdRefreshDebuggerNotPresent(VOID);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KdChangeOption(
+ IN KD_OPTION Option,
+ IN ULONG InBufferBytes OPTIONAL,
+ IN PVOID InBuffer,
+ IN ULONG OutBufferBytes OPTIONAL,
+ OUT PVOID OutBuffer,
+ OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
+$endif
--- /dev/null
+/******************************************************************************
+ * Kernel Debugger Types *
+ ******************************************************************************/
+$if (_NTDDK_)
+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);
+$endif
--- /dev/null
+/******************************************************************************
+ * Kernel Functions *
+ ******************************************************************************/
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+KeInvalidateRangeAllCaches(
+ IN PVOID BaseAddress,
+ IN ULONG Length);
+$endif
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeEvent(
+ OUT PRKEVENT Event,
+ IN EVENT_TYPE Type,
+ IN BOOLEAN State);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeClearEvent(
+ IN OUT PRKEVENT Event);
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeSetImportanceDpc(
+ IN OUT PRKDPC Dpc,
+ IN KDPC_IMPORTANCE Importance);
+
+NTKERNELAPI
+LONG
+NTAPI
+KePulseEvent(
+ IN OUT PRKEVENT Event,
+ IN KPRIORITY Increment,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeSetBasePriorityThread(
+ IN OUT PRKTHREAD Thread,
+ IN LONG Increment);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterCriticalRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveCriticalRegion(VOID);
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+KeBugCheck(
+ IN ULONG BugCheckCode);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+#if defined(_NTDDK_) || defined(_NTIFS_)
+NTKERNELAPI
+VOID
+NTAPI
+ProbeForRead(
+ IN CONST VOID *Address, /* CONST is added */
+ IN SIZE_T Length,
+ IN ULONG Alignment);
+#endif /* defined(_NTDDK_) || defined(_NTIFS_) */
+
+NTKERNELAPI
+VOID
+NTAPI
+ProbeForWrite(
+ IN PVOID Address,
+ IN SIZE_T Length,
+ IN ULONG Alignment);
+
+$endif /* _WDMDDK_ */
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThread(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemAffinityThread(
+ IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+ IN OUT PRKDPC Dpc,
+ IN CCHAR Number);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(VOID);
+$endif
+
+$if (_NTDDK_)
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+ IN OUT PRKDPC Dpc,
+ IN CCHAR Number);
+
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(VOID);
+$endif
+
+#endif /* defined(SINGLE_GROUP_LEGACY_API) */
+
+$if (_WDMDDK_)
+#if !defined(_M_AMD64)
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryInterruptTime(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeQuerySystemTime(
+ 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);
+#else
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+ /* Clear the lock */
+ *SpinLock = 0;
+}
+#endif
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+KeBugCheckEx(
+ IN ULONG BugCheckCode,
+ IN ULONG_PTR BugCheckParameter1,
+ IN ULONG_PTR BugCheckParameter2,
+ IN ULONG_PTR BugCheckParameter3,
+ IN ULONG_PTR BugCheckParameter4);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeCancelTimer(
+ IN OUT PKTIMER);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeDelayExecutionThread(
+ IN KPROCESSOR_MODE WaitMode,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Interval);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckCallback(
+ IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterCriticalRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDeviceQueue(
+ OUT PKDEVICE_QUEUE DeviceQueue);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDpc(
+ OUT PRKDPC Dpc,
+ IN PKDEFERRED_ROUTINE DeferredRoutine,
+ IN PVOID DeferredContext OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeMutex(
+ OUT PRKMUTEX Mutex,
+ IN ULONG Level);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeSemaphore(
+ OUT PRKSEMAPHORE Semaphore,
+ IN LONG Count,
+ IN LONG Limit);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimer(
+ OUT PKTIMER Timer);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimerEx(
+ 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);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertDeviceQueue(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveCriticalRegion(VOID);
+
+NTHALAPI
+LARGE_INTEGER
+NTAPI
+KeQueryPerformanceCounter(
+ OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
+
+NTKERNELAPI
+KPRIORITY
+NTAPI
+KeQueryPriorityThread(
+ IN PRKTHREAD Thread);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryTimeIncrement(VOID);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateEvent(
+ IN PRKEVENT Event);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateMutex(
+ IN PRKMUTEX Mutex);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateSemaphore(
+ IN PRKSEMAPHORE Semaphore);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeReadStateTimer(
+ 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);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseMutex(
+ IN OUT PRKMUTEX Mutex,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseSemaphore(
+ 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);
+
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveEntryDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveQueueDpc(
+ IN OUT PRKDPC Dpc);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeResetEvent(
+ IN OUT PRKEVENT Event);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeSetEvent(
+ IN OUT PRKEVENT Event,
+ IN KPRIORITY Increment,
+ IN BOOLEAN Wait);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetImportanceDpc(
+ IN OUT PRKDPC Dpc,
+ IN KDPC_IMPORTANCE Importance);
+
+NTKERNELAPI
+KPRIORITY
+NTAPI
+KeSetPriorityThread(
+ IN OUT PKTHREAD Thread,
+ IN KPRIORITY Priority);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimer(
+ 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);
+
+NTHALAPI
+VOID
+NTAPI
+KeStallExecutionProcessor(
+ IN ULONG MicroSeconds);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSynchronizeExecution(
+ 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);
+
+#define KeWaitForMutexObject KeWaitForSingleObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeWaitForSingleObject(
+ IN PVOID Object,
+ IN KWAIT_REASON WaitReason,
+ IN KPROCESSOR_MODE WaitMode,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Timeout OPTIONAL);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreApcsDisabled(VOID);
+$endif
+
+$if (_WDMDDK_)
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KeAcquireInterruptSpinLock(
+ IN OUT PKINTERRUPT Interrupt);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreApcsDisabled(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetRecommendedSharedDataAlignment(VOID);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryRuntimeThread(
+ IN PKTHREAD Thread,
+ OUT PULONG UserTime);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockFromDpcLevel(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseInterruptSpinLock(
+ IN OUT PKINTERRUPT Interrupt,
+ IN KIRQL OldIrql);
+
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveByKeyDeviceQueueIfBusy(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN ULONG SortKey);
+
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckReasonCallback(
+ IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRegisterBugCheckReasonCallback(
+ OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
+ IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
+ IN KBUGCHECK_CALLBACK_REASON Reason,
+ IN PUCHAR Component);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+NTKERNELAPI
+VOID
+NTAPI
+KeFlushQueuedDpcs(VOID);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
+$endif /* _WDMDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+PVOID
+NTAPI
+KeRegisterNmiCallback(
+ IN PNMI_CALLBACK CallbackRoutine,
+ IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeDeregisterNmiCallback(
+ IN PVOID Handle);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeThreadedDpc(
+ OUT PRKDPC Dpc,
+ IN PKDEFERRED_ROUTINE DeferredRoutine,
+ IN PVOID DeferredContext OPTIONAL);
+
+NTKERNELAPI
+ULONG_PTR
+NTAPI
+KeIpiGenericCall(
+ IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+ IN ULONG_PTR Context);
+
+NTKERNELAPI
+KIRQL
+FASTCALL
+KeAcquireSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock,
+ IN KIRQL OldIrql);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+ IN PKSPIN_LOCK SpinLock);
+$endif /* _WDMDDK_ */
+
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInvalidateAllCaches(VOID);
+$endif /* _NTDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+$if (_NTDDK_)
+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 /* _NTDDK_ */
+
+$if (_WDMDDK_)
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreAllApcsDisabled(VOID);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterGuardedRegion(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveGuardedRegion(VOID);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeInitializeGuardedMutex(
+ OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseGuardedMutexUnsafe(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+$endif /* _WDMDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+$if (_WDMDDK_)
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockForDpc(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryDpcWatchdogInformation(
+ OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
+$endif /* _WDMDDK_ */
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+$if (_NTDDK_)
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCount(
+ OUT PKAFFINITY ActiveProcessors OPTIONAL);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCount(VOID);
+$endif /* _NTDDK_ */
+
+$if (_WDMDDK_)
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeSetSystemAffinityThreadEx(
+ IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThreadEx(
+ IN KAFFINITY Affinity);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCount(
+ OUT PKAFFINITY ActiveProcessors OPTIONAL);
+
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCount(VOID);
+$endif /* _WDMDDK_ */
+#endif /* SINGLE_GROUP_LEGACY_API */
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS08)
+
+PVOID
+KeRegisterProcessorChangeCallback(
+ IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
+ IN PVOID CallbackContext OPTIONAL,
+ IN ULONG Flags);
+
+VOID
+KeDeregisterProcessorChangeCallback(
+ IN PVOID CallbackHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS08) */
+$endif /* _WDMDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+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 /* _NTDDK_ */
+
+$if (_WDMDDK_)
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeProcess(
+ IN OUT PKPROCESS Process,
+ OUT PULONG64 CycleTimeStamp);
+
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeThread(
+ IN OUT PKTHREAD Thread,
+ OUT PULONG64 CycleTimeStamp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSetTargetProcessorDpcEx(
+ IN OUT PKDPC Dpc,
+ IN PPROCESSOR_NUMBER ProcNumber);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemGroupAffinityThread(
+ IN PGROUP_AFFINITY Affinity,
+ OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserGroupAffinityThread(
+ IN PGROUP_AFFINITY PreviousAffinity);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetCoalescableTimer(
+ IN OUT PKTIMER Timer,
+ IN LARGE_INTEGER DueTime,
+ IN ULONG Period,
+ IN ULONG TolerableDelay,
+ IN PKDPC Dpc OPTIONAL);
+
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryUnbiasedInterruptTime(VOID);
+
+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
+KeSaveExtendedProcessorState(
+ IN ULONG64 Mask,
+ OUT PXSTATE_SAVE XStateSave);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeRestoreExtendedProcessorState(
+ IN PXSTATE_SAVE XStateSave);
+
+NTSTATUS
+NTAPI
+KeGetProcessorNumberFromIndex(
+ IN ULONG ProcIndex,
+ OUT PPROCESSOR_NUMBER ProcNumber);
+
+ULONG
+NTAPI
+KeGetProcessorIndexFromNumber(
+ IN PPROCESSOR_NUMBER ProcNumber);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+#if !defined(_IA64_)
+NTHALAPI
+VOID
+NTAPI
+KeFlushWriteBuffer(VOID);
+#endif
+
+/* VOID
+ * KeInitializeCallbackRecord(
+ * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
+ */
+#define KeInitializeCallbackRecord(CallbackRecord) \
+ CallbackRecord->State = BufferEmpty;
+
+#if DBG
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PAGED_ASSERT( exp ) NT_ASSERT( exp )
+#else
+#define PAGED_ASSERT( exp ) ASSERT( exp )
+#endif
+
+#define PAGED_CODE() { \
+ if (KeGetCurrentIrql() > APC_LEVEL) { \
+ KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
+ PAGED_ASSERT(FALSE); \
+ } \
+}
+
+#else
+
+#define PAGED_CODE()
+
+#endif /* DBG */
+
+#define PAGED_CODE_LOCKED() NOP_FUNCTION;
+$endif
+
--- /dev/null
+/******************************************************************************
+ * Kernel Types *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+typedef UCHAR KIRQL, *PKIRQL;
+typedef CCHAR KPROCESSOR_MODE;
+typedef LONG KPRIORITY;
+
+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 MAXIMUM_WAIT_OBJECTS 64
+
+#define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
+
+#define ASSERT_DPC(Object) \
+ ASSERT(((Object)->Type == 0) || \
+ ((Object)->Type == DpcObject) || \
+ ((Object)->Type == ThreadedDpcObject))
+
+#define ASSERT_GATE(object) \
+ NT_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)
+
+#define ASSERT_TIMER(E) \
+ NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
+ ((E)->Header.Type == TimerSynchronizationObject))
+
+#define ASSERT_MUTANT(E) \
+ NT_ASSERT((E)->Header.Type == MutantObject)
+
+#define ASSERT_SEMAPHORE(E) \
+ NT_ASSERT((E)->Header.Type == SemaphoreObject)
+
+#define ASSERT_EVENT(E) \
+ NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
+ ((E)->Header.Type == SynchronizationEvent))
+
+#define DPC_NORMAL 0
+#define DPC_THREADED 1
+
+#define GM_LOCK_BIT 0x1
+#define GM_LOCK_BIT_V 0x0
+#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
+#define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
+
+#define PROCESSOR_FEATURE_MAX 64
+
+#define DBG_STATUS_CONTROL_C 1
+#define DBG_STATUS_SYSRQ 2
+#define DBG_STATUS_BUGCHECK_FIRST 3
+#define DBG_STATUS_BUGCHECK_SECOND 4
+#define DBG_STATUS_FATAL 5
+#define DBG_STATUS_DEBUG_CONTROL 6
+#define DBG_STATUS_WORKER 7
+
+#if defined(_WIN64)
+#define MAXIMUM_PROC_PER_GROUP 64
+#else
+#define MAXIMUM_PROC_PER_GROUP 32
+#endif
+#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
+
+/* Exception Records */
+#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];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+
+typedef struct _EXCEPTION_RECORD32 {
+ 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];
+} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
+
+typedef struct _EXCEPTION_POINTERS {
+ PEXCEPTION_RECORD ExceptionRecord;
+ PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+
+typedef enum _KBUGCHECK_CALLBACK_REASON {
+ KbCallbackInvalid,
+ KbCallbackReserved1,
+ KbCallbackSecondaryDumpData,
+ KbCallbackDumpIo,
+ KbCallbackAddPages
+} 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
+
+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;
+} KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
+
+typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
+ BufferEmpty,
+ BufferInserted,
+ BufferStarted,
+ BufferFinished,
+ BufferIncomplete
+} KBUGCHECK_BUFFER_DUMP_STATE;
+
+typedef VOID
+(NTAPI KBUGCHECK_CALLBACK_ROUTINE)(
+ IN PVOID Buffer,
+ IN ULONG Length);
+typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
+
+typedef struct _KBUGCHECK_CALLBACK_RECORD {
+ 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;
+
+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 _KINTERRUPT_POLARITY {
+ InterruptPolarityUnknown,
+ InterruptActiveHigh,
+ InterruptActiveLow
+} KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
+
+typedef enum _KPROFILE_SOURCE {
+ ProfileTime,
+ ProfileAlignmentFixup,
+ ProfileTotalIssues,
+ ProfilePipelineDry,
+ ProfileLoadInstructions,
+ ProfilePipelineFrozen,
+ ProfileBranchInstructions,
+ ProfileTotalNonissues,
+ ProfileDcacheMisses,
+ ProfileIcacheMisses,
+ ProfileCacheMisses,
+ ProfileBranchMispredictions,
+ ProfileStoreInstructions,
+ ProfileFpInstructions,
+ ProfileIntegerInstructions,
+ Profile2Issue,
+ Profile3Issue,
+ Profile4Issue,
+ ProfileSpecialInstructions,
+ ProfileTotalCycles,
+ ProfileIcacheIssues,
+ ProfileDcacheAccesses,
+ ProfileMemoryBarrierCycles,
+ ProfileLoadLinkedIssues,
+ ProfileMaximum
+} KPROFILE_SOURCE;
+
+typedef enum _KWAIT_REASON {
+ Executive,
+ FreePage,
+ PageIn,
+ PoolAllocation,
+ DelayExecution,
+ Suspended,
+ UserRequest,
+ WrExecutive,
+ WrFreePage,
+ WrPageIn,
+ WrPoolAllocation,
+ WrDelayExecution,
+ WrSuspended,
+ WrUserRequest,
+ WrEventPair,
+ WrQueue,
+ WrLpcReceive,
+ WrLpcReply,
+ WrVirtualMemory,
+ WrPageOut,
+ WrRendezvous,
+ WrKeyedEvent,
+ WrTerminated,
+ WrProcessInSwap,
+ WrCpuRateControl,
+ WrCalloutStack,
+ WrKernel,
+ WrResource,
+ WrPushLock,
+ WrMutex,
+ WrQuantumEnd,
+ WrDispatchInt,
+ WrPreempted,
+ WrYieldExecution,
+ WrFastMutex,
+ WrGuardedMutex,
+ WrRundown,
+ MaximumWaitReason
+} KWAIT_REASON;
+
+typedef struct _KWAIT_BLOCK {
+ LIST_ENTRY WaitListEntry;
+ struct _KTHREAD *Thread;
+ PVOID Object;
+ struct _KWAIT_BLOCK *NextWaitBlock;
+ USHORT WaitKey;
+ UCHAR WaitType;
+ volatile UCHAR BlockState;
+#if defined(_WIN64)
+ LONG SpareLong;
+#endif
+} KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK;
+
+typedef enum _KINTERRUPT_MODE {
+ LevelSensitive,
+ Latched
+} 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)(
+ 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;
+
+typedef VOID
+(NTAPI *PKNORMAL_ROUTINE)(
+ IN PVOID NormalContext OPTIONAL,
+ IN PVOID SystemArgument1 OPTIONAL,
+ IN PVOID SystemArgument2 OPTIONAL);
+
+typedef VOID
+(NTAPI *PKRUNDOWN_ROUTINE)(
+ IN struct _KAPC *Apc);
+
+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);
+
+typedef struct _KAPC {
+ UCHAR Type;
+ UCHAR SpareByte0;
+ UCHAR Size;
+ UCHAR SpareByte1;
+ ULONG SpareLong0;
+ struct _KTHREAD *Thread;
+ LIST_ENTRY ApcListEntry;
+ PKKERNEL_ROUTINE KernelRoutine;
+ PKRUNDOWN_ROUTINE RundownRoutine;
+ PKNORMAL_ROUTINE NormalRoutine;
+ PVOID NormalContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ CCHAR ApcStateIndex;
+ KPROCESSOR_MODE ApcMode;
+ 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;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
+*RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
+
+typedef PVOID PKIPI_CONTEXT;
+
+typedef VOID
+(NTAPI *PKIPI_WORKER)(
+ IN OUT PKIPI_CONTEXT PacketContext,
+ IN PVOID Parameter1 OPTIONAL,
+ IN PVOID Parameter2 OPTIONAL,
+ IN PVOID Parameter3 OPTIONAL);
+
+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 KSPIN_LOCK, *PKSPIN_LOCK;
+
+typedef struct _KSPIN_LOCK_QUEUE {
+ 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;
+} KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
+
+#if defined(_AMD64_)
+
+typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER;
+
+#define LockQueueDispatcherLock 0
+#define LockQueueExpansionLock 1
+#define LockQueuePfnLock 2
+#define LockQueueSystemSpaceLock 3
+#define LockQueueVacbLock 4
+#define LockQueueMasterLock 5
+#define LockQueueNonPagedPoolLock 6
+#define LockQueueIoCancelLock 7
+#define LockQueueWorkQueueLock 8
+#define LockQueueIoVpbLock 9
+#define LockQueueIoDatabaseLock 10
+#define LockQueueIoCompletionLock 11
+#define LockQueueNtfsStructLock 12
+#define LockQueueAfdWorkQueueLock 13
+#define LockQueueBcbLock 14
+#define LockQueueMmNonPagedPoolLock 15
+#define LockQueueUnusedSpare16 16
+#define LockQueueTimerTableLock 17
+#define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
+
+#else
+
+typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
+ LockQueueDispatcherLock,
+ LockQueueExpansionLock,
+ LockQueuePfnLock,
+ LockQueueSystemSpaceLock,
+ LockQueueVacbLock,
+ LockQueueMasterLock,
+ LockQueueNonPagedPoolLock,
+ LockQueueIoCancelLock,
+ LockQueueWorkQueueLock,
+ LockQueueIoVpbLock,
+ LockQueueIoDatabaseLock,
+ LockQueueIoCompletionLock,
+ LockQueueNtfsStructLock,
+ LockQueueAfdWorkQueueLock,
+ LockQueueBcbLock,
+ LockQueueMmNonPagedPoolLock,
+ LockQueueUnusedSpare16,
+ LockQueueTimerTableLock,
+ LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS
+} KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
+
+#endif /* defined(_AMD64_) */
+
+typedef VOID
+(NTAPI *PKDEFERRED_ROUTINE)(
+ IN struct _KDPC *Dpc,
+ IN PVOID DeferredContext OPTIONAL,
+ IN PVOID SystemArgument1 OPTIONAL,
+ IN PVOID SystemArgument2 OPTIONAL);
+
+typedef enum _KDPC_IMPORTANCE {
+ LowImportance,
+ MediumImportance,
+ HighImportance,
+ 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;
+} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
+
+typedef struct _KDPC_WATCHDOG_INFORMATION {
+ ULONG DpcTimeLimit;
+ ULONG DpcTimeCount;
+ ULONG DpcWatchdogLimit;
+ ULONG DpcWatchdogCount;
+ ULONG Reserved;
+} KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
+
+typedef struct _KDEVICE_QUEUE {
+ CSHORT Type;
+ CSHORT Size;
+ LIST_ENTRY DeviceListHead;
+ KSPIN_LOCK Lock;
+ #if defined(_AMD64_)
+ union {
+ BOOLEAN Busy;
+ struct {
+ 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;
+#if (NTDDI_VERSION < NTDDI_WIN7)
+ 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 {
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+ _ANONYMOUS_UNION union {
+ UCHAR TimerMiscFlags;
+ _ANONYMOUS_STRUCT struct {
+#if !defined(_X86_)
+ UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
+#else
+ UCHAR Index:1;
+ UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
+#endif
+ UCHAR Inserted:1;
+ volatile UCHAR Expired:1;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+#else
+ /* 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;
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+typedef struct _KEVENT {
+ DISPATCHER_HEADER Header;
+} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
+
+typedef struct _KSEMAPHORE {
+ 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;
+} 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;
+ };
+ ULONG CombinedApcDisable;
+ };
+} KGUARDED_MUTEX, *PKGUARDED_MUTEX;
+
+typedef struct _KMUTANT {
+ 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
+#define TIMER_TABLE_SHIFT 9
+
+typedef struct _KTIMER {
+ DISPATCHER_HEADER Header;
+ ULARGE_INTEGER DueTime;
+ LIST_ENTRY TimerListEntry;
+ struct _KDPC *Dpc;
+ #if !defined(_X86_)
+ ULONG Processor;
+ #endif
+ 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);
+
+typedef enum _POOL_TYPE {
+ NonPagedPool,
+ PagedPool,
+ NonPagedPoolMustSucceed,
+ DontUseThisType,
+ NonPagedPoolCacheAligned,
+ PagedPoolCacheAligned,
+ NonPagedPoolCacheAlignedMustS,
+ MaxPoolType,
+ NonPagedPoolSession = 32,
+ PagedPoolSession,
+ NonPagedPoolMustSucceedSession,
+ DontUseThisTypeSession,
+ NonPagedPoolCacheAlignedSession,
+ PagedPoolCacheAlignedSession,
+ NonPagedPoolCacheAlignedMustSSession
+} POOL_TYPE;
+
+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;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+ ULONGLONG Low;
+ LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
+ USHORT ControlWord;
+ USHORT StatusWord;
+ UCHAR TagWord;
+ UCHAR Reserved1;
+ USHORT ErrorOpcode;
+ ULONG ErrorOffset;
+ USHORT ErrorSelector;
+ USHORT Reserved2;
+ ULONG DataOffset;
+ USHORT DataSelector;
+ USHORT Reserved3;
+ ULONG MxCsr;
+ ULONG MxCsr_Mask;
+ M128A FloatRegisters[8];
+#if defined(_WIN64)
+ M128A XmmRegisters[16];
+ UCHAR Reserved4[96];
+#else
+ M128A XmmRegisters[8];
+ UCHAR Reserved4[192];
+ ULONG StackControl[7];
+ ULONG Cr0NpxState;
+#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
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#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
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+$if (_WDMDDK_)
+#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);
+
+$endif
+
--- /dev/null
+/******************************************************************************
+ * Memory manager Functions *
+ ******************************************************************************/
+$if (_WDMDDK_)
+/* Alignment Macros */
+#define ALIGN_DOWN_BY(size, align) \
+ ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
+
+#define ALIGN_UP_BY(size, align) \
+ (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
+
+#define ALIGN_DOWN_POINTER_BY(ptr, align) \
+ ((PVOID)ALIGN_DOWN_BY(ptr, align))
+
+#define ALIGN_UP_POINTER_BY(ptr, align) \
+ ((PVOID)ALIGN_UP_BY(ptr, align))
+
+#define ALIGN_DOWN(size, type) \
+ ALIGN_DOWN_BY(size, sizeof(type))
+
+#define ALIGN_UP(size, type) \
+ ALIGN_UP_BY(size, sizeof(type))
+
+#define ALIGN_DOWN_POINTER(ptr, type) \
+ ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
+
+#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)
+ */
+#define BYTE_OFFSET(Va) \
+ ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
+
+/* ULONG
+ * BYTES_TO_PAGES(
+ * IN ULONG Size)
+ */
+#define BYTES_TO_PAGES(Size) \
+ (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
+
+/* PVOID
+ * PAGE_ALIGN(
+ * IN PVOID Va)
+ */
+#define PAGE_ALIGN(Va) \
+ ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
+
+/* ULONG_PTR
+ * ROUND_TO_PAGES(
+ * IN ULONG_PTR Size)
+ */
+#define ROUND_TO_PAGES(Size) \
+ (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
+
+/* ULONG
+ * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
+ * IN PVOID Va,
+ * IN ULONG Size)
+ */
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
+ ((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(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteCount(_Mdl) \
+ ((_Mdl)->ByteCount)
+
+/*
+ * ULONG
+ * MmGetMdlByteOffset(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteOffset(_Mdl) \
+ ((_Mdl)->ByteOffset)
+
+#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
+
+/*
+ * PPFN_NUMBER
+ * MmGetMdlPfnArray(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlPfnArray(_Mdl) \
+ ((PPFN_NUMBER) ((_Mdl) + 1))
+
+/*
+ * PVOID
+ * MmGetMdlVirtualAddress(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlVirtualAddress(_Mdl) \
+ ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
+
+#define MmGetProcedureAddress(Address) (Address)
+
+/* PVOID MmGetSystemAddressForMdl(
+ * IN PMDL Mdl);
+ */
+#define MmGetSystemAddressForMdl(Mdl) \
+ (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ ((Mdl)->MappedSystemVa) : \
+ (MmMapLockedPages((Mdl), KernelMode)))
+
+/* PVOID
+ * MmGetSystemAddressForMdlSafe(
+ * IN PMDL Mdl,
+ * IN MM_PAGE_PRIORITY Priority)
+ */
+#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
+ (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
+ | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ (_Mdl)->MappedSystemVa : \
+ (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
+ KernelMode, MmCached, NULL, FALSE, (_Priority)))
+
+/*
+ * VOID
+ * MmInitializeMdl(
+ * IN PMDL MemoryDescriptorList,
+ * IN PVOID BaseVa,
+ * IN SIZE_T Length)
+ */
+#define MmInitializeMdl(_MemoryDescriptorList, \
+ _BaseVa, \
+ _Length) \
+{ \
+ (_MemoryDescriptorList)->Next = (PMDL) NULL; \
+ (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
+ (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
+ (_MemoryDescriptorList)->MdlFlags = 0; \
+ (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
+ (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
+ (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
+}
+
+/*
+ * VOID
+ * MmPrepareMdlForReuse(
+ * IN PMDL Mdl)
+ */
+#define MmPrepareMdlForReuse(_Mdl) \
+{ \
+ if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
+ MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
+ } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
+ } \
+}
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+PPHYSICAL_MEMORY_RANGE
+NTAPI
+MmGetPhysicalMemoryRanges(VOID);
+
+NTKERNELAPI
+PHYSICAL_ADDRESS
+NTAPI
+MmGetPhysicalAddress(
+ IN PVOID BaseAddress);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsNonPagedSystemAddressValid(
+ IN PVOID VirtualAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateNonCachedMemory(
+ IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeNonCachedMemory(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmGetVirtualForPhysical(
+ IN PHYSICAL_ADDRESS PhysicalAddress);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapUserAddressesToPage(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes,
+ IN PVOID PageAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapVideoDisplay(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapViewInSessionSpace(
+ IN PVOID Section,
+ OUT PVOID *MappedBase,
+ IN OUT PSIZE_T ViewSize);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapViewInSystemSpace(
+ IN PVOID Section,
+ OUT PVOID *MappedBase,
+ IN OUT PSIZE_T ViewSize);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsAddressValid(
+ IN PVOID VirtualAddress);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsThisAnNtAsSystem(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmLockPagableSectionByHandle(
+ IN PVOID ImageSectionHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmUnmapViewInSessionSpace(
+ IN PVOID MappedBase);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmUnmapViewInSystemSpace(
+ IN PVOID MappedBase);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnsecureVirtualMemory(
+ IN HANDLE SecureHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmRemovePhysicalMemory(
+ IN PPHYSICAL_ADDRESS StartAddress,
+ IN OUT PLARGE_INTEGER NumberOfBytes);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+MmSecureVirtualMemory(
+ IN PVOID Address,
+ IN SIZE_T Size,
+ IN ULONG ProbeMode);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapVideoDisplay(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmAddPhysicalMemory(
+ IN PPHYSICAL_ADDRESS StartAddress,
+ IN OUT PLARGE_INTEGER NumberOfBytes);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemory(
+ IN SIZE_T NumberOfBytes,
+ IN PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCache(
+ IN SIZE_T NumberOfBytes,
+ IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+ IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+ IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+ IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmAllocateContiguousMemorySpecifyCacheNode(
+ IN SIZE_T NumberOfBytes,
+ IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+ IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+ IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+ IN MEMORY_CACHING_TYPE CacheType,
+ IN NODE_REQUIREMENT PreferredNode);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemory(
+ IN PVOID BaseAddress);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemorySpecifyCache(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheType);
+$endif
+
+$if (_WDMDDK_)
+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
+PMDL
+NTAPI
+MmAllocatePagesForMdl(
+ IN PHYSICAL_ADDRESS LowAddress,
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN PHYSICAL_ADDRESS SkipBytes,
+ IN SIZE_T TotalBytes);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmBuildMdlForNonPagedPool(
+ IN OUT PMDLX MemoryDescriptorList);
+
+//DECLSPEC_DEPRECATED_DDK
+NTKERNELAPI
+PMDL
+NTAPI
+MmCreateMdl(
+ IN PMDL MemoryDescriptorList OPTIONAL,
+ IN PVOID Base,
+ IN SIZE_T Length);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemory(
+ IN PVOID BaseAddress);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreeContiguousMemorySpecifyCache(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheType);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmFreePagesFromMdl(
+ IN PMDLX MemoryDescriptorList);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmGetSystemRoutineAddress(
+ IN PUNICODE_STRING SystemRoutineName);
+
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsDriverVerifying(
+ IN struct _DRIVER_OBJECT *DriverObject);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmLockPagableDataSection(
+ IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapIoSpace(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheEnable);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapLockedPages(
+ IN PMDL MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmMapLockedPagesSpecifyCache(
+ IN PMDLX MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode,
+ IN MEMORY_CACHING_TYPE CacheType,
+ IN PVOID BaseAddress OPTIONAL,
+ IN ULONG BugCheckOnFailure,
+ IN MM_PAGE_PRIORITY Priority);
+
+NTKERNELAPI
+PVOID
+NTAPI
+MmPageEntireDriver(
+ IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmProbeAndLockPages(
+ IN OUT PMDL MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode,
+ IN LOCK_OPERATION Operation);
+
+NTKERNELAPI
+MM_SYSTEMSIZE
+NTAPI
+MmQuerySystemSize(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmResetDriverPaging(
+ IN PVOID AddressWithinSection);
+
+NTKERNELAPI
+SIZE_T
+NTAPI
+MmSizeOfMdl(
+ IN PVOID Base,
+ IN SIZE_T Length);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnlockPagableImageSection(
+ IN PVOID ImageSectionHandle);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnlockPages(
+ IN OUT PMDL MemoryDescriptorList);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapIoSpace(
+ 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);
+
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapLockedPages(
+ 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
+
+#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)
+$if (_NTDDK_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmCreateMirror(VOID);
+$endif
+$if (_WDMDDK_)
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsIoSpaceActive(
+ IN PHYSICAL_ADDRESS StartAddress,
+ IN SIZE_T NumberOfBytes);
+$endif
+#endif
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
+PMDL
+NTAPI
+MmAllocatePagesForMdlEx(
+ IN PHYSICAL_ADDRESS LowAddress,
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN PHYSICAL_ADDRESS SkipBytes,
+ IN SIZE_T TotalBytes,
+ IN MEMORY_CACHING_TYPE CacheType,
+ IN ULONG Flags);
+#endif
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+$if (_NTDDK_)
+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
+
+$if (_WDMDDK_)
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsDriverVerifyingByAddress(
+ IN PVOID AddressWithinSection);
+$endif
+#endif
+
--- /dev/null
+/******************************************************************************
+ * Memory manager Types *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#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 MDL_MAPPED_TO_SYSTEM_VA 0x0001
+#define MDL_PAGES_LOCKED 0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE 0x0008
+#define MDL_PARTIAL 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ 0x0040
+#define MDL_WRITE_OPERATION 0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES 0x0200
+#define MDL_DESCRIBES_AWE 0x0400
+#define MDL_IO_SPACE 0x0800
+#define MDL_NETWORK_HEADER 0x1000
+#define MDL_MAPPING_CAN_FAIL 0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED 0x4000
+#define MDL_INTERNAL 0x8000
+
+#define MDL_MAPPING_FLAGS ( \
+ MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_PAGES_LOCKED | \
+ MDL_SOURCE_IS_NONPAGED_POOL | \
+ MDL_PARTIAL_HAS_BEEN_MAPPED | \
+ MDL_PARENT_MAPPED_SYSTEM_VA | \
+ MDL_SYSTEM_VA | \
+ MDL_IO_SPACE)
+
+#define FLUSH_MULTIPLE_MAXIMUM 32
+
+/* Section access rights */
+#define SECTION_QUERY 0x0001
+#define SECTION_MAP_WRITE 0x0002
+#define SECTION_MAP_READ 0x0004
+#define SECTION_MAP_EXECUTE 0x0008
+#define SECTION_EXTEND_SIZE 0x0010
+#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
+
+#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
+ SECTION_MAP_WRITE | \
+ SECTION_MAP_READ | \
+ SECTION_MAP_EXECUTE | \
+ SECTION_EXTEND_SIZE)
+
+#define SESSION_QUERY_ACCESS 0x0001
+#define SESSION_MODIFY_ACCESS 0x0002
+
+#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ SESSION_QUERY_ACCESS | \
+ SESSION_MODIFY_ACCESS)
+
+#define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
+
+#define PAGE_NOACCESS 0x01
+#define PAGE_READONLY 0x02
+#define PAGE_READWRITE 0x04
+#define PAGE_WRITECOPY 0x08
+#define PAGE_EXECUTE 0x10
+#define PAGE_EXECUTE_READ 0x20
+#define PAGE_EXECUTE_READWRITE 0x40
+#define PAGE_EXECUTE_WRITECOPY 0x80
+#define PAGE_GUARD 0x100
+#define PAGE_NOCACHE 0x200
+#define PAGE_WRITECOMBINE 0x400
+
+#define MEM_COMMIT 0x1000
+#define MEM_RESERVE 0x2000
+#define MEM_DECOMMIT 0x4000
+#define MEM_RELEASE 0x8000
+#define MEM_FREE 0x10000
+#define MEM_PRIVATE 0x20000
+#define MEM_MAPPED 0x40000
+#define MEM_RESET 0x80000
+#define MEM_TOP_DOWN 0x100000
+#define MEM_LARGE_PAGES 0x20000000
+#define MEM_4MB_PAGES 0x80000000
+
+#define SEC_RESERVE 0x4000000
+#define SEC_COMMIT 0x8000000
+#define SEC_LARGE_PAGES 0x80000000
+
+/* Section map options */
+typedef enum _SECTION_INHERIT {
+ ViewShare = 1,
+ ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef ULONG PFN_COUNT;
+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;
+} MDL, *PMDL;
+typedef MDL *PMDLX;
+
+typedef enum _MEMORY_CACHING_TYPE_ORIG {
+ MmFrameBufferCached = 2
+} MEMORY_CACHING_TYPE_ORIG;
+
+typedef enum _MEMORY_CACHING_TYPE {
+ MmNonCached = FALSE,
+ MmCached = TRUE,
+ MmWriteCombined = MmFrameBufferCached,
+ MmHardwareCoherentCached,
+ MmNonCachedUnordered,
+ MmUSWCCached,
+ MmMaximumCacheType
+} MEMORY_CACHING_TYPE;
+
+typedef enum _MM_PAGE_PRIORITY {
+ LowPagePriority,
+ NormalPagePriority = 16,
+ HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _MM_SYSTEM_SIZE {
+ MmSmallSystem,
+ MmMediumSystem,
+ MmLargeSystem
+} MM_SYSTEMSIZE;
+
+extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
+extern PVOID MmBadPointer;
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+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;
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+/*
+ * ntddk.h
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ * Amine Khaldi
+ * Timo Kreuzer (timo.kreuzer@reactos.org)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#define _NTDDK_
+
+#if !defined(_NTHAL_) && !defined(_NTIFS_)
+#define _NTDDK_INCLUDED_
+#define _DDK_DRIVER_
+#endif
+
+/* Dependencies */
+
+#define NT_INCLUDED
+#define _CTYPE_DISABLE_MACROS
+
+#include <wdm.h>
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
+#include <mce.h>
+
+/* FIXME
+#include <bugcodes.h>
+#include <ntiologc.h>
+*/
+
+#include <stdarg.h> // FIXME
+#include <basetyps.h> // FIXME
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* GUID and UUID */
+#ifndef _NTLSA_IFS_
+#ifndef _NTLSA_AUDIT_
+#define _NTLSA_AUDIT_
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#endif /* _NTLSA_AUDIT_ */
+#endif /* _NTLSA_IFS_ */
+
+typedef GUID UUID;
+
+struct _LOADER_PARAMETER_BLOCK;
+struct _CREATE_DISK;
+struct _DRIVE_LAYOUT_INFORMATION_EX;
+struct _SET_PARTITION_INFORMATION_EX;
+
+typedef struct _BUS_HANDLER *PBUS_HANDLER;
+typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+#if defined(_NTHAL_INCLUDED_)
+typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
+#endif
+typedef struct _PEB *PPEB;
+
+#ifndef _NTIMAGE_
+
+typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
+typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
+
+#ifdef _WIN64
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+#else
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+#endif
+
+#endif /* _NTIMAGE_ */
+
+$define (_NTDDK_)
+$include (extypes.h)
+$include (iotypes.h)
+$include (haltypes.h)
+$include (ketypes.h)
+$include (kdtypes.h)
+$include (mmtypes.h)
+$include (pstypes.h)
+$include (rtltypes.h)
+$include (setypes.h)
+
+#if defined(_M_IX86)
+$include(x86/ke.h)
+$include(x86/mm.h)
+#elif defined(_M_AMD64)
+$include(amd64/ke.h)
+$include(amd64/mm.h)
+#elif defined(_M_IA64)
+$include(ia64/ke.h)
+#elif defined(_M_PPC)
+$include(ppc/ke.h)
+#elif defined(_M_MIPS)
+$include(mips/ke.h)
+#elif defined(_M_ARM)
+$include(arm/ke.h)
+#else
+#error Unknown Architecture
+#endif
+
+$include (exfuncs.h)
+$include (halfuncs.h)
+$include (iofuncs.h)
+$include (kdfuncs.h)
+$include (kefuncs.h)
+$include (mmfuncs.h)
+$include (psfuncs.h)
+$include (rtlfuncs.h)
+$include (sefuncs.h)
+$include (zwfuncs.h)
+
+
+/* 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
--- /dev/null
+$if (_WDMDDK_)
+#ifndef _NTTMAPI_
+#define _NTTMAPI_
+
+#include <ktmtypes.h>
+
+#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,
+ KTMOBJECT_RESOURCE_MANAGER,
+ KTMOBJECT_ENLISTMENT,
+ KTMOBJECT_INVALID
+} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
+
+typedef struct _KTMOBJECT_CURSOR {
+ GUID LastQuery;
+ ULONG ObjectIdCount;
+ GUID ObjectIds[1];
+} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
+
+typedef enum _TRANSACTION_INFORMATION_CLASS {
+ TransactionBasicInformation,
+ TransactionPropertiesInformation,
+ TransactionEnlistmentInformation,
+ TransactionSuperiorEnlistmentInformation
+} TRANSACTION_INFORMATION_CLASS;
+
+typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
+ TransactionManagerBasicInformation,
+ TransactionManagerLogInformation,
+ TransactionManagerLogPathInformation,
+ TransactionManagerRecoveryInformation = 4
+} TRANSACTIONMANAGER_INFORMATION_CLASS;
+
+typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
+ ResourceManagerBasicInformation,
+ 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_ */
+$endif
--- /dev/null
+/******************************************************************************
+ * Object Manager Functions *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObject(
+ IN PVOID Object);
+#define ObDereferenceObject ObfDereferenceObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObGetObjectSecurity(
+ IN PVOID Object,
+ OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
+ OUT PBOOLEAN MemoryAllocated);
+
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObject(
+ IN PVOID Object);
+#define ObReferenceObject ObfReferenceObject
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByHandle(
+ IN HANDLE Handle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ OUT PVOID *Object,
+ OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByPointer(
+ IN PVOID Object,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode);
+
+NTKERNELAPI
+VOID
+NTAPI
+ObReleaseObjectSecurity(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN BOOLEAN MemoryAllocated);
+
+#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) */
+
+$endif
+
--- /dev/null
+/******************************************************************************
+ * 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;
+} 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;
+extern POBJECT_TYPE NTSYSAPI PsThreadType;
+extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
+extern POBJECT_TYPE NTSYSAPI PsProcessType;
+
+
--- /dev/null
+/******************************************************************************
+ * Power Management Support Functions *
+ ******************************************************************************/
+
+#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCallDriver(
+ 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);
+
+NTKERNELAPI
+PVOID
+NTAPI
+PoRegisterSystemState(
+ IN OUT PVOID StateHandle OPTIONAL,
+ IN EXECUTION_STATE Flags);
+
+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);
+
+NTKERNELAPI
+POWER_STATE
+NTAPI
+PoSetPowerState(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN POWER_STATE_TYPE Type,
+ IN POWER_STATE State);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemState(
+ IN EXECUTION_STATE Flags);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartNextPowerIrp(
+ IN OUT struct _IRP *Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoUnregisterSystemState(
+ IN OUT PVOID StateHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestShutdownEvent(
+ OUT PVOID *Event);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemWake(
+ IN OUT struct _IRP *Irp);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoGetSystemWake(
+ IN struct _IRP *Irp);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRegisterPowerSettingCallback(
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN LPCGUID SettingGuid,
+ IN PPOWER_SETTING_CALLBACK Callback,
+ IN PVOID Context OPTIONAL,
+ OUT PVOID *Handle OPTIONAL);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoUnregisterPowerSettingCallback(
+ IN OUT PVOID Handle);
+
+#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
+PoStartDeviceBusy(
+ IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoEndDeviceBusy(
+ IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoQueryWatchdogTime(
+ IN PDEVICE_OBJECT Pdo,
+ OUT PULONG SecondsRemaining);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoDeletePowerRequest(
+ IN OUT PVOID PowerRequest);
+
+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
+NTSTATUS
+NTAPI
+PoCreatePowerRequest(
+ OUT PVOID *PowerRequest,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PCOUNTED_REASON_CONTEXT Context);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
--- /dev/null
+/******************************************************************************
+ * Power Management Support Types *
+ ******************************************************************************/
+
+#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
+} 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
+} POWER_INFORMATION_LEVEL;
+
+typedef enum {
+ PowerActionNone = 0,
+ PowerActionReserved,
+ PowerActionSleep,
+ PowerActionHibernate,
+ PowerActionShutdown,
+ PowerActionShutdownReset,
+ PowerActionShutdownOff,
+ PowerActionWarmEject
+} POWER_ACTION, *PPOWER_ACTION;
+
+typedef enum _DEVICE_POWER_STATE {
+ PowerDeviceUnspecified = 0,
+ 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;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef enum _POWER_STATE_TYPE {
+ SystemPowerState = 0,
+ 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;
+} 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)(
+ 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)(
+ IN LPCGUID SettingGuid,
+ IN PVOID Value,
+ IN ULONG ValueLength,
+ IN OUT PVOID Context OPTIONAL);
+typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
+
+
--- /dev/null
+$if (_WDMDDK_)
+
+/* 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);
+
+$endif
+
+
--- /dev/null
+/******************************************************************************
+ * Process Manager Functions *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsWrapApcWow64Thread(
+ IN OUT PVOID *ApcContext,
+ IN OUT PVOID *ApcRoutine);
+
+/*
+ * PEPROCESS
+ * PsGetCurrentProcess(VOID)
+ */
+#define PsGetCurrentProcess IoGetCurrentProcess
+
+#if !defined(_PSGETCURRENTTHREAD_)
+#define _PSGETCURRENTTHREAD_
+FORCEINLINE
+PETHREAD
+NTAPI
+PsGetCurrentThread(VOID)
+{
+ return (PETHREAD)KeGetCurrentThread();
+}
+#endif /* !_PSGETCURRENTTHREAD_ */
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenProcess(
+ OUT PHANDLE ProcessHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN PCLIENT_ID ClientId OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryInformationProcess(
+ IN HANDLE ProcessHandle,
+ IN PROCESSINFOCLASS ProcessInformationClass,
+ OUT PVOID ProcessInformation OPTIONAL,
+ IN ULONG ProcessInformationLength,
+ OUT PULONG ReturnLength OPTIONAL);
+$endif /* _NTDDK_ */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_WDMDDK_)
+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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsTerminateSystemThread(
+ IN NTSTATUS ExitStatus);
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateProcessNotifyRoutine(
+ IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
+ IN BOOLEAN Remove);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateThreadNotifyRoutine(
+ IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetLoadImageNotifyRoutine(
+ IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetCurrentProcessId(VOID);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetCurrentThreadId(VOID);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsGetVersion(
+ OUT PULONG MajorVersion OPTIONAL,
+ OUT PULONG MinorVersion OPTIONAL,
+ OUT PULONG BuildNumber OPTIONAL,
+ OUT PUNICODE_STRING CSDVersion OPTIONAL);
+$endif /* _NTDDK_ */
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_NTDDK_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetProcessId(
+ IN PEPROCESS Process);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetThreadId(
+ IN PETHREAD Thread);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveCreateThreadNotifyRoutine(
+ IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveLoadImageNotifyRoutine(
+ IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTKERNELAPI
+LONGLONG
+NTAPI
+PsGetProcessCreateTimeQuadPart(
+ IN PEPROCESS Process);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
+HANDLE
+NTAPI
+PsGetThreadProcessId(
+ IN PETHREAD Thread);
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsSetCurrentThreadPrefetching(
+ IN BOOLEAN Prefetching);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsIsCurrentThreadPrefetching(VOID);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsSetCreateProcessNotifyRoutineEx(
+ IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
+ IN BOOLEAN Remove);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+$endif
--- /dev/null
+/******************************************************************************
+ * Process Manager Types *
+ ******************************************************************************/
+$if (_WDMDDK_)
+
+#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
+
+/* Thread Access Rights */
+#define THREAD_TERMINATE 0x0001
+#define THREAD_SUSPEND_RESUME 0x0002
+#define THREAD_ALERT 0x0004
+#define THREAD_GET_CONTEXT 0x0008
+#define THREAD_SET_CONTEXT 0x0010
+#define THREAD_SET_INFORMATION 0x0020
+#define THREAD_SET_LIMITED_INFORMATION 0x0400
+#define THREAD_QUERY_LIMITED_INFORMATION 0x0800
+
+#define PROCESS_DUP_HANDLE (0x0040)
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
+#endif
+
+#define LOW_PRIORITY 0
+#define LOW_REALTIME_PRIORITY 16
+#define HIGH_PRIORITY 31
+#define MAXIMUM_PRIORITY 32
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#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
+
+typedef struct _IMAGE_INFO {
+ _ANONYMOUS_UNION union {
+ ULONG Properties;
+ _ANONYMOUS_STRUCT struct {
+ ULONG ImageAddressingMode:8;
+ ULONG SystemModeImage:1;
+ ULONG ImageMappedToAllPids:1;
+ ULONG ExtendedInfoPresent:1;
+ ULONG Reserved:21;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PVOID ImageBase;
+ ULONG ImageSelector;
+ SIZE_T ImageSize;
+ ULONG ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
+
+typedef struct _IMAGE_INFO_EX {
+ SIZE_T Size;
+ IMAGE_INFO ImageInfo;
+ struct _FILE_OBJECT *FileObject;
+} IMAGE_INFO_EX, *PIMAGE_INFO_EX;
+
+typedef VOID
+(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
+ IN PUNICODE_STRING FullImageName,
+ IN HANDLE ProcessId,
+ IN PIMAGE_INFO ImageInfo);
+
+#define THREAD_CSWITCH_PMU_DISABLE FALSE
+#define THREAD_CSWITCH_PMU_ENABLE TRUE
+
+#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
+
+#define PROCESS_HANDLE_TRACING_MAX_STACKS 16
+
+typedef struct _NT_TIB {
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID SubSystemTib;
+ _ANONYMOUS_UNION union {
+ PVOID FiberData;
+ ULONG Version;
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
+typedef struct _NT_TIB32 {
+ ULONG ExceptionList;
+ ULONG StackBase;
+ ULONG StackLimit;
+ ULONG SubSystemTib;
+ __GNU_EXTENSION union {
+ ULONG FiberData;
+ ULONG Version;
+ };
+ ULONG ArbitraryUserPointer;
+ ULONG Self;
+} NT_TIB32,*PNT_TIB32;
+
+typedef struct _NT_TIB64 {
+ ULONG64 ExceptionList;
+ ULONG64 StackBase;
+ ULONG64 StackLimit;
+ ULONG64 SubSystemTib;
+ __GNU_EXTENSION union {
+ ULONG64 FiberData;
+ ULONG Version;
+ };
+ ULONG64 ArbitraryUserPointer;
+ ULONG64 Self;
+} NT_TIB64,*PNT_TIB64;
+
+typedef enum _PROCESSINFOCLASS {
+ ProcessBasicInformation,
+ ProcessQuotaLimits,
+ ProcessIoCounters,
+ ProcessVmCounters,
+ ProcessTimes,
+ ProcessBasePriority,
+ ProcessRaisePriority,
+ ProcessDebugPort,
+ ProcessExceptionPort,
+ ProcessAccessToken,
+ ProcessLdtInformation,
+ ProcessLdtSize,
+ ProcessDefaultHardErrorMode,
+ ProcessIoPortHandlers,
+ ProcessPooledUsageAndLimits,
+ ProcessWorkingSetWatch,
+ ProcessUserModeIOPL,
+ ProcessEnableAlignmentFaultFixup,
+ ProcessPriorityClass,
+ ProcessWx86Information,
+ ProcessHandleCount,
+ ProcessAffinityMask,
+ ProcessPriorityBoost,
+ ProcessDeviceMap,
+ ProcessSessionInformation,
+ ProcessForegroundInformation,
+ ProcessWow64Information,
+ ProcessImageFileName,
+ ProcessLUIDDeviceMapsEnabled,
+ ProcessBreakOnTermination,
+ ProcessDebugObjectHandle,
+ ProcessDebugFlags,
+ ProcessHandleTracing,
+ ProcessIoPriority,
+ ProcessExecuteFlags,
+ ProcessTlsInformation,
+ ProcessCookie,
+ ProcessImageInformation,
+ ProcessCycleTime,
+ ProcessPagePriority,
+ ProcessInstrumentationCallback,
+ ProcessThreadStackAllocation,
+ ProcessWorkingSetWatchEx,
+ ProcessImageFileNameWin32,
+ ProcessImageFileMapping,
+ ProcessAffinityUpdateMode,
+ ProcessMemoryAllocationMode,
+ ProcessGroupInformation,
+ ProcessTokenVirtualizationEnabled,
+ ProcessConsoleHostProcess,
+ ProcessWindowInformation,
+ MaxProcessInfoClass
+} PROCESSINFOCLASS;
+
+typedef enum _THREADINFOCLASS {
+ ThreadBasicInformation,
+ ThreadTimes,
+ ThreadPriority,
+ ThreadBasePriority,
+ ThreadAffinityMask,
+ ThreadImpersonationToken,
+ ThreadDescriptorTableEntry,
+ ThreadEnableAlignmentFaultFixup,
+ ThreadEventPair_Reusable,
+ ThreadQuerySetWin32StartAddress,
+ ThreadZeroTlsCell,
+ ThreadPerformanceCount,
+ ThreadAmILastThread,
+ ThreadIdealProcessor,
+ ThreadPriorityBoost,
+ ThreadSetTlsArrayAddress,
+ ThreadIsIoPending,
+ ThreadHideFromDebugger,
+ ThreadBreakOnTermination,
+ ThreadSwitchLegacyState,
+ ThreadIsTerminated,
+ ThreadLastSystemCall,
+ ThreadIoPriority,
+ ThreadCycleTime,
+ ThreadPagePriority,
+ ThreadActualBasePriority,
+ ThreadTebInformation,
+ ThreadCSwitchMon,
+ ThreadCSwitchPmu,
+ ThreadWow64Context,
+ ThreadGroupInformation,
+ ThreadUmsInformation,
+ ThreadCounterProfiling,
+ ThreadIdealProcessorEx,
+ MaxThreadInfoClass
+} THREADINFOCLASS;
+
+typedef struct _PAGE_PRIORITY_INFORMATION {
+ ULONG PagePriority;
+} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
+
+typedef struct _PROCESS_WS_WATCH_INFORMATION {
+ PVOID FaultingPc;
+ PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
+
+typedef struct _PROCESS_BASIC_INFORMATION {
+ NTSTATUS ExitStatus;
+ struct _PEB *PebBaseAddress;
+ ULONG_PTR AffinityMask;
+ KPRIORITY BasePriority;
+ ULONG_PTR UniqueProcessId;
+ ULONG_PTR InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+
+typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
+ SIZE_T Size;
+ PROCESS_BASIC_INFORMATION BasicInfo;
+ 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_DEVICEMAP_INFORMATION {
+ __GNU_EXTENSION union {
+ struct {
+ HANDLE DirectoryHandle;
+ } Set;
+ struct {
+ ULONG DriveMap;
+ UCHAR DriveType[32];
+ } Query;
+ };
+} 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 _PROCESS_SESSION_INFORMATION {
+ ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
+ ULONG Flags;
+} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
+ ULONG Flags;
+ ULONG TotalSlots;
+} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
+
+typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
+ HANDLE Handle;
+ CLIENT_ID ClientId;
+ ULONG Type;
+ PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
+} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
+
+typedef struct _PROCESS_HANDLE_TRACING_QUERY {
+ HANDLE Handle;
+ ULONG TotalTraces;
+ PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
+} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
+
+extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
+
+$endif /* _NTDDK_ */
+
--- /dev/null
+/******************************************************************************
+ * Runtime Library Functions *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+
+#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+
+#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
+
+FORCEINLINE
+VOID
+InitializeListHead(
+ OUT PLIST_ENTRY ListHead)
+{
+ 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)
+{
+ PLIST_ENTRY OldFlink;
+ OldFlink = ListHead->Flink;
+ Entry->Flink = OldFlink;
+ Entry->Blink = ListHead;
+ OldFlink->Blink = Entry;
+ ListHead->Flink = Entry;
+}
+
+FORCEINLINE
+VOID
+AppendTailList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY ListToAppend)
+{
+ PLIST_ENTRY ListEnd = ListHead->Blink;
+
+ ListHead->Blink->Flink = ListToAppend;
+ ListHead->Blink = ListToAppend->Blink;
+ ListToAppend->Blink->Flink = ListHead;
+ ListToAppend->Blink = ListEnd;
+}
+
+FORCEINLINE
+PSINGLE_LIST_ENTRY
+PopEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead)
+{
+ PSINGLE_LIST_ENTRY FirstEntry;
+ FirstEntry = ListHead->Next;
+ if (FirstEntry != NULL) {
+ ListHead->Next = FirstEntry->Next;
+ }
+ return FirstEntry;
+}
+
+FORCEINLINE
+VOID
+PushEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead,
+ IN OUT PSINGLE_LIST_ENTRY Entry)
+{
+ Entry->Next = ListHead->Next;
+ ListHead->Next = Entry;
+}
+
+#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
+
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+ IN PVOID FailedAssertion,
+ IN PVOID FileName,
+ IN ULONG LineNumber,
+ IN PSTR Message);
+
+/* VOID
+ * RtlCopyMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlCopyMemory(Destination, Source, Length) \
+ memcpy(Destination, Source, Length)
+
+#define RtlCopyBytes RtlCopyMemory
+
+#if defined(_M_AMD64)
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyMemoryNonTemporal(
+ VOID UNALIGNED *Destination,
+ CONST VOID UNALIGNED *Source,
+ SIZE_T Length);
+#else
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+#endif
+
+/* BOOLEAN
+ * RtlEqualLuid(
+ * IN PLUID Luid1,
+ * IN PLUID Luid2)
+ */
+#define RtlEqualLuid(Luid1, Luid2) \
+ (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
+
+/* ULONG
+ * RtlEqualMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlEqualMemory(Destination, Source, Length) \
+ (!memcmp(Destination, Source, Length))
+
+/* VOID
+ * RtlFillMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length,
+ * IN UCHAR Fill)
+ */
+#define RtlFillMemory(Destination, Length, Fill) \
+ memset(Destination, Fill, Length)
+
+#define RtlFillBytes RtlFillMemory
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeUnicodeString(
+ IN OUT PUNICODE_STRING UnicodeString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGUIDFromString(
+ IN PUNICODE_STRING GuidString,
+ OUT GUID *Guid);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCWSTR SourceString OPTIONAL);
+
+/* VOID
+ * RtlMoveMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlMoveMemory(Destination, Source, Length) \
+ memmove(Destination, Source, Length)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStringFromGUID(
+ IN REFGUID Guid,
+ OUT PUNICODE_STRING GuidString);
+
+/* VOID
+ * RtlZeroMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length)
+ */
+#define RtlZeroMemory(Destination, Length) \
+ memset(Destination, 0, Length)
+
+#define RtlZeroBytes RtlZeroMemory
+
+$endif
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTIFS_)
+NTSYSAPI
+PVOID
+NTAPI
+RtlAllocateHeap(
+ IN HANDLE HeapHandle,
+ IN ULONG Flags OPTIONAL,
+ IN SIZE_T Size);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlFreeHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags OPTIONAL,
+ IN PVOID BaseAddress);
+
+$endif
+
+$if (_NTDDK_)
+
+#ifndef RTL_USE_AVL_TABLES
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTable(
+ OUT PRTL_GENERIC_TABLE Table,
+ IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
+ IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
+ IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
+ IN PVOID TableContext OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTable(
+ IN PRTL_GENERIC_TABLE Table,
+ IN PVOID Buffer,
+ IN CLONG BufferSize,
+ OUT PBOOLEAN NewElement OPTIONAL);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFull(
+ IN PRTL_GENERIC_TABLE Table,
+ IN PVOID Buffer,
+ IN CLONG BufferSize,
+ OUT PBOOLEAN NewElement OPTIONAL,
+ IN PVOID NodeOrParent,
+ IN TABLE_SEARCH_RESULT SearchResult);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTable(
+ IN PRTL_GENERIC_TABLE Table,
+ IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTable(
+ IN PRTL_GENERIC_TABLE Table,
+ IN PVOID Buffer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFull(
+ IN PRTL_GENERIC_TABLE Table,
+ IN PVOID Buffer,
+ OUT PVOID *NodeOrParent,
+ OUT TABLE_SEARCH_RESULT *SearchResult);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTable(
+ IN PRTL_GENERIC_TABLE Table,
+ IN BOOLEAN Restart);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplaying(
+ IN PRTL_GENERIC_TABLE Table,
+ IN OUT PVOID *RestartKey);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTable(
+ IN PRTL_GENERIC_TABLE Table,
+ IN ULONG I);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElements(
+ IN PRTL_GENERIC_TABLE Table);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmpty(
+ IN PRTL_GENERIC_TABLE Table);
+
+#endif /* !RTL_USE_AVL_TABLES */
+
+#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(
+ IN OUT PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(
+ IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+ IN PRTL_SPLAY_LINKS Links,
+ IN OUT PRTL_SPLAY_LINKS *Root);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(
+ IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(
+ IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(
+ IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(
+ IN PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlPrefixUnicodeString(
+ IN PCUNICODE_STRING String1,
+ IN PCUNICODE_STRING String2,
+ IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlUpperString(
+ IN OUT PSTRING DestinationString,
+ IN const PSTRING SourceString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlMapGenericMask(
+ IN OUT PACCESS_MASK AccessMask,
+ IN PGENERIC_MAPPING GenericMapping);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlVolumeDeviceToDosName(
+ IN PVOID VolumeDeviceObject,
+ OUT PUNICODE_STRING DosName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetVersion(
+ IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlVerifyVersionInfo(
+ IN PRTL_OSVERSIONINFOEXW VersionInfo,
+ IN ULONG TypeMask,
+ IN ULONGLONG ConditionMask);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareString(
+ IN const PSTRING String1,
+ IN const PSTRING String2,
+ IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyString(
+ OUT PSTRING DestinationString,
+ IN const PSTRING SourceString OPTIONAL);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualString(
+ IN const PSTRING String1,
+ IN const PSTRING String2,
+ IN BOOLEAN CaseInSensitive);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCharToInteger(
+ IN PCSZ String,
+ IN ULONG Base OPTIONAL,
+ OUT PULONG Value);
+
+NTSYSAPI
+CHAR
+NTAPI
+RtlUpperChar(
+ IN CHAR Character);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlWalkFrameChain(
+ OUT PVOID *Callers,
+ IN ULONG Count,
+ IN ULONG Flags);
+
+$endif
+
+$if (_WDMDDK_)
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG StartingIndex,
+ IN ULONG Length);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsSet(
+ 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);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+ IN PCANSI_STRING AnsiString);
+
+#define RtlAnsiStringToUnicodeSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxAnsiStringToUnicodeSize(String) : \
+ ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
+)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeStringToString(
+ IN OUT PUNICODE_STRING Destination,
+ IN PCUNICODE_STRING Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeToString(
+ IN OUT PUNICODE_STRING Destination,
+ IN PCWSTR Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCheckRegistryKey(
+ IN ULONG RelativeTo,
+ IN PWSTR Path);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearAllBits(
+ IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBits(
+ 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);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeString(
+ 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);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateRegistryKey(
+ IN ULONG RelativeTo,
+ IN PWSTR Path);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateSecurityDescriptor(
+ IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN ULONG Revision);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteRegistryValue(
+ 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);
+
+#if !defined(_AMD64_) && !defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedIntegerMultiply(
+ IN LARGE_INTEGER Multiplicand,
+ IN LONG Multiplier);
+
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedLargeIntegerDivide(
+ IN LARGE_INTEGER Dividend,
+ IN ULONG Divisor,
+ OUT PULONG Remainder OPTIONAL);
+#endif
+
+#if defined(_X86_) || defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedMagicDivide(
+ IN LARGE_INTEGER Dividend,
+ IN LARGE_INTEGER MagicDivisor,
+ IN CCHAR ShiftCount);
+#endif
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeAnsiString(
+ IN PANSI_STRING AnsiString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBitsAndSet(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindFirstRunClear(
+ 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);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLastBackwardRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG FromIndex,
+ OUT PULONG StartingRunIndex);
+
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindLeastSignificantBit(
+ IN ULONGLONG Set);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLongestRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ OUT PULONG StartingIndex);
+
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindMostSignificantBit(
+ IN ULONGLONG Set);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindNextForwardRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG FromIndex,
+ OUT PULONG StartingRunIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBitsAndClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitAnsiString(
+ IN OUT PANSI_STRING DestinationString,
+ IN PCSZ SourceString);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeBitMap(
+ IN PRTL_BITMAP BitMapHeader,
+ IN PULONG BitMapBuffer,
+ IN ULONG SizeOfBitMap);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitString(
+ IN OUT PSTRING DestinationString,
+ IN PCSZ SourceString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIntegerToUnicodeString(
+ 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);
+
+#ifdef _WIN64
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlInt64ToUnicodeString(Value, Base, String)
+#else
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlIntegerToUnicodeString(Value, Base, String)
+#endif
+
+/* BOOLEAN
+ * RtlIsZeroLuid(
+ * IN PLUID L1);
+ */
+#define RtlIsZeroLuid(_L1) \
+ ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfClearBits(
+ IN PRTL_BITMAP BitMapHeader);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfSetBits(
+ 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);
+
+#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);
+ */
+#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) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
+ ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
+ } \
+ else \
+ { \
+ *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
+ }
+
+#endif /* defined(_AMD64_) */
+
+#ifdef _WIN64
+/* VOID
+ * RtlStoreUlongPtr(
+ * IN OUT PULONG_PTR Address,
+ * IN ULONG_PTR Value);
+ */
+#define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
+#else
+#define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
+#endif /* _WIN64 */
+
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeFieldsToTime(
+ IN PTIME_FIELDS TimeFields,
+ IN PLARGE_INTEGER Time);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlTimeToTimeFields(
+ IN PLARGE_INTEGER Time,
+ IN PTIME_FIELDS TimeFields);
+
+NTSYSAPI
+ULONG
+FASTCALL
+RtlUlongByteSwap(
+ IN ULONG Source);
+
+NTSYSAPI
+ULONGLONG
+FASTCALL
+RtlUlonglongByteSwap(
+ IN ULONGLONG Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToAnsiString(
+ IN OUT PANSI_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToAnsiSize(
+ IN PCUNICODE_STRING UnicodeString);
+
+#define RtlUnicodeStringToAnsiSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxUnicodeStringToAnsiSize(String) : \
+ ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToInteger(
+ IN PCUNICODE_STRING String,
+ IN ULONG Base OPTIONAL,
+ OUT PULONG Value);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlUpcaseUnicodeChar(
+ IN WCHAR SourceCharacter);
+
+NTSYSAPI
+USHORT
+FASTCALL
+RtlUshortByteSwap(
+ IN USHORT Source);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidRelativeSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+ IN ULONG SecurityDescriptorLength,
+ IN SECURITY_INFORMATION RequiredInformation);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(
+ 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
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+NTSYSAPI
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+ IN PVOID Source,
+ IN SIZE_T Length);
+#endif
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+$if (_NTDDK_)
+
+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
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlDowncaseUnicodeChar(
+ IN WCHAR SourceCharacter);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+ 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
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+$if (_NTDDK_)
+
+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
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberOfSetBitsUlongPtr(
+ 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);
+
+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);
+
+NTSYSAPI
+ULONGLONG
+NTAPI
+RtlCmDecodeMemIoResource(
+ 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
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+
+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
+
+$if (_WDMDDK_)
+
+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
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+$if (_WDMDDK_)
+
+#if !defined(MIDL_PASS)
+/* inline funftions */
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(
+ IN LONG SignedInteger)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = SignedInteger;
+ return ret;
+}
+
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertUlongToLargeInteger(
+ IN 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;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+ULONG
+NTAPI_INLINE
+RtlEnlargedUnsignedDivide(
+ 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;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedUnsignedMultiply(
+ IN ULONG Multiplicand,
+ IN ULONG Multiplier)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
+}
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedIntegerMultiply(
+ IN LONG Multiplicand,
+ IN LONG Multiplier)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
+}
+
+FORCEINLINE
+VOID
+RtlInitEmptyAnsiString(
+ OUT PANSI_STRING AnsiString,
+ IN PCHAR Buffer,
+ IN USHORT BufferSize)
+{
+ AnsiString->Length = 0;
+ AnsiString->MaximumLength = BufferSize;
+ AnsiString->Buffer = Buffer;
+}
+
+FORCEINLINE
+VOID
+RtlInitEmptyUnicodeString(
+ OUT PUNICODE_STRING UnicodeString,
+ IN PWSTR Buffer,
+ IN USHORT BufferSize)
+{
+ UnicodeString->Length = 0;
+ UnicodeString->MaximumLength = BufferSize;
+ UnicodeString->Buffer = Buffer;
+}
+$endif
+
+#if defined(_AMD64_) || defined(_IA64_)
+
+$if (_WDMDDK_)
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedIntegerMultiply(
+ IN LARGE_INTEGER Multiplicand,
+ IN LONG Multiplier)
+{
+ 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 ret;
+ ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+ if (Remainder)
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ return ret;
+}
+
+$endif
+
+$if (_NTDDK_)
+
+//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
+
+#endif /* defined(_AMD64_) || defined(_IA64_) */
+
+$if (_WDMDDK_)
+
+#if defined(_AMD64_)
+
+#define MultiplyHigh __mulh
+#define UnsignedMultiplyHigh __umulh
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedMagicDivide(
+ 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;
+}
+#endif
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerAdd(
+ IN LARGE_INTEGER Addend1,
+ IN LARGE_INTEGER Addend2)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
+ return ret;
+}
+
+/* VOID
+ * RtlLargeIntegerAnd(
+ * IN OUT LARGE_INTEGER Result,
+ * IN LARGE_INTEGER Source,
+ * IN LARGE_INTEGER Mask);
+ */
+#define RtlLargeIntegerAnd(Result, Source, Mask) \
+ Result.QuadPart = Source.QuadPart & Mask.QuadPart
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerArithmeticShift(
+ IN LARGE_INTEGER LargeInteger,
+ IN CCHAR ShiftCount)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
+ return ret;
+}
+
+/* BOOLEAN
+ * RtlLargeIntegerEqualTo(
+ * IN LARGE_INTEGER Operand1,
+ * IN LARGE_INTEGER Operand2);
+ */
+#define RtlLargeIntegerEqualTo(X,Y) \
+ (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
+
+FORCEINLINE
+PVOID
+RtlSecureZeroMemory(
+ OUT PVOID Pointer,
+ IN SIZE_T Size)
+{
+ volatile char* vptr = (volatile char*)Pointer;
+#if defined(_M_AMD64)
+ __stosb((PUCHAR)vptr, 0, Size);
+#else
+ char * endptr = (char *)vptr + Size;
+ while (vptr < endptr) {
+ *vptr = 0; vptr++;
+ }
+#endif
+ return Pointer;
+}
+
+#if defined(_M_AMD64)
+FORCEINLINE
+BOOLEAN
+RtlCheckBit(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG BitPosition)
+{
+ return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
+}
+#else
+#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
+#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) */
+
+/* Byte Swap Functions */
+#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
+ ((defined(_M_AMD64) || defined(_M_IA64)) \
+ && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
+
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+
+#endif
+
+#if DBG
+
+#define ASSERT(exp) \
+ (VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
+
+#define ASSERTMSG(msg, exp) \
+ (VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
+
+#define RTL_SOFT_ASSERT(exp) \
+ (VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
+
+#define RTL_SOFT_ASSERTMSG(msg, exp) \
+ (VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
+
+#define RTL_VERIFY(exp) ASSERT(exp)
+#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
+
+#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
+#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
+
+#if defined(_MSC_VER)
+
+#define NT_ASSERT(exp) \
+ ((!(exp)) ? \
+ (__annotation(L"Debug", L"AssertFail", L#exp), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG(msg, exp) \
+ ((!(exp)) ? \
+ (__annotation(L"Debug", L"AssertFail", L##msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSGW(msg, exp) \
+ ((!(exp)) ? \
+ (__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) */
+#define NT_ASSERT(exp) \
+ (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG NT_ASSERT
+#define NT_ASSERTMSGW NT_ASSERT
+
+#endif
+
+#else /* !DBG */
+
+#define ASSERT(exp) ((VOID) 0)
+#define ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#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)
+
+#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_))
+
+NTKERNELAPI
+VOID
+InitializeSListHead(
+ OUT PSLIST_HEADER SListHead);
+
+#else
+
+VOID
+FORCEINLINE
+InitializeSListHead(
+ OUT PSLIST_HEADER SListHead)
+{
+#if defined(_IA64_)
+ ULONG64 FeatureBits;
+#endif
+
+#if defined(_WIN64)
+ if (((ULONG_PTR)SListHead & 0xf) != 0) {
+ RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
+ }
+#endif
+ 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;
+ }
+#endif
+}
+
+#endif
+
+#if defined(_WIN64)
+
+#define InterlockedPopEntrySList(Head) \
+ ExpInterlockedPopEntrySList(Head)
+
+#define InterlockedPushEntrySList(Head, Entry) \
+ ExpInterlockedPushEntrySList(Head, Entry)
+
+#define InterlockedFlushSList(Head) \
+ ExpInterlockedFlushSList(Head)
+
+#define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
+
+#else /* !defined(_WIN64) */
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList(
+ IN PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry);
+
+#define InterlockedFlushSList(ListHead) \
+ ExInterlockedFlushSList(ListHead)
+
+#define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
+
+#endif /* !defined(_WIN64) */
+
+#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))
+
+$endif
+
+$if (_NTDDK_)
+
+#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) */
+
+$endif
--- /dev/null
+/******************************************************************************
+ * Runtime Library Types *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+#define RTL_REGISTRY_ABSOLUTE 0
+#define RTL_REGISTRY_SERVICES 1
+#define RTL_REGISTRY_CONTROL 2
+#define RTL_REGISTRY_WINDOWS_NT 3
+#define RTL_REGISTRY_DEVICEMAP 4
+#define RTL_REGISTRY_USER 5
+#define RTL_REGISTRY_MAXIMUM 6
+#define RTL_REGISTRY_HANDLE 0x40000000
+#define RTL_REGISTRY_OPTIONAL 0x80000000
+
+/* RTL_QUERY_REGISTRY_TABLE.Flags */
+#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
+#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
+#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
+#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
+#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
+#define RTL_QUERY_REGISTRY_DIRECT 0x00000020
+#define RTL_QUERY_REGISTRY_DELETE 0x00000040
+
+#define HASH_STRING_ALGORITHM_DEFAULT 0
+#define HASH_STRING_ALGORITHM_X65599 1
+#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
+
+typedef struct _RTL_BITMAP {
+ ULONG SizeOfBitMap;
+ PULONG Buffer;
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef struct _RTL_BITMAP_RUN {
+ 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);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE {
+ 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;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+/* Slist Header */
+#ifndef _SLIST_HEADER_
+#define _SLIST_HEADER_
+
+#if defined(_WIN64)
+
+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;
+
+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;
+} 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;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32;
+
+#endif /* defined(_WIN64) */
+
+#endif /* _SLIST_HEADER_ */
+
+/* MS definition is broken! */
+extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
+extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
+#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);
+
+$endif
+
+$if (_NTDDK_)
+
+#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);
+
+typedef VOID
+(NTAPI *PRTL_AVL_FREE_ROUTINE) (
+ IN struct _RTL_AVL_TABLE *Table,
+ IN PVOID Buffer);
+
+typedef NTSTATUS
+(NTAPI *PRTL_AVL_MATCH_FUNCTION) (
+ IN struct _RTL_AVL_TABLE *Table,
+ IN PVOID UserData,
+ IN PVOID MatchData);
+
+typedef struct _RTL_BALANCED_LINKS {
+ struct _RTL_BALANCED_LINKS *Parent;
+ struct _RTL_BALANCED_LINKS *LeftChild;
+ struct _RTL_BALANCED_LINKS *RightChild;
+ CHAR Balance;
+ UCHAR Reserved[3];
+} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
+
+typedef struct _RTL_AVL_TABLE {
+ RTL_BALANCED_LINKS BalancedRoot;
+ PVOID OrderedPointer;
+ ULONG WhichOrderedElement;
+ ULONG NumberGenericTableElements;
+ ULONG DepthOfTree;
+ PRTL_BALANCED_LINKS RestartKey;
+ ULONG DeleteCount;
+ PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
+ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
+ PRTL_AVL_FREE_ROUTINE FreeRoutine;
+ PVOID TableContext;
+} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
+
+#ifndef RTL_USE_AVL_TABLES
+
+struct _RTL_GENERIC_TABLE;
+
+typedef RTL_GENERIC_COMPARE_RESULTS
+(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
+ IN struct _RTL_GENERIC_TABLE *Table,
+ IN PVOID FirstStruct,
+ IN PVOID SecondStruct);
+
+typedef PVOID
+(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
+ IN struct _RTL_GENERIC_TABLE *Table,
+ IN CLONG ByteSize);
+
+typedef VOID
+(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
+ IN struct _RTL_GENERIC_TABLE *Table,
+ IN PVOID Buffer);
+
+typedef struct _RTL_SPLAY_LINKS {
+ struct _RTL_SPLAY_LINKS *Parent;
+ struct _RTL_SPLAY_LINKS *LeftChild;
+ struct _RTL_SPLAY_LINKS *RightChild;
+} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
+
+typedef struct _RTL_GENERIC_TABLE {
+ PRTL_SPLAY_LINKS TableRoot;
+ LIST_ENTRY InsertOrderList;
+ PLIST_ENTRY OrderedPointer;
+ ULONG WhichOrderedElement;
+ ULONG NumberGenericTableElements;
+ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
+ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
+ PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
+ PVOID TableContext;
+} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
+
+#endif /* !RTL_USE_AVL_TABLES */
+
+#ifdef RTL_USE_AVL_TABLES
+
+#undef PRTL_GENERIC_COMPARE_ROUTINE
+#undef RTL_GENERIC_COMPARE_ROUTINE
+#undef PRTL_GENERIC_ALLOCATE_ROUTINE
+#undef RTL_GENERIC_ALLOCATE_ROUTINE
+#undef PRTL_GENERIC_FREE_ROUTINE
+#undef RTL_GENERIC_FREE_ROUTINE
+#undef RTL_GENERIC_TABLE
+#undef PRTL_GENERIC_TABLE
+
+#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
+#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
+#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
+#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
+#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
+#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
+#define RTL_GENERIC_TABLE RTL_AVL_TABLE
+#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
+
+#endif /* RTL_USE_AVL_TABLES */
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
+ LIST_ENTRY Linkage;
+ ULONG_PTR Signature;
+} RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
+ PLIST_ENTRY ChainHead;
+ PLIST_ENTRY PrevLinkage;
+ ULONG_PTR Signature;
+} RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
+ RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
+ PLIST_ENTRY ChainHead;
+ ULONG BucketIndex;
+} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
+
+typedef struct _RTL_DYNAMIC_HASH_TABLE {
+ ULONG Flags;
+ ULONG Shift;
+ ULONG TableSize;
+ ULONG Pivot;
+ ULONG DivisorMask;
+ ULONG NumEntries;
+ ULONG NonEmptyBuckets;
+ ULONG NumEnumerators;
+ PVOID Directory;
+} RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
+
+typedef struct _OSVERSIONINFOA {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ CHAR szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct _OSVERSIONINFOW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+typedef struct _OSVERSIONINFOEXA {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ CHAR szCSDVersion[128];
+ USHORT wServicePackMajor;
+ USHORT wServicePackMinor;
+ USHORT wSuiteMask;
+ UCHAR wProductType;
+ UCHAR wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct _OSVERSIONINFOEXW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+ USHORT wServicePackMajor;
+ USHORT wServicePackMinor;
+ USHORT wSuiteMask;
+ UCHAR wProductType;
+ UCHAR wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+#ifdef UNICODE
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOW OSVERSIONINFO;
+typedef POSVERSIONINFOW POSVERSIONINFO;
+typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
+#else
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOA OSVERSIONINFO;
+typedef POSVERSIONINFOA POSVERSIONINFO;
+typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
+#endif /* UNICODE */
+
+#define HASH_ENTRY_KEY(x) ((x)->Signature)
+
+$endif
--- /dev/null
+/******************************************************************************
+ * Security Manager Functions *
+ ******************************************************************************/
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+$if (_NTDDK_)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeSinglePrivilegeCheck(
+ IN LUID PrivilegeValue,
+ IN KPROCESSOR_MODE PreviousMode);
+$endif
+
+$if (_WDMDDK_)
+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);
+
+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);
+
+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);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeDeassignSecurity(
+ IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeValidSecurityDescriptor(
+ IN ULONG Length,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTKERNELAPI
+ULONG
+NTAPI
+SeObjectCreateSaclAccessBits(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeReleaseSubjectContext(
+ IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeUnlockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeCaptureSubjectContext(
+ OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+NTSTATUS
+NTAPI
+SeSetAuditParameter(
+ IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
+ IN SE_ADT_PARAMETER_TYPE Type,
+ IN ULONG Index,
+ IN PVOID Data);
+
+NTSTATUS
+NTAPI
+SeReportSecurityEvent(
+ IN ULONG Flags,
+ IN PUNICODE_STRING SourceName,
+ IN PSID UserSid OPTIONAL,
+ IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+ULONG
+NTAPI
+SeComputeAutoInheritByObjectType(
+ IN PVOID ObjectType,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
+ IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
+
+#ifdef SE_NTFS_WORLD_CACHE
+VOID
+NTAPI
+SeGetWorldRights(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN PGENERIC_MAPPING GenericMapping,
+ OUT PACCESS_MASK GrantedAccess);
+#endif /* SE_NTFS_WORLD_CACHE */
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+$endif
--- /dev/null
+/******************************************************************************
+ * Security Manager Types *
+ ******************************************************************************/
+$if (_NTDDK_)
+#define SE_UNSOLICITED_INPUT_PRIVILEGE 6
+
+typedef enum _WELL_KNOWN_SID_TYPE {
+ WinNullSid = 0,
+ WinWorldSid = 1,
+ WinLocalSid = 2,
+ WinCreatorOwnerSid = 3,
+ WinCreatorGroupSid = 4,
+ WinCreatorOwnerServerSid = 5,
+ WinCreatorGroupServerSid = 6,
+ WinNtAuthoritySid = 7,
+ WinDialupSid = 8,
+ WinNetworkSid = 9,
+ WinBatchSid = 10,
+ WinInteractiveSid = 11,
+ WinServiceSid = 12,
+ WinAnonymousSid = 13,
+ WinProxySid = 14,
+ WinEnterpriseControllersSid = 15,
+ WinSelfSid = 16,
+ WinAuthenticatedUserSid = 17,
+ WinRestrictedCodeSid = 18,
+ WinTerminalServerSid = 19,
+ WinRemoteLogonIdSid = 20,
+ WinLogonIdsSid = 21,
+ WinLocalSystemSid = 22,
+ WinLocalServiceSid = 23,
+ WinNetworkServiceSid = 24,
+ WinBuiltinDomainSid = 25,
+ WinBuiltinAdministratorsSid = 26,
+ WinBuiltinUsersSid = 27,
+ WinBuiltinGuestsSid = 28,
+ WinBuiltinPowerUsersSid = 29,
+ WinBuiltinAccountOperatorsSid = 30,
+ WinBuiltinSystemOperatorsSid = 31,
+ WinBuiltinPrintOperatorsSid = 32,
+ WinBuiltinBackupOperatorsSid = 33,
+ WinBuiltinReplicatorSid = 34,
+ WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+ WinBuiltinRemoteDesktopUsersSid = 36,
+ WinBuiltinNetworkConfigurationOperatorsSid = 37,
+ WinAccountAdministratorSid = 38,
+ WinAccountGuestSid = 39,
+ WinAccountKrbtgtSid = 40,
+ WinAccountDomainAdminsSid = 41,
+ WinAccountDomainUsersSid = 42,
+ WinAccountDomainGuestsSid = 43,
+ WinAccountComputersSid = 44,
+ WinAccountControllersSid = 45,
+ WinAccountCertAdminsSid = 46,
+ WinAccountSchemaAdminsSid = 47,
+ WinAccountEnterpriseAdminsSid = 48,
+ WinAccountPolicyAdminsSid = 49,
+ WinAccountRasAndIasServersSid = 50,
+ WinNTLMAuthenticationSid = 51,
+ WinDigestAuthenticationSid = 52,
+ WinSChannelAuthenticationSid = 53,
+ WinThisOrganizationSid = 54,
+ WinOtherOrganizationSid = 55,
+ WinBuiltinIncomingForestTrustBuildersSid = 56,
+ WinBuiltinPerfMonitoringUsersSid = 57,
+ WinBuiltinPerfLoggingUsersSid = 58,
+ WinBuiltinAuthorizationAccessSid = 59,
+ WinBuiltinTerminalServerLicenseServersSid = 60,
+ WinBuiltinDCOMUsersSid = 61,
+ WinBuiltinIUsersSid = 62,
+ WinIUserSid = 63,
+ WinBuiltinCryptoOperatorsSid = 64,
+ WinUntrustedLabelSid = 65,
+ WinLowLabelSid = 66,
+ WinMediumLabelSid = 67,
+ WinHighLabelSid = 68,
+ WinSystemLabelSid = 69,
+ WinWriteRestrictedCodeSid = 70,
+ WinCreatorOwnerRightsSid = 71,
+ WinCacheablePrincipalsGroupSid = 72,
+ WinNonCacheablePrincipalsGroupSid = 73,
+ WinEnterpriseReadonlyControllersSid = 74,
+ WinAccountReadonlyControllersSid = 75,
+ WinBuiltinEventLogReadersGroup = 76,
+ WinNewEnterpriseReadonlyControllersSid = 77,
+ WinBuiltinCertSvcDComAccessGroup = 78,
+ WinMediumPlusLabelSid = 79,
+ WinLocalLogonSid = 80,
+ WinConsoleLogonSid = 81,
+ WinThisOrganizationCertificateSid = 82,
+} WELL_KNOWN_SID_TYPE;
+$endif
+
+$if (_WDMDDK_)
+/* Simple types */
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+typedef ULONG ACCESS_MASK, *PACCESS_MASK;
+typedef PVOID PACCESS_TOKEN;
+typedef PVOID PSID;
+
+#define DELETE 0x00010000L
+#define READ_CONTROL 0x00020000L
+#define WRITE_DAC 0x00040000L
+#define WRITE_OWNER 0x00080000L
+#define SYNCHRONIZE 0x00100000L
+#define STANDARD_RIGHTS_REQUIRED 0x000F0000L
+#define STANDARD_RIGHTS_READ READ_CONTROL
+#define STANDARD_RIGHTS_WRITE READ_CONTROL
+#define STANDARD_RIGHTS_EXECUTE READ_CONTROL
+#define STANDARD_RIGHTS_ALL 0x001F0000L
+#define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
+#define ACCESS_SYSTEM_SECURITY 0x01000000L
+#define MAXIMUM_ALLOWED 0x02000000L
+#define GENERIC_READ 0x80000000L
+#define GENERIC_WRITE 0x40000000L
+#define GENERIC_EXECUTE 0x20000000L
+#define GENERIC_ALL 0x10000000L
+
+typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+#define ACL_REVISION 2
+#define ACL_REVISION_DS 4
+
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+#define MIN_ACL_REVISION ACL_REVISION2
+#define MAX_ACL_REVISION ACL_REVISION4
+
+typedef struct _ACL {
+ UCHAR AclRevision;
+ UCHAR Sbz1;
+ USHORT AclSize;
+ USHORT AceCount;
+ USHORT Sbz2;
+} ACL, *PACL;
+
+/* Current security descriptor revision value */
+#define SECURITY_DESCRIPTOR_REVISION (1)
+#define SECURITY_DESCRIPTOR_REVISION1 (1)
+
+/* Privilege attributes */
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
+#define SE_PRIVILEGE_ENABLED (0x00000002L)
+#define SE_PRIVILEGE_REMOVED (0X00000004L)
+#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
+
+#define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
+ SE_PRIVILEGE_ENABLED | \
+ SE_PRIVILEGE_REMOVED | \
+ SE_PRIVILEGE_USED_FOR_ACCESS)
+
+#include <pshpack4.h>
+typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ ULONG Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#include <poppack.h>
+
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+
+/* Privilege sets */
+#define PRIVILEGE_SET_ALL_NECESSARY (1)
+
+typedef struct _PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET,*PPRIVILEGE_SET;
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
+
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+#define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
+
+#define SECURITY_DYNAMIC_TRACKING (TRUE)
+#define SECURITY_STATIC_TRACKING (FALSE)
+
+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;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+typedef struct _SE_IMPERSONATION_STATE {
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL Level;
+} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
+
+#define OWNER_SECURITY_INFORMATION (0x00000001L)
+#define GROUP_SECURITY_INFORMATION (0x00000002L)
+#define DACL_SECURITY_INFORMATION (0x00000004L)
+#define SACL_SECURITY_INFORMATION (0x00000008L)
+#define LABEL_SECURITY_INFORMATION (0x00000010L)
+
+#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
+#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
+#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
+#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
+
+typedef enum _SECURITY_OPERATION_CODE {
+ SetSecurityDescriptor,
+ QuerySecurityDescriptor,
+ DeleteSecurityDescriptor,
+ AssignSecurityDescriptor
+} SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
+
+#define INITIAL_PRIVILEGE_COUNT 3
+
+typedef struct _INITIAL_PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+
+#define SE_MIN_WELL_KNOWN_PRIVILEGE 2
+#define SE_CREATE_TOKEN_PRIVILEGE 2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
+#define SE_LOCK_MEMORY_PRIVILEGE 4
+#define SE_INCREASE_QUOTA_PRIVILEGE 5
+#define SE_MACHINE_ACCOUNT_PRIVILEGE 6
+#define SE_TCB_PRIVILEGE 7
+#define SE_SECURITY_PRIVILEGE 8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE 9
+#define SE_LOAD_DRIVER_PRIVILEGE 10
+#define SE_SYSTEM_PROFILE_PRIVILEGE 11
+#define SE_SYSTEMTIME_PRIVILEGE 12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE 14
+#define SE_CREATE_PAGEFILE_PRIVILEGE 15
+#define SE_CREATE_PERMANENT_PRIVILEGE 16
+#define SE_BACKUP_PRIVILEGE 17
+#define SE_RESTORE_PRIVILEGE 18
+#define SE_SHUTDOWN_PRIVILEGE 19
+#define SE_DEBUG_PRIVILEGE 20
+#define SE_AUDIT_PRIVILEGE 21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
+#define SE_CHANGE_NOTIFY_PRIVILEGE 23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
+#define SE_UNDOCK_PRIVILEGE 25
+#define SE_SYNC_AGENT_PRIVILEGE 26
+#define SE_ENABLE_DELEGATION_PRIVILEGE 27
+#define SE_MANAGE_VOLUME_PRIVILEGE 28
+#define SE_IMPERSONATE_PRIVILEGE 29
+#define SE_CREATE_GLOBAL_PRIVILEGE 30
+#define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
+#define SE_RELABEL_PRIVILEGE 32
+#define SE_INC_WORKING_SET_PRIVILEGE 33
+#define SE_TIME_ZONE_PRIVILEGE 34
+#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
+#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;
+} 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;
+ union {
+ INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
+ PRIVILEGE_SET PrivilegeSet;
+ } Privileges;
+ 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_
+
+#ifndef _NTLSA_AUDIT_
+#define _NTLSA_AUDIT_
+
+#define SE_MAX_AUDIT_PARAMETERS 32
+#define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
+
+#define SE_ADT_OBJECT_ONLY 0x1
+
+#define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
+#define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
+#define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
+#define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
+#define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
+
+#define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
+ ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
+ (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
+
+typedef enum _SE_ADT_PARAMETER_TYPE {
+ SeAdtParmTypeNone = 0,
+ SeAdtParmTypeString,
+ SeAdtParmTypeFileSpec,
+ SeAdtParmTypeUlong,
+ SeAdtParmTypeSid,
+ SeAdtParmTypeLogonId,
+ SeAdtParmTypeNoLogonId,
+ SeAdtParmTypeAccessMask,
+ SeAdtParmTypePrivs,
+ SeAdtParmTypeObjectTypes,
+ SeAdtParmTypeHexUlong,
+ SeAdtParmTypePtr,
+ SeAdtParmTypeTime,
+ SeAdtParmTypeGuid,
+ SeAdtParmTypeLuid,
+ SeAdtParmTypeHexInt64,
+ SeAdtParmTypeStringList,
+ SeAdtParmTypeSidList,
+ SeAdtParmTypeDuration,
+ SeAdtParmTypeUserAccountControl,
+ SeAdtParmTypeNoUac,
+ SeAdtParmTypeMessage,
+ SeAdtParmTypeDateTime,
+ SeAdtParmTypeSockAddr,
+ SeAdtParmTypeSD,
+ SeAdtParmTypeLogonHours,
+ SeAdtParmTypeLogonIdNoSid,
+ SeAdtParmTypeUlongNoConv,
+ SeAdtParmTypeSockAddrNoPort,
+ SeAdtParmTypeAccessReason
+} SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
+
+typedef struct _SE_ADT_OBJECT_TYPE {
+ GUID ObjectType;
+ USHORT Flags;
+ USHORT Level;
+ ACCESS_MASK AccessMask;
+} SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE;
+
+typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
+ SE_ADT_PARAMETER_TYPE Type;
+ ULONG Length;
+ ULONG_PTR Data[2];
+ PVOID Address;
+} SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY;
+
+typedef struct _SE_ADT_ACCESS_REASON {
+ ACCESS_MASK AccessMask;
+ ULONG AccessReasons[32];
+ ULONG ObjectTypeIndex;
+ ULONG AccessGranted;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+} SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
+
+typedef struct _SE_ADT_PARAMETER_ARRAY {
+ ULONG CategoryId;
+ ULONG AuditId;
+ ULONG ParameterCount;
+ ULONG Length;
+ USHORT FlatSubCategoryId;
+ USHORT Type;
+ ULONG Flags;
+ SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ];
+} SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY;
+
+#endif /* !_NTLSA_AUDIT_ */
+#endif /* !_NTLSA_IFS_ */
+$endif
+
--- /dev/null
+/*
+ * wdm.h
+ *
+ * Windows NT WDM Driver Developer Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ * Amine Khaldi
+ * Timo Kreuzer (timo.kreuzer@reactos.org)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#pragma once
+
+#ifndef _WDMDDK_
+#define _WDMDDK_
+
+/* Included via ntddk.h? */
+#ifndef _NTDDK_
+#define _NTDDK_
+#define _WDM_INCLUDED_
+#define _DDK_DRIVER_
+#define NO_INTERLOCKED_INTRINSICS
+#endif /* _NTDDK_ */
+
+/* Dependencies */
+#define NT_INCLUDED
+#include <excpt.h>
+#include <ntdef.h>
+#include <ntstatus.h>
+#include <ntiologc.h>
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef _MAC
+#ifndef _INC_STRING
+#include <string.h>
+#endif /* _INC_STRING */
+#else
+#include <string.h>
+#endif /* _MAC */
+
+#ifndef _KTMTYPES_
+typedef GUID UOW, *PUOW;
+#endif
+
+typedef GUID *PGUID;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#include <dpfilter.h>
+#endif
+
+#include "intrin.h"
+
+#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
+
+#if defined(_X86_) && !defined(_NTHAL_)
+#define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
+#elif defined(_X86_)
+#define _DECL_HAL_KE_IMPORT
+#else
+#define _DECL_HAL_KE_IMPORT NTKERNELAPI
+#endif
+
+#if defined(_WIN64)
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
+#define POINTER_ALIGNMENT
+#endif
+
+/* Helper macro to enable gcc's extension. */
+#ifndef __GNU_EXTENSION
+#ifdef __GNUC__
+#define __GNU_EXTENSION __extension__
+#else
+#define __GNU_EXTENSION
+#endif
+#endif
+
+#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
+#endif
+
+/* Indicate if #pragma data_seg() is supported */
+#if defined(_M_IX86) || defined(_M_AMD64)
+#define ALLOC_DATA_PRAGMA 1
+#endif
+
+#endif
+
+/* Forward declarations */
+struct _IRP;
+struct _MDL;
+struct _KAPC;
+struct _KDPC;
+struct _FILE_OBJECT;
+struct _DMA_ADAPTER;
+struct _DEVICE_OBJECT;
+struct _DRIVER_OBJECT;
+struct _IO_STATUS_BLOCK;
+struct _DEVICE_DESCRIPTION;
+struct _SCATTER_GATHER_LIST;
+struct _DRIVE_LAYOUT_INFORMATION;
+struct _COMPRESSED_DATA_INFO;
+struct _IO_RESOURCE_DESCRIPTOR;
+
+/* Structures not exposed to drivers */
+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 _CALLBACK_OBJECT *PCALLBACK_OBJECT;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _ETHREAD *PETHREAD;
+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__ */
+
+
+$define (_WDMDDK_)
+$include (interlocked.h)
+$include (rtltypes.h)
+$include (ketypes.h)
+$include (mmtypes.h)
+$include (extypes.h)
+$include (setypes.h)
+$include (potypes.h)
+$include (cmtypes.h)
+$include (iotypes.h)
+$include (obtypes.h)
+$include (pstypes.h)
+$include (wmitypes.h)
+
+#if defined(_M_IX86)
+$include(x86/ke.h)
+#elif defined(_M_AMD64)
+$include(amd64/ke.h)
+#elif defined(_M_IA64)
+$include(ia64/ke.h)
+#elif defined(_M_PPC)
+$include(ppc/ke.h)
+#elif defined(_M_MIPS)
+$include(mips/ke.h)
+#elif defined(_M_ARM)
+$include(arm/ke.h)
+#else
+#error Unknown Architecture
+#endif
+
+$include (rtlfuncs.h)
+$include (kefuncs.h)
+$include (mmfuncs.h)
+$include (sefuncs.h)
+$include (cmfuncs.h)
+$include (iofuncs.h)
+$include (pofuncs.h)
+$include (exfuncs.h)
+$include (obfuncs.h)
+$include (psfuncs.h)
+$include (wmifuncs.h)
+$include (kdfuncs.h)
+$include (halfuncs.h)
+$include (nttmapi.h)
+$include (zwfuncs.h)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_WDMDDK_ */
--- /dev/null
+/******************************************************************************
+ * WMI Library Support Functions *
+ ******************************************************************************/
+
+#ifdef RUN_WPP
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessage(
+ IN TRACEHANDLE LoggerHandle,
+ IN ULONG MessageFlags,
+ IN LPGUID MessageGuid,
+ IN USHORT MessageNumber,
+ IN ...);
+#endif
+#endif /* RUN_WPP */
+
+ #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);
+
+#if 0
+/* FIXME: Get va_list from where? */
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessageVa(
+ 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
+
+
+
--- /dev/null
+/******************************************************************************
+ * WMI Library Support Types *
+ ******************************************************************************/
+
+#ifdef RUN_WPP
+#include <evntrace.h>
+#include <stdarg.h>
+#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 <evntprov.h>
+
+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
+
--- /dev/null
+$if (_WDMDDK_)
+/** Kernel definitions for x86 **/
+
+/* Interrupt request levels */
+#define PASSIVE_LEVEL 0
+#define LOW_LEVEL 0
+#define APC_LEVEL 1
+#define DISPATCH_LEVEL 2
+#define CMCI_LEVEL 5
+#define PROFILE_LEVEL 27
+#define CLOCK1_LEVEL 28
+#define CLOCK2_LEVEL 28
+#define IPI_LEVEL 29
+#define POWER_LEVEL 30
+#define HIGH_LEVEL 31
+#define CLOCK_LEVEL CLOCK2_LEVEL
+
+#define KIP0PCRADDRESS 0xffdff000
+#define KI_USER_SHARED_DATA 0xffdf0000
+#define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
+
+#define PAGE_SIZE 0x1000
+#define PAGE_SHIFT 12L
+#define KeGetDcacheFillSize() 1L
+
+#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 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;
+
+#define YieldProcessor _mm_pause
+
+FORCEINLINE
+VOID
+KeMemoryBarrier(VOID)
+{
+ volatile LONG Barrier;
+#if defined(__GNUC__)
+ __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+#elif defined(_MSC_VER)
+ __asm xchg [Barrier], eax
+#endif
+}
+
+NTHALAPI
+KIRQL
+NTAPI
+KeGetCurrentIrql(VOID);
+
+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);
+
+NTHALAPI
+KIRQL
+FASTCALL
+KfAcquireSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+
+NTHALAPI
+VOID
+FASTCALL
+KfReleaseSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock,
+ IN KIRQL NewIrql);
+#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+
+NTSYSAPI
+PKTHREAD
+NTAPI
+KeGetCurrentThread(VOID);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveFloatingPointState(
+ OUT PKFLOATING_SAVE FloatSave);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeRestoreFloatingPointState(
+ IN PKFLOATING_SAVE FloatSave);
+
+/* 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
+
+FORCEINLINE
+VOID
+_KeQueryTickCount(
+ OUT PLARGE_INTEGER CurrentCount)
+{
+ for (;;) {
+ CurrentCount->HighPart = KeTickCount.High1Time;
+ CurrentCount->LowPart = KeTickCount.LowPart;
+ if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+ YieldProcessor();
+ }
+}
+#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
+
+$endif /* _WDMDDK_ */
+$if (_NTDDK_)
+
+#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));
+}
+
+$endif /* _NTDDK_ */
+
+
+
+
--- /dev/null
+$if (_NTDDK_)
+
+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
+
+$endif /* _NTDDK_ */
--- /dev/null
+/******************************************************************************
+ * ZwXxx Functions *
+ ******************************************************************************/
+
+$if (_WDMDDK_)
+
+/* Constants */
+#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
+#define ZwCurrentProcess() NtCurrentProcess()
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
+#define ZwCurrentThread() NtCurrentThread()
+
+$endif
+
+$if (_NTDDK_)
+
+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);
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+$if (_NTDDK_)
+
+NTSTATUS
+NTAPI
+ZwCancelTimer(
+ IN HANDLE TimerHandle,
+ OUT PBOOLEAN CurrentState OPTIONAL);
+
+NTSTATUS
+NTAPI
+ZwCreateTimer(
+ OUT PHANDLE TimerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN TIMER_TYPE TimerType);
+
+NTSTATUS
+NTAPI
+ZwOpenTimer(
+ OUT PHANDLE TimerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationThread(
+ IN HANDLE ThreadHandle,
+ IN THREADINFOCLASS ThreadInformationClass,
+ IN PVOID ThreadInformation,
+ IN ULONG ThreadInformationLength);
+
+NTSTATUS
+NTAPI
+ZwSetTimer(
+ IN HANDLE TimerHandle,
+ IN PLARGE_INTEGER DueTime,
+ IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
+ IN PVOID TimerContext OPTIONAL,
+ IN BOOLEAN ResumeTimer,
+ IN LONG Period OPTIONAL,
+ OUT PBOOLEAN PreviousState OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDisplayString(
+ IN PUNICODE_STRING String);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPowerInformation(
+ IN POWER_INFORMATION_LEVEL PowerInformationLevel,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryVolumeInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FsInformation,
+ IN ULONG Length,
+ IN FS_INFORMATION_CLASS FsInformationClass);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeviceIoControlFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength);
+
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwClose(
+ IN HANDLE Handle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateDirectoryObject(
+ 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);
+
+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);
+
+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
+ZwDeleteKey(
+ IN HANDLE KeyHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteValueKey(
+ IN HANDLE KeyHandle,
+ IN PUNICODE_STRING ValueName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateKey(
+ IN HANDLE KeyHandle,
+ IN ULONG Index,
+ IN KEY_INFORMATION_CLASS KeyInformationClass,
+ OUT PVOID KeyInformation OPTIONAL,
+ IN ULONG Length,
+ OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateValueKey(
+ IN HANDLE KeyHandle,
+ IN ULONG Index,
+ IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ OUT PVOID KeyValueInformation OPTIONAL,
+ IN ULONG Length,
+ OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushKey(
+ IN HANDLE KeyHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadDriver(
+ IN PUNICODE_STRING DriverServiceName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwMakeTemporaryObject(
+ 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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenFile(
+ OUT PHANDLE FileHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG ShareAccess,
+ IN ULONG OpenOptions);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKey(
+ 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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenSymbolicLinkObject(
+ 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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryKey(
+ IN HANDLE KeyHandle,
+ IN KEY_INFORMATION_CLASS KeyInformationClass,
+ OUT PVOID KeyInformation OPTIONAL,
+ IN ULONG Length,
+ OUT PULONG ResultLength);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySymbolicLinkObject(
+ IN HANDLE LinkHandle,
+ IN OUT PUNICODE_STRING LinkTarget,
+ OUT PULONG ReturnedLength OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryValueKey(
+ IN HANDLE KeyHandle,
+ IN PUNICODE_STRING ValueName,
+ IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ OUT PVOID KeyValueInformation OPTIONAL,
+ IN ULONG Length,
+ OUT PULONG ResultLength);
+
+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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationFile(
+ 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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadDriver(
+ IN PUNICODE_STRING DriverServiceName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnmapViewOfSection(
+ 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);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryFullAttributesFile(
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+$if (_WDMDDK_)
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenEvent(
+ OUT PHANDLE EventHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTSYSAPI
+NTSTATUS
+ZwCreateKeyTransacted(
+ OUT PHANDLE KeyHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN ULONG TitleIndex,
+ IN PUNICODE_STRING Class OPTIONAL,
+ IN ULONG CreateOptions,
+ IN HANDLE TransactionHandle,
+ OUT PULONG Disposition OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyTransacted(
+ OUT PHANDLE KeyHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN HANDLE TransactionHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateTransactionManager(
+ 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
+ZwOpenTransactionManager(
+ 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
+ZwRollforwardTransactionManager(
+ IN HANDLE TransactionManagerHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverTransactionManager(
+ IN HANDLE TransactionManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationTransactionManager(
+ IN HANDLE TransactionManagerHandle,
+ IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+ OUT PVOID TransactionManagerInformation,
+ IN ULONG TransactionManagerInformationLength,
+ OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationTransactionManager(
+ IN HANDLE TmHandle,
+ IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
+ IN PVOID TransactionManagerInformation,
+ IN ULONG TransactionManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwEnumerateTransactionObject(
+ IN HANDLE RootObjectHandle OPTIONAL,
+ IN KTMOBJECT_TYPE QueryType,
+ IN OUT PKTMOBJECT_CURSOR ObjectCursor,
+ IN ULONG ObjectCursorLength,
+ OUT PULONG ReturnLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateTransaction(
+ 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
+ZwOpenTransaction(
+ OUT PHANDLE TransactionHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN LPGUID Uow,
+ IN HANDLE TmHandle OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationTransaction(
+ IN HANDLE TransactionHandle,
+ IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+ OUT PVOID TransactionInformation,
+ IN ULONG TransactionInformationLength,
+ OUT PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationTransaction(
+ IN HANDLE TransactionHandle,
+ IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
+ IN PVOID TransactionInformation,
+ IN ULONG TransactionInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitTransaction(
+ IN HANDLE TransactionHandle,
+ IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackTransaction(
+ IN HANDLE TransactionHandle,
+ IN BOOLEAN Wait);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateResourceManager(
+ OUT PHANDLE ResourceManagerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN HANDLE TmHandle,
+ IN LPGUID ResourceManagerGuid OPTIONAL,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN ULONG CreateOptions OPTIONAL,
+ IN PUNICODE_STRING Description OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwOpenResourceManager(
+ OUT PHANDLE ResourceManagerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN HANDLE TmHandle,
+ IN LPGUID ResourceManagerGuid,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverResourceManager(
+ IN HANDLE ResourceManagerHandle);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwGetNotificationResourceManager(
+ IN HANDLE ResourceManagerHandle,
+ OUT PTRANSACTION_NOTIFICATION TransactionNotification,
+ IN ULONG NotificationLength,
+ IN PLARGE_INTEGER Timeout,
+ IN PULONG ReturnLength OPTIONAL,
+ IN ULONG Asynchronous,
+ IN ULONG_PTR AsynchronousContext OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationResourceManager(
+ IN HANDLE ResourceManagerHandle,
+ IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+ OUT PVOID ResourceManagerInformation,
+ IN ULONG ResourceManagerInformationLength,
+ IN PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationResourceManager(
+ IN HANDLE ResourceManagerHandle,
+ IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
+ IN PVOID ResourceManagerInformation,
+ IN ULONG ResourceManagerInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCreateEnlistment(
+ 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
+ZwOpenEnlistment(
+ OUT PHANDLE EnlistmentHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN HANDLE RmHandle,
+ IN LPGUID EnlistmentGuid,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+ OUT PVOID EnlistmentInformation,
+ IN ULONG EnlistmentInformationLength,
+ IN PULONG ReturnLength OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSetInformationEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
+ IN PVOID EnlistmentInformation,
+ IN ULONG EnlistmentInformationLength);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRecoverEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PVOID EnlistmentKey OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrePrepareEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrepareEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrePrepareComplete(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwPrepareComplete(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwCommitComplete(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwReadOnlyEnlistment(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwRollbackComplete(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+ZwSinglePhaseReject(
+ IN HANDLE EnlistmentHandle,
+ IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+$endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+$if (_NTDDK_)
+NTSTATUS
+NTAPI
+ZwSetTimerEx(
+ IN HANDLE TimerHandle,
+ IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
+ IN OUT PVOID TimerSetInformation,
+ IN ULONG TimerSetInformationLength);
+$endif
+
+$if (_WDMDDK_)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyEx(
+ OUT PHANDLE KeyHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN ULONG OpenOptions);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKeyTransactedEx(
+ OUT PHANDLE KeyHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN ULONG OpenOptions,
+ IN HANDLE TransactionHandle);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeMultipleKeys(
+ IN HANDLE MasterKeyHandle,
+ IN ULONG Count OPTIONAL,
+ IN OBJECT_ATTRIBUTES SubordinateObjects[] OPTIONAL,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG CompletionFilter,
+ IN BOOLEAN WatchTree,
+ OUT PVOID Buffer OPTIONAL,
+ IN ULONG BufferSize,
+ IN BOOLEAN Asynchronous);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryMultipleValueKey(
+ IN HANDLE KeyHandle,
+ IN OUT PKEY_VALUE_ENTRY ValueEntries,
+ IN ULONG EntryCount,
+ OUT PVOID ValueBuffer,
+ IN OUT PULONG BufferLength,
+ OUT PULONG RequiredBufferLength OPTIONAL);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwRenameKey(
+ IN HANDLE KeyHandle,
+ IN PUNICODE_STRING NewName);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationKey(
+ IN HANDLE KeyHandle,
+ IN KEY_SET_INFORMATION_CLASS KeySetInformationClass,
+ IN PVOID KeySetInformation,
+ IN ULONG KeySetInformationLength);
+
+$endif
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
KeAcquireGuardedMutex(&CmpAllocBucketLock);
/* Sanity check on lock ownership */
- //ASSERT((CmpIsKcbLockedExclusive(Kcb) == TRUE) ||
- // (CmpTestRegistryLockExclusive() == TRUE));
+ CMP_ASSERT_HASH_ENTRY_LOCK(Kcb->ConvKey);
/* Add us to the free list */
InsertTailList(&CmpFreeKCBListHead, &Kcb->FreeListEntry);
/* Get the allocation page */
- AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Kcb & 0xFFFFF000);
+ AllocPage = CmpGetAllocPageFromKcb(Kcb);
/* Sanity check */
ASSERT(AllocPage->FreeCount != CM_KCBS_PER_PAGE);
FreeListEntry);
/* Get the allocation page */
- AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)CurrentKcb & 0xFFFFF000);
+ AllocPage = CmpGetAllocPageFromKcb(CurrentKcb);
/* Decrease the free count */
ASSERT(AllocPage->FreeCount != 0);
/* Set it up */
CurrentKcb->PrivateAlloc = TRUE;
CurrentKcb->DelayCloseEntry = NULL;
- InsertHeadList(&CmpFreeKCBListHead,
+ InsertTailList(&CmpFreeKCBListHead,
&CurrentKcb->FreeListEntry);
}
}
/* Allocate a KCB only */
- CurrentKcb = CmpAllocate(sizeof(CM_KEY_CONTROL_BLOCK),
- TRUE,
- TAG_CM);
+ CurrentKcb = CmpAllocate(sizeof(CM_KEY_CONTROL_BLOCK), TRUE, TAG_CM);
if (CurrentKcb)
{
/* Set it up */
Entry->ListEntry.Flink = Entry->ListEntry.Blink = NULL;
/* Grab the alloc page */
- AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Entry & 0xFFFFF000);
+ AllocPage = CmpGetAllocPageFromDelayAlloc(Entry);
/* Decrease free entries */
ASSERT(AllocPage->FreeCount != 0);
InsertTailList(&CmpFreeDelayItemsListHead, &AllocEntry->ListEntry);
/* Get the alloc page */
- AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)Entry & 0xFFFFF000);
+ AllocPage = CmpGetAllocPageFromDelayAlloc(Entry);
ASSERT(AllocPage->FreeCount != CM_DELAYS_PER_PAGE);
/* Increase the number of free items */
ExReleasePushLock(&GET_HASH_ENTRY(CmpNameCacheTable, \
(k)).Lock); \
}
+
+//
+// Asserts that either the registry or the KCB is locked
+//
+#define CMP_ASSERT_HASH_ENTRY_LOCK(k) \
+{ \
+ ASSERT(((GET_HASH_ENTRY(CmpCacheTable, k).Owner == \
+ KeGetCurrentThread())) || \
+ (CmpTestRegistryLockExclusive() == TRUE)); \
+}
+
+//
+// Gets the page attached to the KCB
+//
+#define CmpGetAllocPageFromKcb(k) \
+ (PCM_ALLOC_PAGE)(((ULONG_PTR)(k)) & ~(PAGE_SIZE - 1))
+
+//
+// Gets the page attached to the delayed allocation
+//
+#define CmpGetAllocPageFromDelayAlloc(a) \
+ (PCM_ALLOC_PAGE)(((ULONG_PTR)(a)) & ~(PAGE_SIZE - 1))
PUNICODE_STRING Service;
UNICODE_STRING ClassGUID;
NTSTATUS Status;
+ DEVICE_CAPABILITIES DeviceCaps;
DPRINT("IopActionConfigureChildServices(%p, %p)\n", DeviceNode, Context);
if (Service->Buffer == NULL)
{
- IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED);
+ if (NT_SUCCESS(IopQueryDeviceCapabilities(DeviceNode, &DeviceCaps)) &&
+ DeviceCaps.RawDeviceOK)
+ {
+ DPRINT1("%wZ is using parent bus driver (%wZ)\n", &DeviceNode->InstancePath, &ParentDeviceNode->ServiceName);
+
+ DeviceNode->ServiceName.Length = 0;
+ DeviceNode->ServiceName.MaximumLength = ParentDeviceNode->ServiceName.MaximumLength;
+ DeviceNode->ServiceName.Buffer = ExAllocatePool(PagedPool, DeviceNode->ServiceName.MaximumLength);
+ if (!DeviceNode->ServiceName.Buffer)
+ return STATUS_SUCCESS;
- if (ClassGUID.Length != 0)
+ RtlCopyUnicodeString(&DeviceNode->ServiceName, &ParentDeviceNode->ServiceName);
+
+ IopDeviceNodeSetFlag(DeviceNode, DNF_LEGACY_DRIVER);
+ }
+ else if (ClassGUID.Length != 0)
{
/* Device has a ClassGUID value, but no Service value.
* Suppose it is using the NULL driver, so state the
DPRINT1("%wZ is using NULL driver\n", &DeviceNode->InstancePath);
IopDeviceNodeSetFlag(DeviceNode, DNF_STARTED);
}
+ else
+ {
+ IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED);
+ }
return STATUS_SUCCESS;
}
BOOLEAN Arrival;
ULONG Caps;
NTSTATUS Status;
+ UNICODE_STRING DeviceName;
+ UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\\??\\");
DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n",
NotificationStructure, Context);
{
DPRINT("Arrival of %wZ\n", Notification->SymbolicLinkName);
+ DeviceName.Length = 0;
+ DeviceName.MaximumLength = Notification->SymbolicLinkName->MaximumLength + DeviceNamePrefix.MaximumLength;
+ DeviceName.Buffer = ExAllocatePool(PagedPool, DeviceName.MaximumLength);
+ if (!DeviceName.Buffer) return STATUS_INSUFFICIENT_RESOURCES;
+
+ RtlCopyUnicodeString(&DeviceName, &DeviceNamePrefix);
+ RtlAppendUnicodeStringToString(&DeviceName, Notification->SymbolicLinkName);
+
+ DPRINT("Opening handle to %wZ\n", &DeviceName);
+
/* Open the device */
InitializeObjectAttributes(
&ObjectAttributes,
- Notification->SymbolicLinkName,
+ &DeviceName,
OBJ_KERNEL_HANDLE,
NULL,
NULL);
{
/* Registry power button notification */
IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange,
- 0, /* The registry has not been initialized yet */
+ PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES,
(PVOID)&GUID_DEVICE_SYS_BUTTON,
IopRootDeviceNode->
PhysicalDeviceObject->DriverObject,
PSECURITY_IMPERSONATION_LEVEL sil = (PSECURITY_IMPERSONATION_LEVEL)TokenInformation;
DPRINT("NtQueryInformationToken(TokenImpersonationLevel)\n");
+
+ /* Fail if the token is not an impersonation token */
+ if (Token->TokenType != TokenImpersonation)
+ {
+ Status = STATUS_INVALID_INFO_CLASS;
+ break;
+ }
+
RequiredLength = sizeof(SECURITY_IMPERSONATION_LEVEL);
_SEH2_TRY
<?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
- <if property="USERMODE" value="1">
- <if property="ARCH" value="i386">
+ <if property="ARCH" value="i386">
<directory name="ntvdm">
<xi:include href="ntvdm/ntvdm.rbuild" />
</directory>
- </if>
</if>
-
<directory name="win32">
<xi:include href="win32/win32.rbuild" />
</directory>
FASTCALL
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
{
+ BOOL Hit = FALSE;
+ ULONG Cmd = 0, Size = 0;
PDC_ATTR pdcattr = NULL;
if (dc)
{
- pdcattr = dc->pdcattr;
+ pdcattr = dc->pdcattr;
}
+
+ _SEH2_TRY
+ {
+ Cmd = pHdr->Cmd;
+ Size = pHdr->Size; // Return the full size of the structure.
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Hit = TRUE;
+ }
+ _SEH2_END;
+
+ if (Hit)
+ {
+ DPRINT1("WARNING! GdiBatch Fault!\n");
+ return 0;
+ }
+
// FYI! The thread is approaching the end of sunset.
- switch(pHdr->Cmd)
+ switch(Cmd)
{
case GdiBCPatBlt: // Highest pri first!
break;
break;
}
- return pHdr->Size; // Return the full size of the structure.
+ return Size;
}
/*
APIENTRY
NtGdiFlushUserBatch(VOID)
{
- BOOL Hit;
PTEB pTeb = NtCurrentTeb();
ULONG GdiBatchCount = pTeb->GdiBatchCount;
}
// No need to init anything, just go!
- for (Hit = FALSE; GdiBatchCount > 0; GdiBatchCount--)
- { /*
- Looks like a hack,
- feels like a hack,
- you're right it's a hack,
- due to the lack,
- of kernel thread locking when it is in sunset!
- */
- _SEH2_TRY
- {
- ((PGDIBATCHHDR)pHdr)->Cmd = ((PGDIBATCHHDR)pHdr)->Cmd;
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Hit = TRUE;
- }
- _SEH2_END;
-
- if (Hit) break;
-
+ for (; GdiBatchCount > 0; GdiBatchCount--)
+ {
+ ULONG Size;
// Process Gdi Batch!
- pHdr += GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+ Size = GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+ if (!Size) break;
+ pHdr += Size;
}
if (pDC)
#define _NO_COM
/* DDK/NDK/SDK Headers */
-#include <ddk/ntddk.h>
-#include <ddk/ntddmou.h>
-#include <ddk/ntifs.h>
-#include <ddk/tvout.h>
-#include <ndk/ntndk.h>
+#include <ntddk.h>
+#include <ntddmou.h>
+#include <ntifs.h>
+#include <tvout.h>
+#include <ntndk.h>
/* Win32 Headers */
/* FIXME: Defines in winbase.h that we need... */
# FIXME: disabled until RosBE stops sucking
# BUILTIN_CPPFLAGS+= -nostdinc
-ifeq ($(ROS_ARCH),i386)
-BUILTIN_CFLAGS+= -fno-optimize-sibling-calls -fno-set-stack-executable
-else
-BUILTIN_CFLAGS+= -fno-optimize-sibling-calls
-endif
-BUILTIN_CXXFLAGS+= -fno-optimize-sibling-calls
-
-# Add -fno-set-stack-executable required for x86/MinGW
-ifneq (,$(filter $(ARCH), i386))
- BUILTIN_CFLAGS+= -fno-set-stack-executable
- BUILTIN_CXXFLAGS+= -fno-set-stack-executable
-endif
#(module, source, dependencies, cflags, output)
define RBUILD_DEPENDS