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