Architektur im Wandel  c't 6/2010 S.220 
Kernel Drivers fr 32  und 64 Bit    
***************************************************************

Solution fr Visual Studio 2008 32 und 64 Bit mit Beispieltreiber ctpci 
sowie dem Open Source Programme lspci von Martin Mares <mj@ucw.cz>. Letztes
wurde erweitert, so dass es ctpci32.sys oder ctpci64.sys benutzen kann  
 
ctpci ermglicht PCI-Zugriff ber die (inzwischen als veraltet erklrte) Kernel-Funktion
HalGetBusDataByOffset(). 

Zur Kompilation von ctpci bentigt man Microsoft DDK oder WDK und  
mglichst auch das aktuelle SDK. Die Pfade zum WDK/DDK und SDK sind vor dem Kompilieren in  
"Tools/Options/Projects and Solutions/VC++-Directories" einzutragen 
zum Beipiel fr WDK 7600.16385.0 und SDK 7.0: 

Includes: 
C:\Program Files\Microsoft SDKs\Windows\v7.0\Include
$(VCInstallDir)include
C:\WINDDK\7600.16385.0\inc\ddk
C:\WINDDK\7600.16385.0\inc\api
...

Libs (64 Bit)
C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib\x64
C:\WINDDK\7600.16385.0\lib\win7\amd64
... 

Libs (32 Bit)
C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib\i386
C:\WINDDK\7600.16385.0\lib\win7\i386

Falls Sie Intrinsics in ihren Treiber verwenden wollen, etwa __rdmsr or __wrmsr, mssen Sie
intrin.h patchen, damit es mit ntddk.h zusammenspielt (siehe ctpci.cpp) 

Die Prozeduren um Treiber zu laden/entladen/starten und mit ihm zu kommunizieren sind 
in der Bibliothek pci.lib eingebunden, daher mssen lspic.c oder andere tools nicht 
gendert werden. Lspci.c wird  hier (fr VS2008/Windows nur minimal gendert) compiliert 
in C++, setpci in purem C (dazu ist nur eine Typdeklaration zu ndern).
   
Um eigene, nicht zertifizierte Treiber unter 64 Bit Windows nutzen zu knnen, mssen Sie entweder
  
a) F8 beim Booten drcken und im Bootmen dann nichtzertifizierte Treiber zulassen 
b) das Tool atsiv.exe verwenden, um Treiber zu laden 
c) Treiber  mit einer Testsignatur versehen und das Sysrem im Testmode booten ( 
 (geht am einfachsten mit dseo13b from NGO) 

Das Benutzen der Software geschieht auf eigenes Risiko.  
Viel Spa 

Andreas Stiller (as@ct.de) 

