HalpSetPCIData

NTSTATUS __stdcall HalpSetPCIData(
        INT64 SegmentNumber,
        UINT64 BusNumber,
        ULONG_PTR Slot,
        UINT8 *Buffer,
        ULONG_PTR Offset,
        UINT64 Length){
  ULONG_PTR v6; 
  ULONG_PTR v7; 
  UINT8 *v8; 
  __int64 v10; 
  UINT8 v11; 
  UINT16 v12; 
  size_t v14; 
  UINT64 v15; 
  UINT64 v16; 
  UINT64 v17; 
  __int128 Buffera[4]; 
  __int128 v20[4]; 

  v6 = Offset;
  v7 = 4096;
  v8 = Buffer;
  if( (unsigned int)Length <= 0x1000 )
    v7 = Length;
  LODWORD(v10) = 0;
  v11 = BusNumber;
  v12 = SegmentNumber;
  if( Offset < 0x40 )
  {
    LODWORD(v15) = 64;
    HalpReadPCIConfig(SegmentNumber, BusNumber, Slot, Buffera, 0, v15);
    if( LOWORD(Buffera[0]) == 0xFFFF || (BYTE14(Buffera[0]) & 0x7F) != 0 )
      return 0;
    v20[0] = Buffera[0];
    v14 = v7;
    if( 64 - Offset <= v7 )
      v14 = 64 - Offset;
    v20[1] = Buffera[1];
    v20[2] = Buffera[2];
    v20[3] = Buffera[3];
    v10 = v14;
    memmove((char *)v20 + Offset, Buffer, v14);
    LODWORD(v17) = v10;
    HalpWritePCIConfig(v12, v11, Slot, (char *)v20 + Offset, Offset, v17);
    v6 = v10 + Offset;
    v8 = &Buffer[v10];
    v7 -= v10;
  }
  else
  {
    LODWORD(v15) = 4;
    HalpReadPCIConfig(SegmentNumber, BusNumber, Slot, Buffera, 0, v15);
    if( LOWORD(Buffera[0]) == 0xFFFF )
      return 0;
  }
  if( v7 )
  {
    if( v6 >= 0x40 )
    {
      LODWORD(v16) = v7;
      HalpWritePCIConfig(v12, v11, Slot, v8, v6, v16);
      LODWORD(v10) = v7 + v10;
    }
  }
  return v10;
}

Referenced by:

HalSetBusDataByOffset