diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index c2a720a640e..9ad015fc38f 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -28,6 +28,8 @@ -mpreferred-stack-boundary=2 -m32 --win32 -gstabs+ + -fno-set-stack-executable + -fno-optimize-sibling-calls -gstabs+ diff --git a/reactos/boot/bootdata/bootcd/bootcd.rbuild b/reactos/boot/bootdata/bootcd/bootcd.rbuild index 08fa4265ece..ebfe5b1651a 100644 --- a/reactos/boot/bootdata/bootcd/bootcd.rbuild +++ b/reactos/boot/bootdata/bootcd/bootcd.rbuild @@ -1,5 +1,12 @@ - + isoboot + + + isoboot + + diff --git a/reactos/boot/bootdata/livecd/livecd.rbuild b/reactos/boot/bootdata/livecd/livecd.rbuild index 12482a234f9..37d2dc9140d 100644 --- a/reactos/boot/bootdata/livecd/livecd.rbuild +++ b/reactos/boot/bootdata/livecd/livecd.rbuild @@ -1,5 +1,12 @@ - + isoboot + + + isoboot + + diff --git a/reactos/boot/freeldr/freeldr/disk/scsiport.c b/reactos/boot/freeldr/freeldr/disk/scsiport.c index d8d15b12d84..81ba4a4efa2 100644 --- a/reactos/boot/freeldr/freeldr/disk/scsiport.c +++ b/reactos/boot/freeldr/freeldr/disk/scsiport.c @@ -385,7 +385,7 @@ SpiCreatePortConfig( } VOID -DDKCDECLAPI +__cdecl ScsiDebugPrint( IN ULONG DebugPrintLevel, IN PCCHAR DebugMessage, @@ -421,7 +421,7 @@ ScsiDebugPrint( } VOID -DDKAPI +NTAPI ScsiPortCompleteRequest( IN PVOID HwDeviceExtension, IN UCHAR PathId, @@ -435,7 +435,7 @@ ScsiPortCompleteRequest( #undef ScsiPortConvertPhysicalAddressToUlong ULONG -DDKAPI +NTAPI ScsiPortConvertPhysicalAddressToUlong( IN SCSI_PHYSICAL_ADDRESS Address) { @@ -443,7 +443,7 @@ ScsiPortConvertPhysicalAddressToUlong( } SCSI_PHYSICAL_ADDRESS -DDKAPI +NTAPI ScsiPortConvertUlongToPhysicalAddress( IN ULONG UlongAddress) { @@ -451,7 +451,7 @@ ScsiPortConvertUlongToPhysicalAddress( } VOID -DDKAPI +NTAPI ScsiPortFlushDma( IN PVOID DeviceExtension) { @@ -460,7 +460,7 @@ ScsiPortFlushDma( } VOID -DDKAPI +NTAPI ScsiPortFreeDeviceBase( IN PVOID HwDeviceExtension, IN PVOID MappedAddress) @@ -469,7 +469,7 @@ ScsiPortFreeDeviceBase( } ULONG -DDKAPI +NTAPI ScsiPortGetBusData( IN PVOID DeviceExtension, IN ULONG BusDataType, @@ -482,7 +482,7 @@ ScsiPortGetBusData( } PVOID -DDKAPI +NTAPI ScsiPortGetDeviceBase( IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -514,7 +514,7 @@ ScsiPortGetDeviceBase( } PVOID -DDKAPI +NTAPI ScsiPortGetLogicalUnit( IN PVOID HwDeviceExtension, IN UCHAR PathId, @@ -527,7 +527,7 @@ ScsiPortGetLogicalUnit( } SCSI_PHYSICAL_ADDRESS -DDKAPI +NTAPI ScsiPortGetPhysicalAddress( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, @@ -564,7 +564,7 @@ ScsiPortGetPhysicalAddress( } PSCSI_REQUEST_BLOCK -DDKAPI +NTAPI ScsiPortGetSrb( IN PVOID DeviceExtension, IN UCHAR PathId, @@ -641,7 +641,7 @@ SpiAllocateCommonBuffer( } PVOID -DDKAPI +NTAPI ScsiPortGetUncachedExtension( IN PVOID HwDeviceExtension, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, @@ -726,7 +726,7 @@ ScsiPortGetUncachedExtension( } PVOID -DDKAPI +NTAPI ScsiPortGetVirtualAddress( IN PVOID HwDeviceExtension, IN SCSI_PHYSICAL_ADDRESS PhysicalAddress) @@ -1031,7 +1031,7 @@ SpiGetPciConfigData( } ULONG -DDKAPI +NTAPI ScsiPortInitialize( IN PVOID Argument1, IN PVOID Argument2, @@ -1186,7 +1186,7 @@ ScsiPortInitialize( } VOID -DDKAPI +NTAPI ScsiPortIoMapTransfer( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, @@ -1198,7 +1198,7 @@ ScsiPortIoMapTransfer( } VOID -DDKAPI +NTAPI ScsiPortLogError( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, @@ -1213,7 +1213,7 @@ ScsiPortLogError( } VOID -DDKAPI +NTAPI ScsiPortMoveMemory( IN PVOID WriteBuffer, IN PVOID ReadBuffer, @@ -1223,7 +1223,7 @@ ScsiPortMoveMemory( } VOID -DDKCDECLAPI +__cdecl ScsiPortNotification( IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, @@ -1259,7 +1259,7 @@ ScsiPortNotification( } VOID -DDKAPI +NTAPI ScsiPortReadPortBufferUchar( IN PUCHAR Port, OUT PUCHAR Buffer, @@ -1269,7 +1269,7 @@ ScsiPortReadPortBufferUchar( } VOID -DDKAPI +NTAPI ScsiPortReadPortBufferUlong( IN PULONG Port, OUT PULONG Buffer, @@ -1279,7 +1279,7 @@ ScsiPortReadPortBufferUlong( } VOID -DDKAPI +NTAPI ScsiPortReadPortBufferUshort( IN PUSHORT Port, OUT PUSHORT Buffer, @@ -1289,7 +1289,7 @@ ScsiPortReadPortBufferUshort( } UCHAR -DDKAPI +NTAPI ScsiPortReadPortUchar( IN PUCHAR Port) { @@ -1300,7 +1300,7 @@ ScsiPortReadPortUchar( } ULONG -DDKAPI +NTAPI ScsiPortReadPortUlong( IN PULONG Port) { @@ -1308,7 +1308,7 @@ ScsiPortReadPortUlong( } USHORT -DDKAPI +NTAPI ScsiPortReadPortUshort( IN PUSHORT Port) { @@ -1316,7 +1316,7 @@ ScsiPortReadPortUshort( } VOID -DDKAPI +NTAPI ScsiPortReadRegisterBufferUchar( IN PUCHAR Register, IN PUCHAR Buffer, @@ -1327,7 +1327,7 @@ ScsiPortReadRegisterBufferUchar( } VOID -DDKAPI +NTAPI ScsiPortReadRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, @@ -1338,7 +1338,7 @@ ScsiPortReadRegisterBufferUlong( } VOID -DDKAPI +NTAPI ScsiPortReadRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, @@ -1349,7 +1349,7 @@ ScsiPortReadRegisterBufferUshort( } UCHAR -DDKAPI +NTAPI ScsiPortReadRegisterUchar( IN PUCHAR Register) { @@ -1357,7 +1357,7 @@ ScsiPortReadRegisterUchar( } ULONG -DDKAPI +NTAPI ScsiPortReadRegisterUlong( IN PULONG Register) { @@ -1365,7 +1365,7 @@ ScsiPortReadRegisterUlong( } USHORT -DDKAPI +NTAPI ScsiPortReadRegisterUshort( IN PUSHORT Register) { @@ -1373,7 +1373,7 @@ ScsiPortReadRegisterUshort( } ULONG -DDKAPI +NTAPI ScsiPortSetBusDataByOffset( IN PVOID DeviceExtension, IN ULONG BusDataType, @@ -1389,7 +1389,7 @@ ScsiPortSetBusDataByOffset( } VOID -DDKAPI +NTAPI ScsiPortStallExecution( IN ULONG Delay) { @@ -1397,7 +1397,7 @@ ScsiPortStallExecution( } BOOLEAN -DDKAPI +NTAPI ScsiPortValidateRange( IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -1417,7 +1417,7 @@ ScsiPortValidateRange( VOID -DDKAPI +NTAPI ScsiPortWritePortBufferUchar( IN PUCHAR Port, IN PUCHAR Buffer, @@ -1427,7 +1427,7 @@ ScsiPortWritePortBufferUchar( } VOID -DDKAPI +NTAPI ScsiPortWritePortBufferUlong( IN PULONG Port, IN PULONG Buffer, @@ -1437,7 +1437,7 @@ ScsiPortWritePortBufferUlong( } VOID -DDKAPI +NTAPI ScsiPortWritePortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, @@ -1447,7 +1447,7 @@ ScsiPortWritePortBufferUshort( } VOID -DDKAPI +NTAPI ScsiPortWritePortUchar( IN PUCHAR Port, IN UCHAR Value) @@ -1456,7 +1456,7 @@ ScsiPortWritePortUchar( } VOID -DDKAPI +NTAPI ScsiPortWritePortUlong( IN PULONG Port, IN ULONG Value) @@ -1465,7 +1465,7 @@ ScsiPortWritePortUlong( } VOID -DDKAPI +NTAPI ScsiPortWritePortUshort( IN PUSHORT Port, IN USHORT Value) @@ -1474,7 +1474,7 @@ ScsiPortWritePortUshort( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterBufferUchar( IN PUCHAR Register, IN PUCHAR Buffer, @@ -1485,7 +1485,7 @@ ScsiPortWriteRegisterBufferUchar( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, @@ -1496,7 +1496,7 @@ ScsiPortWriteRegisterBufferUlong( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, @@ -1507,7 +1507,7 @@ ScsiPortWriteRegisterBufferUshort( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterUchar( IN PUCHAR Register, IN ULONG Value) @@ -1516,7 +1516,7 @@ ScsiPortWriteRegisterUchar( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterUlong( IN PULONG Register, IN ULONG Value) @@ -1525,7 +1525,7 @@ ScsiPortWriteRegisterUlong( } VOID -DDKAPI +NTAPI ScsiPortWriteRegisterUshort( IN PUSHORT Register, IN USHORT Value) diff --git a/reactos/dll/directx/bdaplgin/controlnode.cpp b/reactos/dll/directx/bdaplgin/controlnode.cpp index 5cd98ccbdcb..40ec853ee3d 100644 --- a/reactos/dll/directx/bdaplgin/controlnode.cpp +++ b/reactos/dll/directx/bdaplgin/controlnode.cpp @@ -9,7 +9,9 @@ #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 { @@ -32,12 +34,12 @@ public: 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; }; @@ -58,19 +60,19 @@ CControlNode::QueryInterface( } 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]; @@ -88,7 +90,6 @@ CControlNode::QueryInterface( HRESULT WINAPI CControlNode_fnConstructor( - HANDLE hFile, IBaseFilter * pFilter, ULONG NodeType, ULONG PinId, @@ -98,7 +99,7 @@ CControlNode_fnConstructor( WCHAR Buffer[100]; HRESULT hr; IPin * pPin = NULL; - IKsObject * pObject = NULL; + IKsPropertySet * pProperty; // store pin id swprintf(Buffer, L"%u", PinId); @@ -115,26 +116,21 @@ CControlNode_fnConstructor( 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"); diff --git a/reactos/dll/directx/bdaplgin/devicecontrol.cpp b/reactos/dll/directx/bdaplgin/devicecontrol.cpp index 661eba547a0..693232c3b97 100644 --- a/reactos/dll/directx/bdaplgin/devicecontrol.cpp +++ b/reactos/dll/directx/bdaplgin/devicecontrol.cpp @@ -9,20 +9,24 @@ #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 @@ -476,7 +480,7 @@ CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG 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); diff --git a/reactos/dll/directx/bdaplgin/digitaldemo.cpp b/reactos/dll/directx/bdaplgin/digitaldemo.cpp index 2d1b7ed62d6..2552e19567f 100644 --- a/reactos/dll/directx/bdaplgin/digitaldemo.cpp +++ b/reactos/dll/directx/bdaplgin/digitaldemo.cpp @@ -9,8 +9,10 @@ #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 { @@ -48,12 +50,12 @@ public: 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; }; @@ -86,6 +88,7 @@ CBDADigitalDemodulator::QueryInterface( swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr); OutputDebugStringW(Buffer); CoTaskMemFree(lpstr); +DebugBreak(); #endif return E_NOINTERFACE; @@ -98,20 +101,17 @@ CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType) 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 @@ -131,20 +131,18 @@ CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod) { 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 @@ -165,20 +163,16 @@ CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate) 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 @@ -198,20 +192,17 @@ CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod) { 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 @@ -232,20 +223,16 @@ CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate) 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 @@ -265,20 +252,17 @@ CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate) { 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 @@ -298,20 +282,17 @@ CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInvers { 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 @@ -329,13 +310,13 @@ CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInvers 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"); diff --git a/reactos/dll/directx/bdaplgin/frequencyfilter.cpp b/reactos/dll/directx/bdaplgin/frequencyfilter.cpp index 90d1e6a24fa..6a0e6853733 100644 --- a/reactos/dll/directx/bdaplgin/frequencyfilter.cpp +++ b/reactos/dll/directx/bdaplgin/frequencyfilter.cpp @@ -9,8 +9,10 @@ #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 { @@ -46,12 +48,12 @@ public: 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; }; @@ -84,6 +86,7 @@ CBDAFrequencyFilter::QueryInterface( swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr); OutputDebugStringW(Buffer); CoTaskMemFree(lpstr); +DebugBreak(); #endif return E_NOINTERFACE; @@ -110,20 +113,16 @@ CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency) 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 @@ -143,20 +142,17 @@ CBDAFrequencyFilter::put_Polarity(Polarisation Polarity) { 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 @@ -176,20 +172,17 @@ CBDAFrequencyFilter::put_Range(ULONG ulRange) { 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 @@ -209,20 +202,17 @@ CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth) { 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 @@ -241,20 +231,17 @@ CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier) { 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 @@ -271,13 +258,13 @@ CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier) 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"); diff --git a/reactos/dll/directx/bdaplgin/lnbinfo.cpp b/reactos/dll/directx/bdaplgin/lnbinfo.cpp index a6638839289..992eeab6e09 100644 --- a/reactos/dll/directx/bdaplgin/lnbinfo.cpp +++ b/reactos/dll/directx/bdaplgin/lnbinfo.cpp @@ -9,8 +9,10 @@ #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 { @@ -41,12 +43,12 @@ public: 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; }; @@ -90,20 +92,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow) { 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 @@ -123,20 +122,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh) { 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 @@ -156,20 +152,17 @@ CBDALNBInfo::put_HighLowSwitchFrequency(ULONG ulSwitchFrequency) { 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 @@ -186,13 +179,13 @@ CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency) 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"); diff --git a/reactos/dll/directx/bdaplgin/pincontrol.cpp b/reactos/dll/directx/bdaplgin/pincontrol.cpp index a5b99128b16..4420b76e16b 100644 --- a/reactos/dll/directx/bdaplgin/pincontrol.cpp +++ b/reactos/dll/directx/bdaplgin/pincontrol.cpp @@ -9,9 +9,12 @@ #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 { @@ -39,7 +42,7 @@ public: 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(); @@ -51,6 +54,7 @@ protected: HANDLE m_Handle; IBDA_NetworkProvider * m_pProvider; IPin * m_pConnectedPin; + ULONG m_RegistrationCtx; }; HRESULT @@ -72,16 +76,7 @@ CBDAPinControl::QueryInterface( reinterpret_cast(*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; } //------------------------------------------------------------------- @@ -142,10 +137,98 @@ STDMETHODCALLTYPE 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 +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) +{ + CBDAPinControl * handler = new CBDAPinControl(hPin, pNetworkProvider, pConnectedPin, RegistrationCtx); + +#ifdef BDAPLGIN_TRACE + OutputDebugStringW(L"CBDAPinControl_fnConstructor\n"); +#endif + + if (!handler) + return E_OUTOFMEMORY; + + if (FAILED(handler->QueryInterface(riid, ppv))) + { + /* not supported */ + delete handler; + return E_NOINTERFACE; + } + + return NOERROR; } HRESULT @@ -158,30 +241,20 @@ CBDAPinControl_fnConstructor( IPin * pConnectedPin = NULL; IBDA_NetworkProvider * pNetworkProvider = NULL; HANDLE hFile = INVALID_HANDLE_VALUE; - -#if 0 - if (!IsEqualGUID(riid, IID_IUnknown)) - { -#ifdef BDAPLGIN_TRACE - OutputDebugStringW(L"CBDAPinControl_fnConstructor: Expected IUnknown\n"); -#endif - return REGDB_E_CLASSNOTREG; - } - - 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); @@ -209,8 +282,15 @@ CBDAPinControl_fnConstructor( 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 @@ -219,57 +299,80 @@ CBDAPinControl_fnConstructor( // sanity check assert(FilterInfo.pGraph != NULL); - // get IEnumFilters interface - hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters); + // get network provider interface + hr = GetNetworkProviderFromGraph(FilterInfo.pGraph, &pNetworkProvider); - if (FAILED(hr)) + if (SUCCEEDED(hr)) { - //clean up - FilterInfo.pGraph->Release(); - PinInfo.pFilter->Release(); - pObject->Release(); - pPin->Release(); - return hr; + 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(); + } + } + } } - 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(); - // 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(); @@ -277,30 +380,23 @@ CBDAPinControl_fnConstructor( pObject->Release(); - if (pNetworkProvider == NULL) + if (pNetworkProvider) { - // no network provider interface in graph - return E_NOINTERFACE; - } -#endif - - CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin); - -#ifdef BDAPLGIN_TRACE - OutputDebugStringW(L"CBDAPinControl_fnConstructor"); -#endif - - DebugBreak(); - - if (!handler) - return E_OUTOFMEMORY; - - if (FAILED(handler->QueryInterface(riid, ppv))) - { - /* not supported */ - delete handler; - return E_NOINTERFACE; + // release network provider + pNetworkProvider->Release(); } - return NOERROR; + if (pConnectedPin) + { + // release connected pin + pConnectedPin->Release(); + } + + if (pUnknown) + { + // release filter + pUnknown->Release(); + } + + return hr; } diff --git a/reactos/dll/directx/bdaplgin/precomp.h b/reactos/dll/directx/bdaplgin/precomp.h index 771a798f2c3..1bc98363329 100644 --- a/reactos/dll/directx/bdaplgin/precomp.h +++ b/reactos/dll/directx/bdaplgin/precomp.h @@ -1,7 +1,7 @@ #ifndef PRECOMP_H__ #define PRECOMP_H__ -//#define BDAPLGIN_TRACE +#define BDAPLGIN_TRACE #define BUILDING_KS #define _KSDDK_ #include @@ -9,6 +9,7 @@ #include #define __STREAMS__ #include +#include #include #include #include @@ -55,7 +56,6 @@ CBDAPinControl_fnConstructor( HRESULT WINAPI CControlNode_fnConstructor( - HANDLE hFile, IBaseFilter * pFilter, ULONG NodeType, ULONG PinId, @@ -67,7 +67,7 @@ CControlNode_fnConstructor( HRESULT WINAPI CBDAFrequencyFilter_fnConstructor( - HANDLE hFile, + IKsPropertySet * pProperty, ULONG NodeId, REFIID riid, LPVOID * ppv); @@ -77,7 +77,7 @@ CBDAFrequencyFilter_fnConstructor( HRESULT WINAPI CBDASignalStatistics_fnConstructor( - HANDLE hFile, + IKsPropertySet * pProperty, ULONG NodeId, REFIID riid, LPVOID * ppv); @@ -87,7 +87,7 @@ CBDASignalStatistics_fnConstructor( HRESULT WINAPI CBDALNBInfo_fnConstructor( - HANDLE hFile, + IKsPropertySet * pProperty, ULONG NodeId, REFIID riid, LPVOID * ppv); @@ -96,9 +96,11 @@ CBDALNBInfo_fnConstructor( HRESULT WINAPI CBDADigitalDemodulator_fnConstructor( - HANDLE hFile, + IKsPropertySet * pProperty, ULONG NodeId, REFIID riid, LPVOID * ppv); +extern const GUID IID_IKsObject; + #endif diff --git a/reactos/dll/directx/bdaplgin/signalstatistics.cpp b/reactos/dll/directx/bdaplgin/signalstatistics.cpp index ae6079e5b23..230ab8b34f4 100644 --- a/reactos/dll/directx/bdaplgin/signalstatistics.cpp +++ b/reactos/dll/directx/bdaplgin/signalstatistics.cpp @@ -9,8 +9,10 @@ #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 { @@ -45,12 +47,12 @@ public: 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; }; @@ -75,7 +77,6 @@ CBDASignalStatistics::QueryInterface( reinterpret_cast(*Output)->AddRef(); return NOERROR; } - return E_NOINTERFACE; } @@ -95,13 +96,13 @@ CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength) 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]; @@ -128,13 +129,11 @@ CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality) 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]; @@ -162,13 +161,12 @@ CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent) 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; @@ -198,13 +196,12 @@ CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked) 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 @@ -222,20 +219,17 @@ CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime) { 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 @@ -251,13 +245,11 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime) 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]; @@ -271,13 +263,13 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime) 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"); diff --git a/reactos/dll/directx/ksproxy/allocator.cpp b/reactos/dll/directx/ksproxy/allocator.cpp index f5b9c1e1e6a..e7c4b1f2436 100644 --- a/reactos/dll/directx/ksproxy/allocator.cpp +++ b/reactos/dll/directx/ksproxy/allocator.cpp @@ -140,7 +140,10 @@ CKsAllocator::SetProperties( SYSTEM_INFO SystemInfo; EnterCriticalSection(&m_CriticalSection); + +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::SetProperties\n"); +#endif if (!pRequest || !pActual) return E_POINTER; @@ -216,7 +219,9 @@ CKsAllocator::Commit() //TODO integer overflow checks EnterCriticalSection(&m_CriticalSection); +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::Commit\n"); +#endif if (m_Mode == KsAllocatorMode_Kernel) { @@ -301,7 +306,9 @@ CKsAllocator::Decommit() { EnterCriticalSection(&m_CriticalSection); +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::Decommit\n"); +#endif if (m_Mode == KsAllocatorMode_Kernel) { @@ -340,7 +347,9 @@ CKsAllocator::GetBuffer( DWORD dwFlags) { IMediaSample * Sample = NULL; - OutputDebugStringW(L"CKsAllocator::GetBuffer\n"); + + if (!m_Commited) + return VFW_E_NOT_COMMITTED; do { @@ -390,7 +399,9 @@ CKsAllocator::ReleaseBuffer( { EnterCriticalSection(&m_CriticalSection); +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n"); +#endif // media sample always 1 ref count in free list pBuffer->AddRef(); @@ -427,7 +438,10 @@ CKsAllocator::SetNotify( IMemAllocatorNotifyCallbackTemp *pNotify) { EnterCriticalSection(&m_CriticalSection); + +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::SetNotify\n"); +#endif if (pNotify) pNotify->AddRef(); @@ -519,7 +533,9 @@ CKsAllocator::KsCreateAllocatorAndGetHandle( KSALLOCATOR_FRAMING AllocatorFraming; HANDLE hPin; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n"); +#endif if (m_hAllocator) { @@ -588,7 +604,9 @@ CKsAllocator_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsAllocator_Constructor\n"); +#endif CKsAllocator * handler = new CKsAllocator(); diff --git a/reactos/dll/directx/ksproxy/basicaudio.cpp b/reactos/dll/directx/ksproxy/basicaudio.cpp index 7fec05f2140..04c53b345a0 100644 --- a/reactos/dll/directx/ksproxy/basicaudio.cpp +++ b/reactos/dll/directx/ksproxy/basicaudio.cpp @@ -97,7 +97,9 @@ HRESULT STDMETHODCALLTYPE CKsBasicAudio::Stop() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -105,7 +107,10 @@ HRESULT STDMETHODCALLTYPE CKsBasicAudio::Pause() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -114,7 +119,10 @@ STDMETHODCALLTYPE CKsBasicAudio::Run( REFERENCE_TIME tStart) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -123,7 +131,9 @@ STDMETHODCALLTYPE CKsBasicAudio::SetSyncSource( IReferenceClock *pClock) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -131,7 +141,10 @@ HRESULT STDMETHODCALLTYPE CKsBasicAudio::NotifyGraphChange() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -144,7 +157,10 @@ STDMETHODCALLTYPE CKsBasicAudio::GetTypeInfoCount( UINT *pctinfo) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -155,7 +171,9 @@ CKsBasicAudio::GetTypeInfo( LCID lcid, ITypeInfo **ppTInfo) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -168,7 +186,10 @@ CKsBasicAudio::GetIDsOfNames( LCID lcid, DISPID *rgDispId) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -184,7 +205,10 @@ CKsBasicAudio::Invoke( EXCEPINFO *pExcepInfo, UINT *puArgErr) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -197,7 +221,10 @@ STDMETHODCALLTYPE CKsBasicAudio::put_Volume( long lVolume) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -207,7 +234,10 @@ STDMETHODCALLTYPE CKsBasicAudio::get_Volume( long *plVolume) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -217,7 +247,10 @@ STDMETHODCALLTYPE CKsBasicAudio::put_Balance( long lBalance) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -227,7 +260,10 @@ STDMETHODCALLTYPE CKsBasicAudio::get_Balance( long *plBalance) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif + return E_NOTIMPL; } @@ -238,7 +274,9 @@ CKsBasicAudio_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsBasicAudio_Constructor\n"); +#endif CKsBasicAudio * handler = new CKsBasicAudio(); diff --git a/reactos/dll/directx/ksproxy/clockforward.cpp b/reactos/dll/directx/ksproxy/clockforward.cpp index d692dec5f63..868633edf0e 100644 --- a/reactos/dll/directx/ksproxy/clockforward.cpp +++ b/reactos/dll/directx/ksproxy/clockforward.cpp @@ -12,6 +12,8 @@ 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, @@ -91,7 +93,8 @@ CKsClockForwarder::QueryInterface( reinterpret_cast(*Output)->AddRef(); return NOERROR; } - if (IsEqualGUID(refiid, IID_IKsObject)) + if (IsEqualGUID(refiid, IID_IKsObject) || + IsEqualGUID(refiid, IID_IKsClockForwarder)) { *Output = (IKsObject*)(this); reinterpret_cast(*Output)->AddRef(); @@ -105,15 +108,6 @@ CKsClockForwarder::QueryInterface( return NOERROR; } -#if 0 - if (IsEqualGUID(refiid, IID_IKsClockForwarder)) - { - *Output = PVOID(this); - reinterpret_cast(*Output)->AddRef(); - return NOERROR; - } -#endif - return E_NOINTERFACE; } @@ -126,8 +120,13 @@ HRESULT 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 @@ -166,7 +165,9 @@ HRESULT STDMETHODCALLTYPE CKsClockForwarder::Pause() { +#ifdef KSPROXY_TRACE OutputDebugString("CKsClockForwarder::Pause\n"); +#endif if (!m_hEvent) { @@ -206,7 +207,9 @@ STDMETHODCALLTYPE CKsClockForwarder::Run( REFERENCE_TIME tStart) { +#ifdef KSPROXY_TRACE OutputDebugString("CKsClockForwarder::Run\n"); +#endif m_Time = tStart; @@ -233,7 +236,9 @@ STDMETHODCALLTYPE CKsClockForwarder::SetSyncSource( IReferenceClock *pClock) { +#ifdef KSPROXY_TRACE OutputDebugString("CKsClockForwarder::SetSyncSource\n"); +#endif if (pClock) pClock->AddRef(); @@ -250,9 +255,11 @@ HRESULT STDMETHODCALLTYPE CKsClockForwarder::NotifyGraphChange() { +#ifdef KSPROXY_TRACE OutputDebugString("CKsClockForwarder::NotifyGraphChange\n"); - DebugBreak(); - return E_NOTIMPL; +#endif + + return NOERROR; } //------------------------------------------------------------------- @@ -282,6 +289,12 @@ CKsClockForwarder::SetClockState(KSSTATE State) 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; } @@ -330,14 +343,18 @@ CKsClockForwarder_Constructor( 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; } diff --git a/reactos/dll/directx/ksproxy/cvpconfig.cpp b/reactos/dll/directx/ksproxy/cvpconfig.cpp index 91d2006ad49..1333263e003 100644 --- a/reactos/dll/directx/ksproxy/cvpconfig.cpp +++ b/reactos/dll/directx/ksproxy/cvpconfig.cpp @@ -102,7 +102,9 @@ HRESULT STDMETHODCALLTYPE CVPConfig::Stop() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -110,7 +112,9 @@ HRESULT STDMETHODCALLTYPE CVPConfig::Pause() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -119,7 +123,9 @@ STDMETHODCALLTYPE CVPConfig::Run( REFERENCE_TIME tStart) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -128,7 +134,9 @@ STDMETHODCALLTYPE CVPConfig::SetSyncSource( IReferenceClock *pClock) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -136,7 +144,9 @@ HRESULT STDMETHODCALLTYPE CVPConfig::NotifyGraphChange() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -149,7 +159,9 @@ CVPConfig::GetConnectInfo( LPDWORD pdwNumConnectInfo, IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -158,7 +170,9 @@ STDMETHODCALLTYPE CVPConfig::SetConnectInfo( DWORD dwChosenEntry) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -167,7 +181,9 @@ STDMETHODCALLTYPE CVPConfig::GetVPDataInfo( LPAMVPDATAINFO pamvpDataInfo) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -177,7 +193,9 @@ CVPConfig::GetMaxPixelRate( LPAMVPSIZE pamvpSize, OUT LPDWORD pdwMaxPixelsPerSecond) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -187,7 +205,9 @@ CVPConfig::InformVPInputFormats( DWORD dwNumFormats, IN LPDDPIXELFORMAT pDDPixelFormats) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -197,7 +217,9 @@ CVPConfig::GetVideoFormats( LPDWORD pdwNumFormats, IN OUT LPDDPIXELFORMAT pddPixelFormats) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -206,7 +228,9 @@ STDMETHODCALLTYPE CVPConfig::SetVideoFormat( DWORD dwChosenEntry) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -214,7 +238,9 @@ HRESULT STDMETHODCALLTYPE CVPConfig::SetInvertPolarity() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -223,7 +249,9 @@ STDMETHODCALLTYPE CVPConfig::GetOverlaySurface( LPDIRECTDRAWSURFACE* ppddOverlaySurface) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -232,7 +260,9 @@ STDMETHODCALLTYPE CVPConfig::SetDirectDrawKernelHandle( ULONG_PTR dwDDKernelHandle) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -241,7 +271,9 @@ STDMETHODCALLTYPE CVPConfig::SetVideoPortID( IN DWORD dwVideoPortID) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -252,7 +284,9 @@ CVPConfig::SetDDSurfaceKernelHandles( DWORD cHandles, IN ULONG_PTR *rgDDKernelHandles) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -264,7 +298,9 @@ CVPConfig::SetSurfaceParameters( IN DWORD dwXOrigin, IN DWORD dwYOrigin) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -277,7 +313,9 @@ STDMETHODCALLTYPE CVPConfig::IsVPDecimationAllowed( LPBOOL pbIsDecimationAllowed) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -286,13 +324,13 @@ STDMETHODCALLTYPE CVPConfig::SetScalingFactors( LPAMVPSIZE pamvpSize) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } - - HRESULT WINAPI CVPConfig_Constructor( @@ -300,7 +338,9 @@ CVPConfig_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CVPConfig_Constructor\n"); +#endif CVPConfig * handler = new CVPConfig(); diff --git a/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp b/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp index 016d060aa24..b7b7130b471 100644 --- a/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp +++ b/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp @@ -98,7 +98,9 @@ HRESULT STDMETHODCALLTYPE CVPVBIConfig::Stop() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -106,7 +108,9 @@ HRESULT STDMETHODCALLTYPE CVPVBIConfig::Pause() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -115,7 +119,9 @@ STDMETHODCALLTYPE CVPVBIConfig::Run( REFERENCE_TIME tStart) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -124,7 +130,9 @@ STDMETHODCALLTYPE CVPVBIConfig::SetSyncSource( IReferenceClock *pClock) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -132,7 +140,9 @@ HRESULT STDMETHODCALLTYPE CVPVBIConfig::NotifyGraphChange() { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -145,7 +155,9 @@ CVPVBIConfig::GetConnectInfo( LPDWORD pdwNumConnectInfo, IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -154,7 +166,9 @@ STDMETHODCALLTYPE CVPVBIConfig::SetConnectInfo( DWORD dwChosenEntry) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -163,7 +177,9 @@ STDMETHODCALLTYPE CVPVBIConfig::GetVPDataInfo( LPAMVPDATAINFO pamvpDataInfo) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -173,7 +189,9 @@ CVPVBIConfig::GetMaxPixelRate( LPAMVPSIZE pamvpSize, OUT LPDWORD pdwMaxPixelsPerSecond) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -183,7 +201,9 @@ CVPVBIConfig::InformVPInputFormats( DWORD dwNumFormats, IN LPDDPIXELFORMAT pDDPixelFormats) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -193,7 +213,9 @@ CVPVBIConfig::GetVideoFormats( LPDWORD pdwNumFormats, IN OUT LPDDPIXELFORMAT pddPixelFormats) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -202,7 +224,9 @@ STDMETHODCALLTYPE CVPVBIConfig::SetVideoFormat( DWORD dwChosenEntry) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -210,7 +234,9 @@ HRESULT STDMETHODCALLTYPE CVPVBIConfig::SetInvertPolarity() { - OutputDebugString("UNIMPLEMENTED\n"); + #ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -219,7 +245,9 @@ STDMETHODCALLTYPE CVPVBIConfig::GetOverlaySurface( LPDIRECTDRAWSURFACE* ppddOverlaySurface) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -228,7 +256,9 @@ STDMETHODCALLTYPE CVPVBIConfig::SetDirectDrawKernelHandle( ULONG_PTR dwDDKernelHandle) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -237,7 +267,9 @@ STDMETHODCALLTYPE CVPVBIConfig::SetVideoPortID( IN DWORD dwVideoPortID) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -248,7 +280,9 @@ CVPVBIConfig::SetDDSurfaceKernelHandles( DWORD cHandles, IN ULONG_PTR *rgDDKernelHandles) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -260,7 +294,9 @@ CVPVBIConfig::SetSurfaceParameters( IN DWORD dwXOrigin, IN DWORD dwYOrigin) { - OutputDebugString("UNIMPLEMENTED\n"); +#ifdef KSPROXY_TRACE + OutputDebugStringW(L"UNIMPLEMENTED\n"); +#endif return E_NOTIMPL; } @@ -272,7 +308,9 @@ CVPVBIConfig_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CVPVBIConfig_Constructor\n"); +#endif CVPVBIConfig * handler = new CVPVBIConfig(); diff --git a/reactos/dll/directx/ksproxy/datatype.cpp b/reactos/dll/directx/ksproxy/datatype.cpp index 5006b68a121..965e847b55b 100644 --- a/reactos/dll/directx/ksproxy/datatype.cpp +++ b/reactos/dll/directx/ksproxy/datatype.cpp @@ -103,7 +103,9 @@ CKsDataTypeHandler::KsIsMediaTypeInRanges( ULONG Index; HRESULT hr = S_FALSE; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n"); +#endif DataList = (PKSMULTIPLE_ITEM)DataRanges; DataRange = (PKSDATARANGE)(DataList + 1); @@ -187,7 +189,9 @@ STDMETHODCALLTYPE CKsDataTypeHandler::KsSetMediaType( IN const AM_MEDIA_TYPE* AmMediaType) { +#ifdef KSPROXY_TRACE OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n"); +#endif if (m_Type) { @@ -228,7 +232,10 @@ CKsDataTypeHandler_Constructor ( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n"); +#endif + CKsDataTypeHandler * handler = new CKsDataTypeHandler(); if (!handler) diff --git a/reactos/dll/directx/ksproxy/enum_mediatypes.cpp b/reactos/dll/directx/ksproxy/enum_mediatypes.cpp index 462ffda24fc..db2c7a0298e 100644 --- a/reactos/dll/directx/ksproxy/enum_mediatypes.cpp +++ b/reactos/dll/directx/ksproxy/enum_mediatypes.cpp @@ -64,13 +64,6 @@ CEnumMediaTypes::QueryInterface( 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; } @@ -171,7 +164,9 @@ STDMETHODCALLTYPE CEnumMediaTypes::Clone( IEnumMediaTypes **ppEnum) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -189,7 +184,7 @@ CEnumMediaTypes_fnConstructor( 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 diff --git a/reactos/dll/directx/ksproxy/enumpins.cpp b/reactos/dll/directx/ksproxy/enumpins.cpp index 5c0f0ecd7bd..172ef7a016b 100644 --- a/reactos/dll/directx/ksproxy/enumpins.cpp +++ b/reactos/dll/directx/ksproxy/enumpins.cpp @@ -132,7 +132,10 @@ STDMETHODCALLTYPE CEnumPins::Clone( IEnumPins **ppEnum) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n"); +#endif + return E_NOTIMPL; } diff --git a/reactos/dll/directx/ksproxy/input_pin.cpp b/reactos/dll/directx/ksproxy/input_pin.cpp index 783ff703e5e..b651d7dafaf 100644 --- a/reactos/dll/directx/ksproxy/input_pin.cpp +++ b/reactos/dll/directx/ksproxy/input_pin.cpp @@ -62,6 +62,8 @@ class CInputPin : public IPin, public ISpecifyPropertyPages { public: + typedef std::vectorProxyPluginVector; + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); STDMETHODIMP_(ULONG) AddRef() @@ -170,14 +172,15 @@ public: 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; @@ -196,17 +199,16 @@ protected: 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), @@ -218,13 +220,27 @@ CInputPin::CInputPin( 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); } @@ -346,7 +362,10 @@ CInputPin::Notify( IBaseFilter *pSelf, Quality q) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::Notify NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -355,7 +374,10 @@ STDMETHODCALLTYPE CInputPin::SetSink( IQualityControl *piqc) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -368,7 +390,10 @@ STDMETHODCALLTYPE CInputPin::KsAddAggregate( IN REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -377,7 +402,10 @@ STDMETHODCALLTYPE CInputPin::KsRemoveAggregate( REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -401,7 +429,10 @@ CInputPin::Backout( IPin *ppinOut, IGraphBuilder *pGraph) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::Backout\n"); +#endif + return S_OK; } @@ -414,7 +445,10 @@ STDMETHODCALLTYPE CInputPin::KsPinFactory( ULONG* PinFactory) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::KsPinFactory\n"); +#endif + *PinFactory = m_PinId; return S_OK; } @@ -590,7 +624,10 @@ HRESULT STDMETHODCALLTYPE CInputPin::GetAllocator(IMemAllocator **ppAllocator) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::GetAllocator\n"); +#endif + return VFW_E_NO_ALLOCATOR; } @@ -598,13 +635,16 @@ HRESULT 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) { @@ -645,9 +685,11 @@ CInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps) 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; } @@ -656,8 +698,11 @@ HRESULT STDMETHODCALLTYPE CInputPin::Receive(IMediaSample *pSample) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::Receive NotImplemented\n"); DebugBreak(); +#endif + return E_NOTIMPL; } @@ -665,8 +710,11 @@ HRESULT STDMETHODCALLTYPE CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n"); DebugBreak(); +#endif + return E_NOTIMPL; } @@ -674,8 +722,11 @@ HRESULT STDMETHODCALLTYPE CInputPin::ReceiveCanBlock( void) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n"); DebugBreak(); +#endif + return S_FALSE; } @@ -688,7 +739,22 @@ STDMETHODCALLTYPE 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 @@ -696,7 +762,22 @@ STDMETHODCALLTYPE 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 @@ -838,7 +919,10 @@ CInputPin::KsQualityNotify( ULONG Proportion, REFERENCE_TIME TimeDelta) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n"); +#endif + DebugBreak(); return E_NOTIMPL; } @@ -853,7 +937,9 @@ CInputPin::KsNotifyError( IMediaSample* Sample, HRESULT hr) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n"); +#endif } @@ -1026,8 +1112,10 @@ HRESULT STDMETHODCALLTYPE CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::Connect NotImplemented\n"); DebugBreak(); +#endif return NOERROR; } @@ -1078,7 +1166,10 @@ CInputPin::Disconnect( void) m_Pin->Release(); m_Pin = NULL; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::Disconnect\n"); +#endif + return S_OK; } HRESULT @@ -1106,8 +1197,11 @@ CInputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt) if (!m_Pin) return VFW_E_NOT_CONNECTED; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n"); DebugBreak(); +#endif + return E_NOTIMPL; } HRESULT @@ -1159,9 +1253,23 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum) 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; @@ -1179,7 +1287,7 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum) 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 @@ -1195,35 +1303,45 @@ HRESULT 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; } @@ -1237,11 +1355,25 @@ CInputPin::CheckFormat( 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; @@ -1254,7 +1386,9 @@ CInputPin::CheckFormat( { // 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); @@ -1321,7 +1455,9 @@ CInputPin::CreatePin( 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); @@ -1333,7 +1469,9 @@ CInputPin::CreatePin( 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); @@ -1354,10 +1492,12 @@ CInputPin::CreatePin( } 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; } @@ -1379,6 +1519,23 @@ CInputPin::CreatePinHandle( 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) { @@ -1427,7 +1584,7 @@ CInputPin::CreatePinHandle( } // create pin - hr = KsCreatePin(m_hFilter, PinConnect, GENERIC_WRITE, &m_hPin); + hr = KsCreatePin(hFilter, PinConnect, GENERIC_WRITE, &m_hPin); if (SUCCEEDED(hr)) { @@ -1436,16 +1593,19 @@ CInputPin::CreatePinHandle( 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) { @@ -1460,6 +1620,33 @@ CInputPin::CreatePinHandle( 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 @@ -1471,6 +1658,137 @@ CInputPin::CreatePinHandle( 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( @@ -1482,7 +1800,7 @@ 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; diff --git a/reactos/dll/directx/ksproxy/interface.cpp b/reactos/dll/directx/ksproxy/interface.cpp index 3d1af0db1b0..7eb0fd284d5 100644 --- a/reactos/dll/directx/ksproxy/interface.cpp +++ b/reactos/dll/directx/ksproxy/interface.cpp @@ -285,10 +285,11 @@ CKsInterfaceHandler::KsProcessMediaSamples( 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; @@ -479,7 +480,9 @@ CKsInterfaceHandler_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n"); +#endif CKsInterfaceHandler * handler = new CKsInterfaceHandler(); diff --git a/reactos/dll/directx/ksproxy/mediasample.cpp b/reactos/dll/directx/ksproxy/mediasample.cpp index 8e317efef61..e0411938444 100644 --- a/reactos/dll/directx/ksproxy/mediasample.cpp +++ b/reactos/dll/directx/ksproxy/mediasample.cpp @@ -116,8 +116,6 @@ CMediaSample::QueryInterface( } if (IsEqualGUID(refiid, IID_IMediaSample2)) { - - OutputDebugStringW(L"CMediaSample::QueryInterface requested IMediaSample2 interface\n"); #if 0 *Output = (IMediaSample2*)(this); reinterpret_cast(*Output)->AddRef(); @@ -267,8 +265,6 @@ HRESULT STDMETHODCALLTYPE CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType) { - OutputDebugStringW(L"CMediaSample::GetMediaType\n"); - if (!m_MediaType) { *ppMediaType = NULL; @@ -352,7 +348,9 @@ CMediaSample_Constructor( REFIID riid, LPVOID * ppv) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CMediaSample_Constructor\n"); +#endif CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize); diff --git a/reactos/dll/directx/ksproxy/node.cpp b/reactos/dll/directx/ksproxy/node.cpp index d2686bb96a4..d3082255346 100644 --- a/reactos/dll/directx/ksproxy/node.cpp +++ b/reactos/dll/directx/ksproxy/node.cpp @@ -124,7 +124,9 @@ CKsNode_Constructor( HANDLE handle; KSNODE_CREATE NodeCreate; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsNode_Constructor\n"); +#endif //setup request NodeCreate.CreateFlags = 0; diff --git a/reactos/dll/directx/ksproxy/output_pin.cpp b/reactos/dll/directx/ksproxy/output_pin.cpp index e5f172bf2e0..c2227caf421 100644 --- a/reactos/dll/directx/ksproxy/output_pin.cpp +++ b/reactos/dll/directx/ksproxy/output_pin.cpp @@ -26,6 +26,8 @@ class COutputPin : public IPin, { public: + typedef std::vectorProxyPluginVector; + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); STDMETHODIMP_(ULONG) AddRef() @@ -162,6 +164,8 @@ public: 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); @@ -172,7 +176,6 @@ protected: LPCWSTR m_PinName; HANDLE m_hPin; ULONG m_PinId; - IKsObject * m_KsObjectParent; IPin * m_Pin; IKsAllocatorEx * m_KsAllocatorEx; ULONG m_PipeAllocatorFlag; @@ -189,8 +192,6 @@ protected: KSPIN_INTERFACE m_Interface; KSPIN_MEDIUM m_Medium; AM_MEDIA_TYPE m_MediaFormat; - - IMediaSeeking * m_FilterMediaSeeking; ALLOCATOR_PROPERTIES m_Properties; IKsInterfaceHandler * m_InterfaceHandler; @@ -201,12 +202,13 @@ protected: BOOL m_IoThreadStarted; KSSTATE m_State; + CRITICAL_SECTION m_Lock; + + ProxyPluginVector m_Plugins; }; COutputPin::~COutputPin() { - if (m_KsObjectParent) - m_KsObjectParent->Release(); } COutputPin::COutputPin( @@ -218,7 +220,6 @@ 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), @@ -228,28 +229,30 @@ COutputPin::COutputPin( 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 @@ -262,7 +265,9 @@ COutputPin::QueryInterface( 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(*Output)->AddRef(); return NOERROR; @@ -275,8 +280,9 @@ COutputPin::QueryInterface( if (FAILED(hr)) return hr; } - +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsObject\n"); +#endif *Output = (IKsObject*)(this); reinterpret_cast(*Output)->AddRef(); return NOERROR; @@ -313,14 +319,18 @@ COutputPin::QueryInterface( if (FAILED(hr)) return hr; } +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPropertySet\n"); +#endif *Output = (IKsPropertySet*)(this); reinterpret_cast(*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(*Output)->AddRef(); return NOERROR; @@ -335,14 +345,18 @@ COutputPin::QueryInterface( #endif else if (IsEqualGUID(refiid, IID_IKsPinFactory)) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPinFactory\n"); +#endif *Output = (IKsPinFactory*)(this); reinterpret_cast(*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(*Output)->AddRef(); return NOERROR; @@ -372,12 +386,14 @@ COutputPin::QueryInterface( 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; } @@ -390,7 +406,9 @@ STDMETHODCALLTYPE COutputPin::SuggestAllocatorProperties( const ALLOCATOR_PROPERTIES *pprop) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::SuggestAllocatorProperties\n"); +#endif if (m_Pin) { @@ -407,7 +425,9 @@ STDMETHODCALLTYPE COutputPin::GetAllocatorProperties( ALLOCATOR_PROPERTIES *pprop) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::GetAllocatorProperties\n"); +#endif if (!m_Pin) { @@ -433,7 +453,9 @@ STDMETHODCALLTYPE COutputPin::SetFormat( AM_MEDIA_TYPE *pmt) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::SetFormat NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -441,7 +463,9 @@ HRESULT STDMETHODCALLTYPE COutputPin::GetFormat(AM_MEDIA_TYPE **ppmt) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::GetFormat NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -451,7 +475,9 @@ COutputPin::GetNumberOfCapabilities( int *piCount, int *piSize) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::GetNumberOfCapabilities NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -462,7 +488,9 @@ COutputPin::GetStreamCaps( AM_MEDIA_TYPE **ppmt, BYTE *pSCC) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::GetStreamCaps NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -473,7 +501,9 @@ HRESULT STDMETHODCALLTYPE COutputPin::NotifyRelease() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::NotifyRelease\n"); +#endif // notify thread of new available sample SetEvent(m_hBufferAvailable); @@ -489,7 +519,17 @@ STDMETHODCALLTYPE 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 @@ -497,7 +537,17 @@ STDMETHODCALLTYPE 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 @@ -505,7 +555,17 @@ STDMETHODCALLTYPE 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 @@ -513,7 +573,17 @@ STDMETHODCALLTYPE 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 @@ -521,7 +591,17 @@ STDMETHODCALLTYPE 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 @@ -529,7 +609,17 @@ STDMETHODCALLTYPE 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 @@ -537,7 +627,17 @@ STDMETHODCALLTYPE 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 @@ -545,7 +645,17 @@ STDMETHODCALLTYPE 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 @@ -553,7 +663,17 @@ STDMETHODCALLTYPE 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; } @@ -562,7 +682,17 @@ STDMETHODCALLTYPE 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 @@ -573,7 +703,17 @@ COutputPin::ConvertTimeFormat( 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 @@ -584,7 +724,17 @@ COutputPin::SetPositions( 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 @@ -593,7 +743,17 @@ COutputPin::GetPositions( 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 @@ -602,7 +762,17 @@ COutputPin::GetAvailable( 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 @@ -610,7 +780,17 @@ STDMETHODCALLTYPE 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 @@ -618,7 +798,17 @@ STDMETHODCALLTYPE 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 @@ -626,7 +816,17 @@ STDMETHODCALLTYPE 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; } //------------------------------------------------------------------- @@ -638,7 +838,9 @@ COutputPin::Notify( IBaseFilter *pSelf, Quality q) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::Notify NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -647,7 +849,9 @@ STDMETHODCALLTYPE COutputPin::SetSink( IQualityControl *piqc) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::SetSink NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -660,7 +864,9 @@ STDMETHODCALLTYPE COutputPin::KsAddAggregate( IN REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsAddAggregate NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -669,7 +875,9 @@ STDMETHODCALLTYPE COutputPin::KsRemoveAggregate( REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsRemoveAggregate NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -683,8 +891,24 @@ STDMETHODCALLTYPE 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 @@ -692,9 +916,24 @@ STDMETHODCALLTYPE 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 @@ -703,7 +942,9 @@ COutputPin::KsCreateSinkPinHandle( KSPIN_INTERFACE& Interface, KSPIN_MEDIUM& Medium) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsCreateSinkPinHandle NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -746,7 +987,9 @@ COutputPin::KsPropagateAcquire() ULONG BytesReturned; HRESULT hr; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsPropagateAcquire\n"); +#endif assert(m_hPin != INVALID_HANDLE_VALUE); @@ -757,6 +1000,10 @@ COutputPin::KsPropagateAcquire() 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 @@ -838,7 +1085,9 @@ COutputPin::KsQualityNotify( ULONG Proportion, REFERENCE_TIME TimeDelta) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsQualityNotify NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -852,7 +1101,9 @@ COutputPin::KsNotifyError( IMediaSample* Sample, HRESULT hr) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsNotifyError NotImplemented\n"); +#endif } @@ -1009,7 +1260,9 @@ HRESULT STDMETHODCALLTYPE COutputPin::GetPages(CAUUID *pPages) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::GetPages NotImplemented\n"); +#endif if (!pPages) return E_POINTER; @@ -1029,7 +1282,10 @@ STDMETHODCALLTYPE COutputPin::KsPinFactory( ULONG* PinFactory) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsPinFactory\n"); +#endif + *PinFactory = m_PinId; return S_OK; } @@ -1045,7 +1301,9 @@ COutputPin::Render( IPin *ppinOut, IGraphBuilder *pGraph) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::Render\n"); +#endif return S_OK; } @@ -1055,7 +1313,10 @@ COutputPin::Backout( IPin *ppinOut, IGraphBuilder *pGraph) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::Backout\n"); +#endif + return S_OK; } //------------------------------------------------------------------- @@ -1065,7 +1326,10 @@ HANDLE STDMETHODCALLTYPE COutputPin::KsGetObjectHandle() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::KsGetObjectHandle\n"); +#endif + assert(m_hPin != INVALID_HANDLE_VALUE); return m_hPin; } @@ -1083,16 +1347,17 @@ COutputPin::KsProperty( 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; } @@ -1107,7 +1372,9 @@ COutputPin::KsMethod( 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); } @@ -1122,7 +1389,9 @@ COutputPin::KsEvent( { 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); @@ -1227,7 +1496,9 @@ COutputPin::QuerySupported( KSPROPERTY Property; ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::QuerySupported\n"); +#endif Property.Set = guidPropSet; Property.Id = dwPropID; @@ -1247,9 +1518,12 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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); @@ -1270,7 +1544,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *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; } @@ -1306,8 +1583,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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; @@ -1318,8 +1597,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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; @@ -1329,8 +1610,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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; @@ -1344,8 +1627,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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; @@ -1355,8 +1640,10 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) 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; @@ -1375,7 +1662,9 @@ COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) // increment reference count pReceivePin->AddRef(); m_Pin = pReceivePin; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::Connect success\n"); +#endif } else { @@ -1396,7 +1685,9 @@ HRESULT STDMETHODCALLTYPE COutputPin::Disconnect( void) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::Disconnect\n"); +#endif if (!m_Pin) { @@ -1412,14 +1703,21 @@ COutputPin::Disconnect( void) 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; @@ -1439,7 +1737,10 @@ HRESULT STDMETHODCALLTYPE COutputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::ConnectionMediaType called\n"); +#endif + return E_NOTIMPL; } HRESULT @@ -1480,7 +1781,10 @@ HRESULT STDMETHODCALLTYPE COutputPin::QueryAccept(const AM_MEDIA_TYPE *pmt) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"COutputPin::QueryAccept called\n"); +#endif + return E_NOTIMPL; } HRESULT @@ -1491,15 +1795,17 @@ COutputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum) 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); @@ -1582,12 +1888,26 @@ COutputPin::CheckFormat( 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)) @@ -1699,10 +2019,13 @@ COutputPin::CreatePin( } 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; } @@ -1724,6 +2047,9 @@ COutputPin::CreatePinHandle( PKSDATAFORMAT DataFormat; ULONG Length; HRESULT hr; + HANDLE hFilter; + IKsObject * KsObjectParent; + //KSALLOCATOR_FRAMING Framing; //KSPROPERTY Property; //ULONG BytesReturned; @@ -1774,8 +2100,19 @@ COutputPin::CreatePinHandle( 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); @@ -1787,6 +2124,7 @@ COutputPin::CreatePinHandle( 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); @@ -1797,6 +2135,7 @@ COutputPin::CreatePinHandle( CoTaskMemFree(pSub); CoTaskMemFree(pFormat); OutputDebugStringW(Buffer); +#endif if (pmt->cbFormat) { @@ -1833,6 +2172,33 @@ COutputPin::CreatePinHandle( 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 @@ -1843,6 +2209,138 @@ COutputPin::CreatePinHandle( 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() @@ -1852,15 +2350,16 @@ 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) @@ -1869,16 +2368,15 @@ COutputPin::IoProcessRoutine() 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; } @@ -1895,11 +2393,11 @@ COutputPin::IoProcessRoutine() &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 @@ -1916,18 +2414,19 @@ COutputPin::IoProcessRoutine() 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); @@ -1963,24 +2462,18 @@ COutputPin::InitializeIOThread() 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; @@ -2008,121 +2501,191 @@ COutputPin_SetState( 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); + +#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); + } } - 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); - - - 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( diff --git a/reactos/dll/directx/ksproxy/precomp.h b/reactos/dll/directx/ksproxy/precomp.h index c02b6adb6f4..eae5de0f1aa 100644 --- a/reactos/dll/directx/ksproxy/precomp.h +++ b/reactos/dll/directx/ksproxy/precomp.h @@ -3,6 +3,7 @@ #define _FORCENAMELESSUNION #define BUILDING_KS #define _KSDDK_ +//#define KSPROXY_TRACE #include //#include #include diff --git a/reactos/dll/directx/ksproxy/proxy.cpp b/reactos/dll/directx/ksproxy/proxy.cpp index 41d543fa70e..bd34ec8184b 100644 --- a/reactos/dll/directx/ksproxy/proxy.cpp +++ b/reactos/dll/directx/ksproxy/proxy.cpp @@ -63,7 +63,7 @@ public: InterlockedDecrement(&m_Ref); if (!m_Ref) { - delete this; + //delete this; return 0; } return m_Ref; @@ -171,7 +171,7 @@ public: 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) @@ -203,8 +203,23 @@ protected: 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( @@ -332,24 +347,26 @@ 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; } @@ -362,7 +379,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::GetPages(CAUUID *pPages) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n"); +#endif if (!pPages) return E_POINTER; @@ -478,7 +497,10 @@ STDMETHODCALLTYPE 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)); } @@ -487,7 +509,10 @@ STDMETHODCALLTYPE 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)); } @@ -496,7 +521,10 @@ STDMETHODCALLTYPE 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)); } @@ -505,7 +533,10 @@ STDMETHODCALLTYPE 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)); } @@ -514,7 +545,10 @@ STDMETHODCALLTYPE 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)); } @@ -523,7 +557,9 @@ STDMETHODCALLTYPE 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)); } @@ -532,7 +568,9 @@ STDMETHODCALLTYPE 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)); } @@ -541,7 +579,10 @@ STDMETHODCALLTYPE 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)); } @@ -550,7 +591,9 @@ STDMETHODCALLTYPE 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)); } @@ -559,7 +602,9 @@ STDMETHODCALLTYPE 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)); } @@ -575,7 +620,9 @@ CKsProxy::GetTime( KSPROPERTY Property; ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetTime\n"); +#endif if (!pTime) return E_POINTER; @@ -620,7 +667,9 @@ CKsProxy::AdviseTime( ULONG BytesReturned; PKSEVENT_TIME_MARK Event; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::AdviseTime\n"); +#endif // //FIXME locks @@ -686,7 +735,9 @@ CKsProxy::AdvisePeriodic( ULONG BytesReturned; PKSEVENT_TIME_INTERVAL Event; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n"); +#endif // //FIXME locks @@ -748,7 +799,9 @@ CKsProxy::Unadvise( HRESULT hr; ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Unadvise\n"); +#endif if (m_hClock) { @@ -786,7 +839,10 @@ CKsProxy::GetCapabilities( Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES; Property.Flags = KSPROPERTY_TYPE_GET; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetCapabilities\n"); +#endif + if (!pCapabilities) return E_POINTER; @@ -836,7 +892,9 @@ CKsProxy::CheckCapabilities( DWORD Capabilities; HRESULT hr; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::CheckCapabilities\n"); +#endif if (!pCapabilities) return E_POINTER; @@ -914,11 +972,13 @@ CKsProxy::IsFormatSupported( 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; @@ -927,8 +987,10 @@ CKsProxy::IsFormatSupported( 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); @@ -961,7 +1023,9 @@ CKsProxy::IsFormatSupported( { // plugin does not support interface hr = S_FALSE; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n"); +#endif break; } @@ -986,7 +1050,9 @@ CKsProxy::QueryPreferredFormat( HRESULT hr; ULONG Index; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n"); +#endif if (!pFormat) return E_POINTER; @@ -1046,7 +1112,9 @@ CKsProxy::GetTimeFormat( 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)) @@ -1086,7 +1154,9 @@ CKsProxy::IsUsingTimeFormat( { GUID Format; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n"); +#endif if (FAILED(QueryPreferredFormat(&Format))) return S_FALSE; @@ -1110,7 +1180,9 @@ CKsProxy::SetTimeFormat( 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)) @@ -1158,7 +1230,9 @@ CKsProxy::GetDuration( 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)) @@ -1204,7 +1278,9 @@ CKsProxy::GetStopPosition( 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)) @@ -1250,7 +1326,9 @@ CKsProxy::GetCurrentPosition( 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)) @@ -1300,7 +1378,9 @@ CKsProxy::ConvertTimeFormat( Property.Property.Id = KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT; Property.Property.Flags = KSPROPERTY_TYPE_GET; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n"); +#endif if (!pTargetFormat) { @@ -1383,7 +1463,9 @@ CKsProxy::SetPositions( 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)) @@ -1444,7 +1526,9 @@ CKsProxy::GetPositions( { HRESULT hr; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetPositions\n"); +#endif hr = GetCurrentPosition(pCurrent); if (SUCCEEDED(hr)) @@ -1468,7 +1552,9 @@ CKsProxy::GetAvailable( 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)) @@ -1512,7 +1598,9 @@ STDMETHODCALLTYPE CKsProxy::SetRate( double dRate) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::SetRate\n"); +#endif return E_NOTIMPL; } @@ -1521,7 +1609,9 @@ STDMETHODCALLTYPE CKsProxy::GetRate( double *pdRate) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetRate\n"); +#endif return E_NOTIMPL; } @@ -1538,7 +1628,9 @@ CKsProxy::GetPreroll( 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)) @@ -1584,7 +1676,7 @@ CKsProxy::GetMiscFlags() HRESULT hr; PIN_DIRECTION PinDirection; KSPIN_COMMUNICATION Communication; - WCHAR Buffer[100]; + for(Index = 0; Index < m_Pins.size(); Index++) { @@ -1608,8 +1700,12 @@ CKsProxy::GetMiscFlags() } } +#ifdef KSPROXY_TRACE + WCHAR Buffer[100]; swprintf(Buffer, L"CKsProxy::GetMiscFlags stub Flags %x\n", Flags); OutputDebugStringW(Buffer); +#endif + return Flags; } @@ -1625,8 +1721,11 @@ CKsProxy::KsProperty( 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); } @@ -1639,8 +1738,11 @@ CKsProxy::KsMethod( 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); } @@ -1653,8 +1755,11 @@ CKsProxy::KsEvent( 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 @@ -1677,7 +1782,9 @@ CKsProxy::Set( { ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Set\n"); +#endif if (cbInstanceData) { @@ -1721,7 +1828,9 @@ CKsProxy::Get( { ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Get\n"); +#endif if (cbInstanceData) { @@ -1762,7 +1871,9 @@ CKsProxy::QuerySupported( KSPROPERTY Property; ULONG BytesReturned; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::QuerySupported\n"); +#endif Property.Set = guidPropSet; Property.Id = dwPropID; @@ -1787,7 +1898,9 @@ CKsProxy::CreateNodeInstance( { HRESULT hr; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n"); +#endif *Interface = NULL; @@ -1812,7 +1925,9 @@ STDMETHODCALLTYPE CKsProxy::KsAddAggregate( IN REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -1821,7 +1936,10 @@ STDMETHODCALLTYPE CKsProxy::KsRemoveAggregate( REFGUID AggregateClass) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -1834,8 +1952,10 @@ HRESULT STDMETHODCALLTYPE CKsProxy::IsDirty() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n"); DebugBreak(); +#endif return E_NOTIMPL; } @@ -1853,7 +1973,9 @@ CKsProxy::Load( ULONG PinId; LPOLESTR pMajor, pSub, pFormat; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Load\n"); +#endif #if 0 ULONG Version = ReadInt(pStm, hr); @@ -1923,7 +2045,10 @@ CKsProxy::Save( IStream *pStm, BOOL fClearDirty) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Save Notimplemented\n"); +#endif + return E_NOTIMPL; } @@ -1932,8 +2057,11 @@ STDMETHODCALLTYPE CKsProxy::GetSizeMax( ULARGE_INTEGER *pcbSize) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n"); DebugBreak(); +#endif + return E_NOTIMPL; } @@ -1945,8 +2073,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink) { - +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::DeviceInfo\n"); +#endif if (!m_DevicePath) { @@ -1971,7 +2100,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::Reassociate(void) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Reassociate\n"); +#endif if (!m_DevicePath || m_hDevice) { @@ -1994,7 +2125,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::Disassociate(void) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Disassociate\n"); +#endif if (!m_hDevice) return E_HANDLE; @@ -2012,7 +2145,10 @@ HANDLE STDMETHODCALLTYPE CKsProxy::KsGetClockHandle() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n"); +#endif + return m_hClock; } @@ -2025,7 +2161,10 @@ HANDLE STDMETHODCALLTYPE CKsProxy::KsGetObjectHandle() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n"); +#endif + return m_hDevice; } @@ -2036,7 +2175,10 @@ HRESULT STDMETHODCALLTYPE CKsProxy::InitNew( void) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::InitNew\n"); +#endif + return S_OK; } @@ -2323,7 +2465,6 @@ CKsProxy::CreatePins() KSPIN_DATAFLOW DataFlow; KSPIN_COMMUNICATION Communication; HRESULT hr; - WCHAR Buffer[100]; LPWSTR PinName; IPin * pPin; ULONG InputPin = 0; @@ -2390,8 +2531,12 @@ CKsProxy::CreatePins() // 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; @@ -2402,14 +2547,16 @@ STDMETHODCALLTYPE 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; @@ -2417,14 +2564,18 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog) 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); @@ -2453,9 +2604,10 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog) 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()); } @@ -2493,7 +2645,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Save\n"); +#endif return E_NOTIMPL; } @@ -2506,7 +2660,9 @@ STDMETHODCALLTYPE CKsProxy::GetClassID( CLSID *pClassID) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetClassID\n"); +#endif CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID)); return S_OK; @@ -2516,8 +2672,21 @@ HRESULT 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 @@ -2526,17 +2695,28 @@ CKsProxy::Pause() { HRESULT hr = S_OK; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Pause\n"); +#endif - if (m_FilterState == State_Stopped) + EnterCriticalSection(&m_Lock); + + if (m_FilterState == State_Running) { - hr = SetPinState(KSSTATE_PAUSE); - if (FAILED(hr)) - return hr; - + hr = SetPinState(KSSTATE_STOP); + } + if (SUCCEEDED(hr)) + { + if (m_FilterState == State_Stopped) + { + hr = SetPinState(KSSTATE_PAUSE); + } } - m_FilterState = State_Paused; + if (SUCCEEDED(hr)) + m_FilterState = State_Paused; + + LeaveCriticalSection(&m_Lock); return hr; } @@ -2548,23 +2728,32 @@ CKsProxy::Run( { 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; } @@ -2631,9 +2820,11 @@ CKsProxy::SetPinState( // 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; @@ -2647,6 +2838,9 @@ CKsProxy::GetState( DWORD dwMilliSecsTimeout, FILTER_STATE *State) { + if (!State) + return E_POINTER; + *State = m_FilterState; return S_OK; } @@ -2666,8 +2860,9 @@ CKsProxy::SetSyncSource( ULONG BytesReturned; PIN_DIRECTION PinDir; -// Plug In Distributor: IKsClock +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::SetSyncSource\n"); +#endif // FIXME // need locks @@ -2761,7 +2956,9 @@ CKsProxy::SetSyncSource( } m_ReferenceClock = pClock; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::SetSyncSource done\n"); +#endif return S_OK; } @@ -2770,7 +2967,9 @@ STDMETHODCALLTYPE CKsProxy::GetSyncSource( IReferenceClock **pClock) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::GetSyncSource\n"); +#endif if (!pClock) return E_POINTER; @@ -2787,7 +2986,10 @@ STDMETHODCALLTYPE CKsProxy::EnumPins( IEnumPins **ppEnum) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::EnumPins\n"); +#endif + return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum); } @@ -2798,7 +3000,9 @@ CKsProxy::FindPin( { ULONG PinId; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::FindPin\n"); +#endif if (!ppPin) return E_POINTER; @@ -2834,7 +3038,9 @@ CKsProxy::QueryFilterInfo( if (!pInfo) return E_POINTER; +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n"); +#endif pInfo->achName[0] = L'\0'; pInfo->pGraph = m_pGraph; @@ -2851,7 +3057,11 @@ CKsProxy::JoinFilterGraph( 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) { @@ -2873,7 +3083,9 @@ STDMETHODCALLTYPE CKsProxy::QueryVendorInfo( LPWSTR *pVendorInfo) { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n"); +#endif return StringFromCLSID(CLSID_Proxy, pVendorInfo); } @@ -2885,7 +3097,10 @@ HRESULT STDMETHODCALLTYPE CKsProxy::Register() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n"); +#endif + return E_NOTIMPL; } @@ -2893,7 +3108,9 @@ HRESULT STDMETHODCALLTYPE CKsProxy::Unregister() { +#ifdef KSPROXY_TRACE OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n"); +#endif return E_NOTIMPL; } @@ -2904,11 +3121,13 @@ CKsProxy_Constructor( 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(); diff --git a/reactos/dll/directx/ksproxy/qualityforward.cpp b/reactos/dll/directx/ksproxy/qualityforward.cpp index 88459d8275d..df693b20e3a 100644 --- a/reactos/dll/directx/ksproxy/qualityforward.cpp +++ b/reactos/dll/directx/ksproxy/qualityforward.cpp @@ -88,7 +88,9 @@ STDMETHODCALLTYPE CKsQualityForwarder::KsFlushClient( IN IKsPin *Pin) { +#ifdef KSPROXY_TRACE OutputDebugString("UNIMPLEMENTED\n"); +#endif } HRESULT @@ -101,14 +103,18 @@ CKsQualityForwarder_Constructor( 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; } diff --git a/reactos/dll/nls/idndl/idndl.def b/reactos/dll/nls/idndl/idndl.def deleted file mode 100644 index 921d731a72c..00000000000 --- a/reactos/dll/nls/idndl/idndl.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY "idndl.dll" - -EXPORTS - DownlevelGetLocaleScripts = DownlevelGetLocaleScripts@12 @1 - DownlevelGetStringScripts@20 = kernel32.GetStringScripts @2 - DownlevelVerifyScripts@20 = kernel32.VerifyScripts @3 diff --git a/reactos/dll/nls/idndl/idndl.rbuild b/reactos/dll/nls/idndl/idndl.rbuild index 1f144774487..e1303771eab 100644 --- a/reactos/dll/nls/idndl/idndl.rbuild +++ b/reactos/dll/nls/idndl/idndl.rbuild @@ -7,5 +7,5 @@ 0x600 idndl.cpp - + diff --git a/reactos/dll/nls/idndl/idndl.spec b/reactos/dll/nls/idndl/idndl.spec new file mode 100644 index 00000000000..acb2b50f799 --- /dev/null +++ b/reactos/dll/nls/idndl/idndl.spec @@ -0,0 +1,4 @@ + + 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 diff --git a/reactos/dll/win32/acledit/acledit.c b/reactos/dll/win32/acledit/acledit.c index 99e0e99b3bd..4b16cddb403 100644 --- a/reactos/dll/win32/acledit/acledit.c +++ b/reactos/dll/win32/acledit/acledit.c @@ -16,8 +16,7 @@ * 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 diff --git a/reactos/dll/win32/acledit/stubs.c b/reactos/dll/win32/acledit/stubs.c index b679c6036aa..45d23c78652 100644 --- a/reactos/dll/win32/acledit/stubs.c +++ b/reactos/dll/win32/acledit/stubs.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS Access Control List Editor * FILE: lib/acledit/stubs.c diff --git a/reactos/dll/win32/browseui/internettoolbar.cpp b/reactos/dll/win32/browseui/internettoolbar.cpp index f64fcf353ba..c4f6bd004af 100644 --- a/reactos/dll/win32/browseui/internettoolbar.cpp +++ b/reactos/dll/win32/browseui/internettoolbar.cpp @@ -416,8 +416,8 @@ HRESULT STDMETHODCALLTYPE CMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WP 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; } diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 26e1c40d656..76688a14e4e 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -292,7 +292,7 @@ CreateBitmap(INT Width, INT Height, UINT Planes, UINT BitsPixel, - PCVOID pUnsafeBits) + CONST VOID* pUnsafeBits) { /* FIXME some part should be done in user mode */ if (Width && Height) diff --git a/reactos/dll/win32/hid/precomp.h b/reactos/dll/win32/hid/precomp.h index 29e4dd61ba0..9ae79cae666 100644 --- a/reactos/dll/win32/hid/precomp.h +++ b/reactos/dll/win32/hid/precomp.h @@ -10,7 +10,6 @@ typedef VOID typedef VOID (WINAPI *PINTERFACE_DEREFERENCE)( PVOID Context); -#define DDKAPI __stdcall // FIXME #include #include #include diff --git a/reactos/dll/win32/kernel32/thread/fiber.c b/reactos/dll/win32/kernel32/thread/fiber.c index e7e3c068038..0af13df19fe 100644 --- a/reactos/dll/win32/kernel32/thread/fiber.c +++ b/reactos/dll/win32/kernel32/thread/fiber.c @@ -47,7 +47,7 @@ ConvertFiberToThread(VOID) pTeb->HasFiberData = FALSE; /* free the fiber */ - if (pTeb->NtTib.FiberData != NULL) + if(pTeb->NtTib.FiberData != NULL) { RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData); } diff --git a/reactos/dll/win32/setupapi/setupapi.rbuild b/reactos/dll/win32/setupapi/setupapi.rbuild index bb3e0e37c56..6f2d0c2c627 100644 --- a/reactos/dll/win32/setupapi/setupapi.rbuild +++ b/reactos/dll/win32/setupapi/setupapi.rbuild @@ -10,6 +10,7 @@ _wcsnicmp + pnp_client uuid wine diff --git a/reactos/dll/win32/setupapi/setupapi_private.h b/reactos/dll/win32/setupapi/setupapi_private.h index 50c2d4250cb..a3ff489b9c3 100644 --- a/reactos/dll/win32/setupapi/setupapi_private.h +++ b/reactos/dll/win32/setupapi/setupapi_private.h @@ -45,11 +45,6 @@ #include -/* This hack definition is necessary as long as setupapi - depends on Wine "compatibility" headers */ -typedef ULONG RESOURCEID; -typedef RESOURCEID *PRESOURCEID; - #include #include "rpc_private.h" #include "resource.h" @@ -61,6 +56,8 @@ typedef RESOURCEID *PRESOURCEID; #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; diff --git a/reactos/drivers/battery/battc/battc.c b/reactos/drivers/battery/battc/battc.c index 6a0b7220c1c..7e4854c9ef2 100644 --- a/reactos/drivers/battery/battc/battc.c +++ b/reactos/drivers/battery/battc/battc.c @@ -23,7 +23,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassUnload(PVOID ClassData) { PBATTERY_CLASS_DATA BattClass = ClassData; @@ -44,7 +44,7 @@ BatteryClassUnload(PVOID ClassData) BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassSystemControl(PVOID ClassData, PVOID WmiLibContext, PDEVICE_OBJECT DeviceObject, @@ -58,7 +58,7 @@ BatteryClassSystemControl(PVOID ClassData, BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassQueryWmiDataBlock(PVOID ClassData, PDEVICE_OBJECT DeviceObject, PIRP Irp, @@ -74,7 +74,7 @@ BatteryClassQueryWmiDataBlock(PVOID ClassData, BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassStatusNotify(PVOID ClassData) { PBATTERY_CLASS_DATA BattClass = ClassData; @@ -129,7 +129,7 @@ BatteryClassStatusNotify(PVOID ClassData) BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo, PVOID *ClassData) { @@ -172,7 +172,7 @@ BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo, BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassIoctl(PVOID ClassData, PIRP Irp) { diff --git a/reactos/drivers/bus/acpi/acpi.rbuild b/reactos/drivers/bus/acpi/acpi.rbuild index 4b9ec8674a5..c3e5b7dac90 100644 --- a/reactos/drivers/bus/acpi/acpi.rbuild +++ b/reactos/drivers/bus/acpi/acpi.rbuild @@ -7,6 +7,9 @@ + + + @@ -26,6 +29,7 @@ osl.c acpienum.c + eval.c interface.c pnp.c power.c diff --git a/reactos/drivers/bus/acpi/busmgr/bus.c b/reactos/drivers/bus/acpi/busmgr/bus.c index 34aa0766c04..ae04c2cb31b 100644 --- a/reactos/drivers/bus/acpi/busmgr/bus.c +++ b/reactos/drivers/bus/acpi/busmgr/bus.c @@ -58,6 +58,7 @@ KSPIN_LOCK acpi_bus_event_lock; LIST_HEAD(acpi_bus_event_list); //DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue); KEVENT AcpiEventQueue; +KDPC event_dpc; static int @@ -455,6 +456,21 @@ acpi_bus_get_perf_flags ( 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 ( @@ -463,10 +479,8 @@ 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); @@ -484,14 +498,8 @@ acpi_bus_generate_event ( 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); } @@ -506,7 +514,7 @@ acpi_bus_receive_event ( //DECLARE_WAITQUEUE(wait, current); - DPRINT1("acpi_bus_receive_event"); + DPRINT("acpi_bus_receive_event"); if (!event) return AE_BAD_PARAMETER; @@ -1153,9 +1161,11 @@ acpi_bus_add ( 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; @@ -1262,9 +1272,15 @@ acpi_bus_add ( 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; } @@ -1326,7 +1342,9 @@ acpi_bus_add ( */ 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, @@ -1530,16 +1548,40 @@ acpi_bus_scan_fixed ( 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); } @@ -1549,120 +1591,6 @@ acpi_bus_scan_fixed ( 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) { @@ -1671,6 +1599,8 @@ 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"); @@ -1701,13 +1631,6 @@ acpi_bus_init (void) /* 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. */ @@ -1726,6 +1649,7 @@ acpi_bus_init (void) if (result) goto error2; + /* * Enumerate devices in the ACPI namespace. */ @@ -1736,7 +1660,6 @@ acpi_bus_init (void) if (result) DPRINT1("acpi_bus_scan failed\n"); - //acpi_motherboard_init(); return_VALUE(0); /* Mimic structured exception handling */ diff --git a/reactos/drivers/bus/acpi/busmgr/button.c b/reactos/drivers/bus/acpi/busmgr/button.c index 5e3eb2b5f0f..9344a5f1f7d 100644 --- a/reactos/drivers/bus/acpi/busmgr/button.c +++ b/reactos/drivers/bus/acpi/busmgr/button.c @@ -57,6 +57,11 @@ struct acpi_button { UINT8 type; unsigned long pushed; }; + +struct acpi_device *power_button; +struct acpi_device *sleep_button; +struct acpi_device *lid_button; + /* -------------------------------------------------------------------------- Driver Interface -------------------------------------------------------------------------- */ @@ -113,10 +118,6 @@ acpi_button_add ( 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) diff --git a/reactos/drivers/bus/acpi/buspdo.c b/reactos/drivers/bus/acpi/buspdo.c index ed6439d60a5..84bd1d8fe11 100644 --- a/reactos/drivers/bus/acpi/buspdo.c +++ b/reactos/drivers/bus/acpi/buspdo.c @@ -8,6 +8,9 @@ #include #include +#include +#include + #define NDEBUG #include @@ -33,9 +36,13 @@ Bus_PDO_PnP ( { 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 @@ -45,7 +52,6 @@ Bus_PDO_PnP ( 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. @@ -59,6 +65,43 @@ Bus_PDO_PnP ( 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; @@ -68,6 +111,9 @@ Bus_PDO_PnP ( 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. @@ -331,20 +377,17 @@ Bus_PDO_QueryDeviceCaps( deviceCapabilities->UniqueID = device->flags.unique_id; deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui; deviceCapabilities->Address = device->pnp.bus_address; - deviceCapabilities->RawDeviceOK = FALSE; } - else - { - 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; + 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)))) + { + /* 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; diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild index 51c46dbe2bb..34c85adccf1 100644 --- a/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild +++ b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild @@ -11,4 +11,5 @@ cmbpnp.c cmbwmi.c cmbatt.rc + cmbatt.h diff --git a/reactos/drivers/bus/acpi/cmbatt/cmexec.c b/reactos/drivers/bus/acpi/cmbatt/cmexec.c index 7fb4ea591bf..543a8a70293 100644 --- a/reactos/drivers/bus/acpi/cmbatt/cmexec.c +++ b/reactos/drivers/bus/acpi/cmbatt/cmexec.c @@ -78,60 +78,6 @@ GetStringElement(IN PACPI_METHOD_ARGUMENT Argument, return Status; } -NTSTATUS -NTAPI -CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, - PULONG PsrData) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, - PACPI_BIF_DATA BifData) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, - PACPI_BST_DATA BstData) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -CmBattGetStaData(PDEVICE_OBJECT DeviceObject, - PULONG StaData) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject, - PULONG UniqueId) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension, - ULONG AlarmValue) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - NTSTATUS NTAPI CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject, @@ -166,8 +112,253 @@ CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject, 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 +CmBattGetPsrData(IN PDEVICE_OBJECT DeviceObject, + OUT PULONG PsrData) +{ + 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 +CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject, + OUT PULONG StaData) +{ + 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 +CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject, + OUT PULONG UniqueId) +{ + 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 +CmBattSetTripPpoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, + IN ULONG AlarmValue) +{ + 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 +CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BIF_DATA BifData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BST_DATA BstData) +{ + 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()); diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.c b/reactos/drivers/bus/acpi/compbatt/compbatt.c new file mode 100644 index 00000000000..03d587c46ad --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/compbatt.c @@ -0,0 +1,168 @@ +/* + * 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 */ diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.h b/reactos/drivers/bus/acpi/compbatt/compbatt.h new file mode 100644 index 00000000000..701f1362641 --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/compbatt.h @@ -0,0 +1,57 @@ +/* + * 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 +#include +#include +#include + +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 */ diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.rbuild b/reactos/drivers/bus/acpi/compbatt/compbatt.rbuild new file mode 100644 index 00000000000..6a92873c0e1 --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/compbatt.rbuild @@ -0,0 +1,13 @@ + + + + ntoskrnl + hal + battc + . + compbatt.c + compmisc.c + comppnp.c + compbatt.rc + compbatt.h + diff --git a/reactos/drivers/bus/acpi/compbatt/compbatt.rc b/reactos/drivers/bus/acpi/compbatt/compbatt.rc new file mode 100644 index 00000000000..a7ec82048fc --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/compbatt.rc @@ -0,0 +1,5 @@ +#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 diff --git a/reactos/drivers/bus/acpi/compbatt/compmisc.c b/reactos/drivers/bus/acpi/compbatt/compmisc.c new file mode 100644 index 00000000000..3f75d4b9abf --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/compmisc.c @@ -0,0 +1,40 @@ +/* + * 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 */ diff --git a/reactos/drivers/bus/acpi/compbatt/comppnp.c b/reactos/drivers/bus/acpi/compbatt/comppnp.c new file mode 100644 index 00000000000..a767c18ab80 --- /dev/null +++ b/reactos/drivers/bus/acpi/compbatt/comppnp.c @@ -0,0 +1,95 @@ +/* + * 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 */ diff --git a/reactos/drivers/bus/acpi/eval.c b/reactos/drivers/bus/acpi/eval.c new file mode 100644 index 00000000000..68af8573f42 --- /dev/null +++ b/reactos/drivers/bus/acpi/eval.c @@ -0,0 +1,180 @@ +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#define NDEBUG +#include + +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; + } +} diff --git a/reactos/drivers/bus/acpi/include/acpi_bus.h b/reactos/drivers/bus/acpi/include/acpi_bus.h index d5fe9efccc6..d2dc22d02a9 100644 --- a/reactos/drivers/bus/acpi/include/acpi_bus.h +++ b/reactos/drivers/bus/acpi/include/acpi_bus.h @@ -73,6 +73,8 @@ enum acpi_bus_device_type { 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 }; diff --git a/reactos/drivers/bus/acpi/include/acpisys.h b/reactos/drivers/bus/acpi/include/acpisys.h index 368ac97c83f..adf2a0c592a 100644 --- a/reactos/drivers/bus/acpi/include/acpisys.h +++ b/reactos/drivers/bus/acpi/include/acpisys.h @@ -39,6 +39,7 @@ typedef struct _PDO_DEVICE_DATA // 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; @@ -64,10 +65,6 @@ typedef struct _FDO_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) \ @@ -90,6 +87,11 @@ NTSTATUS ACPIEnumerateDevices( PFDO_DEVICE_DATA DeviceExtension); +NTSTATUS +NTAPI +Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData, + PIRP Irp); + NTSTATUS NTAPI Bus_CreateClose ( diff --git a/reactos/drivers/bus/acpi/main.c b/reactos/drivers/bus/acpi/main.c index 3d1170eefd6..bc1d78da7c5 100644 --- a/reactos/drivers/bus/acpi/main.c +++ b/reactos/drivers/bus/acpi/main.c @@ -6,6 +6,9 @@ #include #include +#include +#include + #define NDEBUG #include @@ -15,7 +18,8 @@ #endif - +extern struct acpi_device *sleep_button; +extern struct acpi_device *power_button; NTSTATUS NTAPI @@ -29,7 +33,9 @@ Bus_AddDevice( PDEVICE_OBJECT deviceObject = NULL; PFDO_DEVICE_DATA deviceData = NULL; PWCHAR deviceName = NULL; +#ifndef NDEBUG ULONG nameLength; +#endif PAGED_CODE (); @@ -162,38 +168,161 @@ End: } +NTSTATUS +NTAPI +ACPIDispatchCreateClose( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return STATUS_SUCCESS; +} + +VOID +NTAPI +ButtonWaitThread(PVOID Context) +{ + PIRP Irp = Context; + int result; + struct acpi_bus_event event; + ULONG ButtonEvent; + + while (ACPI_SUCCESS(result = acpi_bus_receive_event(&event)) && + event.type != ACPI_BUTTON_NOTIFY_STATUS); + + 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); +} + + NTSTATUS NTAPI ACPIDispatchDeviceControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { - PIO_STACK_LOCATION IrpSp; - NTSTATUS Status; + PIO_STACK_LOCATION irpStack; + NTSTATUS status = STATUS_NOT_SUPPORTED; + PCOMMON_DEVICE_DATA commonData; + ULONG Caps = 0; + HANDLE ThreadHandle; - DPRINT("Called. IRP is at (0x%X)\n", Irp); + PAGED_CODE (); + + irpStack = IoGetCurrentIrpStackLocation (Irp); + ASSERT (IRP_MJ_DEVICE_CONTROL == irpStack->MajorFunction); + + commonData = (PCOMMON_DEVICE_DATA) DeviceObject->DeviceExtension; Irp->IoStatus.Information = 0; - IrpSp = IoGetCurrentIrpStackLocation(Irp); - switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) { - default: - DPRINT("Unknown IOCTL 0x%X\n", IrpSp->Parameters.DeviceIoControl.IoControlCode); - Status = STATUS_NOT_IMPLEMENTED; - break; - } + if (!commonData->IsFDO) + { + switch (irpStack->Parameters.DeviceIoControl.IoControlCode) + { + case IOCTL_ACPI_EVAL_METHOD: + status = Bus_PDO_EvalMethod((PPDO_DEVICE_DATA)commonData, + Irp); + break; - if (Status != STATUS_PENDING) { - Irp->IoStatus.Status = Status; + case IOCTL_GET_SYS_BUTTON_CAPS: + if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG)) + { + status = STATUS_BUFFER_TOO_SMALL; + break; + } - DPRINT("Completing IRP at 0x%X\n", Irp); + 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; + } - IoCompleteRequest(Irp, IO_NO_INCREMENT); - } + if (Caps != 0) + { + RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &Caps, sizeof(Caps)); + Irp->IoStatus.Information = sizeof(Caps); + status = STATUS_SUCCESS; + } + break; - DPRINT("Leaving. Status 0x%X\n", Status); + case IOCTL_GET_SYS_BUTTON_EVENT: + PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, ButtonWaitThread, Irp); + ZwClose(ThreadHandle); - return Status; + 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"); + + if (status != STATUS_PENDING) + { + Irp->IoStatus.Status = status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } + else + IoMarkIrpPending(Irp); + + return status; } NTSTATUS @@ -211,6 +340,8 @@ DriverEntry ( 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; diff --git a/reactos/drivers/bus/acpi/osl.c b/reactos/drivers/bus/acpi/osl.c index f2549951e7e..a5df0c0d620 100644 --- a/reactos/drivers/bus/acpi/osl.c +++ b/reactos/drivers/bus/acpi/osl.c @@ -576,7 +576,12 @@ AcpiOsWaitSemaphore( 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; } @@ -590,7 +595,12 @@ AcpiOsSignalSemaphore ( 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; } diff --git a/reactos/drivers/directx/dxapi/dxapi_driver.h b/reactos/drivers/directx/dxapi/dxapi_driver.h index 322d6d1d67f..996353c7f2d 100644 --- a/reactos/drivers/directx/dxapi/dxapi_driver.h +++ b/reactos/drivers/directx/dxapi/dxapi_driver.h @@ -1,10 +1,10 @@ /* DDK/NDK/SDK Headers */ -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include @@ -16,7 +16,7 @@ #include -#include +#include /* Prototypes */ VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer); diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h index b457e6d5c3d..ccb2204a781 100644 --- a/reactos/drivers/directx/dxg/dxg_int.h +++ b/reactos/drivers/directx/dxg/dxg_int.h @@ -1,9 +1,9 @@ /* DDK/NDK/SDK Headers */ -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include /* Win32 Headers */ #define WINBASEAPI diff --git a/reactos/drivers/filesystems/ext2/inc/ext2fsd.h b/reactos/drivers/filesystems/ext2/inc/ext2fsd.h index bf2b784fb86..dcf35d996ef 100644 --- a/reactos/drivers/filesystems/ext2/inc/ext2fsd.h +++ b/reactos/drivers/filesystems/ext2/inc/ext2fsd.h @@ -42,8 +42,11 @@ typedef unsigned char BYTE; /* REACTOS FIXME */ #undef DeleteFile /* This is deprecated and should be changed in the EXT2FS driver. */ + +/* FIXME : Those two definitions already exist in wdm.h #define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart #define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart +*/ // the following include files should be in the inc sub-dir associated with this driver diff --git a/reactos/drivers/serial/serial/serial.h b/reactos/drivers/serial/serial/serial.h index de94b291138..b6ed661226c 100644 --- a/reactos/drivers/serial/serial/serial.h +++ b/reactos/drivers/serial/serial/serial.h @@ -17,15 +17,6 @@ #define PST_RS232 1 #define COMMPROP_INITIALIZED 0xE73CF52E -#ifndef _NTIFS_ -/* Why is it only defined in ntifs.h file? */ -NTSTATUS NTAPI -IoAttachDeviceToDeviceStackSafe( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice, - OUT PDEVICE_OBJECT *AttachedToDeviceObject); -#endif - typedef enum { dsStopped, diff --git a/reactos/drivers/storage/ide/uniata/atapi.h b/reactos/drivers/storage/ide/uniata/atapi.h index 9974b51406e..2648d4b0b55 100644 --- a/reactos/drivers/storage/ide/uniata/atapi.h +++ b/reactos/drivers/storage/ide/uniata/atapi.h @@ -77,7 +77,7 @@ extern "C" { SCSIPORT_API VOID -DDKCDECLAPI +__cdecl ScsiDebugPrint( ULONG DebugPrintLevel, PCCHAR DebugMessage, @@ -1066,7 +1066,7 @@ IdeMediaStatus( IN UCHAR Channel ); -ULONG DDKAPI +ULONG NTAPI AtapiFindController( IN PVOID HwDeviceExtension, IN PVOID Context, diff --git a/reactos/drivers/storage/ide/uniata/bsmaster.h b/reactos/drivers/storage/ide/uniata/bsmaster.h index 650abf1f2b9..c0bcc22a6c5 100644 --- a/reactos/drivers/storage/ide/uniata/bsmaster.h +++ b/reactos/drivers/storage/ide/uniata/bsmaster.h @@ -1015,7 +1015,7 @@ UniataEnumBusMasterController( PVOID Argument2 ); -extern ULONG DDKAPI +extern ULONG NTAPI UniataFindCompatBusMasterController1( IN PVOID HwDeviceExtension, IN PVOID Context, @@ -1025,7 +1025,7 @@ UniataFindCompatBusMasterController1( OUT PBOOLEAN Again ); -extern ULONG DDKAPI +extern ULONG NTAPI UniataFindCompatBusMasterController2( IN PVOID HwDeviceExtension, IN PVOID Context, @@ -1044,7 +1044,7 @@ UniataAllocateLunExt( ULONG NewNumberChannels ); -extern ULONG DDKAPI +extern ULONG NTAPI UniataFindBusMasterController( IN PVOID HwDeviceExtension, IN PVOID Context, @@ -1054,7 +1054,7 @@ UniataFindBusMasterController( OUT PBOOLEAN Again ); -extern ULONG DDKAPI +extern ULONG NTAPI UniataFindFakeBusMasterController( IN PVOID HwDeviceExtension, IN PVOID Context, diff --git a/reactos/drivers/storage/ide/uniata/config.h b/reactos/drivers/storage/ide/uniata/config.h index e17416f1367..c0b9f4f88ad 100644 --- a/reactos/drivers/storage/ide/uniata/config.h +++ b/reactos/drivers/storage/ide/uniata/config.h @@ -86,9 +86,7 @@ /* Compiler dependencies */ /***************************************************/ -#define DDKAPI __stdcall #define DDKFASTAPI __fastcall -#define DDKCDECLAPI __cdecl /* Are we under GNU C (mingw) ??? */ #ifdef __GNUC__ diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index b279b34c72a..480b6b4de37 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -94,7 +94,7 @@ BOOLEAN WinVer_WDM_Model = FALSE; UCHAR g_foo = 0; BOOLEAN -DDKAPI +NTAPI AtapiResetController__( IN PVOID HwDeviceExtension, IN ULONG PathId, @@ -115,7 +115,7 @@ AtapiHwInitialize__( #ifndef UNIATA_CORE VOID -DDKAPI +NTAPI AtapiCallBack_X( IN PVOID HwDeviceExtension ); @@ -129,13 +129,13 @@ AtapiCallBack_X( #endif RETTYPE_XXableInterrupts -DDKAPI +NTAPI AtapiInterruptDpc( IN PVOID HwDeviceExtension ); RETTYPE_XXableInterrupts -DDKAPI +NTAPI AtapiEnableInterrupts__( IN PVOID HwDeviceExtension ); @@ -150,7 +150,7 @@ AtapiQueueTimerDpc( ); SCSI_ADAPTER_CONTROL_STATUS -DDKAPI +NTAPI AtapiAdapterControl( IN PVOID HwDeviceExtension, IN SCSI_ADAPTER_CONTROL_TYPE ControlType, @@ -1005,7 +1005,7 @@ AtaUmode(PIDENTIFY_DATA2 ident) #ifndef UNIATA_CORE VOID -DDKAPI +NTAPI AtapiTimerDpc( IN PVOID HwDeviceExtension ) @@ -1856,7 +1856,7 @@ Return Value: --*/ BOOLEAN -DDKAPI +NTAPI AtapiResetController( IN PVOID HwDeviceExtension, IN ULONG PathId @@ -2598,7 +2598,7 @@ Return Value: --*/ BOOLEAN -DDKAPI +NTAPI AtapiHwInitialize( IN PVOID HwDeviceExtension ) @@ -3210,7 +3210,7 @@ Return Value: --*/ BOOLEAN -DDKAPI +NTAPI AtapiInterrupt( IN PVOID HwDeviceExtension ) @@ -3400,7 +3400,7 @@ AtapiInterrupt2( } // end AtapiInterrupt2() RETTYPE_XXableInterrupts -DDKAPI +NTAPI AtapiInterruptDpc( IN PVOID HwDeviceExtension ) @@ -3437,7 +3437,7 @@ AtapiInterruptDpc( RETTYPE_XXableInterrupts -DDKAPI +NTAPI AtapiEnableInterrupts__( IN PVOID HwDeviceExtension ) @@ -7251,7 +7251,7 @@ Return Value: --*/ BOOLEAN -DDKAPI +NTAPI AtapiStartIo( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb @@ -8343,7 +8343,7 @@ Return Value: --*/ extern "C" ULONG -DDKAPI +NTAPI DriverEntry( IN PVOID DriverObject, IN PVOID Argument2 @@ -9059,7 +9059,7 @@ AtapiRegCheckParameterValue( SCSI_ADAPTER_CONTROL_STATUS -DDKAPI +NTAPI AtapiAdapterControl( IN PVOID HwDeviceExtension, IN SCSI_ADAPTER_CONTROL_TYPE ControlType, @@ -9152,7 +9152,7 @@ AtapiAdapterControl( extern "C" NTHALAPI VOID -DDKAPI +NTAPI HalDisplayString ( PUCHAR String ); diff --git a/reactos/drivers/storage/ide/uniata/srb.h b/reactos/drivers/storage/ide/uniata/srb.h index aa4f7f1ce5f..b3795b22808 100644 --- a/reactos/drivers/storage/ide/uniata/srb.h +++ b/reactos/drivers/storage/ide/uniata/srb.h @@ -424,38 +424,38 @@ typedef struct _SCSI_WMI_REQUEST_BLOCK { 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, @@ -466,14 +466,14 @@ ULONG 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 @@ -481,7 +481,7 @@ BOOLEAN 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 @@ -607,7 +607,7 @@ typedef struct _HW_INITIALIZATION_DATA_COMMON { // SCSIPORT_API -ULONG DDKAPI +ULONG NTAPI ScsiPortInitialize( IN PVOID Argument1, IN PVOID Argument2, @@ -616,14 +616,14 @@ ScsiPortInitialize( ); 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, @@ -634,7 +634,7 @@ ScsiPortGetBusData( ); SCSIPORT_API -ULONG DDKAPI +ULONG NTAPI ScsiPortSetBusDataByOffset( IN PVOID DeviceExtension, IN ULONG BusDataType, @@ -646,7 +646,7 @@ ScsiPortSetBusDataByOffset( ); SCSIPORT_API -PVOID DDKAPI +PVOID NTAPI ScsiPortGetDeviceBase( IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -657,7 +657,7 @@ ScsiPortGetDeviceBase( ); SCSIPORT_API -PVOID DDKAPI +PVOID NTAPI ScsiPortGetLogicalUnit( IN PVOID HwDeviceExtension, IN UCHAR PathId, @@ -666,7 +666,7 @@ ScsiPortGetLogicalUnit( ); SCSIPORT_API -PSCSI_REQUEST_BLOCK DDKAPI +PSCSI_REQUEST_BLOCK NTAPI ScsiPortGetSrb( IN PVOID DeviceExtension, IN UCHAR PathId, @@ -676,7 +676,7 @@ ScsiPortGetSrb( ); SCSIPORT_API -SCSI_PHYSICAL_ADDRESS DDKAPI +SCSI_PHYSICAL_ADDRESS NTAPI ScsiPortGetPhysicalAddress( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, @@ -685,14 +685,14 @@ ScsiPortGetPhysicalAddress( ); 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, @@ -700,13 +700,13 @@ ScsiPortGetUncachedExtension( ); 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, @@ -715,7 +715,7 @@ ScsiPortIoMapTransfer( ); SCSIPORT_API -VOID DDKCDECLAPI +VOID __cdecl ScsiPortNotification( IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, @@ -723,7 +723,7 @@ ScsiPortNotification( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortLogError( IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, @@ -735,7 +735,7 @@ ScsiPortLogError( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortCompleteRequest( IN PVOID HwDeviceExtension, IN UCHAR PathId, @@ -745,7 +745,7 @@ ScsiPortCompleteRequest( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortMoveMemory( IN PVOID WriteBuffer, IN PVOID ReadBuffer, @@ -753,25 +753,25 @@ ScsiPortMoveMemory( ); 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, @@ -779,7 +779,7 @@ ScsiPortReadPortBufferUchar( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortReadPortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, @@ -787,7 +787,7 @@ ScsiPortReadPortBufferUshort( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortReadPortBufferUlong( IN PULONG Port, IN PULONG Buffer, @@ -795,25 +795,25 @@ ScsiPortReadPortBufferUlong( ); 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, @@ -821,7 +821,7 @@ ScsiPortReadRegisterBufferUchar( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortReadRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, @@ -829,7 +829,7 @@ ScsiPortReadRegisterBufferUshort( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortReadRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, @@ -837,34 +837,34 @@ ScsiPortReadRegisterBufferUlong( ); 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, @@ -872,7 +872,7 @@ ScsiPortWritePortBufferUchar( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortWritePortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, @@ -880,7 +880,7 @@ ScsiPortWritePortBufferUshort( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortWritePortBufferUlong( IN PULONG Port, IN PULONG Buffer, @@ -888,28 +888,28 @@ ScsiPortWritePortBufferUlong( ); 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, @@ -917,7 +917,7 @@ ScsiPortWriteRegisterBufferUchar( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortWriteRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, @@ -925,7 +925,7 @@ ScsiPortWriteRegisterBufferUshort( ); SCSIPORT_API -VOID DDKAPI +VOID NTAPI ScsiPortWriteRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, @@ -933,13 +933,13 @@ ScsiPortWriteRegisterBufferUlong( ); SCSIPORT_API -SCSI_PHYSICAL_ADDRESS DDKAPI +SCSI_PHYSICAL_ADDRESS NTAPI ScsiPortConvertUlongToPhysicalAddress( ULONG UlongAddress ); SCSIPORT_API -ULONG DDKAPI +ULONG NTAPI ScsiPortConvertPhysicalAddressToUlong( SCSI_PHYSICAL_ADDRESS Address ); @@ -947,7 +947,7 @@ ScsiPortConvertPhysicalAddressToUlong( #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart) SCSIPORT_API -BOOLEAN DDKAPI +BOOLEAN NTAPI ScsiPortValidateRange( IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -960,7 +960,7 @@ ScsiPortValidateRange( // begin_ntminitape SCSIPORT_API -VOID DDKCDECLAPI +VOID __cdecl ScsiDebugPrint( ULONG DebugPrintLevel, PCCHAR DebugMessage, diff --git a/reactos/drivers/video/displays/vga/vgaddi.h b/reactos/drivers/video/displays/vga/vgaddi.h index 97282f882dc..980965da696 100644 --- a/reactos/drivers/video/displays/vga/vgaddi.h +++ b/reactos/drivers/video/displays/vga/vgaddi.h @@ -26,7 +26,6 @@ #define DDKFASTAPI __fastcall #define FASTCALL __fastcall -#define DDKCDECLAPI __cdecl ULONG DbgPrint(PCCH Format,...); diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 5fcdc0a4621..7711a2cfe8a 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -9,9 +9,9 @@ - - - + + + diff --git a/reactos/hal/halx86/generic/i386/systimer.S b/reactos/hal/halx86/generic/i386/systimer.S index 16c1bc1f5da..945b5081a89 100644 --- a/reactos/hal/halx86/generic/i386/systimer.S +++ b/reactos/hal/halx86/generic/i386/systimer.S @@ -8,15 +8,17 @@ /* INCLUDES ******************************************************************/ #include -#include .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" @@ -327,6 +329,7 @@ AndItsNotYou: ret .endfunc +#ifndef _MINIHAL_ .globl _KeStallExecutionProcessor@4 .func KeStallExecutionProcessor@4 _KeStallExecutionProcessor@4: @@ -357,6 +360,7 @@ Done: /* Return */ ret 4 .endfunc +#endif .global _KeQueryPerformanceCounter@4 .func KeQueryPerformanceCounter@4 @@ -517,72 +521,3 @@ InvalidCount: 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 diff --git a/reactos/hal/halx86/generic/trap.S b/reactos/hal/halx86/generic/i386/trap.S similarity index 100% rename from reactos/hal/halx86/generic/trap.S rename to reactos/hal/halx86/generic/i386/trap.S diff --git a/reactos/hal/halx86/generic/i386/v86.s b/reactos/hal/halx86/generic/i386/v86.s deleted file mode 100644 index 55d5f0a93ea..00000000000 --- a/reactos/hal/halx86/generic/i386/v86.s +++ /dev/null @@ -1,435 +0,0 @@ -/* - * 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 -#include -.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 diff --git a/reactos/hal/halx86/generic/misc.c b/reactos/hal/halx86/generic/misc.c index 60684bfc27b..22c8efb70c5 100644 --- a/reactos/hal/halx86/generic/misc.c +++ b/reactos/hal/halx86/generic/misc.c @@ -267,3 +267,59 @@ KeFlushWriteBuffer(VOID) 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 + diff --git a/reactos/hal/halx86/generic/spinlock.c b/reactos/hal/halx86/generic/spinlock.c index 6febfdafcd0..1aab8d5a314 100644 --- a/reactos/hal/halx86/generic/spinlock.c +++ b/reactos/hal/halx86/generic/spinlock.c @@ -4,13 +4,11 @@ * 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 #define NDEBUG @@ -30,18 +28,6 @@ KSPIN_LOCK HalpSystemHardwareLock; #ifdef _M_IX86 -/* - * @implemented - */ -VOID -NTAPI -KeAcquireSpinLock(PKSPIN_LOCK SpinLock, - PKIRQL OldIrql) -{ - /* Call the fastcall function */ - *OldIrql = KfAcquireSpinLock(SpinLock); -} - /* * @implemented */ @@ -59,18 +45,6 @@ KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) return OldIrql; } -/* - * @implemented - */ -VOID -NTAPI -KeReleaseSpinLock(PKSPIN_LOCK SpinLock, - KIRQL NewIrql) -{ - /* Call the fastcall function */ - KfReleaseSpinLock(SpinLock, NewIrql); -} - /* * @implemented */ @@ -238,31 +212,6 @@ KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, 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 diff --git a/reactos/hal/halx86/hal_generic.rbuild b/reactos/hal/halx86/hal_generic.rbuild index 971ffc83896..c79ea36785b 100644 --- a/reactos/hal/halx86/hal_generic.rbuild +++ b/reactos/hal/halx86/hal_generic.rbuild @@ -17,20 +17,26 @@ beep.c cmos.c + display.c dma.c drive.c - display.c + halinit.c + misc.c profil.c reboot.c sysinfo.c timer.c + usage.c + + + portio.c + systimer.S bios.c halinit.c misc.c pic.c - trap.S - usage.c + trap.S portio.c systimer.S @@ -57,6 +63,7 @@ hal.h + include include @@ -78,6 +85,7 @@ dma.c display.c drive.c + misc.c profil.c reboot.c spinlock.c @@ -85,15 +93,9 @@ timer.c usage.c - bios.c - misc.c - pic.c - trap.S - usage.c portio.c systimer.S - v86.s @@ -109,6 +111,8 @@ halinit_up.c + pic.c + processor.c diff --git a/reactos/hal/halx86/hal_generic_up.rbuild b/reactos/hal/halx86/hal_generic_up.rbuild index 6338b1dd720..80365f9b46f 100644 --- a/reactos/hal/halx86/hal_generic_up.rbuild +++ b/reactos/hal/halx86/hal_generic_up.rbuild @@ -9,6 +9,10 @@ spinlock.c + + pic.c + processor.c + processor.c diff --git a/reactos/hal/halx86/halamd64.rbuild b/reactos/hal/halx86/halamd64.rbuild index 5deb29fb68e..4a09aa2c838 100644 --- a/reactos/hal/halx86/halamd64.rbuild +++ b/reactos/hal/halx86/halamd64.rbuild @@ -6,31 +6,22 @@ include include - . + hal_generic hal_generic_up ntoskrnl - x86emu - - - halinit_up.c - halup.rc - + + halinit_mp.c + halmp.rc - mps.S + - - - x86bios.c - - - diff --git a/reactos/hal/halx86/halmps.rbuild b/reactos/hal/halx86/halmps.rbuild index abdd17beadf..ad17eac9002 100644 --- a/reactos/hal/halx86/halmps.rbuild +++ b/reactos/hal/halx86/halmps.rbuild @@ -14,11 +14,13 @@ ntoskrnl libcntpr - mpsirql.c - - mps.S - mpsboot.asm - + + + mps.S + mpsboot.asm + mpsirql.c + + diff --git a/reactos/hal/halx86/include/halp.h b/reactos/hal/halx86/include/halp.h index 2d487c987ab..a74163e8b52 100644 --- a/reactos/hal/halx86/include/halp.h +++ b/reactos/hal/halx86/include/halp.h @@ -685,6 +685,15 @@ VOID 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 diff --git a/reactos/hal/halx86/mp/mpsirql.c b/reactos/hal/halx86/mp/i386/mpsirql.c similarity index 100% rename from reactos/hal/halx86/mp/mpsirql.c rename to reactos/hal/halx86/mp/i386/mpsirql.c index bb0ea216a71..643369a552e 100644 --- a/reactos/hal/halx86/mp/mpsirql.c +++ b/reactos/hal/halx86/mp/i386/mpsirql.c @@ -143,6 +143,7 @@ KfLowerIrql (KIRQL NewIrql) HalpLowerIrql (NewIrql, FALSE); } + /********************************************************************** * NAME EXPORTED * KfRaiseIrql @@ -191,7 +192,6 @@ KfRaiseIrql (KIRQL NewIrql) return OldIrql; } - /********************************************************************** * NAME EXPORTED * KeRaiseIrqlToDpcLevel diff --git a/reactos/hal/halx86/generic/pic.c b/reactos/hal/halx86/up/pic.c similarity index 100% rename from reactos/hal/halx86/generic/pic.c rename to reactos/hal/halx86/up/pic.c diff --git a/reactos/include/ddk/acpiioct.h b/reactos/include/ddk/acpiioct.h index a51cc3dd4b4..d4d550feae1 100644 --- a/reactos/include/ddk/acpiioct.h +++ b/reactos/include/ddk/acpiioct.h @@ -159,7 +159,7 @@ typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_B #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 ) \ diff --git a/reactos/include/ddk/atsmedia.h b/reactos/include/ddk/atsmedia.h deleted file mode 100644 index 744a4654870..00000000000 --- a/reactos/include/ddk/atsmedia.h +++ /dev/null @@ -1,17 +0,0 @@ - -/* $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 diff --git a/reactos/include/ddk/cfgmgr32.h b/reactos/include/ddk/cfgmgr32.h deleted file mode 100644 index 5ca47bd7448..00000000000 --- a/reactos/include/ddk/cfgmgr32.h +++ /dev/null @@ -1,2244 +0,0 @@ -/* - * cfgmgr32.h - * - * PnP configuration manager - * - * This file is part of the w32api package. - * - * Contributors: - * Created by Casper S. Hornstrup - * - * 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 - -#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 - -#ifdef __cplusplus -} -#endif - -#endif /* _CFGMGR32_H_ */ diff --git a/reactos/include/ddk/mce.h b/reactos/include/ddk/mce.h new file mode 100644 index 00000000000..e2d8407da10 --- /dev/null +++ b/reactos/include/ddk/mce.h @@ -0,0 +1,1074 @@ +#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_) */ diff --git a/reactos/include/ddk/ntstatus.h b/reactos/include/ddk/ntstatus.h deleted file mode 100644 index 688f996d3ff..00000000000 --- a/reactos/include/ddk/ntstatus.h +++ /dev/null @@ -1,1122 +0,0 @@ -/* - * ntstatus.h - * - * Windows NT status codes - * - * This file is part of the w32api package. - * - * Contributors: - * Created by Casper S. Hornstrup - * - * 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 diff --git a/reactos/include/ddk/xmldsodid.h b/reactos/include/ddk/xmldsodid.h deleted file mode 100644 index d80d1463f92..00000000000 --- a/reactos/include/ddk/xmldsodid.h +++ /dev/null @@ -1,10 +0,0 @@ - -#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 diff --git a/reactos/include/dxsdk/bdatif.idl b/reactos/include/dxsdk/bdatif.idl new file mode 100644 index 00000000000..6c8887eb7cf --- /dev/null +++ b/reactos/include/dxsdk/bdatif.idl @@ -0,0 +1,270 @@ +#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; + }; +}; + diff --git a/reactos/include/dxsdk/dxsdk.rbuild b/reactos/include/dxsdk/dxsdk.rbuild index 8183bd34b30..1d91680f471 100644 --- a/reactos/include/dxsdk/dxsdk.rbuild +++ b/reactos/include/dxsdk/dxsdk.rbuild @@ -3,6 +3,7 @@ amstream.idl austream.idl + bdatif.idl ddstream.idl dmodshow.idl mixerocx.idl diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index 3e04fabbd2b..ec4b2d33617 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -1,4 +1,3 @@ - #define PASTE2(x,y) x##y #define PASTE(x,y) PASTE2(x,y) diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 305f20e53ed..ad68e980a89 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -703,7 +703,7 @@ typedef struct _PROCESS_BASIC_INFORMATION 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 { diff --git a/reactos/include/psdk/atsmedia.h b/reactos/include/psdk/atsmedia.h new file mode 100644 index 00000000000..6f22e570d82 --- /dev/null +++ b/reactos/include/psdk/atsmedia.h @@ -0,0 +1,7 @@ +#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); diff --git a/reactos/include/psdk/batclass.h b/reactos/include/psdk/batclass.h index 457212519d0..24fc0892944 100644 --- a/reactos/include/psdk/batclass.h +++ b/reactos/include/psdk/batclass.h @@ -180,11 +180,11 @@ typedef struct _BATTERY_WAIT_STATUS { 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, @@ -194,25 +194,25 @@ typedef NTSTATUS 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); @@ -239,21 +239,21 @@ typedef struct _BATTERY_MINIPORT_INFO { 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, @@ -265,13 +265,13 @@ BatteryClassQueryWmiDataBlock( BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassStatusNotify( IN PVOID ClassData); BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassSystemControl( IN PVOID ClassData, IN PVOID WmiLibContext, /* PWMILIB_CONTEXT */ @@ -281,7 +281,7 @@ BatteryClassSystemControl( BCLASSAPI NTSTATUS -DDKAPI +NTAPI BatteryClassUnload( IN PVOID ClassData); diff --git a/reactos/include/ddk/cfg.h b/reactos/include/psdk/cfg.h similarity index 65% rename from reactos/include/ddk/cfg.h rename to reactos/include/psdk/cfg.h index d9a4802da42..3653dec0eeb 100644 --- a/reactos/include/ddk/cfg.h +++ b/reactos/include/psdk/cfg.h @@ -20,7 +20,8 @@ * */ -#ifndef _CFG_INCLUDED_ +#pragma once + #define _CFG_INCLUDED_ #ifdef __cplusplus @@ -77,7 +78,26 @@ extern "C" { #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 @@ -95,24 +115,24 @@ extern "C" { #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 @@ -128,11 +148,33 @@ extern "C" { #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, @@ -149,14 +191,7 @@ typedef enum _PNP_VETO_TYPE { 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_ */ diff --git a/reactos/include/psdk/cfgmgr32.h b/reactos/include/psdk/cfgmgr32.h new file mode 100644 index 00000000000..4623a65c11f --- /dev/null +++ b/reactos/include/psdk/cfgmgr32.h @@ -0,0 +1,3206 @@ +/* + * cfgmgr32.h + * + * PnP configuration manager + * + * This file is part of the w32api package. + * + * Contributors: + * Created by Casper S. Hornstrup + * + * 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 + +#ifndef GUID_DEFINED +#include +#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 + +/* 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 + +#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 diff --git a/reactos/include/psdk/devpropdef.h b/reactos/include/psdk/devpropdef.h new file mode 100644 index 00000000000..49e4c91974a --- /dev/null +++ b/reactos/include/psdk/devpropdef.h @@ -0,0 +1,84 @@ +#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 */ + diff --git a/reactos/include/psdk/evntprov.h b/reactos/include/psdk/evntprov.h new file mode 100644 index 00000000000..69cc7ce94cf --- /dev/null +++ b/reactos/include/psdk/evntprov.h @@ -0,0 +1,335 @@ +#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 + diff --git a/reactos/include/psdk/ntdef.h b/reactos/include/psdk/ntdef.h index e4c53682c55..fdc365085b2 100644 --- a/reactos/include/psdk/ntdef.h +++ b/reactos/include/psdk/ntdef.h @@ -173,11 +173,6 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!! #define NTAPI __stdcall -// -// Used by the DDK exclusively , don't put in drivers -// -#define DDKAPI __stdcall // Use NTAPI instead -#define DDKCDECLAPI __cdecl // Just use __cdecl /* Import and Export Specifiers */ diff --git a/reactos/include/psdk/ntstatus.h b/reactos/include/psdk/ntstatus.h index 933de41b892..9237221473c 100644 --- a/reactos/include/psdk/ntstatus.h +++ b/reactos/include/psdk/ntstatus.h @@ -1,144 +1,160 @@ /* - * 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 + * + * 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) -#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 +/* Exception codes */ -#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) +#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_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) @@ -146,785 +162,785 @@ #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) @@ -1034,94 +1050,126 @@ #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_ */ diff --git a/reactos/include/ddk/tvout.h b/reactos/include/psdk/tvout.h similarity index 81% rename from reactos/include/ddk/tvout.h rename to reactos/include/psdk/tvout.h index d2e33c20aa0..817461406d5 100644 --- a/reactos/include/ddk/tvout.h +++ b/reactos/include/psdk/tvout.h @@ -20,14 +20,7 @@ * */ -#ifndef __TVOUT_H -#define __TVOUT_H - - -#if _MSC_VER > 1000 #pragma once -#endif - #ifndef GUID_DEFINED #include @@ -84,30 +77,27 @@ #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; diff --git a/reactos/include/psdk/usbioctl.h b/reactos/include/psdk/usbioctl.h index 69541cb0052..d9aebda5d3f 100644 --- a/reactos/include/psdk/usbioctl.h +++ b/reactos/include/psdk/usbioctl.h @@ -665,6 +665,8 @@ typedef struct _USB_DEVICE_PERFORMANCE_INFO { #include +#endif /* USB_KERNEL_IOCTL */ + #ifdef __cplusplus } #endif diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index b7a5fd2776d..6b38dacb365 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -1505,14 +1505,14 @@ DWORD WINAPI GetFirmwareEnvironmentVariableA(LPCSTR,LPCSTR,PVOID,DWORD); 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); @@ -1763,7 +1763,7 @@ UINT WINAPI GlobalFlags(HGLOBAL); /* Obsolete: Has no effect. */ 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) @@ -1789,9 +1789,9 @@ PVOID WINAPI HeapReAlloc(HANDLE,DWORD,PVOID,DWORD); #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); @@ -1948,9 +1948,9 @@ InterlockedOr_Inline(IN OUT volatile LONG *Target, #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); @@ -1960,7 +1960,7 @@ BOOL WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL); #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 @@ -2100,7 +2100,7 @@ BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,PVOID,DWORD,DWORD *,DWORD *); 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); @@ -2301,8 +2301,8 @@ VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE); 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); diff --git a/reactos/include/psdk/wincon.h b/reactos/include/psdk/wincon.h index f2dd6fa6f95..a7916b46834 100644 --- a/reactos/include/psdk/wincon.h +++ b/reactos/include/psdk/wincon.h @@ -223,8 +223,8 @@ BOOL WINAPI SetConsoleTextAttribute(HANDLE,WORD); 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); diff --git a/reactos/include/psdk/windef.h b/reactos/include/psdk/windef.h index a168b263eb7..a29a959e747 100644 --- a/reactos/include/psdk/windef.h +++ b/reactos/include/psdk/windef.h @@ -305,7 +305,7 @@ typedef long *LPLONG; typedef int *LPLONG; #endif typedef DWORD *PDWORD,*LPDWORD; -typedef CONST void *PCVOID,*LPCVOID; +typedef CONST void *LPCVOID; typedef unsigned int UINT,*PUINT,*LPUINT; diff --git a/reactos/include/psdk/wingdi.h b/reactos/include/psdk/wingdi.h index f67ab615647..a1bf2f92134 100644 --- a/reactos/include/psdk/wingdi.h +++ b/reactos/include/psdk/wingdi.h @@ -2831,7 +2831,7 @@ HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR); 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); @@ -2840,9 +2840,9 @@ HBITMAP WINAPI CreateCompatibleBitmap(HDC,int,int); 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); @@ -3096,7 +3096,7 @@ HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ); 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); @@ -3110,8 +3110,8 @@ COLORREF WINAPI SetDCPenColor(HDC,COLORREF); #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); diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index f84a8ac817e..fa1dcc2afc2 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -3414,6 +3414,12 @@ typedef LONG struct _EXCEPTION_POINTERS *ExceptionInfo ); +typedef struct _GROUP_AFFINITY { + KAFFINITY Mask; + WORD Group; + WORD Reserved[3]; +} GROUP_AFFINITY, *PGROUP_AFFINITY; + typedef struct _EVENTLOGRECORD { DWORD Length; DWORD Reserved; diff --git a/reactos/include/psdk/winuser.h b/reactos/include/psdk/winuser.h index 17d17dfcb24..131a8187d3f 100644 --- a/reactos/include/psdk/winuser.h +++ b/reactos/include/psdk/winuser.h @@ -3879,7 +3879,7 @@ int WINAPI CountClipboardFormats(void); 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); diff --git a/reactos/include/reactos/idl/pnp.idl b/reactos/include/reactos/idl/pnp.idl index 44fd06a9654..ff5f5cca14c 100644 --- a/reactos/include/reactos/idl/pnp.idl +++ b/reactos/include/reactos/idl/pnp.idl @@ -16,6 +16,13 @@ const unsigned long PNP_MAX_BUFFER_SIZE = 16000000; 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; @@ -242,12 +249,6 @@ typedef struct _DEVPROPKEY { 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), diff --git a/reactos/include/reactos/wine/cfgmgr32.h b/reactos/include/reactos/wine/cfgmgr32.h deleted file mode 100644 index 7837f2a485b..00000000000 --- a/reactos/include/reactos/wine/cfgmgr32.h +++ /dev/null @@ -1,373 +0,0 @@ -/* - * 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_ */ diff --git a/reactos/include/xdk/amd64/ke.h b/reactos/include/xdk/amd64/ke.h new file mode 100644 index 00000000000..d744cd5eca7 --- /dev/null +++ b/reactos/include/xdk/amd64/ke.h @@ -0,0 +1,278 @@ +$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_ */ diff --git a/reactos/include/xdk/amd64/mm.h b/reactos/include/xdk/amd64/mm.h new file mode 100644 index 00000000000..2c390a14d26 --- /dev/null +++ b/reactos/include/xdk/amd64/mm.h @@ -0,0 +1,37 @@ +$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_ */ + diff --git a/reactos/include/xdk/arm/ke.h b/reactos/include/xdk/arm/ke.h new file mode 100644 index 00000000000..372e5658328 --- /dev/null +++ b/reactos/include/xdk/arm/ke.h @@ -0,0 +1,3 @@ +$if (_WDMDDK_) +#include +$endif diff --git a/reactos/include/xdk/cmfuncs.h b/reactos/include/xdk/cmfuncs.h new file mode 100644 index 00000000000..9fb3de09a7f --- /dev/null +++ b/reactos/include/xdk/cmfuncs.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/cmtypes.h b/reactos/include/xdk/cmtypes.h new file mode 100644 index 00000000000..2599a78cfc4 --- /dev/null +++ b/reactos/include/xdk/cmtypes.h @@ -0,0 +1,1048 @@ +/****************************************************************************** + * 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 +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 + +/* 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 + +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 + +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_ */ diff --git a/reactos/include/xdk/exfuncs.h b/reactos/include/xdk/exfuncs.h new file mode 100644 index 00000000000..46a5387733a --- /dev/null +++ b/reactos/include/xdk/exfuncs.h @@ -0,0 +1,1040 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/extypes.h b/reactos/include/xdk/extypes.h new file mode 100644 index 00000000000..4d18ac12f04 --- /dev/null +++ b/reactos/include/xdk/extypes.h @@ -0,0 +1,289 @@ +/****************************************************************************** + * 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_ */ + diff --git a/reactos/include/xdk/generate.bat b/reactos/include/xdk/generate.bat new file mode 100644 index 00000000000..e26f34aa105 --- /dev/null +++ b/reactos/include/xdk/generate.bat @@ -0,0 +1,4 @@ + + +..\..\output-i386\tools\hpp\hpp.exe wdm.template.h wdm.h +..\..\output-i386\tools\hpp\hpp.exe ntddk.template.h ntddk.h diff --git a/reactos/include/xdk/halfuncs.h b/reactos/include/xdk/halfuncs.h new file mode 100644 index 00000000000..547f4e4b7ce --- /dev/null +++ b/reactos/include/xdk/halfuncs.h @@ -0,0 +1,346 @@ +/* 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_ */ + diff --git a/reactos/include/xdk/haltypes.h b/reactos/include/xdk/haltypes.h new file mode 100644 index 00000000000..a9a031776fd --- /dev/null +++ b/reactos/include/xdk/haltypes.h @@ -0,0 +1,551 @@ +/* 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 + diff --git a/reactos/include/xdk/ia64/ke.h b/reactos/include/xdk/ia64/ke.h new file mode 100644 index 00000000000..2920636bf54 --- /dev/null +++ b/reactos/include/xdk/ia64/ke.h @@ -0,0 +1,38 @@ +$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 + diff --git a/reactos/include/xdk/interlocked.h b/reactos/include/xdk/interlocked.h new file mode 100644 index 00000000000..722096bf18e --- /dev/null +++ b/reactos/include/xdk/interlocked.h @@ -0,0 +1,193 @@ +/****************************************************************************** + * 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 */ + + diff --git a/reactos/include/xdk/iofuncs.h b/reactos/include/xdk/iofuncs.h new file mode 100644 index 00000000000..a1a2fcf88ee --- /dev/null +++ b/reactos/include/xdk/iofuncs.h @@ -0,0 +1,2284 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/iotypes.h b/reactos/include/xdk/iotypes.h new file mode 100644 index 00000000000..aac22cb3668 --- /dev/null +++ b/reactos/include/xdk/iotypes.h @@ -0,0 +1,4869 @@ +/****************************************************************************** + * 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 + +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 + +/* 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 +#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 +#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 +#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 + diff --git a/reactos/include/xdk/kdfuncs.h b/reactos/include/xdk/kdfuncs.h new file mode 100644 index 00000000000..1817849b425 --- /dev/null +++ b/reactos/include/xdk/kdfuncs.h @@ -0,0 +1,192 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/kdtypes.h b/reactos/include/xdk/kdtypes.h new file mode 100644 index 00000000000..b030a2349f0 --- /dev/null +++ b/reactos/include/xdk/kdtypes.h @@ -0,0 +1,94 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/kefuncs.h b/reactos/include/xdk/kefuncs.h new file mode 100644 index 00000000000..716ee872db8 --- /dev/null +++ b/reactos/include/xdk/kefuncs.h @@ -0,0 +1,1075 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/ketypes.h b/reactos/include/xdk/ketypes.h new file mode 100644 index 00000000000..a4bb36303a2 --- /dev/null +++ b/reactos/include/xdk/ketypes.h @@ -0,0 +1,1183 @@ +/****************************************************************************** + * 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_ */ + diff --git a/reactos/include/xdk/mips/ke.h b/reactos/include/xdk/mips/ke.h new file mode 100644 index 00000000000..31384ad4d27 --- /dev/null +++ b/reactos/include/xdk/mips/ke.h @@ -0,0 +1,66 @@ +$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 + diff --git a/reactos/include/xdk/mmfuncs.h b/reactos/include/xdk/mmfuncs.h new file mode 100644 index 00000000000..b714f97845a --- /dev/null +++ b/reactos/include/xdk/mmfuncs.h @@ -0,0 +1,658 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/mmtypes.h b/reactos/include/xdk/mmtypes.h new file mode 100644 index 00000000000..e4a23f48215 --- /dev/null +++ b/reactos/include/xdk/mmtypes.h @@ -0,0 +1,171 @@ +/****************************************************************************** + * 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_ */ + diff --git a/reactos/include/xdk/ntddk.template.h b/reactos/include/xdk/ntddk.template.h new file mode 100644 index 00000000000..003e9b7397d --- /dev/null +++ b/reactos/include/xdk/ntddk.template.h @@ -0,0 +1,262 @@ +/* + * ntddk.h + * + * Windows NT Device Driver Kit + * + * This file is part of the ReactOS DDK package. + * + * Contributors: + * Amine Khaldi + * Timo Kreuzer (timo.kreuzer@reactos.org) + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#pragma once + +#define _NTDDK_ + +#if !defined(_NTHAL_) && !defined(_NTIFS_) +#define _NTDDK_INCLUDED_ +#define _DDK_DRIVER_ +#endif + +/* Dependencies */ + +#define NT_INCLUDED +#define _CTYPE_DISABLE_MACROS + +#include +#include +#include +#include +#include + +/* FIXME +#include +#include +*/ + +#include // FIXME +#include // FIXME + + +#ifdef __cplusplus +extern "C" { +#endif + +/* GUID and UUID */ +#ifndef _NTLSA_IFS_ +#ifndef _NTLSA_AUDIT_ +#define _NTLSA_AUDIT_ + +#ifndef GUID_DEFINED +#include +#endif + +#endif /* _NTLSA_AUDIT_ */ +#endif /* _NTLSA_IFS_ */ + +typedef GUID UUID; + +struct _LOADER_PARAMETER_BLOCK; +struct _CREATE_DISK; +struct _DRIVE_LAYOUT_INFORMATION_EX; +struct _SET_PARTITION_INFORMATION_EX; + +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 diff --git a/reactos/include/xdk/nttmapi.h b/reactos/include/xdk/nttmapi.h new file mode 100644 index 00000000000..721005fdd88 --- /dev/null +++ b/reactos/include/xdk/nttmapi.h @@ -0,0 +1,652 @@ +$if (_WDMDDK_) +#ifndef _NTTMAPI_ +#define _NTTMAPI_ + +#include + +#define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001) +#define TRANSACTIONMANAGER_SET_INFORMATION (0x0002) +#define TRANSACTIONMANAGER_RECOVER (0x0004) +#define TRANSACTIONMANAGER_RENAME (0x0008) +#define TRANSACTIONMANAGER_CREATE_RM (0x0010) +#define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020) + +#define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ + TRANSACTIONMANAGER_QUERY_INFORMATION) + +#define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + TRANSACTIONMANAGER_SET_INFORMATION |\ + TRANSACTIONMANAGER_RECOVER |\ + TRANSACTIONMANAGER_RENAME |\ + TRANSACTIONMANAGER_CREATE_RM) + +#define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE) + +#define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ + TRANSACTIONMANAGER_GENERIC_READ |\ + TRANSACTIONMANAGER_GENERIC_WRITE |\ + TRANSACTIONMANAGER_GENERIC_EXECUTE |\ + TRANSACTIONMANAGER_BIND_TRANSACTION) + +#define TRANSACTION_QUERY_INFORMATION (0x0001) +#define TRANSACTION_SET_INFORMATION (0x0002) +#define TRANSACTION_ENLIST (0x0004) +#define TRANSACTION_COMMIT (0x0008) +#define TRANSACTION_ROLLBACK (0x0010) +#define TRANSACTION_PROPAGATE (0x0020) +#define TRANSACTION_RIGHT_RESERVED1 (0x0040) + +#define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\ + TRANSACTION_QUERY_INFORMATION |\ + SYNCHRONIZE) + +#define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + TRANSACTION_SET_INFORMATION |\ + TRANSACTION_COMMIT |\ + TRANSACTION_ENLIST |\ + TRANSACTION_ROLLBACK |\ + TRANSACTION_PROPAGATE |\ + SYNCHRONIZE) + +#define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ + TRANSACTION_COMMIT |\ + TRANSACTION_ROLLBACK |\ + SYNCHRONIZE) + +#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ + TRANSACTION_GENERIC_READ |\ + TRANSACTION_GENERIC_WRITE |\ + TRANSACTION_GENERIC_EXECUTE) + +#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\ + STANDARD_RIGHTS_WRITE |\ + TRANSACTION_SET_INFORMATION |\ + TRANSACTION_ENLIST |\ + TRANSACTION_ROLLBACK |\ + TRANSACTION_PROPAGATE |\ + SYNCHRONIZE) + +#define RESOURCEMANAGER_QUERY_INFORMATION (0x0001) +#define RESOURCEMANAGER_SET_INFORMATION (0x0002) +#define RESOURCEMANAGER_RECOVER (0x0004) +#define RESOURCEMANAGER_ENLIST (0x0008) +#define RESOURCEMANAGER_GET_NOTIFICATION (0x0010) +#define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020) +#define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040) + +#define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\ + RESOURCEMANAGER_QUERY_INFORMATION |\ + SYNCHRONIZE) + +#define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + RESOURCEMANAGER_SET_INFORMATION |\ + RESOURCEMANAGER_RECOVER |\ + RESOURCEMANAGER_ENLIST |\ + RESOURCEMANAGER_GET_NOTIFICATION |\ + RESOURCEMANAGER_REGISTER_PROTOCOL |\ + RESOURCEMANAGER_COMPLETE_PROPAGATION |\ + SYNCHRONIZE) + +#define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ + RESOURCEMANAGER_RECOVER |\ + RESOURCEMANAGER_ENLIST |\ + RESOURCEMANAGER_GET_NOTIFICATION |\ + RESOURCEMANAGER_COMPLETE_PROPAGATION |\ + SYNCHRONIZE) + +#define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ + RESOURCEMANAGER_GENERIC_READ |\ + RESOURCEMANAGER_GENERIC_WRITE |\ + RESOURCEMANAGER_GENERIC_EXECUTE) + +#define ENLISTMENT_QUERY_INFORMATION (0x0001) +#define ENLISTMENT_SET_INFORMATION (0x0002) +#define ENLISTMENT_RECOVER (0x0004) +#define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008) +#define ENLISTMENT_SUPERIOR_RIGHTS (0x0010) + +#define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\ + ENLISTMENT_QUERY_INFORMATION) + +#define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + ENLISTMENT_SET_INFORMATION |\ + ENLISTMENT_RECOVER |\ + ENLISTMENT_SUBORDINATE_RIGHTS |\ + ENLISTMENT_SUPERIOR_RIGHTS) + +#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ + ENLISTMENT_RECOVER |\ + ENLISTMENT_SUBORDINATE_RIGHTS |\ + ENLISTMENT_SUPERIOR_RIGHTS) + +#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ + ENLISTMENT_GENERIC_READ |\ + ENLISTMENT_GENERIC_WRITE |\ + ENLISTMENT_GENERIC_EXECUTE) + +typedef enum _TRANSACTION_OUTCOME { + TransactionOutcomeUndetermined = 1, + TransactionOutcomeCommitted, + TransactionOutcomeAborted, +} TRANSACTION_OUTCOME; + + +typedef enum _TRANSACTION_STATE { + TransactionStateNormal = 1, + TransactionStateIndoubt, + TransactionStateCommittedNotify, +} TRANSACTION_STATE; + + +typedef struct _TRANSACTION_BASIC_INFORMATION { + GUID TransactionId; + ULONG State; + ULONG Outcome; +} TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION; + +typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION { + GUID TmIdentity; + LARGE_INTEGER VirtualClock; +} TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION; + +typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { + GUID LogIdentity; +} TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION; + +typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { + ULONG LogPathLength; + WCHAR LogPath[1]; +} TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION; + +typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { + ULONGLONG LastRecoveredLsn; +} TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION; + +typedef struct _TRANSACTION_PROPERTIES_INFORMATION { + ULONG IsolationLevel; + ULONG IsolationFlags; + LARGE_INTEGER Timeout; + ULONG Outcome; + ULONG DescriptionLength; + WCHAR Description[1]; +} TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION; + +typedef struct _TRANSACTION_BIND_INFORMATION { + HANDLE TmHandle; +} TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION; + +typedef struct _TRANSACTION_ENLISTMENT_PAIR { + GUID EnlistmentId; + GUID ResourceManagerId; +} TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR; + +typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION { + ULONG NumberOfEnlistments; + TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1]; +} TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION; + +typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION { + TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair; +} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION; + +typedef struct _RESOURCEMANAGER_BASIC_INFORMATION { + GUID ResourceManagerId; + ULONG DescriptionLength; + WCHAR Description[1]; +} RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION; + +typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION { + HANDLE IoCompletionPortHandle; + ULONG_PTR CompletionKey; +} RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION; + +typedef enum _KTMOBJECT_TYPE { + KTMOBJECT_TRANSACTION, + KTMOBJECT_TRANSACTION_MANAGER, + 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 diff --git a/reactos/include/xdk/obfuncs.h b/reactos/include/xdk/obfuncs.h new file mode 100644 index 00000000000..40912fa411c --- /dev/null +++ b/reactos/include/xdk/obfuncs.h @@ -0,0 +1,141 @@ +/****************************************************************************** + * 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 + diff --git a/reactos/include/xdk/obtypes.h b/reactos/include/xdk/obtypes.h new file mode 100644 index 00000000000..84310a968db --- /dev/null +++ b/reactos/include/xdk/obtypes.h @@ -0,0 +1,135 @@ +/****************************************************************************** + * 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; + + diff --git a/reactos/include/xdk/pofuncs.h b/reactos/include/xdk/pofuncs.h new file mode 100644 index 00000000000..9fd1ec6d2b0 --- /dev/null +++ b/reactos/include/xdk/pofuncs.h @@ -0,0 +1,167 @@ +/****************************************************************************** + * 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) */ + diff --git a/reactos/include/xdk/potypes.h b/reactos/include/xdk/potypes.h new file mode 100644 index 00000000000..3caf8254d55 --- /dev/null +++ b/reactos/include/xdk/potypes.h @@ -0,0 +1,412 @@ +/****************************************************************************** + * 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; + + diff --git a/reactos/include/xdk/ppc/ke.h b/reactos/include/xdk/ppc/ke.h new file mode 100644 index 00000000000..b3a81bc7aa9 --- /dev/null +++ b/reactos/include/xdk/ppc/ke.h @@ -0,0 +1,107 @@ +$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 + + diff --git a/reactos/include/xdk/psfuncs.h b/reactos/include/xdk/psfuncs.h new file mode 100644 index 00000000000..48666e64ab8 --- /dev/null +++ b/reactos/include/xdk/psfuncs.h @@ -0,0 +1,184 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/pstypes.h b/reactos/include/xdk/pstypes.h new file mode 100644 index 00000000000..adda1fb12b5 --- /dev/null +++ b/reactos/include/xdk/pstypes.h @@ -0,0 +1,451 @@ +/****************************************************************************** + * 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_ */ + diff --git a/reactos/include/xdk/rtlfuncs.h b/reactos/include/xdk/rtlfuncs.h new file mode 100644 index 00000000000..a5302dcea9f --- /dev/null +++ b/reactos/include/xdk/rtlfuncs.h @@ -0,0 +1,2259 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/rtltypes.h b/reactos/include/xdk/rtltypes.h new file mode 100644 index 00000000000..ab74f7016c1 --- /dev/null +++ b/reactos/include/xdk/rtltypes.h @@ -0,0 +1,448 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/sefuncs.h b/reactos/include/xdk/sefuncs.h new file mode 100644 index 00000000000..6c8922024ec --- /dev/null +++ b/reactos/include/xdk/sefuncs.h @@ -0,0 +1,144 @@ +/****************************************************************************** + * 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 diff --git a/reactos/include/xdk/setypes.h b/reactos/include/xdk/setypes.h new file mode 100644 index 00000000000..6892aee0d2d --- /dev/null +++ b/reactos/include/xdk/setypes.h @@ -0,0 +1,396 @@ +/****************************************************************************** + * 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 +typedef struct _LUID_AND_ATTRIBUTES { + LUID Luid; + ULONG Attributes; +} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; +#include + +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 + diff --git a/reactos/include/xdk/wdm.template.h b/reactos/include/xdk/wdm.template.h new file mode 100644 index 00000000000..1005bf13d94 --- /dev/null +++ b/reactos/include/xdk/wdm.template.h @@ -0,0 +1,243 @@ +/* + * 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 +#include +#include +#include + +#ifndef GUID_DEFINED +#include +#endif + +#ifdef _MAC +#ifndef _INC_STRING +#include +#endif /* _INC_STRING */ +#else +#include +#endif /* _MAC */ + +#ifndef _KTMTYPES_ +typedef GUID UOW, *PUOW; +#endif + +typedef GUID *PGUID; + +#if (NTDDI_VERSION >= NTDDI_WINXP) +#include +#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_ */ diff --git a/reactos/include/xdk/wmifuncs.h b/reactos/include/xdk/wmifuncs.h new file mode 100644 index 00000000000..6279a55ff90 --- /dev/null +++ b/reactos/include/xdk/wmifuncs.h @@ -0,0 +1,152 @@ +/****************************************************************************** + * 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 + + + diff --git a/reactos/include/xdk/wmitypes.h b/reactos/include/xdk/wmitypes.h new file mode 100644 index 00000000000..c4fd0bac146 --- /dev/null +++ b/reactos/include/xdk/wmitypes.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * WMI Library Support Types * + ******************************************************************************/ + +#ifdef RUN_WPP +#include +#include +#endif + +#ifndef _TRACEHANDLE_DEFINED +#define _TRACEHANDLE_DEFINED +typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; +#endif + +#ifndef TRACE_INFORMATION_CLASS_DEFINE + +typedef struct _ETW_TRACE_SESSION_SETTINGS { + ULONG Version; + ULONG BufferSize; + ULONG MinimumBuffers; + ULONG MaximumBuffers; + ULONG LoggerMode; + ULONG FlushTimer; + ULONG FlushThreshold; + ULONG ClockType; +} ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS; + +typedef enum _TRACE_INFORMATION_CLASS { + TraceIdClass, + TraceHandleClass, + TraceEnableFlagsClass, + TraceEnableLevelClass, + GlobalLoggerHandleClass, + EventLoggerHandleClass, + AllLoggerHandlesClass, + TraceHandleByNameClass, + LoggerEventsLostClass, + TraceSessionSettingsClass, + LoggerEventsLoggedClass, + MaxTraceInformationClass +} TRACE_INFORMATION_CLASS; + +#endif /* TRACE_INFORMATION_CLASS_DEFINE */ + +#ifndef _ETW_KM_ +#define _ETW_KM_ +#endif + +#include + +typedef VOID +(NTAPI *PETWENABLECALLBACK)( + IN LPCGUID SourceId, + IN ULONG ControlCode, + IN UCHAR Level, + IN ULONGLONG MatchAnyKeyword, + IN ULONGLONG MatchAllKeyword, + IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL, + IN OUT PVOID CallbackContext OPTIONAL); + +#define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001 + diff --git a/reactos/include/xdk/x86/ke.h b/reactos/include/xdk/x86/ke.h new file mode 100644 index 00000000000..19d42740ee4 --- /dev/null +++ b/reactos/include/xdk/x86/ke.h @@ -0,0 +1,288 @@ +$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_ */ + + + + diff --git a/reactos/include/xdk/x86/mm.h b/reactos/include/xdk/x86/mm.h new file mode 100644 index 00000000000..d2cddd13701 --- /dev/null +++ b/reactos/include/xdk/x86/mm.h @@ -0,0 +1,24 @@ +$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_ */ diff --git a/reactos/include/xdk/zwfuncs.h b/reactos/include/xdk/zwfuncs.h new file mode 100644 index 00000000000..3299df523ee --- /dev/null +++ b/reactos/include/xdk/zwfuncs.h @@ -0,0 +1,820 @@ +/****************************************************************************** + * 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) */ + diff --git a/reactos/media/inf/cpu.inf b/reactos/media/inf/cpu.inf index 7f5dc35d4bb..bc2517dcaa0 100644 Binary files a/reactos/media/inf/cpu.inf and b/reactos/media/inf/cpu.inf differ diff --git a/reactos/ntoskrnl/config/cmalloc.c b/reactos/ntoskrnl/config/cmalloc.c index 37da97ea44b..97dfc1a6e26 100644 --- a/reactos/ntoskrnl/config/cmalloc.c +++ b/reactos/ntoskrnl/config/cmalloc.c @@ -70,14 +70,13 @@ CmpFreeKeyControlBlock(IN PCM_KEY_CONTROL_BLOCK Kcb) 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); @@ -134,7 +133,7 @@ SearchKcbList: FreeListEntry); /* Get the allocation page */ - AllocPage = (PCM_ALLOC_PAGE)((ULONG_PTR)CurrentKcb & 0xFFFFF000); + AllocPage = CmpGetAllocPageFromKcb(CurrentKcb); /* Decrease the free count */ ASSERT(AllocPage->FreeCount != 0); @@ -168,7 +167,7 @@ SearchKcbList: /* Set it up */ CurrentKcb->PrivateAlloc = TRUE; CurrentKcb->DelayCloseEntry = NULL; - InsertHeadList(&CmpFreeKCBListHead, + InsertTailList(&CmpFreeKCBListHead, &CurrentKcb->FreeListEntry); } @@ -178,9 +177,7 @@ SearchKcbList: } /* 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 */ @@ -219,7 +216,7 @@ SearchList: 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); @@ -278,7 +275,7 @@ CmpFreeDelayItem(PVOID Entry) 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 */ diff --git a/reactos/ntoskrnl/include/internal/cm_x.h b/reactos/ntoskrnl/include/internal/cm_x.h index ed3f3bff629..581a336d636 100644 --- a/reactos/ntoskrnl/include/internal/cm_x.h +++ b/reactos/ntoskrnl/include/internal/cm_x.h @@ -254,3 +254,25 @@ CmpConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k) 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)) diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c index e6346378566..9cd6347e957 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -1847,6 +1847,7 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode, PUNICODE_STRING Service; UNICODE_STRING ClassGUID; NTSTATUS Status; + DEVICE_CAPABILITIES DeviceCaps; DPRINT("IopActionConfigureChildServices(%p, %p)\n", DeviceNode, Context); @@ -1920,9 +1921,22 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode, 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); - if (ClassGUID.Length != 0) + 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; + + 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 @@ -1930,6 +1944,10 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode, DPRINT1("%wZ is using NULL driver\n", &DeviceNode->InstancePath); IopDeviceNodeSetFlag(DeviceNode, DNF_STARTED); } + else + { + IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED); + } return STATUS_SUCCESS; } diff --git a/reactos/ntoskrnl/po/events.c b/reactos/ntoskrnl/po/events.c index 0cd97405a47..8417f2760cc 100644 --- a/reactos/ntoskrnl/po/events.c +++ b/reactos/ntoskrnl/po/events.c @@ -157,6 +157,8 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, BOOLEAN Arrival; ULONG Caps; NTSTATUS Status; + UNICODE_STRING DeviceName; + UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\\??\\"); DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n", NotificationStructure, Context); @@ -177,10 +179,20 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, { 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); diff --git a/reactos/ntoskrnl/po/power.c b/reactos/ntoskrnl/po/power.c index eb163b63c71..e8d37b855fd 100644 --- a/reactos/ntoskrnl/po/power.c +++ b/reactos/ntoskrnl/po/power.c @@ -138,7 +138,7 @@ PoInitSystem(IN ULONG BootPhase) { /* 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, diff --git a/reactos/ntoskrnl/se/token.c b/reactos/ntoskrnl/se/token.c index 44481d6cf28..8f73312fde4 100644 --- a/reactos/ntoskrnl/se/token.c +++ b/reactos/ntoskrnl/se/token.c @@ -1347,6 +1347,14 @@ NtQueryInformationToken(IN HANDLE TokenHandle, 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 diff --git a/reactos/subsystems/subsystems.rbuild b/reactos/subsystems/subsystems.rbuild index 64e61fe0712..a92652be2d6 100644 --- a/reactos/subsystems/subsystems.rbuild +++ b/reactos/subsystems/subsystems.rbuild @@ -1,14 +1,11 @@ - - + - - diff --git a/reactos/subsystems/win32/win32k/objects/gdibatch.c b/reactos/subsystems/win32/win32k/objects/gdibatch.c index bbc36ff6e6b..b958ad4835d 100644 --- a/reactos/subsystems/win32/win32k/objects/gdibatch.c +++ b/reactos/subsystems/win32/win32k/objects/gdibatch.c @@ -66,14 +66,34 @@ ULONG 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; @@ -113,7 +133,7 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr) break; } - return pHdr->Size; // Return the full size of the structure. + return Size; } /* @@ -139,7 +159,6 @@ NTSTATUS APIENTRY NtGdiFlushUserBatch(VOID) { - BOOL Hit; PTEB pTeb = NtCurrentTeb(); ULONG GdiBatchCount = pTeb->GdiBatchCount; @@ -161,28 +180,13 @@ NtGdiFlushUserBatch(VOID) } // 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) diff --git a/reactos/subsystems/win32/win32k/pch.h b/reactos/subsystems/win32/win32k/pch.h index 3eae2acdda9..4bbbeb9c148 100644 --- a/reactos/subsystems/win32/win32k/pch.h +++ b/reactos/subsystems/win32/win32k/pch.h @@ -13,11 +13,11 @@ #define _NO_COM /* DDK/NDK/SDK Headers */ -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include /* Win32 Headers */ /* FIXME: Defines in winbase.h that we need... */ diff --git a/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak b/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak index 73518d38bea..f3071cca6d1 100644 --- a/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak +++ b/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak @@ -9,18 +9,6 @@ CPPFLAG_UNICODE:=-DUNICODE -D_UNICODE # 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