Access Control (WPD-API)
Das Windows Driver Model (WDM) unterstützt das Einschränken des Gerätezugriffs über Access Control Lists (ACLs) auf den Plug & Play-Geräteknoten (PnP). Dies bedeutet, dass Anbieter und Netzwerkadministratoren den Zugriff auf jeden Gerätetyp einschränken können. Wenn eine Anwendung ein Handle für einen Treiber öffnet, indem sie IPortableDevice::Openaufruft, überprüft der E/A-Manager des Treibers, ob der entsprechende Benutzer über den erforderlichen Zugriff verfügt, und führt ebenso Zugriffsüberprüfungen durch, wenn IOCTLs von diesem Handle an den Treiber gesendet werden.
Beispielsweise könnte ein Netzwerkadministrator Gastbenutzern den schreibgeschützten Zugriff auf portable Geräte gewähren, während sie authentifizierten Benutzern Lese-/Schreibzugriff gewähren könnten. In diesem Fall impliziert dies, dass , wenn ein Gast einen WPD-Befehl ausgegeben hat, der Lese-/Schreibzugriff erforderte (z. B. Objekt löschen). Dies würde mit "Zugriff verweigert" fehlschlagen. Wenn ein authentifizierter Benutzer denselben Befehl aussinge, wäre dies jedoch erfolgreich.
Die Gruppenrichtlinie-Einträge zum Steuern des Zugriffs auf Wechseldatenträger und portable Geräte sind eigentlich nur eine einfache Möglichkeit für Administratoren, PnP-Geräteknoten-ACLs gleichzeitig auf eine ganze Geräteklasse anzuwenden (z. B. würde die Anwendung von "Schreibzugriff auf portable Geräte verweigern" Gruppenrichtlinie die ACLs aller WPD-Geräte anpassen, um den Schreibzugriff zu verweigern).
E/A-Steuerungscodes in WPD
WPD-Anwendungen kommunizieren mit Treibern, indem sie Gerätehandles öffnen und E/A-Steuerungscodes (IOCTLs) senden. Diese IOCTLs bestehen aus vier Abschnitten:
- Gerätetyp
- Funktionscode
- Buffer-Methode
- Zugriffstyp
Der vierte Abschnitt, der Zugriffstyp, gibt die spezifische Zugriffsanforderung für den angegebenen Befehl an. Der E/A-Manager des Treibers verwendet diese Daten, um die Überprüfung Access Control -Liste (ACL) durchzuführen.
Wenn also eine IOCTL wie dies definiert wurde:
#define MY_READ_IOCTL CTL_CODE(FILE_DEVICE_X, CONTROL_FUNCTION_Y, METHOD_BUFFERED, FILE_READ_ACCESS)
Der E/A-Manager des Treibers überprüft, ob der Besitzer des Gerätehandles beim Senden dieser Nachricht Über lesezugriff auf das Gerät hat.
Und wenn eine IOCTL wie dies definiert wurde:
#define MY_READWRITE_IOCTL CTL_CODE(FILE_DEVICE_X, CONTROL_FUNCTION_Z, METHOD_BUFFERED, (FILE_READ_ACCESS | FILE_WRITE_ACCESS))
Der E/A-Manager des Treibers überprüft beim Senden dieser Nachricht, ob der Besitzer des Gerätehandles über Lese-/Schreibzugriff auf das Gerät verfügt.