2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/node.cpp
5 * PURPOSE: Control Node
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class CKsNode
: public IKsControl
14 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
16 STDMETHODIMP_(ULONG
) AddRef()
18 InterlockedIncrement(&m_Ref
);
21 STDMETHODIMP_(ULONG
) Release()
23 InterlockedDecrement(&m_Ref
);
34 HRESULT STDMETHODCALLTYPE
KsProperty(PKSPROPERTY Property
, ULONG PropertyLength
, LPVOID PropertyData
, ULONG DataLength
, ULONG
* BytesReturned
);
35 HRESULT STDMETHODCALLTYPE
KsMethod(PKSMETHOD Method
, ULONG MethodLength
, LPVOID MethodData
, ULONG DataLength
, ULONG
* BytesReturned
);
36 HRESULT STDMETHODCALLTYPE
KsEvent(PKSEVENT Event
, ULONG EventLength
, LPVOID EventData
, ULONG DataLength
, ULONG
* BytesReturned
);
38 CKsNode(IUnknown
* pUnkOuter
, HANDLE Handle
) : m_Ref(0), m_pUnkOuter(pUnkOuter
), m_Handle(Handle
){};
41 CloseHandle(m_Handle
);
46 IUnknown
* m_pUnkOuter
;
52 CKsNode::QueryInterface(
56 if (IsEqualGUID(refiid
, IID_IUnknown
) ||
57 IsEqualGUID(refiid
, IID_IKsControl
))
59 *Output
= PVOID(this);
60 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
67 //-------------------------------------------------------------------
79 assert(m_Handle
!= 0);
80 return KsSynchronousDeviceControl(m_Handle
, IOCTL_KS_PROPERTY
, (PVOID
)Property
, PropertyLength
, (PVOID
)PropertyData
, DataLength
, BytesReturned
);
92 assert(m_Handle
!= 0);
93 return KsSynchronousDeviceControl(m_Handle
, IOCTL_KS_METHOD
, (PVOID
)Method
, MethodLength
, (PVOID
)MethodData
, DataLength
, BytesReturned
);
103 ULONG
* BytesReturned
)
105 assert(m_Handle
!= 0);
108 return KsSynchronousDeviceControl(m_Handle
, IOCTL_KS_ENABLE_EVENT
, (PVOID
)Event
, EventLength
, (PVOID
)EventData
, DataLength
, BytesReturned
);
110 return KsSynchronousDeviceControl(m_Handle
, IOCTL_KS_DISABLE_EVENT
, (PVOID
)Event
, EventLength
, NULL
, 0, BytesReturned
);
116 IUnknown
* pUnkOuter
,
119 ACCESS_MASK DesiredAccess
,
125 KSNODE_CREATE NodeCreate
;
127 OutputDebugStringW(L
"CKsNode_Constructor\n");
130 NodeCreate
.CreateFlags
= 0;
131 NodeCreate
.Node
= NodeId
;
133 hr
= KsCreateTopologyNode(ParentHandle
, &NodeCreate
, DesiredAccess
, &handle
);
136 OutputDebugString("CKsNode_Constructor failed to open device\n");
137 return MAKE_HRESULT(SEVERITY_ERROR
, FACILITY_WIN32
, hr
);
140 CKsNode
* quality
= new CKsNode(pUnkOuter
, handle
);
146 return E_OUTOFMEMORY
;
149 if (FAILED(quality
->QueryInterface(riid
, ppv
)))
153 return E_NOINTERFACE
;