guidox / Hardware

Fix a Webcam That Shows a Black Image in Every App

TL;DR

Check **Settings > Privacy > Camera** per app, then the device state with **Get-PnpDevice -Class Camera**. A camera that another process holds returns black, not an error.

Before you start

Requirements

  • Windows 11
  • A webcam
  • 20 minutes
Step by step

Instructions

01

Test with the built-in preview

The Settings preview uses a different pipeline than any app. A working preview with a black app points at permissions; a black preview points at the device.

Start-Process ms-settings:privacy-webcam
Get-PnpDevice -Class Camera,Image | Select-Object FriendlyName,Status,Problem,InstanceId
Get-CimInstance Win32_PnPEntity | Where-Object { $_.PNPClass -in 'Camera','Image' } | Select-Object Name,Status,ConfigManagerErrorCode
02

Check the per-app camera permission

Camera access is allowed globally and per app. The registry keys behind the toggle show which app is denied, which the Settings page only summarises.

Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam' | Select-Object Value
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam\NonPackaged\*' -ErrorAction SilentlyContinue | Select-Object PSChildName,Value
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam' -ErrorAction SilentlyContinue | Select-Object Value
03

Find the process holding the camera

Only one process gets the stream on most devices. A background helper or a browser tab keeps it open, and the second app gets frames of nothing.

Get-Process | Where-Object { $_.Name -match 'Teams|Zoom|chrome|msedge|Camera|Skype' } | Select-Object Name,Id,StartTime
Get-CimInstance Win32_PnPEntity | Where-Object Name -match 'Camera' | ForEach-Object { Get-PnpDeviceProperty -InstanceId $_.PNPDeviceID -KeyName 'DEVPKEY_Device_LastArrivalDate' -ErrorAction SilentlyContinue }
# close all apps, then reopen only the one you need
04

Reset the camera stack

Disabling and re-enabling the device reinitialises the driver without a reboot. A camera that returns with an error code needs a driver reinstall instead.

$id = (Get-PnpDevice -Class Camera | Select-Object -First 1).InstanceId
$id
Disable-PnpDevice -InstanceId $id -Confirm:$false
Start-Sleep -Seconds 5
Enable-PnpDevice -InstanceId $id -Confirm:$false
Get-PnpDevice -Class Camera | Select-Object Status,Problem
05

Check the USB path and the power

A camera on a shared hub or a long cable fails exactly like this. A direct port on the machine and no other high-bandwidth device is the control test.

Get-PnpDevice -PresentOnly | Where-Object { $_.Class -in 'USB','Camera','Image' } | Select-Object FriendlyName,Class,Status
Get-CimInstance Win32_USBControllerDevice | ForEach-Object { [wmi]$_.Dependent } | Select-Object Name,Status | Select-Object -First 10
usbview.exe 2>$null
06

Verify with a second app

The Windows Camera app is the cleanest test, because it asks for permission with its own entry. A working Camera app with a failing conference app means the app's own settings.

Start-Process microsoft.windows.camera:
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam\NonPackaged' -ErrorAction SilentlyContinue | Select-Object * -ExcludeProperty PS*
Get-WinEvent -LogName Application -MaxEvents 30 | Where-Object Message -match 'camera' | Select-Object TimeCreated,ProviderName,Message -First 3
Troubleshooting

Common issues

The camera is not listed at all

The device is not enumerating. Check the USB port, the cable, and whether the lid switch or a privacy shutter physically blocks the lens.

Settings shows the camera but every app fails

The per-app permission is off, or a policy disables camera access for packaged apps. Check both consent store keys.

It works in one app only

The other app lacks permission or uses a different resolution the device cannot deliver. Check the app's own video settings.

The image is black only in a browser

Hardware acceleration or a GPU driver issue. Disable hardware acceleration in the browser as a test.

FAQ

Frequently asked

Does the privacy shutter matter?

A physical shutter produces a black image with no error anywhere, which is the most common false alarm.

Why does the light stay on?

A process still holds the stream. Closing the app usually releases it; otherwise restart the Windows Camera Frame Server service.

Is a driver reinstall risky?

Not for a USB camera. The generic driver returns as soon as you reconnect the device.

How to undo this

Re-enable the camera permission for any app you turned off, and re-enable the device with Enable-PnpDevice if you disabled it.

Changelog · 1 entry
  1. 2026-11-01
    First version
Interactive version: checklist, feedback, related guides →

Free · no account needed · tracks your progress