[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,
|
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);
|
|
||||||
|
RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
|
||||||
if ( !FastIoDispatch|| FastIoDispatch->SizeOfFastIoDispatch <= MAXIO_DISPATCH|| (MdlReadComplete_FLag = FastIoDispatch->MdlReadComplete) == 0|| !MdlReadComplete_FLag )
|
FastIoDispatch = RelatedDeviceObject->DriverObject->FastIoDispatch;
|
||||||
{
|
if(MdlChain == nullptr)
|
||||||
CcMdlReadComplete2(NULL,MdlChain);
|
{ 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
|
||||||
|
Loading…
Reference in New Issue
Block a user