UCHAR iChannelNames;
UCHAR iTerminal;
}USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR;
+
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bUnitID;
+ UCHAR bSourceID;
+ UCHAR bControlSize;
+ UCHAR bmaControls[1];
+ UCHAR iFeature;
+}USB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR, *PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR;
+
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bUnitID;
+ UCHAR bNrInPins;
+ UCHAR baSourceID[1];
+ UCHAR bNrChannels;
+ USHORT wChannelConfig;
+ UCHAR iChannelNames;
+ UCHAR bmControls;
+ UCHAR iMixer;
+}USB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR, *PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR;
+
+
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bTerminalLink;
+ UCHAR bDelay;
+ USHORT wFormatTag;
+}USB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR, *PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR;
+
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bFormatType;
+ UCHAR bNrChannels;
+ UCHAR bSubframeSize;
+ UCHAR bBitResolution;
+ UCHAR bSamFreqType;
+ UCHAR tSamFreq[1];
+}USB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR, *PUSB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR;
+
#include <poppack.h>
typedef struct __DEVICE_EXTENSION__
}DEVICE_EXTENSION, *PDEVICE_EXTENSION;
+typedef struct
+{
+ PDEVICE_EXTENSION DeviceExtension; /* device extension */
+ PDEVICE_OBJECT LowerDevice; /* lower device*/
+
+}FILTER_CONTEXT, *PFILTER_CONTEXT;
+
+typedef struct
+{
+ PDEVICE_EXTENSION DeviceExtension; /* device extension */
+ PDEVICE_OBJECT LowerDevice; /* lower device*/
+ LIST_ENTRY IrpListHead; /* irp list*/
+ LIST_ENTRY DoneIrpListHead; /* irp done list head */
+ KSPIN_LOCK IrpListLock; /* irp list lock*/
+ PUCHAR Buffer; /* iso buffer*/
+ ULONG BufferSize; /* iso buffer size */
+ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; /* interface descriptor */
+ WORK_QUEUE_ITEM CaptureWorkItem; /* work item */
+ PKSWORKER CaptureWorker; /* capture worker */
+ WORK_QUEUE_ITEM StarvationWorkItem; /* work item */
+ PKSWORKER StarvationWorker; /* capture worker */
+}PIN_CONTEXT, *PPIN_CONTEXT;
+
+typedef struct
+{
+ PUSB_COMMON_DESCRIPTOR Descriptor;
+ ULONG NodeCount;
+ ULONG Nodes[20];
+}NODE_CONTEXT, *PNODE_CONTEXT;
+
+
/* filter.c */
NTSTATUS
FreeFunction(
IN PVOID Item);
+VOID
+NTAPI
+CountTerminalUnits(
+ IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+ OUT PULONG NonStreamingTerminalDescriptorCount,
+ OUT PULONG TotalTerminalDescriptorCount);
+
/* usbaudio.c */
+NTSTATUS
+SubmitUrbSync(
+ IN PDEVICE_OBJECT Device,
+ IN PURB Urb);
+
NTSTATUS
NTAPI
USBAudioAddDevice(
_In_ DEVICE_POWER_STATE To,
_In_ DEVICE_POWER_STATE From
);
+
+/* pin.c*/
+
+NTSTATUS
+NTAPI
+UsbAudioPinDataIntersect(
+ _In_ PVOID Context,
+ _In_ PIRP Irp,
+ _In_ PKSP_PIN Pin,
+ _In_ PKSDATARANGE DataRange,
+ _In_ PKSDATARANGE MatchingDataRange,
+ _In_ ULONG DataBufferSize,
+ _Out_ PVOID Data,
+ _Out_ PULONG DataSize);
+
+NTSTATUS
+NTAPI
+UsbAudioCaptureComplete(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PVOID Context);
+
+NTSTATUS
+NTAPI
+USBAudioPinCreate(
+ _In_ PKSPIN Pin,
+ _In_ PIRP Irp);
+
+NTSTATUS
+NTAPI
+USBAudioPinClose(
+ _In_ PKSPIN Pin,
+ _In_ PIRP Irp);
+
+NTSTATUS
+NTAPI
+USBAudioPinProcess(
+ _In_ PKSPIN Pin);
+
+VOID
+NTAPI
+USBAudioPinReset(
+ _In_ PKSPIN Pin);
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDataFormat(
+ _In_ PKSPIN Pin,
+ _In_opt_ PKSDATAFORMAT OldFormat,
+ _In_opt_ PKSMULTIPLE_ITEM OldAttributeList,
+ _In_ const KSDATARANGE* DataRange,
+ _In_opt_ const KSATTRIBUTE_LIST* AttributeRange);
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDeviceState(
+ _In_ PKSPIN Pin,
+ _In_ KSSTATE ToState,
+ _In_ KSSTATE FromState);
+