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