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 if (FastDispatch->MdlReadComplete(FileObject, 106 MdlChain, 107 DeviceObject)) 108 { 109 /* Request was handled */ 110 return; 111 } 112 } 113 114 /* Use slow path */ 115 CcMdlReadComplete2(FileObject, MdlChain); 116 } 117 118 /* 119 * @implemented 120 */ 121 VOID 122 NTAPI 123 CcMdlWriteComplete ( 124 IN PFILE_OBJECT FileObject, 125 IN PLARGE_INTEGER FileOffset, 126 IN PMDL MdlChain) 127 { 128 PDEVICE_OBJECT DeviceObject = NULL; 129 PFAST_IO_DISPATCH FastDispatch; 130 131 /* Get Fast Dispatch Data */ 132 DeviceObject = IoGetRelatedDeviceObject(FileObject); 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 */ 150 CcMdlWriteComplete2(FileObject,FileOffset, MdlChain); 151 } 152 153 VOID 154 NTAPI 155 CcMdlWriteComplete2 ( 156 IN PFILE_OBJECT FileObject, 157 IN PLARGE_INTEGER FileOffset, 158 IN PMDL MdlChain) 159 { 160 UNIMPLEMENTED; 161 } 162 163 /* 164 * @unimplemented 165 */ 166 VOID 167 NTAPI 168 CcMdlWriteAbort ( 169 IN PFILE_OBJECT FileObject, 170 IN PMDL MdlChain) 171 { 172 UNIMPLEMENTED; 173 } 174 175 /* 176 * @unimplemented 177 */ 178 VOID 179 NTAPI 180 CcPrepareMdlWrite ( 181 IN PFILE_OBJECT FileObject, 182 IN PLARGE_INTEGER FileOffset, 183 IN ULONG Length, 184 OUT PMDL * MdlChain, 185 OUT PIO_STATUS_BLOCK IoStatus) 186 { 187 CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%I64d Length=%lu\n", 188 FileObject, FileOffset->QuadPart, Length); 189 190 UNIMPLEMENTED; 191 } 192