FsRtlGetFileSize
NTSTATUS __stdcall FsRtlGetFileSize(_FILE_OBJECT *FileObject, _LARGE_INTEGER *FileSize){
_DEVICE_OBJECT *v4;
__int64 v5;
_DEVICE_OBJECT *v6;
_FAST_IO_DISPATCH *FastIoDispatch;
unsigned __int8(__fastcall *FastIoQueryStandardInfo)(_FILE_OBJECT *, unsigned __int8, _FILE_STANDARD_INFORMATION *, _IO_STATUS_BLOCK *, _DEVICE_OBJECT *);
NTSTATUS result;
_IRP *Irp;
_IO_STACK_LOCATION *CurrentStackLocation;
char v12;
char v13;
NTSTATUS v14;
NTSTATUS v15;
__int128 v16;
__int128 Object;
__int64 v18;
__int128 v19;
__int64 v20;
v16 = 0i64;
v20 = 0i64;
v19 = 0i64;
LODWORD(v4) = IoGetRelatedDeviceObject((INT64)FileObject);
v6 = v4;
FastIoDispatch = v4->DriverObject->FastIoDispatch;
if( !FastIoDispatch
|| (FastIoQueryStandardInfo = FastIoDispatch->FastIoQueryStandardInfo) == 0i64
|| (LOBYTE(v5) = 1,
!FastIoQueryStandardInfo(FileObject, v5, (_FILE_STANDARD_INFORMATION *)&v19, (_IO_STATUS_BLOCK *)&v16, v6)) )
{
v18 = 0i64;
Object = 0i64;
KeInitializeEvent((INT64)&Object, 0, 0);
Irp = IoAllocateIrpEx(v6, v6->StackSize, 0);
if( !Irp )
return -1073741670;
IoSetThreadHardErrorMode(0);
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
v13 = v12;
Irp->Flags = 66;
Irp->UserIosb = (_IO_STATUS_BLOCK *)&v16;
Irp->UserEvent = (_KEVENT *)&Object;
Irp->RequestorMode = 0;
Irp->Tail.OriginalFileObject = FileObject;
Irp->Tail.Thread = (_ETHREAD *)KeGetCurrentThread();
Irp->AssociatedIrp.MasterIrp = (_IRP *)&v19;
CurrentStackLocation[-1].MajorFunction = 5;
CurrentStackLocation[-1].FileObject = FileObject;
CurrentStackLocation[-1].DeviceObject = v6;
LODWORD(CurrentStackLocation[-1].Parameters.SecurityContext) = 24;
CurrentStackLocation[-1].Parameters.Options = 5;
v14 = IofCallDriver((UINT64)v6, (UINT64)Irp);
if( v14 == 259 )
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
v15 = v16;
if( v14 < 0 )
v15 = v14;
LODWORD(v16) = v15;
LOBYTE(v15) = v13;
IoSetThreadHardErrorMode(v15);
}
result = v16;
if( (int)v16 >= 0 )
{
if( BYTE5(v20) )
return -1073741638;
else
*FileSize = *(_LARGE_INTEGER *)((char *)&v19 + 8);
}
return result;
}Referenced by:
ExpQueryCodeIntegrityCertificateInfo
ExpQueryElamCertInfo
FsRtlCreateSectionForDataScan
MiCreateDataFileMap
MiCreateImageFileMap
MiShareExistingControlArea
MmExtendSection