13 HANDLE PinHandle
; // handle to audio irp pin
14 ULONG References
; // number of clients having a reference to this audio irp pin
19 LIST_ENTRY Entry
; // device entry for KsAudioDeviceList
20 UNICODE_STRING DeviceName
; // symbolic link of audio device
22 HANDLE Handle
; // handle to audio device
23 PFILE_OBJECT FileObject
; // file objecto to audio device
25 //PIN_INFO * Pins; // array of PIN_INFO
26 }KSAUDIO_DEVICE_ENTRY
, *PKSAUDIO_DEVICE_ENTRY
;
30 KSDEVICE_HEADER KsDeviceHeader
; // ks streaming header - must always be first item in device extension
31 PDEVICE_OBJECT PhysicalDeviceObject
; // pdo
32 PDEVICE_OBJECT NextDeviceObject
; // lower device object
33 ULONG NumberOfKsAudioDevices
; // number of audio devices
35 LIST_ENTRY KsAudioDeviceList
; // audio device list
36 PVOID KsAudioNotificationEntry
; // ks audio notification hook
37 PVOID EchoCancelNotificationEntry
; // ks echo cancel notification hook
38 KSPIN_LOCK Lock
; // audio device list mutex
40 PFILE_OBJECT KMixerFileObject
; // mixer file object
41 HANDLE KMixerHandle
; // mixer file handle
43 }SYSAUDIODEVEXT
, *PSYSAUDIODEVEXT
;
45 // struct DISPATCH_CONTEXT
47 // This structure is used to dispatch read / write / device io requests
48 // It is stored in the file object FsContext2 member
49 // Note: FsContext member is reserved for ks object header
53 KSOBJECT_HEADER ObjectHeader
; // pin object header
54 HANDLE Handle
; // audio irp pin handle
55 ULONG PinId
; // pin id of device
56 PKSAUDIO_DEVICE_ENTRY AudioEntry
; // pointer to audio device entry
58 HANDLE hMixerPin
; // handle to mixer pin
59 }DISPATCH_CONTEXT
, *PDISPATCH_CONTEXT
;
62 SysAudioAllocateDeviceHeader(
63 IN SYSAUDIODEVEXT
*DeviceExtension
);
66 SysAudioRegisterDeviceInterfaces(
67 IN PDEVICE_OBJECT DeviceObject
);
70 SysAudioRegisterNotifications(
71 IN PDRIVER_OBJECT DriverObject
,
72 IN PDEVICE_OBJECT DeviceObject
);
75 SysAudioHandleProperty(
76 PDEVICE_OBJECT DeviceObject
,
81 IN SYSAUDIODEVEXT
*DeviceExtension
);
85 IN PUNICODE_STRING DeviceName
,
87 IN PFILE_OBJECT
* FileObjectOut
);
96 DispatchCreateSysAudioPin(
97 IN PDEVICE_OBJECT DeviceObject
,
102 PSYSAUDIODEVEXT DeviceExtension
,
107 PKSAUDIO_DEVICE_ENTRY Entry
,
108 PKSPIN_CINSTANCES PinInstances
,
109 PKSPIN_CONNECT PinConnect
);
112 ComputeCompatibleFormat(
113 IN PKSAUDIO_DEVICE_ENTRY Entry
,
115 IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat
,
116 OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat
);
120 IN POOL_TYPE PoolType
,
121 IN SIZE_T NumberOfBytes
);