2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/sysaudio/deviface.c
5 * PURPOSE: System Audio graph builder
6 * PROGRAMMER: Johannes Anderwald
21 Pin_fnDeviceIoControl(
22 PDEVICE_OBJECT DeviceObject
,
25 PDISPATCH_CONTEXT Context
;
28 PIO_STACK_LOCATION IoStack
;
30 DPRINT1("Pin_fnDeviceIoControl called DeviceObject %p Irp %p\n", DeviceObject
);
32 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
34 Context
= (PDISPATCH_CONTEXT
)IoStack
->FileObject
->FsContext2
;
37 Status
= KsSynchronousIoControlDevice(Context
->FileObject
, KernelMode
, IoStack
->Parameters
.DeviceIoControl
.IoControlCode
,
38 IoStack
->Parameters
.DeviceIoControl
.Type3InputBuffer
,
39 IoStack
->Parameters
.DeviceIoControl
.InputBufferLength
,
41 IoStack
->Parameters
.DeviceIoControl
.OutputBufferLength
,
44 DPRINT1("Status %x\n", Status
);
46 Irp
->IoStatus
.Information
= BytesReturned
;
47 Irp
->IoStatus
.Status
= Status
;
48 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
55 PDEVICE_OBJECT DeviceObject
,
58 DPRINT1("Pin_fnRead called DeviceObject %p Irp %p\n", DeviceObject
);
60 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
61 Irp
->IoStatus
.Information
= 0;
62 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
63 return STATUS_UNSUCCESSFUL
;
68 PinWriteCompletionRoutine(
69 IN PDEVICE_OBJECT DeviceObject
,
73 PIRP CIrp
= (PIRP
)Context
;
75 CIrp
->IoStatus
.Status
= STATUS_SUCCESS
;
76 CIrp
->IoStatus
.Information
= 0;
77 IoCompleteRequest(CIrp
, IO_NO_INCREMENT
);
78 return STATUS_SUCCESS
;
84 PDEVICE_OBJECT DeviceObject
,
87 PDISPATCH_CONTEXT Context
;
88 PIO_STACK_LOCATION IoStack
;
92 DPRINT1("Pin_fnWrite called DeviceObject %p Irp %p\n", DeviceObject
);
94 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
96 Context
= (PDISPATCH_CONTEXT
)IoStack
->FileObject
->FsContext2
;
99 Status
= KsSynchronousIoControlDevice(Context
->FileObject
, KernelMode
, IOCTL_KS_WRITE_STREAM
,
100 MmGetMdlVirtualAddress(Irp
->MdlAddress
),
101 IoStack
->Parameters
.Write
.Length
,
106 Irp
->IoStatus
.Information
= BytesReturned
;
107 Irp
->IoStatus
.Status
= Status
;
108 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
115 PDEVICE_OBJECT DeviceObject
,
118 DPRINT1("Pin_fnFlush called DeviceObject %p Irp %p\n", DeviceObject
);
120 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
121 Irp
->IoStatus
.Information
= 0;
122 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
123 return STATUS_UNSUCCESSFUL
;
129 PDEVICE_OBJECT DeviceObject
,
132 DPRINT1("Pin_fnClose called DeviceObject %p Irp %p\n", DeviceObject
);
134 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
135 Irp
->IoStatus
.Information
= 0;
136 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
137 return STATUS_SUCCESS
;
143 PDEVICE_OBJECT DeviceObject
,
146 DPRINT1("Pin_fnQuerySecurity called DeviceObject %p Irp %p\n", DeviceObject
);
148 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
149 Irp
->IoStatus
.Information
= 0;
150 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
151 return STATUS_UNSUCCESSFUL
;
157 PDEVICE_OBJECT DeviceObject
,
161 DPRINT1("Pin_fnSetSecurity called DeviceObject %p Irp %p\n", DeviceObject
);
163 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
164 Irp
->IoStatus
.Information
= 0;
165 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
166 return STATUS_UNSUCCESSFUL
;
171 Pin_fnFastDeviceIoControl(
172 PFILE_OBJECT FileObject
,
175 ULONG InputBufferLength
,
177 ULONG OutputBufferLength
,
179 PIO_STATUS_BLOCK IoStatus
,
180 PDEVICE_OBJECT DeviceObject
)
182 DPRINT1("Pin_fnFastDeviceIoControl called DeviceObject %p Irp %p\n", DeviceObject
);
192 PFILE_OBJECT FileObject
,
193 PLARGE_INTEGER FileOffset
,
198 PIO_STATUS_BLOCK IoStatus
,
199 PDEVICE_OBJECT DeviceObject
)
201 DPRINT1("Pin_fnFastRead called DeviceObject %p Irp %p\n", DeviceObject
);
210 PFILE_OBJECT FileObject
,
211 PLARGE_INTEGER FileOffset
,
216 PIO_STATUS_BLOCK IoStatus
,
217 PDEVICE_OBJECT DeviceObject
)
219 PDISPATCH_CONTEXT Context
;
222 //DPRINT1("Pin_fnFastWrite called DeviceObject %p Irp %p\n", DeviceObject);
224 Context
= (PDISPATCH_CONTEXT
)FileObject
->FsContext2
;
227 if (Context
->hMixerPin
&& Context
->MixerFileObject
)
229 Status
= KsStreamIo(Context
->MixerFileObject
, NULL
, NULL
, NULL
, NULL
, 0, IoStatus
, Buffer
, Length
, KSSTREAM_WRITE
, KernelMode
);
230 if (!NT_SUCCESS(Status
))
232 DPRINT1("Mixing stream failed with %lx\n", Status
);
237 Status
= KsStreamIo(Context
->FileObject
, NULL
, NULL
, NULL
, NULL
, 0, IoStatus
, Buffer
, Length
, KSSTREAM_WRITE
, KernelMode
);
238 if (Status
== STATUS_SUCCESS
)
244 static KSDISPATCH_TABLE PinTable
=
246 Pin_fnDeviceIoControl
,
253 Pin_fnFastDeviceIoControl
,
263 KSOBJECT_HEADER ObjectHeader
;
265 /* allocate object header */
266 Status
= KsAllocateObjectHeader(&ObjectHeader
, 0, NULL
, Irp
, &PinTable
);