Windows ConsentStore

Wenn Teams oder eine andere Software auf das Mikrofon oder Webcam zugreift, dann sehen Sie dies in der Tray-Leiste. Wie kann ich per Code den Status abfragen und wie steuert Windows, wer drauf zugreifen kann.

Windows Einstellungen

Zuerst habe ich mir mal angeschaut, was ich in Windows einstellen kann.

Zu Kamera und Mikrofon gib es natürlich noch weitere Details:

Und wenn ich in einem Meeting bin, sehe ich in der Tray-Leiste neben der Uhr die Anzeige für das Mikrofon. Wenn ich mit der Maus drüber gehe, sehe ich auch das aktuelle Programme

Ein Symbol für eine "Webcam" habe ich noch nicht gesehen.

Konfiguration und API

Genau diese Information hätte ich auch gerne ausgelesen, um z.B. mit Rimscout oder anderen Tools zu erkennen, ob z.B. Teams das Mikrofon nutzt. Das ist natürlich keine 100% Sicherheit, da ich auch passive einfach nur zuhören kann und dann meine eigene Webcam und Mikrofon abgeschaltet ist. Zudem erscheint bei mir auch das Mikrofon-Symbol, wenn ich stummgeschaltet bin und sogar, wenn ich in Teams beim Meetingstart "kein Audio" auswähle.

Bei der Suche nach einer API zur Abfrage des Status bin ich aber immer wieder auf Seiten gelandet, die letztlich in der Registrierung nachgeschaut haben:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\microphone
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam

Der Begriff "Consentstore" finde ich zutreffend, da hier Windows wohl für den Benutzer sowieso hinterlegt, welche App "Consent" bekommen hat.

Das eröffnet natürlich auch Malware oder weniger seriösen Programmen einen Weg, sich hier mit den rechten des Benutzers selbst die Erlaubnis zu geben.

Interessant finde ich die die beiden Werte "LastUsedTimeStart" und "LastUsedTimeStop", die wohl angeben wann das Gerät das letzte Mal von diesem Programm genutzt wurde. Die Codierung ist dabei "Windows FileTime" und kann in PowerShell recht einfach konvertiert werden.

PS C:> [DateTime]::FromFileTime(133320028743490479)
Freitag, 23. Juni 2023 16:07:54

Die Werte "LastUsedTimeStop" und "LastUsedTimeStart" gibt es für jedes einzelne Programm und wenn z.B. Microsoft Teams eine Besprechung startet und dazu das Mikrofon nutzt, dann wird nicht nur "LastUsedTimeStart" auf das Startdatum gestellt, sondern auch "LastUsedTimeStop = 0" gesetzt:

Damit lässt sich sehr schnell per PowerShell ermitteln, welches Gerät durch welchen Prozess gerade genutzt wird.

(Get-ChildItem "HKCU:Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\microphone" `
   -Recurse `
| where{ `
   $_.getvalue("LastUsedTimeStop") -eq "0"`
}).pschildname

Umgekehrt funktioniert dies aber nicht. Ich kann als Benutzer zwar den Wert auch auf "0" setzen, aber das Icon in der Taskleiste bleibt dennoch weiter verborgen. Ich vermute daher, dass der Zugriff auf das gewünschte Gerät durch Windows sowohl als Icon als auch in der Registrierung protokolliert wird aber die Registrierung nur ein Protokoll ist.

Nutzung

Solange Microsoft Teams leider keine lokale Schnittstelle hat, um den Teams Client zu steuern oder einen Status abzufragen, bleibt nur die Suche nach Fensternamen oder indirekte Abfrage der Gerätenutzung, um den Status anzuzeigen. Das kann dennoch gut funktionieren und so gibt es schon das ein oder andere Projekt, welches diese Daten auf dem Client ermittelt und z.B. eine Signalisierung erlaubt.

Das kann durchaus eine Lösung z.B. für ein Homeoffice sein, wenn Sie vor die Tür eine rote "In a Meeting"-Anzeige für die Familie platzieren wollen. Für den Einsatz in Firmen würde ich aber doch eher den Status des der Benutzer serverseitig über Graph abfragen:

Der Status der Webcam oder des Mikrofons kann aber durchaus auch für ein lokales Monitoring und Inventarisierung interessant sein. Eine Firma könnte so die Firmengeräte auf unerwünschte Programme überprüfen, die gerade sensible Geräte wie eine Webcam nutzen. Natürlich sind dabei Mitbestimmungsregeln und Datenschutz zu beachten.

Weitere Links