Search notes:

Registry: HKEY_CLASSES_ROOT\CLSID

A CLSID is a GUID that identifies a COM class object. This CLSID is needed when a COM object is created with CoCreateInstanceEx().
With one exception, all keys below HKEY_CLASSES_ROOT\CLSID are such GUIDs (see HKCR/CLSID/{GUID}).
This exception is HKEY_CLASSES_ROOT\CLSID\CLSID.
This is because HKEY_CLASSES_ROOT\CLSID can apparently be considered a special ProgId (see also HKEY_CLASSES_ROOT\CLSID\0000031A-0000-0000-C000-000000000046).

PowerShell script

The following Powershell script prints the CLSIDs, GUIDs and prog ids.
set-strictMode -version latest

$null = new-psDrive -name HKCR -psProvider registry -root HKEY_CLASSES_ROOT

[Microsoft.Win32.RegistryKey] $regCLSIDs = get-item hkcr:/CLSID

foreach ($guid in $regCLSIDs.GetSubKeyNames()) {

   $regCLSID = $regCLSIDs.OpenSubKey($guid)
   $COMobj = $regCLSID.GetValue('')

   $COMobjLen = 50
   if ($COMobj -ne $null -and $COMobj.Length -gt $COMobjLen) {
      $COMobj = $COMobj.substring(0, $COMobjLen-3) + '...'
   }


   $progIdReg = $regCLSID.OpenSubKey('ProgID')

   if ($progIdReg) {
      $progId    = $progIdReg.GetValue('')

   }
   else {
      $progId = ''
   }

   $progIdLen = 50
   if ($COMobj -ne $null -and $COMobj.Length -gt $progIdLen) {
      $progId  = $progId.substring(0, $COMobjLen-3) + '...'
   }
  "{0,-$progIdLen}  {1}  {2,-$progIdLen}" -f $COMobj, $guid, $progId

}
Github repository about-Windows-Registry, path: /HKEY_CLASSES_ROOT/CLSID/list-COM-objects.ps1

See also

HKEY_CLASSES_ROOT\CLSID\{CLSID-id-of-OLE-DB-provider}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\{CLSID-of-control-panel-item}
The method GetTypeFromCLSID of the .NET class System.Runtime.InteropServices.Marshal.

Index