IoWritePartitionTable

NTSTATUS __stdcall IoWritePartitionTable(
        _DEVICE_OBJECT *DeviceObject,
        UINT64 BytesPerSector,
        UINT64 SectorsPerTrack,
        UINT64 NumberOfHeads,
        _DRIVE_LAYOUT_INFORMATION *Layout){
  ULONG PartitionCount; 
  VOID **PoolWithTag; 
  struct SC_DISK_LAYOUT *v8; 
  NTSTATUS v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v14[46]; 

  SC_DISK::SC_DISK((SC_DISK *)v14);
  PartitionCount = Layout->PartitionCount;
  v14[44] = 0i64;
  v14[0] = (__int64)&NT_DISK::`vftable';
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 144 * PartitionCount + 48, 1414557513i64);
  v8 = (struct SC_DISK_LAYOUT *)PoolWithTag;
  if( PoolWithTag )
  {
    *(_DWORD *)PoolWithTag = 0;
    v10 = 0i64;
    *((_DWORD *)PoolWithTag + 1) = Layout->PartitionCount;
    for( *((_DWORD *)PoolWithTag + 2) = Layout->Signature;
          (unsigned int)v10 < Layout->PartitionCount;
          HIDWORD(PoolWithTag[v11 + 10]) = Layout->PartitionEntry[v12].HiddenSectors )
    {
      v11 = 18 * v10;
      v12 = (unsigned int)v10;
      v10 = (unsigned int)(v10 + 1);
      LODWORD(PoolWithTag[v11 + 6]) = 0;
      PoolWithTag[v11 + 7] = (VOID *)Layout->PartitionEntry[v12].StartingOffset.QuadPart;
      PoolWithTag[v11 + 8] = (VOID *)Layout->PartitionEntry[v12].PartitionLength.QuadPart;
      LODWORD(PoolWithTag[v11 + 9]) = Layout->PartitionEntry[v12].PartitionNumber;
      BYTE4(PoolWithTag[v11 + 9]) = Layout->PartitionEntry[v12].RewritePartition;
      LOBYTE(PoolWithTag[v11 + 10]) = Layout->PartitionEntry[v12].PartitionType;
      BYTE1(PoolWithTag[v11 + 10]) = Layout->PartitionEntry[v12].BootIndicator;
      BYTE2(PoolWithTag[v11 + 10]) = Layout->PartitionEntry[v12].RecognizedPartition;
    }
    v9 = NT_DISK::Initialize((NT_DISK *)v14, DeviceObject);
    if( v9 >= 0 )
      v9 = SC_DISK::WritePartitionTable((SC_DISK *)v14, v8);
    ExFreePoolWithTag(v8, 0);
  }
  else
  {
    v9 = -1073741670;
  }
  v14[0] = (__int64)&NT_DISK::`vftable';
  SC_DISK::~SC_DISK((SC_DISK *)v14);
  return v9;
}

Referenced by:

No references.