CmGetInterfaceClassMappedProperty

NTSTATUS __stdcall CmGetInterfaceClassMappedProperty(
        HPNPCTX *hPnpCtx,
        const WCHAR *ClassGuid,
        VOID *ObjectBaseKey,
        const WCHAR *PropertyLocaleName,
        const _DEVPROPKEY *PropertyKey,
        UINT64 *PropertyType,
        UINT8 *PropertyBuffer,
        UINT64 BufferSize,
        UINT64 *PropertySize){
  NTSTATUS InterfaceClassMappedPropertyFromRegValue; 
  DEVPROPKEY **v13; 
  DEVPROPKEY *v14; 
  __int64 v15; 
  DEVPROPKEY **v17; 
  int v18; 
  DEVPROPKEY *v19; 
  __int64 v20; 
  UINT64 v21; 

  InterfaceClassMappedPropertyFromRegValue = -1073741802;
  *(_DWORD *)PropertySize = 0;
  if( !PropertyLocaleName )
  {
    v13 = &off_140983758;
    while( 1 )
    {
      v14 = *v13;
      if( *v13 && PropertyKey->pid == v14->pid )
      {
        v15 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v14->fmtid.Data1;
        if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v14->fmtid.Data1 )
          v15 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v14->fmtid.Data4;
        if( !v15 )
          break;
      }
      LODWORD(PropertyLocaleName) = (_DWORD)PropertyLocaleName + 1;
      v13 += 2;
      if( (_DWORD)PropertyLocaleName )
        goto LABEL_11;
    }
    LODWORD(v21) = BufferSize;
    InterfaceClassMappedPropertyFromRegValue = CmGetInterfaceClassMappedPropertyFromRegValue(
                                                 hPnpCtx,
                                                 (WCHAR *)ClassGuid,
                                                 ObjectBaseKey,
                                                 (_DEVPROPKEY *)PropertyKey,
                                                 PropertyType,
                                                 PropertyBuffer,
                                                 v21,
                                                 PropertySize);
    if( InterfaceClassMappedPropertyFromRegValue != -1073741802 )
      return InterfaceClassMappedPropertyFromRegValue;
LABEL_11:
    v17 = &off_140983808;
    v18 = 0;
    while( 1 )
    {
      v19 = *v17;
      if( PropertyKey->pid == (*v17)->pid )
      {
        v20 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v19->fmtid.Data1;
        if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v19->fmtid.Data1 )
          v20 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v19->fmtid.Data4;
        if( !v20 )
          break;
      }
      ++v18;
      v17 += 2;
      if( v18 )
        return InterfaceClassMappedPropertyFromRegValue;
    }
    LODWORD(v21) = BufferSize;
    return CmGetInterfaceClassMappedPropertyFromComposite(
             hPnpCtx,
             (WCHAR *)ClassGuid,
             ObjectBaseKey,
             (_DEVPROPKEY *)PropertyKey,
             PropertyType,
             PropertyBuffer,
             v21,
             PropertySize);
  }
  return InterfaceClassMappedPropertyFromRegValue;
}

Referenced by:

PnpDispatchInterfaceClass