CmGetInstallerClassMappedPropertyFromCoInstallers

NTSTATUS __stdcall CmGetInstallerClassMappedPropertyFromCoInstallers(
        HPNPCTX *hPnpCtx,
        const WCHAR *ClassGuid,
        const _DEVPROPKEY *PropertyKey,
        UINT64 *PropertyType,
        UINT8 *PropertyBuffer,
        INT64 BufferSize,
        UINT64 *PropertySize){
  UINT64 *v7; 
  NTSTATUS v8; 
  unsigned __int64 v9; 
  int v12; 
  int CachedContextBaseKey; 
  NTSTATUS v14; 
  _OBJECT_TYPE *v16; 
  _UNICODE_STRING DestinationString; 
  int v18; 
  int v19; 
  INT64 v20; 

  v19 = HIDWORD(PropertyKey);
  v7 = PropertySize;
  v8 = 0;
  v9 = (unsigned __int64)PropertyBuffer;
  v18 = 0;
  v20 = 0i64;
  *(_DWORD *)PropertyType = 0;
  *(_DWORD *)v7 = 0;
  if( v9 )
  {
    v12 = BufferSize;
    v9 &= -(__int64)((_DWORD)BufferSize != 0);
  }
  else
  {
    v12 = 0;
  }
  CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(hPnpCtx, PNPCTX_BASE_KEY_TYPE_MAX, (VOID **)&v20);
  if( CachedContextBaseKey < 0 )
    return CachedContextBaseKey;
  LODWORD(PropertySize) = v12;
  v14 = RegRtlQueryValue((VOID *)v20, ClassGuid, &v18, (VOID *)v9, (__int64)&PropertySize);
  if( v14 == -1073741772 || v14 == -1073741444 )
    return -1073741275;
  if( v14 && v14 != -1073741789 )
    return v14;
  if( v18 == 7 )
  {
    *(_DWORD *)v7 = (_DWORD)PropertySize;
    *(_DWORD *)PropertyType = 8210;
    if( v14 || !v12 )
      return -1073741789;
  }
  else
  {
    DestinationString = 0i64;
    if( RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)ClassGuid) >= 0 )
      ZwDeleteValueKey((VOID *)v20, &DestinationString, v16);
  }
  return v8;
}

Referenced by:

CmGetInstallerClassMappedProperty
CmGetInstallerClassMappedPropertyKeys