PiDrvDbResolveKeyFilePaths
NTSTATUS __stdcall PiDrvDbResolveKeyFilePaths(_HANDLE Handle){
INT64 v1;
int Node;
unsigned __int16 Length;
wchar_t *Buffer;
unsigned __int64 v5;
const wchar_t *v6;
int v7;
__int64 v8;
int NodeSystemRoot;
_UNICODE_STRING *v10;
_UNICODE_STRING DestinationString;
_UNICODE_STRING String2;
_UNICODE_STRING *v14;
v1 = *(_QWORD *)&Handle;
v14 = 0i64;
DestinationString = 0i64;
String2 = 0i64;
RtlInitUnicodeString(&DestinationString, 0i64);
Node = IopQueryRegistryKeySystemPath(v1, &DestinationString);
if( Node >= 0 )
{
Length = DestinationString.Length;
Buffer = DestinationString.Buffer;
if( DestinationString.Length >= 2u )
{
v5 = (unsigned __int64)DestinationString.Length >> 1;
if( DestinationString.Buffer[v5 - 1] == 92 )
{
DestinationString.Buffer[v5 - 1] = 0;
Buffer = DestinationString.Buffer;
Length = DestinationString.Length - 2;
DestinationString.Length -= 2;
}
}
if( Length <= 0x1Cu
|| !(unsigned __int8)RtlPrefixUnicodeString(&PiDrvDbDriverStoresRoot, &DestinationString, 1u)
|| (v6 = Buffer + 14, Buffer[13] != 92) )
{
v6 = L"SYSTEM";
}
RtlInitUnicodeString(&String2, v6);
Node = PiDrvDbFindNode(&String2);
if( Node >= 0 )
{
if( (MEMORY[0x1EC] & 1) != 0 )
{
v7 = CmIsStateSeparationEnabled() ? 2 : 0;
NodeSystemRoot = PiDrvDbGetNodeSystemRoot(v8, &v14);
v10 = v14;
if( NodeSystemRoot < 0 )
v10 = 0i64;
Node = PiDrvDbResolveFilePathKeyValues(v1, v7 + 1, &DestinationString, v10);
}
else
{
Node = 0;
}
}
}
RtlFreeAnsiString(&DestinationString);
return Node;
}Referenced by:
PiDevCfgInitResolveContext