5 HANDLE PinHandle
; // handle to audio irp pin
6 ULONG References
; // number of clients having a reference to this audio irp pin
11 LIST_ENTRY Entry
; // device entry for KsAudioDeviceList
12 UNICODE_STRING DeviceName
; // symbolic link of audio device
14 HANDLE Handle
; // handle to audio device
15 PFILE_OBJECT FileObject
; // file objecto to audio device
17 //PIN_INFO * Pins; // array of PIN_INFO
18 }KSAUDIO_DEVICE_ENTRY
, *PKSAUDIO_DEVICE_ENTRY
;
22 KSDEVICE_HEADER KsDeviceHeader
; // ks streaming header - must always be first item in device extension
23 PDEVICE_OBJECT PhysicalDeviceObject
; // pdo
24 PDEVICE_OBJECT NextDeviceObject
; // lower device object
25 ULONG NumberOfKsAudioDevices
; // number of audio devices
27 LIST_ENTRY KsAudioDeviceList
; // audio device list
28 PVOID KsAudioNotificationEntry
; // ks audio notification hook
29 PVOID EchoCancelNotificationEntry
; // ks echo cancel notification hook
30 KSPIN_LOCK Lock
; // audio device list mutex
32 PFILE_OBJECT KMixerFileObject
; // mixer file object
33 HANDLE KMixerHandle
; // mixer file handle
35 }SYSAUDIODEVEXT
, *PSYSAUDIODEVEXT
;
37 // struct DISPATCH_CONTEXT
39 // This structure is used to dispatch read / write / device io requests
40 // It is stored in the file object FsContext2 member
41 // Note: FsContext member is reserved for ks object header
45 KSOBJECT_HEADER ObjectHeader
; // pin object header
46 HANDLE Handle
; // audio irp pin handle
47 ULONG PinId
; // pin id of device
48 PKSAUDIO_DEVICE_ENTRY AudioEntry
; // pointer to audio device entry
50 HANDLE hMixerPin
; // handle to mixer pin
51 }DISPATCH_CONTEXT
, *PDISPATCH_CONTEXT
;
54 SysAudioAllocateDeviceHeader(
55 IN SYSAUDIODEVEXT
*DeviceExtension
);
58 SysAudioRegisterDeviceInterfaces(
59 IN PDEVICE_OBJECT DeviceObject
);
62 SysAudioRegisterNotifications(
63 IN PDRIVER_OBJECT DriverObject
,
64 IN PDEVICE_OBJECT DeviceObject
);
67 SysAudioHandleProperty(
68 PDEVICE_OBJECT DeviceObject
,
73 IN SYSAUDIODEVEXT
*DeviceExtension
);
77 IN PUNICODE_STRING DeviceName
,
79 IN PFILE_OBJECT
* FileObjectOut
);
88 DispatchCreateSysAudioPin(
89 IN PDEVICE_OBJECT DeviceObject
,
94 PSYSAUDIODEVEXT DeviceExtension
,
99 PKSAUDIO_DEVICE_ENTRY Entry
,
100 PKSPIN_CINSTANCES PinInstances
,
101 PKSPIN_CONNECT PinConnect
);
104 ComputeCompatibleFormat(
105 IN PKSAUDIO_DEVICE_ENTRY Entry
,
107 IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat
,
108 OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat
);
112 IN POOL_TYPE PoolType
,
113 IN SIZE_T NumberOfBytes
);