SdbpCheckMatchingRegistryEntry
NTSTATUS __stdcall SdbpCheckMatchingRegistryEntry(
PWCHAR pwszKeyPath,
PWCHAR pwszValueNameDb,
UINT64 ulValueTypeDb,
PWCHAR pwszValueDataDb,
UINT64 dwValueDataDb,
UINT64 qwValueDataDb,
UINT8 *pValueDataDb,
UINT64 pValueDataSize,
INT64 *bEntryMatchedOut){
unsigned int v10;
NTSTATUS v12;
INT64 v13;
INT64 v14;
int v15;
INT64 a5;
INT64 a5a;
INT64 a6;
INT64 a6a;
PVOID buf1;
PVOID buf1a;
INT64 count;
INT64 counta;
VOID *KeyHandle;
_OBJECT_ATTRIBUTES ObjectAttributes;
_UNICODE_STRING DestinationString;
__int64 v28;
int v29;
WCHAR pszDest[264];
pszDest[0] = 0;
KeyHandle = 0i64;
v28 = 0i64;
v10 = ulValueTypeDb;
*(_DWORD *)bEntryMatchedOut = 0;
v29 = 0;
v12 = 0;
DestinationString = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
if( RtlStringCchPrintfW(pszDest, 0x104ui64, (WCHAR *)L"\\REGISTRY\\MACHINE\\%s") < 0 )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpCheckMatchingRegistryEntry",
0x4E4ui64,
(INT8 *)"Failed to construct full key path");
goto LABEL_10;
}
RtlInitUnicodeString(&DestinationString, pszDest);
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwOpenKey(&KeyHandle, 0x20019ui64, &ObjectAttributes, v13, a5, a6, (INT64)buf1, count) >= 0 )
goto LABEL_9;
ZwQuerySystemInformation();
if( v15 < 0 )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpCheckMatchingRegistryEntry",
0x507ui64,
(INT8 *)"Failed to get processor architecture [%x]");
goto LABEL_10;
}
if( (_WORD)v28 == 9
&& ZwOpenKey(&KeyHandle, 0x20219ui64, &ObjectAttributes, v14, a5a, a6a, (INT64)buf1a, counta) >= 0 )
{
LABEL_9:
LODWORD(a5a) = dwValueDataDb;
v12 = SdbpCheckMatchingRegistryValue(
(_HANDLE)KeyHandle,
pwszValueNameDb,
v10,
pwszValueDataDb,
a5a,
qwValueDataDb,
pValueDataDb,
pValueDataSize,
(INT64)bEntryMatchedOut);
}
else
{
v12 = 1;
}
LABEL_10:
if( KeyHandle )
ZwClose((_HANDLE)KeyHandle);
return v12;
}Referenced by:
SdbpCheckMatchingRegistry