xref: /reactos/ntoskrnl/cc/mdl.c (revision 84ccccab)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS kernel
4  * FILE:            ntoskrnl/cc/mdl.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 }
184