IovpExamineIrpStackForwarding

VOID __stdcall IovpExamineIrpStackForwarding(
        _IOV_REQUEST_PACKET *IovPacket,
        UINT64 IsNewSession,
        _IRP *Irp,
        VOID *CallerAddress,
        _IO_STACK_LOCATION *IoCurrentStackLocation,
        _IO_STACK_LOCATION **IoLastStackLocation,
        INT64 *StackLocationsAdvanced,
        INT64 a8){
  unsigned __int16 *v9; 
  int v10; 
  __int64 v11; 
  int v12; 
  _BOOL4 v13; 
  _BOOL4 v14; 
  int v15; 
  int v16; 
  _IO_STACK_LOCATION *v17; 

  if( (_DWORD)IsNewSession )
  {
    v9 = 0i64;
    v10 = 1;
    goto LABEL_16;
  }
  v11 = *((_QWORD *)CallerAddress + 23);
  v10 = *((unsigned __int8 *)IovPacket + 186) - *((char *)CallerAddress + 67);
  v9 = (unsigned __int16 *)(v11 + 72 * (v10 - 1i64));
  if( v10 )
  {
    v12 = *(unsigned __int16 *)IoLastStackLocation - *v9;
    if( !v12 )
      v12 = *((unsigned __int8 *)IoLastStackLocation + 2) - *((unsigned __int8 *)v9 + 2);
    v13 = v12 == 0;
    v14 = memcmp(IoLastStackLocation + 1, v9 + 4, 0x20ui64) == 0;
    v15 = 0;
    v16 = v13 && v14;
    if( IoLastStackLocation[6] == *((_IO_STACK_LOCATION **)v9 + 6) )
      v15 = v16;
    if( v15 )
    {
      v17 = IoLastStackLocation[7];
      if( *(_OWORD *)(IoLastStackLocation + 7) == *(_OWORD *)(v9 + 28)
        && *((_BYTE *)IoLastStackLocation + 3) == *((_BYTE *)v9 + 3) )
      {
        if( v17 )
        {
          if( !(unsigned int)IovUtilMultipleDevicesSameDriver(*((_DEVICE_OBJECT **)v9 + 5)) )
          {
            ViErrorReport1(519, IoCurrentStackLocation, CallerAddress);
            IoLastStackLocation[7] = 0i64;
            *((_BYTE *)IoLastStackLocation + 3) = 0;
          }
          goto LABEL_16;
        }
      }
      else if( v17 )
      {
        goto LABEL_16;
      }
      *(_QWORD *)(v11 - 8) = v11;
      *(_QWORD *)(v11 - 16) = IovpInternalCompletionTrap;
      *(_BYTE *)(v11 - 69) = -32;
    }
  }
LABEL_16:
  *StackLocationsAdvanced = (INT64)v9;
  *(_DWORD *)a8 = v10;
}

Referenced by:

IovpCallDriver1