15 HANDLE PinHandle
; // handle to audio irp pin
16 ULONG References
; // number of clients having a reference to this audio irp pin
21 LIST_ENTRY Entry
; // device entry for KsAudioDeviceList
22 UNICODE_STRING DeviceName
; // symbolic link of audio device
24 HANDLE Handle
; // handle to audio device
25 PFILE_OBJECT FileObject
; // file objecto to audio device
27 //PIN_INFO * Pins; // array of PIN_INFO
28 }KSAUDIO_DEVICE_ENTRY
, *PKSAUDIO_DEVICE_ENTRY
;
32 KSDEVICE_HEADER KsDeviceHeader
; // ks streaming header - must always be first item in device extension
33 PDEVICE_OBJECT PhysicalDeviceObject
; // pdo
34 PDEVICE_OBJECT NextDeviceObject
; // lower device object
35 ULONG NumberOfKsAudioDevices
; // number of audio devices
37 LIST_ENTRY KsAudioDeviceList
; // audio device list
38 PVOID KsAudioNotificationEntry
; // ks audio notification hook
39 PVOID EchoCancelNotificationEntry
; // ks echo cancel notification hook
40 KSPIN_LOCK Lock
; // audio device list mutex
42 PFILE_OBJECT KMixerFileObject
; // mixer file object
43 HANDLE KMixerHandle
; // mixer file handle
45 }SYSAUDIODEVEXT
, *PSYSAUDIODEVEXT
;
47 // struct DISPATCH_CONTEXT
49 // This structure is used to dispatch read / write / device io requests
50 // It is stored in the file object FsContext2 member
51 // Note: FsContext member is reserved for ks object header
55 KSOBJECT_HEADER ObjectHeader
; // pin object header
56 HANDLE Handle
; // audio irp pin handle
57 ULONG PinId
; // pin id of device
58 PKSAUDIO_DEVICE_ENTRY AudioEntry
; // pointer to audio device entry
60 HANDLE hMixerPin
; // handle to mixer pin
61 }DISPATCH_CONTEXT
, *PDISPATCH_CONTEXT
;
64 SysAudioAllocateDeviceHeader(
65 IN SYSAUDIODEVEXT
*DeviceExtension
);
68 SysAudioRegisterDeviceInterfaces(
69 IN PDEVICE_OBJECT DeviceObject
);
72 SysAudioRegisterNotifications(
73 IN PDRIVER_OBJECT DriverObject
,
74 IN PDEVICE_OBJECT DeviceObject
);
77 SysAudioHandleProperty(
78 PDEVICE_OBJECT DeviceObject
,
83 IN SYSAUDIODEVEXT
*DeviceExtension
);
87 IN PUNICODE_STRING DeviceName
,
89 IN PFILE_OBJECT
* FileObjectOut
);
98 DispatchCreateSysAudioPin(
99 IN PDEVICE_OBJECT DeviceObject
,
104 PSYSAUDIODEVEXT DeviceExtension
,
109 PKSAUDIO_DEVICE_ENTRY Entry
,
110 PKSPIN_CINSTANCES PinInstances
,
111 PKSPIN_CONNECT PinConnect
);
114 ComputeCompatibleFormat(
115 IN PKSAUDIO_DEVICE_ENTRY Entry
,
117 IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat
,
118 OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat
);
122 IN POOL_TYPE PoolType
,
123 IN SIZE_T NumberOfBytes
);