EtwpCapturePreviousRegistryData
VOID __fastcall EtwpCapturePreviousRegistryData(_REG_SET_VALUE_KEY_INFORMATION *SetValueKeyInfo){
void *PoolWithTag;
PVOID Object;
ULONG Length;
NTSTATUS v5;
struct _UNICODE_STRING ValueName;
SIZE_T NumberOfBytes;
HANDLE KeyHandle;
KeyHandle = 0i64;
LODWORD(NumberOfBytes) = 0;
PoolWithTag = 0i64;
Object = SetValueKeyInfo->Object;
ValueName = *SetValueKeyInfo->ValueName;
if( ObOpenObjectByPointer(Object, 0x200u, 0i64, 0x20019u, (POBJECT_TYPE)CmKeyObjectType, 0, &KeyHandle) >= 0 )
{
do
{
Length = NumberOfBytes;
if( (_DWORD)NumberOfBytes )
{
if( PoolWithTag )
{
ExFreePoolWithTag(PoolWithTag, 0);
Length = NumberOfBytes;
}
PoolWithTag = ExAllocatePoolWithTag(PagedPool, Length, 0x31777445ui64);
if( !PoolWithTag )
goto LABEL_13;
Length = NumberOfBytes;
}
v5 = ZwQueryValueKey(
KeyHandle,
&ValueName,
KeyValuePartialInformation,
PoolWithTag,
Length,
(PULONG)&NumberOfBytes);
}
while( v5 == -2147483643 || v5 == -1073741789 );
if( v5 < 0 )
{
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
}
else
{
SetValueKeyInfo->CallContext = PoolWithTag;
}
}
LABEL_13:
if( KeyHandle )
ZwClose(KeyHandle);
}Referenced by:
EtwpRegTraceCallback