EtwpQueryPartitionRegistryInformation
INT64 __fastcall EtwpQueryPartitionRegistryInformation(_GUID *a1, PVOID *a2, _WORD *a3, _DWORD *a4, INT64 a5, INT64 a6){
int v10;
ULONG v12;
void *PoolWithTag;
NTSTATUS v14;
UINT64 UnicodeStringByteCount;
UINT64 UnicodeStringByteCounta;
__int16 v17[2];
ULONG UTF8StringActualByteCount;
void *KeyHandle;
PCWCH UnicodeStringSource[2];
struct _UNICODE_STRING UnicodeString;
struct _UNICODE_STRING DestinationString;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
int v24;
_DWORD *v25;
int v26;
PCWCH *v27;
int v28;
struct _UNICODE_STRING *p_UnicodeString;
_RTL_QUERY_REGISTRY_TABLE result;
INT64(__stdcall *v31)(WCHAR *, UINT64, PVOID, UINT64, PVOID, PVOID);
const wchar_t *v32;
int *v33;
int v34;
__int16 *v35;
INT64(__stdcall *v36)(WCHAR *, UINT64, PVOID, UINT64, PVOID, PVOID);
const wchar_t *v37;
int *v38;
int v39;
__int16 *v40;
KeyHandle = 0i64;
UTF8StringActualByteCount = 0;
v17[0] = 0;
*a4 = 0;
*(_QWORD *)&ObjectAttributes.Length = 48i64;
DestinationString = 0i64;
*(_OWORD *)UnicodeStringSource = 0i64;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
UnicodeString = 0i64;
RtlInitUnicodeString(&DestinationString, L"\\Registry\\Machine\\System\\CurrentControlSet\\Control", (WCHAR)a3);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v10 = ZwOpenKey(&KeyHandle, 0x20019u, &ObjectAttributes);
if( v10 >= 0 )
{
memset((INT64)&result, 0i64);
v25 = a4;
v34 = 1;
result.QueryRoutine = (int(__fastcall *)(wchar_t *, unsigned int, void *, unsigned int, void *, void *))EtwpQueryRegistryCallback;
result.EntryContext = &v24;
v31 = EtwpQueryRegistryCallback;
result.Name = L"ContainerType";
v26 = 1;
result.DefaultType = 4;
v24 = 4;
v33 = &v26;
v32 = L"ContainerId";
v35 = v17;
v27 = UnicodeStringSource;
v38 = &v28;
v37 = L"ContainerCorrelationId";
v40 = v17;
v36 = EtwpQueryRegistryCallback;
v39 = 1;
v28 = 1;
p_UnicodeString = &UnicodeString;
v10 = RtlQueryRegistryValuesEx(0x40000000ui64, (const WCHAR *)KeyHandle, &result, 0i64, 0i64);
if( v10 >= 0 )
{
*(_QWORD *)a5 = 0i64;
if( (unsigned int)StringToGuidNoBrackets((UINT16 *)UnicodeStringSource, (INT64)a1) )
*a1 = NullGuid;
LODWORD(UnicodeStringByteCount) = LOWORD(UnicodeStringSource[0]);
if( !RtlUnicodeToUTF8N(
0i64,
0i64,
(UINT64 *)&UTF8StringActualByteCount,
(PWCHAR)UnicodeStringSource[1],
UnicodeStringByteCount) )
{
v12 = UTF8StringActualByteCount;
if( UTF8StringActualByteCount < 0xFFFF )
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNxCacheAligned, UTF8StringActualByteCount, 0x61777445ui64);
*a2 = PoolWithTag;
if( PoolWithTag )
{
LODWORD(UnicodeStringByteCounta) = LOWORD(UnicodeStringSource[0]);
v14 = RtlUnicodeToUTF8N(
(PSTR)PoolWithTag,
v12,
(UINT64 *)&UTF8StringActualByteCount,
(PWCHAR)UnicodeStringSource[1],
UnicodeStringByteCounta);
if( !v14 || v14 == 263 )
{
*a3 = UTF8StringActualByteCount;
}
else
{
ExFreePoolWithTag(*a2, 0x61777445u);
*a2 = 0i64;
}
}
}
}
v10 = StringToGuidNoBrackets(&UnicodeString.Length, a6);
if( v10 )
{
v10 = 0;
*(GUID *)a6 = NullGuid;
}
}
}
if( KeyHandle )
ZwClose(KeyHandle);
RtlFreeAnsiString((_UNICODE_STRING *)UnicodeStringSource);
RtlFreeAnsiString(&UnicodeString);
return(unsigned int)v10;
}Referenced by:
EtwInitializeSiloState
EtwpContainerResumeWnfCallback