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
commit 42f403f39d
159 changed files with 31194 additions and 6327 deletions

View file

@ -28,6 +28,8 @@
<compilerflag>-mpreferred-stack-boundary=2</compilerflag> <compilerflag>-mpreferred-stack-boundary=2</compilerflag>
<compilerflag compiler="midl">-m32 --win32</compilerflag> <compilerflag compiler="midl">-m32 --win32</compilerflag>
<compilerflag compiler="cc,cxx">-gstabs+</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> <compilerflag compiler="as">-gstabs+</compilerflag>
</group> </group>

View file

@ -1,5 +1,12 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<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"> <module name="bootcd" type="iso" output="ReactOS-$(ARCH).iso">
<bootsector>isoboot</bootsector> <bootsector>isoboot</bootsector>
</module> </module>
</ifnot>

View file

@ -1,5 +1,12 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<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"> <module name="livecd" type="liveiso" output="ReactOS-LiveCD-$(ARCH).iso">
<bootsector>isoboot</bootsector> <bootsector>isoboot</bootsector>
</module> </module>
</ifnot>

View file

@ -385,7 +385,7 @@ SpiCreatePortConfig(
} }
VOID VOID
DDKCDECLAPI __cdecl
ScsiDebugPrint( ScsiDebugPrint(
IN ULONG DebugPrintLevel, IN ULONG DebugPrintLevel,
IN PCCHAR DebugMessage, IN PCCHAR DebugMessage,
@ -421,7 +421,7 @@ ScsiDebugPrint(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortCompleteRequest( ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -435,7 +435,7 @@ ScsiPortCompleteRequest(
#undef ScsiPortConvertPhysicalAddressToUlong #undef ScsiPortConvertPhysicalAddressToUlong
ULONG ULONG
DDKAPI NTAPI
ScsiPortConvertPhysicalAddressToUlong( ScsiPortConvertPhysicalAddressToUlong(
IN SCSI_PHYSICAL_ADDRESS Address) IN SCSI_PHYSICAL_ADDRESS Address)
{ {
@ -443,7 +443,7 @@ ScsiPortConvertPhysicalAddressToUlong(
} }
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
DDKAPI NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
IN ULONG UlongAddress) IN ULONG UlongAddress)
{ {
@ -451,7 +451,7 @@ ScsiPortConvertUlongToPhysicalAddress(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortFlushDma( ScsiPortFlushDma(
IN PVOID DeviceExtension) IN PVOID DeviceExtension)
{ {
@ -460,7 +460,7 @@ ScsiPortFlushDma(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortFreeDeviceBase( ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID MappedAddress) IN PVOID MappedAddress)
@ -469,7 +469,7 @@ ScsiPortFreeDeviceBase(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortGetBusData( ScsiPortGetBusData(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -482,7 +482,7 @@ ScsiPortGetBusData(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetDeviceBase( ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -514,7 +514,7 @@ ScsiPortGetDeviceBase(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetLogicalUnit( ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -527,7 +527,7 @@ ScsiPortGetLogicalUnit(
} }
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
DDKAPI NTAPI
ScsiPortGetPhysicalAddress( ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -564,7 +564,7 @@ ScsiPortGetPhysicalAddress(
} }
PSCSI_REQUEST_BLOCK PSCSI_REQUEST_BLOCK
DDKAPI NTAPI
ScsiPortGetSrb( ScsiPortGetSrb(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -641,7 +641,7 @@ SpiAllocateCommonBuffer(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetUncachedExtension( ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@ -726,7 +726,7 @@ ScsiPortGetUncachedExtension(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetVirtualAddress( ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress) IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
@ -1031,7 +1031,7 @@ SpiGetPciConfigData(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortInitialize( ScsiPortInitialize(
IN PVOID Argument1, IN PVOID Argument1,
IN PVOID Argument2, IN PVOID Argument2,
@ -1186,7 +1186,7 @@ ScsiPortInitialize(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortIoMapTransfer( ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -1198,7 +1198,7 @@ ScsiPortIoMapTransfer(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortLogError( ScsiPortLogError(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -1213,7 +1213,7 @@ ScsiPortLogError(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortMoveMemory( ScsiPortMoveMemory(
IN PVOID WriteBuffer, IN PVOID WriteBuffer,
IN PVOID ReadBuffer, IN PVOID ReadBuffer,
@ -1223,7 +1223,7 @@ ScsiPortMoveMemory(
} }
VOID VOID
DDKCDECLAPI __cdecl
ScsiPortNotification( ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType, IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
@ -1259,7 +1259,7 @@ ScsiPortNotification(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
OUT PUCHAR Buffer, OUT PUCHAR Buffer,
@ -1269,7 +1269,7 @@ ScsiPortReadPortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
IN PULONG Port, IN PULONG Port,
OUT PULONG Buffer, OUT PULONG Buffer,
@ -1279,7 +1279,7 @@ ScsiPortReadPortBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
OUT PUSHORT Buffer, OUT PUSHORT Buffer,
@ -1289,7 +1289,7 @@ ScsiPortReadPortBufferUshort(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
IN PUCHAR Port) IN PUCHAR Port)
{ {
@ -1300,7 +1300,7 @@ ScsiPortReadPortUchar(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
IN PULONG Port) IN PULONG Port)
{ {
@ -1308,7 +1308,7 @@ ScsiPortReadPortUlong(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
IN PUSHORT Port) IN PUSHORT Port)
{ {
@ -1316,7 +1316,7 @@ ScsiPortReadPortUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1327,7 +1327,7 @@ ScsiPortReadRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -1338,7 +1338,7 @@ ScsiPortReadRegisterBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1349,7 +1349,7 @@ ScsiPortReadRegisterBufferUshort(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
IN PUCHAR Register) IN PUCHAR Register)
{ {
@ -1357,7 +1357,7 @@ ScsiPortReadRegisterUchar(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
IN PULONG Register) IN PULONG Register)
{ {
@ -1365,7 +1365,7 @@ ScsiPortReadRegisterUlong(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
IN PUSHORT Register) IN PUSHORT Register)
{ {
@ -1373,7 +1373,7 @@ ScsiPortReadRegisterUshort(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortSetBusDataByOffset( ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -1389,7 +1389,7 @@ ScsiPortSetBusDataByOffset(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortStallExecution( ScsiPortStallExecution(
IN ULONG Delay) IN ULONG Delay)
{ {
@ -1397,7 +1397,7 @@ ScsiPortStallExecution(
} }
BOOLEAN BOOLEAN
DDKAPI NTAPI
ScsiPortValidateRange( ScsiPortValidateRange(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -1417,7 +1417,7 @@ ScsiPortValidateRange(
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1427,7 +1427,7 @@ ScsiPortWritePortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -1437,7 +1437,7 @@ ScsiPortWritePortBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1447,7 +1447,7 @@ ScsiPortWritePortBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN UCHAR Value) IN UCHAR Value)
@ -1456,7 +1456,7 @@ ScsiPortWritePortUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
IN PULONG Port, IN PULONG Port,
IN ULONG Value) IN ULONG Value)
@ -1465,7 +1465,7 @@ ScsiPortWritePortUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN USHORT Value) IN USHORT Value)
@ -1474,7 +1474,7 @@ ScsiPortWritePortUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1485,7 +1485,7 @@ ScsiPortWriteRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -1496,7 +1496,7 @@ ScsiPortWriteRegisterBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1507,7 +1507,7 @@ ScsiPortWriteRegisterBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN ULONG Value) IN ULONG Value)
@ -1516,7 +1516,7 @@ ScsiPortWriteRegisterUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
IN PULONG Register, IN PULONG Register,
IN ULONG Value) IN ULONG Value)
@ -1525,7 +1525,7 @@ ScsiPortWriteRegisterUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN USHORT Value) IN USHORT Value)

View file

@ -9,7 +9,9 @@
#include "precomp.h" #include "precomp.h"
#ifndef _MSC_VER
const GUID IID_IKsPropertySet = {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}}; const GUID IID_IKsPropertySet = {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}};
#endif
class CControlNode : public IUnknown class CControlNode : public IUnknown
{ {
@ -32,12 +34,12 @@ public:
return m_Ref; 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(){}; virtual ~CControlNode(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
HANDLE m_hFile; IKsPropertySet * m_pKsProperty;
ULONG m_NodeType; ULONG m_NodeType;
ULONG m_PinId; ULONG m_PinId;
}; };
@ -58,19 +60,19 @@ CControlNode::QueryInterface(
} }
else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter)) 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)) 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)) 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)) 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[MAX_PATH]; WCHAR Buffer[MAX_PATH];
@ -88,7 +90,6 @@ CControlNode::QueryInterface(
HRESULT HRESULT
WINAPI WINAPI
CControlNode_fnConstructor( CControlNode_fnConstructor(
HANDLE hFile,
IBaseFilter * pFilter, IBaseFilter * pFilter,
ULONG NodeType, ULONG NodeType,
ULONG PinId, ULONG PinId,
@ -98,7 +99,7 @@ CControlNode_fnConstructor(
WCHAR Buffer[100]; WCHAR Buffer[100];
HRESULT hr; HRESULT hr;
IPin * pPin = NULL; IPin * pPin = NULL;
IKsObject * pObject = NULL; IKsPropertySet * pProperty;
// store pin id // store pin id
swprintf(Buffer, L"%u", PinId); swprintf(Buffer, L"%u", PinId);
@ -115,26 +116,21 @@ CControlNode_fnConstructor(
return hr; return hr;
} }
// query IKsObject interface // query for IKsPropertySet interface
hr = pPin->QueryInterface(IID_IKsObject, (void**)&pObject); hr = pPin->QueryInterface(IID_IKsPropertySet, (void**)&pProperty);
if (FAILED(hr))
return hr;
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
swprintf(Buffer, L"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr); swprintf(Buffer, L"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif #endif
if (SUCCEEDED(hr))
{
// get pin handle
hFile = pObject->KsGetObjectHandle();
// release IKsObject interface
pObject->Release();
}
// release IPin interface // release IPin interface
pPin->Release(); pPin->Release();
// construct device control // construct device control
CControlNode * handler = new CControlNode(hFile, NodeType, PinId); CControlNode * handler = new CControlNode(pProperty, NodeType, PinId);
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CControlNode_fnConstructor\n"); OutputDebugStringW(L"CControlNode_fnConstructor\n");

View file

@ -9,20 +9,24 @@
#include "precomp.h" #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}}; 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 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 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 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, class CBDADeviceControl : public IBDA_DeviceControl,
public IBDA_Topology public IBDA_Topology
@ -476,7 +480,7 @@ CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG
if (FAILED(hr)) if (FAILED(hr))
return 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 #ifdef BDAPLGIN_TRACE
swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr); swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);

View file

@ -9,8 +9,10 @@
#include "precomp.h" #include "precomp.h"
#ifndef _MSC_VER
const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x04, 0xe1, 0xe0}}; 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}}; const GUID KSPROPSETID_BdaDigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0}};
#endif
class CBDADigitalDemodulator : public IBDA_DigitalDemodulator class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
{ {
@ -48,12 +50,12 @@ public:
HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion); HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion);
HRESULT STDMETHODCALLTYPE get_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(){}; ~CBDADigitalDemodulator(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
HANDLE m_hFile; IKsPropertySet * m_pProperty;
ULONG m_NodeId; ULONG m_NodeId;
}; };
@ -86,6 +88,7 @@ CBDADigitalDemodulator::QueryInterface(
swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr); swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr); CoTaskMemFree(lpstr);
DebugBreak();
#endif #endif
return E_NOINTERFACE; return E_NOINTERFACE;
@ -98,20 +101,17 @@ CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType)
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -131,20 +131,18 @@ CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -165,20 +163,16 @@ CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -198,20 +192,17 @@ CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -232,20 +223,16 @@ CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -265,20 +252,17 @@ CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -298,20 +282,17 @@ CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInvers
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -329,13 +310,13 @@ CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInvers
HRESULT HRESULT
WINAPI WINAPI
CBDADigitalDemodulator_fnConstructor( CBDADigitalDemodulator_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
// construct device control // construct device control
CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile, NodeId); CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n"); OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");

View file

@ -9,8 +9,10 @@
#include "precomp.h" #include "precomp.h"
#ifndef _MSC_VER
const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}; 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}}; const GUID KSPROPSETID_BdaFrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
#endif
class CBDAFrequencyFilter : public IBDA_FrequencyFilter class CBDAFrequencyFilter : public IBDA_FrequencyFilter
{ {
@ -46,12 +48,12 @@ public:
HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier); HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier);
HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier); 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(){}; virtual ~CBDAFrequencyFilter(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
HANDLE m_hFile; IKsPropertySet * m_pProperty;
ULONG m_NodeId; ULONG m_NodeId;
}; };
@ -84,6 +86,7 @@ CBDAFrequencyFilter::QueryInterface(
swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr); swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr); CoTaskMemFree(lpstr);
DebugBreak();
#endif #endif
return E_NOINTERFACE; return E_NOINTERFACE;
@ -110,20 +113,16 @@ CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency)
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -143,20 +142,17 @@ CBDAFrequencyFilter::put_Polarity(Polarisation Polarity)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -176,20 +172,17 @@ CBDAFrequencyFilter::put_Range(ULONG ulRange)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -209,20 +202,17 @@ CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -241,20 +231,17 @@ CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -271,13 +258,13 @@ CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier)
HRESULT HRESULT
WINAPI WINAPI
CBDAFrequencyFilter_fnConstructor( CBDAFrequencyFilter_fnConstructor(
HANDLE hFile, IKsPropertySet* pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
// construct device control // construct device control
CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile, NodeId); CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n"); OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n");

View file

@ -9,8 +9,10 @@
#include "precomp.h" #include "precomp.h"
#ifndef _MSC_VER
const GUID IID_IBDA_LNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x08, 0xf4}}; 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}}; const GUID KSPROPSETID_BdaLNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4}};
#endif
class CBDALNBInfo : public IBDA_LNBInfo class CBDALNBInfo : public IBDA_LNBInfo
{ {
@ -41,12 +43,12 @@ public:
HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency); HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency);
HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency); 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(){}; ~CBDALNBInfo(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
HANDLE m_hFile; IKsPropertySet * m_pProperty;
ULONG m_NodeId; ULONG m_NodeId;
}; };
@ -90,20 +92,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -123,20 +122,17 @@ CBDALNBInfo::put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -156,20 +152,17 @@ CBDALNBInfo::put_HighLowSwitchFrequency(ULONG ulSwitchFrequency)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = m_NodeId;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -186,13 +179,13 @@ CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency)
HRESULT HRESULT
WINAPI WINAPI
CBDALNBInfo_fnConstructor( CBDALNBInfo_fnConstructor(
HANDLE hFile, IKsPropertySet *pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
// construct device control // construct device control
CBDALNBInfo * handler = new CBDALNBInfo(hFile, NodeId); CBDALNBInfo * handler = new CBDALNBInfo(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n"); OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n");

View file

@ -9,9 +9,12 @@
#include "precomp.h" #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 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}}; const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
#endif
class CBDAPinControl : public IBDA_PinControl class CBDAPinControl : public IBDA_PinControl
{ {
@ -39,7 +42,7 @@ public:
HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx); 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() virtual ~CBDAPinControl()
{ {
//m_pConnectedPin->Release(); //m_pConnectedPin->Release();
@ -51,6 +54,7 @@ protected:
HANDLE m_Handle; HANDLE m_Handle;
IBDA_NetworkProvider * m_pProvider; IBDA_NetworkProvider * m_pProvider;
IPin * m_pConnectedPin; IPin * m_pConnectedPin;
ULONG m_RegistrationCtx;
}; };
HRESULT HRESULT
@ -72,16 +76,7 @@ CBDAPinControl::QueryInterface(
reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef(); reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef();
return NOERROR; return NOERROR;
} }
DebugBreak();
#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
return E_NOINTERFACE; return E_NOINTERFACE;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@ -142,10 +137,98 @@ STDMETHODCALLTYPE
CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx) CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
{ {
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n"); OutputDebugStringW(L"CBDAPinControl::RegistrationContext\n");
#endif #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 HRESULT
@ -158,30 +241,20 @@ CBDAPinControl_fnConstructor(
IPin * pConnectedPin = NULL; IPin * pConnectedPin = NULL;
IBDA_NetworkProvider * pNetworkProvider = NULL; IBDA_NetworkProvider * pNetworkProvider = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE; 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; HRESULT hr;
IKsObject * pObject = NULL; IKsObject * pObject = NULL;
IPin * pPin = NULL; IPin * pPin = NULL;
IEnumFilters *pEnumFilters = NULL; IUnknown * pUnknown = NULL;
IBaseFilter * ppFilter[1];
PIN_INFO PinInfo; PIN_INFO PinInfo;
FILTER_INFO FilterInfo; FILTER_INFO FilterInfo;
ULONG RegistrationCtx = 0;
if (!pUnkOuter) if (!pUnkOuter)
return E_POINTER; return E_POINTER;
OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
//DebugBreak();
// query for IKsObject interface // query for IKsObject interface
hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject); hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
@ -209,8 +282,15 @@ CBDAPinControl_fnConstructor(
return hr; return hr;
} }
if (!PinInfo.pFilter)
{
//clean up
pObject->Release();
pPin->Release();
return hr;
}
// sanity checks // sanity checks
assert(PinInfo.dir == PINDIR_OUTPUT);
assert(PinInfo.pFilter != NULL); assert(PinInfo.pFilter != NULL);
// query filter info // query filter info
@ -219,33 +299,73 @@ CBDAPinControl_fnConstructor(
// sanity check // sanity check
assert(FilterInfo.pGraph != NULL); assert(FilterInfo.pGraph != NULL);
// get IEnumFilters interface // get network provider interface
hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters); hr = GetNetworkProviderFromGraph(FilterInfo.pGraph, &pNetworkProvider);
if (FAILED(hr))
{
//clean up
FilterInfo.pGraph->Release();
PinInfo.pFilter->Release();
pObject->Release();
pPin->Release();
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)) if (SUCCEEDED(hr))
break; {
if (PinInfo.dir == PINDIR_OUTPUT)
{
// get connected pin handle
hr = pPin->ConnectedTo(&pConnectedPin);
if (SUCCEEDED(hr))
{
// get file handle
hFile = pObject->KsGetObjectHandle();
if (hFile)
{
hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, pConnectedPin, 0, pUnkOuter, riid, ppv);
if (SUCCEEDED(hr))
{
// set to null to prevent releasing
pNetworkProvider = NULL;
pConnectedPin = NULL;
}
}
else
{
// expected file handle
hr = E_UNEXPECTED;
}
}
}
else
{
// get IUnknown from base filter
hr = PinInfo.pFilter->QueryInterface(IID_IUnknown, (void**)&pUnknown);
if (SUCCEEDED(hr))
{
// register device filter
hr = pNetworkProvider->RegisterDeviceFilter(pUnknown, &RegistrationCtx);
if (SUCCEEDED(hr))
{
// get file handle
hFile = pObject->KsGetObjectHandle();
if (hFile)
{
hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, NULL, RegistrationCtx, pUnkOuter, riid, ppv);
if (SUCCEEDED(hr))
{
// set to null to prevent releasing
pNetworkProvider = NULL;
}
}
else
{
// expected file handle
hr = E_UNEXPECTED;
}
}
else
{
WCHAR Buffer[100];
swprintf(Buffer, L"CBDAPinControl_fnConstructor failed to register filter with %lx\n", hr);
OutputDebugStringW(Buffer);
DebugBreak();
}
}
}
} }
// release IEnumFilters interface
pEnumFilters->Release();
// release IFilterGraph interface // release IFilterGraph interface
FilterInfo.pGraph->Release(); FilterInfo.pGraph->Release();
@ -253,23 +373,6 @@ CBDAPinControl_fnConstructor(
// release IBaseFilter interface // release IBaseFilter interface
PinInfo.pFilter->Release(); 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 // release IPin
pPin->Release(); pPin->Release();
@ -277,30 +380,23 @@ CBDAPinControl_fnConstructor(
pObject->Release(); pObject->Release();
if (pNetworkProvider == NULL) if (pNetworkProvider)
{ {
// no network provider interface in graph // release network provider
return E_NOINTERFACE; pNetworkProvider->Release();
} }
#endif
CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin); if (pConnectedPin)
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl_fnConstructor");
#endif
DebugBreak();
if (!handler)
return E_OUTOFMEMORY;
if (FAILED(handler->QueryInterface(riid, ppv)))
{ {
/* not supported */ // release connected pin
delete handler; pConnectedPin->Release();
return E_NOINTERFACE;
} }
return NOERROR; if (pUnknown)
{
// release filter
pUnknown->Release();
}
return hr;
} }

