[NTOSKRNL:CC] Use standard FSRTL routines for Write/Read
CcMdlReadComplete, CcMdlWriteComplete, Older Macros are WDM Header dependent
This commit is contained in:
parent
cfb3362f1e
commit
12c4e07a18
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user