ExpStringCapture
INT64 __fastcall ExpStringCapture(WCHAR **CapturedString, UNICODE_STRING *SourceString){
__int64 Length;
UINT64 v5;
UINT8 *PoolWithQuotaTag;
wchar_t *Buffer;
Length = SourceString->Length;
if( (Length & 1) != 0 || !(_WORD)Length )
{
return(unsigned int)-1073741811;
}
else
{
v5 = SourceString->Length;
PoolWithQuotaTag = (UINT8 *)ExAllocatePoolWithQuotaTag((POOL_TYPE)9, Length + 2, 0x50535845ui64);
if( PoolWithQuotaTag )
{
if( v5 )
{
Buffer = SourceString->Buffer;
if( ((unsigned __int8)Buffer & 1) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)Buffer + v5 > 0x7FFFFFFF0000i64 || (wchar_t *)((char *)Buffer + v5) < Buffer )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(PoolWithQuotaTag, (UINT8 *)SourceString->Buffer, v5);
*(_WORD *)&PoolWithQuotaTag[2 * (v5 >> 1)] = 0;
*CapturedString = (WCHAR *)PoolWithQuotaTag;
return 0;
}
else
{
return(unsigned int)-1073741801;
}
}
}Referenced by:
ExpGetDeviceDataInformation