ReactOS 0.4.15-dev-7907-g95bf896
port_wavecyclic.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_wavecyclic.cpp
5 * PURPOSE: WaveCyclic Port Driver
6 * PROGRAMMER: Johannes Anderwald
7 */
8
9#include "private.hpp"
10
11#define NDEBUG
12#include <debug.h>
13
15
16class CPortWaveCyclic : public CUnknownImpl<IPortWaveCyclic, IPortEvents, ISubdevice>
17{
18public:
20
24 CPortWaveCyclic(IUnknown *OuterUnknown) {}
25 virtual ~CPortWaveCyclic(){}
26
27protected:
34 IPortFilterWaveCyclic * m_Filter;
35
36 friend PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic* iface);
38};
39
40GUID KSPROPERTY_SETID_Topology = {0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
41
43{
44 {
45 //KS_CATEGORY_AUDIO
46 0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
47 },
48 {
50 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
51 },
52 {
54 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
55 },
56 {
58 0xFBF6F530L, 0x07B9, 0x11D2, {0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
59 }
60
61};
62
65
66KSPROPERTY_SET WaveCyclicPropertySet[] =
67{
68 {
70 sizeof(PortFilterWaveCyclicTopologySet) / sizeof(KSPROPERTY_ITEM),
71 (const KSPROPERTY_ITEM*)&PortFilterWaveCyclicTopologySet,
72 0,
73 NULL
74 },
75 {
77 sizeof(PortFilterWaveCyclicPinSet) / sizeof(KSPROPERTY_ITEM),
78 (const KSPROPERTY_ITEM*)&PortFilterWaveCyclicPinSet,
79 0,
80 NULL
81 }
82};
83
84//KSEVENTSETID_LoopedStreaming, Type = KSEVENT_LOOPEDSTREAMING_POSITION
85//KSEVENTSETID_Connection, Type = KSEVENT_CONNECTION_ENDOFSTREAM,
86
87//---------------------------------------------------------------
88// IPortEvents
89//
90
91void
93CPortWaveCyclic::AddEventToEventList(
94 IN PKSEVENT_ENTRY EventEntry)
95{
97}
98
99void
100NTAPI
101CPortWaveCyclic::GenerateEventList(
103 IN ULONG EventId,
104 IN BOOL PinEvent,
105 IN ULONG PinId,
106 IN BOOL NodeEvent,
107 IN ULONG NodeId)
108{
110}
111
112//---------------------------------------------------------------
113// IUnknown interface functions
114//
115
117NTAPI
119 IN REFIID refiid,
121{
123
124 if (IsEqualGUIDAligned(refiid, IID_IPortWaveCyclic) ||
125 IsEqualGUIDAligned(refiid, IID_IPort) ||
127 {
128 *Output = PVOID(PPORTWAVECYCLIC(this));
129 PUNKNOWN(*Output)->AddRef();
130 return STATUS_SUCCESS;
131 }
132 else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
133 {
134 *Output = PVOID(PPORTEVENTS(this));
135 PUNKNOWN(*Output)->AddRef();
136 return STATUS_SUCCESS;
137 }
138 else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
139 {
140 *Output = PVOID(PSUBDEVICE(this));
141 PUNKNOWN(*Output)->AddRef();
142 return STATUS_SUCCESS;
143 }
144 else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
145 {
147 }
148 else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
149 IsEqualGUIDAligned(refiid, IID_IDrmPort2))
150 {
151 return NewIDrmPort((PDRMPORT2*)Output);
152 }
153 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
154 {
156 }
157 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
158 {
160 }
161
163 {
164 DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
166 }
167
168 return STATUS_UNSUCCESSFUL;
169}
170
171//---------------------------------------------------------------
172// IPort interface functions
173//
174
176NTAPI
177CPortWaveCyclic::GetDeviceProperty(
178 IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
182{
184
186}
187
189NTAPI
190CPortWaveCyclic::Init(
192 IN PIRP Irp,
193 IN PUNKNOWN UnknownMiniport,
194 IN PUNKNOWN UnknownAdapter OPTIONAL,
196{
197 IMiniportWaveCyclic * Miniport;
200 PPOWERNOTIFY PowerNotify;
201
202 DPRINT("IPortWaveCyclic_Init entered %p\n", this);
204
205 Status = UnknownMiniport->QueryInterface(IID_IMiniportWaveCyclic, (PVOID*)&Miniport);
206 if (!NT_SUCCESS(Status))
207 {
208 DPRINT("IPortWaveCyclic_Init called with invalid IMiniport adapter\n");
210 }
211
212 // Initialize port object
213 m_pMiniport = Miniport;
215
216 // initialize miniport
217 Status = Miniport->Init(UnknownAdapter, ResourceList, this);
218 if (!NT_SUCCESS(Status))
219 {
220 DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
221 Miniport->Release();
222 return Status;
223 }
224
225 // get the miniport device descriptor
226 Status = Miniport->GetDescription(&m_pDescriptor);
227 if (!NT_SUCCESS(Status))
228 {
229 DPRINT("failed to get description\n");
230 Miniport->Release();
231 return Status;
232 }
233
234 // create the subdevice descriptor
236 4,
238 0,
239 NULL,
240 2,
242 0,
243 0,
244 0,
245 NULL,
246 0,
247 NULL,
249
250 if (!NT_SUCCESS(Status))
251 {
252 DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
253 Miniport->Release();
254 return Status;
255 }
256
257 // store for node property requests
258 m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
259
260 // check if it supports IPinCount interface
261 Status = UnknownMiniport->QueryInterface(IID_IPinCount, (PVOID*)&PinCount);
262 if (NT_SUCCESS(Status))
263 {
264 // store IPinCount interface
266 }
267
268 // does the Miniport adapter support IPowerNotify interface*/
269 Status = UnknownMiniport->QueryInterface(IID_IPowerNotify, (PVOID*)&PowerNotify);
270 if (NT_SUCCESS(Status))
271 {
272 // store reference
273 m_pPowerNotify = PowerNotify;
274 }
275
276 DPRINT("IPortWaveCyclic successfully initialized\n");
277 return STATUS_SUCCESS;
278}
279
281NTAPI
282CPortWaveCyclic::NewRegistryKey(
283 OUT PREGISTRYKEY *OutRegistryKey,
284 IN PUNKNOWN OuterUnknown OPTIONAL,
285 IN ULONG RegistryKeyType,
290{
292
293 return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
294}
295
296//---------------------------------------------------------------
297// IPortWaveCyclic interface functions
298//
299
301NTAPI
302CPortWaveCyclic::NewMasterDmaChannel(
303 OUT PDMACHANNEL* DmaChannel,
304 IN PUNKNOWN OuterUnknown,
307 IN BOOLEAN Dma32BitAddresses,
309 IN DMA_WIDTH DmaWidth,
310 IN DMA_SPEED DmaSpeed)
311{
314
316
317 Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
318 if (NT_SUCCESS(Status))
319 {
320 return PcNewDmaChannel(DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, m_pDeviceObject);
321 }
322
323 return Status;
324}
325
327NTAPI
328CPortWaveCyclic::NewSlaveDmaChannel(
329 OUT PDMACHANNELSLAVE* OutDmaChannel,
330 IN PUNKNOWN OuterUnknown,
332 IN ULONG DmaIndex,
334 IN BOOLEAN DemandMode,
335 IN DMA_SPEED DmaSpeed)
336{
338 PDMACHANNEL DmaChannel;
340
342
343 // FIXME
344 // Check for F-Type DMA Support
345 //
346
347 Status = PcDmaSlaveDescription(ResourceList, DmaIndex, DemandMode, TRUE, DmaSpeed, MaximumLength, 0, &DeviceDescription);
348 if (NT_SUCCESS(Status))
349 {
351 if (NT_SUCCESS(Status))
352 {
353 Status = DmaChannel->QueryInterface(IID_IDmaChannelSlave, (PVOID*)OutDmaChannel);
354 DmaChannel->Release();
355 }
356 }
357
358 return Status;
359}
360
361VOID
362NTAPI
363CPortWaveCyclic::Notify(
364 IN PSERVICEGROUP ServiceGroup)
365{
366 ServiceGroup->RequestService ();
367}
368
369//---------------------------------------------------------------
370// ISubdevice interface
371//
372
374NTAPI
375CPortWaveCyclic::NewIrpTarget(
376 OUT struct IIrpTarget **OutTarget,
377 IN PCWSTR Name,
381 IN PIRP Irp,
382 IN KSOBJECT_CREATE *CreateObject)
383{
385 IPortFilterWaveCyclic * Filter;
386
387 DPRINT("ISubDevice_NewIrpTarget this %p\n", this);
388
389 // is there already an instance of the filter
390 if (m_Filter)
391 {
392 // it is, let's return the result
393 *OutTarget = (IIrpTarget*)m_Filter;
394
395 // increment reference
396 m_Filter->AddRef();
397 return STATUS_SUCCESS;
398 }
399
400 // create new instance of filter
402 if (!NT_SUCCESS(Status))
403 {
404 // not enough memory
405 return Status;
406 }
407
408 // initialize the filter
409 Status = Filter->Init((IPortWaveCyclic*)this);
410 if (!NT_SUCCESS(Status))
411 {
412 // destroy filter
413 Filter->Release();
414 // return status
415 return Status;
416 }
417
418 // store result
419 *OutTarget = (IIrpTarget*)Filter;
420 // store for later re-use
422 // return status
423 return Status;
424}
425
427NTAPI
428CPortWaveCyclic::ReleaseChildren()
429{
430 DPRINT("ISubDevice_fnReleaseChildren\n");
431
432 // release the filter
433 m_Filter->Release();
434
435 if (m_pPinCount)
436 {
437 // release pincount interface
438 m_pPinCount->Release();
439 }
440
441 if (m_pPowerNotify)
442 {
443 // release power notify interface
444 m_pPowerNotify->Release();
445 }
446
447 // now release the miniport
448 m_pMiniport->Release();
449
450 return STATUS_SUCCESS;
451}
452
454NTAPI
455CPortWaveCyclic::GetDescriptor(
457{
459
461
462 DPRINT("ISubDevice_GetDescriptor this %p desc %p\n", this, m_SubDeviceDescriptor);
463 return STATUS_SUCCESS;
464}
465
467NTAPI
468CPortWaveCyclic::DataRangeIntersection(
469 IN ULONG PinId,
470 IN PKSDATARANGE DataRange,
471 IN PKSDATARANGE MatchingDataRange,
473 OUT PVOID ResultantFormat OPTIONAL,
474 OUT PULONG ResultantFormatLength)
475{
476 DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
477
478 if (m_pMiniport)
479 {
480 return m_pMiniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
481 }
482
483 return STATUS_UNSUCCESSFUL;
484}
485
487NTAPI
488CPortWaveCyclic::PowerChangeNotify(
490{
491 if (m_pPowerNotify)
492 {
493 m_pPowerNotify->PowerChangeNotify(PowerState);
494 }
495
496 return STATUS_SUCCESS;
497}
498
500NTAPI
501CPortWaveCyclic::PinCount(
502 IN ULONG PinId,
503 IN OUT PULONG FilterNecessary,
504 IN OUT PULONG FilterCurrent,
505 IN OUT PULONG FilterPossible,
506 IN OUT PULONG GlobalCurrent,
507 IN OUT PULONG GlobalPossible)
508{
509 if (m_pPinCount)
510 {
511 m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
512 return STATUS_SUCCESS;
513 }
514
515 // FIXME
516 // scan filter descriptor
517
518 return STATUS_UNSUCCESSFUL;
519}
520
522
525 IN IPortWaveCyclic* iface)
526{
528 return This->m_pMiniport;
529}
530
533 PPORTWAVECYCLIC iface)
534{
536 return This->m_pDeviceObject;
537}
538
539//---------------------------------------------------------------
540// IPortWaveCyclic constructor
541//
542
545 OUT PPORT* OutPort)
546{
549
551 if (!Port)
553
554 Status = Port->QueryInterface(IID_IPort, (PVOID*)OutPort);
555
556 if (!NT_SUCCESS(Status))
557 {
558 delete Port;
559 }
560
561 DPRINT("NewPortWaveCyclic %p Status %u\n", Port, Status);
562 return Status;
563}
unsigned char BOOLEAN
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
PPOWERNOTIFY m_pPowerNotify
PMINIPORTWAVECYCLIC m_pMiniport
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
PDEVICE_OBJECT m_pDeviceObject
PPCFILTER_DESCRIPTOR m_pDescriptor
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
CPortWaveCyclic(IUnknown *OuterUnknown)
friend PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic *iface)
friend PDEVICE_OBJECT GetDeviceObject(PPORTWAVECYCLIC iface)
IPortFilterWaveCyclic * m_Filter
virtual ~CPortWaveCyclic()
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
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS NTAPI PcNewDmaChannel(OUT PDMACHANNEL *OutDmaChannel, IN PUNKNOWN OuterUnknown OPTIONAL, IN POOL_TYPE PoolType, IN PDEVICE_DESCRIPTION DeviceDescription, IN PDEVICE_OBJECT DeviceObject)
Definition: dma_slave.cpp:479
#define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet, PropGeneral, PropInstances, PropIntersection)
Definition: precomp.h:20
NTSTATUS NTAPI PcDmaSlaveDescription(IN PRESOURCELIST ResourceList OPTIONAL, IN ULONG DmaIndex, IN BOOLEAN DemandMode, IN BOOLEAN AutoInitialize, IN DMA_SPEED DmaSpeed, IN ULONG MaximumLength, IN ULONG DmaPort, OUT PDEVICE_DESCRIPTION DeviceDescription)
Definition: api.cpp:237
NTSTATUS NTAPI PcDmaMasterDescription(IN PRESOURCELIST ResourceList OPTIONAL, IN BOOLEAN ScatterGather, IN BOOLEAN Dma32BitAddresses, IN BOOLEAN IgnoreCount, IN BOOLEAN Dma64BitAddresses, IN DMA_WIDTH DmaWidth, IN DMA_SPEED DmaSpeed, IN ULONG MaximumLength, IN ULONG DmaPort, OUT PDEVICE_DESCRIPTION DeviceDescription)
Definition: api.cpp:206
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
unsigned int BOOL
Definition: ntddk_ex.h:94
NTSTATUS NewPortFilterWaveCyclic(OUT IPortFilterWaveCyclic **OutFilter)
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
return pDevice GetDeviceObject()
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()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsrefcnt Release()
#define KSPROPSETID_Pin
Definition: ks.h:617
#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
static PWSTR GuidString
Definition: apphelp.c:93
_In_ BOOLEAN Dma64BitAddresses
Definition: ndis.h:4652
_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 RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
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
static GUID InterfaceGuids[4]
KSPROPERTY_SET WaveCyclicPropertySet[]
PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic *iface)
NTSTATUS NewPortWaveCyclic(OUT PPORT *OutPort)
GUID IID_IDmaChannelSlave
GUID KSPROPERTY_SETID_Topology
IMiniportWaveCyclic * PMINIPORTWAVECYCLIC
Definition: portcls.h:1543
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:1009
IDmaChannel * PDMACHANNEL
Definition: portcls.h:784
IPinCount * PPINCOUNT
Definition: portcls.h:2091
IResourceList * PRESOURCELIST
Definition: portcls.h:442
IPortEvents * PPORTEVENTS
Definition: portcls.h:2121
IDmaChannelSlave * PDMACHANNELSLAVE
Definition: portcls.h:831
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:635
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2263
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:677
IPortWaveCyclic * PPORTWAVECYCLIC
Definition: portcls.h:1184
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2228
IServiceGroup * PSERVICEGROUP
Definition: portcls.h:614
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
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
enum _DMA_SPEED DMA_SPEED
enum _DMA_WIDTH DMA_WIDTH
@ 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
_In_ const GUID _In_ ULONG PinCount
Definition: strmini.h:505
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
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
_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_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
Definition: wdfpdo.h:432
_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
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1194