ReactOS  0.4.15-dev-4914-g2220e56
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 
19 class CPortWaveCyclic : public CUnknownImpl<IPortWaveCyclic, IPortEvents, ISubdevice>
20 {
21 public:
23 
27  CPortWaveCyclic(IUnknown *OuterUnknown) {}
28  virtual ~CPortWaveCyclic(){}
29 
30 protected:
37  IPortFilterWaveCyclic * m_Filter;
38 
39  friend PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic* iface);
41 };
42 
43 GUID KSPROPERTY_SETID_Topology = {0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
44 
45 static GUID InterfaceGuids[4] =
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 
66 DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterWaveCyclicTopologySet, TopologyPropertyHandler);
68 
69 KSPROPERTY_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 
95 void
96 NTAPI
97 CPortWaveCyclic::AddEventToEventList(
98  IN PKSEVENT_ENTRY EventEntry)
99 {
101 }
102 
103 
104 void
105 NTAPI
106 CPortWaveCyclic::GenerateEventList(
107  IN GUID* Set OPTIONAL,
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 
121 NTSTATUS
122 NTAPI
124  IN REFIID refiid,
125  OUT PVOID* Output)
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 
180 NTSTATUS
181 NTAPI
182 CPortWaveCyclic::GetDeviceProperty(
183  IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
187 {
189 
191 }
192 
193 NTSTATUS
194 NTAPI
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,
254  m_pDescriptor);
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 
287 NTSTATUS
288 NTAPI
289 CPortWaveCyclic::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 
308 NTSTATUS
309 NTAPI
310 CPortWaveCyclic::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 
334 NTSTATUS
335 NTAPI
336 CPortWaveCyclic::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  {
358  Status = PcNewDmaChannel(&DmaChannel, OuterUnknown, NonPagedPool, &DeviceDescription, m_pDeviceObject);
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 
369 VOID
370 NTAPI
372  IN PSERVICEGROUP ServiceGroup)
373 {
374  ServiceGroup->RequestService ();
375 }
376 
377 //---------------------------------------------------------------
378 // ISubdevice interface
379 //
380 
381 NTSTATUS
382 NTAPI
383 CPortWaveCyclic::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
429  m_Filter = Filter;
430  // return status
431  return Status;
432 }
433 
434 
435 NTSTATUS
436 NTAPI
437 CPortWaveCyclic::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 
463 NTSTATUS
464 NTAPI
467 {
469 
471 
472  DPRINT("ISubDevice_GetDescriptor this %p desc %p\n", this, m_SubDeviceDescriptor);
473  return STATUS_SUCCESS;
474 }
475 
476 
477 NTSTATUS
478 NTAPI
479 CPortWaveCyclic::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 
498 NTSTATUS
499 NTAPI
500 CPortWaveCyclic::PowerChangeNotify(
502 {
503  if (m_pPowerNotify)
504  {
505  m_pPowerNotify->PowerChangeNotify(PowerState);
506  }
507 
508  return STATUS_SUCCESS;
509 }
510 
511 NTSTATUS
512 NTAPI
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 {
539  CPortWaveCyclic * This = (CPortWaveCyclic *)iface;
540  return This->m_pMiniport;
541 }
542 
545  PPORTWAVECYCLIC iface)
546 {
547  CPortWaveCyclic * This = (CPortWaveCyclic *)iface;
548  return This->m_pDeviceObject;
549 }
550 
551 //---------------------------------------------------------------
552 // IPortWaveCyclic constructor
553 //
554 
555 NTSTATUS
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 
GUID IID_IDmaChannelSlave
IServiceGroup * PSERVICEGROUP
Definition: portcls.h:614
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1194
BOOL WINAPI SHIM_OBJ_NAME() Notify(DWORD fdwReason, PVOID ptr)
IPortEvents * PPORTEVENTS
Definition: portcls.h:2119
PDEVICE_OBJECT GetDeviceObject(PPORTWAVECYCLIC iface)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
Definition: dumpinfo.c:39
static PWSTR GuidString
Definition: apphelp.c:93
NTSTATUS NTAPI PinPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
CPPORT Port[4]
Definition: headless.c:35
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define IN
Definition: typedefs.h:39
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3767
DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterWaveCyclicTopologySet, TopologyPropertyHandler)
static GUID InterfaceGuids[4]
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2654
IDmaChannel * PDMACHANNEL
Definition: portcls.h:782
#define REFIID
Definition: guiddef.h:118
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:339
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
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
IPinCount * PPINCOUNT
Definition: portcls.h:2090
PPOWERNOTIFY m_pPowerNotify
friend PDEVICE_OBJECT GetDeviceObject(PPORTWAVECYCLIC iface)
#define TRUE
Definition: types.h:120
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
#define TAG_PORTCLASS
Definition: private.hpp:24
LONG NTSTATUS
Definition: precomp.h:26
PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic *iface)
enum _DMA_WIDTH DMA_WIDTH
return pList GetDescriptor(Index)
PMINIPORTWAVECYCLIC m_pMiniport
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:633
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:385
_In_ const GUID _In_ ULONG PinCount
Definition: strmini.h:504
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:304
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:50
static BOOL Set
Definition: pageheap.c:10
#define PC_ASSERT(exp)
Definition: private.hpp:26
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:318
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
#define L(x)
Definition: ntvdm.h:50
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
Definition: wdfpdo.h:430
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
NTSTATUS NewPortFilterWaveCyclic(OUT IPortFilterWaveCyclic **OutFilter)
_In_ PIRP Irp
Definition: csq.h:116
unsigned int BOOL
Definition: ntddk_ex.h:94
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
#define STDMETHODIMP
Definition: basetyps.h:43
_In_ BOOLEAN Dma64BitAddresses
Definition: ndis.h:4652
IPort * PPORT
Definition: portcls.h:1103
virtual ~CPortWaveCyclic()
unsigned char BOOLEAN
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
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
Definition: pnpmgr.c:1952
DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PortFilterWaveCyclicPinSet, PinPropertyHandler, PinPropertyHandler, PinPropertyHandler)
IPortFilterWaveCyclic * m_Filter
void * PVOID
Definition: retypes.h:9
NTSTATUS NewPortWaveCyclic(OUT PPORT *OutPort)
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:675
#define KSPROPSETID_Topology
Definition: ks.h:842
Status
Definition: gdiplustypes.h:24
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:1009
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2226
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
INT POOL_TYPE
Definition: typedefs.h:78
const GUID IID_IUnknown
GUID KSPROPERTY_SETID_Topology
nsrefcnt Release()
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSTATUS NTAPI TopologyPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
#define PC_ASSERT_IRQL_EQUAL(x)
Definition: private.hpp:31
ULONG AddRef()
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
KSPROPERTY_SET WaveCyclicPropertySet[]
IDmaChannelSlave * PDMACHANNELSLAVE
Definition: portcls.h:829
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
Definition: arc.h:85
NTSTATUS NTAPI NewIUnregisterSubdevice(OUT PUNREGISTERSUBDEVICE *OutDevice)
Definition: unregister.cpp:122
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID PropertyBuffer
Definition: wdfdevice.h:4431
PPCFILTER_DESCRIPTOR m_pDescriptor
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG CreateOptions
Definition: wdfregistry.h:112
enum _DMA_SPEED DMA_SPEED
IResourceList * PRESOURCELIST
Definition: portcls.h:442
PDEVICE_OBJECT m_pDeviceObject
ISubdevice * PSUBDEVICE
Definition: interfaces.hpp:305
IMiniportWaveCyclic * PMINIPORTWAVECYCLIC
Definition: portcls.h:1541
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
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:361
NTSTATUS NewPortClsVersion(OUT PPORTCLSVERSION *OutVersion)
Definition: version.cpp:71
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
Definition: wdfdevice.h:3032
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
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define KSPROPSETID_Pin
Definition: ks.h:617
unsigned int * PULONG
Definition: retypes.h:1
#define NULL
Definition: types.h:112
#define DPRINT1
Definition: precomp.h:8
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
IPowerNotify * PPOWERNOTIFY
Definition: portcls.h:2057
#define OUT
Definition: typedefs.h:40
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3810
unsigned int ULONG
Definition: retypes.h:1
#define UNIMPLEMENTED
Definition: debug.h:115
NTSTATUS NTAPI NewIUnregisterPhysicalConnection(OUT PUNREGISTERPHYSICALCONNECTION *OutConnection)
Definition: connection.cpp:128
struct _KSEVENT_ENTRY * PKSEVENT_ENTRY
Definition: ks.h:2101
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
NTSTATUS NewIDrmPort(OUT PDRMPORT2 *OutPort)
Definition: drm_port.cpp:125
IPortWaveCyclic * PPORTWAVECYCLIC
Definition: portcls.h:1182
ULONG ACCESS_MASK
Definition: nt_native.h:40
friend PMINIPORTWAVECYCLIC GetWaveCyclicMiniport(IN IPortWaveCyclic *iface)
CPortWaveCyclic(IUnknown *OuterUnknown)
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2263