2017-02-11 3 views
0

Ich habe einen Windows-Kernelmodustreiber geschrieben, um auf den Speicherbereich einer PCI Express-Karte zuzugreifen, und ich kann mit dem IO-Control des Treibers über CreateFile- und DeviceIOControl-Funktionen kommunizieren. Alles sieht gut aus, außer dass die Benutzeranwendung mit Administratorrechten ausgeführt werden muss, da Lese-/Schreibzugriff auf das PCI-Gerät erforderlich ist. Dies ist eine Herausforderung in meiner Anwendung, da ich nicht erwarten kann, dass meine Benutzer beim Ausführen der Anwendung Administratorrechte haben. Um dieses Problem zu beheben, habe ich folgende Ideen:Zugriff auf den Treiber IOControl von einer Benutzeranwendung ohne Administratorberechtigung

1) Erstellen einer Named Pipe in Treiber und Zugriff darauf in Benutzeranwendung, aber ich bin mir nicht sicher, ob Treiber Zugriff auf Windows-APIs zum Erstellen und Zugreifen hat eine Named Pipe.

2) Erstellen eines Windows-Dienstes, der mit Administratorrechten ausgeführt wird und eine Schnittstelle zwischen Benutzeranwendung und Treiber wird. Obwohl es praktisch ist, scheint diese Lösung übertrieben zu sein.

Ich freue mich über jeden Kommentar zu den oben genannten Lösungen und auch die übliche Praxis für die Kommunikation mit einem Treiber.

Dank

+0

Die Verwendung von DeviceIOControl() kann sicherlich ein Mörder sein, so dass normalerweise Administratorrechte erforderlich sind. Das Treiberinstallationsprogramm ermittelt den Wert für den Sicherheitsschlüssel. Sehen Sie sich c: \ windows \ inf \ wvid.inf für ein Beispiel an, [Vid_Device.NT.AddReg] Abschnitt. Programmgesteuert nach der Installation zu tun ist [hier diskutiert] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff563755 (v = vs.85) .aspx). –

Antwort

2

Ihr Fahrer kann geeignete was Berechtigungen zuweisen auf das Gerät schafft Objekte. Mit den Standardeinstellungen können Administratoren nur E/A-Steuerungsanforderungen an ein Gerät senden, Sie können sie jedoch beliebig konfigurieren.

Der MSDN-Abschnitt mit dem Titel Securing Device Objects deckt dies ab.

1

Vielen Dank für Ihre Kommentare. WdfDeviceInitAssignSddlString ist, was ich in meinem KMDF verwenden musste. Diese API gibt die Berechtigungen an, die für den Zugriff auf den E/A-Controller des Treibers erforderlich sind.

Verwandte Themen