VerifierIoSetCompletionRoutineEx

NTSTATUS __stdcall VerifierIoSetCompletionRoutineEx(
        _DEVICE_OBJECT *DeviceObject,
        _IRP *Irp,
        INT64 *CompletionRoutine,
        _DEVICE_OBJECT *a4,
        _IRP *a5,
        VOID *a6,
        VOID *Context,
        UINT8 InvokeOnSuccess,
        UINT8 InvokeOnError,
        UINT8 InvokeOnCancel){
  NTSTATUS v15; 
  _OWORD *PoolWithTagPriority; 
  _IO_STACK_LOCATION *CurrentStackLocation; 
  _OWORD *v18; 
  char CallingAddress; 
  char v20; 
  char v21; 
  VOID *retaddr; 

  if( VfFaultsInjectResourceFailure(0i64) )
    return -1073741670;
  v21 = (char)Context;
  v20 = (char)a6;
  CallingAddress = (char)a5;
  v15 = ((__int64(__fastcall *)(_DEVICE_OBJECT *, _IRP *, INT64 *, _DEVICE_OBJECT *, char, char, char))pXdvIoSetCompletionRoutineEx)(
          DeviceObject,
          Irp,
          CompletionRoutine,
          a4,
          CallingAddress,
          v20,
          v21);
  if( v15 >= 0 )
  {
    PoolWithTagPriority = VeAllocatePoolWithTagPriority(
                            (POOL_TYPE)640,
                            0x20ui64,
                            0x73556656ui64,
                            HighPoolPriority,
                            retaddr);
    if( PoolWithTagPriority )
    {
      CurrentStackLocation = Irp->Tail.CurrentStackLocation;
      v18 = CurrentStackLocation[-1].Context;
      *PoolWithTagPriority = *v18;
      PoolWithTagPriority[1] = v18[1];
      CurrentStackLocation[-1].Context = PoolWithTagPriority;
      VfUtilFreePoolCheckIRQL(v18);
    }
  }
  return v15;
}

Referenced by:

No references.