SepProbeAndCaptureString_U

NTSTATUS __stdcall SepProbeAndCaptureString_U(
        _UNICODE_STRING *SourceString,
        _UNICODE_STRING **DestString,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  __int64 v9; 
  int v10; 
  const VOID *v11; 
  unsigned __int64 v12; 
  VOID **PoolWithTag; 
  NTSTATUS v15; 

  *DestString = 0i64;
  v15 = 0;
  v9 = 0x7FFFFFFF0000i64;
  if( (unsigned __int64)SourceString < 0x7FFFFFFF0000i64 )
    v9 = (__int64)SourceString;
  v10 = *(_DWORD *)v9;
  v11 = *(const VOID **)(v9 + 8);
  if( (unsigned __int16)*(_DWORD *)v9 )
  {
    if( ((unsigned __int8)v11 & 1) != 0 )
      ExRaiseDatatypeMisalignment();
    v12 = (unsigned __int64)v11 + (unsigned __int16)v10;
    if( v12 > 0x7FFFFFFF0000i64 || v12 < (unsigned __int64)v11 )
      MEMORY[0x7FFFFFFF0000] = 0;
  }
  if( (v10 & 1) != 0 || (unsigned __int16)v10 == 65534 )
    return -1073741811;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned __int16)v10 + 16i64, 1934976339i64);
  *DestString = (_UNICODE_STRING *)PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  *(_WORD *)PoolWithTag = v10;
  (*DestString)->MaximumLength = v10;
  (*DestString)->Buffer = &(*DestString)[1].Length;
  if( (_WORD)v10 )
    memmove((*DestString)->Buffer, v11, (unsigned __int16)v10);
  return v15;
}

Referenced by:

NtCloseObjectAuditAlarm
NtDeleteObjectAuditAlarm
NtOpenObjectAuditAlarm
NtPrivilegeObjectAuditAlarm
NtPrivilegedServiceAuditAlarm
SepAccessCheckAndAuditAlarmWithAdminlessChecks