ReactOS 0.4.15-dev-6049-ge54b32b
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#ifndef YDEBUG
12#define NDEBUG
13#endif
14
15#include <debug.h>
16
18
19class CPortWaveCyclic : public CUnknownImpl<IPortWaveCyclic, IPortEvents, ISubdevice>
20{
21public:
23
27 CPortWaveCyclic(IUnknown *OuterUnknown) {}
28 virtual ~CPortWaveCyclic(){}
29
30protected:
37 IPortFilterWaveCyclic * m_Filter;
38
39 friend PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic* iface);
41};
42
43GUID KSPROPERTY_SETID_Topology = {0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
44
46{
47 {
48 //KS_CATEGORY_AUDIO
49 0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
50 },
51 {
53 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
54 },
55 {
57 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
58 },
59 {
61 0xFBF6F530L, 0x07B9, 0x11D2, {0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
62 }
63
64};
65
68
69KSPROPERTY_SET WaveCyclicPropertySet[] =
70{
71 {
73 sizeof(PortFilterWaveCyclicTopologySet) / sizeof(KSPROPERTY_ITEM),
74 (const KSPROPERTY_ITEM*)&PortFilterWaveCyclicTopologySet,
75 0,
76 NULL
77 },
78 {
80 sizeof(PortFilterWaveCyclicPinSet) / sizeof(KSPROPERTY_ITEM),
81 (const KSPROPERTY_ITEM*)&PortFilterWaveCyclicPinSet,
82 0,
83 NULL
84 }
85};
86
87//KSEVENTSETID_LoopedStreaming, Type = KSEVENT_LOOPEDSTREAMING_POSITION
88//KSEVENTSETID_Connection, Type = KSEVENT_CONNECTION_ENDOFSTREAM,
89
90
91//---------------------------------------------------------------
92// IPortEvents
93//
94
95void
97CPortWaveCyclic::AddEventToEventList(
98 IN PKSEVENT_ENTRY EventEntry)
99{
101}
102
103
104void
105NTAPI
106CPortWaveCyclic::GenerateEventList(
108 IN ULONG EventId,
109 IN BOOL PinEvent,
110 IN ULONG PinId,
111 IN BOOL NodeEvent,
112 IN ULONG NodeId)
113{
115}
116
117//---------------------------------------------------------------
118// IUnknown interface functions
119//
120
122NTAPI
124 IN REFIID refiid,
126{
128
129 if (IsEqualGUIDAligned(refiid, IID_IPortWaveCyclic) ||
130 IsEqualGUIDAligned(refiid, IID_IPort) ||
132 {
133 *Output = PVOID(PPORTWAVECYCLIC(this));
134 PUNKNOWN(*Output)->AddRef();
135 return STATUS_SUCCESS;
136 }
137 else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
138 {
139 *Output = PVOID(PPORTEVENTS(this));
140 PUNKNOWN(*Output)->AddRef();
141 return STATUS_SUCCESS;
142 }
143 else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
144 {
145 *Output = PVOID(PSUBDEVICE(this));
146 PUNKNOWN(*Output)->AddRef();
147 return STATUS_SUCCESS;
148 }
149 else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
150 {
152 }
153 else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
154 IsEqualGUIDAligned(refiid, IID_IDrmPort2))
155 {
156 return NewIDrmPort((PDRMPORT2*)Output);
157 }
158 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
159 {
161 }
162 else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
163 {
165 }
166
168 {
169 DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
171 }
172
173 return STATUS_UNSUCCESSFUL;
174}
175
176//---------------------------------------------------------------
177// IPort interface functions
178//
179
181NTAPI
182CPortWaveCyclic::GetDeviceProperty(
183 IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
187{
189
191}
192
194NTAPI
195CPortWaveCyclic::Init(
197 IN PIRP Irp,
198 IN PUNKNOWN UnknownMiniport,
199 IN PUNKNOWN UnknownAdapter OPTIONAL,
201{
202 IMiniportWaveCyclic * Miniport;
205 PPOWERNOTIFY PowerNotify;
206
207 DPRINT("IPortWaveCyclic_Init entered %p\n", this);
209
210 Status = UnknownMiniport->QueryInterface(IID_IMiniportWaveCyclic, (PVOID*)&Miniport);
211 if (!NT_SUCCESS(Status))
212 {
213 DPRINT("IPortWaveCyclic_Init called with invalid IMiniport adapter\n");
215 }
216
217 // Initialize port object
218 m_pMiniport = Miniport;
220
221 // initialize miniport
222 Status = Miniport->Init(UnknownAdapter, ResourceList, this);
223 if (!NT_SUCCESS(Status))
224 {
225 DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
226 Miniport->Release();
227 return Status;
228 }
229
230
231 // get the miniport device descriptor
232 Status = Miniport->GetDescription(&m_pDescriptor);
233 if (!NT_SUCCESS(Status))
234 {
235 DPRINT("failed to get description\n");
236 Miniport->Release();
237 return Status;
238 }
239
240 // create the subdevice descriptor
242 4,
244 0,
245 NULL,
246 2,
248 0,
249 0,
250 0,
251 NULL,
252 0,
253 NULL,
255
256 if (!NT_SUCCESS(Status))
257 {
258 DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
259 Miniport->Release();
260 return Status;
261 }
262
263 // store for node property requests
264 m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
265
266 // check if it supports IPinCount interface
267 Status = UnknownMiniport->QueryInterface(IID_IPinCount, (PVOID*)&PinCount);
268 if (NT_SUCCESS(Status))
269 {
270 // store IPinCount interface
272 }
273
274 // does the Miniport adapter support IPowerNotify interface*/
275 Status = UnknownMiniport->QueryInterface(IID_IPowerNotify, (PVOID*)&PowerNotify);
276 if (NT_SUCCESS(Status))
277 {
278 // store reference
279 m_pPowerNotify = PowerNotify;
280 }
281
282 DPRINT("IPortWaveCyclic successfully initialized\n");
283 return STATUS_SUCCESS;
284}
285
286
288NTAPI
289CPortWaveCyclic::NewRegistryKey(
290 OUT PREGISTRYKEY *OutRegistryKey,
291 IN PUNKNOWN OuterUnknown OPTIONAL,
292 IN ULONG RegistryKeyType,
297{
299
300 return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
301}
302
303
304//---------------------------------------------------------------
305// IPortWaveCyclic interface functions
306//
307
309NTAPI
310CPortWaveCyclic::NewMasterDmaChannel(
311 OUT PDMACHANNEL* DmaChannel,
312 IN PUNKNOWN OuterUnknown,
315 IN BOOLEAN Dma32BitAddresses,
317 IN DMA_WIDTH DmaWidth,
318 IN DMA_SPEED DmaSpeed)
319{
322
324
325 Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
326 if (NT_SUCCESS(Status))
327 {
328 return PcNewDmaChannel(DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, m_pDeviceObject);
329 }
330
331 return Status;
332}
333
335NTAPI
336CPortWaveCyclic::NewSlaveDmaChannel(
337 OUT PDMACHANNELSLAVE* OutDmaChannel,
338 IN PUNKNOWN OuterUnknown,
340 IN ULONG DmaIndex,
342 IN BOOLEAN DemandMode,
343 IN DMA_SPEED DmaSpeed)
344{
346 PDMACHANNEL DmaChannel;
348
350
351 // FIXME
352 // Check for F-Type DMA Support
353 //
354
355 Status = PcDmaSlaveDescription(ResourceList, DmaIndex, DemandMode, TRUE, DmaSpeed, MaximumLength, 0, &DeviceDescription);
356 if (NT_SUCCESS(Status))
357 {
359 if (NT_SUCCESS(Status))
360 {
361 Status = DmaChannel->QueryInterface(IID_IDmaChannelSlave, (PVOID*)OutDmaChannel);
362 DmaChannel->Release();
363 }
364 }
365
366 return Status;
367}
368
369VOID
370NTAPI
371CPortWaveCyclic::Notify(
372 IN PSERVICEGROUP ServiceGroup)
373{
374 ServiceGroup->RequestService ();
375}
376
377//---------------------------------------------------------------
378// ISubdevice interface
379//
380
382NTAPI
383CPortWaveCyclic::NewIrpTarget(
384 OUT struct IIrpTarget **OutTarget,
385 IN PCWSTR Name,
389 IN PIRP Irp,
390 IN KSOBJECT_CREATE *CreateObject)
391{
393 IPortFilterWaveCyclic * Filter;
394
395 DPRINT("ISubDevice_NewIrpTarget this %p\n", this);
396
397 // is there already an instance of the filter
398 if (m_Filter)
399 {
400 // it is, let's return the result
401 *OutTarget = (IIrpTarget*)m_Filter;
402
403 // increment reference
404 m_Filter->AddRef();
405 return STATUS_SUCCESS;
406 }
407
408 // create new instance of filter
410 if (!NT_SUCCESS(Status))
411 {
412 // not enough memory
413 return Status;
414 }
415
416 // initialize the filter
417 Status = Filter->Init((IPortWaveCyclic*)this);
418 if (!NT_SUCCESS(Status))
419 {
420 // destroy filter
421 Filter->Release();
422 // return status
423 return Status;
424 }
425
426 // store result
427 *OutTarget = (IIrpTarget*)Filter;
428 // store for later re-use
430 // return status
431 return Status;
432}
433
434
436NTAPI
437CPortWaveCyclic::ReleaseChildren()
438{
439 DPRINT("ISubDevice_fnReleaseChildren\n");
440
441 // release the filter
442 m_Filter->Release();
443
444 if (m_pPinCount)
445 {
446 // release pincount interface
447 m_pPinCount->Release();
448 }
449
450 if (m_pPowerNotify)
451 {
452 // release power notify interface
453 m_pPowerNotify->Release();
454 }
455
456 // now release the miniport
457 m_pMiniport->Release();
458
459 return STATUS_SUCCESS;
460}
461
462
464NTAPI
465CPortWaveCyclic::GetDescriptor(
467{
469
471
472 DPRINT("ISubDevice_GetDescriptor this %p desc %p\n", this, m_SubDeviceDescriptor);
473 return STATUS_SUCCESS;
474}
475
476
478NTAPI
479CPortWaveCyclic::DataRangeIntersection(
480 IN ULONG PinId,
481 IN PKSDATARANGE DataRange,
482 IN PKSDATARANGE MatchingDataRange,
484 OUT PVOID ResultantFormat OPTIONAL,
485 OUT PULONG ResultantFormatLength)
486{
487 DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
488
489 if (m_pMiniport)
490 {
491 return m_pMiniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
492 }
493
494 return STATUS_UNSUCCESSFUL;
495}
496
497
499NTAPI
500CPortWaveCyclic::PowerChangeNotify(
502{
503 if (m_pPowerNotify)
504 {
505 m_pPowerNotify->PowerChangeNotify(PowerState);
506 }
507
508 return STATUS_SUCCESS;
509}
510
512NTAPI
513CPortWaveCyclic::PinCount(
514 IN ULONG PinId,
515 IN OUT PULONG FilterNecessary,
516 IN OUT PULONG FilterCurrent,
517 IN OUT PULONG FilterPossible,
518 IN OUT PULONG GlobalCurrent,
519 IN OUT PULONG GlobalPossible)
520{
521 if (m_pPinCount)
522 {
523 m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
524 return STATUS_SUCCESS;
525 }
526
527 // FIXME
528 // scan filter descriptor
529
530 return STATUS_UNSUCCESSFUL;
531}
532
533
537 IN IPortWaveCyclic* iface)
538{
540 return This->m_pMiniport;
541}
542
545 PPORTWAVECYCLIC iface)
546{
548 return This->m_pDeviceObject;
549}
550
551//---------------------------------------------------------------
552// IPortWaveCyclic constructor
553//
554
557 OUT PPORT* OutPort)
558{
561
563 if (!Port)
565
566 Status = Port->QueryInterface(IID_IPort, (PVOID*)OutPort);
567
568 if (!NT_SUCCESS(Status))
569 {
570 delete Port;
571 }
572
573 DPRINT("NewPortWaveCyclic %p Status %u\n", Port, Status);
574 return Status;
575}
576
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:128
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:486
#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:244
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:213
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
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: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
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