ReactOS  0.4.15-dev-5500-g82cf6c2
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 
17 class CPortTopology : public CUnknownImpl<IPortTopology, ISubdevice, IPortEvents>
18 {
19 public:
21 
25  CPortTopology(IUnknown *OuterUnknown){}
26  virtual ~CPortTopology(){}
27 
28 protected:
30 
35 
38  IPortFilterTopology * m_Filter;
39 
41 
42 };
43 
44 static GUID InterfaceGuids[2] =
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 
56 DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterTopologyTopologySet, TopologyPropertyHandler);
58 
59 KSPROPERTY_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 
82 void
83 NTAPI
84 CPortTopology::AddEventToEventList(
85  IN PKSEVENT_ENTRY EventEntry)
86 {
88 }
89 
90 void
91 NTAPI
92 CPortTopology::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 
108 NTSTATUS
109 NTAPI
111  IN REFIID refiid,
112  OUT PVOID* Output)
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 
168 NTSTATUS
169 NTAPI
170 CPortTopology::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 
187 NTSTATUS
188 NTAPI
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,
256  m_pDescriptor);
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 
270 NTSTATUS
271 NTAPI
272 CPortTopology::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,
296  Disposition);
297 }
298 
299 //---------------------------------------------------------------
300 // ISubdevice interface
301 //
302 
303 NTSTATUS
304 NTAPI
305 CPortTopology::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
349  m_Filter = Filter;
350  // return status
351  return Status;
352 }
353 
354 NTSTATUS
355 NTAPI
356 CPortTopology::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 
369 NTSTATUS
370 NTAPI
373 {
374  DPRINT("ISubDevice_GetDescriptor this %p Descp %p\n", this, m_SubDeviceDescriptor);
376  return STATUS_SUCCESS;
377 }
378 
379 NTSTATUS
380 NTAPI
381 CPortTopology::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 
399 NTSTATUS
400 NTAPI
401 CPortTopology::PowerChangeNotify(
403 {
404  if (m_pPowerNotify)
405  {
406  m_pPowerNotify->PowerChangeNotify(PowerState);
407  }
408 
409  return STATUS_SUCCESS;
410 }
411 
412 NTSTATUS
413 NTAPI
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 
435 NTSTATUS
436 NTAPI
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
456  PC_ASSERT(Filter != NULL);
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,
472  KSSTRING_Pin,
473  NULL,
474  NonPagedPool,
475  DeviceObject,
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 
498 NTSTATUS
499 NTAPI
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,
536  NonPagedPool,
537  DeviceObject,
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 
575 NTSTATUS
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 }
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1194
IPortEvents * PPORTEVENTS
Definition: portcls.h:2119
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
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2654
#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
DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterTopologyTopologySet, TopologyPropertyHandler)
KSDDKAPI NTSTATUS NTAPI KsReferenceSoftwareBusObject(IN KSDEVICE_HEADER Header)
Definition: device.c:780
IPortTopology * PPORTTOPOLOGY
Definition: portcls.h:1413
IMiniportTopology * PMINIPORTTOPOLOGY
Definition: portcls.h:1441
IPinCount * PPINCOUNT
Definition: portcls.h:2090
NTSTATUS NewPortTopology(OUT PPORT *OutPort)
#define TRUE
Definition: types.h:120
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
IPortFilterTopology * m_Filter
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
#define TAG_PORTCLASS
Definition: private.hpp:24
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: misc.c:30
#define KSSTRING_Pin
Definition: ks.h:48
LONG NTSTATUS
Definition: precomp.h:26
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
return pList GetDescriptor(Index)
PPOWERNOTIFY m_pPowerNotify
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:633
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:386
_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_KSPROPERTY_PINPROPOSEDATAFORMAT(PortFilterTopologyPinSet, PinPropertyHandler, PinPropertyHandler, PinPropertyHandler)
#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
NTSTATUS NewPortFilterTopology(OUT IPortFilterTopology **OutFilter)
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
return STATUS_NOT_IMPLEMENTED
VOID FreeItem(IN PVOID Item)
Definition: misc.c:43
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define FALSE
Definition: types.h:117
_In_ PIRP Irp
Definition: csq.h:116
KSPROPERTY_SET TopologyPropertySet[]
unsigned int BOOL
Definition: ntddk_ex.h:94
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
virtual ~CPortTopology()
#define STDMETHODIMP
Definition: basetyps.h:43
IPort * PPORT
Definition: portcls.h:1103
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 IoCompleteRequest
Definition: irp.c:1240
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
void * PVOID
Definition: retypes.h:9
PPINCOUNT m_pPinCount
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:675
#define KSPROPSETID_Topology
Definition: ks.h:842
Status
Definition: gdiplustypes.h:24
PMINIPORTTOPOLOGY m_pMiniport
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:1009
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2226
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
Definition: fatprocs.h:424
PDEVICE_OBJECT m_pDeviceObject
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
INT POOL_TYPE
Definition: typedefs.h:78
const GUID IID_IUnknown
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
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
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
CPortTopology(IUnknown *OuterUnknown)
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG CreateOptions
Definition: wdfregistry.h:112
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
IResourceList * PRESOURCELIST
Definition: portcls.h:442
ISubdevice * PSUBDEVICE
Definition: interfaces.hpp:305
NTSTATUS NTAPI PcCreateItemDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
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
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
PPCFILTER_DESCRIPTOR m_pDescriptor
#define KSPROPSETID_Pin
Definition: ks.h:617
NTSTATUS NTAPI PcCreatePinDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
unsigned int * PULONG
Definition: retypes.h:1
#define NULL
Definition: types.h:112
static GUID InterfaceGuids[2]
friend PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
#define DPRINT1
Definition: precomp.h:8
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
PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
unsigned int ULONG
Definition: retypes.h:1
#define IO_NO_INCREMENT
Definition: iotypes.h:598
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNIMPLEMENTED
Definition: debug.h:115
char * cleanup(char *str)
Definition: wpickclick.c:99
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
NTSTATUS NTAPI NewDispatchObject(IN PIRP Irp, IN IIrpTarget *Target, IN ULONG CreateItemCount, IN PKSOBJECT_CREATE_ITEM CreateItem)
Definition: dispatcher.cpp:242
ULONG ACCESS_MASK
Definition: nt_native.h:40
base of all file and directory entries
Definition: entries.h:82
#define PC_ASSERT_IRQL(x)
Definition: private.hpp:30
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2263