diff --git a/ua/registry/athena.classes.after.reg b/ua/registry/athena.classes.after.reg new file mode 100644 index 0000000..f094aed Binary files /dev/null and b/ua/registry/athena.classes.after.reg differ diff --git a/ua/registry/athena.classes.before.reg b/ua/registry/athena.classes.before.reg new file mode 100644 index 0000000..a747470 Binary files /dev/null and b/ua/registry/athena.classes.before.reg differ diff --git a/ua/registry/athena.uasrdevs.reg.diff b/ua/registry/athena.uasrdevs.reg.diff new file mode 100644 index 0000000..16e9060 --- /dev/null +++ b/ua/registry/athena.uasrdevs.reg.diff @@ -0,0 +1,111 @@ +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}] +@="_IQSRDevEvents" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32] +@="{00020420-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}] +@="IQSRDev" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32] +@="{00020424-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev] +@="QSRDev Class" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CLSID] +@="{35578409-F9F5-43e8-A6BD-8B77199ED854}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CurVer] +@="QSRDevice.QSRDev.1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1] +@="QSRDev Class" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1\CLSID] +@="{35578409-F9F5-43e8-A6BD-8B77199ED854}" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0] +@="QSRDevice 1.0 Type Library" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32] +@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\UASRDEVQ.EXE" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS] +@="0" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR] +@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}] +@="QSRDev Class" +"AppID"="{C123476B-ABB6-4bcc-B557-2FDC0CDCD6A8}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\LocalServer32] +@="\"C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\60985B~1.3\\UASRDEVQ.EXE\"" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\ProgID] +@="QSRDevice.QSRDev.1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\Programmable] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\TypeLib] +@="{CD886C7B-B61C-49cf-B3B8-90DB303A502A}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\VersionIndependentProgID] +@="QSRDevice.QSRDev" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}] +@="_IQSRDevEvents" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32] +@="{00020420-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}] +@="IQSRDev" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32] +@="{00020424-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0] +@="QSRDevice 1.0 Type Library" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32] +@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\UASRDEVQ.EXE" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS] +@="0" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR] +@="C:\\temp\\UA\\UA-SUITE\\39.11\\UASRDEV\\cupps\\6.0.3\\" \ No newline at end of file diff --git a/ua/registry/prometheus.uasrdevs.reg.diff b/ua/registry/prometheus.uasrdevs.reg.diff new file mode 100644 index 0000000..32057b1 --- /dev/null +++ b/ua/registry/prometheus.uasrdevs.reg.diff @@ -0,0 +1,94 @@ +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev] +@="QSRDev Class" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CLSID] +@="{35578409-F9F5-43e8-A6BD-8B77199ED854}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev\CurVer] +@="QSRDevice.QSRDev.1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1] +@="QSRDev Class" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QSRDevice.QSRDev.1\CLSID] +@="{35578409-F9F5-43e8-A6BD-8B77199ED854}" + + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0] +@="QSRDevice 1.0 Type Library" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32] +@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\UASRDEVS.EXE" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS] +@="0" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR] +@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\" + + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}] +@="QSRDev Class" +"AppID"="{C123476B-ABB6-4bcc-B557-2FDC0CDCD6A8}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\LocalServer32] +@="\"C:\\temp\\ua\\UA-SUITE\\391~1.2\\UASRDEV\\6BEB7~1.0-C\\UASRDEVS.EXE\"" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\ProgID] +@="QSRDevice.QSRDev.1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\Programmable] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\TypeLib] +@="{CD886C7B-B61C-49cf-B3B8-90DB303A502A}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{35578409-F9F5-43e8-A6BD-8B77199ED854}\VersionIndependentProgID] +@="QSRDevice.QSRDev" + + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}] +@="_IQSRDevEvents" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\ProxyStubClsid32] +@="{00020420-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{17DCFB07-18A9-4FFE-B34D-37B91D809C41}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}] +@="IQSRDev" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\ProxyStubClsid32] +@="{00020424-0000-0000-C000-000000000046}" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\Interface\{6B15E61A-381F-41E7-8B65-BA386473FE8C}\TypeLib] +@="{CD886C7B-B61C-49CF-B3B8-90DB303A502A}" +"Version"="1.0" + + + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0] +@="QSRDevice 1.0 Type Library" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0] + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\0\win32] +@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\UASRDEVS.EXE" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\FLAGS] +@="0" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{CD886C7B-B61C-49CF-B3B8-90DB303A502A}\1.0\HELPDIR] +@="C:\\temp\\ua\\UA-SUITE\\39.1.2\\UASRDEV\\6.0-cute\\" \ No newline at end of file diff --git a/ua/registry/qlogic-devapp-tool.ps1 b/ua/registry/qlogic-devapp-tool.ps1 index cb3689a..d101394 100644 --- a/ua/registry/qlogic-devapp-tool.ps1 +++ b/ua/registry/qlogic-devapp-tool.ps1 @@ -147,23 +147,18 @@ try { } $progId = "$versionIndependentProgId.1"; -$proxyStubClsid = '00020420-0000-0000-C000-000000000046' -$proxyStubClsid32 = $proxyStubClsid +$proxyStubClsid32 = '00020420-0000-0000-C000-000000000046' $typeLibVersion = '1.0' -if ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64') { - $architectureSeparator = '\Wow6432Node' -} else { - $architectureSeparator = '\' -} - -$template = New-Object System.Collections.Generic.List[System.Object]; - -# CLSID keys -$template.AddRange( - @( +function Get-ClsidKeys { + param( + [Parameter(Mandatory=$true)] + [string] + $architectureNode + ) + return @( @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}" Values = @( @{ Name = '(default)' @@ -176,7 +171,7 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\LocalServer32" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\LocalServer32" Values = @( @{ Name = '(default)' @@ -185,7 +180,7 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\ProgID" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\ProgID" Values = @( @{ Name = '(default)' @@ -194,11 +189,11 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\Programmable" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\Programmable" Values = @() }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\TypeLib" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\TypeLib" Values = @( @{ Name = '(default)' @@ -207,17 +202,21 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\CLSID\{$clsid}\VersionIndependentProgID" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)CLSID\{$clsid}\VersionIndependentProgID" Values = @() } ) -); +} -# Interface keys -$template.AddRange( - @( +function Get-InterfaceKeys { + param( + [Parameter(Mandatory=$true)] + [string] + $architectureNode + ) + return @( @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}" Values = @( @{ Name = '(default)' @@ -226,25 +225,16 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\ProxyStubClsid" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\ProxyStubClsid32" Values = @( @{ Name = '(default)' - Value = "{$proxyStubClsid}" + Value = "{$proxyStubClsid32}" } ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\ProxyStubClsid32" - Values = @( - @{ - Name = '(default)' - Value = "{$proxyStubClsid}" - } - ) - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$interfaceId}\TypeLib" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$interfaceId}\TypeLib" Values = @( @{ Name = '(default)' @@ -256,7 +246,7 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}" Values = @( @{ Name = '(default)' @@ -265,16 +255,7 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\ProxyStubClsid" - Values = @( - @{ - Name = '(default)' - Value = "{$proxyStubClsid}" - } - ) - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\ProxyStubClsid32" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\ProxyStubClsid32" Values = @( @{ Name = '(default)' @@ -283,7 +264,7 @@ $template.AddRange( ) }, @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\Interface\{$eventInterfaceId}\TypeLib" + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)Interface\{$eventInterfaceId}\TypeLib" Values = @( @{ Name = '(default)' @@ -296,11 +277,10 @@ $template.AddRange( ) } ) -) +} -# Prog ID keys -$template.AddRange( - @( +function Get-ProgIdKeys { + return @( @{ Key = "$($registryHive):\SOFTWARE\Classes\$progId" Values = @( @@ -347,97 +327,407 @@ $template.AddRange( ) } ) -) - -# TypeLib keys (add to both standard and Wow6432Node if architecture is x64) -if ($architectureSeparator -eq '\') { - $typeLibIterations = 1 -} else { - $typeLibIterations = 2 -} -for ($i = 0; $i -lt $typeLibIterations; $i++) { - if ($i -eq 1) { - $architectureSeparator = '\' - } - $template.AddRange( - @( - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}" - Values = @() - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion" - Values = @( - @{ - Name = '(default)' - Value = $typeLibLabel - } - ) - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\0" - Values = @() - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\0\win32" - Values = @( - @{ - Name = '(default)' - Value = $comServerNetworkPath - } - ) - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\FLAGS" - Values = @( - @{ - Name = '(default)' - Value = '0' - } - ) - }, - @{ - Key = "$($registryHive):\SOFTWARE\Classes$($architectureSeparator)\TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR" - Values = @( - @{ - Name = '(default)' - Value = "$comServerDir\" - } - ) - } - ) - ) } -function DoAction { +function Get-TypeLibKeys { param( [Parameter(Mandatory=$true)] - [array] - $template + [string] + $architectureNode ) - foreach ($keyEl in $template) { - if ($action -eq 'import') { - #Write-Debug $keyEl.Key + return @( + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}" + Values = @() + }, + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion" + Values = @( + @{ + Name = '(default)' + Value = $typeLibLabel + } + ) + }, + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0" + Values = @() + }, + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\0\win32" + Values = @( + @{ + Name = '(default)' + Value = $comServerNetworkPath + } + ) + }, + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\FLAGS" + Values = @( + @{ + Name = '(default)' + Value = '0' + } + ) + }, + @{ + Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR" + Values = @( + @{ + Name = '(default)' + Value = "$comServerDir\" + } + ) + } + ) +} + +# $template = New-Object System.Collections.Generic.List[System.Object]; + +# # CLSID keys +# $template.AddRange( +# @( +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}" +# Values = @( +# @{ +# Name = '(default)' +# Value = $classLabel +# }, +# @{ +# Name = 'AppID' +# Value = "{$appId}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\LocalServer32" +# Values = @( +# @{ +# Name = '(default)' +# Value = $comServerPath +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\ProgID" +# Values = @( +# @{ +# Name = '(default)' +# Value = $progId +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\Programmable" +# Values = @() +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\TypeLib" +# Values = @( +# @{ +# Name = '(default)' +# Value = $typeLibId +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\CLSID\{$clsid}\VersionIndependentProgID" +# Values = @() +# } +# ) +# ); + +# # Interface keys +# $template.AddRange( +# @( +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}" +# Values = @( +# @{ +# Name = '(default)' +# Value = $interfaceName +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\ProxyStubClsid" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$proxyStubClsid}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\ProxyStubClsid32" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$proxyStubClsid}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$interfaceId}\TypeLib" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$typeLibId}" +# }, +# @{ +# Name = 'Version' +# Value = $typeLibVersion } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}" +# Values = @( +# @{ +# Name = '(default)' +# Value = $eventInterfaceName +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\ProxyStubClsid" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$proxyStubClsid}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\ProxyStubClsid32" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$proxyStubClsid32}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\Interface\{$eventInterfaceId}\TypeLib" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$typeLibId}" +# } +# @{ +# Name = 'Version' +# Value = $typeLibVersion +# } +# ) +# } +# ) +# ) + +# # Prog ID keys +# $template.AddRange( +# @( +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes\$progId" +# Values = @( +# @{ +# Name = '(default)' +# Value = $classLabel +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes\$progId\CLSID" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$clsid}" +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes\$progId\CurVer" +# Values = @( +# @{ +# Name = '(default)' +# Value = $versionIndependentProgId +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes\$versionIndependentProgId" +# Values = @( +# @{ +# Name = '(default)' +# Value = $classLabel +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes\$versionIndependentProgId\CLSID" +# Values = @( +# @{ +# Name = '(default)' +# Value = "{$clsid}" +# } +# ) +# } +# ) +# ) + +# # TypeLib keys (add to both standard and Wow6432Node if architecture is x64) +# if ($architectureNode -eq '\') { +# $typeLibIterations = 1 +# } else { +# $typeLibIterations = 2 +# } +# for ($i = 0; $i -lt $typeLibIterations; $i++) { +# if ($i -eq 1) { +# $architectureNode = '\' +# } +# $template.AddRange( +# @( +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}" +# Values = @() +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion" +# Values = @( +# @{ +# Name = '(default)' +# Value = $typeLibLabel +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\0" +# Values = @() +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\0\win32" +# Values = @( +# @{ +# Name = '(default)' +# Value = $comServerNetworkPath +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\FLAGS" +# Values = @( +# @{ +# Name = '(default)' +# Value = '0' +# } +# ) +# }, +# @{ +# Key = "$($registryHive):\SOFTWARE\Classes$($architectureNode)\TypeLib\{$typeLibId}\$typeLibVersion\HELPDIR" +# Values = @( +# @{ +# Name = '(default)' +# Value = "$comServerDir\" +# } +# ) +# } +# ) +# ) +# } + +function Get-Keys { + param( + [Parameter(Mandatory=$false)] + [switch] + $bothArchitectures = $false + ) + + if ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64') { + $wow6432Node = '\Wow6432Node\' + } else { + $wow6432Node = '\' + } + + $keys = New-Object System.Collections.Generic.List[System.Object] + $keys.AddRange((Get-ProgIdKeys)) + $keys.AddRange((Get-ClsidKeys -architectureNode $wow6432Node)) + $keys.AddRange((Get-InterfaceKeys -architectureNode $wow6432Node)) + $keys.AddRange((Get-TypeLibKeys -architectureNode $wow6432Node)) + if ($wow6432Node -ne '\') { + if ($bothArchitectures) { + $keys.AddRange((Get-ClsidKeys -architectureNode $wow6432Node)) + } + $keys.AddRange((Get-InterfaceKeys -architectureNode '\')) + $keys.AddRange((Get-TypeLibKeys -architectureNode '\')) + } + return $keys +} + +switch ($action) { + 'delete' { + $keys = Get-Keys -bothArchitectures + foreach ($key in $keys) { try { - $key = New-Item -Path $keyEl.Key -Force - Write-Host "Created registry key: $($key.PSPath)" + Write-Debug "Deleting key: $($key.Key)" + # Remove-Item -Path $key.Key -Recurse -Force + # Write-Host "Deleted registry key: $($key.Key)" } catch { - Write-Error "Failed to create registry key: $($keyEl.Key)" + Write-Error "Failed to delete key: $($key.Key)" continue } - foreach ($valueEl in $keyEl.Values) { + } + + } + 'import' { + $keys = Get-Keys + foreach ($key in $keys) { + try { + Write-Debug "Importing key: $($key.Key)" + # $newKey = New-Item -Path $keyEl.Key -Force + # Write-Host "Created registry key: $($newKey.PSPath)" + } + catch { + Write-Error "Failed to create key: $($key.Key)" + continue + } + foreach ($value in $key.Values) { try { - New-ItemProperty -Path $keyEl.Key -Name $valueEl.Name -Value $valueEl.Value -PropertyType 'String' -Force - Write-Host "Created registry value: $($valueEl.Name) in $($keyEl.Key)" + Write-Debug "Importing value: $($value.Name):$($value.Value)" + #New-ItemProperty -Path $key.Key -Name $value.Name -Value $value.Value -PropertyType 'String' -Force + #Write-Host "Created registry value: $($value.Name) in $($key.Key)" } catch { - Write-Error "Failed to create registry value: $($valueEl.Name) in $($keyEl.Key)" + Write-Error "Failed to create registry value: $($value.Name) in $($key.Key)" + continue + } + } + } + } + default { + $keys = Get-Keys -bothArchitectures + foreach ($key in $keys) { + try { + Write-Debug "Querying key: $($key.Key)" + # $key = Get-Item -Path $keyEl.Key -ErrorAction Stop + $foundKey = Get-Item -Path $key.Key -ErrorAction Stop + Write-Host "[$($foundKey.Key)]" + } + catch { + Write-Debug "Failed to find registry key: $($key.Key)" + continue + } + foreach ($value in $foundKey.Values) { + try { + # $foundValue = Get-ItemPropertyValue -Path $key.Key -Name $value.Name -ErrorAction Stop + #$foundValue = Get-ItemPropertyValue -Path $key.Key -Name $value.Name -ErrorAction Stop + Write-Host "$($foundValue.Name)=$($foundValue.Value)" + } + catch { + Write-Debug "Failed to find registry value: $($valueEl.Name) in $($key.Key)" continue } } } } } - -DoAction $template