EtwpQueryPartitionRegistryInformation
__int64 __fastcall EtwpQueryPartitionRegistryInformation(
GUID *a1,
PVOID *a2,
_WORD *a3,
_DWORD *a4,
__int64 a5,
INT64 a6){
INT64 v10;
NTSTATUS RegistryValues;
unsigned int v13;
VOID **PoolWithTag;
NTSTATUS v15;
VOID *Environment;
VOID *Environmenta;
VOID *Environmentb;
INT64 v19;
INT64 v20;
VOID *KeyHandle;
UINT16 v22[8];
UINT16 v23[8];
_UNICODE_STRING DestinationString;
_OBJECT_ATTRIBUTES ObjectAttributes;
int v26;
_DWORD *v27;
int v28;
UINT16 *v29;
int v30;
UINT16 *v31;
_RTL_QUERY_REGISTRY_TABLE QueryTable[4];
KeyHandle = 0i64;
HIDWORD(v20) = 0;
LOWORD(v20) = 0;
*a4 = 0;
*(_QWORD *)&ObjectAttributes.Length = 48i64;
DestinationString = 0i64;
*(_OWORD *)v22 = 0i64;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
*(_OWORD *)v23 = 0i64;
RtlInitUnicodeString(&DestinationString, L"\\Registry\\Machine\\System\\CurrentControlSet\\Control");
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
RegistryValues = ZwOpenKey(
&KeyHandle,
0x20019ui64,
&ObjectAttributes,
v10,
(INT64)Environment,
v19,
v20,
(INT64)KeyHandle);
if( RegistryValues >= 0 )
{
memset(QueryTable, 0i64, sizeof(QueryTable));
v27 = a4;
QueryTable[1].DefaultType = 1;
QueryTable[0].QueryRoutine = (int(__fastcall *)(wchar_t *, unsigned int, void *, unsigned int, void *, void *))EtwpQueryRegistryCallback;
QueryTable[0].EntryContext = &v26;
QueryTable[1].QueryRoutine = (int(__fastcall *)(wchar_t *, unsigned int, void *, unsigned int, void *, void *))EtwpQueryRegistryCallback;
QueryTable[0].Name = L"ContainerType";
v28 = 1;
QueryTable[0].DefaultType = 4;
v26 = 4;
QueryTable[1].EntryContext = &v28;
QueryTable[1].Name = L"ContainerId";
QueryTable[1].DefaultData = &v20;
v29 = v22;
QueryTable[2].EntryContext = &v30;
QueryTable[2].Name = L"ContainerCorrelationId";
QueryTable[2].DefaultData = &v20;
QueryTable[2].QueryRoutine = (int(__fastcall *)(wchar_t *, unsigned int, void *, unsigned int, void *, void *))EtwpQueryRegistryCallback;
QueryTable[2].DefaultType = 1;
v30 = 1;
v31 = v23;
RegistryValues = RtlQueryRegistryValuesEx(0x40000000ui64, (const WCHAR *)KeyHandle, QueryTable, 0i64, 0i64);
if( RegistryValues >= 0 )
{
*(_QWORD *)a5 = 0i64;
if( StringToGuidNoBrackets(v22, (INT64)a1) )
*a1 = NullGuid;
LODWORD(Environmenta) = v22[0];
if( !RtlUnicodeToUTF8N(0i64, 0i64, (PULONG)&v20 + 1, *(WCHAR **)&v22[4], (UINT64)Environmenta) )
{
v13 = HIDWORD(v20);
if( HIDWORD(v20) < 0xFFFF )
{
PoolWithTag = ExAllocatePoolWithTag(0x204ui64, HIDWORD(v20), 1635218501i64);
*a2 = PoolWithTag;
if( PoolWithTag )
{
LODWORD(Environmentb) = v22[0];
v15 = RtlUnicodeToUTF8N((PCHAR)PoolWithTag, v13, (PULONG)&v20 + 1, *(WCHAR **)&v22[4], (UINT64)Environmentb);
if( !v15 || v15 == 263 )
{
*a3 = WORD2(v20);
}
else
{
ExFreePoolWithTag(*a2, 0x61777445u);
*a2 = 0i64;
}
}
}
}
RegistryValues = StringToGuidNoBrackets(v23, a6);
if( RegistryValues )
{
RegistryValues = 0;
*(GUID *)a6 = NullGuid;
}
}
}
if( KeyHandle )
ZwClose((_HANDLE)KeyHandle);
RtlFreeAnsiString((_UNICODE_STRING *)v22);
RtlFreeAnsiString((_UNICODE_STRING *)v23);
return(unsigned int)RegistryValues;
}Referenced by:
EtwInitializeSiloState
EtwpContainerResumeWnfCallback