Erzwingen eines sicheren Lesevorgangs für eine HID-Auflistung
In diesem Artikel wird beschrieben, wie eine Benutzermodusanwendung oder ein Kernelmodustreiber ein sicheres Lesen für eine HID-Sammlung auf oberster Ebene erzwingen kann.
Wenn ein sicherer Lesevorgang für eine Sammlung aktiviert ist, können nur "vertrauenswürdige" Clients (diejenigen mit SeTcbPrivilege-Berechtigungen) Eingaben aus einer geöffneten Datei einer Sammlung abrufen. Kernelmodustreiber verfügen standardmäßig über SeTcbPrivilege-Berechtigungen, benutzermodusanwendungen jedoch nicht. Informationen zum Abrufen von Systemberechtigungen im Benutzermodus finden Sie in der Dokumentation zum Microsoft Windows SDK.
Dieser Mechanismus wird in erster Linie bereitgestellt, damit "vertrauenswürdige" Benutzermodus-Systemkomponenten verhindern können, dass Anwendungen im Benutzermodus ohne SeTcbPrivilege-Berechtigungen während kritischer Systemvorgänge Eingaben aus einer Sammlung erhalten. Beispielsweise kann eine "vertrauenswürdige" Benutzermodus-Systemkomponente verhindern, dass eine Benutzermodusanwendung ohne SeTcbPrivilege-Berechtigungen vertrauliche Informationen erhält, die ein Benutzer während eines Anmeldevorgangs bereitstellt.
"Vertrauenswürdige" Clients verwenden IOCTL_HID_ENABLE_SECURE_READ und IOCTL_HID_DISABLE_SECURE_READ Anforderungen zum Aktivieren und Deaktivieren eines sicheren Lesevorgangs für eine Sammlung. Wenn ein Client ohne SeTcbPrivilege-Berechtigungen diese Anforderungen verwendet, ändert die Anforderung nicht den sicheren Lesestatus einer Auflistung, und der HID-Klassentreiber gibt einen Statuswert von STATUS_PRIVILEGE_NOT_HELD zurück.
Das Aktivieren und Deaktivieren eines sicheren Lesevorgangs für eine Sammlung funktioniert wie folgt:
Der HID-Klassentreiber verwaltet eine dateispezifische sichere Leseanzahl für jede geöffnete Datei einer Auflistung. Der HID-Klassentreiber verwaltet auch eine sichere Leseanzahl für die Sammlung, bei der es sich um die Summe der dateispezifischen anzahl sicherer Lesevorgänge handelt. Die Anzahl der sicheren Lesevorgänge für die Auflistung wird beim Erstellen der Auflistung auf Null initialisiert, und beim Öffnen einer Datei wird eine sichere Leseanzahl für eine Datei auf Null initialisiert.
Wenn der HID-Klassentreiber eine aktivierungsanforderung für eine Datei empfängt, erhöht er die Anzahl der sicheren Lesevorgänge für die Datei um 1 (und erhöht um 1 die Anzahl der sicheren Lesevorgänge für die Sammlung).
Wenn der HID-Klassentreiber eine deaktive Anforderung für eine Datei empfängt:
- Wenn die Anzahl der sicheren Lesevorgänge für die Datei größer als 0 ist, wird der Treiber um 1 die Anzahl der sicheren Lesevorgänge für die Datei erhöht (und die Anzahl der sicheren Lesevorgänge für die Sammlung um 1 erhöht).
- Wenn die Anzahl der sicheren Lesevorgänge für die Datei gleich Null ist, ändert der Treiber nicht die Anzahl der sicheren Lesevorgänge.
Wenn die Anzahl der sicheren Lesevorgänge für eine Auflistung größer als 0 ist, erzwingt der HID-Klassentreiber einen sicheren Lesevorgang für die Auflistung. Andernfalls erzwingt der Treiber keinen sicheren Lesevorgang für die Sammlung.
Ein Client sollte eine Disable-Anforderung verwenden, um eine entsprechende Aktivierungsanforderung abzubrechen. Wenn der Client dies jedoch nicht tut, dekrementiert der HID-Klassentreiber die Anzahl der sicheren Lesevorgänge für eine Sammlung entsprechend, wenn eine IRP_MJ_CLOSE Anforderung für eine Datei verarbeitet wird. Wenn der Treiber die Close-Anforderung verarbeitet, wird die Anzahl der sicheren Lesevorgänge für die Sammlung durch die Anzahl sicherer Lesevorgänge für die zu schließende Datei erhöht.