ReactOS 0.4.15-dev-8393-g61b7fb9
port_topology.cpp
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/port_topology.cpp
5 * PURPOSE: Topology Port driver
6 * PROGRAMMER: Johannes Anderwald
7 */
8
9#include "private.hpp"
10
11#define NDEBUG
12#include <debug.h>
13
14class CPortTopology : public CUnknownImpl<IPortTopology, ISubdevice, IPortEvents>
15{
16public:
18
22 CPortTopology(IUnknown *OuterUnknown){}
23 virtual ~CPortTopology(){}
24
25protected:
27
32
35 IPortFilterTopology * m_Filter;
36
38
39};
40
42{
43 {
45 0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
46 },
47 {
49 0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}
50 }
51};
52
55
56KSPROPERTY_SET TopologyPropertySet[] =
57{
58 {
60 sizeof(PortFilterTopologyTopologySet) / sizeof(KSPROPERTY_ITEM),
61 (const KSPROPERTY_ITEM*)&PortFilterTopologyTopologySet,
62 0,
63 NULL
64 },
65 {
67 sizeof(PortFilterTopologyPinSet) / sizeof(KSPROPERTY_ITEM),
68 (const KSPROPERTY_ITEM*)&PortFilterTopologyPinSet,
69 0,
70 NULL
71 }
72};
73
74//---------------------------------------------------------------
75// IPortEvents
76//
77
78void
80CPortTopology::AddEventToEventList(
81 IN PKSEVENT_ENTRY EventEntry)
82{
84}
85
86void
88CPortTopology::GenerateEventList(
90 IN ULONG EventId,
91 IN BOOL PinEvent,
92 IN ULONG PinId,
93 IN BOOL NodeEvent,
94 IN ULONG NodeId)
95{
97}
98
99//---------------------------------------------------------------
100// IUnknown interface functions
101//
102
104NTAPI
106 IN REFIID refiid,
108{
110
111 DPRINT("IPortTopology_fnQueryInterface\n");
112
113 if (IsEqualGUIDAligned(refiid, IID_IPortTopology) ||
114 IsEqualGUIDAligned(refiid, IID_IPort) ||
116 {
117 *Output = PVOID(PUNKNOWN((IPortTopology*)this));
118 PUNKNOWN(*Output)->AddRef();
119 return STATUS_SUCCESS;
120 }
121 else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
122 {
123 *Output = PVOID(PPORTEVENTS(this));
124 PUNKNOWN(*Output)->AddRef();
125 return STATUS_SUCCESS;
126 }
127 else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
128 {
129 *Output = PVOID(PSUBDEVICE(this));
130 PUNKNOWN(*Output)->AddRef();
131 return STATUS_SUCCESS;
132 }
133 else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
134 {
136 }
137 else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
138 IsEqualGUIDAligned(refiid, IID_IDrmPort2))
139 {
140 return NewIDrmPort((PDRMPORT2*)Output);
141 }
142 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
143 {
145 }
146 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
147 {
149 }
150
152 {
153 DPRINT1("IPortTopology_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
155 }
156 return STATUS_UNSUCCESSFUL;
157}
158
159//---------------------------------------------------------------
160// IPort interface functions
161//
162
164NTAPI
165CPortTopology::GetDeviceProperty(
166 IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
170{
172
173 if (!m_bInitialized)
174 {
175 DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
176 return STATUS_UNSUCCESSFUL;
177 }
178
180}
181
183NTAPI
184CPortTopology::Init(
186 IN PIRP Irp,
187 IN PUNKNOWN UnknownMiniport,
188 IN PUNKNOWN UnknownAdapter OPTIONAL,
190{
191 IMiniportTopology * Miniport;
193
194 DPRINT("IPortTopology_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n",
195 this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
196
198
199 if (m_bInitialized)
200 {
201 DPRINT("IPortTopology_Init called again\n");
202 return STATUS_SUCCESS;
203 }
204
205 Status = UnknownMiniport->QueryInterface(IID_IMiniportTopology, (PVOID*)&Miniport);
206 if (!NT_SUCCESS(Status))
207 {
208 DPRINT("IPortTopology_Init called with invalid IMiniport adapter\n");
210 }
211
212 // Initialize port object
213 m_pMiniport = Miniport;
216
217 // now initialize the miniport driver
218 Status = Miniport->Init(UnknownAdapter, ResourceList, this);
219 if (!NT_SUCCESS(Status))
220 {
221 DPRINT("IPortTopology_Init failed with %x\n", Status);
223 Miniport->Release();
224 return Status;
225 }
226
227 // get the miniport device descriptor
228 Status = Miniport->GetDescription(&m_pDescriptor);
229 if (!NT_SUCCESS(Status))
230 {
231 DPRINT("failed to get description\n");
232 Miniport->Release();
234 return Status;
235 }
236
237 // create the subdevice descriptor
239 2,
241 0,
242 NULL,
243 2,
245 0,
246 0,
247 0,
248 NULL,
249 0,
250 NULL,
252
253 DPRINT("IPortTopology_fnInit success\n");
254 if (NT_SUCCESS(Status))
255 {
256 // store for node property requests
257 m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
258 }
259
260 return STATUS_SUCCESS;
261}
262
264NTAPI
265CPortTopology::NewRegistryKey(
266 OUT PREGISTRYKEY *OutRegistryKey,
267 IN PUNKNOWN OuterUnknown OPTIONAL,
268 IN ULONG RegistryKeyType,
273{
275
276 if (!m_bInitialized)
277 {
278 DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
279 return STATUS_UNSUCCESSFUL;
280 }
281 return PcNewRegistryKey(OutRegistryKey,
282 OuterUnknown,
283 RegistryKeyType,
286 (ISubdevice*)this,
290}
291
292//---------------------------------------------------------------
293// ISubdevice interface
294//
295
297NTAPI
298CPortTopology::NewIrpTarget(
299 OUT struct IIrpTarget **OutTarget,
300 IN PCWSTR Name,
304 IN PIRP Irp,
305 IN KSOBJECT_CREATE *CreateObject)
306{
308 IPortFilterTopology * Filter;
309
310 // is there already an instance of the filter
311 if (m_Filter)
312 {
313 // it is, let's return the result
314 *OutTarget = (IIrpTarget*)m_Filter;
315
316 // increment reference
317 m_Filter->AddRef();
318 return STATUS_SUCCESS;
319 }
320
321 // create new instance of filter
323 if (!NT_SUCCESS(Status))
324 {
325 // not enough memory
326 return Status;
327 }
328
329 // initialize the filter
330 Status = Filter->Init((IPortTopology*)this);
331 if (!NT_SUCCESS(Status))
332 {
333 // destroy filter
334 Filter->Release();
335 // return status
336 return Status;
337 }
338
339 // store result
340 *OutTarget = (IIrpTarget*)Filter;
341 // store for later re-use
343 // return status
344 return Status;
345}
346
348NTAPI
349CPortTopology::ReleaseChildren()
350{
351 DPRINT("ISubDevice_fnReleaseChildren\n");
352
353 // release the filter
354 m_Filter->Release();
355
356 // release the miniport
357 DPRINT("Refs %u\n", m_pMiniport->Release());
358
359 return STATUS_SUCCESS;
360}
361
363NTAPI
364CPortTopology::GetDescriptor(
366{
367 DPRINT("ISubDevice_GetDescriptor this %p Descp %p\n", this, m_SubDeviceDescriptor);
369 return STATUS_SUCCESS;
370}
371
373NTAPI
374CPortTopology::DataRangeIntersection(
375 IN ULONG PinId,
376 IN PKSDATARANGE DataRange,
377 IN PKSDATARANGE MatchingDataRange,
379 OUT PVOID ResultantFormat OPTIONAL,
380 OUT PULONG ResultantFormatLength)
381{
382 DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
383
384 if (m_pMiniport)
385 {
386 return m_pMiniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
387 }
388
389 return STATUS_UNSUCCESSFUL;
390}
391
393NTAPI
394CPortTopology::PowerChangeNotify(
396{
397 if (m_pPowerNotify)
398 {
399 m_pPowerNotify->PowerChangeNotify(PowerState);
400 }
401
402 return STATUS_SUCCESS;
403}
404
406NTAPI
407CPortTopology::PinCount(
408 IN ULONG PinId,
409 IN OUT PULONG FilterNecessary,
410 IN OUT PULONG FilterCurrent,
411 IN OUT PULONG FilterPossible,
412 IN OUT PULONG GlobalCurrent,
413 IN OUT PULONG GlobalPossible)
414{
415 if (m_pPinCount)
416 {
417 m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
418 return STATUS_SUCCESS;
419 }
420
421 // FIXME
422 // scan filter descriptor
423
424 return STATUS_UNSUCCESSFUL;
425}
426
428NTAPI
431 IN PIRP Irp)
432{
434 IIrpTarget *Filter;
435 IIrpTarget *Pin;
436 PKSOBJECT_CREATE_ITEM CreateItem;
437
438 // access the create item
439 CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
440 // sanity check
441 PC_ASSERT(CreateItem);
442
443 DPRINT("PcCreatePinDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
444
445 Filter = (IIrpTarget*)CreateItem->Context;
446
447 // sanity checks
450
451#if KS_IMPLEMENTED
452 Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
454 {
455 DPRINT("PcCreatePinDispatch failed to reference device header\n");
456
458 goto cleanup;
459 }
460#endif
461
462 Status = Filter->NewIrpTarget(&Pin,
464 NULL,
467 Irp,
468 NULL);
469
470 DPRINT("PcCreatePinDispatch Status %x\n", Status);
471
472 if (NT_SUCCESS(Status))
473 {
474 // create the dispatch object
475 // FIXME need create item for clock
477 DPRINT("Pin %p\n", Pin);
478 }
479
480 DPRINT("CreatePinWorkerRoutine completing irp %p\n", Irp);
481 // save status in irp
482 Irp->IoStatus.Status = Status;
483 Irp->IoStatus.Information = 0;
484 // complete the request
486 return Status;
487}
488
490NTAPI
493 IN PIRP Irp)
494{
496 ISubdevice * SubDevice;
497 IIrpTarget *Filter;
498 PKSOBJECT_CREATE_ITEM CreateItem, PinCreateItem;
499
500 // access the create item
501 CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
502
503 DPRINT("PcCreateItemDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
504
505 // get the subdevice
506 SubDevice = (ISubdevice*)CreateItem->Context;
507
508 // sanity checks
509 PC_ASSERT(SubDevice != NULL);
510
511#if KS_IMPLEMENTED
512 Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
514 {
515 DPRINT("PcCreateItemDispatch failed to reference device header\n");
516
518 goto cleanup;
519 }
520#endif
521
522 // get filter object
523 Status = SubDevice->NewIrpTarget(&Filter,
524 NULL,
525 NULL,
528 Irp,
529 NULL);
530 if (!NT_SUCCESS(Status))
531 {
532 DPRINT("Failed to get filter object\n");
533 Irp->IoStatus.Status = Status;
535 return Status;
536 }
537
538 // allocate pin create item
539 PinCreateItem = (PKSOBJECT_CREATE_ITEM)AllocateItem(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM), TAG_PORTCLASS);
540 if (!PinCreateItem)
541 {
542 // not enough memory
543 Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
546 }
547
548 // initialize pin create item
549 PinCreateItem->Context = (PVOID)Filter;
550 PinCreateItem->Create = PcCreatePinDispatch;
551 RtlInitUnicodeString(&PinCreateItem->ObjectClass, KSSTRING_Pin);
552 // FIXME copy security descriptor
553
554 // now allocate a dispatch object
555 Status = NewDispatchObject(Irp, Filter, 1, PinCreateItem);
556
557 // complete request
558 Irp->IoStatus.Status = Status;
560
561 return STATUS_SUCCESS;
562}
563
566 OUT PPORT* OutPort)
567{
570
572 if (!This)
574
575 Status = This->QueryInterface(IID_IPort, (PVOID*)OutPort);
576
577 if (!NT_SUCCESS(Status))
578 {
579 delete This;
580 }
581
582 DPRINT("NewPortTopology %p Status %x\n", *OutPort, Status);
583 return Status;
584}
585
589{
591 return This->m_pMiniport;
592}
ISubdevice * PSUBDEVICE
Definition: interfaces.hpp:307
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
#define UNIMPLEMENTED
Definition: debug.h:118
PMINIPORTTOPOLOGY m_pMiniport
IPortFilterTopology * m_Filter
CPortTopology(IUnknown *OuterUnknown)
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
friend PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
PDEVICE_OBJECT m_pDeviceObject
PPCFILTER_DESCRIPTOR m_pDescriptor
PPINCOUNT m_pPinCount
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
virtual ~CPortTopology()
PPOWERNOTIFY m_pPowerNotify
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
NTSTATUS NTAPI NewIUnregisterPhysicalConnection(OUT PUNREGISTERPHYSICALCONNECTION *OutConnection)
Definition: connection.cpp:124
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
_In_ PIRP Irp
Definition: csq.h:116
NTSTATUS NTAPI NewDispatchObject(IN PIRP Irp, IN IIrpTarget *Target, IN ULONG CreateItemCount, IN PKSOBJECT_CREATE_ITEM CreateItem)
Definition: dispatcher.cpp:234
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
static void cleanup(void)
Definition: main.c:1335
KSDDKAPI NTSTATUS NTAPI KsReferenceSoftwareBusObject(IN KSDEVICE_HEADER Header)
Definition: device.c:780
#define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet, PropGeneral, PropInstances, PropIntersection)
Definition: precomp.h:20
NTSTATUS NTAPI PcNewRegistryKey(OUT PREGISTRYKEY *OutRegistryKey, IN PUNKNOWN OuterUnknown OPTIONAL, IN ULONG RegistryKeyType, IN ACCESS_MASK DesiredAccess, IN PVOID DeviceObject OPTIONAL, IN PVOID SubDevice OPTIONAL, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN ULONG CreateOptions OPTIONAL, OUT PULONG Disposition OPTIONAL)
Definition: registry.cpp:264
NTSTATUS NewIDrmPort(OUT PDRMPORT2 *OutPort)
Definition: drm_port.cpp:122
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
Definition: dumpinfo.c:43
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
#define NonPagedPool
Definition: env_spec_w32.h:307
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
Definition: fatprocs.h:427
unsigned int BOOL
Definition: ntddk_ex.h:94
NTSTATUS NewPortFilterTopology(OUT IPortFilterTopology **OutFilter)
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
Status
Definition: gdiplustypes.h:25
CPPORT Port[4]
Definition: headless.c:35
@ Unknown
Definition: i8042prt.h:114
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
ULONG AddRef()
nsrefcnt Release()
#define KSPROPSETID_Pin
Definition: ks.h:617
#define KSSTRING_Pin
Definition: ks.h:48
#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)
Definition: ks.h:2663
struct _KSEVENT_ENTRY * PKSEVENT_ENTRY
Definition: ks.h:2101
#define KSPROPSETID_Topology
Definition: ks.h:842
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: misc.c:29
VOID FreeItem(IN PVOID Item)
Definition: misc.c:37
static PWSTR GuidString
Definition: apphelp.c:93
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:56
ULONG ACCESS_MASK
Definition: nt_native.h:40
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define IoCompleteRequest
Definition: irp.c:1240
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:239
static BOOL Set
Definition: pageheap.c:10
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
Definition: pnpmgr.c:1382
KSPROPERTY_SET TopologyPropertySet[]
NTSTATUS NTAPI PcCreatePinDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
NTSTATUS NTAPI PcCreateItemDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NewPortTopology(OUT PPORT *OutPort)
static GUID InterfaceGuids[2]
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:1009
IPinCount * PPINCOUNT
Definition: portcls.h:2091
IMiniportTopology * PMINIPORTTOPOLOGY
Definition: portcls.h:1443
IResourceList * PRESOURCELIST
Definition: portcls.h:442
IPortEvents * PPORTEVENTS
Definition: portcls.h:2121
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:635
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2263
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:677
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2228
IPortTopology * PPORTTOPOLOGY
Definition: portcls.h:1415
IPowerNotify * PPOWERNOTIFY
Definition: portcls.h:2059
IPort * PPORT
Definition: portcls.h:1105
NTSTATUS NTAPI PinPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
NTSTATUS NTAPI NewIUnregisterSubdevice(OUT PUNREGISTERSUBDEVICE *OutDevice)
Definition: unregister.cpp:119
NTSTATUS NTAPI PcCreateSubdeviceDescriptor(OUT SUBDEVICE_DESCRIPTOR **OutSubdeviceDescriptor, IN ULONG InterfaceCount, IN GUID *InterfaceGuids, IN ULONG IdentifierCount, IN KSIDENTIFIER *Identifier, IN ULONG FilterPropertiesCount, IN KSPROPERTY_SET *FilterProperties, IN ULONG Unknown1, IN ULONG Unknown2, IN ULONG PinPropertiesCount, IN KSPROPERTY_SET *PinProperties, IN ULONG EventSetCount, IN KSEVENT_SET *EventSet, IN PPCFILTER_DESCRIPTOR FilterDescription)
Definition: undoc.cpp:717
#define PC_ASSERT_IRQL_EQUAL(x)
Definition: private.hpp:31
NTSTATUS NewPortClsVersion(OUT PPORTCLSVERSION *OutVersion)
Definition: version.cpp:66
#define PC_ASSERT_IRQL(x)
Definition: private.hpp:30
NTSTATUS NTAPI TopologyPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
#define TAG_PORTCLASS
Definition: private.hpp:24
#define PC_ASSERT(exp)
Definition: private.hpp:26
#define REFIID
Definition: guiddef.h:118
@ Output
Definition: arc.h:85
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
base of all file and directory entries
Definition: entries.h:83
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
INT POOL_TYPE
Definition: typedefs.h:78
#define NTAPI
Definition: typedefs.h:36
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
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2658
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3815
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID PropertyBuffer
Definition: wdfdevice.h:4437
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3771
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
Definition: wdfdevice.h:3034
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:320
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG CreateOptions
Definition: wdfregistry.h:118
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235
#define IO_NO_INCREMENT
Definition: iotypes.h:598
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1194