Sunc with trunk revision 58971.
[reactos.git] / ntoskrnl / cc / mdl.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/cc/fs.c
5 * PURPOSE: Implements MDL Cache Manager Functions
6 *
7 * PROGRAMMERS: Alex Ionescu
8 */
9
10 /* INCLUDES ******************************************************************/
11
12 #include <ntoskrnl.h>
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FUNCTIONS *****************************************************************/
17
18 /*
19 * @implemented
20 */
21 VOID
22 NTAPI
23 CcMdlRead (
24 IN PFILE_OBJECT FileObject,
25 IN PLARGE_INTEGER FileOffset,
26 IN ULONG Length,
27 OUT PMDL * MdlChain,
28 OUT PIO_STATUS_BLOCK IoStatus
29 )
30 {
31 UNIMPLEMENTED;
32 }
33
34 /*
35 * NAME INTERNAL
36 * CcMdlReadComplete2@8
37 *
38 * DESCRIPTION
39 *
40 * ARGUMENTS
41 * MdlChain
42 * DeviceObject
43 *
44 * RETURN VALUE
45 * None.
46 *
47 * NOTE
48 * Used by CcMdlReadComplete@8 and FsRtl
49 *
50 */
51 VOID
52 NTAPI
53 CcMdlReadComplete2 (
54 IN PMDL MemoryDescriptorList,
55 IN PFILE_OBJECT FileObject)
56 {
57 PMDL Mdl;
58
59 /* Free MDLs */
60 while ((Mdl = MemoryDescriptorList))
61 {
62 MemoryDescriptorList = Mdl->Next;
63 MmUnlockPages(Mdl);
64 IoFreeMdl(Mdl);
65 }
66 }
67
68 /*
69 * NAME EXPORTED
70 * CcMdlReadComplete@8
71 *
72 * DESCRIPTION
73 *
74 * ARGUMENTS
75 *
76 * RETURN VALUE
77 * None.
78 *
79 * NOTE
80 * From Bo Branten's ntifs.h v13.
81 *
82 * @implemented
83 */
84 VOID
85 NTAPI
86 CcMdlReadComplete (
87 IN PFILE_OBJECT FileObject,
88 IN PMDL MdlChain)
89 {
90 PDEVICE_OBJECT DeviceObject = NULL;
91 PFAST_IO_DISPATCH FastDispatch;
92
93 /* Get Fast Dispatch Data */
94 DeviceObject = IoGetRelatedDeviceObject(FileObject);
95 FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
96
97 /* Check if we support Fast Calls, and check this one */
98 if (FastDispatch && FastDispatch->MdlReadComplete)
99 {
100 /* Use the fast path */
101 FastDispatch->MdlReadComplete(FileObject,
102 MdlChain,
103 DeviceObject);
104 }
105
106 /* Use slow path */
107 CcMdlReadComplete2(MdlChain, FileObject);
108 }
109
110 /*
111 * @implemented
112 */
113 VOID
114 NTAPI
115 CcMdlWriteComplete (
116 IN PFILE_OBJECT FileObject,
117 IN PLARGE_INTEGER FileOffset,
118 IN PMDL MdlChain)
119 {
120 PDEVICE_OBJECT DeviceObject = NULL;
121 PFAST_IO_DISPATCH FastDispatch;
122
123 /* Get Fast Dispatch Data */
124 DeviceObject = IoGetRelatedDeviceObject(FileObject);
125 FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
126
127 /* Check if we support Fast Calls, and check this one */
128 if (FastDispatch && FastDispatch->MdlWriteComplete)
129 {
130 /* Use the fast path */
131 FastDispatch->MdlWriteComplete(FileObject,
132 FileOffset,
133 MdlChain,
134 DeviceObject);
135 }
136
137 /* Use slow path */
138 CcMdlWriteComplete2(FileObject,FileOffset, MdlChain);
139 }
140
141 VOID
142 NTAPI
143 CcMdlWriteComplete2 (
144 IN PFILE_OBJECT FileObject,
145 IN PLARGE_INTEGER FileOffset,
146 IN PMDL MdlChain)
147 {
148 UNIMPLEMENTED;
149 }
150
151 /*
152 * @unimplemented
153 */
154 VOID
155 NTAPI
156 CcMdlWriteAbort (
157 IN PFILE_OBJECT FileObject,
158 IN PMDL MdlChain)
159 {
160 UNIMPLEMENTED;
161 }
162
163 /*
164 * @unimplemented
165 */
166 VOID
167 NTAPI
168 CcPrepareMdlWrite (
169 IN PFILE_OBJECT FileObject,
170 IN PLARGE_INTEGER FileOffset,
171 IN ULONG Length,
172 OUT PMDL * MdlChain,
173 OUT PIO_STATUS_BLOCK IoStatus)
174 {
175 UNIMPLEMENTED;
176 }