ReactOS  0.4.15-dev-3165-gdf6fff7
mdl.c
Go to the documentation of this file.
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
26  IN ULONG Length,
27  OUT PMDL * MdlChain,
29  )
30 {
31  CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%I64d Length=%lu\n",
32  FileObject, FileOffset->QuadPart, Length);
33 
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
59 )
60 {
61  PMDL Mdl;
62 
63  /* Free MDLs */
64  while ((Mdl = MemoryDescriptorList))
65  {
66  MemoryDescriptorList = Mdl->Next;
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
93 {
95  PFAST_IO_DISPATCH FastDispatch;
96 
97  /* Get Fast Dispatch Data */
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  if (FastDispatch->MdlReadComplete(FileObject,
106  MdlChain,
107  DeviceObject))
108  {
109  /* Request was handled */
110  return;
111  }
112  }
113 
114  /* Use slow path */
116 }
117 
118 /*
119  * @implemented
120  */
121 VOID
122 NTAPI
126  IN PMDL MdlChain)
127 {
129  PFAST_IO_DISPATCH FastDispatch;
130 
131  /* Get Fast Dispatch Data */
133  FastDispatch = DeviceObject->DriverObject->FastIoDispatch;
134 
135  /* Check if we support Fast Calls, and check this one */
136  if (FastDispatch && FastDispatch->MdlWriteComplete)
137  {
138  /* Use the fast path */
139  if (FastDispatch->MdlWriteComplete(FileObject,
140  FileOffset,
141  MdlChain,
142  DeviceObject))
143  {
144  /* Request was handled */
145  return;
146  }
147  }
148 
149  /* Use slow path */
151 }
152 
153 VOID
154 NTAPI
158  IN PMDL MdlChain)
159 {
161 }
162 
163 /*
164  * @unimplemented
165  */
166 VOID
167 NTAPI
170  IN PMDL MdlChain)
171 {
173 }
174 
175 /*
176  * @unimplemented
177  */
178 VOID
179 NTAPI
183  IN ULONG Length,
184  OUT PMDL * MdlChain,
186 {
187  CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%I64d Length=%lu\n",
188  FileObject, FileOffset->QuadPart, Length);
189 
191 }
#define IN
Definition: typedefs.h:39
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _Outptr_ PMDL * MdlChain
Definition: fsrtlfuncs.h:46
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
Definition: mdlsup.c:1426
PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject(IN PFILE_OBJECT FileObject)
Definition: device.c:1539
PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
Definition: iotypes.h:1750
VOID NTAPI CcMdlWriteComplete2(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PMDL MdlChain)
Definition: mdl.c:155
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
VOID NTAPI CcMdlWriteComplete(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PMDL MdlChain)
Definition: mdl.c:123
_Inout_ PMDL MemoryDescriptorList
Definition: mmfuncs.h:405
VOID NTAPI CcMdlReadComplete2(IN PFILE_OBJECT FileObject, IN PMDL MemoryDescriptorList)
Definition: mdl.c:56
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:547
#define CC_API_DEBUG
Definition: cc.h:11
VOID NTAPI CcPrepareMdlWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus)
Definition: mdl.c:180
#define CCTRACE(x, fmt,...)
Definition: cc.h:36
* PFILE_OBJECT
Definition: iotypes.h:1998
VOID NTAPI IoFreeMdl(PMDL Mdl)
Definition: iomdl.c:146
VOID NTAPI CcMdlRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus)
Definition: mdl.c:23
_In_ PFCB _In_ LONGLONG FileOffset
Definition: cdprocs.h:159
#define NULL
Definition: types.h:112
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
VOID NTAPI CcMdlWriteAbort(IN PFILE_OBJECT FileObject, IN PMDL MdlChain)
Definition: mdl.c:168
VOID NTAPI CcMdlReadComplete(IN PFILE_OBJECT FileObject, IN PMDL MdlChain)
Definition: mdl.c:90
PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
Definition: iotypes.h:1752
#define OUT
Definition: typedefs.h:40
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
Definition: mxum.h:155
unsigned int ULONG
Definition: retypes.h:1
#define UNIMPLEMENTED
Definition: debug.h:115