SepProbeAndCaptureString_U

INT64 __fastcall SepProbeAndCaptureString_U(_UNICODE_STRING *SourceString, _UNICODE_STRING **DestString){
  __int64 v3; 
  int v4; 
  UINT8 *v5; 
  unsigned __int64 v6; 
  _UNICODE_STRING *PoolWithTag; 
  unsigned int v9; 
  *DestString = 0i64;
  v9 = 0;
  v3 = 0x7FFFFFFF0000i64;
  if( (unsigned __int64)SourceString < 0x7FFFFFFF0000i64 )
    v3 = (__int64)SourceString;
  v4 = *(_DWORD *)v3;
  v5 = *(UINT8 **)(v3 + 8);
  if( (unsigned __int16)*(_DWORD *)v3 )
  {
    if( ((unsigned __int8)v5 & 1) != 0 )
      ExRaiseDatatypeMisalignment();
    v6 = (unsigned __int64)&v5[(unsigned __int16)v4];
    if( v6 > 0x7FFFFFFF0000i64 || v6 < (unsigned __int64)v5 )
      MEMORY[0x7FFFFFFF0000] = 0;
  }
  if( (v4 & 1) != 0 || (unsigned __int16)v4 == 65534 )
  {
    return(unsigned int)-1073741811;
  }
  else
  {
    PoolWithTag = (_UNICODE_STRING *)ExAllocatePoolWithTag(PagedPool, (unsigned __int16)v4 + 16i64, 0x73556553ui64);
    *DestString = PoolWithTag;
    if( PoolWithTag )
    {
      PoolWithTag->Length = v4;
      (*DestString)->MaximumLength = v4;
      (*DestString)->Buffer = &(*DestString)[1].Length;
      if( (_WORD)v4 )
        memmove((UINT8 *)(*DestString)->Buffer, v5, (unsigned __int16)v4);
    }
    else
    {
      return(unsigned int)-1073741670;
    }
  }
  return v9;
}

Referenced by:

NtCloseObjectAuditAlarm
NtDeleteObjectAuditAlarm
NtOpenObjectAuditAlarm
NtPrivilegeObjectAuditAlarm
NtPrivilegedServiceAuditAlarm
SepAccessCheckAndAuditAlarmWithAdminlessChecks