ReactOS 0.4.15-dev-6068-g8061a6f
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#ifndef YDEBUG
12#define NDEBUG
13#endif
14
15#include <debug.h>
16
17class CPortTopology : public CUnknownImpl<IPortTopology, ISubdevice, IPortEvents>
18{
19public:
21
25 CPortTopology(IUnknown *OuterUnknown){}
26 virtual ~CPortTopology(){}
27
28protected:
30
35
38 IPortFilterTopology * m_Filter;
39
41
42};
43
45{
46 {
48 0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
49 },
50 {
52 0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}
53 }
54};
55
58
59KSPROPERTY_SET TopologyPropertySet[] =
60{
61 {
63 sizeof(PortFilterTopologyTopologySet) / sizeof(KSPROPERTY_ITEM),
64 (const KSPROPERTY_ITEM*)&PortFilterTopologyTopologySet,
65 0,
66 NULL
67 },
68 {
70 sizeof(PortFilterTopologyPinSet) / sizeof(KSPROPERTY_ITEM),
71 (const KSPROPERTY_ITEM*)&PortFilterTopologyPinSet,
72 0,
73 NULL
74 }
75};
76
77//---------------------------------------------------------------
78// IPortEvents
79//
80
81
82void
84CPortTopology::AddEventToEventList(
85 IN PKSEVENT_ENTRY EventEntry)
86{
88}
89
90void
92CPortTopology::GenerateEventList(
94 IN ULONG EventId,
95 IN BOOL PinEvent,
96 IN ULONG PinId,
97 IN BOOL NodeEvent,
98 IN ULONG NodeId)
99{
101}
102
103
104//---------------------------------------------------------------
105// IUnknown interface functions
106//
107
109NTAPI
111 IN REFIID refiid,
113{
115
116 DPRINT("IPortTopology_fnQueryInterface\n");
117
118 if (IsEqualGUIDAligned(refiid, IID_IPortTopology) ||
119 IsEqualGUIDAligned(refiid, IID_IPort) ||
121 {
122 *Output = PVOID(PUNKNOWN((IPortTopology*)this));
123 PUNKNOWN(*Output)->AddRef();
124 return STATUS_SUCCESS;
125 }
126 else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
127 {
128 *Output = PVOID(PPORTEVENTS(this));
129 PUNKNOWN(*Output)->AddRef();
130 return STATUS_SUCCESS;
131 }
132 else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
133 {
134 *Output = PVOID(PSUBDEVICE(this));
135 PUNKNOWN(*Output)->AddRef();
136 return STATUS_SUCCESS;
137 }
138 else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
139 {
141 }
142 else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
143 IsEqualGUIDAligned(refiid, IID_IDrmPort2))
144 {
145 return NewIDrmPort((PDRMPORT2*)Output);
146 }
147 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
148 {
150 }
151 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
152 {
154 }
155
157 {
158 DPRINT1("IPortTopology_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
160 }
161 return STATUS_UNSUCCESSFUL;
162}
163
164//---------------------------------------------------------------
165// IPort interface functions
166//
167
169NTAPI
170CPortTopology::GetDeviceProperty(
171 IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
175{
177
178 if (!m_bInitialized)
179 {
180 DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
181 return STATUS_UNSUCCESSFUL;
182 }
183
185}
186
188NTAPI
189CPortTopology::Init(
191 IN PIRP Irp,
192 IN PUNKNOWN UnknownMiniport,
193 IN PUNKNOWN UnknownAdapter OPTIONAL,
195{
196 IMiniportTopology * Miniport;
198
199 DPRINT("IPortTopology_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n",
200 this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
201
203
204 if (m_bInitialized)
205 {
206 DPRINT("IPortTopology_Init called again\n");
207 return STATUS_SUCCESS;
208 }
209
210 Status = UnknownMiniport->QueryInterface(IID_IMiniportTopology, (PVOID*)&Miniport);
211 if (!NT_SUCCESS(Status))
212 {
213 DPRINT("IPortTopology_Init called with invalid IMiniport adapter\n");
215 }
216
217 // Initialize port object
218 m_pMiniport = Miniport;
221
222 // now initialize the miniport driver
223 Status = Miniport->Init(UnknownAdapter, ResourceList, this);
224 if (!NT_SUCCESS(Status))
225 {
226 DPRINT("IPortTopology_Init failed with %x\n", Status);
228 Miniport->Release();
229 return Status;
230 }
231
232 // get the miniport device descriptor
233 Status = Miniport->GetDescription(&m_pDescriptor);
234 if (!NT_SUCCESS(Status))
235 {
236 DPRINT("failed to get description\n");
237 Miniport->Release();
239 return Status;
240 }
241
242 // create the subdevice descriptor
244 2,
246 0,
247 NULL,
248 2,
250 0,
251 0,
252 0,
253 NULL,
254 0,
255 NULL,
257
258
259 DPRINT("IPortTopology_fnInit success\n");
260 if (NT_SUCCESS(Status))
261 {
262 // store for node property requests
263 m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
264 }
265
266 return STATUS_SUCCESS;
267}
268
269
271NTAPI
272CPortTopology::NewRegistryKey(
273 OUT PREGISTRYKEY *OutRegistryKey,
274 IN PUNKNOWN OuterUnknown OPTIONAL,
275 IN ULONG RegistryKeyType,
280{
282
283 if (!m_bInitialized)
284 {
285 DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
286 return STATUS_UNSUCCESSFUL;
287 }
288 return PcNewRegistryKey(OutRegistryKey,
289 OuterUnknown,
290 RegistryKeyType,
293 (ISubdevice*)this,
297}
298
299//---------------------------------------------------------------
300// ISubdevice interface
301//
302
304NTAPI
305CPortTopology::NewIrpTarget(
306 OUT struct IIrpTarget **OutTarget,
307 IN PCWSTR Name,
311 IN PIRP Irp,
312 IN KSOBJECT_CREATE *CreateObject)
313{
315 IPortFilterTopology * Filter;
316
317 // is there already an instance of the filter
318 if (m_Filter)
319 {
320 // it is, let's return the result
321 *OutTarget = (IIrpTarget*)m_Filter;
322
323 // increment reference
324 m_Filter->AddRef();
325 return STATUS_SUCCESS;
326 }
327
328 // create new instance of filter
330 if (!NT_SUCCESS(Status))
331 {
332 // not enough memory
333 return Status;
334 }
335
336 // initialize the filter
337 Status = Filter->Init((IPortTopology*)this);
338 if (!NT_SUCCESS(Status))
339 {
340 // destroy filter
341 Filter->Release();
342 // return status
343 return Status;
344 }
345
346 // store result
347 *OutTarget = (IIrpTarget*)Filter;
348 // store for later re-use
350 // return status
351 return Status;
352}
353
355NTAPI
356CPortTopology::ReleaseChildren()
357{
358 DPRINT("ISubDevice_fnReleaseChildren\n");
359
360 // release the filter
361 m_Filter->Release();
362
363 // release the miniport
364 DPRINT("Refs %u\n", m_pMiniport->Release());
365
366 return STATUS_SUCCESS;
367}
368
370NTAPI
371CPortTopology::GetDescriptor(
373{
374 DPRINT("ISubDevice_GetDescriptor this %p Descp %p\n", this, m_SubDeviceDescriptor);
376 return STATUS_SUCCESS;
377}
378
380NTAPI
381CPortTopology::DataRangeIntersection(
382 IN ULONG PinId,
383 IN PKSDATARANGE DataRange,
384 IN PKSDATARANGE MatchingDataRange,
386 OUT PVOID ResultantFormat OPTIONAL,
387 OUT PULONG ResultantFormatLength)
388{
389 DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
390
391 if (m_pMiniport)
392 {
393 return m_pMiniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
394 }
395
396 return STATUS_UNSUCCESSFUL;
397}
398
400NTAPI
401CPortTopology::PowerChangeNotify(
403{
404 if (m_pPowerNotify)
405 {
406 m_pPowerNotify->PowerChangeNotify(PowerState);
407 }
408
409 return STATUS_SUCCESS;
410}
411
413NTAPI
414CPortTopology::PinCount(
415 IN ULONG PinId,
416 IN OUT PULONG FilterNecessary,
417 IN OUT PULONG FilterCurrent,
418 IN OUT PULONG FilterPossible,
419 IN OUT PULONG GlobalCurrent,
420 IN OUT PULONG GlobalPossible)
421{
422 if (m_pPinCount)
423 {
424 m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
425 return STATUS_SUCCESS;
426 }
427
428 // FIXME
429 // scan filter descriptor
430
431 return STATUS_UNSUCCESSFUL;
432}
433
434
436NTAPI
439 IN PIRP Irp)
440{
442 IIrpTarget *Filter;
443 IIrpTarget *Pin;
444 PKSOBJECT_CREATE_ITEM CreateItem;
445
446 // access the create item
447 CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
448 // sanity check
449 PC_ASSERT(CreateItem);
450
451 DPRINT("PcCreatePinDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
452
453 Filter = (IIrpTarget*)CreateItem->Context;
454
455 // sanity checks
458
459
460#if KS_IMPLEMENTED
461 Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
463 {
464 DPRINT("PcCreatePinDispatch failed to reference device header\n");
465
467 goto cleanup;
468 }
469#endif
470
471 Status = Filter->NewIrpTarget(&Pin,
473 NULL,
476 Irp,
477 NULL);
478
479 DPRINT("PcCreatePinDispatch Status %x\n", Status);
480
481 if (NT_SUCCESS(Status))
482 {
483 // create the dispatch object
484 // FIXME need create item for clock
486 DPRINT("Pin %p\n", Pin);
487 }
488
489 DPRINT("CreatePinWorkerRoutine completing irp %p\n", Irp);
490 // save status in irp
491 Irp->IoStatus.Status = Status;
492 Irp->IoStatus.Information = 0;
493 // complete the request
495 return Status;
496}
497
499NTAPI
502 IN PIRP Irp)
503{
505 ISubdevice * SubDevice;
506 IIrpTarget *Filter;
507 PKSOBJECT_CREATE_ITEM CreateItem, PinCreateItem;
508
509 // access the create item
510 CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
511
512 DPRINT("PcCreateItemDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
513
514 // get the subdevice
515 SubDevice = (ISubdevice*)CreateItem->Context;
516
517 // sanity checks
518 PC_ASSERT(SubDevice != NULL);
519
520
521#if KS_IMPLEMENTED
522 Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
524 {
525 DPRINT("PcCreateItemDispatch failed to reference device header\n");
526
528 goto cleanup;
529 }
530#endif
531
532 // get filter object
533 Status = SubDevice->NewIrpTarget(&Filter,
534 NULL,
535 NULL,
538 Irp,
539 NULL);
540 if (!NT_SUCCESS(Status))
541 {
542 DPRINT("Failed to get filter object\n");
543 Irp->IoStatus.Status = Status;
545 return Status;
546 }
547
548 // allocate pin create item
549 PinCreateItem = (PKSOBJECT_CREATE_ITEM)AllocateItem(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM), TAG_PORTCLASS);
550 if (!PinCreateItem)
551 {
552 // not enough memory
553 Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
556 }
557
558 // initialize pin create item
559 PinCreateItem->Context = (PVOID)Filter;
560 PinCreateItem->Create = PcCreatePinDispatch;
561 RtlInitUnicodeString(&PinCreateItem->ObjectClass, KSSTRING_Pin);
562 // FIXME copy security descriptor
563
564 // now allocate a dispatch object
565 Status = NewDispatchObject(Irp, Filter, 1, PinCreateItem);
566
567 // complete request
568 Irp->IoStatus.Status = Status;
570
571 return STATUS_SUCCESS;
572}
573
574
577 OUT PPORT* OutPort)
578{
581
583 if (!This)
585
586 Status = This->QueryInterface(IID_IPort, (PVOID*)OutPort);
587
588 if (!NT_SUCCESS(Status))
589 {
590 delete This;
591 }
592
593 DPRINT("NewPortTopology %p Status %x\n", *OutPort, Status);
594 return Status;
595}
596
597
601{
603 return This->m_pMiniport;
604}
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:115
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:128
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:242
#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:32
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:268
NTSTATUS NewIDrmPort(OUT PDRMPORT2 *OutPort)
Definition: drm_port.cpp:125
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:30
VOID FreeItem(IN PVOID Item)
Definition: misc.c:43
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:122
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:730
#define PC_ASSERT_IRQL_EQUAL(x)
Definition: private.hpp:31
NTSTATUS NewPortClsVersion(OUT PPORTCLSVERSION *OutVersion)
Definition: version.cpp:71
#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:71
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