ViGenericVerifyIrpStackDownward

VOID __stdcall ViGenericVerifyIrpStackDownward(
        _IOV_REQUEST_PACKET *IovPacket,
        _DEVICE_OBJECT *DeviceObject,
        _IO_STACK_LOCATION *IrpLastSp,
        _IO_STACK_LOCATION *IrpSp,
        _IOV_STACK_LOCATION *RequestHeadLocationData,
        _IOV_STACK_LOCATION *StackLocationData,
        VOID *CallerAddress){
  const VOID *v7; 
  __int64 v9; 
  unsigned int v11; 
  NTSTATUS IsNewRequest; 
  unsigned __int8 MajorFunction; 
  NTSTATUS v15; 
  UINT64 v16; 
  _IOV_STACK_LOCATION v17; 
  _VF_ERROR_ID v18; 
  NTSTATUS v19; 
  int v20; 
  _IOV_STACK_LOCATION v21; 
  __int64 v22; 
  __int64 v23; 
  INT8 pszDest[96]; 

  v7 = *(const VOID **)IovPacket;
  v9 = *((_QWORD *)IovPacket + 30);
  v11 = *(_DWORD *)(*(_QWORD *)IovPacket + 48i64);
  v21 = RequestHeadLocationData[24];
  v23 = *(_QWORD *)(*(_QWORD *)IovPacket + 56i64);
  v22 = *((_QWORD *)RequestHeadLocationData + 13);
  v20 = RequestHeadLocationData[1] & 0x8000000;
  IsNewRequest = VfMajorIsNewRequest(IrpLastSp, IrpSp);
  MajorFunction = IrpSp->MajorFunction;
  v15 = IsNewRequest;
  v19 = IsNewRequest;
  if( (IrpSp->MajorFunction < 3u
     || MajorFunction > 4u && (MajorFunction <= 0xDu || MajorFunction > 0xFu && MajorFunction != 22))
    && *(_DWORD *)(v9 + 56) == 2 )
  {
    v16 = *((unsigned __int8 *)IovPacket + 60);
    if( (unsigned __int8)v16 >= 2u && (IovPacket[14] & 0x2000000) == 0 )
    {
      ViErrorDisplayDescription(769);
      if( RtlStringCbPrintfA(pszDest, 0x5Bui64, (INT8 *)"CulpritAddress = %p, Irp = %p, IRQL = %u.\n") >= 0 )
        VfUtilDbgPrint(pszDest);
      ViErrorFinishReport(769, CallerAddress, (UINT64)v7, v16);
      IovPacket[14] |= 0x2000000u;
      v15 = v19;
    }
  }
  if( IrpLastSp )
  {
    v17 = RequestHeadLocationData[1];
    if( (IovPacket[14] & 0x20) != 0 && (v17 & 0x1000000) == 0 )
    {
      if( v15 && !v20 )
      {
        RequestHeadLocationData[1] = v17 | 0x1000000;
        ViErrorReport1(530, CallerAddress, v7);
      }
      if( v11 != v21 )
      {
        RequestHeadLocationData[1] |= 0x1000000u;
        v18 = 571;
        if( IrpSp->MinorFunction != 0xFF )
          v18 = 531;
        ViErrorReport1(v18, CallerAddress, v7);
      }
      if( v23 != v22 )
      {
        RequestHeadLocationData[1] |= 0x1000000u;
        ViErrorReport1(532, CallerAddress, v7);
      }
    }
    if( !VfMajorIsValidIrpStatus(IrpSp, v11) )
      ViErrorReport6(768, CallerAddress, v7, v11);
  }
}

Referenced by:

No references.