2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/dispatcher.c
5 * PURPOSE: portcls generic dispatcher
6 * PROGRAMMER: Johannes Anderwald
10 #include "private.hpp"
14 Dispatch_fnDeviceIoControl(
15 PDEVICE_OBJECT DeviceObject
,
18 PIO_STACK_LOCATION IoStack
;
19 IIrpTarget
* IrpTarget
;
21 // get current irp stack
22 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
25 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
27 // let IrpTarget handle request
28 return IrpTarget
->DeviceIoControl(DeviceObject
, Irp
);
34 PDEVICE_OBJECT DeviceObject
,
37 PIO_STACK_LOCATION IoStack
;
38 IIrpTarget
* IrpTarget
;
40 // get current irp stack
41 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
44 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
47 // let IrpTarget handle request
48 return IrpTarget
->Read(DeviceObject
, Irp
);
54 PDEVICE_OBJECT DeviceObject
,
57 PIO_STACK_LOCATION IoStack
;
58 IIrpTarget
* IrpTarget
;
60 // get current irp stack
61 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
64 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
67 // let IrpTarget handle request
68 return IrpTarget
->Write(DeviceObject
, Irp
);
74 PDEVICE_OBJECT DeviceObject
,
77 PIO_STACK_LOCATION IoStack
;
78 IIrpTarget
* IrpTarget
;
80 // get current irp stack
81 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
84 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
87 // let IrpTarget handle request
88 return IrpTarget
->Flush(DeviceObject
, Irp
);
94 PDEVICE_OBJECT DeviceObject
,
97 PIO_STACK_LOCATION IoStack
;
98 IIrpTarget
* IrpTarget
;
100 // get current irp stack
101 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
104 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
107 // let IrpTarget handle request
108 return IrpTarget
->Close(DeviceObject
, Irp
);
113 Dispatch_fnQuerySecurity(
114 PDEVICE_OBJECT DeviceObject
,
117 PIO_STACK_LOCATION IoStack
;
118 IIrpTarget
* IrpTarget
;
120 // get current irp stack
121 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
124 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
127 // let IrpTarget handle request
128 return IrpTarget
->QuerySecurity(DeviceObject
, Irp
);
133 Dispatch_fnSetSecurity(
134 PDEVICE_OBJECT DeviceObject
,
137 PIO_STACK_LOCATION IoStack
;
138 IIrpTarget
* IrpTarget
;
140 // get current irp stack
141 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
144 IrpTarget
= (IIrpTarget
*)IoStack
->FileObject
->FsContext2
;
147 // let IrpTarget handle request
148 return IrpTarget
->SetSecurity(DeviceObject
, Irp
);
153 Dispatch_fnFastDeviceIoControl(
154 PFILE_OBJECT FileObject
,
157 ULONG InputBufferLength
,
159 ULONG OutputBufferLength
,
161 PIO_STATUS_BLOCK IoStatus
,
162 PDEVICE_OBJECT DeviceObject
)
164 IIrpTarget
* IrpTarget
;
167 IrpTarget
= (IIrpTarget
*)FileObject
->FsContext2
;
169 // let IrpTarget handle request
170 return IrpTarget
->FastDeviceIoControl(FileObject
, Wait
, InputBuffer
, InputBufferLength
, OutputBuffer
, OutputBufferLength
, IoControlCode
, IoStatus
, DeviceObject
);
177 PFILE_OBJECT FileObject
,
178 PLARGE_INTEGER FileOffset
,
183 PIO_STATUS_BLOCK IoStatus
,
184 PDEVICE_OBJECT DeviceObject
)
186 IIrpTarget
* IrpTarget
;
189 IrpTarget
= (IIrpTarget
*)FileObject
->FsContext2
;
191 // let IrpTarget handle request
192 return IrpTarget
->FastRead(FileObject
, FileOffset
, Length
, Wait
, LockKey
, Buffer
, IoStatus
, DeviceObject
);
197 Dispatch_fnFastWrite(
198 PFILE_OBJECT FileObject
,
199 PLARGE_INTEGER FileOffset
,
204 PIO_STATUS_BLOCK IoStatus
,
205 PDEVICE_OBJECT DeviceObject
)
207 IIrpTarget
* IrpTarget
;
210 IrpTarget
= (IIrpTarget
*)FileObject
->FsContext2
;
211 // let IrpTarget handle request
212 return IrpTarget
->FastWrite(FileObject
, FileOffset
, Length
, Wait
, LockKey
, Buffer
, IoStatus
, DeviceObject
);
215 static KSDISPATCH_TABLE DispatchTable
=
217 Dispatch_fnDeviceIoControl
,
222 Dispatch_fnQuerySecurity
,
223 Dispatch_fnSetSecurity
,
224 Dispatch_fnFastDeviceIoControl
,
226 Dispatch_fnFastWrite
,
234 IN IIrpTarget
* Target
,
235 IN ULONG CreateItemCount
,
236 IN PKSOBJECT_CREATE_ITEM CreateItem
)
239 KSOBJECT_HEADER ObjectHeader
;
240 PIO_STACK_LOCATION IoStack
;
242 // get current irp stack location
243 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
245 IoStack
->FileObject
->FsContext2
= (PVOID
)Target
;
247 Status
= KsAllocateObjectHeader(&ObjectHeader
, CreateItemCount
, CreateItem
, Irp
, &DispatchTable
);
248 DPRINT("KsAllocateObjectHeader result %x\n", Status
);