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