NtCreatePartition

NTSTATUS __fastcall NtCreatePartition(
        VOID **ParentPartitionHandle,
        VOID **PartitionHandle,
        UINT64 DesiredAccess,
        _OBJECT_ATTRIBUTES *ObjectAttributes){
  unsigned int v5; 
  char PreviousMode; 
  __int64 v9; 
  int Partition; 
  INT64 a7; 
  UINT64 a4; 
  __int64 a6[3]; 

  v5 = DesiredAccess;
  a6[0] = 0i64;
  a7 = 0i64;
  a4 = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    v9 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)PartitionHandle < 0x7FFFFFFF0000i64 )
      v9 = (__int64)PartitionHandle;
    *(_QWORD *)v9 = *(_QWORD *)v9;
  }
  if( SeSinglePrivilegeCheck(*(_QWORD *)&SeLockMemoryPrivilege, PreviousMode) )
  {
    if( !ParentPartitionHandle
      || (Partition = PsReferencePartitionByHandle(ParentPartitionHandle, 2ui64, PreviousMode, 0x70437350u, &a4),
          Partition >= 0) )
    {
      Partition = PspAllocatePartition(ObjectAttributes, v5, PreviousMode, a4, 0, (INT64)a6, (INT64)&a7);
      if( Partition >= 0 )
      {
        PsDereferencePartition(a6[0]);
        *PartitionHandle = (VOID *)a7;
      }
    }
  }
  else
  {
    Partition = -1073741727;
  }
  if( a4 )
    PsDereferencePartition(a4);
  return Partition;
}

Referenced by:

No references.