AdtpEtwBuildString
NTSTATUS __stdcall AdtpEtwBuildString(
_EVENT_DATA_DESCRIPTOR *pEtwDataDescriptor,
_UNICODE_STRING *pUnicodeString,
PWCHAR pszStringBuffer,
UINT64 *pdwCurBufferIndex,
UINT8 *pFreeWhenDone){
unsigned int Length;
unsigned __int16 MaximumLength;
unsigned int v9;
bool v10;
UINT8 *Buffer;
__int64 v12;
NTSTATUS result;
Length = pUnicodeString->Length;
MaximumLength = pUnicodeString->MaximumLength;
v9 = (Length >> 1) + 1;
v10 = MaximumLength == (unsigned __int16)Length;
if( MaximumLength > (unsigned __int16)Length )
{
Buffer = (UINT8 *)pUnicodeString->Buffer;
if( !*(_WORD *)&Buffer[2 * (Length >> 1)] )
{
LABEL_8:
pEtwDataDescriptor->Ptr = (unsigned __int64)Buffer;
pEtwDataDescriptor->Size = 2 * v9;
result = 0;
pEtwDataDescriptor->Reserved = 0;
return result;
}
v10 = MaximumLength == (unsigned __int16)Length;
}
if( v10 && v9 > 1 )
{
Buffer = (UINT8 *)pUnicodeString->Buffer;
if( !*(_WORD *)&Buffer[2 * (Length >> 1) - 2] )
{
v9 = Length >> 1;
goto LABEL_8;
}
}
v12 = *(unsigned int *)pdwCurBufferIndex;
if( (unsigned int)v12 + v9 < 0x400 )
{
Buffer = (UINT8 *)&pszStringBuffer[v12];
*(_DWORD *)pdwCurBufferIndex = v12 + v9;
LABEL_7:
memmove(Buffer, (UINT8 *)pUnicodeString->Buffer, (unsigned __int16)Length);
*(_WORD *)&Buffer[2 * v9 - 2] = 0;
goto LABEL_8;
}
Buffer = (UINT8 *)ExAllocatePoolWithTag(PagedPool, 2i64 * v9, 0x6B416553ui64);
if( Buffer )
{
*pFreeWhenDone = 1;
LOWORD(Length) = pUnicodeString->Length;
goto LABEL_7;
}
return -1073741801;
}Referenced by:
AdtpPackageParameters