Steuern des Gerätenamespacezugriffs

Im Windows-Treibermodell (WDM) verfügt jedes Geräteobjekt über einen zugeordneten Namespace. Namen im Namespace des Geräts sind Pfade, die mit dem Namen des Geräts beginnen. Bei einem Gerät mit dem Namen "\Device\DeviceName" besteht der Namespace aus einem beliebigen Namen im Format "\Device\DeviceName\FileName". (Für ein Dateisystem ist FileName der tatsächliche Name einer Datei im Dateisystem.)

Ein WDM-Treiber empfängt offene Anforderungen für alle Namen im Namespace des Geräts. Der Treiber behandelt eine offene Anforderung für "\Device\DeviceName" als öffnen des Geräteobjekts selbst. Wenn der Treiber die Unterstützung für offene Anforderungen in den Namespace des Geräts implementiert, behandelt er eine offene Anforderung für "\Device\DeviceName\FileName" als Öffnen einer "Datei" im Namespace des Geräteobjekts (wobei der Begriff "Datei" für das Gerät vom Treiber bestimmt wird).

Die meisten Treiber implementieren keine Unterstützung für offene Vorgänge im Namespace des Geräts, aber alle Treiber müssen Sicherheitsüberprüfungen bereitstellen, um nicht autorisierten Zugriff auf den Namespace des Geräts zu verhindern. Standardmäßig bleiben Sicherheitsüberprüfungen für Dateiöffnungsanforderungen im Namespace des Geräts (z. B. "\Device\DeviceName\FileName") vollständig dem Treiber überlassen. Die Geräteobjekt-ACL wird vom Betriebssystem nicht überprüft.

Wenn das FILE_DEVICE_SECURE_OPEN Merkmal eines Geräteobjekts festgelegt ist, wendet das System den Sicherheitsdeskriptor des Geräteobjekts auf alle Anforderungen zum Öffnen von Dateien im Namespace des Geräts an. Treiber können FILE_DEVICE_SECURE_OPEN festlegen, wenn sie das Geräteobjekt mit IoCreateDevice oder IoCreateDeviceSecure erstellen. Für WDM-Treiber können FILE_DEVICE_SECURE_OPEN auch in der Registrierung festgelegt werden. Sie kann auch in der Registrierung für Geräteobjekte von Nicht-WDM-Treibern festgelegt werden, die von IoCreateDeviceSecure erstellt werden. Weitere Informationen zum Festlegen von Geräteobjekteigenschaften, z. B. den Gerätemerkmalen, in der Registrierung finden Sie unter Festlegen von Geräteobjekteigenschaften in der Registrierung. Weitere Informationen zu Gerätemerkmalen finden Sie unter Angeben von Gerätemerkmalen.

Treiber für Geräte, die keine Namespaces unterstützen, müssen eine von zwei Methoden verwenden, um sicherzustellen, dass Dateiöffnungsanforderungen im Namespace des Geräts ordnungsgemäß verarbeitet werden:

  • Die Geräteobjekte des Treibers verfügen über die FILE_DEVICE_SECURE_OPEN Gerätekennlinie. Der Treiber kann dann jede offene Anforderung im Namespace des Geräts als offene Anforderung für das Geräteobjekt behandeln.

  • Der Treiber kann IRP_MJ_CREATE Anforderungen fehlschlagen, die einen IrpSp-FileObject-FileName-Parameter>> angeben, dessen Länge ungleich null ist. In diesem Fall unterliegen offene Anforderungen für das Gerät der ACL-Überprüfung des Systems, während alle Anforderungen zum Öffnen von Dateien im Namespace des Geräts vom Treiber fehlgeschlagen sind. (Treiber, die exklusive Öffnen unterstützen, müssen diese Option verwenden.)

Treiber für Geräte, die Namespaces unterstützen, können auch zwei Methoden verwenden, um Dateiöffnungsanforderungen im Namespace des Geräts zu schützen:

  • Die Geräteobjekte des Treibers verfügen über die FILE_DEVICE_SECURE_OPEN Gerätekennlinie. Dadurch wird sichergestellt, dass die Sicherheitseinstellungen für das Gerät einheitlich auf den Namespace des Geräts angewendet werden. (Der Treiber ist für die Implementierung der Unterstützung für den Namespace in seiner DRIVER_DISPATCH Rückruffunktion verantwortlich.)

  • Der Treiber überprüft alle ACLs auf den Dateinamen in seiner DispatchCreate-Routine . (Auch in diesem Fall sollte der Treiber das FILE_DEVICE_SECURE_OPEN Merkmal festlegen, es sei denn, der Namespace des Geräts öffnet sich mit schwächeren Sicherheitseinstellungen als das Geräteobjekt.)

Das FILE_DEVICE_SECURE_OPEN Merkmal wird oben im Stapel überprüft, sodass Filtergeräteobjekte nach dem Anfügen den Characteristics-Member des nächstniedrigen Geräteobjekts kopieren müssen.