7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
10 //#define _KS_NO_ANONYMOUS_STRUCTURES_
11 #define PC_IMPLEMENTATION
12 #define COM_STDMETHOD_CAN_THROW
22 #include "interfaces.hpp"
27 #define TAG_PORTCLASS 'SLCP'
29 #define PC_ASSERT(exp) \
31 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
33 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
34 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
41 IN PDEVICE_OBJECT DeviceObject,
49 IN PDEVICE_OBJECT DeviceObject,
57 IN PDEVICE_OBJECT DeviceObject,
65 IN PDEVICE_OBJECT DeviceObject,
70 OUT PMINIPORT* OutMiniport,
75 OUT PMINIPORT* OutMiniport,
96 OUT PDRMPORT2 *OutPort);
100 OUT PPORTCLSVERSION * OutVersion);
103 NewPortFilterWaveCyclic(
104 OUT IPortFilterWaveCyclic ** OutFilter);
107 NewPortPinWaveCyclic(
108 OUT IPortPinWaveCyclic ** OutPin);
111 NewPortFilterWavePci(
112 OUT IPortFilterWavePci ** OutFilter);
116 OUT IPortPinWavePci ** OutPin);
119 GetDeviceObjectFromWaveCyclic(
120 IPortWavePci* iface);
123 GetDeviceObjectFromPortWavePci(
124 IPortWavePci* iface);
133 OUT PPORTFILTERDMUS * OutFilter);
138 OUT PPORTPINDMUS * OutPin);
142 IN IPortDMus * iface,
143 IN PMINIPORTDMUS * Miniport,
144 IN PMINIPORTMIDI * MidiMiniport);
146 #if (NTDDI_VERSION >= NTDDI_VISTA)
150 OUT IPortFilterWaveRT ** OutFilter);
154 OUT IPortPinWaveRT ** OutPin);
158 IN IPortWaveRT* iface);
161 GetDeviceObjectFromPortWaveRT(
167 PPORTWAVERTSTREAM *OutStream);
177 NewPortFilterTopology(
178 OUT IPortFilterTopology ** OutFilter);
188 IN IIrpTarget * Target,
189 IN ULONG ObjectCreateItemCount,
190 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
193 GetWaveCyclicMiniport(
194 IN IPortWaveCyclic* iface);
198 IN POOL_TYPE PoolType,
199 IN SIZE_T NumberOfBytes,
210 IN IIrpQueue **Queue);
214 TopologyPropertyHandler(
216 IN PKSIDENTIFIER Request,
223 IN PKSIDENTIFIER Request,
230 PcDmaMasterDescription(
231 IN PRESOURCELIST ResourceList OPTIONAL,
232 IN BOOLEAN ScatterGather,
233 IN BOOLEAN Dma32BitAddresses,
234 IN BOOLEAN IgnoreCount,
235 IN BOOLEAN Dma64BitAddresses,
236 IN DMA_WIDTH DmaWidth,
237 IN DMA_SPEED DmaSpeed,
238 IN ULONG MaximumLength,
240 OUT PDEVICE_DESCRIPTION DeviceDescription);
246 PcDmaSlaveDescription(
247 IN PRESOURCELIST ResourceList OPTIONAL,
249 IN BOOLEAN DemandMode,
250 IN BOOLEAN AutoInitialize,
251 IN DMA_SPEED DmaSpeed,
252 IN ULONG MaximumLength,
254 OUT PDEVICE_DESCRIPTION DeviceDescription);
260 PcCreateSubdeviceDescriptor(
261 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
262 IN ULONG InterfaceCount,
263 IN GUID * InterfaceGuids,
264 IN ULONG IdentifierCount,
265 IN KSIDENTIFIER *Identifier,
266 IN ULONG FilterPropertiesCount,
267 IN KSPROPERTY_SET * FilterProperties,
270 IN ULONG PinPropertiesCount,
271 IN KSPROPERTY_SET * PinProperties,
272 IN ULONG EventSetCount,
273 IN KSEVENT_SET * EventSet,
274 IN PPCFILTER_DESCRIPTOR FilterDescription);
280 PcValidateConnectRequest(
282 IN KSPIN_FACTORY * Descriptor,
283 OUT PKSPIN_CONNECT* Connect);
287 PcCreateItemDispatch(
288 IN PDEVICE_OBJECT DeviceObject,
293 IPortWaveCyclic* iface);
298 IN PDEVICE_OBJECT DeviceObject,
303 NewIUnregisterSubdevice(
304 OUT PUNREGISTERSUBDEVICE *OutDevice);
308 NewIUnregisterPhysicalConnection(
309 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
313 PcHandlePropertyWithTable(
315 IN ULONG PropertySetCount,
316 IN PKSPROPERTY_SET PropertySet,
317 IN PSUBDEVICE_DESCRIPTOR Descriptor);
321 PcHandleEnableEventWithTable(
323 IN PSUBDEVICE_DESCRIPTOR Descriptor);
327 PcHandleDisableEventWithTable(
329 IN PSUBDEVICE_DESCRIPTOR Descriptor);
333 KsoGetIrpTargetFromIrp(
336 #define DEFINE_KSPROPERTY_CONNECTIONSET(PinSet,\
337 PropStateHandler, PropDataFormatHandler, PropAllocatorFraming)\
338 DEFINE_KSPROPERTY_TABLE(PinSet) {\
339 DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\
340 DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(PropDataFormatHandler, PropDataFormatHandler),\
341 DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(PropAllocatorFraming)\
344 #define DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(GetHandler, SetHandler)\
345 DEFINE_KSPROPERTY_ITEM(\
346 KSPROPERTY_AUDIO_POSITION,\
349 sizeof(KSAUDIO_POSITION),\
351 NULL, 0, NULL, NULL, 0)
353 #define DEFINE_KSPROPERTY_AUDIOSET(PinSet,\
354 PropPositionHandler)\
355 DEFINE_KSPROPERTY_TABLE(PinSet) {\
356 DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(PropPositionHandler, PropPositionHandler)\
360 #define DEFINE_KSPROPERTY_ITEM_DRMAUDIOSTREAM_CONTENTID(SetHandler)\
361 DEFINE_KSPROPERTY_ITEM(\
362 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID,\
367 NULL, 0, NULL, NULL, 0)
369 #define DEFINE_KSPROPERTY_DRMSET(PinSet,\
370 PropPositionHandler)\
371 DEFINE_KSPROPERTY_TABLE(PinSet) {\
372 DEFINE_KSPROPERTY_ITEM_DRMAUDIOSTREAM_CONTENTID(PropPositionHandler)\
375 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
376 PropGeneral, PropInstances, PropIntersection)\
377 DEFINE_KSPROPERTY_TABLE(PinSet) {\
378 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
379 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
380 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
381 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
382 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
383 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
384 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
385 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
386 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
387 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
388 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
389 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
390 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
391 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
392 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
397 KSDEVICE_HEADER KsDeviceHeader;
398 PDEVICE_OBJECT PhysicalDeviceObject;
399 PDEVICE_OBJECT PrevDeviceObject;
400 PCPFNSTARTDEVICE StartDevice;
402 IAdapterPowerManagement * AdapterPowerManagement;
404 KSOBJECT_CREATE_ITEM * CreateItems;
406 IResourceList* resources;
408 LIST_ENTRY TimerList;
409 KSPIN_LOCK TimerListLock;
411 DEVICE_POWER_STATE DevicePowerState;
412 SYSTEM_POWER_STATE SystemPowerState;
414 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
420 PIO_WORKITEM WorkItem;
422 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
427 PIO_TIMER_ROUTINE pTimerRoutine;
429 }TIMER_CONTEXT, *PTIMER_CONTEXT;
433 KSOBJECT_HEADER ObjectHeader;
435 PKSOBJECT_CREATE_ITEM CreateItem;
436 }DISPATCH_CONTEXT, *PDISPATCH_CONTEXT;