Skip to content

Instantly share code, notes, and snippets.

@minanagehsalalma
Last active May 5, 2026 11:22
Show Gist options
  • Select an option

  • Save minanagehsalalma/25c12d9d9f3a9927ad5c711dced2f92a to your computer and use it in GitHub Desktop.

Select an option

Save minanagehsalalma/25c12d9d9f3a9927ad5c711dced2f92a to your computer and use it in GitHub Desktop.
IDM 0x80070005 in Chrome: traced root cause, investigation notes, and reusable PowerShell fix

IDM 0x80070005 in Chrome: traced root cause and exact fix

This note documents a real case where Internet Download Manager showed:

Cannot transfer the download to IDM

Error 0x80070005

The failure looked like a generic IDM or Chrome integration problem, but the actual root cause was a corrupted per-user COM override in the current Windows profile.

Symptom

  • Clicking IDM integration in Chrome failed with 0x80070005.
  • Sometimes IDM did not trigger at all.
  • IDM itself still worked for direct/manual downloads.
  • The failure reproduced across multiple sites, not just one video host.

What we checked first

We ruled out the common false leads first:

  • Reset IDM profile/state.
  • Repaired and reinstalled IDM.
  • Verified Chrome extension state.
  • Checked the native messaging bridge.
  • Checked IDM's localhost bridge behavior.
  • Confirmed the issue was not limited to a single website.

Those steps changed the surface behavior, but they did not remove the actual failure.

The trace that mattered

The useful evidence came from Procmon during the exact IDM click path.

Here is how Procmon was actually used:

  1. Start Procmon capture immediately before reproducing the IDM failure.
  2. Trigger the failing Chrome-to-IDM action once.
  3. Stop the capture right away so the trace stays narrow.
  4. Filter the results around the exact click time.
  5. Focus on these processes first:
    • IDMan.exe
    • Explorer.EXE
    • chrome.exe
  6. Search the trace for:
    • ACCESS DENIED
    • RegOpenKey
    • COM-related registry paths under HKCU\Software\Classes, HKCR\CLSID, and HKCR\Interface
  7. Compare what happens before IDM creates any normal download/session artifacts.

What this showed in our case:

  • We did not see a normal IDM transfer session get created first.
  • We did see IDMan.exe touch IDM's COM interface registration.
  • Right after that, Explorer.EXE followed the COM lookup path.
  • The key failing event was an ACCESS DENIED on:

HKCU\Software\Classes\CLSID\{00020424-0000-0000-C000-000000000046}\InprocServer32

That told us the failing layer was the COM handoff path, not the actual downloader engine.

From there, the next step was simple: inspect that CLSID in the registry, compare the per-user HKCU\Software\Classes entry against the normal machine registration, and remove the broken HKCU override so Windows falls back to the standard COM marshaler registration.

Root cause

There was a malformed per-user override at:

HKCU\Software\Classes\CLSID\{00020424-0000-0000-C000-000000000046}

What made it suspicious:

  • It shadowed the normal machine-wide COM registration.
  • The top-level key was basically empty.
  • Its InprocServer32 child existed but had poisoned permissions.
  • Normal PowerShell and reg reads/deletes hit access issues.

That corrupted HKCU override was intercepting the COM lookup and causing the IDM transfer path to fail with 0x80070005.

Exact fix

The fix was not an IDM reinstall. The actual repair was:

  1. Back up the bad HKCU override.
  2. Back up the IDM COM interface registration for reference.
  3. Reset ACLs on the bad HKCU key with regini.
  4. Delete the per-user override entirely.
  5. Restart Chrome so the browser/IDM handoff uses the normal system COM registration again.

Once that broken override was removed, the IDM transfer dialog started working again immediately after Chrome restart.

Backups from the live repair

  • psoa-hkcu-override-backup-20260505-124706.reg
  • idm-com-interface-backup-20260505-124706.reg

Reusable fix script

The companion PowerShell script in this gist automates the same repair:

  • Detects the bad HKCU override.
  • Exports a timestamped backup.
  • Resets ACLs with regini.
  • Deletes the broken per-user COM override.
  • Verifies removal.

Run it from an elevated PowerShell session:

powershell -ExecutionPolicy Bypass -File .\fix-idm-0x80070005-com-override.ps1

Then:

  1. Close all Chrome windows.
  2. Reopen Chrome.
  3. Retry the IDM action.

Why this works

Deleting the corrupted HKCU override forces Windows to fall back to the normal machine-level COM registration for PSOAInterface instead of the broken per-user shadow key.

That removes the ACCESS DENIED condition in the IDM browser handoff path and restores normal Chrome-to-IDM transfer.

#Requires -RunAsAdministrator
[CmdletBinding()]
param()
$ErrorActionPreference = 'Stop'
$problemKey = 'HKCU\Software\Classes\CLSID\{00020424-0000-0000-C000-000000000046}'
$backupRoot = Join-Path -Path $PSScriptRoot -ChildPath 'idm-0x80070005-backups'
$timestamp = Get-Date -Format 'yyyyMMdd-HHmmss'
$runBackupDir = Join-Path -Path $backupRoot -ChildPath $timestamp
$reginiFile = Join-Path -Path $env:TEMP -ChildPath "idm-regini-reset-acl-$timestamp.txt"
$backupFile = Join-Path -Path $runBackupDir -ChildPath 'psoa-hkcu-override.reg'
function Test-RegistryKeyExists {
param([Parameter(Mandatory = $true)][string]$KeyPath)
& reg.exe query $KeyPath *> $null
return ($LASTEXITCODE -eq 0)
}
function Invoke-Reg {
param([Parameter(Mandatory = $true)][string[]]$Arguments)
& reg.exe @Arguments
if ($LASTEXITCODE -ne 0) {
throw "reg.exe failed: reg.exe $($Arguments -join ' ')"
}
}
Write-Host "Checking for the corrupted IDM/COM override..."
if (-not (Test-RegistryKeyExists -KeyPath $problemKey)) {
Write-Host "The problematic HKCU override is not present."
Write-Host "Nothing to repair for this specific 0x80070005 cause."
exit 0
}
New-Item -ItemType Directory -Path $runBackupDir -Force | Out-Null
Write-Host "Backing up the override to $backupFile"
Invoke-Reg -Arguments @('export', $problemKey, $backupFile, '/y')
@"
HKEY_CURRENT_USER\Software\Classes\CLSID\{00020424-0000-0000-C000-000000000046} [1 5 17 21]
InprocServer32 [1 5 17 21]
"@ | Set-Content -LiteralPath $reginiFile -Encoding ASCII
Write-Host "Resetting registry ACLs with regini..."
& regini.exe $reginiFile
if ($LASTEXITCODE -ne 0) {
throw "regini.exe failed to reset ACLs."
}
Write-Host "Deleting the broken per-user COM override..."
Invoke-Reg -Arguments @('delete', $problemKey, '/f')
if (Test-RegistryKeyExists -KeyPath $problemKey) {
throw "The key still exists after deletion: $problemKey"
}
Remove-Item -LiteralPath $reginiFile -Force -ErrorAction SilentlyContinue
Write-Host ""
Write-Host "Repair completed."
Write-Host "Backup directory: $runBackupDir"
Write-Host ""
Write-Host "Next steps:"
Write-Host "1. Close all Chrome windows."
Write-Host "2. Reopen Chrome."
Write-Host "3. Retry the IDM action."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment