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.

Diagramm zur Veranschaulichung der Architektur für Benachrichtigungen zum Datenschutzverschluss

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)
};

Weitere Informationen

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT

KSEVENTDATA

PROPSETID_VIDCAP_CAMERACONTROL