View file

@ -1,7 +1,7 @@
#ifndef PRECOMP_H__ #ifndef PRECOMP_H__
#define PRECOMP_H__ #define PRECOMP_H__
//#define BDAPLGIN_TRACE #define BDAPLGIN_TRACE
#define BUILDING_KS #define BUILDING_KS
#define _KSDDK_ #define _KSDDK_
#include <dshow.h> #include <dshow.h>
@ -9,6 +9,7 @@
#include <ks.h> #include <ks.h>
#define __STREAMS__ #define __STREAMS__
#include <ksproxy.h> #include <ksproxy.h>
#include <ksmedia.h>
#include <stdio.h> #include <stdio.h>
#include <wchar.h> #include <wchar.h>
#include <tchar.h> #include <tchar.h>
@ -55,7 +56,6 @@ CBDAPinControl_fnConstructor(
HRESULT HRESULT
WINAPI WINAPI
CControlNode_fnConstructor( CControlNode_fnConstructor(
HANDLE hFile,
IBaseFilter * pFilter, IBaseFilter * pFilter,
ULONG NodeType, ULONG NodeType,
ULONG PinId, ULONG PinId,
@ -67,7 +67,7 @@ CControlNode_fnConstructor(
HRESULT HRESULT
WINAPI WINAPI
CBDAFrequencyFilter_fnConstructor( CBDAFrequencyFilter_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv); LPVOID * ppv);
@ -77,7 +77,7 @@ CBDAFrequencyFilter_fnConstructor(
HRESULT HRESULT
WINAPI WINAPI
CBDASignalStatistics_fnConstructor( CBDASignalStatistics_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv); LPVOID * ppv);
@ -87,7 +87,7 @@ CBDASignalStatistics_fnConstructor(
HRESULT HRESULT
WINAPI WINAPI
CBDALNBInfo_fnConstructor( CBDALNBInfo_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv); LPVOID * ppv);
@ -96,9 +96,11 @@ CBDALNBInfo_fnConstructor(
HRESULT HRESULT
WINAPI WINAPI
CBDADigitalDemodulator_fnConstructor( CBDADigitalDemodulator_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv); LPVOID * ppv);
extern const GUID IID_IKsObject;
#endif #endif

View file

@ -9,8 +9,10 @@
#include "precomp.h" #include "precomp.h"
#ifndef _MSC_VER
const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}}; 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}}; const GUID KSPROPSETID_BdaSignalStats = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
#endif
class CBDASignalStatistics : public IBDA_SignalStatistics class CBDASignalStatistics : public IBDA_SignalStatistics
{ {
@ -45,12 +47,12 @@ public:
HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime); HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime); 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(){}; ~CBDASignalStatistics(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
HANDLE m_hFile; IKsPropertySet * m_pProperty;
ULONG m_NodeId; ULONG m_NodeId;
}; };
@ -75,7 +77,6 @@ CBDASignalStatistics::QueryInterface(
reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef(); reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef();
return NOERROR; return NOERROR;
} }
return E_NOINTERFACE; return E_NOINTERFACE;
} }
@ -95,13 +96,13 @@ CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength)
ULONG BytesReturned; ULONG BytesReturned;
// setup request // 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.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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
@ -128,13 +129,11 @@ CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality)
ULONG BytesReturned; ULONG BytesReturned;
// setup request // 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.NodeId = (ULONG)-1;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
@ -162,13 +161,12 @@ CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent)
ULONG BytesReturned; ULONG BytesReturned;
// setup request // 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.NodeId = (ULONG)-1;
Node.Reserved = 0;
// perform request // 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 // store result
*pfPresent = Present; *pfPresent = Present;
@ -198,13 +196,12 @@ CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked)
ULONG BytesReturned; ULONG BytesReturned;
// setup request // 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.NodeId = (ULONG)-1;
Node.Reserved = 0;
// perform request // 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; *pfLocked = Locked;
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
@ -222,20 +219,17 @@ CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime)
{ {
KSP_NODE Node; KSP_NODE Node;
HRESULT hr; HRESULT hr;
ULONG BytesReturned;
// setup request // 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.NodeId = (ULONG)-1;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; 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); OutputDebugStringW(Buffer);
#endif #endif
@ -251,13 +245,11 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
ULONG BytesReturned; ULONG BytesReturned;
// setup request // 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.NodeId = (ULONG)-1;
Node.Reserved = 0;
// perform request // 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 #ifdef BDAPLGIN_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
@ -271,13 +263,13 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
HRESULT HRESULT
WINAPI WINAPI
CBDASignalStatistics_fnConstructor( CBDASignalStatistics_fnConstructor(
HANDLE hFile, IKsPropertySet * pProperty,
ULONG NodeId, ULONG NodeId,
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
// construct device control // construct device control
CBDASignalStatistics * handler = new CBDASignalStatistics(hFile, NodeId); CBDASignalStatistics * handler = new CBDASignalStatistics(pProperty, NodeId);
#ifdef BDAPLGIN_TRACE #ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n"); OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");

View file

@ -140,7 +140,10 @@ CKsAllocator::SetProperties(
SYSTEM_INFO SystemInfo; SYSTEM_INFO SystemInfo;
EnterCriticalSection(&m_CriticalSection); EnterCriticalSection(&m_CriticalSection);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::SetProperties\n"); OutputDebugStringW(L"CKsAllocator::SetProperties\n");
#endif
if (!pRequest || !pActual) if (!pRequest || !pActual)
return E_POINTER; return E_POINTER;
@ -216,7 +219,9 @@ CKsAllocator::Commit()
//TODO integer overflow checks //TODO integer overflow checks
EnterCriticalSection(&m_CriticalSection); EnterCriticalSection(&m_CriticalSection);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::Commit\n"); OutputDebugStringW(L"CKsAllocator::Commit\n");
#endif
if (m_Mode == KsAllocatorMode_Kernel) if (m_Mode == KsAllocatorMode_Kernel)
{ {
@ -301,7 +306,9 @@ CKsAllocator::Decommit()
{ {
EnterCriticalSection(&m_CriticalSection); EnterCriticalSection(&m_CriticalSection);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::Decommit\n"); OutputDebugStringW(L"CKsAllocator::Decommit\n");
#endif
if (m_Mode == KsAllocatorMode_Kernel) if (m_Mode == KsAllocatorMode_Kernel)
{ {
@ -340,7 +347,9 @@ CKsAllocator::GetBuffer(
DWORD dwFlags) DWORD dwFlags)
{ {
IMediaSample * Sample = NULL; IMediaSample * Sample = NULL;
OutputDebugStringW(L"CKsAllocator::GetBuffer\n");
if (!m_Commited)
return VFW_E_NOT_COMMITTED;
do do
{ {
@ -390,7 +399,9 @@ CKsAllocator::ReleaseBuffer(
{ {
EnterCriticalSection(&m_CriticalSection); EnterCriticalSection(&m_CriticalSection);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n"); OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n");
#endif
// media sample always 1 ref count in free list // media sample always 1 ref count in free list
pBuffer->AddRef(); pBuffer->AddRef();
@ -427,7 +438,10 @@ CKsAllocator::SetNotify(
IMemAllocatorNotifyCallbackTemp *pNotify) IMemAllocatorNotifyCallbackTemp *pNotify)
{ {
EnterCriticalSection(&m_CriticalSection); EnterCriticalSection(&m_CriticalSection);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::SetNotify\n"); OutputDebugStringW(L"CKsAllocator::SetNotify\n");
#endif
if (pNotify) if (pNotify)
pNotify->AddRef(); pNotify->AddRef();
@ -519,7 +533,9 @@ CKsAllocator::KsCreateAllocatorAndGetHandle(
KSALLOCATOR_FRAMING AllocatorFraming; KSALLOCATOR_FRAMING AllocatorFraming;
HANDLE hPin; HANDLE hPin;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n"); OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n");
#endif
if (m_hAllocator) if (m_hAllocator)
{ {
@ -588,7 +604,9 @@ CKsAllocator_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsAllocator_Constructor\n"); OutputDebugStringW(L"CKsAllocator_Constructor\n");
#endif
CKsAllocator * handler = new CKsAllocator(); CKsAllocator * handler = new CKsAllocator();

View file

@ -97,7 +97,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsBasicAudio::Stop() CKsBasicAudio::Stop()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -105,7 +107,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsBasicAudio::Pause() CKsBasicAudio::Pause()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -114,7 +119,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::Run( CKsBasicAudio::Run(
REFERENCE_TIME tStart) REFERENCE_TIME tStart)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -123,7 +131,9 @@ STDMETHODCALLTYPE
CKsBasicAudio::SetSyncSource( CKsBasicAudio::SetSyncSource(
IReferenceClock *pClock) IReferenceClock *pClock)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -131,7 +141,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsBasicAudio::NotifyGraphChange() CKsBasicAudio::NotifyGraphChange()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -144,7 +157,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::GetTypeInfoCount( CKsBasicAudio::GetTypeInfoCount(
UINT *pctinfo) UINT *pctinfo)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -155,7 +171,9 @@ CKsBasicAudio::GetTypeInfo(
LCID lcid, LCID lcid,
ITypeInfo **ppTInfo) ITypeInfo **ppTInfo)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -168,7 +186,10 @@ CKsBasicAudio::GetIDsOfNames(
LCID lcid, LCID lcid,
DISPID *rgDispId) DISPID *rgDispId)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -184,7 +205,10 @@ CKsBasicAudio::Invoke(
EXCEPINFO *pExcepInfo, EXCEPINFO *pExcepInfo,
UINT *puArgErr) UINT *puArgErr)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -197,7 +221,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::put_Volume( CKsBasicAudio::put_Volume(
long lVolume) long lVolume)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -207,7 +234,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::get_Volume( CKsBasicAudio::get_Volume(
long *plVolume) long *plVolume)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -217,7 +247,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::put_Balance( CKsBasicAudio::put_Balance(
long lBalance) long lBalance)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -227,7 +260,10 @@ STDMETHODCALLTYPE
CKsBasicAudio::get_Balance( CKsBasicAudio::get_Balance(
long *plBalance) long *plBalance)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n"); OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -238,7 +274,9 @@ CKsBasicAudio_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsBasicAudio_Constructor\n"); OutputDebugStringW(L"CKsBasicAudio_Constructor\n");
#endif
CKsBasicAudio * handler = new CKsBasicAudio(); CKsBasicAudio * handler = new CKsBasicAudio();

View file

@ -12,6 +12,8 @@
const GUID KSCATEGORY_CLOCK = {0x53172480, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}}; const GUID KSCATEGORY_CLOCK = {0x53172480, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
#endif #endif
const GUID IID_IKsClockForwarder = {0x877e4352, 0x6fea, 0x11d0, {0xb8, 0x63, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter); DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter);
class CKsClockForwarder : public IDistributorNotify, class CKsClockForwarder : public IDistributorNotify,
@ -91,7 +93,8 @@ CKsClockForwarder::QueryInterface(
reinterpret_cast<IUnknown*>(*Output)->AddRef(); reinterpret_cast<IUnknown*>(*Output)->AddRef();
return NOERROR; return NOERROR;
} }
if (IsEqualGUID(refiid, IID_IKsObject)) if (IsEqualGUID(refiid, IID_IKsObject) ||
IsEqualGUID(refiid, IID_IKsClockForwarder))
{ {
*Output = (IKsObject*)(this); *Output = (IKsObject*)(this);
reinterpret_cast<IKsObject*>(*Output)->AddRef(); reinterpret_cast<IKsObject*>(*Output)->AddRef();
@ -105,15 +108,6 @@ CKsClockForwarder::QueryInterface(
return NOERROR; return NOERROR;
} }
#if 0
if (IsEqualGUID(refiid, IID_IKsClockForwarder))
{
*Output = PVOID(this);
reinterpret_cast<IKsObject*>(*Output)->AddRef();
return NOERROR;
}
#endif
return E_NOINTERFACE; return E_NOINTERFACE;
} }
@ -126,8 +120,13 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsClockForwarder::Stop() 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) if (m_ThreadStarted)
{ {
// signal pending stop // signal pending stop
@ -166,7 +165,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsClockForwarder::Pause() CKsClockForwarder::Pause()
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::Pause\n"); OutputDebugString("CKsClockForwarder::Pause\n");
#endif
if (!m_hEvent) if (!m_hEvent)
{ {
@ -206,7 +207,9 @@ STDMETHODCALLTYPE
CKsClockForwarder::Run( CKsClockForwarder::Run(
REFERENCE_TIME tStart) REFERENCE_TIME tStart)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::Run\n"); OutputDebugString("CKsClockForwarder::Run\n");
#endif
m_Time = tStart; m_Time = tStart;
@ -233,7 +236,9 @@ STDMETHODCALLTYPE
CKsClockForwarder::SetSyncSource( CKsClockForwarder::SetSyncSource(
IReferenceClock *pClock) IReferenceClock *pClock)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::SetSyncSource\n"); OutputDebugString("CKsClockForwarder::SetSyncSource\n");
#endif
if (pClock) if (pClock)
pClock->AddRef(); pClock->AddRef();
@ -250,9 +255,11 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsClockForwarder::NotifyGraphChange() CKsClockForwarder::NotifyGraphChange()
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder::NotifyGraphChange\n"); OutputDebugString("CKsClockForwarder::NotifyGraphChange\n");
DebugBreak(); #endif
return E_NOTIMPL;
return NOERROR;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@ -282,6 +289,12 @@ CKsClockForwarder::SetClockState(KSSTATE State)
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
m_State = State; 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; return hr;
} }
@ -330,14 +343,18 @@ CKsClockForwarder_Constructor(
HRESULT hr; HRESULT hr;
HANDLE handle; HANDLE handle;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsClockForwarder_Constructor\n"); OutputDebugStringW(L"CKsClockForwarder_Constructor\n");
#endif
// open default clock // open default clock
hr = KsOpenDefaultDevice(KSCATEGORY_CLOCK, GENERIC_READ | GENERIC_WRITE, &handle); hr = KsOpenDefaultDevice(KSCATEGORY_CLOCK, GENERIC_READ | GENERIC_WRITE, &handle);
if (hr != NOERROR) if (hr != NOERROR)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder_Constructor failed to open device\n"); OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
#endif
return hr; return hr;
} }

View file

@ -102,7 +102,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPConfig::Stop() CVPConfig::Stop()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -110,7 +112,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPConfig::Pause() CVPConfig::Pause()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -119,7 +123,9 @@ STDMETHODCALLTYPE
CVPConfig::Run( CVPConfig::Run(
REFERENCE_TIME tStart) REFERENCE_TIME tStart)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -128,7 +134,9 @@ STDMETHODCALLTYPE
CVPConfig::SetSyncSource( CVPConfig::SetSyncSource(
IReferenceClock *pClock) IReferenceClock *pClock)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -136,7 +144,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPConfig::NotifyGraphChange() CVPConfig::NotifyGraphChange()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -149,7 +159,9 @@ CVPConfig::GetConnectInfo(
LPDWORD pdwNumConnectInfo, LPDWORD pdwNumConnectInfo,
IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo) IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -158,7 +170,9 @@ STDMETHODCALLTYPE
CVPConfig::SetConnectInfo( CVPConfig::SetConnectInfo(
DWORD dwChosenEntry) DWORD dwChosenEntry)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -167,7 +181,9 @@ STDMETHODCALLTYPE
CVPConfig::GetVPDataInfo( CVPConfig::GetVPDataInfo(
LPAMVPDATAINFO pamvpDataInfo) LPAMVPDATAINFO pamvpDataInfo)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -177,7 +193,9 @@ CVPConfig::GetMaxPixelRate(
LPAMVPSIZE pamvpSize, LPAMVPSIZE pamvpSize,
OUT LPDWORD pdwMaxPixelsPerSecond) OUT LPDWORD pdwMaxPixelsPerSecond)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -187,7 +205,9 @@ CVPConfig::InformVPInputFormats(
DWORD dwNumFormats, DWORD dwNumFormats,
IN LPDDPIXELFORMAT pDDPixelFormats) IN LPDDPIXELFORMAT pDDPixelFormats)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -197,7 +217,9 @@ CVPConfig::GetVideoFormats(
LPDWORD pdwNumFormats, LPDWORD pdwNumFormats,
IN OUT LPDDPIXELFORMAT pddPixelFormats) IN OUT LPDDPIXELFORMAT pddPixelFormats)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -206,7 +228,9 @@ STDMETHODCALLTYPE
CVPConfig::SetVideoFormat( CVPConfig::SetVideoFormat(
DWORD dwChosenEntry) DWORD dwChosenEntry)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -214,7 +238,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPConfig::SetInvertPolarity() CVPConfig::SetInvertPolarity()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -223,7 +249,9 @@ STDMETHODCALLTYPE
CVPConfig::GetOverlaySurface( CVPConfig::GetOverlaySurface(
LPDIRECTDRAWSURFACE* ppddOverlaySurface) LPDIRECTDRAWSURFACE* ppddOverlaySurface)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -232,7 +260,9 @@ STDMETHODCALLTYPE
CVPConfig::SetDirectDrawKernelHandle( CVPConfig::SetDirectDrawKernelHandle(
ULONG_PTR dwDDKernelHandle) ULONG_PTR dwDDKernelHandle)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -241,7 +271,9 @@ STDMETHODCALLTYPE
CVPConfig::SetVideoPortID( CVPConfig::SetVideoPortID(
IN DWORD dwVideoPortID) IN DWORD dwVideoPortID)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -252,7 +284,9 @@ CVPConfig::SetDDSurfaceKernelHandles(
DWORD cHandles, DWORD cHandles,
IN ULONG_PTR *rgDDKernelHandles) IN ULONG_PTR *rgDDKernelHandles)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -264,7 +298,9 @@ CVPConfig::SetSurfaceParameters(
IN DWORD dwXOrigin, IN DWORD dwXOrigin,
IN DWORD dwYOrigin) IN DWORD dwYOrigin)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -277,7 +313,9 @@ STDMETHODCALLTYPE
CVPConfig::IsVPDecimationAllowed( CVPConfig::IsVPDecimationAllowed(
LPBOOL pbIsDecimationAllowed) LPBOOL pbIsDecimationAllowed)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -286,13 +324,13 @@ STDMETHODCALLTYPE
CVPConfig::SetScalingFactors( CVPConfig::SetScalingFactors(
LPAMVPSIZE pamvpSize) LPAMVPSIZE pamvpSize)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
WINAPI WINAPI
CVPConfig_Constructor( CVPConfig_Constructor(
@ -300,7 +338,9 @@ CVPConfig_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CVPConfig_Constructor\n"); OutputDebugStringW(L"CVPConfig_Constructor\n");
#endif
CVPConfig * handler = new CVPConfig(); CVPConfig * handler = new CVPConfig();

View file

@ -98,7 +98,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPVBIConfig::Stop() CVPVBIConfig::Stop()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -106,7 +108,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPVBIConfig::Pause() CVPVBIConfig::Pause()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -115,7 +119,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::Run( CVPVBIConfig::Run(
REFERENCE_TIME tStart) REFERENCE_TIME tStart)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -124,7 +130,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::SetSyncSource( CVPVBIConfig::SetSyncSource(
IReferenceClock *pClock) IReferenceClock *pClock)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -132,7 +140,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPVBIConfig::NotifyGraphChange() CVPVBIConfig::NotifyGraphChange()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -145,7 +155,9 @@ CVPVBIConfig::GetConnectInfo(
LPDWORD pdwNumConnectInfo, LPDWORD pdwNumConnectInfo,
IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo) IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -154,7 +166,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::SetConnectInfo( CVPVBIConfig::SetConnectInfo(
DWORD dwChosenEntry) DWORD dwChosenEntry)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -163,7 +177,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::GetVPDataInfo( CVPVBIConfig::GetVPDataInfo(
LPAMVPDATAINFO pamvpDataInfo) LPAMVPDATAINFO pamvpDataInfo)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -173,7 +189,9 @@ CVPVBIConfig::GetMaxPixelRate(
LPAMVPSIZE pamvpSize, LPAMVPSIZE pamvpSize,
OUT LPDWORD pdwMaxPixelsPerSecond) OUT LPDWORD pdwMaxPixelsPerSecond)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -183,7 +201,9 @@ CVPVBIConfig::InformVPInputFormats(
DWORD dwNumFormats, DWORD dwNumFormats,
IN LPDDPIXELFORMAT pDDPixelFormats) IN LPDDPIXELFORMAT pDDPixelFormats)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -193,7 +213,9 @@ CVPVBIConfig::GetVideoFormats(
LPDWORD pdwNumFormats, LPDWORD pdwNumFormats,
IN OUT LPDDPIXELFORMAT pddPixelFormats) IN OUT LPDDPIXELFORMAT pddPixelFormats)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -202,7 +224,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::SetVideoFormat( CVPVBIConfig::SetVideoFormat(
DWORD dwChosenEntry) DWORD dwChosenEntry)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -210,7 +234,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CVPVBIConfig::SetInvertPolarity() CVPVBIConfig::SetInvertPolarity()
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -219,7 +245,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::GetOverlaySurface( CVPVBIConfig::GetOverlaySurface(
LPDIRECTDRAWSURFACE* ppddOverlaySurface) LPDIRECTDRAWSURFACE* ppddOverlaySurface)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -228,7 +256,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::SetDirectDrawKernelHandle( CVPVBIConfig::SetDirectDrawKernelHandle(
ULONG_PTR dwDDKernelHandle) ULONG_PTR dwDDKernelHandle)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -237,7 +267,9 @@ STDMETHODCALLTYPE
CVPVBIConfig::SetVideoPortID( CVPVBIConfig::SetVideoPortID(
IN DWORD dwVideoPortID) IN DWORD dwVideoPortID)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -248,7 +280,9 @@ CVPVBIConfig::SetDDSurfaceKernelHandles(
DWORD cHandles, DWORD cHandles,
IN ULONG_PTR *rgDDKernelHandles) IN ULONG_PTR *rgDDKernelHandles)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -260,7 +294,9 @@ CVPVBIConfig::SetSurfaceParameters(
IN DWORD dwXOrigin, IN DWORD dwXOrigin,
IN DWORD dwYOrigin) IN DWORD dwYOrigin)
{ {
OutputDebugString("UNIMPLEMENTED\n"); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"UNIMPLEMENTED\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -272,7 +308,9 @@ CVPVBIConfig_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CVPVBIConfig_Constructor\n"); OutputDebugStringW(L"CVPVBIConfig_Constructor\n");
#endif
CVPVBIConfig * handler = new CVPVBIConfig(); CVPVBIConfig * handler = new CVPVBIConfig();

View file

@ -103,7 +103,9 @@ CKsDataTypeHandler::KsIsMediaTypeInRanges(
ULONG Index; ULONG Index;
HRESULT hr = S_FALSE; HRESULT hr = S_FALSE;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n"); OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n");
#endif
DataList = (PKSMULTIPLE_ITEM)DataRanges; DataList = (PKSMULTIPLE_ITEM)DataRanges;
DataRange = (PKSDATARANGE)(DataList + 1); DataRange = (PKSDATARANGE)(DataList + 1);
@ -187,7 +189,9 @@ STDMETHODCALLTYPE
CKsDataTypeHandler::KsSetMediaType( CKsDataTypeHandler::KsSetMediaType(
IN const AM_MEDIA_TYPE* AmMediaType) IN const AM_MEDIA_TYPE* AmMediaType)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n"); OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n");
#endif
if (m_Type) if (m_Type)
{ {
@ -228,7 +232,10 @@ CKsDataTypeHandler_Constructor (
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n"); OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n");
#endif
CKsDataTypeHandler * handler = new CKsDataTypeHandler(); CKsDataTypeHandler * handler = new CKsDataTypeHandler();
if (!handler) if (!handler)

View file

@ -64,13 +64,6 @@ CEnumMediaTypes::QueryInterface(
return NOERROR; 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; return E_NOINTERFACE;
} }
@ -171,7 +164,9 @@ STDMETHODCALLTYPE
CEnumMediaTypes::Clone( CEnumMediaTypes::Clone(
IEnumMediaTypes **ppEnum) IEnumMediaTypes **ppEnum)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n"); OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -189,7 +184,7 @@ CEnumMediaTypes_fnConstructor(
WCHAR Buffer[MAX_PATH]; WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr; LPOLESTR lpstr;
StringFromCLSID(riid, &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); OutputDebugStringW(Buffer);
#endif #endif

View file

@ -132,7 +132,10 @@ STDMETHODCALLTYPE
CEnumPins::Clone( CEnumPins::Clone(
IEnumPins **ppEnum) IEnumPins **ppEnum)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n"); OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }

View file

@ -62,6 +62,8 @@ class CInputPin : public IPin,
public ISpecifyPropertyPages public ISpecifyPropertyPages
{ {
public: public:
typedef std::vector<IUnknown *>ProxyPluginVector;
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef() STDMETHODIMP_(ULONG) AddRef()
@ -170,14 +172,15 @@ public:
HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt); HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt);
HRESULT STDMETHODCALLTYPE CreatePin(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); 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(){}; virtual ~CInputPin(){};
protected: protected:
LONG m_Ref; LONG m_Ref;
IBaseFilter * m_ParentFilter; IBaseFilter * m_ParentFilter;
LPCWSTR m_PinName; LPCWSTR m_PinName;
HANDLE m_hFilter;
HANDLE m_hPin; HANDLE m_hPin;
ULONG m_PinId; ULONG m_PinId;
IMemAllocator * m_MemAllocator; IMemAllocator * m_MemAllocator;
@ -196,17 +199,16 @@ protected:
LPWSTR m_FilterName; LPWSTR m_FilterName;
FRAMING_PROP m_FramingProp[4]; FRAMING_PROP m_FramingProp[4];
PKSALLOCATOR_FRAMING_EX m_FramingEx[4]; PKSALLOCATOR_FRAMING_EX m_FramingEx[4];
ProxyPluginVector m_Plugins;
}; };
CInputPin::CInputPin( CInputPin::CInputPin(
IBaseFilter * ParentFilter, IBaseFilter * ParentFilter,
LPCWSTR PinName, LPCWSTR PinName,
HANDLE hFilter,
ULONG PinId, ULONG PinId,
KSPIN_COMMUNICATION Communication) : m_Ref(0), KSPIN_COMMUNICATION Communication) : m_Ref(0),
m_ParentFilter(ParentFilter), m_ParentFilter(ParentFilter),
m_PinName(PinName), m_PinName(PinName),
m_hFilter(hFilter),
m_hPin(INVALID_HANDLE_VALUE), m_hPin(INVALID_HANDLE_VALUE),
m_PinId(PinId), m_PinId(PinId),
m_MemAllocator(0), m_MemAllocator(0),
@ -218,13 +220,27 @@ CInputPin::CInputPin(
m_KsAllocatorEx(0), m_KsAllocatorEx(0),
m_PipeAllocatorFlag(0), m_PipeAllocatorFlag(0),
m_bPinBusCacheInitialized(0), m_bPinBusCacheInitialized(0),
m_FilterName(0) m_FilterName(0),
m_Plugins()
{ {
ZeroMemory(m_FramingProp, sizeof(m_FramingProp)); ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
ZeroMemory(m_FramingEx, sizeof(m_FramingEx)); 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)); 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); assert(hr == S_OK);
} }
@ -346,7 +362,10 @@ CInputPin::Notify(
IBaseFilter *pSelf, IBaseFilter *pSelf,
Quality q) Quality q)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Notify NotImplemented\n"); OutputDebugStringW(L"CInputPin::Notify NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -355,7 +374,10 @@ STDMETHODCALLTYPE
CInputPin::SetSink( CInputPin::SetSink(
IQualityControl *piqc) IQualityControl *piqc)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n"); OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -368,7 +390,10 @@ STDMETHODCALLTYPE
CInputPin::KsAddAggregate( CInputPin::KsAddAggregate(
IN REFGUID AggregateClass) IN REFGUID AggregateClass)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n"); OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -377,7 +402,10 @@ STDMETHODCALLTYPE
CInputPin::KsRemoveAggregate( CInputPin::KsRemoveAggregate(
REFGUID AggregateClass) REFGUID AggregateClass)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n"); OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -401,7 +429,10 @@ CInputPin::Backout(
IPin *ppinOut, IPin *ppinOut,
IGraphBuilder *pGraph) IGraphBuilder *pGraph)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Backout\n"); OutputDebugStringW(L"CInputPin::Backout\n");
#endif
return S_OK; return S_OK;
} }
@ -414,7 +445,10 @@ STDMETHODCALLTYPE
CInputPin::KsPinFactory( CInputPin::KsPinFactory(
ULONG* PinFactory) ULONG* PinFactory)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsPinFactory\n"); OutputDebugStringW(L"CInputPin::KsPinFactory\n");
#endif
*PinFactory = m_PinId; *PinFactory = m_PinId;
return S_OK; return S_OK;
} }
@ -590,7 +624,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::GetAllocator(IMemAllocator **ppAllocator) CInputPin::GetAllocator(IMemAllocator **ppAllocator)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::GetAllocator\n"); OutputDebugStringW(L"CInputPin::GetAllocator\n");
#endif
return VFW_E_NO_ALLOCATOR; return VFW_E_NO_ALLOCATOR;
} }
@ -598,13 +635,16 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly) CInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly)
{ {
WCHAR Buffer[100];
HRESULT hr; HRESULT hr;
ALLOCATOR_PROPERTIES Properties; ALLOCATOR_PROPERTIES Properties;
hr = pAllocator->GetProperties(&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); 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); OutputDebugStringW(Buffer);
#endif
if (pAllocator) if (pAllocator)
{ {
@ -645,9 +685,11 @@ CInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps)
else else
hr = E_NOTIMPL; hr = E_NOTIMPL;
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; 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); 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); OutputDebugStringW(Buffer);
#endif
return hr; return hr;
} }
@ -656,8 +698,11 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::Receive(IMediaSample *pSample) CInputPin::Receive(IMediaSample *pSample)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Receive NotImplemented\n"); OutputDebugStringW(L"CInputPin::Receive NotImplemented\n");
DebugBreak(); DebugBreak();
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -665,8 +710,11 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed) CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n"); OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n");
DebugBreak(); DebugBreak();
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -674,8 +722,11 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::ReceiveCanBlock( void) CInputPin::ReceiveCanBlock( void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n"); OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n");
DebugBreak(); DebugBreak();
#endif
return S_FALSE; return S_FALSE;
} }
@ -688,7 +739,22 @@ STDMETHODCALLTYPE
CInputPin::KsQueryMediums( CInputPin::KsQueryMediums(
PKSMULTIPLE_ITEM* MediumList) 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 HRESULT
@ -696,7 +762,22 @@ STDMETHODCALLTYPE
CInputPin::KsQueryInterfaces( CInputPin::KsQueryInterfaces(
PKSMULTIPLE_ITEM* InterfaceList) 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 HRESULT
@ -838,7 +919,10 @@ CInputPin::KsQualityNotify(
ULONG Proportion, ULONG Proportion,
REFERENCE_TIME TimeDelta) REFERENCE_TIME TimeDelta)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n"); OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n");
#endif
DebugBreak(); DebugBreak();
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -853,7 +937,9 @@ CInputPin::KsNotifyError(
IMediaSample* Sample, IMediaSample* Sample,
HRESULT hr) HRESULT hr)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n"); OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n");
#endif
} }
@ -1026,8 +1112,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Connect NotImplemented\n"); OutputDebugStringW(L"CInputPin::Connect NotImplemented\n");
DebugBreak(); DebugBreak();
#endif
return NOERROR; return NOERROR;
} }
@ -1078,7 +1166,10 @@ CInputPin::Disconnect( void)
m_Pin->Release(); m_Pin->Release();
m_Pin = NULL; m_Pin = NULL;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::Disconnect\n"); OutputDebugStringW(L"CInputPin::Disconnect\n");
#endif
return S_OK; return S_OK;
} }
HRESULT HRESULT
@ -1106,8 +1197,11 @@ CInputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
if (!m_Pin) if (!m_Pin)
return VFW_E_NOT_CONNECTED; return VFW_E_NOT_CONNECTED;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n"); OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n");
DebugBreak(); DebugBreak();
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
@ -1159,9 +1253,23 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
HRESULT hr; HRESULT hr;
ULONG MediaTypeCount = 0, Index; ULONG MediaTypeCount = 0, Index;
AM_MEDIA_TYPE * MediaTypes; 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 // query media type count
hr = KsGetMediaTypeCount(m_hFilter, m_PinId, &MediaTypeCount); hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
if (FAILED(hr) || !MediaTypeCount) if (FAILED(hr) || !MediaTypeCount)
return hr; return hr;
@ -1179,7 +1287,7 @@ CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
for(Index = 0; Index < MediaTypeCount; Index++) for(Index = 0; Index < MediaTypeCount; Index++)
{ {
// get media type // get media type
hr = KsGetMediaType(Index, &MediaTypes[Index], m_hFilter, m_PinId); hr = KsGetMediaType(Index, &MediaTypes[Index], hFilter, m_PinId);
if (FAILED(hr)) if (FAILED(hr))
{ {
// failed // failed
@ -1195,35 +1303,45 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin) CInputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::QueryInternalConnections NotImplemented\n"); OutputDebugStringW(L"CInputPin::QueryInternalConnections NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::EndOfStream( void) CInputPin::EndOfStream( void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::EndOfStream NotImplemented\n"); OutputDebugStringW(L"CInputPin::EndOfStream NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::BeginFlush( void) CInputPin::BeginFlush( void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::BeginFlush NotImplemented\n"); OutputDebugStringW(L"CInputPin::BeginFlush NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::EndFlush( void) CInputPin::EndFlush( void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::EndFlush NotImplemented\n"); OutputDebugStringW(L"CInputPin::EndFlush NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) CInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::NewSegment NotImplemented\n"); OutputDebugStringW(L"CInputPin::NewSegment NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1237,11 +1355,25 @@ CInputPin::CheckFormat(
PKSMULTIPLE_ITEM MultipleItem; PKSMULTIPLE_ITEM MultipleItem;
PKSDATAFORMAT DataFormat; PKSDATAFORMAT DataFormat;
HRESULT hr; HRESULT hr;
IKsObject * KsObjectParent;
HANDLE hFilter;
if (!pmt) if (!pmt)
return E_POINTER; 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)) if (FAILED(hr))
return S_FALSE; return S_FALSE;
@ -1254,7 +1386,9 @@ CInputPin::CheckFormat(
{ {
// format is supported // format is supported
CoTaskMemFree(MultipleItem); CoTaskMemFree(MultipleItem);
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CheckFormat format OK\n"); OutputDebugStringW(L"CInputPin::CheckFormat format OK\n");
#endif
return S_OK; return S_OK;
} }
DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize); DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize);
@ -1321,7 +1455,9 @@ CInputPin::CreatePin(
if (FAILED(hr)) if (FAILED(hr))
{ {
// failed to load interface handler plugin // failed to load interface handler plugin
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePin failed to load InterfaceHandlerPlugin\n"); OutputDebugStringW(L"CInputPin::CreatePin failed to load InterfaceHandlerPlugin\n");
#endif
CoTaskMemFree(MediumList); CoTaskMemFree(MediumList);
CoTaskMemFree(InterfaceList); CoTaskMemFree(InterfaceList);
@ -1333,7 +1469,9 @@ CInputPin::CreatePin(
if (FAILED(hr)) if (FAILED(hr))
{ {
// failed to load interface handler plugin // failed to load interface handler plugin
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePin failed to initialize InterfaceHandlerPlugin\n"); OutputDebugStringW(L"CInputPin::CreatePin failed to initialize InterfaceHandlerPlugin\n");
#endif
InterfaceHandler->Release(); InterfaceHandler->Release();
CoTaskMemFree(MediumList); CoTaskMemFree(MediumList);
CoTaskMemFree(InterfaceList); CoTaskMemFree(InterfaceList);
@ -1354,10 +1492,12 @@ CInputPin::CreatePin(
} }
else else
{ {
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
swprintf(Buffer, L"CInputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName); swprintf(Buffer, L"CInputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
DebugBreak(); DebugBreak();
#endif
hr = E_FAIL; hr = E_FAIL;
} }
@ -1379,6 +1519,23 @@ CInputPin::CreatePinHandle(
PKSDATAFORMAT DataFormat; PKSDATAFORMAT DataFormat;
ULONG Length; ULONG Length;
HRESULT hr; 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) if (m_hPin != INVALID_HANDLE_VALUE)
{ {
@ -1427,7 +1584,7 @@ CInputPin::CreatePinHandle(
} }
// create pin // create pin
hr = KsCreatePin(m_hFilter, PinConnect, GENERIC_WRITE, &m_hPin); hr = KsCreatePin(hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
@ -1436,16 +1593,19 @@ CInputPin::CreatePinHandle(
CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE)); CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE)); CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
#ifdef KSPROXY_TRACE
LPOLESTR pMajor, pSub, pFormat; LPOLESTR pMajor, pSub, pFormat;
StringFromIID(m_MediaFormat.majortype, &pMajor); StringFromIID(m_MediaFormat.majortype, &pMajor);
StringFromIID(m_MediaFormat.subtype , &pSub); StringFromIID(m_MediaFormat.subtype , &pSub);
StringFromIID(m_MediaFormat.formattype, &pFormat); StringFromIID(m_MediaFormat.formattype, &pFormat);
WCHAR Buffer[200]; 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); 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(pMajor);
CoTaskMemFree(pSub); CoTaskMemFree(pSub);
CoTaskMemFree(pFormat); CoTaskMemFree(pFormat);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
if (pmt->cbFormat) if (pmt->cbFormat)
{ {
@ -1460,6 +1620,33 @@ CInputPin::CreatePinHandle(
CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat); CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat);
} }
LPGUID pGuid;
ULONG NumGuids = 0;
// get all supported sets
hr = GetSupportedSets(&pGuid, &NumGuids);
if (FAILED(hr))
{
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
#endif
return hr;
}
// load all proxy plugins
hr = LoadProxyPlugins(pGuid, NumGuids);
if (FAILED(hr))
{
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
#endif
return hr;
}
// free sets
CoTaskMemFree(pGuid);
//TODO //TODO
// connect pin pipes // connect pin pipes
@ -1471,6 +1658,137 @@ CInputPin::CreatePinHandle(
return hr; 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 HRESULT
WINAPI WINAPI
CInputPin_Constructor( CInputPin_Constructor(
@ -1482,7 +1800,7 @@ CInputPin_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
CInputPin * handler = new CInputPin(ParentFilter, PinName, hFilter, PinId, Communication); CInputPin * handler = new CInputPin(ParentFilter, PinName, PinId, Communication);
if (!handler) if (!handler)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;

View file

@ -285,10 +285,11 @@ CKsInterfaceHandler::KsProcessMediaSamples(
if (SampleList[Index]->IsSyncPoint() == S_OK) if (SampleList[Index]->IsSyncPoint() == S_OK)
Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT; Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT;
} }
#ifdef KSPROXY_TRACE
WCHAR Buffer[200]; 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); 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->Size = sizeof(KSSTREAM_HEADER) + ExtendedSize;
CurStreamHeader->PresentationTime.Denominator = 1; CurStreamHeader->PresentationTime.Denominator = 1;
@ -479,7 +480,9 @@ CKsInterfaceHandler_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n"); OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n");
#endif
CKsInterfaceHandler * handler = new CKsInterfaceHandler(); CKsInterfaceHandler * handler = new CKsInterfaceHandler();

View file

@ -116,8 +116,6 @@ CMediaSample::QueryInterface(
} }
if (IsEqualGUID(refiid, IID_IMediaSample2)) if (IsEqualGUID(refiid, IID_IMediaSample2))
{ {
OutputDebugStringW(L"CMediaSample::QueryInterface requested IMediaSample2 interface\n");
#if 0 #if 0
*Output = (IMediaSample2*)(this); *Output = (IMediaSample2*)(this);
reinterpret_cast<IMediaSample2*>(*Output)->AddRef(); reinterpret_cast<IMediaSample2*>(*Output)->AddRef();
@ -267,8 +265,6 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType) CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType)
{ {
OutputDebugStringW(L"CMediaSample::GetMediaType\n");
if (!m_MediaType) if (!m_MediaType)
{ {
*ppMediaType = NULL; *ppMediaType = NULL;
@ -352,7 +348,9 @@ CMediaSample_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CMediaSample_Constructor\n"); OutputDebugStringW(L"CMediaSample_Constructor\n");
#endif
CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize); CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize);

View file

@ -124,7 +124,9 @@ CKsNode_Constructor(
HANDLE handle; HANDLE handle;
KSNODE_CREATE NodeCreate; KSNODE_CREATE NodeCreate;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsNode_Constructor\n"); OutputDebugStringW(L"CKsNode_Constructor\n");
#endif
//setup request //setup request
NodeCreate.CreateFlags = 0; NodeCreate.CreateFlags = 0;

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,7 @@
#define _FORCENAMELESSUNION #define _FORCENAMELESSUNION
#define BUILDING_KS #define BUILDING_KS
#define _KSDDK_ #define _KSDDK_
//#define KSPROXY_TRACE
#include <dshow.h> #include <dshow.h>
//#include <streams.h> //#include <streams.h>
#include <ks.h> #include <ks.h>

View file

@ -63,7 +63,7 @@ public:
InterlockedDecrement(&m_Ref); InterlockedDecrement(&m_Ref);
if (!m_Ref) if (!m_Ref)
{ {
delete this; //delete this;
return 0; return 0;
} }
return m_Ref; return m_Ref;
@ -171,7 +171,7 @@ public:
HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages); 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() ~CKsProxy()
{ {
if (m_hDevice) if (m_hDevice)
@ -203,8 +203,23 @@ protected:
LPWSTR m_DevicePath; LPWSTR m_DevicePath;
CLSID m_DeviceInterfaceGUID; CLSID m_DeviceInterfaceGUID;
HANDLE m_hClock; 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 HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::QueryInterface( CKsProxy::QueryInterface(
@ -332,24 +347,26 @@ CKsProxy::QueryInterface(
HRESULT hr = m_Plugins[Index]->QueryInterface(refiid, Output); HRESULT hr = m_Plugins[Index]->QueryInterface(refiid, Output);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
LPOLESTR lpstr; LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr); StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CKsProxy::QueryInterface plugin %lu supports interface %s\n", Index, lpstr); swprintf(Buffer, L"CKsProxy::QueryInterface plugin %lu supports interface %s\n", Index, lpstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr); CoTaskMemFree(lpstr);
#endif
return hr; return hr;
} }
} }
} }
#ifdef KSPROXY_TRACE
WCHAR Buffer[MAX_PATH]; WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr; LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr); StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CKsProxy::QueryInterface: NoInterface for %s !!!\n", lpstr); swprintf(Buffer, L"CKsProxy::QueryInterface: NoInterface for %s !!!\n", lpstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr); CoTaskMemFree(lpstr);
#endif
return E_NOINTERFACE; return E_NOINTERFACE;
} }
@ -362,7 +379,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::GetPages(CAUUID *pPages) CKsProxy::GetPages(CAUUID *pPages)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n"); OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n");
#endif
if (!pPages) if (!pPages)
return E_POINTER; return E_POINTER;
@ -478,7 +497,10 @@ STDMETHODCALLTYPE
CKsProxy::KsGetTime( CKsProxy::KsGetTime(
LONGLONG* Time) LONGLONG* Time)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetTime\n"); OutputDebugStringW(L"CKsProxy::KsGetTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG)); return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
} }
@ -487,7 +509,10 @@ STDMETHODCALLTYPE
CKsProxy::KsSetTime( CKsProxy::KsSetTime(
LONGLONG Time) LONGLONG Time)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetTime\n"); OutputDebugStringW(L"CKsProxy::KsSetTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG)); return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
} }
@ -496,7 +521,10 @@ STDMETHODCALLTYPE
CKsProxy::KsGetPhysicalTime( CKsProxy::KsGetPhysicalTime(
LONGLONG* Time) LONGLONG* Time)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetPhysicalTime\n"); OutputDebugStringW(L"CKsProxy::KsGetPhysicalTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG)); return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
} }
@ -505,7 +533,10 @@ STDMETHODCALLTYPE
CKsProxy::KsSetPhysicalTime( CKsProxy::KsSetPhysicalTime(
LONGLONG Time) LONGLONG Time)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetPhysicalTime\n"); OutputDebugStringW(L"CKsProxy::KsSetPhysicalTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG)); return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
} }
@ -514,7 +545,10 @@ STDMETHODCALLTYPE
CKsProxy::KsGetCorrelatedTime( CKsProxy::KsGetCorrelatedTime(
KSCORRELATED_TIME* CorrelatedTime) KSCORRELATED_TIME* CorrelatedTime)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetCorrelatedTime\n"); OutputDebugStringW(L"CKsProxy::KsGetCorrelatedTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME)); return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
} }
@ -523,7 +557,9 @@ STDMETHODCALLTYPE
CKsProxy::KsSetCorrelatedTime( CKsProxy::KsSetCorrelatedTime(
KSCORRELATED_TIME* CorrelatedTime) KSCORRELATED_TIME* CorrelatedTime)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetCorrelatedTime\n"); OutputDebugStringW(L"CKsProxy::KsSetCorrelatedTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME)); return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
} }
@ -532,7 +568,9 @@ STDMETHODCALLTYPE
CKsProxy::KsGetCorrelatedPhysicalTime( CKsProxy::KsGetCorrelatedPhysicalTime(
KSCORRELATED_TIME* CorrelatedTime) KSCORRELATED_TIME* CorrelatedTime)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetCorrelatedPhysicalTime\n"); OutputDebugStringW(L"CKsProxy::KsGetCorrelatedPhysicalTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME)); return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
} }
@ -541,7 +579,10 @@ STDMETHODCALLTYPE
CKsProxy::KsSetCorrelatedPhysicalTime( CKsProxy::KsSetCorrelatedPhysicalTime(
KSCORRELATED_TIME* CorrelatedTime) KSCORRELATED_TIME* CorrelatedTime)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsSetCorrelatedPhysicalTime\n"); OutputDebugStringW(L"CKsProxy::KsSetCorrelatedPhysicalTime\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME)); return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
} }
@ -550,7 +591,9 @@ STDMETHODCALLTYPE
CKsProxy::KsGetResolution( CKsProxy::KsGetResolution(
KSRESOLUTION* Resolution) KSRESOLUTION* Resolution)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetResolution\n"); OutputDebugStringW(L"CKsProxy::KsGetResolution\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_TYPE_GET, (PVOID)Resolution, sizeof(KSRESOLUTION)); return PerformClockProperty(KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_TYPE_GET, (PVOID)Resolution, sizeof(KSRESOLUTION));
} }
@ -559,7 +602,9 @@ STDMETHODCALLTYPE
CKsProxy::KsGetState( CKsProxy::KsGetState(
KSSTATE* State) KSSTATE* State)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetState\n"); OutputDebugStringW(L"CKsProxy::KsGetState\n");
#endif
return PerformClockProperty(KSPROPERTY_CLOCK_STATE, KSPROPERTY_TYPE_GET, (PVOID)State, sizeof(KSSTATE)); return PerformClockProperty(KSPROPERTY_CLOCK_STATE, KSPROPERTY_TYPE_GET, (PVOID)State, sizeof(KSSTATE));
} }
@ -575,7 +620,9 @@ CKsProxy::GetTime(
KSPROPERTY Property; KSPROPERTY Property;
ULONG BytesReturned; ULONG BytesReturned;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetTime\n"); OutputDebugStringW(L"CKsProxy::GetTime\n");
#endif
if (!pTime) if (!pTime)
return E_POINTER; return E_POINTER;
@ -620,7 +667,9 @@ CKsProxy::AdviseTime(
ULONG BytesReturned; ULONG BytesReturned;
PKSEVENT_TIME_MARK Event; PKSEVENT_TIME_MARK Event;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::AdviseTime\n"); OutputDebugStringW(L"CKsProxy::AdviseTime\n");
#endif
// //
//FIXME locks //FIXME locks
@ -686,7 +735,9 @@ CKsProxy::AdvisePeriodic(
ULONG BytesReturned; ULONG BytesReturned;
PKSEVENT_TIME_INTERVAL Event; PKSEVENT_TIME_INTERVAL Event;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n"); OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n");
#endif
// //
//FIXME locks //FIXME locks
@ -748,7 +799,9 @@ CKsProxy::Unadvise(
HRESULT hr; HRESULT hr;
ULONG BytesReturned; ULONG BytesReturned;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Unadvise\n"); OutputDebugStringW(L"CKsProxy::Unadvise\n");
#endif
if (m_hClock) if (m_hClock)
{ {
@ -786,7 +839,10 @@ CKsProxy::GetCapabilities(
Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES; Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetCapabilities\n"); OutputDebugStringW(L"CKsProxy::GetCapabilities\n");
#endif
if (!pCapabilities) if (!pCapabilities)
return E_POINTER; return E_POINTER;
@ -836,7 +892,9 @@ CKsProxy::CheckCapabilities(
DWORD Capabilities; DWORD Capabilities;
HRESULT hr; HRESULT hr;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::CheckCapabilities\n"); OutputDebugStringW(L"CKsProxy::CheckCapabilities\n");
#endif
if (!pCapabilities) if (!pCapabilities)
return E_POINTER; return E_POINTER;
@ -914,11 +972,13 @@ CKsProxy::IsFormatSupported(
ULONG Index; ULONG Index;
HRESULT hr = S_FALSE; HRESULT hr = S_FALSE;
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
LPOLESTR pstr; LPOLESTR pstr;
StringFromCLSID(*pFormat, &pstr); StringFromCLSID(*pFormat, &pstr);
swprintf(Buffer, L"CKsProxy::IsFormatSupported %s\n",pstr); swprintf(Buffer, L"CKsProxy::IsFormatSupported %s\n",pstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
if (!pFormat) if (!pFormat)
return E_POINTER; return E_POINTER;
@ -927,8 +987,10 @@ CKsProxy::IsFormatSupported(
hr = GetMediaSeekingFormats(&FormatList); hr = GetMediaSeekingFormats(&FormatList);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy::IsFormatSupported NumFormat %lu\n",FormatList->Count); swprintf(Buffer, L"CKsProxy::IsFormatSupported NumFormat %lu\n",FormatList->Count);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
//iterate through format list //iterate through format list
pGuid = (LPGUID)(FormatList + 1); pGuid = (LPGUID)(FormatList + 1);
@ -961,7 +1023,9 @@ CKsProxy::IsFormatSupported(
{ {
// plugin does not support interface // plugin does not support interface
hr = S_FALSE; hr = S_FALSE;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n"); OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n");
#endif
break; break;
} }
@ -986,7 +1050,9 @@ CKsProxy::QueryPreferredFormat(
HRESULT hr; HRESULT hr;
ULONG Index; ULONG Index;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n"); OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n");
#endif
if (!pFormat) if (!pFormat)
return E_POINTER; return E_POINTER;
@ -1046,7 +1112,9 @@ CKsProxy::GetTimeFormat(
Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT; Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetTimeFormat\n"); OutputDebugStringW(L"CKsProxy::GetTimeFormat\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned); 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)) 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; GUID Format;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n"); OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n");
#endif
if (FAILED(QueryPreferredFormat(&Format))) if (FAILED(QueryPreferredFormat(&Format)))
return S_FALSE; return S_FALSE;
@ -1110,7 +1180,9 @@ CKsProxy::SetTimeFormat(
Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT; Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
Property.Flags = KSPROPERTY_TYPE_SET; Property.Flags = KSPROPERTY_TYPE_SET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetTimeFormat\n"); OutputDebugStringW(L"CKsProxy::SetTimeFormat\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned); 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)) 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.Id = KSPROPERTY_MEDIASEEKING_DURATION;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetDuration\n"); OutputDebugStringW(L"CKsProxy::GetDuration\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pDuration, sizeof(LONGLONG), &BytesReturned); 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)) 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.Id = KSPROPERTY_MEDIASEEKING_STOPPOSITION;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetStopPosition\n"); OutputDebugStringW(L"CKsProxy::GetStopPosition\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pStop, sizeof(LONGLONG), &BytesReturned); 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)) 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.Id = KSPROPERTY_MEDIASEEKING_POSITION;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetCurrentPosition\n"); OutputDebugStringW(L"CKsProxy::GetCurrentPosition\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pCurrent, sizeof(LONGLONG), &BytesReturned); 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)) 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.Id = KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT;
Property.Property.Flags = KSPROPERTY_TYPE_GET; Property.Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n"); OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n");
#endif
if (!pTargetFormat) if (!pTargetFormat)
{ {
@ -1383,7 +1463,9 @@ CKsProxy::SetPositions(
Positions.Stop = *pStop; Positions.Stop = *pStop;
Positions.StopFlags = (KS_SEEKING_FLAGS)dwStopFlags; Positions.StopFlags = (KS_SEEKING_FLAGS)dwStopFlags;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetPositions\n"); OutputDebugStringW(L"CKsProxy::SetPositions\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Positions, sizeof(KSPROPERTY_POSITIONS), &BytesReturned); hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Positions, sizeof(KSPROPERTY_POSITIONS), &BytesReturned);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
@ -1444,7 +1526,9 @@ CKsProxy::GetPositions(
{ {
HRESULT hr; HRESULT hr;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPositions\n"); OutputDebugStringW(L"CKsProxy::GetPositions\n");
#endif
hr = GetCurrentPosition(pCurrent); hr = GetCurrentPosition(pCurrent);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
@ -1468,7 +1552,9 @@ CKsProxy::GetAvailable(
Property.Id = KSPROPERTY_MEDIASEEKING_AVAILABLE; Property.Id = KSPROPERTY_MEDIASEEKING_AVAILABLE;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetAvailable\n"); OutputDebugStringW(L"CKsProxy::GetAvailable\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Media, sizeof(KSPROPERTY_MEDIAAVAILABLE), &BytesReturned); 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)) 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( CKsProxy::SetRate(
double dRate) double dRate)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetRate\n"); OutputDebugStringW(L"CKsProxy::SetRate\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1521,7 +1609,9 @@ STDMETHODCALLTYPE
CKsProxy::GetRate( CKsProxy::GetRate(
double *pdRate) double *pdRate)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetRate\n"); OutputDebugStringW(L"CKsProxy::GetRate\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1538,7 +1628,9 @@ CKsProxy::GetPreroll(
Property.Id = KSPROPERTY_MEDIASEEKING_PREROLL; Property.Id = KSPROPERTY_MEDIASEEKING_PREROLL;
Property.Flags = KSPROPERTY_TYPE_GET; Property.Flags = KSPROPERTY_TYPE_GET;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetPreroll\n"); OutputDebugStringW(L"CKsProxy::GetPreroll\n");
#endif
hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pllPreroll, sizeof(LONGLONG), &BytesReturned); 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)) 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; HRESULT hr;
PIN_DIRECTION PinDirection; PIN_DIRECTION PinDirection;
KSPIN_COMMUNICATION Communication; KSPIN_COMMUNICATION Communication;
WCHAR Buffer[100];
for(Index = 0; Index < m_Pins.size(); Index++) 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); swprintf(Buffer, L"CKsProxy::GetMiscFlags stub Flags %x\n", Flags);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
return Flags; return Flags;
} }
@ -1625,8 +1721,11 @@ CKsProxy::KsProperty(
ULONG DataLength, ULONG DataLength,
ULONG* BytesReturned) ULONG* BytesReturned)
{ {
assert(m_hDevice != 0); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsProperty\n"); OutputDebugStringW(L"CKsProxy::KsProperty\n");
#endif
assert(m_hDevice != 0);
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned); return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
} }
@ -1639,8 +1738,11 @@ CKsProxy::KsMethod(
ULONG DataLength, ULONG DataLength,
ULONG* BytesReturned) ULONG* BytesReturned)
{ {
assert(m_hDevice != 0); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsMethod\n"); OutputDebugStringW(L"CKsProxy::KsMethod\n");
#endif
assert(m_hDevice != 0);
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned); return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
} }
@ -1653,8 +1755,11 @@ CKsProxy::KsEvent(
ULONG DataLength, ULONG DataLength,
ULONG* BytesReturned) ULONG* BytesReturned)
{ {
assert(m_hDevice != 0); #ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsEvent\n"); OutputDebugStringW(L"CKsProxy::KsEvent\n");
#endif
assert(m_hDevice != 0);
if (EventLength) if (EventLength)
return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned); return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
else else
@ -1677,7 +1782,9 @@ CKsProxy::Set(
{ {
ULONG BytesReturned; ULONG BytesReturned;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Set\n"); OutputDebugStringW(L"CKsProxy::Set\n");
#endif
if (cbInstanceData) if (cbInstanceData)
{ {
@ -1721,7 +1828,9 @@ CKsProxy::Get(
{ {
ULONG BytesReturned; ULONG BytesReturned;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Get\n"); OutputDebugStringW(L"CKsProxy::Get\n");
#endif
if (cbInstanceData) if (cbInstanceData)
{ {
@ -1762,7 +1871,9 @@ CKsProxy::QuerySupported(
KSPROPERTY Property; KSPROPERTY Property;
ULONG BytesReturned; ULONG BytesReturned;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QuerySupported\n"); OutputDebugStringW(L"CKsProxy::QuerySupported\n");
#endif
Property.Set = guidPropSet; Property.Set = guidPropSet;
Property.Id = dwPropID; Property.Id = dwPropID;
@ -1787,7 +1898,9 @@ CKsProxy::CreateNodeInstance(
{ {
HRESULT hr; HRESULT hr;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n"); OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n");
#endif
*Interface = NULL; *Interface = NULL;
@ -1812,7 +1925,9 @@ STDMETHODCALLTYPE
CKsProxy::KsAddAggregate( CKsProxy::KsAddAggregate(
IN REFGUID AggregateClass) IN REFGUID AggregateClass)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n"); OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1821,7 +1936,10 @@ STDMETHODCALLTYPE
CKsProxy::KsRemoveAggregate( CKsProxy::KsRemoveAggregate(
REFGUID AggregateClass) REFGUID AggregateClass)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n"); OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1834,8 +1952,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::IsDirty() CKsProxy::IsDirty()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n"); OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n");
DebugBreak(); DebugBreak();
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1853,7 +1973,9 @@ CKsProxy::Load(
ULONG PinId; ULONG PinId;
LPOLESTR pMajor, pSub, pFormat; LPOLESTR pMajor, pSub, pFormat;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Load\n"); OutputDebugStringW(L"CKsProxy::Load\n");
#endif
#if 0 #if 0
ULONG Version = ReadInt(pStm, hr); ULONG Version = ReadInt(pStm, hr);
@ -1923,7 +2045,10 @@ CKsProxy::Save(
IStream *pStm, IStream *pStm,
BOOL fClearDirty) BOOL fClearDirty)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Save Notimplemented\n"); OutputDebugStringW(L"CKsProxy::Save Notimplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1932,8 +2057,11 @@ STDMETHODCALLTYPE
CKsProxy::GetSizeMax( CKsProxy::GetSizeMax(
ULARGE_INTEGER *pcbSize) ULARGE_INTEGER *pcbSize)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n"); OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n");
DebugBreak(); DebugBreak();
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1945,8 +2073,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink) CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::DeviceInfo\n"); OutputDebugStringW(L"CKsProxy::DeviceInfo\n");
#endif
if (!m_DevicePath) if (!m_DevicePath)
{ {
@ -1971,7 +2100,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Reassociate(void) CKsProxy::Reassociate(void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Reassociate\n"); OutputDebugStringW(L"CKsProxy::Reassociate\n");
#endif
if (!m_DevicePath || m_hDevice) if (!m_DevicePath || m_hDevice)
{ {
@ -1994,7 +2125,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Disassociate(void) CKsProxy::Disassociate(void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Disassociate\n"); OutputDebugStringW(L"CKsProxy::Disassociate\n");
#endif
if (!m_hDevice) if (!m_hDevice)
return E_HANDLE; return E_HANDLE;
@ -2012,7 +2145,10 @@ HANDLE
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::KsGetClockHandle() CKsProxy::KsGetClockHandle()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n"); OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n");
#endif
return m_hClock; return m_hClock;
} }
@ -2025,7 +2161,10 @@ HANDLE
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::KsGetObjectHandle() CKsProxy::KsGetObjectHandle()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n"); OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n");
#endif
return m_hDevice; return m_hDevice;
} }
@ -2036,7 +2175,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::InitNew( void) CKsProxy::InitNew( void)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::InitNew\n"); OutputDebugStringW(L"CKsProxy::InitNew\n");
#endif
return S_OK; return S_OK;
} }
@ -2323,7 +2465,6 @@ CKsProxy::CreatePins()
KSPIN_DATAFLOW DataFlow; KSPIN_DATAFLOW DataFlow;
KSPIN_COMMUNICATION Communication; KSPIN_COMMUNICATION Communication;
HRESULT hr; HRESULT hr;
WCHAR Buffer[100];
LPWSTR PinName; LPWSTR PinName;
IPin * pPin; IPin * pPin;
ULONG InputPin = 0; ULONG InputPin = 0;
@ -2390,8 +2531,12 @@ CKsProxy::CreatePins()
// store pins // store pins
m_Pins.push_back(pPin); m_Pins.push_back(pPin);
#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
swprintf(Buffer, L"Index %lu DataFlow %lu Name %s\n", Index, DataFlow, PinName); swprintf(Buffer, L"Index %lu DataFlow %lu Name %s\n", Index, DataFlow, PinName);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
} }
return S_OK; return S_OK;
@ -2402,14 +2547,16 @@ STDMETHODCALLTYPE
CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog) CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
{ {
HRESULT hr; HRESULT hr;
WCHAR Buffer[100];
VARIANT varName; VARIANT varName;
LPGUID pGuid; LPGUID pGuid;
ULONG NumGuids = 0; ULONG NumGuids = 0;
HDEVINFO hList; HDEVINFO hList;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
#ifdef KSPROXY_TRACE
WCHAR Buffer[100];
OutputDebugStringW(L"CKsProxy::Load\n"); OutputDebugStringW(L"CKsProxy::Load\n");
#endif
// read device path // read device path
varName.vt = VT_BSTR; varName.vt = VT_BSTR;
@ -2417,14 +2564,18 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
if (FAILED(hr)) if (FAILED(hr))
{ {
#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy::Load Read %lx\n", hr); swprintf(Buffer, L"CKsProxy::Load Read %lx\n", hr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError()); return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
} }
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"DevicePath: "); OutputDebugStringW(L"DevicePath: ");
OutputDebugStringW(varName.bstrVal); OutputDebugStringW(varName.bstrVal);
OutputDebugStringW(L"\n"); OutputDebugStringW(L"\n");
#endif
// create device list // create device list
hList = SetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL); hList = SetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL);
@ -2453,9 +2604,10 @@ CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
if (m_hDevice == INVALID_HANDLE_VALUE) if (m_hDevice == INVALID_HANDLE_VALUE)
{ {
// failed to open device // failed to open device
#ifdef KSPROXY_TRACE
swprintf(Buffer, L"CKsProxy:: failed to open device with %lx\n", GetLastError()); swprintf(Buffer, L"CKsProxy:: failed to open device with %lx\n", GetLastError());
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError()); return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
} }
@ -2493,7 +2645,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Save\n"); OutputDebugStringW(L"CKsProxy::Save\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -2506,7 +2660,9 @@ STDMETHODCALLTYPE
CKsProxy::GetClassID( CKsProxy::GetClassID(
CLSID *pClassID) CLSID *pClassID)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetClassID\n"); OutputDebugStringW(L"CKsProxy::GetClassID\n");
#endif
CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID)); CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID));
return S_OK; return S_OK;
@ -2516,8 +2672,21 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Stop() CKsProxy::Stop()
{ {
OutputDebugStringW(L"CKsProxy::Stop : NotImplemented\n"); HRESULT hr;
return E_NOTIMPL;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Stop\n");
#endif
EnterCriticalSection(&m_Lock);
hr = SetPinState(KSSTATE_STOP);
if (SUCCEEDED(hr))
m_FilterState = State_Stopped;
LeaveCriticalSection(&m_Lock);
return hr;
} }
HRESULT HRESULT
@ -2526,17 +2695,28 @@ CKsProxy::Pause()
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Pause\n"); OutputDebugStringW(L"CKsProxy::Pause\n");
#endif
EnterCriticalSection(&m_Lock);
if (m_FilterState == State_Running)
{
hr = SetPinState(KSSTATE_STOP);
}
if (SUCCEEDED(hr))
{
if (m_FilterState == State_Stopped) if (m_FilterState == State_Stopped)
{ {
hr = SetPinState(KSSTATE_PAUSE); hr = SetPinState(KSSTATE_PAUSE);
if (FAILED(hr)) }
return hr;
} }
if (SUCCEEDED(hr))
m_FilterState = State_Paused; m_FilterState = State_Paused;
LeaveCriticalSection(&m_Lock);
return hr; return hr;
} }
@ -2548,23 +2728,32 @@ CKsProxy::Run(
{ {
HRESULT hr; HRESULT hr;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Run\n"); OutputDebugStringW(L"CKsProxy::Run\n");
#endif
EnterCriticalSection(&m_Lock);
if (m_FilterState == State_Stopped) if (m_FilterState == State_Stopped)
{ {
LeaveCriticalSection(&m_Lock);
// setting filter state to pause // setting filter state to pause
hr = Pause(); hr = Pause();
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
EnterCriticalSection(&m_Lock);
assert(m_FilterState == State_Paused); assert(m_FilterState == State_Paused);
} }
hr = SetPinState(KSSTATE_RUN); hr = SetPinState(KSSTATE_RUN);
if (FAILED(hr))
return hr;
if (SUCCEEDED(hr))
{
m_FilterState = State_Running; m_FilterState = State_Running;
}
LeaveCriticalSection(&m_Lock);
return hr; return hr;
} }
@ -2631,9 +2820,11 @@ CKsProxy::SetPinState(
// now set state // now set state
hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesReturned); hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesReturned);
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
swprintf(Buffer, L"CKsProxy::SetPinState Index %u State %u hr %lx\n", Index, State, hr); swprintf(Buffer, L"CKsProxy::SetPinState Index %u State %u hr %lx\n", Index, State, hr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
@ -2647,6 +2838,9 @@ CKsProxy::GetState(
DWORD dwMilliSecsTimeout, DWORD dwMilliSecsTimeout,
FILTER_STATE *State) FILTER_STATE *State)
{ {
if (!State)
return E_POINTER;
*State = m_FilterState; *State = m_FilterState;
return S_OK; return S_OK;
} }
@ -2666,8 +2860,9 @@ CKsProxy::SetSyncSource(
ULONG BytesReturned; ULONG BytesReturned;
PIN_DIRECTION PinDir; PIN_DIRECTION PinDir;
// Plug In Distributor: IKsClock #ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetSyncSource\n"); OutputDebugStringW(L"CKsProxy::SetSyncSource\n");
#endif
// FIXME // FIXME
// need locks // need locks
@ -2761,7 +2956,9 @@ CKsProxy::SetSyncSource(
} }
m_ReferenceClock = pClock; m_ReferenceClock = pClock;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::SetSyncSource done\n"); OutputDebugStringW(L"CKsProxy::SetSyncSource done\n");
#endif
return S_OK; return S_OK;
} }
@ -2770,7 +2967,9 @@ STDMETHODCALLTYPE
CKsProxy::GetSyncSource( CKsProxy::GetSyncSource(
IReferenceClock **pClock) IReferenceClock **pClock)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::GetSyncSource\n"); OutputDebugStringW(L"CKsProxy::GetSyncSource\n");
#endif
if (!pClock) if (!pClock)
return E_POINTER; return E_POINTER;
@ -2787,7 +2986,10 @@ STDMETHODCALLTYPE
CKsProxy::EnumPins( CKsProxy::EnumPins(
IEnumPins **ppEnum) IEnumPins **ppEnum)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::EnumPins\n"); OutputDebugStringW(L"CKsProxy::EnumPins\n");
#endif
return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum); return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum);
} }
@ -2798,7 +3000,9 @@ CKsProxy::FindPin(
{ {
ULONG PinId; ULONG PinId;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::FindPin\n"); OutputDebugStringW(L"CKsProxy::FindPin\n");
#endif
if (!ppPin) if (!ppPin)
return E_POINTER; return E_POINTER;
@ -2834,7 +3038,9 @@ CKsProxy::QueryFilterInfo(
if (!pInfo) if (!pInfo)
return E_POINTER; return E_POINTER;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n"); OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n");
#endif
pInfo->achName[0] = L'\0'; pInfo->achName[0] = L'\0';
pInfo->pGraph = m_pGraph; pInfo->pGraph = m_pGraph;
@ -2851,7 +3057,11 @@ CKsProxy::JoinFilterGraph(
IFilterGraph *pGraph, IFilterGraph *pGraph,
LPCWSTR pName) 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) if (pGraph)
{ {
@ -2873,7 +3083,9 @@ STDMETHODCALLTYPE
CKsProxy::QueryVendorInfo( CKsProxy::QueryVendorInfo(
LPWSTR *pVendorInfo) LPWSTR *pVendorInfo)
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n"); OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n");
#endif
return StringFromCLSID(CLSID_Proxy, pVendorInfo); return StringFromCLSID(CLSID_Proxy, pVendorInfo);
} }
@ -2885,7 +3097,10 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Register() CKsProxy::Register()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n"); OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -2893,7 +3108,9 @@ HRESULT
STDMETHODCALLTYPE STDMETHODCALLTYPE
CKsProxy::Unregister() CKsProxy::Unregister()
{ {
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n"); OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n");
#endif
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -2904,11 +3121,13 @@ CKsProxy_Constructor(
REFIID riid, REFIID riid,
LPVOID * ppv) LPVOID * ppv)
{ {
#ifdef KSPROXY_TRACE
WCHAR Buffer[100]; WCHAR Buffer[100];
LPOLESTR pstr; LPOLESTR pstr;
StringFromCLSID(riid, &pstr); StringFromCLSID(riid, &pstr);
swprintf(Buffer, L"CKsProxy_Constructor pUnkOuter %p riid %s\n", pUnkOuter, pstr); swprintf(Buffer, L"CKsProxy_Constructor pUnkOuter %p riid %s\n", pUnkOuter, pstr);
OutputDebugStringW(Buffer); OutputDebugStringW(Buffer);
#endif
CKsProxy * handler = new CKsProxy(); CKsProxy * handler = new CKsProxy();

View file

@ -88,7 +88,9 @@ STDMETHODCALLTYPE
CKsQualityForwarder::KsFlushClient( CKsQualityForwarder::KsFlushClient(
IN IKsPin *Pin) IN IKsPin *Pin)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("UNIMPLEMENTED\n"); OutputDebugString("UNIMPLEMENTED\n");
#endif
} }
HRESULT HRESULT
@ -101,14 +103,18 @@ CKsQualityForwarder_Constructor(
HRESULT hr; HRESULT hr;
HANDLE handle; HANDLE handle;
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsQualityForwarder_Constructor\n"); OutputDebugStringW(L"CKsQualityForwarder_Constructor\n");
#endif
// open default clock // open default clock
hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle); hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle);
if (hr != NOERROR) if (hr != NOERROR)
{ {
#ifdef KSPROXY_TRACE
OutputDebugString("CKsClockForwarder_Constructor failed to open device\n"); OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
#endif
return hr; return hr;
} }

