PipGetDriverKsrGuidRegistryValue
NTSTATUS __stdcall PipGetDriverKsrGuidRegistryValue(VOID *a1, _GUID *a2){
NTSTATUS RegistryValue;
_WORD *v4;
NTSTATUS v5;
unsigned int v6;
__int64 v7;
_WORD *v8;
wchar_t *v9;
_UNICODE_STRING GuidString;
PVOID P;
*(_DWORD *)(&GuidString.MaximumLength + 1) = 0;
P = 0i64;
RegistryValue = IopGetRegistryValue(a1, (PWCHAR)L"KsrGuid", 0i64, (_KEY_VALUE_FULL_INFORMATION **)&P);
v4 = P;
v5 = RegistryValue;
if( RegistryValue >= 0 && *((_DWORD *)P + 1) == 1 )
{
v6 = *((_DWORD *)P + 3);
if( v6 >= 2 )
{
v7 = *((unsigned int *)P + 2);
if( !*(_WORD *)((char *)P + 2 * ((unsigned __int64)v6 >> 1) + v7 - 2) )
{
v8 = (char *)P + v7;
LODWORD(P) = 0;
PnpRegSzToString(v8, v6, (int *)&P);
GuidString.MaximumLength = v4[6];
v9 = (_WORD *)((char *)v4 + *((unsigned int *)v4 + 2));
GuidString.Length = (unsigned __int16)P;
GuidString.Buffer = v9;
v5 = RtlGUIDFromString(&GuidString, a2);
}
}
}
if( v4 )
ExFreePoolWithTag(v4, 0);
return v5;
}Referenced by:
PipGetDriverKsrGuid