update for HEAD-2003091401
[reactos.git] / ntoskrnl / fs / mdl.c
1 /* $Id$
2  *
3  * reactos/ntoskrnl/fs/mdl.c
4  *
5  */
6 #include <ntos.h>
7 #include <internal/cc.h>
8 #include <ddk/ntifs.h>
9
10 /**********************************************************************
11  * NAME                                                 EXPORTED
12  *      FsRtlMdlRead@24
13  *
14  * DESCRIPTION
15  *      
16  * ARGUMENTS
17  *
18  * RETURN VALUE
19  *
20  * @unimplemented
21  */
22 BOOLEAN
23 STDCALL
24 FsRtlMdlRead (
25         IN      PFILE_OBJECT            FileObject,
26         IN      PLARGE_INTEGER          FileOffset,
27         IN      ULONG                   Length,
28         IN      ULONG                   LockKey,
29         OUT     PMDL                    *MdlChain,
30         OUT     PIO_STATUS_BLOCK        IoStatus
31         )
32 {
33         return FALSE; /* FIXME: call FsRtlMdlReadDev ? */
34 }
35
36
37 /**********************************************************************
38  * NAME                                                 EXPORTED
39  *      FsRtlMdlReadComplete@8
40  *
41  * DESCRIPTION
42  *      
43  * ARGUMENTS
44  *
45  * RETURN VALUE
46  *
47  * @unimplemented
48  */
49 BOOLEAN STDCALL
50 FsRtlMdlReadComplete(IN PFILE_OBJECT FileObject,
51                      IN OUT PMDL Mdl)
52 {
53         PDEVICE_OBJECT  DeviceObject [2] = {NULL};
54         PDRIVER_OBJECT  DriverObject = NULL;
55
56         /*
57          * Try fast I/O first
58          */
59         DeviceObject [0] = IoGetRelatedDeviceObject (FileObject);
60         DriverObject = DeviceObject [0]->DriverObject;
61         if (NULL != DriverObject->FastIoDispatch)
62         {
63 #if 0
64                 if (IRP_MJ_READ <= DriverObject->FastIoDispatch->Count)
65                 {
66                         return FALSE;
67                 }
68                 if (NULL == DriverObject->FastIoDispatch->Dispatch [IRP_MJ_READ])
69                 {
70                         return FALSE;
71                 }
72                 return DriverObject->FastIoDispatch->Dispatch
73                         [IRP_MJ_READ] (
74                                 Mdl,
75                                 NULL /* FIXME: how to get the IRP? */
76                                 );
77 #endif
78         }
79         /*
80          * Default I/O path
81          */
82         DeviceObject [1] = IoGetBaseFileSystemDeviceObject (FileObject);
83         /*
84          * Did IoGetBaseFileSystemDeviceObject ()
85          * returned the same device
86          * IoGetRelatedDeviceObject () returned?
87          */
88         if (DeviceObject [1] != DeviceObject [0])
89         {
90 #if 0
91                 DriverObject = DeviceObject [1]->DriverObject;
92                 if (NULL != DriverObject->FastIoDispatch)
93                 {
94                         /* 
95                          * Check if the driver provides
96                          * IRP_MJ_READ.
97                          */
98                         if (IRP_MJ_READ <= DriverObject->FastIoDispatch->Count)
99                         {
100                                 if (NULL == DriverObject->FastIoDispatch->Dispatch [IRP_MJ_READ])
101                                 {
102                                         return FALSE;
103                                 }
104                         }
105                 }
106 #endif
107                 DeviceObject [0] = DeviceObject [1];
108         }
109         return FsRtlMdlReadCompleteDev (
110                         FileObject,
111                         Mdl,
112                         DeviceObject [0]
113                         );
114 }
115
116
117 /**********************************************************************
118  * NAME                                                 EXPORTED
119  *      FsRtlMdlReadCompleteDev@12
120  *
121  * DESCRIPTION
122  *      
123  * ARGUMENTS
124  *
125  * RETURN VALUE
126  *
127  * NOTE
128  *      From Bo Branten's ntifs.h v13.
129  *      (CcMdlReadCompleteDev declared in internal/cc.h)
130  *
131  * @implemented
132  */
133 BOOLEAN
134 STDCALL
135 FsRtlMdlReadCompleteDev (
136         IN      PFILE_OBJECT    FileObject,
137         IN      PMDL            MdlChain,
138         IN      PDEVICE_OBJECT  DeviceObject
139         )
140 {
141         FileObject = FileObject; /* unused parameter */
142         CcMdlReadCompleteDev (MdlChain, DeviceObject);
143         return TRUE;
144 }
145
146
147 /**********************************************************************
148  * NAME                                                 EXPORTED
149  *      FsRtlMdlReadDev@28
150  *
151  * DESCRIPTION
152  *      
153  * ARGUMENTS
154  *
155  * RETURN VALUE
156  *
157  * @unimplemented
158  */
159 BOOLEAN
160 STDCALL
161 FsRtlMdlReadDev (
162         IN      PFILE_OBJECT            FileObject,
163         IN      PLARGE_INTEGER          FileOffset,
164         IN      ULONG                   Length,
165         IN      ULONG                   LockKey,
166         OUT     PMDL                    *MdlChain,
167         OUT     PIO_STATUS_BLOCK        IoStatus,
168         IN      PDEVICE_OBJECT          DeviceObject
169         )
170 {
171         return FALSE;
172 }
173
174
175 /**********************************************************************
176  * NAME                                                 EXPORTED
177  *      FsRtlMdlWriteComplete@12
178  *
179  * DESCRIPTION
180  *      
181  * ARGUMENTS
182  *
183  * RETURN VALUE
184  *
185  * @unimplemented
186  */
187 BOOLEAN
188 STDCALL
189 FsRtlMdlWriteComplete (
190         IN      PFILE_OBJECT    FileObject,
191         IN      PLARGE_INTEGER  FileOffset,
192         IN      PMDL            MdlChain
193         )
194 {
195         return FALSE; /* FIXME: call FsRtlMdlWriteCompleteDev ? */
196 }
197
198
199 /**********************************************************************
200  * NAME                                                 EXPORTED
201  *      FsRtlMdlWriteCompleteDev@16
202  *
203  * DESCRIPTION
204  *      
205  * ARGUMENTS
206  *
207  * RETURN VALUE
208  *
209  * @unimplemented
210  */
211 BOOLEAN
212 STDCALL
213 FsRtlMdlWriteCompleteDev (
214         IN      PFILE_OBJECT    FileObject,
215         IN      PLARGE_INTEGER  FileOffset,
216         IN      PMDL            MdlChain,
217         IN      PDEVICE_OBJECT  DeviceObject
218         )
219 {
220         return FALSE;
221 }
222
223
224 /**********************************************************************
225  * NAME                                                 EXPORTED
226  *      FsRtlPrepareMdlWrite@24
227  *
228  * DESCRIPTION
229  *      
230  * ARGUMENTS
231  *
232  * RETURN VALUE
233  *
234  * @unimplemented
235  */
236 BOOLEAN
237 STDCALL
238 FsRtlPrepareMdlWrite (
239         IN      PFILE_OBJECT            FileObject,
240         IN      PLARGE_INTEGER          FileOffset,
241         IN      ULONG                   Length,
242         IN      ULONG                   LockKey,
243         OUT     PMDL                    *MdlChain,
244         OUT     PIO_STATUS_BLOCK        IoStatus
245         )
246 {
247         return FALSE; /* call FsRtlPrepareMdlWriteDev ? */
248 }
249
250
251 /**********************************************************************
252  * NAME                                                 EXPORTED
253  *      FsRtlPrepareMdlWriteDev@28
254  *
255  * DESCRIPTION
256  *      
257  * ARGUMENTS
258  *
259  * RETURN VALUE
260  *
261  * @unimplemented
262  */
263 BOOLEAN
264 STDCALL
265 FsRtlPrepareMdlWriteDev (
266         IN      PFILE_OBJECT            FileObject,
267         IN      PLARGE_INTEGER          FileOffset,
268         IN      ULONG                   Length,
269         IN      ULONG                   LockKey,
270         OUT     PMDL                    *MdlChain,
271         OUT     PIO_STATUS_BLOCK        IoStatus,
272         IN      PDEVICE_OBJECT          DeviceObject
273         )
274 {
275         return FALSE;
276 }
277
278
279 /* EOF */