MiInitializeCreateSectionPacket

NTSTATUS __stdcall MiInitializeCreateSectionPacket(
        INT64 *a1,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        UINT64 a5,
        CHAR a6,
        INT64 a7,
        CHAR a8,
        UINT64 a9,
        INT64 a10,
        CHAR a11,
        INT64 a12,
        INT64 a13){
  int v13; 
  int v15; 
  UINT64 v16; 
  NTSTATUS ProtectionMask; 
  unsigned int v18; 
  NTSTATUS result; 
  int v20; 
  int v21; 
  int v22; 
  int v23; 
  unsigned int v24; 
  char v25; 
  __int64 v26[3]; 

  v13 = a5;
  if( (a5 & 0x7F) != 0 )
    return -1073741811;
  a1[20] = a7;
  *((_DWORD *)a1 + 42) = a12;
  a1[19] = a3;
  *((_BYTE *)a1 + 24) = a8;
  *((_DWORD *)a1 + 5) = a5;
  a1[1] = a2;
  *((_DWORD *)a1 + 7) = a4;
  *((_BYTE *)a1 + 72) = a11;
  if( (a6 & 1) != 0 )
    *(_DWORD *)a1 |= 0x800u;
  if( (a6 & 2) != 0 )
  {
    v20 = *(_DWORD *)a1 | 1;
    *(_DWORD *)a1 = v20;
    if( (a6 & 4) != 0 )
      *(_DWORD *)a1 = v20 | 0x30000;
  }
  v15 = ((unsigned __int16)a4 ^ (unsigned __int16)*((_DWORD *)a1 + 35)) & 0xFFF;
  a1[6] = a10;
  *((_DWORD *)a1 + 35) ^= v15;
  a1[5] = a9;
  if( (a5 & 0x1100000) == 17825792 )
  {
    *(_DWORD *)a1 |= 0x200u;
    v13 = a5 & 0xFFEFFFFF;
  }
  if( (v13 & 0x100000) == 0 )
  {
    if( (v13 & 0x2000000) == 0 )
      goto LABEL_9;
    *(_DWORD *)a1 |= 0x10u;
    if( (v13 & 0x400000) != 0 )
    {
      v13 &= ~0x400000u;
      v25 = 12;
    }
    else
    {
      v25 = 4;
    }
    v24 = v13 & 0xFDFFFFFF;
    goto LABEL_42;
  }
  v22 = *(_DWORD *)a1;
  if( (v13 & 0x200000) != 0 )
  {
    v13 &= ~0x200000u;
    v22 |= 0x40u;
  }
  v23 = v22 | 0x20;
  v24 = v13 & 0xFFEFFFFF;
  *(_DWORD *)a1 = v23;
  if( (v24 & 0x400000) == 0 )
  {
    v25 = 1;
LABEL_42:
    v13 = v24 | 0x1000000;
    *((_BYTE *)a1 + 24) = v25;
    goto LABEL_9;
  }
  *(_DWORD *)a1 = v23 | 0x100;
  v13 = v24 & 0xFEBFFFFF | 0x1000000;
  *((_BYTE *)a1 + 24) = 12;
LABEL_9:
  v26[0] = 0i64;
  if( (v13 & 0x40000) == 0 )
    goto LABEL_10;
  if( !a9 || a10 )
    return -1073741811;
  result = PsReferencePartitionByHandle((VOID *)a9, 2ui64, a11, 0x70434D4Du, v26);
  if( result >= 0 )
  {
    if( *(_MI_PARTITION **)v26[0] == &Irp )
      PsDereferencePartition(v26[0]);
    else
      a1[22] = v26[0];
    a1[5] = 0i64;
    v13 &= ~0x40000u;
LABEL_10:
    if( (v13 & 0x1000000) != 0 )
    {
      if( (a6 & 8) != 0 )
        *(_DWORD *)a1 |= 0x80000u;
      if( (*(_BYTE *)&KeGetCurrentThread()->ApcState.Process->Pcb.SecureState & 1) != 0 )
        *(_DWORD *)a1 |= 0x480000u;
      if( (v13 & 0x11000000) == 285212672 )
      {
        if( *((_DWORD *)a1 + 7) != 2 )
          return -1073741755;
        v13 &= ~0x10000000u;
      }
      else
      {
        *(_DWORD *)a1 |= 0x400u;
        v21 = *(_DWORD *)a1;
        if( (*(_DWORD *)a1 & 0x20) != 0 && (MiFlags & 0x10000) != 0 )
        {
          *(_DWORD *)a1 = v21 | 0x80000;
        }
        else if( (MiFlags & 0x100000) != 0 )
        {
          *(_DWORD *)a1 = v21 | 0x80000;
        }
      }
    }
    else if( (v13 & 0x10000000) != 0 )
    {
      *((_DWORD *)a1 + 7) |= 0x200u;
    }
    else if( (v13 & 0x40000000) != 0 )
    {
      *((_DWORD *)a1 + 7) |= 0x400u;
    }
    v16 = *((unsigned int *)a1 + 7);
    *((_DWORD *)a1 + 4) = v13;
    ProtectionMask = MiMakeProtectionMask(v16);
    *((_DWORD *)a1 + 8) = ProtectionMask;
    if( ProtectionMask != -1 )
    {
      if( !a13 )
        return 0;
      *((_BYTE *)a1 + 192) = *(_BYTE *)a13;
      *((_DWORD *)a1 + 49) = *(_DWORD *)(a13 + 4);
      v18 = *(_DWORD *)(a13 + 8);
      if( v18 <= (unsigned __int16)KeNumberNodes )
      {
        *((_DWORD *)a1 + 43) = v18;
        return 0;
      }
      return -1073741811;
    }
    return -1073741755;
  }
  return result;
}

Referenced by:

MiCreateSection