FsRtlCopyRead
UINT8 __stdcall FsRtlCopyRead(
PFILE_OBJECT FileObject,
PLARGE_INTEGER FileOffset,
UINT64 Length,
BOOL Wait,
UINT64 LockKey,
VOID *Buffer,
PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject){
__int64 v9;
LONGLONG v13;
_QWORD *FsContext;
_ETHREAD *CurrentThread;
UINT8 v16;
__int64 v17;
char v18;
LONGLONG v19;
UINT8 v20;
v9 = (unsigned int)Length;
if( IoGetTopLevelIrp() )
return 0;
if( (_DWORD)v9 )
{
if( 0x7FFFFFFFFFFFFFFFi64 - FileOffset->QuadPart < v9 )
{
IoStatus->Status = -1073741811;
IoStatus->Information = 0i64;
return 0;
}
v13 = v9 + FileOffset->QuadPart;
FsContext = FileObject->FsContext;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
if( Wait )
{
__incgsdword(0x2EC8u);
v16 = 1;
ExAcquireResourceSharedLite(FsContext[1], 1);
}
else
{
__incgsdword(0x2EC4u);
if( !(unsigned __int8)ExAcquireResourceSharedLite(FsContext[1], 0) )
{
KeLeaveCriticalRegionThread(KeGetCurrentThread());
__incgsdword(0x8140u);
return 0;
}
v16 = 1;
}
if( !FileObject->PrivateCacheMap
|| (v18 = *((_BYTE *)FsContext + 5)) == 0
|| v18 == 2
&& (LOBYTE(v17) = Wait,
!DeviceObject->DriverObject->FastIoDispatch->FastIoCheckIfPossible(
FileObject,
FileOffset,
v9,
v17,
LockKey,
1u,
IoStatus,
DeviceObject)) )
{
ExReleaseResourceLite((PERESOURCE)FsContext[1]);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
__incgsdword(0x2ECCu);
return 0;
}
v19 = FsContext[4];
if( v13 > v19 )
{
if( FileOffset->QuadPart >= v19 )
{
IoStatus->Status = -1073741807;
IoStatus->Information = 0i64;
LABEL_22:
ExReleaseResourceLite((PERESOURCE)FsContext[1]);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v16;
}
LODWORD(v9) = v19 - FileOffset->anonymous_0.LowPart;
}
IoSetTopLevelIrp((_IRP *)4);
CcCopyReadEx(FileObject, FileOffset, (unsigned int)v9, Wait, Buffer, IoStatus, 0i64);
v16 = v20;
FileObject->Flags |= 0x80000u;
if( v20 )
FileObject->CurrentByteOffset.QuadPart = FileOffset->QuadPart + IoStatus->Information;
IoSetTopLevelIrp(0i64);
goto LABEL_22;
}
IoStatus->Status = 0;
IoStatus->Information = 0i64;
return 1;
}Referenced by:
No references.