Add COM registration verification script
Test-ComRegistration.ps1 registers all 10 COM server DLLs via regasm and verifies all 50 CLSIDs appear in the registry. Supports -Build to compile first and -Unregister to clean up. Checks both native and WOW6432Node registry paths for 32-bit COM on 64-bit Windows. Result: 50/50 CLSIDs pass, 0 GUID mismatches vs original Decal. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f0b6fedc9b
commit
6a67ec2056
2 changed files with 356 additions and 0 deletions
111
docs/plans/2026-02-08-com-registration-test.md
Normal file
111
docs/plans/2026-02-08-com-registration-test.md
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
# COM Registration Test - Implementation Plan
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**Goal:** Verify all 10 COM server DLLs register correctly with regasm and their CLSIDs match the original Decal v2.9.8.3.
|
||||
|
||||
**Architecture:** Build a PowerShell verification script that: (1) registers each DLL with regasm, (2) queries the registry for expected CLSIDs, (3) reports pass/fail per GUID. We also cross-reference our [Guid] attributes against the original .rgs files from source_checkout.
|
||||
|
||||
**Tech Stack:** regasm.exe (.NET Framework 4.x), PowerShell, Windows Registry
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Cross-Reference GUIDs Against Original .rgs Files
|
||||
|
||||
**Files:**
|
||||
- Read: `source_checkout/Decal/*.rgs` (original ATL registry scripts)
|
||||
- Read: `source_checkout/DecalControls/*.rgs`
|
||||
- Read: `source_checkout/DecalFilters/*.rgs`
|
||||
- Read: `source_checkout/DecalInput/*.rgs`
|
||||
- Read: `source_checkout/DecalNet/*.rgs`
|
||||
- Read: `source_checkout/DecalDat/*.rgs`
|
||||
- Read: All `*Impl.cs` files in `reconstructed/Managed/Decal.*/`
|
||||
|
||||
**Step 1: Extract GUIDs from .rgs files**
|
||||
Parse each .rgs file for CLSID patterns like `{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}`.
|
||||
|
||||
**Step 2: Extract GUIDs from our [Guid("...")] attributes**
|
||||
Grep all Impl.cs files for Guid attributes.
|
||||
|
||||
**Step 3: Compare and report mismatches**
|
||||
Any GUID in our code that doesn't match the original .rgs is a critical bug.
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Write the COM Registration Test Script
|
||||
|
||||
**Files:**
|
||||
- Create: `reconstructed/tools/Test-ComRegistration.ps1`
|
||||
|
||||
**Step 1: Write PowerShell script**
|
||||
|
||||
The script should:
|
||||
1. Find regasm.exe (32-bit .NET Framework 4.x)
|
||||
2. Build the solution if needed
|
||||
3. Register each of the 10 DLLs with `regasm /codebase`
|
||||
4. Query registry for each expected CLSID at `HKCR\CLSID\{GUID}\InprocServer32`
|
||||
5. Verify the registered DLL path points to our built assembly
|
||||
6. Report pass/fail per DLL and per GUID
|
||||
7. Optionally unregister with `regasm /unregister`
|
||||
|
||||
**Step 2: Run the script**
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File reconstructed/tools/Test-ComRegistration.ps1
|
||||
```
|
||||
|
||||
Expected: All 55 CLSIDs register and appear in registry.
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add reconstructed/tools/Test-ComRegistration.ps1
|
||||
git commit -m "feat: add COM registration verification script"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 3: Run Registration and Fix Any Issues
|
||||
|
||||
**Step 1: Execute registration**
|
||||
Run regasm on each DLL and capture output.
|
||||
|
||||
**Step 2: Investigate any failures**
|
||||
Common issues:
|
||||
- Missing dependencies (Interop DLLs not in same directory)
|
||||
- x86 vs x64 regasm mismatch
|
||||
- Missing ComVisible or Guid attributes
|
||||
|
||||
**Step 3: Fix and re-test until all pass**
|
||||
|
||||
**Step 4: Commit fixes**
|
||||
|
||||
---
|
||||
|
||||
### Task 4: Unregister and Document Results
|
||||
|
||||
**Step 1: Run unregister to clean up**
|
||||
```powershell
|
||||
regasm /unregister Decal.DecalDat.dll
|
||||
```
|
||||
|
||||
**Step 2: Verify CLSIDs are removed from registry**
|
||||
|
||||
**Step 3: Document results in a test report**
|
||||
|
||||
---
|
||||
|
||||
## DLL-to-GUID Reference (55 CLSIDs across 10 DLLs)
|
||||
|
||||
| DLL | Classes | CLSIDs |
|
||||
|-----|---------|--------|
|
||||
| Decal.DecalDat.dll | 3 | DatService, DatStream, DatLibrary |
|
||||
| Decal.DHS.dll | 2 | HotkeySystem, Hotkey |
|
||||
| Decal.SpellFilter.dll | 3 | Spells, Spell, Component |
|
||||
| Decal.DecalInput.dll | 6 | InputService, Hotkey, WndMsg, WinMsgHook, Timer, InputBuffer |
|
||||
| Decal.DecalNet.dll | 2 | NetService, WebRequest |
|
||||
| Decal.DecalFilters.dll | 7 | World, WorldObject, WorldIterator, CharacterStats, EchoFilter, EchoFilter2, Prefilter |
|
||||
| Decal.Core.dll | 4 | DecalCore, ACHooks, PluginSite2, DecalEnum |
|
||||
| Decal.DecalControls.dll | 17 | Checkbox, List, StaticText, Choice, Progress, FixedLayout, BorderLayout, PageLayout, TextColumn, IconColumn, CheckColumn, DerethMap, Edit, Scroller, PushButton, Notebook, Slider |
|
||||
| Decal.DecalRender.dll | 4 | RenderService, HUDBackground, HUDView, RenderTargetWrapper |
|
||||
| Decal.D3DService.dll | 2 | D3DService, D3DObj |
|
||||
Loading…
Add table
Add a link
Reference in a new issue