#ifndef PORTCLS_PRIVATE_H
#define PORTCLS_PRIVATE_H
+//#define _KS_NO_ANONYMOUS_STRUCTURES_
+
#include <ntddk.h>
#include <portcls.h>
-#define YDEBUG
+#define NDEBUG
#include <debug.h>
#include <dmusicks.h>
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
#define TAG_PORTCLASS TAG('P', 'C', 'L', 'S')
-#ifdef _MSC_VER
- #define STDCALL
- #define DDKAPI
-#endif
+#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x))
NTSTATUS
NTAPI
OUT PMINIPORT* OutMiniport,
IN REFCLSID ClassId);
-NTSTATUS NewPortMidi(
- OUT PPORT* OutPort);
-
NTSTATUS NewPortDMus(
OUT PPORT* OutPort);
NTSTATUS NewPortPinWaveCyclic(
OUT IPortPinWaveCyclic ** OutPin);
+NTSTATUS
+NewPortFilterWavePci(
+ OUT IPortFilterWavePci ** OutFilter);
+
+NTSTATUS NewPortPinWavePci(
+ OUT IPortPinWavePci ** OutPin);
+
+PDEVICE_OBJECT
+GetDeviceObjectFromWaveCyclic(
+ IPortWavePci* iface);
+
+PDEVICE_OBJECT
+GetDeviceObjectFromPortWavePci(
+ IPortWavePci* iface);
+
+PMINIPORTWAVEPCI
+GetWavePciMiniport(
+ PPORTWAVEPCI Port);
+
+NTSTATUS
+NewPortFilterDMus(
+ OUT PPORTFILTERDMUS * OutFilter);
+
+NTSTATUS NewPortPinDMus(
+ OUT PPORTPINDMUS * OutPin);
+
+VOID
+GetDMusMiniport(
+ IN IPortDMus * iface,
+ IN PMINIPORTDMUS * Miniport,
+ IN PMINIPORTMIDI * MidiMiniport);
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTSTATUS
+NewPortFilterWaveRT(
+ OUT IPortFilterWaveRT ** OutFilter);
+
+NTSTATUS NewPortPinWaveRT(
+ OUT IPortPinWaveRT ** OutPin);
+
+PMINIPORTWAVERT
+GetWaveRTMiniport(
+ IN IPortWaveRT* iface);
+
+PDEVICE_OBJECT
+GetDeviceObjectFromPortWaveRT(
+ IPortWaveRT* iface);
+
+NTSTATUS
+NewPortWaveRTStream(
+ PPORTWAVERTSTREAM *OutStream);
+
+NTSTATUS
+NewPortWaveRT(
+ OUT PPORT* OutPort);
+
+
+#endif
+
+NTSTATUS
+NewPortFilterTopology(
+ OUT IPortFilterTopology ** OutFilter);
+
+PMINIPORTTOPOLOGY
+GetTopologyMiniport(
+ PPORTTOPOLOGY Port);
+
NTSTATUS
NTAPI
NewDispatchObject(
IN PIRP Irp,
- IN IIrpTarget * Target);
+ IN IIrpTarget * Target,
+ IN ULONG ObjectCreateItemCount,
+ IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
PMINIPORTWAVECYCLIC
GetWaveCyclicMiniport(
IN PVOID Item,
IN ULONG Tag);
-NTSTATUS StringFromCLSID(
- const CLSID *id,
- LPWSTR idstr);
-
-
-typedef struct
-{
- LIST_ENTRY Entry;
- KSOBJECT_HEADER ObjectHeader;
-}SUBDEVICE_ENTRY;
-
-typedef struct
-{
- LIST_ENTRY Entry;
- ISubdevice * FromSubDevice;
- LPWSTR FromUnicodeString;
- ULONG FromPin;
- ISubdevice * ToSubDevice;
- LPWSTR ToUnicodeString;
- ULONG ToPin;
-}PHYSICAL_CONNECTION;
+NTSTATUS
+NTAPI
+NewIrpQueue(
+ IN IIrpQueue **Queue);
NTSTATUS
NTAPI
IN PKSIDENTIFIER Request,
IN OUT PVOID Data);
-typedef struct
-{
- KSDEVICE_HEADER KsDeviceHeader;
- PDEVICE_OBJECT PhysicalDeviceObject;
- PDEVICE_OBJECT PrevDeviceObject;
- PCPFNSTARTDEVICE StartDevice;
- IAdapterPowerManagement * AdapterPowerManagement;
- ULONG MaxSubDevices;
- KSOBJECT_CREATE_ITEM * CreateItems;
-
-
- IResourceList* resources;
- LIST_ENTRY SubDeviceList;
- LIST_ENTRY PhysicalConnectionList;
-
-} PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
-
-
NTSTATUS
NTAPI
PcDmaMasterDescription(
IN PIRP Irp,
IN PSUBDEVICE_DESCRIPTOR Descriptor);
+NTSTATUS
+NTAPI
+FastPropertyHandler(
+ IN PFILE_OBJECT FileObject,
+ IN PKSPROPERTY UNALIGNED Property,
+ IN ULONG PropertyLength,
+ IN OUT PVOID UNALIGNED Data,
+ IN ULONG DataLength,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ IN ULONG PropertySetsCount,
+ IN const KSPROPERTY_SET *PropertySet,
+ IN PSUBDEVICE_DESCRIPTOR Descriptor,
+ IN ISubdevice *SubDevice);
+
+PDEVICE_OBJECT
+GetDeviceObject(
+ IPortWaveCyclic* iface);
+
+VOID
+NTAPI
+PcIoTimerRoutine(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PVOID Context);
+
+NTSTATUS
+NTAPI
+NewIUnregisterSubdevice(
+ OUT PUNREGISTERSUBDEVICE *OutDevice);
+
+NTSTATUS
+NTAPI
+NewIUnregisterPhysicalConnection(
+ OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
+
+#define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
+ PropGeneral, PropInstances, PropIntersection)\
+DEFINE_KSPROPERTY_TABLE(PinSet) {\
+ DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
+ DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
+ DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
+ DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
+}
+
+typedef struct
+{
+ LIST_ENTRY Entry;
+ UNICODE_STRING SymbolicLink;
+}SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
+
+
+typedef struct
+{
+ LIST_ENTRY Entry;
+ ISubdevice *SubDevice;
+ UNICODE_STRING Name;
+ LIST_ENTRY SymbolicLinkList;
+}SUBDEVICE_ENTRY, *PSUBDEVICE_ENTRY;
+
+typedef struct
+{
+ LIST_ENTRY Entry;
+ ISubdevice * FromSubDevice;
+ UNICODE_STRING FromUnicodeString;
+ ULONG FromPin;
+ ISubdevice * ToSubDevice;
+ UNICODE_STRING ToUnicodeString;
+ ULONG ToPin;
+}PHYSICAL_CONNECTION, *PPHYSICAL_CONNECTION;
+
+typedef struct
+{
+ KSDEVICE_HEADER KsDeviceHeader;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ PDEVICE_OBJECT PrevDeviceObject;
+ PCPFNSTARTDEVICE StartDevice;
+ ULONG_PTR Unused[4];
+ IAdapterPowerManagement * AdapterPowerManagement;
+ ULONG MaxSubDevices;
+ KSOBJECT_CREATE_ITEM * CreateItems;
+
+ IResourceList* resources;
+ LIST_ENTRY SubDeviceList;
+ LIST_ENTRY PhysicalConnectionList;
+
+ LIST_ENTRY TimerList;
+ KSPIN_LOCK TimerListLock;
+
+} PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
+
+
+typedef struct
+{
+ KSSTREAM_HEADER Header;
+ PIRP Irp;
+}CONTEXT_WRITE, *PCONTEXT_WRITE;
+
+typedef struct
+{
+ PVOID Pin;
+ PIO_WORKITEM WorkItem;
+ PIRP Irp;
+}CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
+
+typedef struct
+{
+ LIST_ENTRY Entry;
+ PIO_TIMER_ROUTINE pTimerRoutine;
+ PVOID Context;
+}TIMER_CONTEXT, *PTIMER_CONTEXT;
#endif