ドライバー開発は初心者にとって不親切で、どこからどのように始めればよいのかわかりません。初心者にとっては、特に簡単な問題が発生したときに、どう解決すればよいか分からずに困ってしまいますが、この一連のチュートリアルは、そうした問題を解決するために使用されます。
ほとんどのドライバー開発チュートリアルでは、最初にドキュメントとデモが投稿されます。
Windows ドライバーの使用開始: Windows ドライバーの使用開始 - Windows drivers | Microsoft Docs
Github: https://github.com/Microsoft/Windows-driver-samples
しかし、初心者にとっては、最初は理解できないため、ほとんど役に立ちません。ドライバー開発に入る前に、ある程度のプログラミングの基礎がまだあります。vs2019 以降がインストールされていることを前提としていますvistual studio
。まずHello World
ドライバーを開発し、テスト マシンにドライバーをインストールして、何が起こるかを確認します。内部の論理原則は気にしないで、例に従って最初のHello World
デモを作成しましょう。
WDK (Windows ドライバー キット) のインストール
インストールWDK
も比較的簡単で、Vistual studio Install
ネットで見つけてWindows Driver Kit
インストールすると、インストールが完了するとWindows Driver Kit
チェックが入ったように表示されます。
HelloWDK の作成
新しいプロジェクトを作成し、Empty WDM Driver
プロジェクトを選択し、新しいdriver.cpp
ファイルを作成して、次のコードを記述します。
// driver.cpp
#include <ntddk.h>
extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject);
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
DbgPrint("[GO2CODING_Driver] DriverEntry\n");
NTSTATUS status = STATUS_SUCCESS;
pDriverObject->DriverUnload = DriverUnload;
return status;
}
extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
DbgPrint("[GO2CODING_Driver] DriverUnload\n");
return;
}
このときコンパイルエラーが発生します。
error C2220: 以下警告被视为错误
warning C4100: “pRegPath”: 未引用的形参
warning C4100: “pDriverObject”: 未引用的形参
次の設定も必要です。
1. 構成プロパティ - C/C++ - [一般] で警告をエラーとして扱うが [いいえ] に設定されています。
2. [構成プロパティ] - [ドライバーの署名] - [全般] の [署名モード] を [オフ] に設定します。
3. 構成プロパティ - Inf2cat - run Inf2cat は No に設定されます。
コンパイルが成功すると、HelloWDM.inf
およびHelloWDM.sys
ファイルが生成されます。最初のデモが完了しました。
仮想マシンのテスト
ドライバーを作成する場合、以前に開発したアプリケーションとは異なり、ローカル マシン上で直接テストしないことが最善です。Windows 10 の仮想マシンが必要です。仮想マシンのインストール方法については、関連するチュートリアルを参照してください。
ドライバ開発にはDebugView
、、、、、、、、などの関連ツールも必要です。これらのツールは、ここからダウンロードできます。テスト機に置きます。DriverMonitor
IRPTrace
WinObj
DeviceTree
DiskView
DriverManager
EzDriverInstaller
通常モードでは、テスト マシンは署名のない Windows ドライバーをインストールできないため、署名の検証を必要としないようにテスト マシンを変更する必要があります。
を押してshift
テスト マシンを再起動します。
このインターフェイスに入り、[トラブルシューティング] -> [起動設定] -> [再起動] を選択します。システムに再起動し、次のページで 7 を押して Windows を起動します。
再起動後、コンパイルされたコードをHelloWDK
テスト マシンに配置し、デバイス管理に入り (コンピューターを右クリック -> 「管理」)、古いハードウェアを追加します。
表示されるまで次の手順を実行し从磁盘安装
、先ほどコピーしたパスへのインストール パスを選択します。
ドライバーをインストールする前に、ドライバー先以管理员的身份
を開いて以下を選択し、出力を待ちdebugview
ます。Capture
log
ドライバーをインストールするときに、次のプロンプトが表示されますが、そのままインストールすることを選択します。
インストールが完了したことを示すメッセージが表示されます。
デバイス管理に次の新しいデバイスが表示されました。
同時に、debugview
以下次のことがわかりますlog
。
これはlog
私たちにとって非常に意味のあることで、ドライバーのインストールだけでなく、デバッグに相当するログの出力もできたので、とても安心しました。
HelloWDK.inf の内容は次のとおりです。
;; The Win2K DDK documentation contains an excellent INF reference.
;--------- Version Section ---------------------------------------------------
[Version]
Signature="$CHICAGO$"
Provider=Go2Coding_Device
DriverVer=11/1/2007,3.0.0.3
; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.
Class=Go2CodingDevice
ClassGUID={
EF2962F0-0D55-4bff-B8AA-2221EE8A79B1}
CatalogFile=HelloWDK.cat
;--------- SourceDiskNames and SourceDiskFiles Section -----------------------
; These sections identify source disks and files for installation. They are
; shown here as an example, but commented out.
[SourceDisksNames]
1 = "HelloWDK",Disk1,,
[SourceDisksFiles]
HelloWDK.sys = 1,,
;--------- ClassInstall/ClassInstall32 Section -------------------------------
; Not necessary if using a standard class
; 9X Style
[ClassInstall]
Addreg=Class_AddReg
; NT Style
[ClassInstall32]
Addreg=Class_AddReg
[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-5"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers
;--------- Manufacturer and Models Sections ----------------------------------
[Manufacturer]
%MfgName%=Mfg0,ntamd64
[Mfg0]
; PCI hardware Ids use the form
; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID
%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899
;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98
[Mfg0.ntamd64]
%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899
[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg
[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,DeviceIoControl.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0
; --------- Windows NT -----------------
[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg
[YouMark_DDI.NT.Services]
Addservice = HelloWDK, 0x00000002, YouMark_AddService
[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDK.sys
[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDK\Parameters",\
"BreakOnEntry", 0x00010001, 0
; --------- Files (common) -------------
[YouMark_Files_Driver]
HelloWDK.sys
;--------- Strings Section ---------------------------------------------------
[Strings]
ProviderName="Go2Coding."
MfgName="Go2Coding Soft"
DeviceDesc="Hello World HelloWDK!"
DeviceClassName="Go2Coding_Device"
SvcDesc="Go2Coding"
デモのソース コードが必要な場合は、私にプライベート メッセージを送ってください。