[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,
IN PMDL MdlChain)
{
PDEVICE_OBJECT RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
FAST_IO_DISPATCH FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
/* Start Faster MDL Operator if Suceeds , don't execute slower CcMdlReadComplete2*/
BOOL MdlReadComplete_FLag = (*PFAST_IO_MDL_READ_COMPLETE) ( FileObject, MdlChain, RelatedDeviceObject);
if ( !FastIoDispatch|| FastIoDispatch->SizeOfFastIoDispatch <= MAXIO_DISPATCH|| (MdlReadComplete_FLag = FastIoDispatch->MdlReadComplete) == 0|| !MdlReadComplete_FLag )
{
CcMdlReadComplete2(NULL,MdlChain);
}
PDEVICE_OBJECT RelatedDeviceObject = nullptr;
PFAST_IO_DISPATCH FastIoDispatch = nullptr;
IO_MDLREAD_COMPLETE_ROUTINE MdlReadComplete;
RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
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
@ -250,14 +261,26 @@ CcMdlWriteComplete(IN PFILE_OBJECT FileObject,
IN PMDL MdlChain)
{
DEVICE_OBJECT RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
FAST_IO_DISPATCH FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
BOOL MdlWriteComplete_FLag = (*PFAST_IO_MDL_WRITE_COMPLETE) ( FileObject, FileOffset, MdlChain, RelatedDeviceObject);
/* Start Faster MDL Operator if Suceeds , don't execute slower CcMdlReadComplete2*/
if (!FastIoDispatch|| FastIoDispatch->SizeOfFastIoDispatch <= MAXIO_DISPATCH|| (MdlWriteComplete_FLag = FastIoDispatch->MdlWriteComplete) == 0|| !MdlWriteComplete_FLag)
{
CcMdlWriteComplete2(FileObject,FileOffset,MdlChain);
}
PDEVICE_OBJECT RelatedDeviceObject = nullptr;
PFAST_IO_DISPATCH FastIoDispatch = nullptr;
IO_MDLWRITE_COMPLETE_ROUTINE MdlWriteComplete;
if(MdlChain == nullptr)
{ DBGPRINT("Invalid MDLChain \n");
return;
}
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