ReactOS 0.4.15-dev-7788-g1ad9096
devicecontrol.cpp
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/devicecontrol.cpp
5 * PURPOSE: ClassFactory interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9
10#include "precomp.h"
11
12const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
13
14#ifndef _MSC_VER
15const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
16
17const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
18const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
19const GUID KSMETHODSETID_BdaChangeSync = {0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
20const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
21const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
22const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
23const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
24const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
25const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
26
27const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
28
29#endif
30
32 public IBDA_Topology
33{
34public:
36
38 {
40 return m_Ref;
41 }
43 {
45 if (!m_Ref)
46 {
47 delete this;
48 return 0;
49 }
50 return m_Ref;
51 }
52
53 // IBDA_DeviceControl methods
58
59 // IBDA_Topology methods
60 HRESULT STDMETHODCALLTYPE GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes);
61 HRESULT STDMETHODCALLTYPE GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors);
62 HRESULT STDMETHODCALLTYPE GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces);
63 HRESULT STDMETHODCALLTYPE GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes);
64 HRESULT STDMETHODCALLTYPE GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections);
69 HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId);
70 HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode);
71
72 CBDADeviceControl(IUnknown * pUnkOuter, IBaseFilter *pFilter, HANDLE hFile) : m_Ref(0), m_pUnkOuter(pUnkOuter), m_Handle(hFile), m_pFilter(pFilter){};
73 virtual ~CBDADeviceControl(){};
74
75protected:
80};
81
85 IN REFIID refiid,
87{
88 *Output = NULL;
89
90 if (IsEqualGUID(refiid, IID_IUnknown))
91 {
92 *Output = PVOID(this);
93 reinterpret_cast<IUnknown*>(*Output)->AddRef();
94 return NOERROR;
95 }
97 {
98 *Output = (IBDA_DeviceControl*)(this);
99 reinterpret_cast<IBDA_DeviceControl*>(*Output)->AddRef();
100 return NOERROR;
101 }
102
103 if (IsEqualGUID(refiid, IID_IBDA_Topology))
104 {
105 *Output = (IBDA_Topology*)(this);
106 reinterpret_cast<IBDA_Topology*>(*Output)->AddRef();
107 return NOERROR;
108 }
109
110 return E_NOINTERFACE;
111}
112
113
114//-------------------------------------------------------------------
115// IBDA_DeviceControl methods
116//
120{
121 KSMETHOD Method;
122 HRESULT hr;
124
125 /* setup request */
128 Method.Flags = KSMETHOD_TYPE_NONE;
129
130 /* execute request */
132
133#ifdef BDAPLGIN_TRACE
134 WCHAR Buffer[100];
135 swprintf(Buffer, L"CBDADeviceControl::StartChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
137#endif
138
139 return hr;
140}
141
142
146{
147 KSMETHOD Method;
148 HRESULT hr;
150
151 /* setup request */
154 Method.Flags = KSMETHOD_TYPE_NONE;
155
156 /* execute request */
158
159#ifdef BDAPLGIN_TRACE
160 WCHAR Buffer[100];
161 swprintf(Buffer, L"CBDADeviceControl::CheckChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
163#endif
164
165 return hr;
166}
167
168
172{
173 KSMETHOD Method;
174 HRESULT hr;
176
177 /* setup request */
180 Method.Flags = KSMETHOD_TYPE_NONE;
181
182 /* execute request */
184
185#ifdef BDAPLGIN_TRACE
186 WCHAR Buffer[100];
187 swprintf(Buffer, L"CBDADeviceControl::CommitChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
189#endif
190
191 return hr;
192}
193
197{
198 if (pState)
199 {
200 *pState = BDA_CHANGES_COMPLETE;
201 return S_OK;
202 }
203 else
204 {
205 return E_POINTER;
206 }
207}
208
209//-------------------------------------------------------------------
210// IBDA_Topology methods
211//
214CBDADeviceControl::GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes)
215{
217 HRESULT hr;
219
220 // setup request
224
225 // perform request
226 hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgulNodeTypes, sizeof(ULONG) * ulcNodeTypesMax, &BytesReturned);
227
228 *pulcNodeTypes = (BytesReturned / sizeof(ULONG));
229
230#ifdef BDAPLGIN_TRACE
231 WCHAR Buffer[100];
232 swprintf(Buffer, L"CBDADeviceControl::GetNodeTypes: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
234
235 if (SUCCEEDED(hr))
236 {
237 for(ULONG Index = 0; Index < *pulcNodeTypes; Index++)
238 {
239 swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\n", Index, rgulNodeTypes[Index]);
241 }
242 }
243#endif
244
245 return hr;
246}
247
250CBDADeviceControl::GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors)
251{
253 HRESULT hr;
255
256
257 // setup request
261
262 // perform request
263 hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgNodeDescriptors, sizeof(BDANODE_DESCRIPTOR) * ulcNodeDescriptorsMax, &BytesReturned);
264
265 *ulcNodeDescriptors = (BytesReturned / sizeof(BDANODE_DESCRIPTOR));
266
267#ifdef BDAPLGIN_TRACE
268 WCHAR Buffer[1000];
269 swprintf(Buffer, L"CBDADeviceControl::GetNodeDescriptors: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
271
272
273 if (SUCCEEDED(hr))
274 {
275 for(ULONG Index = 0; Index < min(*ulcNodeDescriptors, ulcNodeDescriptorsMax); Index++)
276 {
277 LPOLESTR pGUIDFunction, pGUIDName;
278
279 StringFromCLSID(rgNodeDescriptors[Index].guidFunction, &pGUIDFunction);
280 StringFromCLSID(rgNodeDescriptors[Index].guidName, &pGUIDName);
281
282 swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\nFunction %s\n Name %s\n-----\n", Index, rgNodeDescriptors[Index].ulBdaNodeType, pGUIDFunction, pGUIDName);
284 }
285 }
286#endif
287
288
289 return hr;
290}
291
294CBDADeviceControl::GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces)
295{
297 HRESULT hr;
299
300
301 // setup request
305 Property.NodeId = ulNodeType;
306 Property.Reserved = 0;
307
308 // perform request
309 hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_NODE), rgguidInterfaces, sizeof(GUID) * ulcInterfacesMax, &BytesReturned);
310
311 *pulcInterfaces = (BytesReturned / sizeof(GUID));
312
313#ifdef BDAPLGIN_TRACE
314 WCHAR Buffer[100];
315 swprintf(Buffer, L"CBDADeviceControl::GetNodeInterfaces: hr %lx, BytesReturned %lu ulNodeType %lu\n", hr, BytesReturned, ulNodeType);
317
318 if (SUCCEEDED(hr))
319 {
320 for(ULONG Index = 0; Index < min(*pulcInterfaces, ulcInterfacesMax); Index++)
321 {
322 LPOLESTR pstr;
323
324 StringFromCLSID(rgguidInterfaces[Index], &pstr);
325
326 swprintf(Buffer, L"CBDADeviceControl::GetNodeInterfaces: Index %lu Name %s\n", Index, pstr);
328 }
329 }
330#endif
331
332 return hr;
333}
334
337CBDADeviceControl::GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes)
338{
340 HRESULT hr;
342
343 // setup request
347
348 // perform request
349 hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgulPinTypes, sizeof(ULONG) * ulcPinTypesMax, &BytesReturned);
350
351 *pulcPinTypes = (BytesReturned / sizeof(ULONG));
352
353#ifdef BDAPLGIN_TRACE
354 WCHAR Buffer[100];
355 swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
357
358 if (SUCCEEDED(hr))
359 {
360 for(ULONG Index = 0; Index < *pulcPinTypes; Index++)
361 {
362 swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\n", Index, rgulPinTypes[Index]);
364 }
365 }
366#endif
367
368 return hr;
369}
370
373CBDADeviceControl::GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections)
374{
375#ifdef BDAPLGIN_TRACE
376 OutputDebugStringW(L"CBDADeviceControl::GetTemplateConnections: NotImplemented\n");
377#endif
378
379 return E_NOTIMPL;
380}
381
385{
386#ifdef BDAPLGIN_TRACE
387 OutputDebugStringW(L"CBDADeviceControl::CreatePin: NotImplemented\n");
388#endif
389
390 return E_NOTIMPL;
391}
392
396{
397#ifdef BDAPLGIN_TRACE
398 OutputDebugStringW(L"CBDADeviceControl::DeletePin: NotImplemented\n");
399#endif
400
401 return E_NOTIMPL;
402}
403
407{
408#ifdef BDAPLGIN_TRACE
409 OutputDebugStringW(L"CBDADeviceControl::SetMediaType: NotImplemented\n");
410#endif
411
412 return E_NOTIMPL;
413}
414
418{
419#ifdef BDAPLGIN_TRACE
420 OutputDebugStringW(L"CBDADeviceControl::SetMedium: NotImplemented\n");
421#endif
422
423 return E_NOTIMPL;
424}
425
429{
430 KSM_BDA_PIN_PAIR Method;
431 HRESULT hr;
433
437 Method.InputPinId = ulInputPinId;
438 Method.OutputPinId = ulOutputPinId;
439
441
442#ifdef BDAPLGIN_TRACE
443 WCHAR Buffer[100];
444 swprintf(Buffer, L"CBDADeviceControl::CreateTopology: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
446#endif
447
448 return hr;
449}
450
453CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode)
454{
455 HRESULT hr;
456 ULONG PinId = 0;
459
460 //setup request
464 Property.ulInputPinId = ulInputPinId;
465 Property.ulOutputPinId = ulOutputPinId;
466 Property.ulNodeType = ulNodeType;
467
468 // perform request
469 // WinXP SP3 expects minimum sizeof(KSP_BDA_NODE_PIN) + sizeof(ULONG)
470 // seems a driver to be a driver bug
471
473
474#ifdef BDAPLGIN_TRACE
475 WCHAR Buffer[200];
476 swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx, BytesReturned %lu PinId %lu ulInputPinId %lu ulOutputPinId %lu ulNodeType %lu\n", hr, BytesReturned, PinId, ulInputPinId, ulOutputPinId, ulNodeType);
478#endif
479
480 if (FAILED(hr))
481 return hr;
482
483 hr = CControlNode_fnConstructor(m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
484
485#ifdef BDAPLGIN_TRACE
486 swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
488#endif
489
490 return hr;
491}
492
494WINAPI
496 IUnknown * pUnkOuter,
497 REFIID riid,
498 LPVOID * ppv)
499{
500 HRESULT hr;
501 IKsObject *pObject = NULL;
502 IBaseFilter *pFilter = NULL;
504
505#ifdef BDAPLGIN_TRACE
506 OutputDebugStringW(L"CBDADeviceControl_fnConstructor\n");
507#endif
508
509 //DebugBreak();
510
511 // sanity check
512 assert(pUnkOuter);
513
514 // query for IKsObject
515 hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
516
517 if (FAILED(hr))
518 return E_NOINTERFACE;
519
520 // sanity check
521 assert(hr == NOERROR);
522
523 // query for IBaseFilter interface support
524 hr = pUnkOuter->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
525
526 if (FAILED(hr))
527 {
528 // release
529 pObject->Release();
530 return E_NOINTERFACE;
531 }
532
533 // another sanity check
534 assert(pObject != NULL);
535
536 // get file handle
537 hFile = pObject->KsGetObjectHandle();
538
539 // one more sanity check
541
542 // release IKsObject interface
543 pObject->Release();
544
545 // release filter
546 pFilter->Release();
547
548 // construct device control
549 CBDADeviceControl * handler = new CBDADeviceControl(pUnkOuter, pFilter, hFile);
550
551 if (!handler)
552 return E_OUTOFMEMORY;
553
554 if (FAILED(handler->QueryInterface(riid, ppv)))
555 {
556 /* not supported */
557 delete handler;
558 return E_NOINTERFACE;
559 }
560
561 return NOERROR;
562}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define STDMETHODIMP
Definition: basetyps.h:43
@ KSMETHOD_BDA_CREATE_TOPOLOGY
Definition: bdamedia.h:154
@ KSPROPERTY_BDA_NODE_DESCRIPTORS
Definition: bdamedia.h:72
@ KSPROPERTY_BDA_NODE_PROPERTIES
Definition: bdamedia.h:69
@ KSPROPERTY_BDA_PIN_TYPES
Definition: bdamedia.h:66
@ KSPROPERTY_BDA_CONTROLLING_PIN_ID
Definition: bdamedia.h:71
@ KSPROPERTY_BDA_NODE_TYPES
Definition: bdamedia.h:65
@ KSMETHOD_BDA_START_CHANGES
Definition: bdamedia.h:227
@ KSMETHOD_BDA_CHECK_CHANGES
Definition: bdamedia.h:228
@ KSMETHOD_BDA_COMMIT_CHANGES
Definition: bdamedia.h:229
const GUID IID_IUnknown
_Must_inspect_result_ _In_ ULONG ulPinType
Definition: bdasup.h:88
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
_Must_inspect_result_ _In_ ULONG _Out_opt_ ULONG * pulPinId
Definition: bdasup.h:89
struct _BDANODE_DESCRIPTOR BDANODE_DESCRIPTOR
@ BDA_CHANGES_COMPLETE
Definition: bdatypes.h:116
Definition: bufpool.h:45
STDMETHODIMP_(ULONG) AddRef()
HRESULT STDMETHODCALLTYPE CheckChanges(void)
HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId)
HRESULT STDMETHODCALLTYPE GetChangeState(ULONG *pState)
virtual ~CBDADeviceControl()
HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode)
STDMETHODIMP_(ULONG) Release()
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
HRESULT STDMETHODCALLTYPE GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes)
HRESULT STDMETHODCALLTYPE GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION *rgConnections)
HRESULT STDMETHODCALLTYPE SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType)
HRESULT STDMETHODCALLTYPE GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR *rgNodeDescriptors)
IUnknown * m_pUnkOuter
HRESULT STDMETHODCALLTYPE DeletePin(ULONG ulPinId)
HRESULT STDMETHODCALLTYPE CreatePin(ULONG ulPinType, ULONG *pulPinId)
IBaseFilter * m_pFilter
HRESULT STDMETHODCALLTYPE SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium)
HRESULT STDMETHODCALLTYPE GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG *rgulNodeTypes)
HRESULT STDMETHODCALLTYPE GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID *rgguidInterfaces)
HRESULT STDMETHODCALLTYPE StartChanges(void)
CBDADeviceControl(IUnknown *pUnkOuter, IBaseFilter *pFilter, HANDLE hFile)
HRESULT STDMETHODCALLTYPE CommitChanges(void)
virtual ULONG Release(__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
Definition: fxobject.hpp:853
HRESULT WINAPI CControlNode_fnConstructor(IBaseFilter *pFilter, ULONG NodeType, ULONG PinId, REFIID riid, LPVOID *ppv)
Definition: controlnode.cpp:92
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
const GUID IID_IKsObject
const GUID IID_IBaseFilter
const GUID KSMETHODSETID_BdaChangeSync
const GUID CLSID_DVBTNetworkProvider
const GUID KSMETHODSETID_BdaDeviceConfiguration
const GUID IID_IAMOpenProgress
const GUID IID_IAsyncReader
const GUID KSPROPSETID_BdaTopology
const GUID IID_IBDA_DeviceControl
const GUID IID_IDistributorNotify
const GUID IID_IBDA_NetworkProvider
HRESULT WINAPI CBDADeviceControl_fnConstructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv)
const GUID IID_IBDA_Topology
#define NULL
Definition: types.h:112
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7482
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
#define swprintf
Definition: precomp.h:40
#define assert(x)
Definition: debug.h:53
#define KSMETHOD_TYPE_NONE
Definition: dmksctrl.h:34
#define KSPROPERTY_TYPE_GET
Definition: dmksctrl.h:42
FxObject * pObject
void WINAPI SHIM_OBJ_NAME() OutputDebugStringW(LPCWSTR lpOutputString)
Definition: ignoredbgout.c:23
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define IOCTL_KS_METHOD
Definition: ks.h:136
#define IOCTL_KS_PROPERTY
Definition: ks.h:127
KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle, ULONG IoControl, PVOID InBuffer, ULONG InLength, PVOID OutBuffer, ULONG OutLength, PULONG BytesReturned)
Definition: ksproxy.cpp:34
static LPOLESTR
Definition: stg_prop.c:27
#define min(a, b)
Definition: monoChain.cc:55
_In_ HANDLE hFile
Definition: mswsock.h:90
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
@ Output
Definition: arc.h:85
HRESULT hr
Definition: shlfolder.c:183
ULONG Id
Definition: dmksctrl.h:77
ULONG Flags
Definition: dmksctrl.h:78
GUID Set
Definition: dmksctrl.h:76
Definition: ks.h:2074
Property(long _type, long _tag, INREAL _value)
Definition: reader.h:125
ULONG OutputPinId
Definition: bdamedia.h:47
KSMETHOD Method
Definition: bdamedia.h:41
ULONG InputPinId
Definition: bdamedia.h:43
void * PVOID
Definition: typedefs.h:50
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
Definition: wdfiotarget.h:1052
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
#define NOERROR
Definition: winerror.h:2354
#define E_POINTER
Definition: winerror.h:2365
__wchar_t WCHAR
Definition: xmlstorage.h:180