PiDaDispatch

NTSTATUS __stdcall PiDaDispatch(DEVICE_OBJECT *DeviceObject, IRP *Irp){
  __int64 v2; 
  IRP *v3; 
  DEVICE_OBJECT *v4; 
  __int64 v5; 
  unsigned __int64 v6; 
  NTSTATUS v7; 
  __int64 v9; 
  unsigned __int64 v10; 
  wchar_t *v11; 
  __int64 v12; 
  int v13; 
  int v14; 
  v2 = *((_QWORD *)Irp + 23);
  v3 = Irp;
  v4 = DeviceObject;
  v5 = *(_QWORD *)(v2 + 48);
  if( !*(_BYTE *)v2 )
  {
    v9 = *(_QWORD *)(v5 + 96);
    if( v9 )
    {
      v6 = 0i64;
      v10 = 0i64;
      while( 1 )
      {
        v11 = (&IrpHandlingTable)[v10];
        v12 = v9 - (_QWORD)v11;
        do
        {
          v13 = *(wchar_t *)((char *)v11 + v12);
          v14 = *v11 - v13;
          if( v14 )
            break;
          ++v11;
        }
        while( v13 );
        if( !v14 )
          break;
        ++v6;
        v10 += 3i64;
        if( v10 >= 15 )
          goto LABEL_12;
      }
      if( v6 != -1i64 )
      {
        *(_QWORD *)(v5 + 24) = v6;
        Irp = v3;
        DeviceObject = v4;
        return((__int64(__fastcall *)(DEVICE_OBJECT *, IRP *, IRP *))*(&funcs_140630288 + 3 * v6))(
                 DeviceObject,
                 Irp,
                 v3);
      }
    }
LABEL_12:
    v7 = -1073741811;
    *((_DWORD *)v3 + 12) = -1073741811;
LABEL_16:
    IofCompleteRequest(v3, 0);
    return v7;
  }
  v6 = *(_QWORD *)(v5 + 24);
  if( v6 >= 5 )
  {
    v7 = -1073741808;
    *((_DWORD *)Irp + 12) = -1073741808;
    goto LABEL_16;
  }
  return((__int64(__fastcall *)(DEVICE_OBJECT *, IRP *, IRP *))*(&funcs_140630288 + 3 * v6))(DeviceObject, Irp, v3);
}

Referenced by:

No references.