BiSpacesUpdatePhysicalDevicePath

INT64 __fastcall BiSpacesUpdatePhysicalDevicePath(UINT64 *a1){
  UINT64 v2; 
  int IsSpace; 
  unsigned int v4; 
  WCHAR *PoolWithTag; 
  WCHAR *v6; 
  WCHAR *v7; 
  _DWORD *v8; 
  _DWORD *v9; 
  int PhysicalPartitions; 
  __int64 v11; 
  unsigned int v12; 
  VOID *v13; 
  UINT64 v14; 
  UINT64 v15; 
  BYTE v17; 
  v2 = *a1;
  IsSpace = 0;
  v17 = 0;
  v4 = 108;
  if( *(_DWORD *)v2 == 2 )
  {
    IsSpace = SyspartIsSpace((WCHAR *)(v2 + 20), &v17);
    if( IsSpace >= 0 )
    {
      if( v17 )
      {
        PoolWithTag = (WCHAR *)ExAllocatePoolWithTag(PagedPool, 0x208ui64, 0x4B444342ui64);
        v6 = (WCHAR *)ExAllocatePoolWithTag(PagedPool, 0x208ui64, 0x4B444342ui64);
        v7 = v6;
        if( PoolWithTag && v6 )
        {
          swprintf_s(PoolWithTag, 0x104ui64, (WCHAR *)L"%s\\%s");
          while( 1 )
          {
            v8 = ExAllocatePoolWithTag(PagedPool, v4, 0x4B444342ui64);
            v9 = v8;
            if( !v8 )
              goto LABEL_24;
            PhysicalPartitions = SyspartGetPhysicalPartitions(PoolWithTag, v8, v4);
            IsSpace = PhysicalPartitions;
            if( ((PhysicalPartitions + 0x80000000) & 0x80000000) == 0 && PhysicalPartitions != -2147483643 )
              break;
            if( v9[1] <= v4 )
            {
              if( v9[2] )
              {
                swprintf_s(v7, 0x104ui64, (WCHAR *)L"\\Device\\Harddisk%u\\Partition%u");
                v11 = -1i64;
                do
                  ++v11;
                while( v7[v11] );
                v12 = 2 * v11 + 2;
                v13 = ExAllocatePoolWithTag(PagedPool, (unsigned int)(2 * v11 + 62), 0x4B444342ui64);
                v14 = (UINT64)v13;
                if( v13 )
                {
                  v15 = *a1;
                  *(_OWORD *)v13 = *(_OWORD *)*a1;
                  *((_OWORD *)v13 + 1) = *(_OWORD *)(v15 + 16);
                  *((_OWORD *)v13 + 2) = *(_OWORD *)(v15 + 32);
                  *((_QWORD *)v13 + 6) = *(_QWORD *)(v15 + 48);
                  *((_DWORD *)v13 + 14) = *(_DWORD *)(v15 + 56);
                  memmove((UINT8 *)v13 + 20, (UINT8 *)v7, v12);
                  if( v15 )
                    ExFreeHeapPool((PVOID)v15);
                  *a1 = v14;
                }
                else
                {
                  IsSpace = -1073741801;
                }
              }
              else
              {
                IsSpace = -1073741823;
              }
              goto LABEL_23;
            }
            v4 = v9[1];
            ExFreeHeapPool(v9);
          }
          BiLogMessage();
LABEL_23:
          ExFreeHeapPool(v9);
          goto LABEL_25;
        }
LABEL_24:
        IsSpace = -1073741801;
LABEL_25:
        if( PoolWithTag )
          ExFreeHeapPool(PoolWithTag);
        if( v7 )
          ExFreeHeapPool(v7);
      }
    }
    else
    {
      BiLogMessage();
    }
  }
  return(unsigned int)IsSpace;
}

Referenced by:

BiUpdateEfiEntry