Benachrichtigung über Datenschutzauslöser/Schalter
Einige Kamerahersteller möchten möglicherweise physische Verschlusse oder Kill-Schalter verwenden, die die Kamera mithilfe eines physischen Steuerelements blockieren können, das von Software nicht überschrieben werden kann. Diese Features werden aufgrund des Risikos einer unbeabsichtigten Aktivierung und der daraus resultierenden Kundenverwechslung nicht empfohlen, aber wenn sie implementiert sind, müssen sie die unter Kameraschutzläden und Kill-Schalter beschriebenen Anweisungen befolgen, einschließlich der Meldung des Status des Verschlusses/Schalters.
Wenn ein Verschluss geschlossen oder ein Kill-Schalter aktiv ist, ist die Kamera weiterhin voll funktionsfähig für Windows und Anwendungen, die vorhandene Kamera-APIs verwenden, aber der Bild- oder Videostream ist schwarz oder dunkel (oder wird durch ein statisches Bild ersetzt, z. B. ein Bild des Geräts mit einem Pfeil, der auf die Position des physischen Steuerelements zeigt). Dies wirft potenzielle Probleme auf, wenn Anwendungen, die auf die Kamera zugreifen, nicht wissen, dass die Kamera nicht verdeckt ist, und Endbenutzer, die die physische Steuerung versehentlich aktiviert haben, möglicherweise verwirrt sind, warum ihre Kamera nicht wie erwartet funktioniert.
Um diese Probleme zu beheben, müssen Kameras, die Rollläden oder Kill-Schalter implementieren, einen Mechanismus implementieren, um den Zustand des Verschlusses/Schalters zu erkennen und an das Betriebssystem zu melden. Dieses Thema enthält Anleitungen für OEMs und ODMs, die diesen Berichterstellungsmechanismus implementieren. Außerdem werden die Steuerelemente und Strukturen beschrieben, die Kameratreiberentwickler verwenden, um den Verschluss-/Umschaltzustand im Betriebssystem zu veröffentlichen.
Zusätzlich zur Benachrichtigung über den Datenschutzverschluss/-schalter implementiert das Betriebssystem die Erkennung der Kameraverdeckung, bei der eine Frontkamera (Front-Face Camera, FFC) vom Gerätedeckel verdeckt wird, wenn die Schließen-Aktion des Deckelschalters auf "Nichts tun" festgelegt ist, z. B. dass ein Computer nicht in den Standbymodus wechselt oder ausgeschaltet wird, wenn der Deckel geschlossen ist. Ein Beispielszenario könnte ein angedockter Laptop mit externen Monitoren sein, während der Deckel des Laptops geschlossen ist. Es kann einige Geräteformfaktoren geben, bei denen dieses Verhalten nicht erwünscht ist. Daher ist unten ein Mechanismus zum Deaktivieren der Erkennung der Gerätedeckelverdeckung definiert.
Übersicht über die Architektur
Das KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement wird verwendet, wenn das Betriebssystem den aktuellen Zustand von einem Kameratreiber abfragt. Sie sollte nur als Get-Eigenschaft verwendet werden. Treiberentwickler dürfen die KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement set-Eigenschaft in ihren Treibern nicht unterstützen.
Hinweis
Kameras, die Datenschutzläden oder Kill-Schalter implementieren, müssen den Unter Kameraschutzläden und Kill-Schalter beschriebenen Anforderungen entsprechen.
Im USB Video Class-Treiber (UVC) wird das KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement der CT_PRIVACY_CONTROL-Eigenschaft zugeordnet, die in der UVC v1.5-Klassenspezifikation definiert ist.
Zusätzlich zur Verwendung des vorhandenen KSPROPERTY-SteuerelementsKSPROPERTY_CAMERACONTROL_PRIVACY wird ein neuer KSEVENT-Aufrufflow eingeführt, damit der Kameratreiber signalisieren kann, wenn der Datenschutz-Verschluss-/Schalterzustand der Kamera geändert wird, wenn Clients für dieses KSEVENT registriert sind.
Das KSEVENT wird mit der gleichen Set GUID und ID ausgegeben, die von KSPROPERTY verwendet wird.
Um zu verdeutlichen, was in der obigen Abbildung dargestellt ist, erwartet das Betriebssystem, dass der AVS-Treiber einen Mechanismus implementiert, der vom Verschlusssensor generierte Zustandsänderungen abrufen und abhören kann, wenn der Treiberentwickler diese Funktion unterstützt. Das Betriebssystem fragt den Zustand über die KSPROPERTY get-Methode ab und gibt einen wartenden KSEVENT aus, der vom Treiber signalisiert wird, wenn der Verschlusszustand geändert wird. Die Änderung des Verschluss-/Schalterzustands darf nicht verhindern, dass die Kamera funktioniert, z. B. um eine Fehlersituation zu verursachen.
HINWEIS: Wenn der AVS-Treiber dieses Feature unterstützt, die zugrunde liegende Hardware jedoch nicht, gibt der AVS-Treiber den Fehler nicht unterstützt zurück, wenn das Betriebssystem die KSEVENT-Registrierung ausgibt.
Erfassungs- und Berichterstellungsmethoden
Einige Kameras erkennen den Verschlusszustand mithilfe eines Pixelanalysealgorithmus, der in der IsP-Firmware (Image Signal Processor) ausgeführt wird. Dies erzwingt eine Einschränkung für diese Kameras, die die Kamera aktiv streamen muss, um den Verschlusszustand zu erkennen und zu melden. Weitere Informationen dazu, wann und wie die Kamera ihren Verschluss-/Schalterzustand melden muss, finden Sie unter Erkennung und Berichterstellung des Verschlusszustands .
Ebenso dürfen Anwendungsentwickler, die das Kameraverdeckungssignal verwenden, den gemeldeten Verschlusszustand nur verwenden, wenn die Kamera aktiv streamingt. Weitere Informationen finden Sie unter CameraOcclusionInfo-Klasse .
KSPROPERTY
Nutzungszusammenfassungstabelle (KSPROPERTY)
Get | Set | Target | Eigenschaftendeskriptortyp | Eigenschaftswerttyp |
---|---|---|---|---|
Ja | Nein | Filtern | KSPROPERTY_CAMERACONTROL_S | LONG |
Der Eigenschaftswert (Vorgangsdaten) ist ein LONG-Wert, der angibt, ob der Datenschutzmodus aktiviert oder deaktiviert ist:
Der Wert 0 gibt an, dass der Kamerasensor Videobilder erfassen kann.
Der Wert 1 gibt an, dass der Kamerasensor an der Aufnahme von Videobildern gehindert ist.
Die KSPROPERTY_CAMERA_CONTROL_S-Struktur muss wie folgt ausgefüllt werden:
Strukturelement | Wert |
---|---|
KSPROPERTY. Festgelegt | Muss PROPSETID_VIDCAP_CAMERACONTROL sein |
KSPROPERTY.Id | Muss KSPROPERTY_CAMERACONTROL_PRIVACY sein. |
KSPROPERTY. Flaggen | Muss KSPROPERTY_TYPE_GET sein |
Wert | Initialisieren auf 0 |
Flags | Ignoriert, auf 0 festgelegt |
Capabilities | Ignoriert, auf 0 festgelegt |
KSEVENT
Nutzungszusammenfassungstabelle (KSEVENT)
Get | Set | Target | Ereignisdeskriptortyp | Ereigniswerttyp |
---|---|---|---|---|
Nein | Ja | Filter | KSEVENT | KSEVENTDATA |
Die KSEVENT-Struktur muss wie folgt ausgefüllt werden:
Strukturelement | Wert |
---|---|
Set | Muss PROPSETID_VIDCAP_CAMERACONTROL sein |
Id | Muss KSPROPERTY_CAMERACONTROL_PRIVACY sein. |
Flags | KSEVENT_TYPE_ENABLE |
Die KSEVENTDATA-Struktur muss wie folgt ausgefüllt werden:
Strukturelement | Wert |
---|---|
Notificationtype | Muss KSEVENTF_EVENT_HANDLE sein. |
Deaktivieren der Erkennung von Gerätedeckelverschlüssen
Um die Erkennung der Gerätedeckelverdeckung zu deaktivieren, können OEMs den folgenden Geräteeigenschaftsschlüssel definieren:
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
Hinweis
Das Festlegen des PropertyBuffer-Werts auf 0 entspricht dem Definieren des Geräteeigenschaftsschlüssels überhaupt nicht.
Der Geräteeigenschaftsschlüssel kann entweder in einer INF-Treiberdatei mithilfe von AddProperty oder mithilfe eines MS OS-Deskriptors bereitgestellt werden, wenn keine INF-Datei vorhanden ist, z. B. eine USB-Kamera mit dem UVC-Posteingangskameratreiber.
INF AddProperty-Beispiel
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
Beispiel für MS OS-Deskriptor
UCHAR Example2_MSOS20DescriptorSet_UVCDevicePropertyKeyForLidOcclusionOptOut[0x76] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength of MSOS20_SET_HEADER_DESCRIPTOR (10 bytes)
0x00, 0x00, // wDescriptorType MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion – 0x10000000 for Windows 10
0x76, 0x00, // wTotalLength – 0x76(118) bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x6C, 0x00, // wLength - 0x6C(108) bytes
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x5E, 0x00, // wPropertyNameLength – 0x5E(94) bytes
'D', 0x00, 'K', 0x00, // Property Name – DKEY-{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2
'E', 0x00, 'Y', 0x00,
'-', 0x00, '{', 0x00,
'3', 0x00, 'A', 0x00,
'B', 0x00, '8', 0x00,
'5', 0x00, '6', 0x00,
'0', 0x00, 'B', 0x00,
'-', 0x00, 'E', 0x00,
'F', 0x00, 'C', 0x00,
'F', 0x00, '-', 0x00,
'4', 0x00, '3', 0x00,
'C', 0x00, '1', 0x00,
'-', 0x00, 'A', 0x00,
'7', 0x00, 'E', 0x00,
'C', 0x00, '-', 0x00,
'1', 0x00, '3', 0x00,
'0', 0x00, 'E', 0x00,
'4', 0x00, '6', 0x00,
'8', 0x00, '5', 0x00,
'7', 0x00, 'A', 0x00,
'F', 0x00, '4', 0x00,
'}', 0x00, ',', 0x00,
'2', 0x00, 0x00, 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00 // PropertyData – 0x00000001 (1)
};