7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
10 //#define _KS_NO_ANONYMOUS_STRUCTURES_
11 #define PC_IMPLEMENTATION
21 #include "interfaces.hpp"
30 #define TAG_PORTCLASS 'SLCP'
32 #define PC_ASSERT(exp) \
34 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
36 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
37 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
44 IN PDEVICE_OBJECT DeviceObject,
52 IN PDEVICE_OBJECT DeviceObject,
60 IN PDEVICE_OBJECT DeviceObject,
68 IN PDEVICE_OBJECT DeviceObject,
73 OUT PMINIPORT* OutMiniport,
78 OUT PMINIPORT* OutMiniport,
99 OUT PDRMPORT2 *OutPort);
103 OUT PPORTCLSVERSION * OutVersion);
106 NewPortFilterWaveCyclic(
107 OUT IPortFilterWaveCyclic ** OutFilter);
110 NewPortPinWaveCyclic(
111 OUT IPortPinWaveCyclic ** OutPin);
114 NewPortFilterWavePci(
115 OUT IPortFilterWavePci ** OutFilter);
119 OUT IPortPinWavePci ** OutPin);
122 GetDeviceObjectFromWaveCyclic(
123 IPortWavePci* iface);
126 GetDeviceObjectFromPortWavePci(
127 IPortWavePci* iface);
136 OUT PPORTFILTERDMUS * OutFilter);
141 OUT PPORTPINDMUS * OutPin);
145 IN IPortDMus * iface,
146 IN PMINIPORTDMUS * Miniport,
147 IN PMINIPORTMIDI * MidiMiniport);
149 #if (NTDDI_VERSION >= NTDDI_VISTA)
153 OUT IPortFilterWaveRT ** OutFilter);
157 OUT IPortPinWaveRT ** OutPin);
161 IN IPortWaveRT* iface);
164 GetDeviceObjectFromPortWaveRT(
170 PPORTWAVERTSTREAM *OutStream);
180 NewPortFilterTopology(
181 OUT IPortFilterTopology ** OutFilter);
191 IN IIrpTarget * Target,
192 IN ULONG ObjectCreateItemCount,
193 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
196 GetWaveCyclicMiniport(
197 IN IPortWaveCyclic* iface);
201 IN POOL_TYPE PoolType,
202 IN SIZE_T NumberOfBytes,
213 IN IIrpQueue **Queue);
217 TopologyPropertyHandler(
219 IN PKSIDENTIFIER Request,
226 IN PKSIDENTIFIER Request,
233 PcDmaMasterDescription(
234 IN PRESOURCELIST ResourceList OPTIONAL,
235 IN BOOLEAN ScatterGather,
236 IN BOOLEAN Dma32BitAddresses,
237 IN BOOLEAN IgnoreCount,
238 IN BOOLEAN Dma64BitAddresses,
239 IN DMA_WIDTH DmaWidth,
240 IN DMA_SPEED DmaSpeed,
241 IN ULONG MaximumLength,
243 OUT PDEVICE_DESCRIPTION DeviceDescription);
249 PcDmaSlaveDescription(
250 IN PRESOURCELIST ResourceList OPTIONAL,
253 IN ULONG AutoInitialize,
254 IN DMA_SPEED DmaSpeed,
255 IN ULONG MaximumLength,
257 OUT PDEVICE_DESCRIPTION DeviceDescription);
263 PcCreateSubdeviceDescriptor(
264 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
265 IN ULONG InterfaceCount,
266 IN GUID * InterfaceGuids,
267 IN ULONG IdentifierCount,
268 IN KSIDENTIFIER *Identifier,
269 IN ULONG FilterPropertiesCount,
270 IN KSPROPERTY_SET * FilterProperties,
273 IN ULONG PinPropertiesCount,
274 IN KSPROPERTY_SET * PinProperties,
275 IN ULONG EventSetCount,
276 IN KSEVENT_SET * EventSet,
277 IN PPCFILTER_DESCRIPTOR FilterDescription);
283 PcValidateConnectRequest(
285 IN KSPIN_FACTORY * Descriptor,
286 OUT PKSPIN_CONNECT* Connect);
290 PcCreateItemDispatch(
291 IN PDEVICE_OBJECT DeviceObject,
298 IN PSUBDEVICE_DESCRIPTOR Descriptor);
303 IN PFILE_OBJECT FileObject,
304 IN PKSPROPERTY UNALIGNED Property,
305 IN ULONG PropertyLength,
306 IN OUT PVOID UNALIGNED Data,
308 OUT PIO_STATUS_BLOCK IoStatus,
309 IN ULONG PropertySetsCount,
310 IN const KSPROPERTY_SET *PropertySet,
311 IN PSUBDEVICE_DESCRIPTOR Descriptor,
312 IN ISubdevice *SubDevice);
316 IPortWaveCyclic* iface);
321 IN PDEVICE_OBJECT DeviceObject,
326 NewIUnregisterSubdevice(
327 OUT PUNREGISTERSUBDEVICE *OutDevice);
331 NewIUnregisterPhysicalConnection(
332 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
334 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
335 PropGeneral, PropInstances, PropIntersection)\
336 DEFINE_KSPROPERTY_TABLE(PinSet) {\
337 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
338 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
339 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
340 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
341 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
342 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
343 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
344 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
345 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
346 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
347 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
348 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
349 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
350 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
351 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
357 UNICODE_STRING SymbolicLink;
358 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
364 ISubdevice *SubDevice;
366 LIST_ENTRY SymbolicLinkList;
367 }SUBDEVICE_ENTRY, *PSUBDEVICE_ENTRY;
372 ISubdevice * FromSubDevice;
373 UNICODE_STRING FromUnicodeString;
375 ISubdevice * ToSubDevice;
376 UNICODE_STRING ToUnicodeString;
378 }PHYSICAL_CONNECTION, *PPHYSICAL_CONNECTION;
382 KSDEVICE_HEADER KsDeviceHeader;
383 PDEVICE_OBJECT PhysicalDeviceObject;
384 PDEVICE_OBJECT PrevDeviceObject;
385 PCPFNSTARTDEVICE StartDevice;
387 IAdapterPowerManagement * AdapterPowerManagement;
389 KSOBJECT_CREATE_ITEM * CreateItems;
391 IResourceList* resources;
392 LIST_ENTRY SubDeviceList;
393 LIST_ENTRY PhysicalConnectionList;
395 LIST_ENTRY TimerList;
396 KSPIN_LOCK TimerListLock;
398 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
403 KSSTREAM_HEADER Header;
405 }CONTEXT_WRITE, *PCONTEXT_WRITE;
410 PIO_WORKITEM WorkItem;
412 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
417 PIO_TIMER_ROUTINE pTimerRoutine;
419 }TIMER_CONTEXT, *PTIMER_CONTEXT;