- Remove dead code
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / dispatcher.cpp
1 /*
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
7 */
8
9
10 #include "private.hpp"
11
12 NTSTATUS
13 NTAPI
14 Dispatch_fnDeviceIoControl(
15 PDEVICE_OBJECT DeviceObject,
16 PIRP Irp)
17 {
18 PIO_STACK_LOCATION IoStack;
19 IIrpTarget * IrpTarget;
20
21 // get current irp stack
22 IoStack = IoGetCurrentIrpStackLocation(Irp);
23
24 // access IrpTarget
25 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
26
27 // let IrpTarget handle request
28 return IrpTarget->DeviceIoControl(DeviceObject, Irp);
29 }
30
31 NTSTATUS
32 NTAPI
33 Dispatch_fnRead(
34 PDEVICE_OBJECT DeviceObject,
35 PIRP Irp)
36 {
37 PIO_STACK_LOCATION IoStack;
38 IIrpTarget * IrpTarget;
39
40 // get current irp stack
41 IoStack = IoGetCurrentIrpStackLocation(Irp);
42
43 // access IrpTarget
44 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
45
46
47 // let IrpTarget handle request
48 return IrpTarget->Read(DeviceObject, Irp);
49 }
50
51 NTSTATUS
52 NTAPI
53 Dispatch_fnWrite(
54 PDEVICE_OBJECT DeviceObject,
55 PIRP Irp)
56 {
57 PIO_STACK_LOCATION IoStack;
58 IIrpTarget * IrpTarget;
59
60 // get current irp stack
61 IoStack = IoGetCurrentIrpStackLocation(Irp);
62
63 // access IrpTarget
64 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
65
66
67 // let IrpTarget handle request
68 return IrpTarget->Write(DeviceObject, Irp);
69 }
70
71 NTSTATUS
72 NTAPI
73 Dispatch_fnFlush(
74 PDEVICE_OBJECT DeviceObject,
75 PIRP Irp)
76 {
77 PIO_STACK_LOCATION IoStack;
78 IIrpTarget * IrpTarget;
79
80 // get current irp stack
81 IoStack = IoGetCurrentIrpStackLocation(Irp);
82
83 // access IrpTarget
84 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
85
86
87 // let IrpTarget handle request
88 return IrpTarget->Flush(DeviceObject, Irp);
89 }
90
91 NTSTATUS
92 NTAPI
93 Dispatch_fnClose(
94 PDEVICE_OBJECT DeviceObject,
95 PIRP Irp)
96 {
97 PIO_STACK_LOCATION IoStack;
98 IIrpTarget * IrpTarget;
99
100 // get current irp stack
101 IoStack = IoGetCurrentIrpStackLocation(Irp);
102
103 // access IrpTarget
104 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
105
106
107 // let IrpTarget handle request
108 return IrpTarget->Close(DeviceObject, Irp);
109 }
110
111 NTSTATUS
112 NTAPI
113 Dispatch_fnQuerySecurity(
114 PDEVICE_OBJECT DeviceObject,
115 PIRP Irp)
116 {
117 PIO_STACK_LOCATION IoStack;
118 IIrpTarget * IrpTarget;
119
120 // get current irp stack
121 IoStack = IoGetCurrentIrpStackLocation(Irp);
122
123 // access IrpTarget
124 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
125
126
127 // let IrpTarget handle request
128 return IrpTarget->QuerySecurity(DeviceObject, Irp);
129 }
130
131 NTSTATUS
132 NTAPI
133 Dispatch_fnSetSecurity(
134 PDEVICE_OBJECT DeviceObject,
135 PIRP Irp)
136 {
137 PIO_STACK_LOCATION IoStack;
138 IIrpTarget * IrpTarget;
139
140 // get current irp stack
141 IoStack = IoGetCurrentIrpStackLocation(Irp);
142
143 // access IrpTarget
144 IrpTarget = (IIrpTarget *)IoStack->FileObject->FsContext2;
145
146
147 // let IrpTarget handle request
148 return IrpTarget->SetSecurity(DeviceObject, Irp);
149 }
150
151 BOOLEAN
152 NTAPI
153 Dispatch_fnFastDeviceIoControl(
154 PFILE_OBJECT FileObject,
155 BOOLEAN Wait,
156 PVOID InputBuffer,
157 ULONG InputBufferLength,
158 PVOID OutputBuffer,
159 ULONG OutputBufferLength,
160 ULONG IoControlCode,
161 PIO_STATUS_BLOCK IoStatus,
162 PDEVICE_OBJECT DeviceObject)
163 {
164 IIrpTarget * IrpTarget;
165
166 // access IrpTarget
167 IrpTarget = (IIrpTarget *)FileObject->FsContext2;
168
169 // let IrpTarget handle request
170 return IrpTarget->FastDeviceIoControl(FileObject, Wait, InputBuffer, InputBufferLength, OutputBuffer, OutputBufferLength, IoControlCode, IoStatus, DeviceObject);
171 }
172
173
174 BOOLEAN
175 NTAPI
176 Dispatch_fnFastRead(
177 PFILE_OBJECT FileObject,
178 PLARGE_INTEGER FileOffset,
179 ULONG Length,
180 BOOLEAN Wait,
181 ULONG LockKey,
182 PVOID Buffer,
183 PIO_STATUS_BLOCK IoStatus,
184 PDEVICE_OBJECT DeviceObject)
185 {
186 IIrpTarget * IrpTarget;
187
188 // access IrpTarget
189 IrpTarget = (IIrpTarget *)FileObject->FsContext2;
190
191 // let IrpTarget handle request
192 return IrpTarget->FastRead(FileObject, FileOffset, Length, Wait, LockKey, Buffer, IoStatus, DeviceObject);
193 }
194
195 BOOLEAN
196 NTAPI
197 Dispatch_fnFastWrite(
198 PFILE_OBJECT FileObject,
199 PLARGE_INTEGER FileOffset,
200 ULONG Length,
201 BOOLEAN Wait,
202 ULONG LockKey,
203 PVOID Buffer,
204 PIO_STATUS_BLOCK IoStatus,
205 PDEVICE_OBJECT DeviceObject)
206 {
207 IIrpTarget * IrpTarget;
208
209 // access IrpTarget
210 IrpTarget = (IIrpTarget *)FileObject->FsContext2;
211 // let IrpTarget handle request
212 return IrpTarget->FastWrite(FileObject, FileOffset, Length, Wait, LockKey, Buffer, IoStatus, DeviceObject);
213 }
214
215 static KSDISPATCH_TABLE DispatchTable =
216 {
217 Dispatch_fnDeviceIoControl,
218 Dispatch_fnRead,
219 Dispatch_fnWrite,
220 Dispatch_fnFlush,
221 Dispatch_fnClose,
222 Dispatch_fnQuerySecurity,
223 Dispatch_fnSetSecurity,
224 Dispatch_fnFastDeviceIoControl,
225 Dispatch_fnFastRead,
226 Dispatch_fnFastWrite,
227 };
228
229
230 NTSTATUS
231 NTAPI
232 NewDispatchObject(
233 IN PIRP Irp,
234 IN IIrpTarget * Target,
235 IN ULONG CreateItemCount,
236 IN PKSOBJECT_CREATE_ITEM CreateItem)
237 {
238 NTSTATUS Status;
239 KSOBJECT_HEADER ObjectHeader;
240 PIO_STACK_LOCATION IoStack;
241
242 // get current irp stack location
243 IoStack = IoGetCurrentIrpStackLocation(Irp);
244
245 IoStack->FileObject->FsContext2 = (PVOID)Target;
246
247 Status = KsAllocateObjectHeader(&ObjectHeader, CreateItemCount, CreateItem, Irp, &DispatchTable);
248 DPRINT("KsAllocateObjectHeader result %x\n", Status);
249 return Status;
250 }
251