Sync with trunk r65656.
[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 CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%I64d Length=%lu\n",
32 FileObject, FileOffset->QuadPart, Length);
33
34 UNIMPLEMENTED;
35 }
36
37 /*
38 * NAME INTERNAL
39 * CcMdlReadComplete2@8
40 *
41 * DESCRIPTION
42 *
43 * ARGUMENTS
44 * MdlChain
45 * DeviceObject
46 *
47 * RETURN VALUE
48 * None.
49 *
50 * NOTE
51 * Used by CcMdlReadComplete@8 and FsRtl
52 *
53 */
54 VOID
55 NTAPI
56 CcMdlReadComplete2 (
57 IN PFILE_OBJECT FileObject,
58 IN PMDL MemoryDescriptorList
59 )
60 {
61 PMDL Mdl;
62
63 /* Free MDLs */
64 while ((Mdl = MemoryDescriptorList))
65 {
66 MemoryDescriptorList = Mdl->Next;
67 MmUnlockPages(Mdl);
68 IoFreeMdl(Mdl);
69 }
70 }
71
72 /*
73 * NAME EXPORTED
74 * CcMdlReadComplete@8
75 *
76 * DESCRIPTION
77 *
78 * ARGUMENTS
79 *
80 * RETURN VALUE
81 * None.
82 *
83 * NOTE
84 * From Bo Branten's ntifs.h v13.
85 *
86 * @implemented
87 */
88 VOID
89 NTAPI
90 CcMdlReadComplete (
91 IN PFILE_OBJECT FileObject,
92 IN PMDL MdlChain)
93 {
94 PDEVICE_OBJECT DeviceObject = NULL;
95 PFAST_IO_DISPATCH FastDispatch;
96
97 /* Get Fast Dispatch Data */
98 DeviceObject = IoGetRelatedDeviceObject(FileObject);
99 FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
100
101 /* Check if we support Fast Calls, and check this one */
102 if (FastDispatch && FastDispatch->MdlReadComplete)
103 {
104 /* Use the fast path */
105 FastDispatch->MdlReadComplete(FileObject,
106 MdlChain,
107 DeviceObject);
108 }
109
110 /* Use slow path */
111 CcMdlReadComplete2(FileObject, MdlChain);
112 }
113
114 /*
115 * @implemented
116 */
117 VOID
118 NTAPI
119 CcMdlWriteComplete (
120 IN PFILE_OBJECT FileObject,
121 IN PLARGE_INTEGER FileOffset,
122 IN PMDL MdlChain)
123 {
124 PDEVICE_OBJECT DeviceObject = NULL;
125 PFAST_IO_DISPATCH FastDispatch;
126
127 /* Get Fast Dispatch Data */
128 DeviceObject = IoGetRelatedDeviceObject(FileObject);
129 FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
130
131 /* Check if we support Fast Calls, and check this one */
132 if (FastDispatch && FastDispatch->MdlWriteComplete)
133 {
134 /* Use the fast path */
135 FastDispatch->MdlWriteComplete(FileObject,
136 FileOffset,
137 MdlChain,
138 DeviceObject);
139 }
140
141 /* Use slow path */
142 CcMdlWriteComplete2(FileObject,FileOffset, MdlChain);
143 }
144
145 VOID
146 NTAPI
147 CcMdlWriteComplete2 (
148 IN PFILE_OBJECT FileObject,
149 IN PLARGE_INTEGER FileOffset,
150 IN PMDL MdlChain)
151 {
152 UNIMPLEMENTED;
153 }
154
155 /*
156 * @unimplemented
157 */
158 VOID
159 NTAPI
160 CcMdlWriteAbort (
161 IN PFILE_OBJECT FileObject,
162 IN PMDL MdlChain)
163 {
164 UNIMPLEMENTED;
165 }
166
167 /*
168 * @unimplemented
169 */
170 VOID
171 NTAPI
172 CcPrepareMdlWrite (
173 IN PFILE_OBJECT FileObject,
174 IN PLARGE_INTEGER FileOffset,
175 IN ULONG Length,
176 OUT PMDL * MdlChain,
177 OUT PIO_STATUS_BLOCK IoStatus)
178 {
179 CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%I64d Length=%lu\n",
180 FileObject, FileOffset->QuadPart, Length);
181
182 UNIMPLEMENTED;
183 }