7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
10 //#define _KS_NO_ANONYMOUS_STRUCTURES_
11 #define PC_IMPLEMENTATION
20 #include "interfaces.hpp"
25 #define TAG_PORTCLASS 'SLCP'
27 #define PC_ASSERT(exp) \
29 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
31 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
32 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
39 IN PDEVICE_OBJECT DeviceObject,
47 IN PDEVICE_OBJECT DeviceObject,
55 IN PDEVICE_OBJECT DeviceObject,
63 IN PDEVICE_OBJECT DeviceObject,
68 OUT PMINIPORT* OutMiniport,
73 OUT PMINIPORT* OutMiniport,
94 OUT PDRMPORT2 *OutPort);
98 OUT PPORTCLSVERSION * OutVersion);
101 NewPortFilterWaveCyclic(
102 OUT IPortFilterWaveCyclic ** OutFilter);
105 NewPortPinWaveCyclic(
106 OUT IPortPinWaveCyclic ** OutPin);
109 NewPortFilterWavePci(
110 OUT IPortFilterWavePci ** OutFilter);
114 OUT IPortPinWavePci ** OutPin);
117 GetDeviceObjectFromWaveCyclic(
118 IPortWavePci* iface);
121 GetDeviceObjectFromPortWavePci(
122 IPortWavePci* iface);
131 OUT PPORTFILTERDMUS * OutFilter);
136 OUT PPORTPINDMUS * OutPin);
140 IN IPortDMus * iface,
141 IN PMINIPORTDMUS * Miniport,
142 IN PMINIPORTMIDI * MidiMiniport);
144 #if (NTDDI_VERSION >= NTDDI_VISTA)
148 OUT IPortFilterWaveRT ** OutFilter);
152 OUT IPortPinWaveRT ** OutPin);
156 IN IPortWaveRT* iface);
159 GetDeviceObjectFromPortWaveRT(
165 PPORTWAVERTSTREAM *OutStream);
175 NewPortFilterTopology(
176 OUT IPortFilterTopology ** OutFilter);
186 IN IIrpTarget * Target,
187 IN ULONG ObjectCreateItemCount,
188 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
191 GetWaveCyclicMiniport(
192 IN IPortWaveCyclic* iface);
196 IN POOL_TYPE PoolType,
197 IN SIZE_T NumberOfBytes,
208 IN IIrpQueue **Queue);
212 TopologyPropertyHandler(
214 IN PKSIDENTIFIER Request,
221 IN PKSIDENTIFIER Request,
228 PcDmaMasterDescription(
229 IN PRESOURCELIST ResourceList OPTIONAL,
230 IN BOOLEAN ScatterGather,
231 IN BOOLEAN Dma32BitAddresses,
232 IN BOOLEAN IgnoreCount,
233 IN BOOLEAN Dma64BitAddresses,
234 IN DMA_WIDTH DmaWidth,
235 IN DMA_SPEED DmaSpeed,
236 IN ULONG MaximumLength,
238 OUT PDEVICE_DESCRIPTION DeviceDescription);
244 PcDmaSlaveDescription(
245 IN PRESOURCELIST ResourceList OPTIONAL,
248 IN ULONG AutoInitialize,
249 IN DMA_SPEED DmaSpeed,
250 IN ULONG MaximumLength,
252 OUT PDEVICE_DESCRIPTION DeviceDescription);
258 PcCreateSubdeviceDescriptor(
259 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
260 IN ULONG InterfaceCount,
261 IN GUID * InterfaceGuids,
262 IN ULONG IdentifierCount,
263 IN KSIDENTIFIER *Identifier,
264 IN ULONG FilterPropertiesCount,
265 IN KSPROPERTY_SET * FilterProperties,
268 IN ULONG PinPropertiesCount,
269 IN KSPROPERTY_SET * PinProperties,
270 IN ULONG EventSetCount,
271 IN KSEVENT_SET * EventSet,
272 IN PPCFILTER_DESCRIPTOR FilterDescription);
278 PcValidateConnectRequest(
280 IN KSPIN_FACTORY * Descriptor,
281 OUT PKSPIN_CONNECT* Connect);
285 PcCreateItemDispatch(
286 IN PDEVICE_OBJECT DeviceObject,
293 IN PSUBDEVICE_DESCRIPTOR Descriptor);
298 IN PFILE_OBJECT FileObject,
299 IN PKSPROPERTY UNALIGNED Property,
300 IN ULONG PropertyLength,
301 IN OUT PVOID UNALIGNED Data,
303 OUT PIO_STATUS_BLOCK IoStatus,
304 IN ULONG PropertySetsCount,
305 IN const KSPROPERTY_SET *PropertySet,
306 IN PSUBDEVICE_DESCRIPTOR Descriptor,
307 IN ISubdevice *SubDevice);
311 IPortWaveCyclic* iface);
316 IN PDEVICE_OBJECT DeviceObject,
321 NewIUnregisterSubdevice(
322 OUT PUNREGISTERSUBDEVICE *OutDevice);
326 NewIUnregisterPhysicalConnection(
327 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
329 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
330 PropGeneral, PropInstances, PropIntersection)\
331 DEFINE_KSPROPERTY_TABLE(PinSet) {\
332 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
333 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
334 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
335 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
336 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
337 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
338 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
339 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
340 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
341 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
342 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
343 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
344 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
345 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
346 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
352 UNICODE_STRING SymbolicLink;
353 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
359 ISubdevice *SubDevice;
361 LIST_ENTRY SymbolicLinkList;
362 }SUBDEVICE_ENTRY, *PSUBDEVICE_ENTRY;
367 ISubdevice * FromSubDevice;
368 UNICODE_STRING FromUnicodeString;
370 ISubdevice * ToSubDevice;
371 UNICODE_STRING ToUnicodeString;
373 }PHYSICAL_CONNECTION, *PPHYSICAL_CONNECTION;
377 KSDEVICE_HEADER KsDeviceHeader;
378 PDEVICE_OBJECT PhysicalDeviceObject;
379 PDEVICE_OBJECT PrevDeviceObject;
380 PCPFNSTARTDEVICE StartDevice;
382 IAdapterPowerManagement * AdapterPowerManagement;
384 KSOBJECT_CREATE_ITEM * CreateItems;
386 IResourceList* resources;
387 LIST_ENTRY SubDeviceList;
388 LIST_ENTRY PhysicalConnectionList;
390 LIST_ENTRY TimerList;
391 KSPIN_LOCK TimerListLock;
393 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
398 KSSTREAM_HEADER Header;
400 }CONTEXT_WRITE, *PCONTEXT_WRITE;
405 PIO_WORKITEM WorkItem;
407 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
412 PIO_TIMER_ROUTINE pTimerRoutine;
414 }TIMER_CONTEXT, *PTIMER_CONTEXT;