View file

@ -1,6 +0,0 @@
LIBRARY "idndl.dll"
EXPORTS
DownlevelGetLocaleScripts = DownlevelGetLocaleScripts@12 @1
DownlevelGetStringScripts@20 = kernel32.GetStringScripts @2
DownlevelVerifyScripts@20 = kernel32.VerifyScripts @3

View file

@ -7,5 +7,5 @@
</group> </group>
<redefine name="WINVER">0x600</redefine> <redefine name="WINVER">0x600</redefine>
<file>idndl.cpp</file> <file>idndl.cpp</file>
<importlibrary definition="idndl-$(ARCH).def" /> <importlibrary definition="idndl.spec" />
</module> </module>

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

View file

@ -16,8 +16,7 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
/* $Id$ /*
*
* PROJECT: ReactOS Access Control List Editor * PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/acledit.c * FILE: lib/acledit/acledit.c
* PURPOSE: Access Control List Editor * PURPOSE: Access Control List Editor

View file

@ -1,5 +1,4 @@
/* $Id$ /*
*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Access Control List Editor * PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/stubs.c * FILE: lib/acledit/stubs.c

View file

@ -416,8 +416,8 @@ HRESULT STDMETHODCALLTYPE CMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WP
if ((infoPtr->dwMask & SMIM_FLAGS) != 0) if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
if (psmd->uId == FCIDM_MENU_FAVORITES) if (psmd->uId == FCIDM_MENU_FAVORITES)
infoPtr->dwFlags |= SMIF_DROPCASCADE; infoPtr->dwFlags |= SMIF_DROPCASCADE;
else else{
infoPtr->dwFlags |= SMIF_TRACKPOPUP; infoPtr->dwFlags |= SMIF_TRACKPOPUP;}
if ((infoPtr->dwMask & SMIM_ICON) != 0) if ((infoPtr->dwMask & SMIM_ICON) != 0)
infoPtr->iIcon = -1; infoPtr->iIcon = -1;
} }

View file

@ -292,7 +292,7 @@ CreateBitmap(INT Width,
INT Height, INT Height,
UINT Planes, UINT Planes,
UINT BitsPixel, UINT BitsPixel,
PCVOID pUnsafeBits) CONST VOID* pUnsafeBits)
{ {
/* FIXME some part should be done in user mode */ /* FIXME some part should be done in user mode */
if (Width && Height) if (Width && Height)

