Hallo,
ich habe eine Frage, da ich aus den ganzen Recherchen nicht ganz schlau
geworden bin.
Wenn ich einen Treiber habe und dieser z.B. unter Windows 7
funktionieren soll, so muss dieser signiert werden. Kann ich dann nicht
einfach mit einem Zertifikat (z.B. von Verisign) diesen Treiber selbst
signieren?
Wann muss der Treiber das WHQL Programm durchlaufen (also "Windows Logo
Kit" und "Winqual Submission Tool" usw.) ?
Viele Grüße & Danke
Peter
Ein "Authenticode"-Zertifikat sollte reichen, hier hat MS ne Liste wo
man die Dinger herkriegen kann:
http://www.microsoft.com/whdc/driver/install/drvsign/crosscert.mspx
...und in dem hier verlinkten Word-Dokument wird ein Treiber
beispielhaft signiert:
http://www.microsoft.com/whdc/driver/install/drvsign/kmcs-walkthrough.mspx
Bei WHQL brauchst Du von verisign eine "Microsoft Authenticode Code
Signing Digital ID" um dich da überhaupt registrieren zu können.
Laut diesem Link:
https://winqual.microsoft.com/Help/obtaining_a_verisign_class_3_digital_id.htm
kostet das 99 Dollar für ein Jahr.
Dazu kommen dann pro eingereichtem Treiber mindestens 250 Dollar pro
Betriebssystem-Gruppe (d.h. für Vista x86 und x64 einmal 250 Dollar, für
die Win7-Editionen bezahlt man dann wieder 250 Dollar)
Vorteile von wqhl:
- Die Treiber werden dann von Microsoft signiert
- Du hast Zugriff auf WER ("Windows Error Reporting"), d.h. wenn dein
Treiber irgendwo Crashs verursacht hast du darüber glaube ich Zugriff
auf Crashdumps
- Du darfst das z.B. das Windows7-Logo auf deine Produktverpackung
pappen
- Treiber/Treiber-Updates kannst du über Windows-Update verteilen
(Achtung: Mehr Halbwissen als Wissen - Null Praxiserfahrung ;D)
Hallo,
ich habe in unserer Firma bereits für einen Treiber die
WHQL-Zertifizierung erfolgreich durchgeführt und bin gerade erneut
dabei, einen weiteren Treiber vorzubereiten.
Die Ausführungen von "bluppdidupp" sind korrekt, auch die genannten
Kosten sind so aktuell. Wir hatten jedoch die Möglichkeit, im Rahmen der
verwendeten "unclassified certification" unseren Treiber in einem Rutsch
von XP bis Win7 zertifizieren zu lassen und mußten lediglich für die
32-bit und 64-bit Ausprägungen je einmal zahlen.
Ein Cross-Zertifikat bestätigt lediglich die Herkunft eines Treibers,
statt "Dieser Treiber stammt aus einer nicht-vertrauenswürdigen Quelle"
kommt dann die Meldung "Dieser Treiber stammt vom vertrauenswürdigen
Hersteller XYZ". Das gibt zwar dem Anwender eine gewisse Sicherheit, ist
aber für Kernel-Treiber unter 64-Bit-Windows nicht ausreichend. Diese
verlangen für solche Treiber zwingend die WHQL-Signatur, es sei denn,
man schaltet die Signaturprüfung temporär, z.B. durch F8 beim Booten,
aus.
Die WHQL-Signatur setzt voraus, daß man einen Account auf der
Winqual-Site einrichtet und auch ein Codesigning-Zertifikat besitzt.
Weiterhin muß der Treiber die Windows Logo Kit Testsuite in der
zugehörigen Kategorie und für die geplanten Plattformen erfolgreich
absolviert haben. Dadurch wird die Kompatibilität zu Windows überprüft.
Solange hier einzelne Tests fehlschlagen, ist der Treiber nicht
zertifizierungsfähig.
Je nach Treiberkategorie ist dieser Testvorgang mehr oder weniger
aufwändig und produziert manchmal heftige Nacharbeiten am Treiber oder
Endgerät.
Für das aktuell zu entwickelnde Gerät, das über USB und einen
entsprechenden zertifizierten Treiber angesprochen werden soll, führen
wir bereits mit der Entwicklung der Betriebssystemschicht auf dem
Endgerät parallel die WHQL-Tests durch, um frühstmöglich die
Kompatibilität sicherzustellen.
Gruß...Maschinist
Hallo,
ich muss leider nochmals eine naive Frage stellen. Wie kann man
feststellen ob ein Treiber ein "Kernel Mode" Treiber ist oder im "User
Mode" läuft? Gibt es hier eine einfache Möglichkeit?
Dann könnten wir uns die WHQL-Zertifizierung sparen und unsere Treiber
"einfach" selbst signieren und somit die installation des Treiber auch
ohne Probleme unter x64 zulassen.
Vielen Dank & Grüße
Peter
User Mode Treiber? Alles, was auf eine Hardware zugreift, braucht einen
Kernel Mode Treiber. Es sei denn, du nutzt irgendwas, wofür das System
bereits Treiber mitbringt. HID oder CDC oder sowas. Wobei bei CDC
wiederum das Inf-File signiert sein muss. Wenn du HW-Treiber für Windows
x64 anbieten willst, kommst du um die Signierung nicht herum.
UMDF supports the creation of user-mode drivers that support
2
protocol-based or serial-bus-based devices. Such drivers handle
3
the same types of I/O requests as kernel-mode drivers and are
4
installed by INF files, just as kernel-mode drivers are.
[Nachtrag]
Q. Which device classes and driver models does UMDF support?
A.
UMDF supports devices such as the following:
• Digital cameras
• Portable media players
• Cell phones
• Personal digital assistants (PDAs)
• Other devices, such as USB, that connect to a protocol bus
You can implement a UMDF driver for any device that can comply with the
constraints listed in "What are the constraints on user-mode drivers?"
You can also implement software-only drivers with UMDF.
Q. What are the constraints on user-mode drivers?
A.
A user-mode driver cannot directly access hardware or use kernel-mode
resources. For example, it cannot perform direct memory access (DMA),
handle interrupts, or allocate memory from nonpaged pool. However, you
might be able to split your driver so that part of it runs in kernel
mode and part of it runs in user mode.
A user-mode driver cannot have kernel-mode clients because Windows does
not allow calls from kernel mode to user mode. The majority of drivers
for input, display, and most network and storage devices cannot be
migrated to user mode because they have kernel-mode clients. For the
same reason, user-mode drivers must be at the top of the device stack;
they cannot attach to the middle of the stack. However, a stack can
contain more than one user-mode driver; that is, a user-mode driver can
have user-mode children.
Ja, ich weiß schon, was ein User Mode Driver ist. Das Fragezeichen bezog
sich eher da drauf, ob das für das Gerät überhaupt passend ist. Das geht
ja nicht für alle Geräte. Soweit ich verstanden hab, geht das für
generische Geräteklassen, für die Windows dann einen eigenen
Kernel-Treiber mitbringt, zum Beispiel die USB Geschichten: "...such as
USB, that connect to a protocol bus". Für Geräte, die nicht da rein
fallen, brauchts dann einen (signierten) Kernel Mode Driver: "A
user-mode driver cannot directly access hardware..."
Mein Beitrag bezog sich nicht primär auf Dich, sondern sollte Peter die
Chance geben, herauszufinden, was für einen Treiber er dort verwendet;
schließlich fragte er nach Unterscheidungsmöglichkeiten zwischen
Kernelmode- und Usermode-Treiber. Peter sollte wissen, für was für eine
Art von Gerät sein Treiber ist ...
Moin!
Da ich selber auf der Suche nach Antworten zur WHQL Signierungspflicht
von Kerneltreibern auf diesen Beitrag gestoßen bin, will ich für die
Nachfolger nochmal festhalten:
Entgegen der häufig anzutreffenden Annahme, ein Kerneltreiber für
Vista/7 x64 muss zwingend WHQL signiert sein, reicht es völlig, den
Treiber mit einem "Microsoft Autenticode" Zertifikat zu signieren.
Dieses bekommt man schon ab 200€ pro Jahr bei globalsign.com und kann
für unbegrenzt viele Treiber benutzt werden.
Wie man seinen Treiber signiert, ist im Dokument "KMCS Walkthrough" von
Microsoft nachzulesen.
Gruß