Merge trunk head (46467)

svn path=/branches/ros-amd64-bringup/; revision=46468
This commit is contained in:
Timo Kreuzer
2010-03-26 15:47:53 +00:00
159 changed files with 31194 additions and 6327 deletions
+2
View File
@@ -28,6 +28,8 @@
<compilerflag>-mpreferred-stack-boundary=2</compilerflag>
<compilerflag compiler="midl">-m32 --win32</compilerflag>
<compilerflag compiler="cc,cxx">-gstabs+</compilerflag>
<compilerflag compiler="cc,cxx">-fno-set-stack-executable</compilerflag>
<compilerflag compiler="cc,cxx">-fno-optimize-sibling-calls</compilerflag>
<compilerflag compiler="as">-gstabs+</compilerflag>
</group>
+8 -1
View File
@@ -1,5 +1,12 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
<if property="ARCH" value="i386>
<module name="bootcd" type="iso" output="ReactOS.iso">
<bootsector>isoboot</bootsector>
</module>
</if>
<ifnot property="ARCH" value="i386>
<module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
<bootsector>isoboot</bootsector>
</module>
</ifnot>
+8 -1
View File
@@ -1,5 +1,12 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
<if property="ARCH" value="i386>
<module name="livecd" type="liveiso" output="ReactOS-LiveCD.iso">
<bootsector>isoboot</bootsector>
</module>
</if>
<ifnot property="ARCH" value="i386>
<module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
<bootsector>isoboot</bootsector>
</module>
</ifnot>
+45 -45
View File
@@ -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)
+14 -18
View File
@@ -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");
+15 -11
View File
@@ -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);
+30 -49
View File
@@ -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");
@@ -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");
+15 -22
View File
@@ -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");
+190 -94
View File
@@ -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<IBDA_PinControl*>(*Output)->AddRef();
return NOERROR;
}
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CBDAPinControl::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
#endif
DebugBreak();
return E_NOINTERFACE;
}
//-------------------------------------------------------------------
@@ -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;
}
+8 -6
View File
@@ -1,7 +1,7 @@
#ifndef PRECOMP_H__
#define PRECOMP_H__
//#define BDAPLGIN_TRACE
#define BDAPLGIN_TRACE
#define BUILDING_KS
#define _KSDDK_
#include <dshow.h>
@@ -9,6 +9,7 @@
#include <ks.h>
#define __STREAMS__
#include <ksproxy.h>
#include <ksmedia.h>
#include <stdio.h>
#include <wchar.h>
#include <tchar.h>
@@ -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
@@ -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<IBDA_SignalStatistics*>(*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");
+19 -1
View File
@@ -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();
@@ -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();
+30 -13
View File
@@ -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<IUnknown*>(*Output)->AddRef();
return NOERROR;
}
if (IsEqualGUID(refiid, IID_IKsObject))
if (IsEqualGUID(refiid, IID_IKsObject) ||
IsEqualGUID(refiid, IID_IKsClockForwarder))
{
*Output = (IKsObject*)(this);
reinterpret_cast<IKsObject*>(*Output)->AddRef();
@@ -105,15 +108,6 @@ CKsClockForwarder::QueryInterface(
return NOERROR;
}
#if 0
if (IsEqualGUID(refiid, IID_IKsClockForwarder))
{
*Output = PVOID(this);
reinterpret_cast<IKsObject*>(*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;
}
+62 -22
View File
@@ -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();
+56 -18
View File
@@ -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();
+7
View File
@@ -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)
@@ -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
+3
View File
@@ -132,7 +132,10 @@ STDMETHODCALLTYPE
CEnumPins::Clone(
IEnumPins **ppEnum)
{
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
#endif
return E_NOTIMPL;
}
+333 -15
View File
@@ -62,6 +62,8 @@ class CInputPin : public IPin,
public ISpecifyPropertyPages
{
public:
typedef std::vector<IUnknown *>ProxyPluginVector;
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;
+5 -2
View File
@@ -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();
+2 -4
View File
@@ -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<IMediaSample2*>(*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);
+2
View File
@@ -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;
File diff suppressed because it is too large Load Diff
+1
View File
@@ -3,6 +3,7 @@
#define _FORCENAMELESSUNION
#define BUILDING_KS
#define _KSDDK_
//#define KSPROXY_TRACE
#include <dshow.h>
//#include <streams.h>
#include <ks.h>
+244 -25
View File
@@ -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();
@@ -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;
}
-6
View File
@@ -1,6 +0,0 @@
LIBRARY "idndl.dll"
EXPORTS
DownlevelGetLocaleScripts = DownlevelGetLocaleScripts@12 @1
DownlevelGetStringScripts@20 = kernel32.GetStringScripts @2
DownlevelVerifyScripts@20 = kernel32.VerifyScripts @3
+1 -1
View File
@@ -7,5 +7,5 @@
</group>
<redefine name="WINVER">0x600</redefine>
<file>idndl.cpp</file>
<importlibrary definition="idndl-$(ARCH).def" />
<importlibrary definition="idndl.spec" />
</module>
+4
View File
@@ -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
+1 -2
View File
@@ -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
+1 -2
View File
@@ -1,5 +1,4 @@
/* $Id$
*
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/stubs.c
@@ -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;
}
+1 -1
View File
@@ -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)
-1
View File
@@ -10,7 +10,6 @@ typedef VOID
typedef VOID
(WINAPI *PINTERFACE_DEREFERENCE)(
PVOID Context);
#define DDKAPI __stdcall // FIXME
#include <ntndk.h>
#include <hidusage.h>
#include <hidclass.h>
+1 -1
View File
@@ -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);
}
@@ -10,6 +10,7 @@
<define name="wcsnicmp">_wcsnicmp</define>
<define name="_SETUPAPI_" />
<define name="_CFGMGR32_" />
<library>pnp_client</library>
<library>uuid</library>
<library>wine</library>
@@ -45,11 +45,6 @@
#include <pseh/pseh2.h>
/* This hack definition is necessary as long as setupapi
depends on Wine "compatibility" headers */
typedef ULONG RESOURCEID;
typedef RESOURCEID *PRESOURCEID;
#include <pnp_c.h>
#include "rpc_private.h"
#include "resource.h"
@@ -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;
+6 -6
View File
@@ -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)
{
+4
View File
@@ -7,6 +7,9 @@
<directory name="cmbatt">
<xi:include href="cmbatt/cmbatt.rbuild" />
</directory>
<directory name="compbatt">
<xi:include href="compbatt/compbatt.rbuild" />
</directory>
</group>
<module name="acpi" type="kernelmodedriver" installbase="system32/drivers" installname="acpi.sys" allowwarnings="true">
@@ -26,6 +29,7 @@
</directory>
<file>osl.c</file>
<file>acpienum.c</file>
<file>eval.c</file>
<file>interface.c</file>
<file>pnp.c</file>
<file>power.c</file>
+59 -136
View File
@@ -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 */
+5 -4
View File
@@ -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)
+56 -13
View File
@@ -8,6 +8,9 @@
#include <acpi_bus.h>
#include <acpi_drivers.h>
#include <initguid.h>
#include <poclass.h>
#define NDEBUG
#include <debug.h>
@@ -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;
@@ -11,4 +11,5 @@
<file>cmbpnp.c</file>
<file>cmbwmi.c</file>
<file>cmbatt.rc</file>
<pch>cmbatt.h</pch>
</module>
+246 -55
View File
@@ -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());
@@ -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 */
@@ -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 <ntddk.h>
#include <initguid.h>
#include <batclass.h>
#include <debug.h>
typedef struct _COMPBATT_BATTERY_ENTRY
{
LIST_ENTRY BatteryLink;
IO_REMOVE_LOCK RemoveLock;
PDEVICE_OBJECT DeviceObject;
PIRP Irp;
WORK_QUEUE_ITEM WorkItem;
BOOLEAN WaitFlag;
BATTERY_WAIT_STATUS WaitStatus;
union
{
BATTERY_WAIT_STATUS WorkerWaitStatus;
BATTERY_STATUS WorkerStatus;
};
ULONG Tag;
ULONG Flags;
BATTERY_INFORMATION BatteryInformation;
BATTERY_STATUS BatteryStatus;
ULONGLONG InterruptTime;
UNICODE_STRING BatteryName;
} COMPBATT_BATTERY_ENTRY, *PCOMPBATT_BATTERY_ENTRY;
typedef struct _COMPBATT_DEVICE_EXTENSION
{
PVOID ClassData;
ULONG NextTag;
LIST_ENTRY BatteryList;
FAST_MUTEX Lock;
ULONG Tag;
ULONG Flags;
BATTERY_INFORMATION BatteryInformation;
BATTERY_STATUS BatteryStatus;
ULONGLONG InterruptTime;
POWER_STATE PowerState;
ULONG LowCapacity;
ULONG HighCapacity;
PDEVICE_OBJECT AttachedDevice;
PDEVICE_OBJECT DeviceObject;
PVOID NotificationEntry;
} COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION;
extern ULONG CmBattDebug;
/* EOF */
@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="compbatt" type="kernelmodedriver" installbase="system32/drivers" installname="compbatt.sys">
<library>ntoskrnl</library>
<library>hal</library>
<library>battc</library>
<include base="compbatt">.</include>
<file>compbatt.c</file>
<file>compmisc.c</file>
<file>comppnp.c</file>
<file>compbatt.rc</file>
<pch>compbatt.h</pch>
</module>
@@ -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 <reactos/version.rc>
@@ -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 */
@@ -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 */
+180
View File
@@ -0,0 +1,180 @@
#include <ntddk.h>
#include <acpi.h>
#include <acpisys.h>
#include <acpi_bus.h>
#include <acpi_drivers.h>
#include <acpiioct.h>
#include <glue.h>
#include <accommon.h>
#include <acobject.h>
#include <actypes.h>
#include <wdmguid.h>
#define NDEBUG
#include <debug.h>
NTSTATUS
NTAPI
Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
PIRP Irp)
{
ULONG Signature;
NTSTATUS Status;
ACPI_OBJECT_LIST ParamList;
PACPI_EVAL_INPUT_BUFFER EvalInputBuff = Irp->AssociatedIrp.SystemBuffer;
ACPI_BUFFER RetBuff = {ACPI_ALLOCATE_BUFFER, NULL};
PACPI_EVAL_OUTPUT_BUFFER OutputBuf;
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER *SimpleInt;
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING *SimpleStr;
if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG))
return STATUS_INVALID_PARAMETER;
Signature = *((PULONG)Irp->AssociatedIrp.SystemBuffer);
switch (Signature)
{
case ACPI_EVAL_INPUT_BUFFER_SIGNATURE:
if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER))
return STATUS_INVALID_PARAMETER;
ParamList.Count = 0;
break;
case ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE:
SimpleInt = Irp->AssociatedIrp.SystemBuffer;
if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER))
return STATUS_INVALID_PARAMETER;
ParamList.Count = 1;
ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
ParamList.Pointer[0].Type = ACPI_TYPE_INTEGER;
ParamList.Pointer[0].Integer.Value = SimpleInt->IntegerArgument;
break;
case ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_SIGNATURE:
SimpleStr = Irp->AssociatedIrp.SystemBuffer;
if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING))
return STATUS_INVALID_PARAMETER;
ParamList.Count = 1;
ParamList.Pointer = ExAllocatePool(NonPagedPool, sizeof(ACPI_OBJECT));
if (!ParamList.Pointer) return STATUS_INSUFFICIENT_RESOURCES;
ParamList.Pointer[0].String.Pointer = (CHAR*)SimpleStr->String;
ParamList.Pointer[0].String.Length = SimpleStr->StringLength;
break;
default:
DPRINT1("Unsupported input buffer signature: %d\n", Signature);
return STATUS_NOT_IMPLEMENTED;
}
Status = AcpiEvaluateObject(DeviceData->AcpiHandle,
(CHAR*)EvalInputBuff->MethodName,
&ParamList,
&RetBuff);
if (ParamList.Count != 0)
ExFreePool(ParamList.Pointer);
if (ACPI_SUCCESS(Status))
{
ACPI_OBJECT *Obj = RetBuff.Pointer;
ULONG ExtraParamLength;
/* If we didn't get anything back then we're done */
if (!RetBuff.Pointer || RetBuff.Length == 0)
return STATUS_SUCCESS;
switch (Obj->Type)
{
case ACPI_TYPE_INTEGER:
ExtraParamLength = sizeof(ULONG);
break;
case ACPI_TYPE_STRING:
ExtraParamLength = Obj->String.Length;
break;
case ACPI_TYPE_BUFFER:
ExtraParamLength = Obj->Buffer.Length;
break;
case ACPI_TYPE_PACKAGE:
DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
return STATUS_UNSUCCESSFUL;
default:
ASSERT(FALSE);
return STATUS_UNSUCCESSFUL;
}
/* Enough space for a ULONG is always included */
if (ExtraParamLength >= sizeof(ULONG))
ExtraParamLength -= sizeof(ULONG);
else
ExtraParamLength = 0;
OutputBuf = ExAllocatePool(NonPagedPool, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
ExtraParamLength);
if (!OutputBuf) return STATUS_INSUFFICIENT_RESOURCES;
OutputBuf->Signature = ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE;
OutputBuf->Length = ExtraParamLength + sizeof(ACPI_METHOD_ARGUMENT);
OutputBuf->Count = 1;
switch (Obj->Type)
{
case ACPI_TYPE_INTEGER:
ACPI_METHOD_SET_ARGUMENT_INTEGER(OutputBuf->Argument, Obj->Integer.Value);
break;
case ACPI_TYPE_STRING:
ACPI_METHOD_SET_ARGUMENT_STRING(OutputBuf->Argument, Obj->String.Pointer);
break;
case ACPI_TYPE_BUFFER:
ACPI_METHOD_SET_ARGUMENT_BUFFER(OutputBuf->Argument, Obj->Buffer.Pointer, Obj->Buffer.Length);
break;
case ACPI_TYPE_PACKAGE:
DPRINT1("ACPI_TYPE_PACKAGE not supported yet!\n");
return STATUS_UNSUCCESSFUL;
default:
ASSERT(FALSE);
return STATUS_UNSUCCESSFUL;
}
if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength >= sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
ExtraParamLength)
{
RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, OutputBuf, sizeof(ACPI_EVAL_OUTPUT_BUFFER) +
ExtraParamLength);
Irp->IoStatus.Information = sizeof(ACPI_EVAL_OUTPUT_BUFFER) + ExtraParamLength;
ExFreePool(OutputBuf);
return STATUS_SUCCESS;
}
else
{
ExFreePool(OutputBuf);
return STATUS_BUFFER_TOO_SMALL;
}
}
else
{
DPRINT1("Query method %s failed on %p\n", EvalInputBuff->MethodName, DeviceData->AcpiHandle);
return STATUS_UNSUCCESSFUL;
}
}
@@ -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
};
+6 -4
View File
@@ -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 (
+149 -18
View File
@@ -6,6 +6,9 @@
#include <acpi_bus.h>
#include <acpi_drivers.h>
#include <acpiioct.h>
#include <poclass.h>
#define NDEBUG
#include <debug.h>
@@ -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;
+12 -2
View File
@@ -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;
}
+6 -6
View File
@@ -1,10 +1,10 @@
/* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h>
#include <ddk/ntddmou.h>
#include <ddk/ntifs.h>
#include <ddk/tvout.h>
#include <ndk/ntndk.h>
#include <ntddk.h>
#include <ntddmou.h>
#include <ntifs.h>
#include <tvout.h>
#include <ntndk.h>
#include <stdarg.h>
#include <windef.h>
@@ -16,7 +16,7 @@
#include <dde.h>
#include <ddk/ddkmapi.h>
#include <ddkmapi.h>
/* Prototypes */
VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);
+5 -5
View File
@@ -1,9 +1,9 @@
/* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h>
#include <ddk/ntddmou.h>
#include <ddk/ntifs.h>
#include <ddk/tvout.h>
#include <ndk/ntndk.h>
#include <ntddk.h>
#include <ntddmou.h>
#include <ntifs.h>
#include <tvout.h>
#include <ntndk.h>
/* Win32 Headers */
#define WINBASEAPI
@@ -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
-9
View File
@@ -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,
+2 -2
View File
@@ -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,
@@ -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,
@@ -86,9 +86,7 @@
/* Compiler dependencies */
/***************************************************/
#define DDKAPI __stdcall
#define DDKFASTAPI __fastcall
#define DDKCDECLAPI __cdecl
/* Are we under GNU C (mingw) ??? */
#ifdef __GNUC__
+15 -15
View File
@@ -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
);
+54 -54
View File
@@ -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,
@@ -26,7 +26,6 @@
#define DDKFASTAPI __fastcall
#define FASTCALL __fastcall
#define DDKCDECLAPI __cdecl
ULONG DbgPrint(PCCH Format,...);
+3 -3
View File
@@ -9,9 +9,9 @@
</if>
<if property="ARCH" value="amd64">
<directory name="halx86">
<xi:include href="halx86/directory.rbuild" />
</directory>
<directory name="halx86">
<xi:include href="halx86/directory.rbuild" />
</directory>
</if>
<if property="ARCH" value="powerpc">
+5 -70
View File
@@ -8,15 +8,17 @@
/* INCLUDES ******************************************************************/
#include <asm.h>
#include <internal/i386/asmmacro.S>
.intel_syntax noprefix
/* GLOBALS *******************************************************************/
.globl _HalpPerfCounter
_HalpLastPerfCounterLow: .long 0
_HalpLastPerfCounterHigh: .long 0
_HalpPerfCounter:
_HalpPerfCounterLow: .long 0
_HalpPerfCounterHigh: .long 0
_HalpSystemHardwareFlags: .long 0
_UnhandledMsg:
.asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n"
@@ -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
-435
View File
@@ -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 <asm.h>
#include <internal/i386/asmmacro.S>
.intel_syntax noprefix
//
// HAL BIOS Frame
//
#define HALP_BIOS_FRAME_SS 0x00
#define HALP_BIOS_FRAME_ESP 0x04
#define HALP_BIOS_FRAME_EFLAGS 0x08
#define HALP_BIOS_FRAME_CS 0x0C
#define HALP_BIOS_FRAME_EIP 0x10
#define HALP_BIOS_FRAME_TRAP_FRAME 0x14
#define HALP_BIOS_FRAME_CS_LIMIT 0x18
#define HALP_BIOS_FRAME_CS_BASE 0x1C
#define HALP_BIOS_FRAME_CS_FLAGS 0x20
#define HALP_BIOS_FRAME_SS_LIMIT 0x24
#define HALP_BIOS_FRAME_SS_BASE 0x28
#define HALP_BIOS_FRAME_SS_FLAGS 0x2C
#define HALP_BIOS_FRAME_PREFIX 0x30
#define HALP_BIOS_FRAME_LENGTH 0x34
/* GLOBALS *******************************************************************/
_HalpSavedEsp:
.long 0
_InvalidMsg:
.asciz "HAL: An invalid V86 opcode was encountered at address %x:%x\n"
_InvalidGpfMsg:
.asciz "HAL: Trap0D while not in V86 mode\n"
_UnhandledMsg:
.asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx [%s]!!!\n"
/* FUNCTIONS *****************************************************************/
.globl _HalpBiosCall@0
.func HalpBiosCall@0
_HalpBiosCall@0:
/* Set up stack pointer */
push ebp
mov ebp, esp
/* Build a trap frame */
pushfd
push edi
push esi
push ebx
push ds
push es
push fs
push gs
push offset _HalpRealModeEnd
/* Save the stack */
mov _HalpSavedEsp, esp
/* Turn off alignment faults */
mov eax, cr0
and eax, ~CR0_AM
mov cr0, eax
/* Setup a new stack */
mov esi, fs:KPCR_TSS
mov eax, esp
sub eax, NPX_FRAME_LENGTH
mov [esi+KTSS_ESP0], eax
/* Save V86 registers */
push 0
push 0
push 0
push 0
push 0x2000
/* Get linear delta between stack and code */
mov eax, offset _HalpRealModeEnd-4
sub eax, offset _HalpRealModeStart
/* Get offset of code */
mov edx, offset _HalpRealModeStart
and edx, 0xFFF
/* Add offset to linear address and save the new V86 SP */
add eax, edx
push eax
/* Start building interrupt frame. Setup V86 EFLAGS and IOPL 3 */
pushfd
or dword ptr [esp], EFLAGS_V86_MASK
or dword ptr [esp], 0x3000
/* Push the CS and IP */
push 0x2000
push edx
/* Do the interrupt return (jump to V86 mode) */
iretd
.globl _HalpRealModeStart
_HalpRealModeStart:
/* Set mode 13 */
mov ax, 0x12
.byte 0
.byte 0
/* Do the interrupt */
int 0x10
/* BOP to exit V86 mode */
.byte 0xC4
.byte 0xC4
/* The stack lives here */
.align 4
.space 2048
.globl _HalpRealModeEnd
_HalpRealModeEnd:
/* We're back, clean up the trap frame */
pop gs
pop fs
pop es
pop ds
pop ebx
pop esi
pop edi
popfd
/* Return to caller */
pop ebp
ret 0
.endfunc
.globl _HalpOpcodeInvalid@0
.func HalpOpcodeInvalid@0
_HalpOpcodeInvalid@0:
/* This should never happen -- is the IOPM damaged? */
push [esi+HALP_BIOS_FRAME_EIP]
push [esi+HALP_BIOS_FRAME_CS]
push offset _InvalidMsg
call _DbgPrint
add esp, 12
/* Break */
int 3
/* Nothing to return */
xor eax, eax
ret 0
.endfunc
.globl _HalpPushInt@0
.func HalpPushInt@0
_HalpPushInt@0:
/* Save EBX */
push ebx
/* Get SS offset and base */
mov edx, [esi+HALP_BIOS_FRAME_ESP]
mov ebx, [esi+HALP_BIOS_FRAME_SS_BASE]
/* Convert to 16-bits */
and edx, 0xFFFF
sub dx, 2
/* Get EFLAGS and write them into the linear address of SP */
mov ax, word ptr [esi+HALP_BIOS_FRAME_EFLAGS]
mov [ebx+edx], ax
sub dx, 2
/* Get CS segment and write it into SP */
mov ax, word ptr [esi+HALP_BIOS_FRAME_CS]
mov [ebx+edx], ax
sub dx, 2
/* Get IP and write it into SP */
mov ax, word ptr [esi+HALP_BIOS_FRAME_EIP]
mov [ebx+edx], ax
/* Get new IP value (the interrupt ID is in ECX, so this is in the IVT) */
mov eax, [ecx*4]
push eax
/* Now save the new IP */
movzx eax, ax
mov [esi+HALP_BIOS_FRAME_EIP], eax
/* Save the new CS of this IP */
pop eax
shr eax, 16
mov [esi+HALP_BIOS_FRAME_CS], eax
/* Update the stack pointer after our manual interrupt frame construction */
mov word ptr [esi+HALP_BIOS_FRAME_ESP], dx
/* Get CS and convert it to linear format */
mov eax, [esi+HALP_BIOS_FRAME_CS]
shl eax, 4
mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
/* Return success and restore EBX */
mov eax, 1
pop ebx
ret 0
.endfunc
.globl _HalpOpcodeINTnn@0
.func HalpOpcodeINTnn@0
_HalpOpcodeINTnn@0:
/* Save non-volatiles and stack */
push ebp
push esi
push ebx
/* Get SS and convert it to linear format */
mov eax, [esi+HALP_BIOS_FRAME_SS]
shl eax, 4
mov [esi+HALP_BIOS_FRAME_SS_BASE], eax
mov dword ptr [esi+HALP_BIOS_FRAME_SS_LIMIT], 0xFFFF
mov dword ptr [esi+HALP_BIOS_FRAME_SS_FLAGS], 0
/* Increase IP and check if we're past the CS limit */
inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
mov edi, [esi+HALP_BIOS_FRAME_EIP]
cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
ja EipLimitReached
/* Convert IP to linear address and read the interrupt number */
add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
movzx ecx, byte ptr [edi]
/* Increase EIP and do the interrupt, check for status */
inc dword ptr [esi+HALP_BIOS_FRAME_EIP]
call _HalpPushInt@0
test eax, 0xFFFF
jz Done
/* Update the trap frame */
mov ebp, [esi+HALP_BIOS_FRAME_TRAP_FRAME]
mov eax, [esi+HALP_BIOS_FRAME_SS]
mov [ebp+KTRAP_FRAME_SS], eax
mov eax, [esi+HALP_BIOS_FRAME_ESP]
mov [ebp+KTRAP_FRAME_ESP], eax
mov eax, [esi+HALP_BIOS_FRAME_CS]
mov [ebp+KTRAP_FRAME_CS], eax
mov eax, [esi+HALP_BIOS_FRAME_EFLAGS]
mov [ebp+KTRAP_FRAME_EFLAGS], eax
/* Set success code */
mov eax, 1
Done:
/* Restore volatiles */
pop ebx
pop edi
pop ebp
ret 0
EipLimitReached:
/* Set failure code */
xor eax, eax
jmp Done
.endfunc
.globl _HalpDispatchV86Opcode@0
.func HalpDispatchV86Opcode@0
_HalpDispatchV86Opcode@0:
/* Make space for the HAL BIOS Frame on the stack */
push ebp
mov ebp, esp
sub esp, HALP_BIOS_FRAME_LENGTH
/* Save non-volatiles */
push esi
push edi
/* Save pointer to the trap frame */
mov esi, [ebp]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_TRAP_FRAME], esi
/* Save SS */
movzx eax, word ptr [esi+KTRAP_FRAME_SS]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_SS], eax
/* Save ESP */
mov eax, [esi+KTRAP_FRAME_ESP]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_ESP], eax
/* Save EFLAGS */
mov eax, [esi+KTRAP_FRAME_EFLAGS]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EFLAGS], eax
/* Save CS */
movzx eax, word ptr [esi+KTRAP_FRAME_CS]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_CS], eax
/* Save EIP */
mov eax, [esi+KTRAP_FRAME_EIP]
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_EIP], eax
/* No prefix */
xor eax, eax
mov [ebp-HALP_BIOS_FRAME_LENGTH+HALP_BIOS_FRAME_PREFIX], eax
/* Set pointer to HAL BIOS Frame */
lea esi, [ebp-HALP_BIOS_FRAME_LENGTH]
/* Convert CS to linear format */
mov eax, [esi+HALP_BIOS_FRAME_CS]
shl eax, 4
mov [esi+HALP_BIOS_FRAME_CS_BASE], eax
mov dword ptr [esi+HALP_BIOS_FRAME_CS_LIMIT], 0xFFFF
mov dword ptr [esi+HALP_BIOS_FRAME_CS_FLAGS], 0
/* Make sure IP is within the CS Limit */
mov edi, [esi+HALP_BIOS_FRAME_EIP]
cmp edi, [esi+HALP_BIOS_FRAME_CS_LIMIT]
ja DispatchError
/* Convert IP to linear address and read the opcode */
add edi, [esi+HALP_BIOS_FRAME_CS_BASE]
mov dl, [edi]
/* We only deal with interrupts */
cmp dl, 0xCD
je DispatchInt
/* Anything else is invalid */
call _HalpOpcodeInvalid@0
jmp DispatchError
DispatchInt:
/* Handle dispatching the interrupt */
call _HalpOpcodeINTnn@0
test eax, 0xFFFF
jz DispatchReturn
/* Update the trap frame EIP */
mov edi, [ebp-0x20]
mov eax, [ebp-0x24]
mov [edi+KTRAP_FRAME_EIP], eax
/* Set success code */
mov eax, 1
DispatchReturn:
/* Restore registers and return */
pop edi
pop esi
mov esp, ebp
pop ebp
ret 0
DispatchError:
/* Set failure code and return */
xor eax, eax
jmp DispatchReturn
.endfunc
.func Ki16BitStackException
_Ki16BitStackException:
/* Save stack */
push ss
push esp
/* Go to kernel mode thread stack */
mov eax, PCR[KPCR_CURRENT_THREAD]
add esp, [eax+KTHREAD_INITIAL_STACK]
/* Switch to good stack segment */
UNHANDLED_PATH "16-Bit Stack"
.endfunc
.globl _HalpTrap0D@0
.func HalpTrap0D@0
TRAP_FIXUPS htd_a, htd_t, DoFixupV86, DoFixupAbios
_HalpTrap0D@0:
/* Enter trap */
TRAP_PROLOG htd_a, htd_t
/* Check if this is a V86 trap */
test dword ptr [ebp+KTRAP_FRAME_EFLAGS], EFLAGS_V86_MASK
jnz DoDispatch
/* This is weird -- but might happen during an NMI */
push offset _InvalidGpfMsg
call _DbgPrint
add esp, 4
/* Loop forever */
jmp $
DoDispatch:
/* Handle the opcode */
call _HalpDispatchV86Opcode@0
/* Exit the interrupt */
jmp _Kei386EoiHelper@0
.endfunc
.globl _HalpTrap06@0
.func HalpTrap06@0
_HalpTrap06@0:
/* Restore DS/ES segments */
mov eax, KGDT_R3_DATA | RPL_MASK
mov ds, ax
mov es, ax
/* Restore ESP and return */
mov esp, _HalpSavedEsp
ret 0
.endfunc
+56
View File
@@ -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
+1 -52
View File
@@ -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 <hal.h>
#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
+13 -9
View File
@@ -17,20 +17,26 @@
</directory>
<file>beep.c</file>
<file>cmos.c</file>
<file>display.c</file>
<file>dma.c</file>
<file>drive.c</file>
<file>display.c</file>
<file>halinit.c</file>
<file>misc.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>sysinfo.c</file>
<file>timer.c</file>
<file>usage.c</file>
<if property="ARCH" value="i386">
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
<if property="ARCH" value="i386">
<file>bios.c</file>
<file>halinit.c</file>
<file>misc.c</file>
<file>pic.c</file>
<file>trap.S</file>
<file>usage.c</file>
<file>trap.S</file>
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
@@ -57,6 +63,7 @@
<pch>hal.h</pch>
</directory>
</module>
<module name="mini_hal" type="objectlibrary">
<include>include</include>
<include base="ntoskrnl">include</include>
@@ -78,6 +85,7 @@
<file>dma.c</file>
<file>display.c</file>
<file>drive.c</file>
<file>misc.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>spinlock.c</file>
@@ -85,15 +93,9 @@
<file>timer.c</file>
<file>usage.c</file>
<if property="ARCH" value="i386">
<file>bios.c</file>
<file>misc.c</file>
<file>pic.c</file>
<file>trap.S</file>
<file>usage.c</file>
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
<file>v86.s</file>
</directory>
</if>
<if property="ARCH" value="amd64">
@@ -109,6 +111,8 @@
</directory>
<directory name="up">
<file>halinit_up.c</file>
<file>pic.c</file>
<file>processor.c</file>
</directory>
</module>
</group>
+4
View File
@@ -9,6 +9,10 @@
<directory name="generic">
<file>spinlock.c</file>
</directory>
<directory name="up">
<file>pic.c</file>
<file>processor.c</file>
</directory>
<directory name="up">
<file>processor.c</file>
<if property="ARCH" value="i386">
+5 -14
View File
@@ -6,31 +6,22 @@
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
<include base="hal">include</include>
<include base="ntoskrnl">include</include>
<include base="x86emu">.</include>
<!-- include base="x86emu">.</include -->
<define name="_DISABLE_TIDENTS" />
<define name="_NTHAL_" />
<define name="_X86BIOS_" />
<library>hal_generic</library>
<library>hal_generic_up</library>
<library>ntoskrnl</library>
<library>x86emu</library>
<directory name="up">
<file>halinit_up.c</file>
<file>halup.rc</file>
</directory>
<!-- library>x86emu</library -->
<directory name="mp">
<file>halinit_mp.c</file>
<file>halmp.rc</file>
<directory name="amd64">
<file>mps.S</file>
<!-- file>mps.S</file -->
</directory>
</directory>
<directory name="generic">
<directory name="amd64">
<file>x86bios.c</file>
</directory>
</directory>
</module>
</group>
+7 -5
View File
@@ -14,11 +14,13 @@
<library>ntoskrnl</library>
<library>libcntpr</library>
<directory name="mp">
<file>mpsirql.c</file>
<directory name="i386">
<file>mps.S</file>
<file>mpsboot.asm</file>
</directory>
<if property="ARCH" value="i386">
<directory name="i386">
<file>mps.S</file>
<file>mpsboot.asm</file>
<file>mpsirql.c</file>
</directory>
</if>
</directory>
</module>
</group>
+9
View File
@@ -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
@@ -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
+1 -1
View File
@@ -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 ) \
-17
View File
@@ -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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-10
View File
@@ -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
+270
View File
@@ -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;
};
};
+1
View File
@@ -3,6 +3,7 @@
<module name="dxsdk" type="idlheader">
<file>amstream.idl</file>
<file>austream.idl</file>
<file>bdatif.idl</file>
<file>ddstream.idl</file>
<file>dmodshow.idl</file>
<file>mixerocx.idl</file>
-1
View File
@@ -1,4 +1,3 @@
#define PASTE2(x,y) x##y
#define PASTE(x,y) PASTE2(x,y)
+1 -1
View File
@@ -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
{
+7
View File
@@ -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);
+12 -12
View File
@@ -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);
@@ -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_ */
File diff suppressed because it is too large Load Diff
+84
View File
@@ -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 */
+335
View File
@@ -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
-5
View File
@@ -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 */
File diff suppressed because it is too large Load Diff
@@ -20,14 +20,7 @@
*
*/
#ifndef __TVOUT_H
#define __TVOUT_H
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef GUID_DEFINED
#include <guiddef.h>
@@ -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;
+2
View File
@@ -665,6 +665,8 @@ typedef struct _USB_DEVICE_PERFORMANCE_INFO {
#include <poppack.h>
#endif /* USB_KERNEL_IOCTL */
#ifdef __cplusplus
}
#endif

Some files were not shown because too many files have changed in this diff Show More