IovpCallDriverWithStackBuffer
NTSTATUS __stdcall IovpCallDriverWithStackBuffer(_DEVICE_OBJECT *DeviceObject, _IRP *Irp, PVOID ReturnAddress){
bool v6;
int v7;
_IO_STACK_LOCATION *CurrentStackLocation;
_FILE_OBJECT *FileObject;
unsigned int v10;
void *v11;
NTSTATUS v12;
INT64 Status;
_IOFCALLDRIVER_STACKDATA CallDriverData[48];
memset(CallDriverData, 0i64, sizeof(CallDriverData));
v6 = Irp->Type == 6;
*(_QWORD *)&CallDriverData[40] = DeviceObject;
*(_QWORD *)&CallDriverData[42] = Irp;
*(_QWORD *)&CallDriverData[44] = ReturnAddress;
if( !v6 && (MmVerifierData & 0x400000) == 0 )
{
BYTE1(CallDriverData[39]) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
*(_OWORD *)&xmmword_140D49040 = 0i64;
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = (PVOID)3;
qword_140D49038 = Irp;
VfBugCheckNoStackUsage();
}
if( !IovpValidateDeviceObject(DeviceObject) && (v7 & (unsigned int)MmVerifierData) == 0 )
{
BYTE1(CallDriverData[39]) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
*(_OWORD *)&xmmword_140D49040 = 0i64;
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = (PVOID)4;
qword_140D49038 = DeviceObject;
VfBugCheckNoStackUsage();
}
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
if( !CurrentStackLocation[-1].MajorFunction )
{
FileObject = CurrentStackLocation[-1].FileObject;
if( FileObject )
{
if( (FileObject->Flags & 0x204000) == 2113536 && (v7 & (unsigned int)MmVerifierData) == 0 )
{
BYTE1(CallDriverData[39]) = KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock);
*(&xmmword_140D49040 + 1) = CurrentStackLocation[-1].FileObject;
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = (PVOID)15;
qword_140D49038 = DeviceObject;
xmmword_140D49040 = Irp;
VfBugCheckNoStackUsage();
}
}
}
v10 = VfBeforeCallDriver(DeviceObject, (ULONG_PTR)Irp, CallDriverData);
if( (*(&stru_140CF2E80 + 6496) & 2) != 0 )
v12 = IopPerfCallDriver(DeviceObject, Irp, v11);
else
IopfCallDriver(DeviceObject, Irp);
LODWORD(Status) = v12;
VfAfterCallDriver(CallDriverData, &Status, v10);
return Status;
}Referenced by:
IovCallDriver