Forum: PC-Programmierung Treiber - WHQL Zertifizierung oder Comodo Signierung


von Peter Schuster (Gast)


Lesenswert?

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

von bluppdidupp (Gast)


Lesenswert?

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)

von Bert 0. (maschinist)


Lesenswert?

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

von Peter Schuster (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Christian R. schrieb:
> User Mode Treiber? Alles, was auf eine Hardware zugreift, braucht einen
> Kernel Mode Treiber.

Mit "Vista" wurde das UMDF (user mode driver framework) eingeführt:


http://www.microsoft.com/whdc/driver/wdf/umdf.mspx
1
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.

von Christian R. (supachris)


Lesenswert?

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..."

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von Der Suchende (Gast)


Lesenswert?

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ß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.