IovpCallDriverWithStackBuffer
NTSTATUS __stdcall IovpCallDriverWithStackBuffer(DEVICE_OBJECT *DeviceObject, IRP *Irp, PVOID ReturnAddress){
bool v6;
char v7;
UINT64 v8;
char v9;
__int64 v10;
__int64 v11;
char v12;
int v13;
void *v14;
NTSTATUS v15;
NTSTATUS v17;
INT64 result[19];
char v19;
DEVICE_OBJECT *v20;
IRP *v21;
PVOID v22;
memset((INT64)result, 0i64);
v6 = *(_WORD *)Irp == 6;
v20 = DeviceObject;
v21 = Irp;
v22 = ReturnAddress;
if( !v6 && (MmVerifierData & 0x400000) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, 0x400000ui64);
v19 = v7;
*(_OWORD *)&xmmword_140D49040 = 0i64;
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = 3i64;
qword_140D49038 = (ULONG_PTR)Irp;
VfBugCheckNoStackUsage();
}
if( !IovpValidateDeviceObject(DeviceObject) && ((unsigned int)v8 & (unsigned int)MmVerifierData) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v8);
v19 = v9;
*(_OWORD *)&xmmword_140D49040 = 0i64;
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = 4i64;
qword_140D49038 = (ULONG_PTR)DeviceObject;
VfBugCheckNoStackUsage();
}
v10 = *((_QWORD *)Irp + 23);
if( !*(_BYTE *)(v10 - 72) )
{
v11 = *(_QWORD *)(v10 - 24);
if( v11 )
{
if( (*(_DWORD *)(v11 + 80) & 0x204000) == 2113536 && ((unsigned int)v8 & (unsigned int)MmVerifierData) == 0 )
{
KeAcquireSpinLockRaiseToDpc(&VfBugcheckTmpDataLock, v8);
v19 = v12;
*(&xmmword_140D49040 + 1) = *(_QWORD *)(v10 - 24);
*(_QWORD *)&VfBugcheckTmpData = 201i64;
BugCheckParameter1 = 15i64;
qword_140D49038 = (ULONG_PTR)DeviceObject;
xmmword_140D49040 = (ULONG_PTR)Irp;
VfBugCheckNoStackUsage();
}
}
}
v13 = VfBeforeCallDriver((__int64)DeviceObject, (ULONG_PTR)Irp, (__int64)result);
if( (IopFunctionPointerMask & 2) != 0 )
v15 = IopPerfCallDriver(DeviceObject, Irp, v14);
else
v15 = IopfCallDriver(DeviceObject, Irp);
v17 = v15;
VfAfterCallDriver((__int64)result, &v17, v13);
return v17;
}Referenced by:
IovCallDriver