ReactOS  0.4.14-dev-52-g6116262
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 IPortTopology,
18  public ISubdevice,
19  public IPortEvents
20 {
21 public:
23 
25  {
27  return m_Ref;
28  }
30  {
32 
33  if (!m_Ref)
34  {
35  delete this;
36  return 0;
37  }
38  return m_Ref;
39  }
43  CPortTopology(IUnknown *OuterUnknown){}
44  virtual ~CPortTopology(){}
45 
46 protected:
48 
53 
56  IPortFilterTopology * m_Filter;
57 
59 
61 
62 };
63 
64 static GUID InterfaceGuids[2] =
65 {
66  {
68  0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
69  },
70  {
72  0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}
73  }
74 };
75 
76 DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterTopologyTopologySet, TopologyPropertyHandler);
78 
79 KSPROPERTY_SET TopologyPropertySet[] =
80 {
81  {
83  sizeof(PortFilterTopologyTopologySet) / sizeof(KSPROPERTY_ITEM),
84  (const KSPROPERTY_ITEM*)&PortFilterTopologyTopologySet,
85  0,
86  NULL
87  },
88  {
90  sizeof(PortFilterTopologyPinSet) / sizeof(KSPROPERTY_ITEM),
91  (const KSPROPERTY_ITEM*)&PortFilterTopologyPinSet,
92  0,
93  NULL
94  }
95 };
96 
97 //---------------------------------------------------------------
98 // IPortEvents
99 //
100 
101 
102 void
103 NTAPI
104 CPortTopology::AddEventToEventList(
105  IN PKSEVENT_ENTRY EventEntry)
106 {
108 }
109 
110 void
111 NTAPI
112 CPortTopology::GenerateEventList(
113  IN GUID* Set OPTIONAL,
114  IN ULONG EventId,
115  IN BOOL PinEvent,
116  IN ULONG PinId,
117  IN BOOL NodeEvent,
118  IN ULONG NodeId)
119 {
121 }
122 
123 
124 //---------------------------------------------------------------
125 // IUnknown interface functions
126 //
127 
128 NTSTATUS
129 NTAPI
131  IN REFIID refiid,
132  OUT PVOID* Output)
133 {
135 
136  DPRINT("IPortTopology_fnQueryInterface\n");
137 
138  if (IsEqualGUIDAligned(refiid, IID_IPortTopology) ||
139  IsEqualGUIDAligned(refiid, IID_IPort) ||
141  {
142  *Output = PVOID(PUNKNOWN((IPortTopology*)this));
143  PUNKNOWN(*Output)->AddRef();
144  return STATUS_SUCCESS;
145  }
146  else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
147  {
148  *Output = PVOID(PPORTEVENTS(this));
149  PUNKNOWN(*Output)->AddRef();
150  return STATUS_SUCCESS;
151  }
152  else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
153  {
154  *Output = PVOID(PSUBDEVICE(this));
155  PUNKNOWN(*Output)->AddRef();
156  return STATUS_SUCCESS;
157  }
158  else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
159  {
161  }
162  else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
163  IsEqualGUIDAligned(refiid, IID_IDrmPort2))
164  {
165  return NewIDrmPort((PDRMPORT2*)Output);
166  }
167  else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
168  {
170  }
171  else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
172  {
174  }
175 
177  {
178  DPRINT1("IPortTopology_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
180  }
181  return STATUS_UNSUCCESSFUL;
182 }
183 
184 //---------------------------------------------------------------
185 // IPort interface functions
186 //
187 
188 NTSTATUS
189 NTAPI
190 CPortTopology::GetDeviceProperty(
191  IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
193  OUT PVOID PropertyBuffer,
195 {
197 
198  if (!m_bInitialized)
199  {
200  DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
201  return STATUS_UNSUCCESSFUL;
202  }
203 
204  return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
205 }
206 
207 NTSTATUS
208 NTAPI
211  IN PIRP Irp,
212  IN PUNKNOWN UnknownMiniport,
213  IN PUNKNOWN UnknownAdapter OPTIONAL,
215 {
216  IMiniportTopology * Miniport;
218 
219  DPRINT("IPortTopology_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n",
220  this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
221 
223 
224  if (m_bInitialized)
225  {
226  DPRINT("IPortTopology_Init called again\n");
227  return STATUS_SUCCESS;
228  }
229 
230  Status = UnknownMiniport->QueryInterface(IID_IMiniportTopology, (PVOID*)&Miniport);
231  if (!NT_SUCCESS(Status))
232  {
233  DPRINT("IPortTopology_Init called with invalid IMiniport adapter\n");
235  }
236 
237  // Initialize port object
238  m_pMiniport = Miniport;
241 
242  // now initialize the miniport driver
243  Status = Miniport->Init(UnknownAdapter, ResourceList, this);
244  if (!NT_SUCCESS(Status))
245  {
246  DPRINT("IPortTopology_Init failed with %x\n", Status);
248  Miniport->Release();
249  return Status;
250  }
251 
252  // get the miniport device descriptor
253  Status = Miniport->GetDescription(&m_pDescriptor);
254  if (!NT_SUCCESS(Status))
255  {
256  DPRINT("failed to get description\n");
257  Miniport->Release();
259  return Status;
260  }
261 
262  // create the subdevice descriptor
264  2,
266  0,
267  NULL,
268  2,
270  0,
271  0,
272  0,
273  NULL,
274  0,
275  NULL,
276  m_pDescriptor);
277 
278 
279  DPRINT("IPortTopology_fnInit success\n");
280  if (NT_SUCCESS(Status))
281  {
282  // store for node property requests
283  m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
284  }
285 
286  return STATUS_SUCCESS;
287 }
288 
289 
290 NTSTATUS
291 NTAPI
292 CPortTopology::NewRegistryKey(
293  OUT PREGISTRYKEY *OutRegistryKey,
294  IN PUNKNOWN OuterUnknown OPTIONAL,
295  IN ULONG RegistryKeyType,
300 {
302 
303  if (!m_bInitialized)
304  {
305  DPRINT("IPortTopology_fnNewRegistryKey called w/o initialized\n");
306  return STATUS_UNSUCCESSFUL;
307  }
308  return PcNewRegistryKey(OutRegistryKey,
309  OuterUnknown,
310  RegistryKeyType,
313  (ISubdevice*)this,
316  Disposition);
317 }
318 
319 //---------------------------------------------------------------
320 // ISubdevice interface
321 //
322 
323 NTSTATUS
324 NTAPI
325 CPortTopology::NewIrpTarget(
326  OUT struct IIrpTarget **OutTarget,
327  IN PCWSTR Name,
331  IN PIRP Irp,
332  IN KSOBJECT_CREATE *CreateObject)
333 {
335  IPortFilterTopology * Filter;
336 
337  // is there already an instance of the filter
338  if (m_Filter)
339  {
340  // it is, let's return the result
341  *OutTarget = (IIrpTarget*)m_Filter;
342 
343  // increment reference
344  m_Filter->AddRef();
345  return STATUS_SUCCESS;
346  }
347 
348  // create new instance of filter
350  if (!NT_SUCCESS(Status))
351  {
352  // not enough memory
353  return Status;
354  }
355 
356  // initialize the filter
357  Status = Filter->Init((IPortTopology*)this);
358  if (!NT_SUCCESS(Status))
359  {
360  // destroy filter
361  Filter->Release();
362  // return status
363  return Status;
364  }
365 
366  // store result
367  *OutTarget = (IIrpTarget*)Filter;
368  // store for later re-use
369  m_Filter = Filter;
370  // return status
371  return Status;
372 }
373 
374 NTSTATUS
375 NTAPI
376 CPortTopology::ReleaseChildren()
377 {
378  DPRINT("ISubDevice_fnReleaseChildren\n");
379 
380  // release the filter
381  m_Filter->Release();
382 
383  // release the miniport
384  DPRINT("Refs %u\n", m_pMiniport->Release());
385 
386  return STATUS_SUCCESS;
387 }
388 
389 NTSTATUS
390 NTAPI
391 CPortTopology::GetDescriptor(
393 {
394  DPRINT("ISubDevice_GetDescriptor this %p Descp %p\n", this, m_SubDeviceDescriptor);
396  return STATUS_SUCCESS;
397 }
398 
399 NTSTATUS
400 NTAPI
401 CPortTopology::DataRangeIntersection(
402  IN ULONG PinId,
403  IN PKSDATARANGE DataRange,
404  IN PKSDATARANGE MatchingDataRange,
406  OUT PVOID ResultantFormat OPTIONAL,
407  OUT PULONG ResultantFormatLength)
408 {
409  DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
410 
411  if (m_pMiniport)
412  {
413  return m_pMiniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
414  }
415 
416  return STATUS_UNSUCCESSFUL;
417 }
418 
419 NTSTATUS
420 NTAPI
421 CPortTopology::PowerChangeNotify(
423 {
424  if (m_pPowerNotify)
425  {
426  m_pPowerNotify->PowerChangeNotify(PowerState);
427  }
428 
429  return STATUS_SUCCESS;
430 }
431 
432 NTSTATUS
433 NTAPI
435  IN ULONG PinId,
436  IN OUT PULONG FilterNecessary,
437  IN OUT PULONG FilterCurrent,
438  IN OUT PULONG FilterPossible,
439  IN OUT PULONG GlobalCurrent,
440  IN OUT PULONG GlobalPossible)
441 {
442  if (m_pPinCount)
443  {
444  m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
445  return STATUS_SUCCESS;
446  }
447 
448  // FIXME
449  // scan filter descriptor
450 
451  return STATUS_UNSUCCESSFUL;
452 }
453 
454 
455 NTSTATUS
456 NTAPI
459  IN PIRP Irp)
460 {
462  IIrpTarget *Filter;
463  IIrpTarget *Pin;
464  PKSOBJECT_CREATE_ITEM CreateItem;
465 
466  // access the create item
467  CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
468  // sanity check
469  PC_ASSERT(CreateItem);
470 
471  DPRINT("PcCreatePinDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
472 
473  Filter = (IIrpTarget*)CreateItem->Context;
474 
475  // sanity checks
476  PC_ASSERT(Filter != NULL);
478 
479 
480 #if KS_IMPLEMENTED
481  Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
483  {
484  DPRINT("PcCreatePinDispatch failed to reference device header\n");
485 
487  goto cleanup;
488  }
489 #endif
490 
491  Status = Filter->NewIrpTarget(&Pin,
492  KSSTRING_Pin,
493  NULL,
494  NonPagedPool,
495  DeviceObject,
496  Irp,
497  NULL);
498 
499  DPRINT("PcCreatePinDispatch Status %x\n", Status);
500 
501  if (NT_SUCCESS(Status))
502  {
503  // create the dispatch object
504  // FIXME need create item for clock
506  DPRINT("Pin %p\n", Pin);
507  }
508 
509  DPRINT("CreatePinWorkerRoutine completing irp %p\n", Irp);
510  // save status in irp
511  Irp->IoStatus.Status = Status;
512  Irp->IoStatus.Information = 0;
513  // complete the request
515  return Status;
516 }
517 
518 NTSTATUS
519 NTAPI
522  IN PIRP Irp)
523 {
525  ISubdevice * SubDevice;
526  IIrpTarget *Filter;
527  PKSOBJECT_CREATE_ITEM CreateItem, PinCreateItem;
528 
529  // access the create item
530  CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
531 
532  DPRINT("PcCreateItemDispatch called DeviceObject %p %S Name\n", DeviceObject, CreateItem->ObjectClass.Buffer);
533 
534  // get the subdevice
535  SubDevice = (ISubdevice*)CreateItem->Context;
536 
537  // sanity checks
538  PC_ASSERT(SubDevice != NULL);
539 
540 
541 #if KS_IMPLEMENTED
542  Status = KsReferenceSoftwareBusObject(DeviceExt->KsDeviceHeader);
544  {
545  DPRINT("PcCreateItemDispatch failed to reference device header\n");
546 
548  goto cleanup;
549  }
550 #endif
551 
552  // get filter object
553  Status = SubDevice->NewIrpTarget(&Filter,
554  NULL,
555  NULL,
556  NonPagedPool,
557  DeviceObject,
558  Irp,
559  NULL);
560  if (!NT_SUCCESS(Status))
561  {
562  DPRINT("Failed to get filter object\n");
563  Irp->IoStatus.Status = Status;
565  return Status;
566  }
567 
568  // allocate pin create item
569  PinCreateItem = (PKSOBJECT_CREATE_ITEM)AllocateItem(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM), TAG_PORTCLASS);
570  if (!PinCreateItem)
571  {
572  // not enough memory
573  Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
576  }
577 
578  // initialize pin create item
579  PinCreateItem->Context = (PVOID)Filter;
580  PinCreateItem->Create = PcCreatePinDispatch;
581  RtlInitUnicodeString(&PinCreateItem->ObjectClass, KSSTRING_Pin);
582  // FIXME copy security descriptor
583 
584  // now allocate a dispatch object
585  Status = NewDispatchObject(Irp, Filter, 1, PinCreateItem);
586 
587  // complete request
588  Irp->IoStatus.Status = Status;
590 
591  return STATUS_SUCCESS;
592 }
593 
594 
595 NTSTATUS
597  OUT PPORT* OutPort)
598 {
601 
603  if (!This)
605 
606  Status = This->QueryInterface(IID_IPort, (PVOID*)OutPort);
607 
608  if (!NT_SUCCESS(Status))
609  {
610  delete This;
611  }
612 
613  DPRINT("NewPortTopology %p Status %x\n", *OutPort, Status);
614  return Status;
615 }
616 
617 
621 {
623  return This->m_pMiniport;
624 }
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1154
IPortEvents * PPORTEVENTS
Definition: portcls.h:2065
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:91
NTSTATUS NTAPI PinPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
CPPORT Port[4]
Definition: headless.c:34
const uint16_t * PCWSTR
Definition: typedefs.h:55
#define IN
Definition: typedefs.h:38
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
_In_ UCHAR _In_ POWER_STATE PowerState
Definition: pofuncs.h:42
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define PC_ASSERT(exp)
Definition: usbehci.h:17
DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterTopologyTopologySet, TopologyPropertyHandler)
KSDDKAPI NTSTATUS NTAPI KsReferenceSoftwareBusObject(IN KSDEVICE_HEADER Header)
Definition: device.c:805
IPortTopology * PPORTTOPOLOGY
Definition: portcls.h:1403
IMiniportTopology * PMINIPORTTOPOLOGY
Definition: portcls.h:1431
_In_ BOOLEAN Release
Definition: classpnp.h:929
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
IPinCount * PPINCOUNT
Definition: portcls.h:2036
_In_ PIRP Irp
Definition: csq.h:116
NTSTATUS NewPortTopology(OUT PPORT *OutPort)
#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
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ ULONG _In_ ULONG OutputBufferLength
Definition: fltkernel.h:1374
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
PPOWERNOTIFY m_pPowerNotify
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:633
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:385
_In_ const GUID _In_ ULONG PinCount
Definition: strmini.h:504
const MUI_LANGUAGE_RESOURCE ResourceList[]
Definition: muilanguages.h:414
_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 IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:233
NTSTATUS NewPortFilterTopology(OUT IPortFilterTopology **OutFilter)
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
KSPROPERTY_SET TopologyPropertySet[]
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
_In_ ULONG BufferLength
Definition: usbdlib.h:225
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
virtual ~CPortTopology()
STDMETHODIMP_(ULONG) Release()
#define STDMETHODIMP
Definition: basetyps.h:43
IPort * PPORT
Definition: portcls.h:1093
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
smooth NULL
Definition: ftsmooth.c:416
#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:4228
void DPRINT(...)
Definition: polytest.cpp:61
void * PVOID
Definition: retypes.h:9
PPINCOUNT m_pPinCount
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:675
#define KSPROPSETID_Topology
Definition: ks.h:842
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:359
PMINIPORTTOPOLOGY m_pMiniport
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:999
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2172
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
Definition: fatprocs.h:415
PDEVICE_OBJECT m_pDeviceObject
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
INT POOL_TYPE
Definition: typedefs.h:76
const GUID IID_IUnknown
nsrefcnt Release()
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG CreateOptions
Definition: fltkernel.h:1230
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:281
#define InterlockedDecrement
Definition: armddk.h:52
Definition: arc.h:85
NTSTATUS NTAPI NewIUnregisterSubdevice(OUT PUNREGISTERSUBDEVICE *OutDevice)
Definition: unregister.cpp:143
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
CPortTopology(IUnknown *OuterUnknown)
Status
Definition: gdiplustypes.h:24
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
IResourceList * PRESOURCELIST
Definition: portcls.h:442
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
ISubdevice * PSUBDEVICE
Definition: interfaces.hpp:305
NTSTATUS NTAPI PcCreateItemDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define InterlockedIncrement
Definition: armddk.h:53
NTSTATUS NewPortClsVersion(OUT PPORTCLSVERSION *OutVersion)
Definition: version.cpp:93
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
Definition: create.c:4157
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
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
static GUID InterfaceGuids[2]
friend PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
#define DPRINT1
Definition: precomp.h:8
IPowerNotify * PPOWERNOTIFY
Definition: portcls.h:2003
#define OUT
Definition: typedefs.h:39
PMINIPORTTOPOLOGY GetTopologyMiniport(PPORTTOPOLOGY Port)
unsigned int ULONG
Definition: retypes.h:1
#define IO_NO_INCREMENT
Definition: iotypes.h:566
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNIMPLEMENTED
Definition: debug.h:114
char * cleanup(char *str)
Definition: wpickclick.c:99
NTSTATUS NTAPI NewIUnregisterPhysicalConnection(OUT PUNREGISTERPHYSICALCONNECTION *OutConnection)
Definition: connection.cpp:148
struct _KSEVENT_ENTRY * PKSEVENT_ENTRY
Definition: ks.h:2101
NTSTATUS NewIDrmPort(OUT PDRMPORT2 *OutPort)
Definition: drm_port.cpp:145
STDMETHODIMP_(ULONG) AddRef()
return STATUS_SUCCESS
Definition: btrfs.c:2966
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T _In_ POOL_TYPE PoolType
Definition: fltkernel.h:1444
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
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
Definition: classpnp.h:966
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2209