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