Freigeben über


Benachrichtigung über Privatsphäre-Verschluss/-Schalter

Einige Kamerahersteller möchten möglicherweise physische Verschlusse oder Kill-Schalter enthalten, die die Kamera mithilfe eines physischen Steuerelements blockieren können, das von Software nicht außer Kraft gesetzt werden kann. Diese Features werden aufgrund des Risikos einer versehentlichen Aktivierung und der daraus resultierenden Verwirrung der Kunden nicht gefördert, aber wenn sie implementiert werden, müssen sie die in Den Datenschutz-Verschluss- und Kill-Schaltern der Kamera beschriebenen Anleitungen befolgen, einschließlich, um den Zustand des Auslösers/Schalters zu melden.

Wenn ein Auslöser geschlossen oder ein Kill Switch aktiv ist, ist die Kamera weiterhin voll funktionsfähig für Windows und Anwendungen mit vorhandenen Kamera-APIs, aber der Bild- oder Videodatenstrom ist schwarz oder dunkel (oder durch ein statisches Bild ersetzt, z. B. ein Bild des Geräts mit einem Pfeil, der auf die Position des physischen Steuerelements zeigt). Dies löst potenzielle Probleme aus, bei denen Anwendungen, die auf die Kamera zugreifen, nicht wissen, dass die Kamera verdeckt ist, und Endbenutzer, die das physische Steuerelement unbeabsichtigt aktiviert haben, möglicherweise verwirrt sind, warum ihre Kamera nicht wie erwartet funktioniert.

Um diese Bedenken zu beheben, müssen Kameras, die Verschlusse oder Kill-Schalter implementieren, einen Mechanismus implementieren, um den Zustand des Verschlusses/Schalters zu erkennen und dem Betriebssystem zu melden. Dieses Thema enthält Anleitungen für OEMs und ODMs, die diesen Berichterstellungsmechanismus implementieren werden, und beschreibt auch die Steuerelemente und Strukturen, die Entwickler von Kameratreibern verwenden, um den Verschluss-/Schalterzustand im Betriebssystem zu veröffentlichen.

Zusätzlich zur Benachrichtigung über den Datenschutzverschluss/Schalter implementiert das Betriebssystem die Kameraokklusionserkennung, bei der eine Frontkamera (FFC) vom Gerätedeckel verdeckt wird, wenn die Deckelschalter-Aktion auf "Nichts tun" festgelegt ist, z. B. wird ein Computer nicht in den Energiesparmodus versetzt oder ausgeschaltet, wenn der Deckel geschlossen wird. 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 wird unten ein Mechanismus zum Deaktivieren der Erkennung von Gerätedeckeldeckeln definiert.

Architekturübersicht

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 Steuerungssatzeigenschaft in ihren Treibern nicht unterstützen.

Hinweis

Kameras, die Datenschutz-Verschlusse oder Kill-Schalter implementieren, müssen den Anforderungen entsprechen, die in Kamera-Datenschutzverschlusse und Kill-Schalter beschrieben sind.

Im UVC-Treiber (USB Video Class) wird das KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement der in der UVC v1.5 Class Specification definierten CT_PRIVACY_CONTROL-Eigenschaft zugeordnet.

Diagramm zur Veranschaulichung der Architektur der Datenschutz-Benachrichtigung

Neben der Verwendung des vorhandenen KSPROPERTY-SteuerelementsKSPROPERTY_CAMERACONTROL_PRIVACY wird ein neuer KSEVENT-Aufrufablauf eingeführt, damit der Kameratreiber signalisieren kann, wenn der Datenschutz-Abdeckung-/Schalterzustand der Kamera geändert wird, wenn Clients sich für dieses KSEVENT registrieren.

Das KSEVENT wird unter Verwendung derselben Set-GUID und ID gesendet, die die KSPROPERTY verwendet.

Um zu verdeutlichen, was im obigen Diagramm gezeigt wird, erwartet das Betriebssystem, dass der AVS-Treiber Mechanismus implementiert, wenn der Treiberentwickler dieses Feature unterstützt, um Zustandsänderungen abzurufen und zu überwachen, die der Verschlusssensor generiert. Das Betriebssystem fragt den Status über die KSPROPERTY-Get-Methode ab und gibt ein wartendes KSEVENT aus, das der Treiber signalisiert, wenn der Verschlussstatus geändert wird. Die Änderung des Verschluss-/Schalterzustands darf nicht dazu führen, dass die Kamera nicht mehr funktioniert oder eine Fehlersituation auftritt.

ANMERKUNG: Wenn der AVS-Treiber dieses Feature unterstützt, die zugrunde liegende Hardware jedoch nicht, gibt der AVS-Treiber keinen unterstützten Fehler 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 bedeutet eine Einschränkung für Kameras, da 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 Verschlusszustand und Berichterstellung .

Ebenso dürfen Anwendungsentwickler, die das Kamera-Okklusionssignal verwenden, nicht den gemeldeten Verschlusszustand verwenden, es sei denn, die Kamera wird aktiv gestreamt. Weitere Informationen finden Sie unter CameraOcclusionInfo Class .

KSPROPERTY

Verwendungszusammenfassungstabelle (KSPROPERTY)

Get Set Ziel Eigenschaftendeskriptortyp Eigenschaftswerttyp
Ja Nein Filter KSPROPERTY_CAMERACONTROL_S LONG

Der Eigenschaftswert (Vorgangsdaten) ist ein LONG, der angibt, ob der Datenschutzmodus aktiviert oder deaktiviert ist:

  • Der Wert 0 gibt an, dass der Kamerasensor Videobilder aufnehmen kann.

  • Der Wert 1 gibt an, dass der Kamerasensor daran gehindert wird, Videobilder aufzunehmen.

Die KSPROPERTY_CAMERA_CONTROL_S Struktur muss wie folgt ausgefüllt werden:

Strukturelement Wert
KSPROPERTY.Set 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
Funktionen Ignoriert, auf 0 festgelegt

KSEVENT

Verwendungszusammenfassungstabelle (KSEVENT)

Get Set Ziel 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 Gerätedeckel-Okklusionserkennung

Um die Okklusionserkennung des Gerätedeckels zu deaktivieren, können OEMs den folgenden Device Property Key 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 ist identisch mit dem Definieren des Device Property Key überhaupt nicht.

Der Device Property Key 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-Beispiel für AddProperty

[OptOutLidOcclusionSampleAddPropertySection]

{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1

MS OS-Beschreibung (Beispiel)

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

Siehe auch

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT-

KSEVENTDATA-

PROPSETID_VIDCAP_CAMERACONTROL