AdtpBuildUlongString
NTSTATUS __stdcall AdtpBuildUlongString(
UINT64 Value,
_UNICODE_STRING *pResultantString,
_EVENT_DATA_DESCRIPTOR *pEtwDataDescriptor,
PWCHAR pszStringBuffer,
UINT64 *pdwCurBufferIndex,
UINT8 *pFreeWhenDone){
unsigned int v8;
__int64 v10;
wchar_t *PoolWithTag;
UINT8 v12;
__int64 v13;
v8 = Value;
if( !pEtwDataDescriptor && !pResultantString )
return -1073741811;
if( pszStringBuffer
&& pdwCurBufferIndex
&& (v10 = *(unsigned int *)pdwCurBufferIndex, (unsigned int)(v10 + 11) < 0x400) )
{
PoolWithTag = &pszStringBuffer[v10];
*(_DWORD *)pdwCurBufferIndex = v10 + 11;
v12 = 0;
}
else
{
v12 = 1;
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, 0x16ui64, 0x6B416553ui64);
if( !PoolWithTag )
return -1073741801;
}
*pFreeWhenDone = v12;
ultow(v8, PoolWithTag, 10);
v13 = -1i64;
do
++v13;
while( PoolWithTag[v13] );
if( pEtwDataDescriptor )
{
pEtwDataDescriptor->Ptr = (unsigned __int64)PoolWithTag;
*(_QWORD *)&pEtwDataDescriptor->Size = (unsigned int)(2 * v13 + 2);
}
else
{
pResultantString->MaximumLength = 22;
pResultantString->Length = 2 * v13;
pResultantString->Buffer = PoolWithTag;
}
return 0;
}Referenced by:
AdtpBuildRegistryValueString
AdtpPackageParameters