[NTOSKRNL:CC] Use standard FSRTL routines for Write/Read

CcMdlReadComplete, CcMdlWriteComplete, Older Macros are WDM Header dependent
This commit is contained in:
Dibyamartanda Samanta 2024-05-17 17:03:52 +02:00
parent cfb3362f1e
commit 12c4e07a18

View File

@ -207,15 +207,26 @@ NTAPI
CcMdlReadComplete(IN PFILE_OBJECT FileObject, CcMdlReadComplete(IN PFILE_OBJECT FileObject,
IN PMDL MdlChain) IN PMDL MdlChain)
{ {
PDEVICE_OBJECT RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject); PDEVICE_OBJECT RelatedDeviceObject = nullptr;
FAST_IO_DISPATCH FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch; PFAST_IO_DISPATCH FastIoDispatch = nullptr;
/* Start Faster MDL Operator if Suceeds , don't execute slower CcMdlReadComplete2*/ IO_MDLREAD_COMPLETE_ROUTINE MdlReadComplete;
BOOL MdlReadComplete_FLag = (*PFAST_IO_MDL_READ_COMPLETE) ( FileObject, MdlChain, RelatedDeviceObject);
if ( !FastIoDispatch|| FastIoDispatch->SizeOfFastIoDispatch <= MAXIO_DISPATCH|| (MdlReadComplete_FLag = FastIoDispatch->MdlReadComplete) == 0|| !MdlReadComplete_FLag ) RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
{ FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
CcMdlReadComplete2(NULL,MdlChain); if(MdlChain == nullptr)
{ DBGPRINT("Invalid MDLChain \n");
return;
} }
if (FastIoDispatch &&
FastIoDispatch->SizeOfFastIoDispatch >= sizeof(FAST_IO_DISPATCH) &&
(MdlReadComplete = FastIoDispatch->MdlReadComplete) != NULL &&
MdlReadComplete(FileObject, MdlChain, RelatedDeviceObject))
{
/* Faster Fast I/O MDL path successful, if it fails, we will go for our slower implementation*/
return;
}
CcMdlReadComplete2(FileObject, MdlChain);
} }
VOID VOID
@ -250,14 +261,26 @@ CcMdlWriteComplete(IN PFILE_OBJECT FileObject,
IN PMDL MdlChain) IN PMDL MdlChain)
{ {
DEVICE_OBJECT RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject); PDEVICE_OBJECT RelatedDeviceObject = nullptr;
FAST_IO_DISPATCH FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch; PFAST_IO_DISPATCH FastIoDispatch = nullptr;
BOOL MdlWriteComplete_FLag = (*PFAST_IO_MDL_WRITE_COMPLETE) ( FileObject, FileOffset, MdlChain, RelatedDeviceObject); IO_MDLWRITE_COMPLETE_ROUTINE MdlWriteComplete;
/* Start Faster MDL Operator if Suceeds , don't execute slower CcMdlReadComplete2*/ if(MdlChain == nullptr)
if (!FastIoDispatch|| FastIoDispatch->SizeOfFastIoDispatch <= MAXIO_DISPATCH|| (MdlWriteComplete_FLag = FastIoDispatch->MdlWriteComplete) == 0|| !MdlWriteComplete_FLag) { DBGPRINT("Invalid MDLChain \n");
{ return;
CcMdlWriteComplete2(FileObject,FileOffset,MdlChain);
} }
RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
if (FastIoDispatch &&
FastIoDispatch->SizeOfFastIoDispatch >= sizeof(FAST_IO_DISPATCH) &&
(MdlWriteComplete = FastIoDispatch->MdlWriteComplete) != NULL &&
MdlWriteComplete(FileObject, FileOffset, MdlChain, RelatedDeviceObject))
{
/* Faster Fast I/O MDL path successful, if it fails, we will go for our slower implementation*/
return;
}
CcMdlWriteComplete2(FileObject, FileOffset, MdlChain);
} }
VOID VOID