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