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 compiler="midl">-m32 --win32</compilerflag>
<compilerflag compiler="cc,cxx">-gstabs+</compilerflag>
<compilerflag compiler="cc,cxx">-fno-set-stack-executable</compilerflag>
<compilerflag compiler="cc,cxx">-fno-optimize-sibling-calls</compilerflag>
<compilerflag compiler="as">-gstabs+</compilerflag>
</group>

View file

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

View file

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

View file

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

View file

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

View file

@ -9,20 +9,24 @@
#include "precomp.h"
const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
const GUID IID_IAC3Filter = {0xe4539501, 0xc609, 0x46ea, {0xad, 0x2a, 0x0e, 0x97, 0x00, 0x24, 0x56, 0x83}};
const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
const GUID IID_IMatrixMixer = {0xafc57835, 0x2fd1, 0x4541, {0xa6, 0xd9, 0x0d, 0xb7, 0x18, 0x56, 0xe5, 0x89}};
const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
#ifndef _MSC_VER
const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
const GUID KSMETHODSETID_BdaChangeSync = {0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
#endif
class CBDADeviceControl : public IBDA_DeviceControl,
public IBDA_Topology
@ -476,7 +480,7 @@ CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG
if (FAILED(hr))
return hr;
hr = CControlNode_fnConstructor(m_Handle, m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
hr = CControlNode_fnConstructor(m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
#ifdef BDAPLGIN_TRACE
swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);

View file

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

View file

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

View file

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

View file

@ -9,9 +9,12 @@
#include "precomp.h"
const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
#ifndef _MSC_VER
const GUID KSPROPSETID_BdaPinControl = {0x0ded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}};
const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
#endif
class CBDAPinControl : public IBDA_PinControl
{
@ -39,7 +42,7 @@ public:
HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin){};
CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin, ULONG RegistrationCtx) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin), m_RegistrationCtx(RegistrationCtx){};
virtual ~CBDAPinControl()
{
//m_pConnectedPin->Release();
@ -51,6 +54,7 @@ protected:
HANDLE m_Handle;
IBDA_NetworkProvider * m_pProvider;
IPin * m_pConnectedPin;
ULONG m_RegistrationCtx;
};
HRESULT
@ -72,16 +76,7 @@ CBDAPinControl::QueryInterface(
reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef();
return NOERROR;
}
#ifdef BDAPLGIN_TRACE
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CBDAPinControl::QueryInterface: NoInterface for %s", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
#endif
DebugBreak();
return E_NOINTERFACE;
}
//-------------------------------------------------------------------
@ -142,10 +137,98 @@ STDMETHODCALLTYPE
CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
{
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n");
OutputDebugStringW(L"CBDAPinControl::RegistrationContext\n");
#endif
return E_NOTIMPL;
if (!pulRegistrationCtx)
{
// invalid argument
return E_POINTER;
}
if (m_RegistrationCtx)
{
// is registered
*pulRegistrationCtx = m_RegistrationCtx;
return NOERROR;
}
//pin not registered
return E_FAIL;
}
//-------------------------------------------------------------------
HRESULT
GetNetworkProviderFromGraph(
IFilterGraph * pGraph,
IBDA_NetworkProvider ** pOutNetworkProvider)
{
IEnumFilters *pEnumFilters = NULL;
IBaseFilter * ppFilter[1];
IBDA_NetworkProvider * pNetworkProvider = NULL;
HRESULT hr;
// get IEnumFilters interface
hr = pGraph->EnumFilters(&pEnumFilters);
if (FAILED(hr))
{
//clean up
*pOutNetworkProvider = NULL;
return hr;
}
while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
{
// check if that filter supports the IBDA_NetworkProvider interface
hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
// release IBaseFilter
ppFilter[0]->Release();
if (SUCCEEDED(hr))
break;
}
// release IEnumFilters interface
pEnumFilters->Release();
//store result
*pOutNetworkProvider = pNetworkProvider;
if (pNetworkProvider)
return S_OK;
else
return E_FAIL;
}
HRESULT
CBDAPinControl_RealConstructor(
HANDLE hPin,
IBDA_NetworkProvider *pNetworkProvider,
IPin * pConnectedPin,
ULONG RegistrationCtx,
IUnknown * pUnkOuter,
REFIID riid,
LPVOID * ppv)
{
CBDAPinControl * handler = new CBDAPinControl(hPin, pNetworkProvider, pConnectedPin, RegistrationCtx);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
#endif
if (!handler)
return E_OUTOFMEMORY;
if (FAILED(handler->QueryInterface(riid, ppv)))
{
/* not supported */
delete handler;
return E_NOINTERFACE;
}
return NOERROR;
}
HRESULT
@ -158,30 +241,20 @@ CBDAPinControl_fnConstructor(
IPin * pConnectedPin = NULL;
IBDA_NetworkProvider * pNetworkProvider = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
#if 0
if (!IsEqualGUID(riid, IID_IUnknown))
{
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl_fnConstructor: Expected IUnknown\n");
#endif
return REGDB_E_CLASSNOTREG;
}
HRESULT hr;
IKsObject * pObject = NULL;
IPin * pPin = NULL;
IEnumFilters *pEnumFilters = NULL;
IBaseFilter * ppFilter[1];
IUnknown * pUnknown = NULL;
PIN_INFO PinInfo;
FILTER_INFO FilterInfo;
ULONG RegistrationCtx = 0;
if (!pUnkOuter)
return E_POINTER;
OutputDebugStringW(L"CBDAPinControl_fnConstructor\n");
//DebugBreak();
// query for IKsObject interface
hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
@ -209,8 +282,15 @@ CBDAPinControl_fnConstructor(
return hr;
}
if (!PinInfo.pFilter)
{
//clean up
pObject->Release();
pPin->Release();
return hr;
}
// sanity checks
assert(PinInfo.dir == PINDIR_OUTPUT);
assert(PinInfo.pFilter != NULL);
// query filter info
@ -219,57 +299,80 @@ CBDAPinControl_fnConstructor(
// sanity check
assert(FilterInfo.pGraph != NULL);
// get IEnumFilters interface
hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters);
// get network provider interface
hr = GetNetworkProviderFromGraph(FilterInfo.pGraph, &pNetworkProvider);
if (FAILED(hr))
if (SUCCEEDED(hr))
{
//clean up
FilterInfo.pGraph->Release();
PinInfo.pFilter->Release();
pObject->Release();
pPin->Release();
return hr;
if (PinInfo.dir == PINDIR_OUTPUT)
{
// get connected pin handle
hr = pPin->ConnectedTo(&pConnectedPin);
if (SUCCEEDED(hr))
{
// get file handle
hFile = pObject->KsGetObjectHandle();
if (hFile)
{
hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, pConnectedPin, 0, pUnkOuter, riid, ppv);
if (SUCCEEDED(hr))
{
// set to null to prevent releasing
pNetworkProvider = NULL;
pConnectedPin = NULL;
}
}
else
{
// expected file handle
hr = E_UNEXPECTED;
}
}
}
else
{
// get IUnknown from base filter
hr = PinInfo.pFilter->QueryInterface(IID_IUnknown, (void**)&pUnknown);
if (SUCCEEDED(hr))
{
// register device filter
hr = pNetworkProvider->RegisterDeviceFilter(pUnknown, &RegistrationCtx);
if (SUCCEEDED(hr))
{
// get file handle
hFile = pObject->KsGetObjectHandle();
if (hFile)
{
hr = CBDAPinControl_RealConstructor(hFile, pNetworkProvider, NULL, RegistrationCtx, pUnkOuter, riid, ppv);
if (SUCCEEDED(hr))
{
// set to null to prevent releasing
pNetworkProvider = NULL;
}
}
else
{
// expected file handle
hr = E_UNEXPECTED;
}
}
else
{
WCHAR Buffer[100];
swprintf(Buffer, L"CBDAPinControl_fnConstructor failed to register filter with %lx\n", hr);
OutputDebugStringW(Buffer);
DebugBreak();
}
}
}
}
while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
{
// check if that filter supports the IBDA_NetworkProvider interface
hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
// release IBaseFilter
ppFilter[0]->Release();
if (SUCCEEDED(hr))
break;
}
// release IEnumFilters interface
pEnumFilters->Release();
// release IFilterGraph interface
FilterInfo.pGraph->Release();
// release IBaseFilter interface
PinInfo.pFilter->Release();
if (pNetworkProvider)
{
// get connected pin handle
hr = pPin->ConnectedTo(&pConnectedPin);
// get file handle
hFile = pObject->KsGetObjectHandle();
if (FAILED(hr) || hFile == INVALID_HANDLE_VALUE)
{
// pin not connected
pNetworkProvider->Release();
// set zero
pNetworkProvider = NULL;
}
}
// release IPin
pPin->Release();
@ -277,30 +380,23 @@ CBDAPinControl_fnConstructor(
pObject->Release();
if (pNetworkProvider == NULL)
if (pNetworkProvider)
{
// no network provider interface in graph
return E_NOINTERFACE;
}
#endif
CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin);
#ifdef BDAPLGIN_TRACE
OutputDebugStringW(L"CBDAPinControl_fnConstructor");
#endif
DebugBreak();
if (!handler)
return E_OUTOFMEMORY;
if (FAILED(handler->QueryInterface(riid, ppv)))
{
/* not supported */
delete handler;
return E_NOINTERFACE;
// release network provider
pNetworkProvider->Release();
}
return NOERROR;
if (pConnectedPin)
{
// release connected pin
pConnectedPin->Release();
}
if (pUnknown)
{
// release filter
pUnknown->Release();
}
return hr;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -64,13 +64,6 @@ CEnumMediaTypes::QueryInterface(
return NOERROR;
}
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CEnumMediaTypes::QueryInterface: NoInterface for %s\n", lpstr);
OutputDebugStringW(Buffer);
CoTaskMemFree(lpstr);
return E_NOINTERFACE;
}
@ -171,7 +164,9 @@ STDMETHODCALLTYPE
CEnumMediaTypes::Clone(
IEnumMediaTypes **ppEnum)
{
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
#endif
return E_NOTIMPL;
}
@ -189,7 +184,7 @@ CEnumMediaTypes_fnConstructor(
WCHAR Buffer[MAX_PATH];
LPOLESTR lpstr;
StringFromCLSID(riid, &lpstr);
swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s\n", lpstr);
OutputDebugStringW(Buffer);
#endif

View file

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

View file

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

View file

@ -285,10 +285,11 @@ CKsInterfaceHandler::KsProcessMediaSamples(
if (SampleList[Index]->IsSyncPoint() == S_OK)
Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT;
}
#ifdef KSPROXY_TRACE
WCHAR Buffer[200];
swprintf(Buffer, L"CKsInterfaceHandler::KsProcessMediaSamples PinName %s BufferLength %lu Property Buffer %p ExtendedSize %u lActual %u dwSampleFlags %lx\n", m_PinName, Properties.cbBuffer, Properties.pbBuffer, ExtendedSize, Properties.lActual, Properties.dwSampleFlags);
//OutputDebugStringW(Buffer);
OutputDebugStringW(Buffer);
#endif
CurStreamHeader->Size = sizeof(KSSTREAM_HEADER) + ExtendedSize;
CurStreamHeader->PresentationTime.Denominator = 1;
@ -479,7 +480,9 @@ CKsInterfaceHandler_Constructor(
REFIID riid,
LPVOID * ppv)
{
#ifdef KSPROXY_TRACE
OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n");
#endif
CKsInterfaceHandler * handler = new CKsInterfaceHandler();

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

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>
<redefine name="WINVER">0x600</redefine>
<file>idndl.cpp</file>
<importlibrary definition="idndl-$(ARCH).def" />
<importlibrary definition="idndl.spec" />
</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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* $Id$
*
/*
* PROJECT: ReactOS Access Control List Editor
* FILE: lib/acledit/acledit.c
* PURPOSE: Access Control List Editor

View file

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

View file

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

View file

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

View file

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

View file

@ -47,7 +47,7 @@ ConvertFiberToThread(VOID)
pTeb->HasFiberData = FALSE;
/* free the fiber */
if (pTeb->NtTib.FiberData != NULL)
if(pTeb->NtTib.FiberData != NULL)
{
RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData);
}

View file

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

View file

@ -45,11 +45,6 @@
#include <pseh/pseh2.h>
/* This hack definition is necessary as long as setupapi
depends on Wine "compatibility" headers */
typedef ULONG RESOURCEID;
typedef RESOURCEID *PRESOURCEID;
#include <pnp_c.h>
#include "rpc_private.h"
#include "resource.h"
@ -61,6 +56,8 @@ typedef RESOURCEID *PRESOURCEID;
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057
#define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
#define CMP_MAGIC 0x01234567
struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */
{
LIST_ENTRY ListEntry;

View file

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

View file

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

View file

@ -58,6 +58,7 @@ KSPIN_LOCK acpi_bus_event_lock;
LIST_HEAD(acpi_bus_event_list);
//DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
KEVENT AcpiEventQueue;
KDPC event_dpc;
static int
@ -455,6 +456,21 @@ acpi_bus_get_perf_flags (
Event Management
-------------------------------------------------------------------------- */
void
acpi_bus_generate_event_dpc(PKDPC Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2)
{
struct acpi_bus_event *event = SystemArgument1;
KIRQL OldIrql;
KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
list_add_tail(&event->node, &acpi_bus_event_list);
KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
}
int
acpi_bus_generate_event (
@ -463,10 +479,8 @@ acpi_bus_generate_event (
int data)
{
struct acpi_bus_event *event = NULL;
//unsigned long flags = 0;
KIRQL OldIrql;
DPRINT1("acpi_bus_generate_event");
DPRINT("acpi_bus_generate_event");
if (!device)
return_VALUE(AE_BAD_PARAMETER);
@ -484,14 +498,8 @@ acpi_bus_generate_event (
event->type = type;
event->data = data;
//spin_lock_irqsave(&acpi_bus_event_lock, flags);
KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql);
list_add_tail(&event->node, &acpi_bus_event_list);
KeReleaseSpinLock(&acpi_bus_event_lock, OldIrql);
//spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
KeSetEvent(&AcpiEventQueue, IO_NO_INCREMENT, FALSE);
//wake_up_interruptible(&acpi_bus_event_queue);
if (!KeInsertQueueDpc(&event_dpc, event, NULL))
ExFreePool(event);
return_VALUE(0);
}
@ -506,7 +514,7 @@ acpi_bus_receive_event (
//DECLARE_WAITQUEUE(wait, current);
DPRINT1("acpi_bus_receive_event");
DPRINT("acpi_bus_receive_event");
if (!event)
return AE_BAD_PARAMETER;
@ -1153,9 +1161,11 @@ acpi_bus_add (
case ACPI_BUS_TYPE_SYSTEM:
sprintf(device->pnp.bus_id, "%s", "ACPI");
break;
case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_POWER_BUTTON:
sprintf(device->pnp.bus_id, "%s", "PWRF");
break;
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON:
sprintf(device->pnp.bus_id, "%s", "SLPF");
break;
@ -1262,9 +1272,15 @@ acpi_bus_add (
hid = ACPI_THERMAL_HID;
break;
case ACPI_BUS_TYPE_POWER_BUTTON:
hid = ACPI_BUTTON_HID_POWER;
break;
case ACPI_BUS_TYPE_POWER_BUTTONF:
hid = ACPI_BUTTON_HID_POWERF;
break;
case ACPI_BUS_TYPE_SLEEP_BUTTON:
hid = ACPI_BUTTON_HID_SLEEP;
break;
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
hid = ACPI_BUTTON_HID_SLEEPF;
break;
}
@ -1326,7 +1342,9 @@ acpi_bus_add (
*/
switch (type) {
case ACPI_BUS_TYPE_POWER_BUTTON:
case ACPI_BUS_TYPE_POWER_BUTTONF:
case ACPI_BUS_TYPE_SLEEP_BUTTON:
case ACPI_BUS_TYPE_SLEEP_BUTTONF:
break;
default:
status = AcpiAttachData(device->handle,
@ -1530,16 +1548,40 @@ acpi_bus_scan_fixed (
if (!root)
return_VALUE(AE_NOT_FOUND);
/*
* Enumerate all fixed-feature devices.
/* If ACPI_FADT_POWER_BUTTON is set, then a control
* method power button is present. Otherwise, a fixed
* power button is present.
*/
if (AcpiGbl_FADT.Flags & ACPI_FADT_POWER_BUTTON)
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTON);
else
{
/* Enable the fixed power button so we get notified if it is pressed */
AcpiWriteBitRegister(ACPI_BITREG_POWER_BUTTON_ENABLE, 1);
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_POWER_BUTTONF);
}
/* This one is a bit more complicated and we do it wrong
* right now. If ACPI_FADT_SLEEP_BUTTON is set but no
* device object is present then no sleep button is present, but
* if the flags is clear and there is no device object then it is
* a fixed sleep button. If the flag is set and there is a device object
* the we have a control method button just like above.
*/
if (AcpiGbl_FADT.Flags & ACPI_FADT_SLEEP_BUTTON)
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
else
{
/* Enable the fixed sleep button so we get notified if it is pressed */
AcpiWriteBitRegister(ACPI_BITREG_SLEEP_BUTTON_ENABLE, 1);
result = acpi_bus_add(&device, acpi_root,
NULL, ACPI_BUS_TYPE_SLEEP_BUTTONF);
}
return_VALUE(result);
}
@ -1549,120 +1591,6 @@ acpi_bus_scan_fixed (
Initialization/Cleanup
-------------------------------------------------------------------------- */
static int
acpi_bus_init_irq (void)
{
ACPI_STATUS status = AE_OK;
ACPI_OBJECT arg = {ACPI_TYPE_INTEGER};
ACPI_OBJECT_LIST arg_list = {1, &arg};
//char *message = NULL;
DPRINT("acpi_bus_init_irq");
/*
* Let the system know what interrupt model we are using by
* evaluating the \_PIC object, if exists.
*/
//switch (acpi_irq_model) {
//case ACPI_IRQ_MODEL_PIC:
// message = "PIC";
// break;
//case ACPI_IRQ_MODEL_IOAPIC:
// message = "IOAPIC";
// break;
//case ACPI_IRQ_MODEL_IOSAPIC:
// message = "IOSAPIC";
// break;
//default:
// DPRINT1("Unknown interrupt routing model\n");
// return_VALUE(AE_NOT_FOUND);
//}
//DPRINT("Using %s for interrupt routing\n", message);
//arg.Integer.Value = acpi_irq_model;
//status = AcpiEvaluateObject(NULL, "\\_PIC", &arg_list, NULL);
//if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
// ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PIC\n"));
// return_VALUE(AE_NOT_FOUND);
//}
return_VALUE(0);
}
//void
//acpi_early_init (void)
//{
// ACPI_STATUS status = AE_OK;
//
// DPRINT("acpi_early_init");
//
// if (acpi_disabled)
// return_VOID;
//
/* enable workarounds, unless strict ACPI spec. compliance */
// if (!acpi_strict)
// acpi_gbl_enable_interpreter_slack = TRUE;
//
// status = acpi_reallocate_root_table();
// if (ACPI_FAILURE(status)) {
// printk(KERN_ERR PREFIX
// "Unable to reallocate ACPI tables\n");
// goto error0;
// }
//
// status = acpi_initialize_subsystem();
// if (ACPI_FAILURE(status)) {
// printk(KERN_ERR PREFIX
// "Unable to initialize the ACPI Interpreter\n");
// goto error0;
// }
//
// status = acpi_load_tables();
// if (ACPI_FAILURE(status)) {
// printk(KERN_ERR PREFIX
// "Unable to load the System Description Tables\n");
// goto error0;
// }
//
//#ifdef CONFIG_X86
// if (!acpi_ioapic) {
// /* compatible (0) means level (3) */
// if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
// acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
// acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
// }
// /* Set PIC-mode SCI trigger type */
// acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
// (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
// } else {
// /*
// * now that acpi_gbl_FADT is initialized,
// * update it with result from INT_SRC_OVR parsing
// */
// acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
// }
//#endif
//
// status =
// acpi_enable_subsystem(~
// (ACPI_NO_HARDWARE_INIT |
// ACPI_NO_ACPI_ENABLE));
// if (ACPI_FAILURE(status)) {
// printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
// goto error0;
// }
//
// return;
//
// error0:
// disable_acpi();
// return;
//}
int
acpi_bus_init (void)
{
@ -1671,6 +1599,8 @@ acpi_bus_init (void)
DPRINT("acpi_bus_init");
KeInitializeDpc(&event_dpc, acpi_bus_generate_event_dpc, NULL);
status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION);
if (ACPI_FAILURE(status)) {
DPRINT1("Unable to start the ACPI Interpreter\n");
@ -1701,13 +1631,6 @@ acpi_bus_init (void)
/* Initialize sleep structures */
//acpi_sleep_init();
/*
* Get the system interrupt model and evaluate \_PIC.
*/
result = acpi_bus_init_irq();
if (result)
goto error1;
/*
* Register the for all standard device notifications.
*/
@ -1726,6 +1649,7 @@ acpi_bus_init (void)
if (result)
goto error2;
/*
* Enumerate devices in the ACPI namespace.
*/
@ -1736,7 +1660,6 @@ acpi_bus_init (void)
if (result)
DPRINT1("acpi_bus_scan failed\n");
//acpi_motherboard_init();
return_VALUE(0);
/* Mimic structured exception handling */

View file

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

View file

@ -8,6 +8,9 @@
#include <acpi_bus.h>
#include <acpi_drivers.h>
#include <initguid.h>
#include <poclass.h>
#define NDEBUG
#include <debug.h>
@ -33,9 +36,13 @@ Bus_PDO_PnP (
{
NTSTATUS status;
POWER_STATE state;
struct acpi_device *device = NULL;
PAGED_CODE ();
if (DeviceData->AcpiHandle)
acpi_bus_get_device(DeviceData->AcpiHandle, &device);
//
// NB: Because we are a bus enumerator, we have no one to whom we could
// defer these irps. Therefore we do not pass them down but merely
@ -45,7 +52,6 @@ Bus_PDO_PnP (
switch (IrpStack->MinorFunction) {
case IRP_MN_START_DEVICE:
//
// Here we do what ever initialization and ``turning on'' that is
// required to allow others to access this device.
@ -59,6 +65,43 @@ Bus_PDO_PnP (
break;
}
DeviceData->InterfaceName.Length = 0;
if (!device)
{
IoRegisterDeviceInterface(DeviceData->Common.Self,
&GUID_DEVICE_SYS_BUTTON,
NULL,
&DeviceData->InterfaceName);
}
else if (device->flags.hardware_id &&
strstr(device->pnp.hardware_id, ACPI_THERMAL_HID))
{
IoRegisterDeviceInterface(DeviceData->Common.Self,
&GUID_DEVICE_THERMAL_ZONE,
NULL,
&DeviceData->InterfaceName);
}
else if (device->flags.hardware_id &&
strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID))
{
IoRegisterDeviceInterface(DeviceData->Common.Self,
&GUID_DEVICE_LID,
NULL,
&DeviceData->InterfaceName);
}
else if (device->flags.hardware_id &&
strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))
{
IoRegisterDeviceInterface(DeviceData->Common.Self,
&GUID_DEVICE_PROCESSOR,
NULL,
&DeviceData->InterfaceName);
}
if (DeviceData->InterfaceName.Length != 0)
IoSetDeviceInterfaceState(&DeviceData->InterfaceName, TRUE);
state.DeviceState = PowerDeviceD0;
PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state);
DeviceData->Common.DevicePowerState = PowerDeviceD0;
@ -68,6 +111,9 @@ Bus_PDO_PnP (
case IRP_MN_STOP_DEVICE:
if (DeviceData->InterfaceName.Length != 0)
IoSetDeviceInterfaceState(&DeviceData->InterfaceName, FALSE);
//
// Here we shut down the device and give up and unmap any resources
// we acquired for the device.
@ -331,20 +377,17 @@ Bus_PDO_QueryDeviceCaps(
deviceCapabilities->UniqueID = device->flags.unique_id;
deviceCapabilities->NoDisplayInUI = !device->status.show_in_ui;
deviceCapabilities->Address = device->pnp.bus_address;
deviceCapabilities->RawDeviceOK = FALSE;
}
else
{
deviceCapabilities->EjectSupported = FALSE;
deviceCapabilities->HardwareDisabled = FALSE;
deviceCapabilities->Removable = FALSE;
deviceCapabilities->SurpriseRemovalOK = FALSE;
deviceCapabilities->UniqueID = FALSE;
deviceCapabilities->NoDisplayInUI = FALSE;
deviceCapabilities->Address = 0;
/* The ACPI driver will run fixed buttons */
deviceCapabilities->RawDeviceOK = TRUE;
if (!device ||
(device->flags.hardware_id &&
(strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID) ||
strstr(device->pnp.hardware_id, ACPI_THERMAL_HID) ||
strstr(device->pnp.hardware_id, ACPI_PROCESSOR_HID))))
{
/* Allow ACPI to control the device if it is a lid button,
* a thermal zone, a processor, or a fixed feature button */
deviceCapabilities->RawDeviceOK = TRUE;
}
deviceCapabilities->SilentInstall = FALSE;

View file

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

View file

@ -78,60 +78,6 @@ GetStringElement(IN PACPI_METHOD_ARGUMENT Argument,
return Status;
}
NTSTATUS
NTAPI
CmBattGetPsrData(PDEVICE_OBJECT DeviceObject,
PULONG PsrData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
PACPI_BIF_DATA BifData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
PACPI_BST_DATA BstData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattGetStaData(PDEVICE_OBJECT DeviceObject,
PULONG StaData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject,
PULONG UniqueId)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension,
ULONG AlarmValue)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
@ -166,8 +112,253 @@ CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject,
if (CmBattDebug & 0x4C)
DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Call ACPI */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n",
Irp, KeGetCurrentThread());
Status = IoCallDriver(DeviceObject, Irp);
if (Status == STATUS_PENDING)
{
/* Wait for completion */
KeWaitForSingleObject(&Event,
Executive,
KernelMode,
FALSE,
NULL);
Status = Irp->IoStatus.Status;
}
/* Check if caller wanted output */
if (OutputBuffer)
{
/* Make sure it's valid ACPI output buffer */
if ((OutputBuffer->Signature != ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE) ||
!(OutputBuffer->Count))
{
/* It isn't, so set failure code */
Status = STATUS_ACPI_INVALID_DATA;
}
}
/* Return status */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x completed %x! [Tid] %x\n",
Irp, Status, KeGetCurrentThread());
return Status;
}
NTSTATUS
NTAPI
CmBattGetPsrData(IN PDEVICE_OBJECT DeviceObject,
OUT PULONG PsrData)
{
NTSTATUS Status;
ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
ACPI_EVAL_INPUT_BUFFER InputBuffer;
PAGED_CODE();
if (CmBattDebug & 0x40)
DbgPrint("CmBattGetPsrData: Entered with Pdo %x Tid %x\n",
DeviceObject, KeGetCurrentThread());
/* Initialize to zero */
ASSERT(PsrData != NULL);
*PsrData = 0;
/* Request the _PSR method */
*(PULONG)InputBuffer.MethodName = 'RSP_';
InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
/* Send it to ACPI */
Status = CmBattSendDownStreamIrp(DeviceObject,
IOCTL_ACPI_EVAL_METHOD,
&InputBuffer,
sizeof(InputBuffer),
&OutputBuffer,
sizeof(OutputBuffer));
if (NT_SUCCESS(Status))
{
/* Read the result */
Status = GetDwordElement(OutputBuffer.Argument, PsrData);
if (CmBattDebug & 0x440)
DbgPrint("CmBattGetPsrData: _PSR method returned %x \n", *PsrData);
}
else if (CmBattDebug & 0x44C)
{
/* Failure */
DbgPrint("CmBattGetPsrData: Failed _PSR method - Status (0x%x)\n", Status);
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject,
OUT PULONG StaData)
{
NTSTATUS Status;
ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
ACPI_EVAL_INPUT_BUFFER InputBuffer;
PAGED_CODE();
if (CmBattDebug & 0x40)
DbgPrint("CmBattGetStaData: Entered with Pdo %x Tid %x\n",
DeviceObject, KeGetCurrentThread());
/* Initialize to zero */
ASSERT(StaData != NULL);
*StaData = 0;
/* Request the _PSR method */
*(PULONG)InputBuffer.MethodName = 'ATS_';
InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
/* Send it to ACPI */
Status = CmBattSendDownStreamIrp(DeviceObject,
IOCTL_ACPI_EVAL_METHOD,
&InputBuffer,
sizeof(InputBuffer),
&OutputBuffer,
sizeof(OutputBuffer));
if (NT_SUCCESS(Status))
{
/* Read the result */
Status = GetDwordElement(OutputBuffer.Argument, StaData);
if (CmBattDebug & 0x440)
DbgPrint("CmBattGetStaData: _STA method returned %x \n", *StaData);
}
else if (CmBattDebug & 0x44C)
{
/* Failure */
DbgPrint("CmBattGetStaData: Failed _STA method - Status (0x%x)\n", Status);
Status = STATUS_NO_SUCH_DEVICE;
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject,
OUT PULONG UniqueId)
{
NTSTATUS Status;
ACPI_EVAL_OUTPUT_BUFFER OutputBuffer;
ACPI_EVAL_INPUT_BUFFER InputBuffer;
PAGED_CODE();
if (CmBattDebug & 0x40)
DbgPrint("CmBattGetUniqueId: Entered with Pdo %x Tid %x\n",
DeviceObject, KeGetCurrentThread());
/* Initialize to zero */
ASSERT(UniqueId != NULL);
*UniqueId = 0;
/* Request the _PSR method */
*(PULONG)InputBuffer.MethodName = 'DIU_';
InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE;
/* Send it to ACPI */
Status = CmBattSendDownStreamIrp(DeviceObject,
IOCTL_ACPI_EVAL_METHOD,
&InputBuffer,
sizeof(InputBuffer),
&OutputBuffer,
sizeof(OutputBuffer));
if (NT_SUCCESS(Status))
{
/* Read the result */
Status = GetDwordElement(OutputBuffer.Argument, UniqueId);
if (CmBattDebug & 0x440)
DbgPrint("CmBattGetUniqueId: _UID method returned %x \n", *UniqueId);
}
else if (CmBattDebug & 0x44C)
{
/* Failure */
DbgPrint("CmBattGetUniqueId: Failed _UID method - Status (0x%x)\n", Status);
Status = STATUS_NO_SUCH_DEVICE;
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
CmBattSetTripPpoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
IN ULONG AlarmValue)
{
NTSTATUS Status;
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER InputBuffer;
PAGED_CODE();
if (CmBattDebug & 0x440)
DbgPrint("CmBattSetTripPpoint: _BTP Alarm Value %x Device %x Tid %x\n",
AlarmValue, DeviceExtension->DeviceId, KeGetCurrentThread);
/* Request the _BTP method */
*(PULONG)InputBuffer.MethodName = 'PTB_';
InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE;
InputBuffer.IntegerArgument = AlarmValue;
/* Send it to ACPI */
Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice,
IOCTL_ACPI_EVAL_METHOD,
&InputBuffer,
sizeof(InputBuffer),
NULL,
0);
if (!(NT_SUCCESS(Status)) && (CmBattDebug & 0x440))
DbgPrint("CmBattSetTripPpoint: Failed _BTP method on device %x - Status (0x%x)\n",
DeviceExtension->DeviceId, Status);
/* Return status */
return Status;
}
NTSTATUS
NTAPI
CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
PACPI_BIF_DATA BifData)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension,
PACPI_BST_DATA BstData)
{
PIRP Irp;
NTSTATUS Status;
KEVENT Event;
IO_STATUS_BLOCK IoStatusBlock;
PAGED_CODE();
/* Initialize our wait event */
KeInitializeEvent(&Event, SynchronizationEvent, 0);
/* Allocate the IRP */
Irp = IoBuildDeviceIoControlRequest(IoControlCode,
DeviceObject,
InputBuffer,
InputBufferLength,
OutputBuffer,
OutputBufferLength,
0,
&Event,
&IoStatusBlock);
if (!Irp)
{
/* No IRP, fail */
if (CmBattDebug & 0x4C)
DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Call ACPI */
if (CmBattDebug & 0x40)
DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n", Irp, KeGetCurrentThread());

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_POWER_BUTTON,
ACPI_BUS_TYPE_SLEEP_BUTTON,
ACPI_BUS_TYPE_POWER_BUTTONF,
ACPI_BUS_TYPE_SLEEP_BUTTONF,
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
LIST_ENTRY Link;
ULONG InterfaceRefCount;
UNICODE_STRING InterfaceName;
} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
@ -64,10 +65,6 @@ typedef struct _FDO_DEVICE_DATA
// A synchronization for access to the device extension.
FAST_MUTEX Mutex;
// The name returned from IoRegisterDeviceInterface,
// which is used as a handle for IoSetDeviceInterfaceState.
UNICODE_STRING InterfaceName;
} FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
#define FDO_FROM_PDO(pdoData) \
@ -90,6 +87,11 @@ NTSTATUS
ACPIEnumerateDevices(
PFDO_DEVICE_DATA DeviceExtension);
NTSTATUS
NTAPI
Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
PIRP Irp);
NTSTATUS
NTAPI
Bus_CreateClose (

View file

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

View file

@ -576,7 +576,12 @@ AcpiOsWaitSemaphore(
DPRINT("Waiting for semaphore %p\n", Handle);
ASSERT(Mutex);
ExAcquireFastMutex(Mutex);
/* HACK: We enter here at a high IRQL sometimes
* because we get called from DPCs and ISRs and
* we can't use a fast mutex at that IRQL */
if (KeGetCurrentIrql() <= APC_LEVEL)
ExAcquireFastMutex(Mutex);
return AE_OK;
}
@ -590,7 +595,12 @@ AcpiOsSignalSemaphore (
DPRINT("AcpiOsSignalSemaphore %p\n",Handle);
ASSERT(Mutex);
ExReleaseFastMutex(Mutex);
/* HACK: We enter here at a high IRQL sometimes
* because we get called from DPCs and ISRs and
* we can't use a fast mutex at that IRQL */
if (KeGetCurrentIrql() <= APC_LEVEL)
ExReleaseFastMutex(Mutex);
return AE_OK;
}

View file

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

View file

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

View file

@ -42,8 +42,11 @@ typedef unsigned char BYTE;
/* REACTOS FIXME */
#undef DeleteFile
/* This is deprecated and should be changed in the EXT2FS driver. */
/* FIXME : Those two definitions already exist in wdm.h
#define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart
#define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart
*/
// the following include files should be in the inc sub-dir associated with this driver

View file

@ -17,15 +17,6 @@
#define PST_RS232 1
#define COMMPROP_INITIALIZED 0xE73CF52E
#ifndef _NTIFS_
/* Why is it only defined in ntifs.h file? */
NTSTATUS NTAPI
IoAttachDeviceToDeviceStackSafe(
IN PDEVICE_OBJECT SourceDevice,
IN PDEVICE_OBJECT TargetDevice,
OUT PDEVICE_OBJECT *AttachedToDeviceObject);
#endif
typedef enum
{
dsStopped,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -9,9 +9,9 @@
</if>
<if property="ARCH" value="amd64">
<directory name="halx86">
<xi:include href="halx86/directory.rbuild" />
</directory>
<directory name="halx86">
<xi:include href="halx86/directory.rbuild" />
</directory>
</if>
<if property="ARCH" value="powerpc">

View file

@ -8,15 +8,17 @@
/* INCLUDES ******************************************************************/
#include <asm.h>
#include <internal/i386/asmmacro.S>
.intel_syntax noprefix
/* GLOBALS *******************************************************************/
.globl _HalpPerfCounter
_HalpLastPerfCounterLow: .long 0
_HalpLastPerfCounterHigh: .long 0
_HalpPerfCounter:
_HalpPerfCounterLow: .long 0
_HalpPerfCounterHigh: .long 0
_HalpSystemHardwareFlags: .long 0
_UnhandledMsg:
.asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n"
@ -327,6 +329,7 @@ AndItsNotYou:
ret
.endfunc
#ifndef _MINIHAL_
.globl _KeStallExecutionProcessor@4
.func KeStallExecutionProcessor@4
_KeStallExecutionProcessor@4:
@ -357,6 +360,7 @@ Done:
/* Return */
ret 4
.endfunc
#endif
.global _KeQueryPerformanceCounter@4
.func KeQueryPerformanceCounter@4
@ -517,72 +521,3 @@ InvalidCount:
mov _HalpLastPerfCounterHigh, eax
jmp LoopPreInt
.endfunc
.globl _HalpClockInterrupt@0
.func HalpClockInterrupt@0
TRAP_FIXUPS hci_a, hci_t, DoFixupV86, DoFixupAbios
_HalpClockInterrupt@0:
/* Enter trap */
INT_PROLOG hci_a, hci_t, DoPushFakeErrorCode
/* Push vector and make stack for IRQL */
push 0x30
sub esp, 4
/* Begin the interrupt */
push esp
push 0x30
push CLOCK2_LEVEL
call _HalBeginSystemInterrupt@12
/* Check if it's spurious */
or al, al
jz Spurious
/* Update the performance counter */
xor ebx, ebx
mov eax, _HalpCurrentRollOver
add _HalpPerfCounterLow, eax
adc _HalpPerfCounterHigh, ebx
/* Get the time increment and check if someone changed the clock rate */
mov eax, _HalpCurrentTimeIncrement
cmp _HalpClockSetMSRate, ebx
jz _KeUpdateSystemTime@0
/* FIXME: Someone did! */
int 3
Spurious:
/* Exit the interrupt */
add esp, 8
jmp _Kei386EoiHelper@0
.endfunc
.globl _HalpProfileInterrupt@0
.func HalpProfileInterrupt@0
TRAP_FIXUPS hpi_a, hpi_t, DoFixupV86, DoFixupAbios
_HalpProfileInterrupt@0:
/* Enter trap */
INT_PROLOG hpi_a, hpi_t, DoPushFakeErrorCode
/* Push vector and make stack for IRQL */
push 0x38
sub esp, 4
/* Begin the interrupt */
push esp
push 0x38
push PROFILE_LEVEL
call _HalBeginSystemInterrupt@12
/* Check if it's spurious */
or al, al
jz Spurious
/* FIXME: We should not be getting profile interrupts yet! */
int 3
.endfunc

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -159,7 +159,7 @@ typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_B
#define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \
{ Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \
Argument->DataLength = strlen((PUCHAR)StrData) + sizeof(UCHAR); \
Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
#define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \

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">
<file>amstream.idl</file>
<file>austream.idl</file>
<file>bdatif.idl</file>
<file>ddstream.idl</file>
<file>dmodshow.idl</file>
<file>mixerocx.idl</file>

View file

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

View file

@ -703,7 +703,7 @@ typedef struct _PROCESS_BASIC_INFORMATION
KPRIORITY BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
typedef struct _PROCESS_ACCESS_TOKEN
{

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

View file

@ -20,7 +20,8 @@
*
*/
#ifndef _CFG_INCLUDED_
#pragma once
#define _CFG_INCLUDED_
#ifdef __cplusplus
@ -77,7 +78,26 @@ extern "C" {
#define CM_PROB_DRIVER_BLOCKED 0x00000030
#define CM_PROB_REGISTRY_TOO_LARGE 0x00000031
#define CM_PROB_SETPROPERTIES_FAILED 0x00000032
#define NUM_CM_PROB 0x00000033
#define CM_PROB_WAITING_ON_DEPENDENCY 0x00000033
#define CM_PROB_UNSIGNED_DRIVER 0x00000034
#define NUM_CM_PROB_V1 0x00000025
#define NUM_CM_PROB_V2 0x00000032
#define NUM_CM_PROB_V3 0x00000033
#define NUM_CM_PROB_V4 0x00000034
#define NUM_CM_PROB_V5 0x00000035
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define NUM_CM_PROB NUM_CM_PROB_V5
#elif (NTDDI_VERSION >= NTDDI_WS08)
#define NUM_CM_PROB NUM_CM_PROB_V4
#elif (NTDDI_VERSION >= NTDDI_WS03)
#define NUM_CM_PROB NUM_CM_PROB_V3
#elif (NTDDI_VERSION >= NTDDI_WINXP)
#define NUM_CM_PROB NUM_CM_PROB_V2
#elif (NTDDI_VERSION >= WIN2K)
#define NUM_CM_PROB NUM_CM_PROB_V1
#endif
#define LCPRI_FORCECONFIG 0x00000000
#define LCPRI_BOOTCONFIG 0x00000001
@ -95,24 +115,24 @@ extern "C" {
#define LCPRI_DISABLED 0x0000FFFF
#define MAX_LCPRI 0x0000FFFF
#define DN_ROOT_ENUMERATED 0x00000001 /* Was enumerated by ROOT */
#define DN_DRIVER_LOADED 0x00000002 /* Has Register_Device_Driver */
#define DN_ENUM_LOADED 0x00000004 /* Has Register_Enumerator */
#define DN_STARTED 0x00000008 /* Is currently configured */
#define DN_MANUAL 0x00000010 /* Manually installed */
#define DN_NEED_TO_ENUM 0x00000020 /* May need reenumeration */
#define DN_NOT_FIRST_TIME 0x00000040 /* Has received a config (Win9x only) */
#define DN_HARDWARE_ENUM 0x00000080 /* Enum generates hardware ID */
#define DN_LIAR 0x00000100 /* Lied about can reconfig once (Win9x only) */
#define DN_HAS_MARK 0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
#define DN_HAS_PROBLEM 0x00000400 /* Need device installer */
#define DN_FILTERED 0x00000800 /* Is filtered */
#define DN_MOVED 0x00001000 /* Has been moved (Win9x only) */
#define DN_DISABLEABLE 0x00002000 /* Can be rebalanced */
#define DN_REMOVABLE 0x00004000 /* Can be removed */
#define DN_PRIVATE_PROBLEM 0x00008000 /* Has a private problem */
#define DN_MF_PARENT 0x00010000 /* Multi function parent */
#define DN_MF_CHILD 0x00020000 /* Multi function child */
#define DN_ROOT_ENUMERATED 0x00000001 /* Was enumerated by ROOT */
#define DN_DRIVER_LOADED 0x00000002 /* Has Register_Device_Driver */
#define DN_ENUM_LOADED 0x00000004 /* Has Register_Enumerator */
#define DN_STARTED 0x00000008 /* Is currently configured */
#define DN_MANUAL 0x00000010 /* Manually installed */
#define DN_NEED_TO_ENUM 0x00000020 /* May need reenumeration */
#define DN_NOT_FIRST_TIME 0x00000040 /* Has received a config (Win9x only) */
#define DN_HARDWARE_ENUM 0x00000080 /* Enum generates hardware ID */
#define DN_LIAR 0x00000100 /* Lied about can reconfig once (Win9x only) */
#define DN_HAS_MARK 0x00000200 /* Not CM_Create_DevNode lately (Win9x only) */
#define DN_HAS_PROBLEM 0x00000400 /* Need device installer */
#define DN_FILTERED 0x00000800 /* Is filtered */
#define DN_MOVED 0x00001000 /* Has been moved (Win9x only) */
#define DN_DISABLEABLE 0x00002000 /* Can be rebalanced */
#define DN_REMOVABLE 0x00004000 /* Can be removed */
#define DN_PRIVATE_PROBLEM 0x00008000 /* Has a private problem */
#define DN_MF_PARENT 0x00010000 /* Multi function parent */
#define DN_MF_CHILD 0x00020000 /* Multi function child */
#define DN_WILL_BE_REMOVED 0x00040000
#define DN_NOT_FIRST_TIMEE 0x00080000
#define DN_STOP_FREE_RES 0x00100000
@ -128,11 +148,33 @@ extern "C" {
#define DN_NO_SHOW_IN_DM 0x40000000
#define DN_BOOT_LOG_PROB 0x80000000
#define DN_NEED_RESTART DN_LIAR
#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
#define DN_LEGACY_DRIVER DN_MOVED
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define DN_NEED_RESTART DN_LIAR
#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME
#define DN_LEGACY_DRIVER DN_MOVED
#define DN_CHILD_WITH_INVALID_ID DN_HAS_MARK
#elif (NTDDI_VERSION >= NTDDI_WIN2K)
#define DN_NEED_RESTART 0x00000100
#endif
#define DN_CHANGEABLE_FLAGS (DN_NOT_FIRST_TIME + \
DN_HARDWARE_ENUM + \
DN_HAS_MARK + \
DN_DISABLEABLE + \
DN_REMOVABLE + \
DN_MF_CHILD + \
DN_MF_PARENT + \
DN_NOT_FIRST_TIMEE + \
DN_STOP_FREE_RES + \
DN_REBAL_CANDIDATE + \
DN_NT_ENUMERATOR + \
DN_NT_DRIVER + \
DN_SILENT_INSTALL + \
DN_NO_SHOW_IN_DM)
typedef enum _PNP_VETO_TYPE {
PNP_VetoTypeUnknown,
@ -149,14 +191,7 @@ typedef enum _PNP_VETO_TYPE {
PNP_VetoLegacyDriver
} PNP_VETO_TYPE, *PPNP_VETO_TYPE;
#define CM_GLOBAL_STATE_CAN_DO_UI 0x00000001
#define CM_GLOBAL_STATE_ON_BIG_STACK 0x00000002
#define CM_GLOBAL_STATE_SERVICES_AVAILABLE 0x00000004
#define CM_GLOBAL_STATE_SHUTTING_DOWN 0x00000008
#define CM_GLOBAL_STATE_DETECTION_PENDING 0x00000010
#ifdef __cplusplus
}
#endif
#endif /* _CFG_INCLUDED_ */

File diff suppressed because it is too large Load diff

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
//
// Used by the DDK exclusively , don't put in drivers
//
#define DDKAPI __stdcall // Use NTAPI instead
#define DDKCDECLAPI __cdecl // Just use __cdecl
/* Import and Export Specifiers */

File diff suppressed because it is too large Load diff

View file

@ -20,14 +20,7 @@
*
*/
#ifndef __TVOUT_H
#define __TVOUT_H
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef GUID_DEFINED
#include <guiddef.h>
@ -84,30 +77,27 @@
#define VP_CP_CMD_CHANGE 0x00000004
typedef struct _VIDEOPARAMETERS {
GUID Guid;
ULONG dwOffset;
ULONG dwCommand;
ULONG dwFlags;
ULONG dwMode;
ULONG dwTVStandard;
ULONG dwAvailableModes;
ULONG dwAvailableTVStandard;
ULONG dwFlickerFilter;
ULONG dwOverScanX;
ULONG dwOverScanY;
ULONG dwMaxUnscaledX;
ULONG dwMaxUnscaledY;
ULONG dwPositionX;
ULONG dwPositionY;
ULONG dwBrightness;
ULONG dwContrast;
ULONG dwCPType;
ULONG dwCPCommand;
ULONG dwCPStandard;
ULONG dwCPKey;
ULONG bCP_APSTriggerBits;
UCHAR bOEMCopyProtection[256];
} VIDEOPARAMETERS, *PVIDEOPARAMETERS, FAR *LPVIDEOPARAMETERS;
#endif /* __TVOUT_H */
GUID Guid;
ULONG dwOffset;
ULONG dwCommand;
ULONG dwFlags;
ULONG dwMode;
ULONG dwTVStandard;
ULONG dwAvailableModes;
ULONG dwAvailableTVStandard;
ULONG dwFlickerFilter;
ULONG dwOverScanX;
ULONG dwOverScanY;
ULONG dwMaxUnscaledX;
ULONG dwMaxUnscaledY;
ULONG dwPositionX;
ULONG dwPositionY;
ULONG dwBrightness;
ULONG dwContrast;
ULONG dwCPType;
ULONG dwCPCommand;
ULONG dwCPStandard;
ULONG dwCPKey;
ULONG bCP_APSTriggerBits;
UCHAR bOEMCopyProtection[256];
} VIDEOPARAMETERS, *PVIDEOPARAMETERS, *LPVIDEOPARAMETERS;

View file

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

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