View file

@ -10,7 +10,6 @@ typedef VOID
typedef VOID typedef VOID
(WINAPI *PINTERFACE_DEREFERENCE)( (WINAPI *PINTERFACE_DEREFERENCE)(
PVOID Context); PVOID Context);
#define DDKAPI __stdcall // FIXME
#include <ntndk.h> #include <ntndk.h>
#include <hidusage.h> #include <hidusage.h>
#include <hidclass.h> #include <hidclass.h>

View file

@ -10,6 +10,7 @@
<define name="wcsnicmp">_wcsnicmp</define> <define name="wcsnicmp">_wcsnicmp</define>
<define name="_SETUPAPI_" /> <define name="_SETUPAPI_" />
<define name="_CFGMGR32_" />
<library>pnp_client</library> <library>pnp_client</library>
<library>uuid</library> <library>uuid</library>
<library>wine</library> <library>wine</library>

View file

@ -45,11 +45,6 @@
#include <pseh/pseh2.h> #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 <pnp_c.h>
#include "rpc_private.h" #include "rpc_private.h"
#include "resource.h" #include "resource.h"
@ -61,6 +56,8 @@ typedef RESOURCEID *PRESOURCEID;
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057 #define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057
#define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058 #define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
#define CMP_MAGIC 0x01234567
struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */ struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */
{ {
LIST_ENTRY ListEntry; LIST_ENTRY ListEntry;

View file

@ -23,7 +23,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassUnload(PVOID ClassData) BatteryClassUnload(PVOID ClassData)
{ {
PBATTERY_CLASS_DATA BattClass = ClassData; PBATTERY_CLASS_DATA BattClass = ClassData;
@ -44,7 +44,7 @@ BatteryClassUnload(PVOID ClassData)
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassSystemControl(PVOID ClassData, BatteryClassSystemControl(PVOID ClassData,
PVOID WmiLibContext, PVOID WmiLibContext,
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
@ -58,7 +58,7 @@ BatteryClassSystemControl(PVOID ClassData,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassQueryWmiDataBlock(PVOID ClassData, BatteryClassQueryWmiDataBlock(PVOID ClassData,
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp, PIRP Irp,
@ -74,7 +74,7 @@ BatteryClassQueryWmiDataBlock(PVOID ClassData,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassStatusNotify(PVOID ClassData) BatteryClassStatusNotify(PVOID ClassData)
{ {
PBATTERY_CLASS_DATA BattClass = ClassData; PBATTERY_CLASS_DATA BattClass = ClassData;
@ -129,7 +129,7 @@ BatteryClassStatusNotify(PVOID ClassData)
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo, BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
PVOID *ClassData) PVOID *ClassData)
{ {
@ -172,7 +172,7 @@ BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassIoctl(PVOID ClassData, BatteryClassIoctl(PVOID ClassData,
PIRP Irp) PIRP Irp)
{ {

View file

@ -7,6 +7,9 @@
<directory name="cmbatt"> <directory name="cmbatt">
<xi:include href="cmbatt/cmbatt.rbuild" /> <xi:include href="cmbatt/cmbatt.rbuild" />
</directory> </directory>
<directory name="compbatt">
<xi:include href="compbatt/compbatt.rbuild" />
</directory>
</group> </group>
<module name="acpi" type="kernelmodedriver" installbase="system32/drivers" installname="acpi.sys" allowwarnings="true"> <module name="acpi" type="kernelmodedriver" installbase="system32/drivers" installname="acpi.sys" allowwarnings="true">
@ -26,6 +29,7 @@
</directory> </directory>
<file>osl.c</file> <file>osl.c</file>
<file>acpienum.c</file> <file>acpienum.c</file>
<file>eval.c</file>
<file>interface.c</file> <file>interface.c</file>
<file>pnp.c</file> <file>pnp.c</file>
<file>power.c</file> <file>power.c</file>

View file

@ -58,6 +58,7 @@ KSPIN_LOCK acpi_bus_event_lock;
LIST_HEAD(acpi_bus_event_list); LIST_HEAD(acpi_bus_event_list);
//DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue); //DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
KEVENT AcpiEventQueue; KEVENT AcpiEventQueue;
KDPC event_dpc;
static int static int
@ -455,6 +456,21 @@ acpi_bus_get_perf_flags (
Event Management 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 int
acpi_bus_generate_event ( acpi_bus_generate_event (
@ -463,10 +479,8 @@ acpi_bus_generate_event (
int data) int data)
{ {
struct acpi_bus_event *event = NULL; struct acpi_bus_event *event = NULL;
//unsigned long flags = 0;
KIRQL OldIrql;
DPRINT1("acpi_bus_generate_event"); DPRINT("acpi_bus_generate_event");
if (!device) if (!device)
return_VALUE(AE_BAD_PARAMETER); return_VALUE(AE_BAD_PARAMETER);
@ -484,14 +498,8 @@ acpi_bus_generate_event (
event->type = type; event->type = type;
event->data = data; event->data = data;
//spin_lock_irqsave(&acpi_bus_event_lock, flags); if (!KeInsertQueueDpc(&event_dpc, event, NULL))
KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql); ExFreePool(event);
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);
return_VALUE(0); return_VALUE(0);
} }
@ -506,7 +514,7 @@ acpi_bus_receive_event (
//DECLARE_WAITQUEUE(wait, current); //DECLARE_WAITQUEUE(wait, current);
DPRINT1("acpi_bus_receive_event"); DPRINT("acpi_bus_receive_event");
if (!event) if (!event)
return AE_BAD_PARAMETER; return AE_BAD_PARAMETER;
@ -1153,9 +1161,11 @@ acpi_bus_add (
case ACPI_BUS_TYPE_SYSTEM: case ACPI_BUS_TYPE_SYSTEM:
sprintf(device->pnp.bus_id, "%s", "ACPI"); sprintf(device->pnp.bus_id, "%s", "ACPI");
break; break;
case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_POWER_BUTTON: case ACPI_BUS_TYPE_POWER_BUTTON:
sprintf(device->pnp.bus_id, "%s", "PWRF"); sprintf(device->pnp.bus_id, "%s", "PWRF");
break; break;
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON: case ACPI_BUS_TYPE_SLEEP_BUTTON:
sprintf(device->pnp.bus_id, "%s", "SLPF"); sprintf(device->pnp.bus_id, "%s", "SLPF");
break; break;
@ -1262,9 +1272,15 @@ acpi_bus_add (
hid = ACPI_THERMAL_HID; hid = ACPI_THERMAL_HID;
break; break;
case ACPI_BUS_TYPE_POWER_BUTTON: case ACPI_BUS_TYPE_POWER_BUTTON:
hid = ACPI_BUTTON_HID_POWER;
break;
case ACPI_BUS_TYPE_POWER_BUTTONF:
hid = ACPI_BUTTON_HID_POWERF; hid = ACPI_BUTTON_HID_POWERF;
break; break;
case ACPI_BUS_TYPE_SLEEP_BUTTON: case ACPI_BUS_TYPE_SLEEP_BUTTON:
hid = ACPI_BUTTON_HID_SLEEP;
break;
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
hid = ACPI_BUTTON_HID_SLEEPF; hid = ACPI_BUTTON_HID_SLEEPF;
break; break;
} }
@ -1326,7 +1342,9 @@ acpi_bus_add (
*/ */
switch (type) { switch (type) {
case ACPI_BUS_TYPE_POWER_BUTTON: case ACPI_BUS_TYPE_POWER_BUTTON:
case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON: case ACPI_BUS_TYPE_SLEEP_BUTTON:
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
break; break;
default: default:
status = AcpiAttachData(device->handle, status = AcpiAttachData(device->handle,
@ -1530,16 +1548,40 @@ acpi_bus_scan_fixed (
if (!root) if (!root)
return_VALUE(AE_NOT_FOUND); return_VALUE(AE_NOT_FOUND);
/* /* If ACPI_FADT_POWER_BUTTON is set, then a control
* Enumerate all fixed-feature devices. * method power button is present. Otherwise, a fixed
* power button is present.
*/ */
if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON) if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON)
result = acpi_bus_add(&device, acpi_root, result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTON); 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) if (AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON)
result = acpi_bus_add(&device, acpi_root, result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTON); 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); return_VALUE(result);
} }
@ -1549,120 +1591,6 @@ acpi_bus_scan_fixed (
Initialization/Cleanup 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 int
acpi_bus_init (void) acpi_bus_init (void)
{ {
@ -1671,6 +1599,8 @@ acpi_bus_init (void)
DPRINT("acpi_bus_init"); DPRINT("acpi_bus_init");
KeInitializeDpc(&event_dpc, acpi_bus_generate_event_dpc, NULL);
status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION); status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
DPRINT1("Unable to start the ACPI Interpreter\n"); DPRINT1("Unable to start the ACPI Interpreter\n");
@ -1701,13 +1631,6 @@ acpi_bus_init (void)
/* Initialize sleep structures */ /* Initialize sleep structures */
//acpi_sleep_init(); //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. * Register the for all standard device notifications.
*/ */
@ -1726,6 +1649,7 @@ acpi_bus_init (void)
if (result) if (result)
goto error2; goto error2;
/* /*
* Enumerate devices in the ACPI namespace. * Enumerate devices in the ACPI namespace.
*/ */
@ -1736,7 +1660,6 @@ acpi_bus_init (void)
if (result) if (result)
DPRINT1("acpi_bus_scan failed\n"); DPRINT1("acpi_bus_scan failed\n");
//acpi_motherboard_init();
return_VALUE(0); return_VALUE(0);
/* Mimic structured exception handling */ /* Mimic structured exception handling */

View file

@ -57,6 +57,11 @@ struct acpi_button {
UINT8 type; UINT8 type;
unsigned long pushed; unsigned long pushed;
}; };
struct acpi_device *power_button;
struct acpi_device *sleep_button;
struct acpi_device *lid_button;
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
Driver Interface Driver Interface
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
@ -113,10 +118,6 @@ acpi_button_add (
ACPI_STATUS status = AE_OK; ACPI_STATUS status = AE_OK;
struct acpi_button *button = NULL; 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"); ACPI_FUNCTION_TRACE("acpi_button_add");
if (!device) if (!device)

View file

@ -8,6 +8,9 @@
#include <acpi_bus.h> #include <acpi_bus.h>
#include <acpi_drivers.h> #include <acpi_drivers.h>
#include <initguid.h>
#include <poclass.h>
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
@ -33,9 +36,13 @@ Bus_PDO_PnP (
{ {
NTSTATUS status; NTSTATUS status;
POWER_STATE state; POWER_STATE state;
struct acpi_device *device = NULL;
PAGED_CODE (); 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 // 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 // defer these irps. Therefore we do not pass them down but merely
@ -45,7 +52,6 @@ Bus_PDO_PnP (
switch (IrpStack->MinorFunction) { switch (IrpStack->MinorFunction) {
case IRP_MN_START_DEVICE: case IRP_MN_START_DEVICE:
// //
// Here we do what ever initialization and ``turning on'' that is // Here we do what ever initialization and ``turning on'' that is
// required to allow others to access this device. // required to allow others to access this device.
@ -59,6 +65,43 @@ Bus_PDO_PnP (
break; 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; state.DeviceState = PowerDeviceD0;
PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state); PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state);
DeviceData->Common.DevicePowerState = PowerDeviceD0; DeviceData->Common.DevicePowerState = PowerDeviceD0;
@ -68,6 +111,9 @@ Bus_PDO_PnP (
case IRP_MN_STOP_DEVICE: 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 // Here we shut down the device and give up and unmap any resources
// we acquired for the device. // we acquired for the device.
@ -331,19 +377,16 @@ Bus_PDO_QueryDeviceCaps(
deviceCapabilities->UniqueID = device->flags.unique_id; deviceCapabilities->UniqueID = device->flags.unique_id;
deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui; deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui;
deviceCapabilities->Address = device->pnp.bus_address; 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 */ 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->RawDeviceOK = TRUE;
} }

View file

@ -11,4 +11,5 @@
<file>cmbpnp.c</file> <file>cmbpnp.c</file>
<file>cmbwmi.c</file> <file>cmbwmi.c</file>
<file>cmbatt.rc</file> <file>cmbatt.rc</file>
<pch>cmbatt.h</pch>
</module> </module>

View file

@ -80,11 +80,242 @@ GetStringElement(IN PACPI_METHOD_ARGUMENT Argument,
NTSTATUS NTSTATUS
NTAPI NTAPI
CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
PULONG PsrData) IN ULONG IoControlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
IN ULONG OutputBufferLength)
{ {
UNIMPLEMENTED; PIRP Irp;
return STATUS_NOT_IMPLEMENTED; NTSTATUS Status;
KEVENT Event;
IO_STATUS_BLOCK IoStatusBlock;
PAGED_CODE();
/* Initialize our wait event */
KeInitializeEvent(&Event, SynchronizationEvent, 0);
/* Allocate the IRP */
Irp = IoBuildDeviceIoControlRequest(IoControlCode,
DeviceObject,
InputBuffer,
InputBufferLength,
OutputBuffer,
OutputBufferLength,
0,
&Event,
&IoStatusBlock);
if (!Irp)
{
/* No IRP, fail */
if (CmBattDebug & 0x4C)
DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Call ACPI */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n",
Irp, KeGetCurrentThread());
Status = IoCallDriver(DeviceObject, Irp);
if (Status == STATUS_PENDING)
{
/* Wait for completion */
KeWaitForSingleObject(&Event,
Executive,
KernelMode,
FALSE,
NULL);
Status = Irp->IoStatus.Status;
}
/* Check if caller wanted output */
if (OutputBuffer)
{
/* Make sure it's valid ACPI output buffer */
if ((OutputBuffer->Signature != ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE) ||
!(OutputBuffer->Count))
{
/* It isn't, so set failure code */
Status = STATUS_ACPI_INVALID_DATA;
}
}
/* Return status */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x completed %x! [Tid] %x\n",
Irp, Status, KeGetCurrentThread());
return Status;
}
NTSTATUS
NTAPI
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 NTSTATUS
@ -100,46 +331,6 @@ NTSTATUS
NTAPI NTAPI
CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
PACPI_BST_DATA BstData) 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,
IN ULONG IoControlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer,
IN ULONG OutputBufferLength)
{ {
PIRP Irp; PIRP Irp;
NTSTATUS Status; NTSTATUS Status;

View file

@ -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 */

View file

@ -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 */

View file

@ -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>

View file

@ -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>

View file

@ -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 */

View file

@ -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 */

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;
}
}

View file

@ -73,6 +73,8 @@ enum acpi_bus_device_type {
ACPI_BUS_TYPE_SYSTEM, ACPI_BUS_TYPE_SYSTEM,
ACPI_BUS_TYPE_POWER_BUTTON, ACPI_BUS_TYPE_POWER_BUTTON,
ACPI_BUS_TYPE_SLEEP_BUTTON, ACPI_BUS_TYPE_SLEEP_BUTTON,
ACPI_BUS_TYPE_POWER_BUTTONF,
ACPI_BUS_TYPE_SLEEP_BUTTONF,
ACPI_BUS_DEVICE_TYPE_COUNT ACPI_BUS_DEVICE_TYPE_COUNT
}; };

View file

@ -39,6 +39,7 @@ typedef struct _PDO_DEVICE_DATA
// Link point to hold all the PDOs for a single bus together // Link point to hold all the PDOs for a single bus together
LIST_ENTRY Link; LIST_ENTRY Link;
ULONG InterfaceRefCount; ULONG InterfaceRefCount;
UNICODE_STRING InterfaceName;
} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA; } PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
@ -64,10 +65,6 @@ typedef struct _FDO_DEVICE_DATA
// A synchronization for access to the device extension. // A synchronization for access to the device extension.
FAST_MUTEX Mutex; 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; } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
#define FDO_FROM_PDO(pdoData) \ #define FDO_FROM_PDO(pdoData) \
@ -90,6 +87,11 @@ NTSTATUS
ACPIEnumerateDevices( ACPIEnumerateDevices(
PFDO_DEVICE_DATA DeviceExtension); PFDO_DEVICE_DATA DeviceExtension);
NTSTATUS
NTAPI
Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
PIRP Irp);
NTSTATUS NTSTATUS
NTAPI NTAPI
Bus_CreateClose ( Bus_CreateClose (

View file

@ -6,6 +6,9 @@
#include <acpi_bus.h> #include <acpi_bus.h>
#include <acpi_drivers.h> #include <acpi_drivers.h>
#include <acpiioct.h>
#include <poclass.h>
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
@ -15,7 +18,8 @@
#endif #endif
extern struct acpi_device *sleep_button;
extern struct acpi_device *power_button;
NTSTATUS NTSTATUS
NTAPI NTAPI
@ -29,7 +33,9 @@ Bus_AddDevice(
PDEVICE_OBJECT deviceObject = NULL; PDEVICE_OBJECT deviceObject = NULL;
PFDO_DEVICE_DATA deviceData = NULL; PFDO_DEVICE_DATA deviceData = NULL;
PWCHAR deviceName = NULL; PWCHAR deviceName = NULL;
#ifndef NDEBUG
ULONG nameLength; ULONG nameLength;
#endif
PAGED_CODE (); PAGED_CODE ();
@ -164,36 +170,159 @@ End:
NTSTATUS NTSTATUS
NTAPI NTAPI
ACPIDispatchDeviceControl( ACPIDispatchCreateClose(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) IN PIRP Irp)
{ {
PIO_STACK_LOCATION IrpSp; Irp->IoStatus.Status = STATUS_SUCCESS;
NTSTATUS Status;
DPRINT("Called. IRP is at (0x%X)\n", Irp);
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IrpSp = IoGetCurrentIrpStackLocation(Irp); IoCompleteRequest(Irp, IO_NO_INCREMENT);
switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) {
default: return STATUS_SUCCESS;
DPRINT("Unknown IOCTL 0x%X\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
Status = STATUS_NOT_IMPLEMENTED;
break;
} }
if (Status != STATUS_PENDING) { VOID
Irp->IoStatus.Status = Status; NTAPI
ButtonWaitThread(PVOID Context)
{
PIRP Irp = Context;
int result;
struct acpi_bus_event event;
ULONG ButtonEvent;
DPRINT("Completing IRP at 0x%X\n", Irp); 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); IoCompleteRequest(Irp, IO_NO_INCREMENT);
} }
DPRINT("Leaving. Status 0x%X\n", Status);
return Status; NTSTATUS
NTAPI
ACPIDispatchDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PIO_STACK_LOCATION irpStack;
NTSTATUS status = STATUS_NOT_SUPPORTED;
PCOMMON_DEVICE_DATA commonData;
ULONG Caps = 0;
HANDLE ThreadHandle;
PAGED_CODE ();
irpStack = IoGetCurrentIrpStackLocation (Irp);
ASSERT (IRP_MJ_DEVICE_CONTROL == irpStack->MajorFunction);
commonData = (PCOMMON_DEVICE_DATA) DeviceObject->DeviceExtension;
Irp->IoStatus.Information = 0;
if (!commonData->IsFDO)
{
switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_ACPI_EVAL_METHOD:
status = Bus_PDO_EvalMethod((PPDO_DEVICE_DATA)commonData,
Irp);
break;
case IOCTL_GET_SYS_BUTTON_CAPS:
if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
{
status = STATUS_BUFFER_TOO_SMALL;
break;
}
if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0D"))
{
DPRINT1("Lid button reported to power manager\n");
Caps |= SYS_BUTTON_LID;
}
else if (((PPDO_DEVICE_DATA)commonData)->AcpiHandle == NULL)
{
/* We have to return both at the same time because since we
* have a NULL handle we are the fixed feature DO and we will
* only be called once (not once per device)
*/
if (power_button)
{
DPRINT1("Fixed power button reported to power manager\n");
Caps |= SYS_BUTTON_POWER;
}
if (sleep_button)
{
DPRINT1("Fixed sleep button reported to power manager\n");
Caps |= SYS_BUTTON_SLEEP;
}
}
if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0C"))
{
DPRINT1("Control method power button reported to power manager\n");
Caps |= SYS_BUTTON_POWER;
}
else if (wcsstr(((PPDO_DEVICE_DATA)commonData)->HardwareIDs, L"PNP0C0E"))
{
DPRINT1("Control method sleep reported to power manager\n");
Caps |= SYS_BUTTON_SLEEP;
}
else
{
DPRINT1("IOCTL_GET_SYS_BUTTON_CAPS sent to a non-button device\n");
status = STATUS_INVALID_PARAMETER;
}
if (Caps != 0)
{
RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &Caps, sizeof(Caps));
Irp->IoStatus.Information = sizeof(Caps);
status = STATUS_SUCCESS;
}
break;
case IOCTL_GET_SYS_BUTTON_EVENT:
PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, ButtonWaitThread, Irp);
ZwClose(ThreadHandle);
status = STATUS_PENDING;
break;
default:
DPRINT1("Unsupported IOCTL: %x\n", irpStack->Parameters.DeviceIoControl.IoControlCode);
break;
}
}
else
DPRINT1("IOCTL sent to the ACPI FDO! Kill the caller!\n");
if (status != STATUS_PENDING)
{
Irp->IoStatus.Status = status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
else
IoMarkIrpPending(Irp);
return status;
} }
NTSTATUS NTSTATUS
@ -211,6 +340,8 @@ DriverEntry (
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ACPIDispatchDeviceControl; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ACPIDispatchDeviceControl;
DriverObject->MajorFunction [IRP_MJ_PNP] = Bus_PnP; DriverObject->MajorFunction [IRP_MJ_PNP] = Bus_PnP;
DriverObject->MajorFunction [IRP_MJ_POWER] = Bus_Power; DriverObject->MajorFunction [IRP_MJ_POWER] = Bus_Power;
DriverObject->MajorFunction [IRP_MJ_CREATE] = ACPIDispatchCreateClose;
DriverObject->MajorFunction [IRP_MJ_CLOSE] = ACPIDispatchCreateClose;
DriverObject->DriverExtension->AddDevice = Bus_AddDevice; DriverObject->DriverExtension->AddDevice = Bus_AddDevice;

View file

@ -576,7 +576,12 @@ AcpiOsWaitSemaphore(
DPRINT("Waiting for semaphore %p\n", Handle); DPRINT("Waiting for semaphore %p\n", Handle);
ASSERT(Mutex); ASSERT(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); ExAcquireFastMutex(Mutex);
return AE_OK; return AE_OK;
} }
@ -590,7 +595,12 @@ AcpiOsSignalSemaphore (
DPRINT("AcpiOsSignalSemaphore %p\n",Handle); DPRINT("AcpiOsSignalSemaphore %p\n",Handle);
ASSERT(Mutex); ASSERT(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); ExReleaseFastMutex(Mutex);
return AE_OK; return AE_OK;
} }

View file

@ -1,10 +1,10 @@
/* DDK/NDK/SDK Headers */ /* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h> #include <ntddk.h>
#include <ddk/ntddmou.h> #include <ntddmou.h>
#include <ddk/ntifs.h> #include <ntifs.h>
#include <ddk/tvout.h> #include <tvout.h>
#include <ndk/ntndk.h> #include <ntndk.h>
#include <stdarg.h> #include <stdarg.h>
#include <windef.h> #include <windef.h>
@ -16,7 +16,7 @@
#include <dde.h> #include <dde.h>
#include <ddk/ddkmapi.h> #include <ddkmapi.h>
/* Prototypes */ /* Prototypes */
VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer); VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);

View file

@ -1,9 +1,9 @@
/* DDK/NDK/SDK Headers */ /* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h> #include <ntddk.h>
#include <ddk/ntddmou.h> #include <ntddmou.h>
#include <ddk/ntifs.h> #include <ntifs.h>
#include <ddk/tvout.h> #include <tvout.h>
#include <ndk/ntndk.h> #include <ntndk.h>
/* Win32 Headers */ /* Win32 Headers */
#define WINBASEAPI #define WINBASEAPI

View file

@ -42,8 +42,11 @@ typedef unsigned char BYTE;
/* REACTOS FIXME */ /* REACTOS FIXME */
#undef DeleteFile #undef DeleteFile
/* This is deprecated and should be changed in the EXT2FS driver. */ /* 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 RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart
#define RtlLargeIntegerGreaterThan(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 // the following include files should be in the inc sub-dir associated with this driver

View file

@ -17,15 +17,6 @@
#define PST_RS232 1 #define PST_RS232 1
#define COMMPROP_INITIALIZED 0xE73CF52E #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 typedef enum
{ {
dsStopped, dsStopped,

View file

@ -77,7 +77,7 @@ extern "C" {
SCSIPORT_API SCSIPORT_API
VOID VOID
DDKCDECLAPI __cdecl
ScsiDebugPrint( ScsiDebugPrint(
ULONG DebugPrintLevel, ULONG DebugPrintLevel,
PCCHAR DebugMessage, PCCHAR DebugMessage,
@ -1066,7 +1066,7 @@ IdeMediaStatus(
IN UCHAR Channel IN UCHAR Channel
); );
ULONG DDKAPI ULONG NTAPI
AtapiFindController( AtapiFindController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,

View file

@ -1015,7 +1015,7 @@ UniataEnumBusMasterController(
PVOID Argument2 PVOID Argument2
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindCompatBusMasterController1( UniataFindCompatBusMasterController1(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1025,7 +1025,7 @@ UniataFindCompatBusMasterController1(
OUT PBOOLEAN Again OUT PBOOLEAN Again
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindCompatBusMasterController2( UniataFindCompatBusMasterController2(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1044,7 +1044,7 @@ UniataAllocateLunExt(
ULONG NewNumberChannels ULONG NewNumberChannels
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindBusMasterController( UniataFindBusMasterController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1054,7 +1054,7 @@ UniataFindBusMasterController(
OUT PBOOLEAN Again OUT PBOOLEAN Again
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindFakeBusMasterController( UniataFindFakeBusMasterController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,

View file

@ -86,9 +86,7 @@
/* Compiler dependencies */ /* Compiler dependencies */
/***************************************************/ /***************************************************/
#define DDKAPI __stdcall
#define DDKFASTAPI __fastcall #define DDKFASTAPI __fastcall
#define DDKCDECLAPI __cdecl
/* Are we under GNU C (mingw) ??? */ /* Are we under GNU C (mingw) ??? */
#ifdef __GNUC__ #ifdef __GNUC__

View file

@ -94,7 +94,7 @@ BOOLEAN WinVer_WDM_Model = FALSE;
UCHAR g_foo = 0; UCHAR g_foo = 0;
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiResetController__( AtapiResetController__(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN ULONG PathId, IN ULONG PathId,
@ -115,7 +115,7 @@ AtapiHwInitialize__(
#ifndef UNIATA_CORE #ifndef UNIATA_CORE
VOID VOID
DDKAPI NTAPI
AtapiCallBack_X( AtapiCallBack_X(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
@ -129,13 +129,13 @@ AtapiCallBack_X(
#endif #endif
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiInterruptDpc( AtapiInterruptDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiEnableInterrupts__( AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
@ -150,7 +150,7 @@ AtapiQueueTimerDpc(
); );
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
DDKAPI NTAPI
AtapiAdapterControl( AtapiAdapterControl(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@ -1005,7 +1005,7 @@ AtaUmode(PIDENTIFY_DATA2 ident)
#ifndef UNIATA_CORE #ifndef UNIATA_CORE
VOID VOID
DDKAPI NTAPI
AtapiTimerDpc( AtapiTimerDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -1856,7 +1856,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiResetController( AtapiResetController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN ULONG PathId IN ULONG PathId
@ -2598,7 +2598,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiHwInitialize( AtapiHwInitialize(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3210,7 +3210,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiInterrupt( AtapiInterrupt(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3400,7 +3400,7 @@ AtapiInterrupt2(
} // end AtapiInterrupt2() } // end AtapiInterrupt2()
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiInterruptDpc( AtapiInterruptDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3437,7 +3437,7 @@ AtapiInterruptDpc(
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiEnableInterrupts__( AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -7251,7 +7251,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiStartIo( AtapiStartIo(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb IN PSCSI_REQUEST_BLOCK Srb
@ -8343,7 +8343,7 @@ Return Value:
--*/ --*/
extern "C" extern "C"
ULONG ULONG
DDKAPI NTAPI
DriverEntry( DriverEntry(
IN PVOID DriverObject, IN PVOID DriverObject,
IN PVOID Argument2 IN PVOID Argument2
@ -9059,7 +9059,7 @@ AtapiRegCheckParameterValue(
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
DDKAPI NTAPI
AtapiAdapterControl( AtapiAdapterControl(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@ -9152,7 +9152,7 @@ AtapiAdapterControl(
extern "C" extern "C"
NTHALAPI NTHALAPI
VOID VOID
DDKAPI NTAPI
HalDisplayString ( HalDisplayString (
PUCHAR String PUCHAR String
); );

View file

@ -424,38 +424,38 @@ typedef struct _SCSI_WMI_REQUEST_BLOCK {
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_INITIALIZE) ( (NTAPI *PHW_INITIALIZE) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_STARTIO) ( (NTAPI *PHW_STARTIO) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb IN PSCSI_REQUEST_BLOCK Srb
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_INTERRUPT) ( (NTAPI *PHW_INTERRUPT) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
VOID VOID
(DDKAPI *PHW_TIMER) ( (NTAPI *PHW_TIMER) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
VOID VOID
(DDKAPI *PHW_DMA_STARTED) ( (NTAPI *PHW_DMA_STARTED) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
ULONG ULONG
(DDKAPI *PHW_FIND_ADAPTER) ( (NTAPI *PHW_FIND_ADAPTER) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PVOID HwContext, IN PVOID HwContext,
IN PVOID BusInformation, IN PVOID BusInformation,
@ -466,14 +466,14 @@ ULONG
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_RESET_BUS) ( (NTAPI *PHW_RESET_BUS) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG PathId IN ULONG PathId
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_ADAPTER_STATE) ( (NTAPI *PHW_ADAPTER_STATE) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PVOID Context, IN PVOID Context,
IN BOOLEAN SaveState IN BOOLEAN SaveState
@ -481,7 +481,7 @@ BOOLEAN
typedef typedef
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
(DDKAPI *PHW_ADAPTER_CONTROL) ( (NTAPI *PHW_ADAPTER_CONTROL) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
IN PVOID Parameters IN PVOID Parameters
@ -607,7 +607,7 @@ typedef struct _HW_INITIALIZATION_DATA_COMMON {
// //
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortInitialize( ScsiPortInitialize(
IN PVOID Argument1, IN PVOID Argument1,
IN PVOID Argument2, IN PVOID Argument2,
@ -616,14 +616,14 @@ ScsiPortInitialize(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortFreeDeviceBase( ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID MappedAddress IN PVOID MappedAddress
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortGetBusData( ScsiPortGetBusData(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -634,7 +634,7 @@ ScsiPortGetBusData(
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortSetBusDataByOffset( ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -646,7 +646,7 @@ ScsiPortSetBusDataByOffset(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetDeviceBase( ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -657,7 +657,7 @@ ScsiPortGetDeviceBase(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetLogicalUnit( ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -666,7 +666,7 @@ ScsiPortGetLogicalUnit(
); );
SCSIPORT_API SCSIPORT_API
PSCSI_REQUEST_BLOCK DDKAPI PSCSI_REQUEST_BLOCK NTAPI
ScsiPortGetSrb( ScsiPortGetSrb(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -676,7 +676,7 @@ ScsiPortGetSrb(
); );
SCSIPORT_API SCSIPORT_API
SCSI_PHYSICAL_ADDRESS DDKAPI SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortGetPhysicalAddress( ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -685,14 +685,14 @@ ScsiPortGetPhysicalAddress(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetVirtualAddress( ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetUncachedExtension( ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@ -700,13 +700,13 @@ ScsiPortGetUncachedExtension(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortFlushDma( ScsiPortFlushDma(
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortIoMapTransfer( ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -715,7 +715,7 @@ ScsiPortIoMapTransfer(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKCDECLAPI VOID __cdecl
ScsiPortNotification( ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType, IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
@ -723,7 +723,7 @@ ScsiPortNotification(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortLogError( ScsiPortLogError(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -735,7 +735,7 @@ ScsiPortLogError(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortCompleteRequest( ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -745,7 +745,7 @@ ScsiPortCompleteRequest(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortMoveMemory( ScsiPortMoveMemory(
IN PVOID WriteBuffer, IN PVOID WriteBuffer,
IN PVOID ReadBuffer, IN PVOID ReadBuffer,
@ -753,25 +753,25 @@ ScsiPortMoveMemory(
); );
SCSIPORT_API SCSIPORT_API
UCHAR DDKAPI UCHAR NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
IN PUCHAR Port IN PUCHAR Port
); );
SCSIPORT_API SCSIPORT_API
USHORT DDKAPI USHORT NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
IN PUSHORT Port IN PUSHORT Port
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
IN PULONG Port IN PULONG Port
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -779,7 +779,7 @@ ScsiPortReadPortBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -787,7 +787,7 @@ ScsiPortReadPortBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -795,25 +795,25 @@ ScsiPortReadPortBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
UCHAR DDKAPI UCHAR NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
IN PUCHAR Register IN PUCHAR Register
); );
SCSIPORT_API SCSIPORT_API
USHORT DDKAPI USHORT NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
IN PUSHORT Register IN PUSHORT Register
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
IN PULONG Register IN PULONG Register
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -821,7 +821,7 @@ ScsiPortReadRegisterBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -829,7 +829,7 @@ ScsiPortReadRegisterBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -837,34 +837,34 @@ ScsiPortReadRegisterBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortStallExecution( ScsiPortStallExecution(
IN ULONG Delay IN ULONG Delay
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN UCHAR Value IN UCHAR Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN USHORT Value IN USHORT Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
IN PULONG Port, IN PULONG Port,
IN ULONG Value IN ULONG Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -872,7 +872,7 @@ ScsiPortWritePortBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -880,7 +880,7 @@ ScsiPortWritePortBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -888,28 +888,28 @@ ScsiPortWritePortBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN UCHAR Value IN UCHAR Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN USHORT Value IN USHORT Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
IN PULONG Register, IN PULONG Register,
IN ULONG Value IN ULONG Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -917,7 +917,7 @@ ScsiPortWriteRegisterBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -925,7 +925,7 @@ ScsiPortWriteRegisterBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -933,13 +933,13 @@ ScsiPortWriteRegisterBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
SCSI_PHYSICAL_ADDRESS DDKAPI SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
ULONG UlongAddress ULONG UlongAddress
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortConvertPhysicalAddressToUlong( ScsiPortConvertPhysicalAddressToUlong(
SCSI_PHYSICAL_ADDRESS Address SCSI_PHYSICAL_ADDRESS Address
); );
@ -947,7 +947,7 @@ ScsiPortConvertPhysicalAddressToUlong(
#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart) #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
SCSIPORT_API SCSIPORT_API
BOOLEAN DDKAPI BOOLEAN NTAPI
ScsiPortValidateRange( ScsiPortValidateRange(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -960,7 +960,7 @@ ScsiPortValidateRange(
// begin_ntminitape // begin_ntminitape
SCSIPORT_API SCSIPORT_API
VOID DDKCDECLAPI VOID __cdecl
ScsiDebugPrint( ScsiDebugPrint(
ULONG DebugPrintLevel, ULONG DebugPrintLevel,
PCCHAR DebugMessage, PCCHAR DebugMessage,

View file

@ -26,7 +26,6 @@
#define DDKFASTAPI __fastcall #define DDKFASTAPI __fastcall
#define FASTCALL __fastcall #define FASTCALL __fastcall
#define DDKCDECLAPI __cdecl
ULONG DbgPrint(PCCH Format,...); ULONG DbgPrint(PCCH Format,...);

View file

@ -8,15 +8,17 @@
/* INCLUDES ******************************************************************/ /* INCLUDES ******************************************************************/
#include <asm.h> #include <asm.h>
#include <internal/i386/asmmacro.S>
.intel_syntax noprefix .intel_syntax noprefix
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
.globl _HalpPerfCounter
_HalpLastPerfCounterLow: .long 0 _HalpLastPerfCounterLow: .long 0
_HalpLastPerfCounterHigh: .long 0 _HalpLastPerfCounterHigh: .long 0
_HalpPerfCounter:
_HalpPerfCounterLow: .long 0 _HalpPerfCounterLow: .long 0
_HalpPerfCounterHigh: .long 0 _HalpPerfCounterHigh: .long 0
_HalpSystemHardwareFlags: .long 0
_UnhandledMsg: _UnhandledMsg:
.asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n" .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n"
@ -327,6 +329,7 @@ AndItsNotYou:
ret ret
.endfunc .endfunc
#ifndef _MINIHAL_
.globl _KeStallExecutionProcessor@4 .globl _KeStallExecutionProcessor@4
.func KeStallExecutionProcessor@4 .func KeStallExecutionProcessor@4
_KeStallExecutionProcessor@4: _KeStallExecutionProcessor@4:
@ -357,6 +360,7 @@ Done:
/* Return */ /* Return */
ret 4 ret 4
.endfunc .endfunc
#endif
.global _KeQueryPerformanceCounter@4 .global _KeQueryPerformanceCounter@4
.func KeQueryPerformanceCounter@4 .func KeQueryPerformanceCounter@4
@ -517,72 +521,3 @@ InvalidCount:
mov _HalpLastPerfCounterHigh, eax mov _HalpLastPerfCounterHigh, eax
jmp LoopPreInt jmp LoopPreInt
.endfunc .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

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

View file

@ -267,3 +267,59 @@ KeFlushWriteBuffer(VOID)
return; 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

View file

@ -4,13 +4,11 @@
* FILE: hal/halx86/up/spinlock.c * FILE: hal/halx86/up/spinlock.c
* PURPOSE: Spinlock and Queued Spinlock Support * PURPOSE: Spinlock and Queued Spinlock Support
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
* Timo Kreuzer (timo.kreuzer@reactos.org)
*/ */
/* INCLUDES ******************************************************************/ /* INCLUDES ******************************************************************/
/* Enable this (and the define in irq.S) to make UP HAL work for MP Kernel */ /* This file is compiled twice. Once for UP and once for MP */
/* #define CONFIG_SMP */
#include <hal.h> #include <hal.h>
#define NDEBUG #define NDEBUG
@ -30,18 +28,6 @@ KSPIN_LOCK HalpSystemHardwareLock;
#ifdef _M_IX86 #ifdef _M_IX86
/*
* @implemented
*/
VOID
NTAPI
KeAcquireSpinLock(PKSPIN_LOCK SpinLock,
PKIRQL OldIrql)
{
/* Call the fastcall function */
*OldIrql = KfAcquireSpinLock(SpinLock);
}
/* /*
* @implemented * @implemented
*/ */
@ -59,18 +45,6 @@ KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock)
return OldIrql; return OldIrql;
} }
/*
* @implemented
*/
VOID
NTAPI
KeReleaseSpinLock(PKSPIN_LOCK SpinLock,
KIRQL NewIrql)
{
/* Call the fastcall function */
KfReleaseSpinLock(SpinLock, NewIrql);
}
/* /*
* @implemented * @implemented
*/ */
@ -238,31 +212,6 @@ KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber,
return TRUE; 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 #endif
VOID VOID

View file

@ -17,20 +17,26 @@
</directory> </directory>
<file>beep.c</file> <file>beep.c</file>
<file>cmos.c</file> <file>cmos.c</file>
<file>display.c</file>
<file>dma.c</file> <file>dma.c</file>
<file>drive.c</file> <file>drive.c</file>
<file>display.c</file> <file>halinit.c</file>
<file>misc.c</file>
<file>profil.c</file> <file>profil.c</file>
<file>reboot.c</file> <file>reboot.c</file>
<file>sysinfo.c</file> <file>sysinfo.c</file>
<file>timer.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"> <if property="ARCH" value="i386">
<file>bios.c</file> <file>bios.c</file>
<file>halinit.c</file> <file>halinit.c</file>
<file>misc.c</file> <file>misc.c</file>
<file>pic.c</file> <file>pic.c</file>
<file>trap.S</file> <file>trap.S</file>
<file>usage.c</file>
<directory name="i386"> <directory name="i386">
<file>portio.c</file> <file>portio.c</file>
<file>systimer.S</file> <file>systimer.S</file>
@ -57,6 +63,7 @@
<pch>hal.h</pch> <pch>hal.h</pch>
</directory> </directory>
</module> </module>
<module name="mini_hal" type="objectlibrary"> <module name="mini_hal" type="objectlibrary">
<include>include</include> <include>include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
@ -78,6 +85,7 @@
<file>dma.c</file> <file>dma.c</file>
<file>display.c</file> <file>display.c</file>
<file>drive.c</file> <file>drive.c</file>
<file>misc.c</file>
<file>profil.c</file> <file>profil.c</file>
<file>reboot.c</file> <file>reboot.c</file>
<file>spinlock.c</file> <file>spinlock.c</file>
@ -85,15 +93,9 @@
<file>timer.c</file> <file>timer.c</file>
<file>usage.c</file> <file>usage.c</file>
<if property="ARCH" value="i386"> <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"> <directory name="i386">
<file>portio.c</file> <file>portio.c</file>
<file>systimer.S</file> <file>systimer.S</file>
<file>v86.s</file>
</directory> </directory>
</if> </if>
<if property="ARCH" value="amd64"> <if property="ARCH" value="amd64">
@ -109,6 +111,8 @@
</directory> </directory>
<directory name="up"> <directory name="up">
<file>halinit_up.c</file> <file>halinit_up.c</file>
<file>pic.c</file>
<file>processor.c</file>
</directory> </directory>
</module> </module>
</group> </group>

View file

@ -9,6 +9,10 @@
<directory name="generic"> <directory name="generic">
<file>spinlock.c</file> <file>spinlock.c</file>
</directory> </directory>
<directory name="up">
<file>pic.c</file>
<file>processor.c</file>
</directory>
<directory name="up"> <directory name="up">
<file>processor.c</file> <file>processor.c</file>
<if property="ARCH" value="i386"> <if property="ARCH" value="i386">

View file

@ -6,31 +6,22 @@
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" /> <bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
<include base="hal">include</include> <include base="hal">include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<include base="x86emu">.</include> <!-- include base="x86emu">.</include -->
<define name="_DISABLE_TIDENTS" /> <define name="_DISABLE_TIDENTS" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<define name="_X86BIOS_" /> <define name="_X86BIOS_" />
<library>hal_generic</library> <library>hal_generic</library>
<library>hal_generic_up</library> <library>hal_generic_up</library>
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>x86emu</library> <!-- library>x86emu</library -->
<directory name="up">
<file>halinit_up.c</file>
<file>halup.rc</file>
</directory>
<directory name="mp"> <directory name="mp">
<file>halinit_mp.c</file>
<file>halmp.rc</file>
<directory name="amd64"> <directory name="amd64">
<file>mps.S</file> <!-- file>mps.S</file -->
</directory> </directory>
</directory> </directory>
<directory name="generic">
<directory name="amd64">
<file>x86bios.c</file>
</directory>
</directory>
</module> </module>
</group> </group>

View file

@ -14,11 +14,13 @@
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>libcntpr</library> <library>libcntpr</library>
<directory name="mp"> <directory name="mp">
<file>mpsirql.c</file> <if property="ARCH" value="i386">
<directory name="i386"> <directory name="i386">
<file>mps.S</file> <file>mps.S</file>
<file>mpsboot.asm</file> <file>mpsboot.asm</file>
<file>mpsirql.c</file>
</directory> </directory>
</if>
</directory> </directory>
</module> </module>
</group> </group>

View file

@ -685,6 +685,15 @@ VOID
NTAPI NTAPI
HalpSetInterruptGate(ULONG Index, PVOID Address); HalpSetInterruptGate(ULONG Index, PVOID Address);
VOID
FASTCALL
KeUpdateSystemTime(
IN PKTRAP_FRAME TrapFrame,
IN ULONG Increment,
IN KIRQL OldIrql
);
#ifdef _M_AMD64 #ifdef _M_AMD64
#define KfLowerIrql KeLowerIrql #define KfLowerIrql KeLowerIrql
#ifndef CONFIG_SMP #ifndef CONFIG_SMP

View file

@ -143,6 +143,7 @@ KfLowerIrql (KIRQL NewIrql)
HalpLowerIrql (NewIrql, FALSE); HalpLowerIrql (NewIrql, FALSE);
} }
/********************************************************************** /**********************************************************************
* NAME EXPORTED * NAME EXPORTED
* KfRaiseIrql * KfRaiseIrql
@ -191,7 +192,6 @@ KfRaiseIrql (KIRQL NewIrql)
return OldIrql; return OldIrql;
} }
/********************************************************************** /**********************************************************************
* NAME EXPORTED * NAME EXPORTED
* KeRaiseIrqlToDpcLevel * KeRaiseIrqlToDpcLevel

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 ) \ #define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \
{ Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \ { 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); } RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
#define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \ #define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \

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

1074
reactos/include/ddk/mce.h Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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

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;
};
};

View file

@ -3,6 +3,7 @@
<module name="dxsdk" type="idlheader"> <module name="dxsdk" type="idlheader">
<file>amstream.idl</file> <file>amstream.idl</file>
<file>austream.idl</file> <file>austream.idl</file>
<file>bdatif.idl</file>
<file>ddstream.idl</file> <file>ddstream.idl</file>
<file>dmodshow.idl</file> <file>dmodshow.idl</file>
<file>mixerocx.idl</file> <file>mixerocx.idl</file>

View file

@ -1,4 +1,3 @@
#define PASTE2(x,y) x##y #define PASTE2(x,y) x##y
#define PASTE(x,y) PASTE2(x,y) #define PASTE(x,y) PASTE2(x,y)

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);

View file

@ -180,11 +180,11 @@ typedef struct _BATTERY_WAIT_STATUS {
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_DISABLE_STATUS_NOTIFY)( (NTAPI *BCLASS_DISABLE_STATUS_NOTIFY)(
IN PVOID Context); IN PVOID Context);
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_QUERY_INFORMATION)( (NTAPI *BCLASS_QUERY_INFORMATION)(
IN PVOID Context, IN PVOID Context,
IN ULONG BatteryTag, IN ULONG BatteryTag,
IN BATTERY_QUERY_INFORMATION_LEVEL Level, IN BATTERY_QUERY_INFORMATION_LEVEL Level,
@ -194,25 +194,25 @@ typedef NTSTATUS
OUT PULONG ReturnedLength); OUT PULONG ReturnedLength);
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_QUERY_STATUS)( (NTAPI *BCLASS_QUERY_STATUS)(
IN PVOID Context, IN PVOID Context,
IN ULONG BatteryTag, IN ULONG BatteryTag,
OUT PBATTERY_STATUS BatteryStatus); OUT PBATTERY_STATUS BatteryStatus);
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_QUERY_TAG)( (NTAPI *BCLASS_QUERY_TAG)(
IN PVOID Context, IN PVOID Context,
OUT PULONG BatteryTag); OUT PULONG BatteryTag);
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_SET_INFORMATION)( (NTAPI *BCLASS_SET_INFORMATION)(
IN PVOID Context, IN PVOID Context,
IN ULONG BatteryTag, IN ULONG BatteryTag,
IN BATTERY_SET_INFORMATION_LEVEL Level, IN BATTERY_SET_INFORMATION_LEVEL Level,
IN PVOID Buffer OPTIONAL); IN PVOID Buffer OPTIONAL);
typedef NTSTATUS typedef NTSTATUS
(DDKAPI*BCLASS_SET_STATUS_NOTIFY)( (NTAPI *BCLASS_SET_STATUS_NOTIFY)(
IN PVOID Context, IN PVOID Context,
IN ULONG BatteryTag, IN ULONG BatteryTag,
IN PBATTERY_NOTIFY BatteryNotify); IN PBATTERY_NOTIFY BatteryNotify);
@ -239,21 +239,21 @@ typedef struct _BATTERY_MINIPORT_INFO {
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassInitializeDevice( BatteryClassInitializeDevice(
IN PBATTERY_MINIPORT_INFO MiniportInfo, IN PBATTERY_MINIPORT_INFO MiniportInfo,
IN PVOID *ClassData); IN PVOID *ClassData);
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassIoctl( BatteryClassIoctl(
IN PVOID ClassData, IN PVOID ClassData,
IN PIRP Irp); IN PIRP Irp);
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassQueryWmiDataBlock( BatteryClassQueryWmiDataBlock(
IN PVOID ClassData, IN PVOID ClassData,
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
@ -265,13 +265,13 @@ BatteryClassQueryWmiDataBlock(
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassStatusNotify( BatteryClassStatusNotify(
IN PVOID ClassData); IN PVOID ClassData);
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassSystemControl( BatteryClassSystemControl(
IN PVOID ClassData, IN PVOID ClassData,
IN PVOID WmiLibContext, /* PWMILIB_CONTEXT */ IN PVOID WmiLibContext, /* PWMILIB_CONTEXT */
@ -281,7 +281,7 @@ BatteryClassSystemControl(
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassUnload( BatteryClassUnload(
IN PVOID ClassData); IN PVOID ClassData);

View file

@ -20,7 +20,8 @@
* *
*/ */
#ifndef _CFG_INCLUDED_ #pragma once
#define _CFG_INCLUDED_ #define _CFG_INCLUDED_
#ifdef __cplusplus #ifdef __cplusplus
@ -77,7 +78,26 @@ extern "C" {
#define CM_PROB_DRIVER_BLOCKED 0x00000030 #define CM_PROB_DRIVER_BLOCKED 0x00000030
#define CM_PROB_REGISTRY_TOO_LARGE 0x00000031 #define CM_PROB_REGISTRY_TOO_LARGE 0x00000031
#define CM_PROB_SETPROPERTIES_FAILED 0x00000032 #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_FORCECONFIG 0x00000000
#define LCPRI_BOOTCONFIG 0x00000001 #define LCPRI_BOOTCONFIG 0x00000001
@ -128,11 +148,33 @@ extern "C" {
#define DN_NO_SHOW_IN_DM 0x40000000 #define DN_NO_SHOW_IN_DM 0x40000000
#define DN_BOOT_LOG_PROB 0x80000000 #define DN_BOOT_LOG_PROB 0x80000000
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define DN_NEED_RESTART DN_LIAR #define DN_NEED_RESTART DN_LIAR
#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME #define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
#define DN_LEGACY_DRIVER DN_MOVED #define DN_LEGACY_DRIVER DN_MOVED
#define DN_CHILD_WITH_INVALID_ID DN_HAS_MARK #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 { typedef enum _PNP_VETO_TYPE {
PNP_VetoTypeUnknown, PNP_VetoTypeUnknown,
@ -149,14 +191,7 @@ typedef enum _PNP_VETO_TYPE {
PNP_VetoLegacyDriver PNP_VetoLegacyDriver
} PNP_VETO_TYPE, *PPNP_VETO_TYPE; } 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 #ifdef __cplusplus
} }
#endif #endif
#endif /* _CFG_INCLUDED_ */

File diff suppressed because it is too large Load diff

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 */

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

View file

@ -173,11 +173,6 @@ typedef unsigned long POINTER_64; // FIXME! HACK!!!
#define NTAPI __stdcall #define NTAPI __stdcall
//
// Used by the DDK exclusively , don't put in drivers
//
#define DDKAPI __stdcall // Use NTAPI instead
#define DDKCDECLAPI __cdecl // Just use __cdecl
/* Import and Export Specifiers */ /* Import and Export Specifiers */

View file

@ -1,31 +1,47 @@
/* /*
* Win32 definitions for Windows NT * ntstatus.h
* *
* Copyright 1996 Alexandre Julliard * Windows NT status codes
* *
* This library is free software; you can redistribute it and/or * This file is part of the w32api package.
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* *
* This library is distributed in the hope that it will be useful, * Contributors:
* but WITHOUT ANY WARRANTY; without even the implied warranty of * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. * THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#ifndef _NTSTATUS_ #ifndef _NTSTATUS_
#define _NTSTATUS_ #define _NTSTATUS_
#ifdef __cplusplus
extern "C" {
#endif
#ifndef WIN32_NO_STATUS #ifndef WIN32_NO_STATUS
/* #define FACILITY_DEBUGGER 0x1
* Debug codes #define FACILITY_RPC_RUNTIME 0x2
*/ #define FACILITY_RPC_STUBS 0x3
#define FACILITY_IO_ERROR_CODE 0x4
#define FACILITY_TERMINAL_SERVER 0xA
#define FACILITY_USB_ERROR_CODE 0x10
#define FACILITY_HID_ERROR_CODE 0x11
#define FACILITY_FIREWIRE_ERROR_CODE 0x12
#define FACILITY_CLUSTER_ERROR_CODE 0x13
#define FACILITY_ACPI_ERROR_CODE 0x14
#define FACILITY_SXS_ERROR_CODE 0x15
/* Debug codes */
#define DBG_EXCEPTION_HANDLED ((NTSTATUS)0x00010001) #define DBG_EXCEPTION_HANDLED ((NTSTATUS)0x00010001)
#define DBG_CONTINUE ((NTSTATUS)0x00010002) #define DBG_CONTINUE ((NTSTATUS)0x00010002)
@ -42,11 +58,11 @@
#define DBG_NO_STATE_CHANGE ((NTSTATUS)0xC0010001) #define DBG_NO_STATE_CHANGE ((NTSTATUS)0xC0010001)
#define DBG_APP_NOT_IDLE ((NTSTATUS)0xC0010002) #define DBG_APP_NOT_IDLE ((NTSTATUS)0xC0010002)
/* /* Exception codes */
* Exception codes
*/
#if !defined(STATUS_SUCCESS)
#define STATUS_SUCCESS ((NTSTATUS)0x00000000) #define STATUS_SUCCESS ((NTSTATUS)0x00000000)
#endif
#define STATUS_SEVERITY_SUCCESS 0x0 #define STATUS_SEVERITY_SUCCESS 0x0
#define STATUS_SEVERITY_INFORMATIONAL 0x1 #define STATUS_SEVERITY_INFORMATIONAL 0x1
#define STATUS_SEVERITY_WARNING 0x2 #define STATUS_SEVERITY_WARNING 0x2
@ -1039,6 +1055,34 @@
#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037) #define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037)
#define STATUS_PNP_INVALID_ID ((NTSTATUS)0xC0040038) #define STATUS_PNP_INVALID_ID ((NTSTATUS)0xC0040038)
#define STATUS_ACPI_INVALID_OPCODE ((NTSTATUS)0xC0140001L)
#define STATUS_ACPI_STACK_OVERFLOW ((NTSTATUS)0xC0140002L)
#define STATUS_ACPI_ASSERT_FAILED ((NTSTATUS)0xC0140003L)
#define STATUS_ACPI_INVALID_INDEX ((NTSTATUS)0xC0140004L)
#define STATUS_ACPI_INVALID_ARGUMENT ((NTSTATUS)0xC0140005L)
#define STATUS_ACPI_FATAL ((NTSTATUS)0xC0140006L)
#define STATUS_ACPI_INVALID_SUPERNAME ((NTSTATUS)0xC0140007L)
#define STATUS_ACPI_INVALID_ARGTYPE ((NTSTATUS)0xC0140008L)
#define STATUS_ACPI_INVALID_OBJTYPE ((NTSTATUS)0xC0140009L)
#define STATUS_ACPI_INVALID_TARGETTYPE ((NTSTATUS)0xC014000AL)
#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT ((NTSTATUS)0xC014000BL)
#define STATUS_ACPI_ADDRESS_NOT_MAPPED ((NTSTATUS)0xC014000CL)
#define STATUS_ACPI_INVALID_EVENTTYPE ((NTSTATUS)0xC014000DL)
#define STATUS_ACPI_HANDLER_COLLISION ((NTSTATUS)0xC014000EL)
#define STATUS_ACPI_INVALID_DATA ((NTSTATUS)0xC014000FL)
#define STATUS_ACPI_INVALID_REGION ((NTSTATUS)0xC0140010L)
#define STATUS_ACPI_INVALID_ACCESS_SIZE ((NTSTATUS)0xC0140011L)
#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK ((NTSTATUS)0xC0140012L)
#define STATUS_ACPI_ALREADY_INITIALIZED ((NTSTATUS)0xC0140013L)
#define STATUS_ACPI_NOT_INITIALIZED ((NTSTATUS)0xC0140014L)
#define STATUS_ACPI_INVALID_MUTEX_LEVEL ((NTSTATUS)0xC0140015L)
#define STATUS_ACPI_MUTEX_NOT_OWNED ((NTSTATUS)0xC0140016L)
#define STATUS_ACPI_MUTEX_NOT_OWNER ((NTSTATUS)0xC0140017L)
#define STATUS_ACPI_RS_ACCESS ((NTSTATUS)0xC0140018L)
#define STATUS_ACPI_INVALID_TABLE ((NTSTATUS)0xC0140019L)
#define STATUS_ACPI_REG_HANDLER_FAILED ((NTSTATUS)0xC0140020L)
#define STATUS_ACPI_POWER_REQUEST_FAILED ((NTSTATUS)0xC0140021L)
#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001) #define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001)
#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002) #define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002)
#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003) #define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003)
@ -1124,4 +1168,8 @@
#endif /* WIN32_NO_STATUS */ #endif /* WIN32_NO_STATUS */
#ifdef __cplusplus
}
#endif
#endif /* _NTSTATUS_ */ #endif /* _NTSTATUS_ */

View file

@ -20,14 +20,7 @@
* *
*/ */
#ifndef __TVOUT_H
#define __TVOUT_H
#if _MSC_VER > 1000
#pragma once #pragma once
#endif
#ifndef GUID_DEFINED #ifndef GUID_DEFINED
#include <guiddef.h> #include <guiddef.h>
@ -107,7 +100,4 @@ typedef struct _VIDEOPARAMETERS {
ULONG dwCPKey; ULONG dwCPKey;
ULONG bCP_APSTriggerBits; ULONG bCP_APSTriggerBits;
UCHAR bOEMCopyProtection[256]; UCHAR bOEMCopyProtection[256];
} VIDEOPARAMETERS, *PVIDEOPARAMETERS, FAR *LPVIDEOPARAMETERS; } VIDEOPARAMETERS, *PVIDEOPARAMETERS, *LPVIDEOPARAMETERS;
#endif /* __TVOUT_H */

View file

@ -665,6 +665,8 @@ typedef struct _USB_DEVICE_PERFORMANCE_INFO {
#include <poppack.h> #include <poppack.h>
#endif /* USB_KERNEL_IOCTL */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -1505,14 +1505,14 @@ DWORD WINAPI GetFirmwareEnvironmentVariableA(LPCSTR,LPCSTR,PVOID,DWORD);
DWORD WINAPI GetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD); DWORD WINAPI GetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD);
#endif #endif
BOOL WINAPI FlushFileBuffers(HANDLE); BOOL WINAPI FlushFileBuffers(HANDLE);
BOOL WINAPI FlushInstructionCache(HANDLE,PCVOID,DWORD); BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
BOOL WINAPI FlushViewOfFile(PCVOID,SIZE_T); BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION); DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);
PVOID WINAPI FlsGetValue(DWORD); PVOID WINAPI FlsGetValue(DWORD);
BOOL WINAPI FlsSetValue(DWORD,PVOID); BOOL WINAPI FlsSetValue(DWORD,PVOID);
BOOL WINAPI FlsFree(DWORD); BOOL WINAPI FlsFree(DWORD);
DWORD WINAPI FormatMessageA(DWORD,PCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*); DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
DWORD WINAPI FormatMessageW(DWORD,PCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*); DWORD WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
BOOL WINAPI FreeEnvironmentStringsA(LPSTR); BOOL WINAPI FreeEnvironmentStringsA(LPSTR);
BOOL WINAPI FreeEnvironmentStringsW(LPWSTR); BOOL WINAPI FreeEnvironmentStringsW(LPWSTR);
BOOL WINAPI FreeLibrary(HMODULE); BOOL WINAPI FreeLibrary(HMODULE);
@ -1763,7 +1763,7 @@ UINT WINAPI GlobalFlags(HGLOBAL); /* Obsolete: Has no effect. */
HGLOBAL WINAPI GlobalFree(HGLOBAL); HGLOBAL WINAPI GlobalFree(HGLOBAL);
UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,int); UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,int);
UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,int); UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,int);
HGLOBAL WINAPI GlobalHandle(PCVOID); HGLOBAL WINAPI GlobalHandle(LPCVOID);
LPVOID WINAPI GlobalLock(HGLOBAL); LPVOID WINAPI GlobalLock(HGLOBAL);
VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS); VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
#if (_WIN32_WINNT >= 0x0500) #if (_WIN32_WINNT >= 0x0500)
@ -1789,9 +1789,9 @@ PVOID WINAPI HeapReAlloc(HANDLE,DWORD,PVOID,DWORD);
#if (_WIN32_WINNT >= 0x0501) #if (_WIN32_WINNT >= 0x0501)
BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T); BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
#endif #endif
DWORD WINAPI HeapSize(HANDLE,DWORD,PCVOID); SIZE_T WINAPI HeapSize(HANDLE,DWORD,LPCVOID);
BOOL WINAPI HeapUnlock(HANDLE); BOOL WINAPI HeapUnlock(HANDLE);
BOOL WINAPI HeapValidate(HANDLE,DWORD,PCVOID); BOOL WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY); BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
BOOL WINAPI ImpersonateAnonymousToken(HANDLE); BOOL WINAPI ImpersonateAnonymousToken(HANDLE);
BOOL WINAPI ImpersonateLoggedOnUser(HANDLE); BOOL WINAPI ImpersonateLoggedOnUser(HANDLE);
@ -1948,9 +1948,9 @@ InterlockedOr_Inline(IN OUT volatile LONG *Target,
#endif /* __INTERLOCKED_DECLARED */ #endif /* __INTERLOCKED_DECLARED */
BOOL WINAPI IsBadCodePtr(FARPROC); BOOL WINAPI IsBadCodePtr(FARPROC);
BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT_PTR); BOOL WINAPI IsBadHugeReadPtr(CONST VOID*,UINT_PTR);
BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT_PTR); BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT_PTR);
BOOL WINAPI IsBadReadPtr(PCVOID,UINT_PTR); BOOL WINAPI IsBadReadPtr(CONST VOID*,UINT_PTR);
BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR); BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR);
BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR); BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR);
BOOL WINAPI IsBadWritePtr(PVOID,UINT_PTR); BOOL WINAPI IsBadWritePtr(PVOID,UINT_PTR);
@ -1960,7 +1960,7 @@ BOOL WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL);
#endif #endif
BOOL WINAPI IsProcessorFeaturePresent(DWORD); BOOL WINAPI IsProcessorFeaturePresent(DWORD);
BOOL WINAPI IsSystemResumeAutomatic(void); BOOL WINAPI IsSystemResumeAutomatic(void);
BOOL WINAPI IsTextUnicode(PCVOID,int,LPINT); BOOL WINAPI IsTextUnicode(CONST VOID*,int,LPINT);
#if (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT >= 0x0600)
BOOL WINAPI IsThreadAFiber(VOID); BOOL WINAPI IsThreadAFiber(VOID);
#endif #endif
@ -2100,7 +2100,7 @@ BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,PVOID,DWORD,DWORD *,DWORD *);
BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED); BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
BOOL WINAPI ReadFileEx(HANDLE,PVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); BOOL WINAPI ReadFileEx(HANDLE,PVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED); BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
BOOL WINAPI ReadProcessMemory(HANDLE,PCVOID,PVOID,SIZE_T,PSIZE_T); BOOL WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,PSIZE_T);
#if (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT >= 0x0600)
VOID WINAPI RecoveryFinished(BOOL); VOID WINAPI RecoveryFinished(BOOL);
HRESULT WINAPI RecoveryInProgress(OUT PBOOL); HRESULT WINAPI RecoveryInProgress(OUT PBOOL);
@ -2301,8 +2301,8 @@ VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE);
VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE); VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
#endif #endif
BOOL WINAPI WinLoadTrustProvider(GUID*); BOOL WINAPI WinLoadTrustProvider(GUID*);
BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED); BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED); BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR); BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR); BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);

View file

@ -223,8 +223,8 @@ BOOL WINAPI SetConsoleTextAttribute(HANDLE,WORD);
BOOL WINAPI SetConsoleTitleA(LPCSTR); BOOL WINAPI SetConsoleTitleA(LPCSTR);
BOOL WINAPI SetConsoleTitleW(LPCWSTR); BOOL WINAPI SetConsoleTitleW(LPCWSTR);
BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*); BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*);
BOOL WINAPI WriteConsoleA(HANDLE,PCVOID,DWORD,PDWORD,PVOID); BOOL WINAPI WriteConsoleA(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
BOOL WINAPI WriteConsoleW(HANDLE,PCVOID,DWORD,PDWORD,PVOID); BOOL WINAPI WriteConsoleW(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD); BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD); BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT); BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);

View file

@ -305,7 +305,7 @@ typedef long *LPLONG;
typedef int *LPLONG; typedef int *LPLONG;
#endif #endif
typedef DWORD *PDWORD,*LPDWORD; typedef DWORD *PDWORD,*LPDWORD;
typedef CONST void *PCVOID,*LPCVOID; typedef CONST void *LPCVOID;
typedef unsigned int UINT,*PUINT,*LPUINT; typedef unsigned int UINT,*PUINT,*LPUINT;

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