Windows 10ドライバー開発入門(1):環境構築

ドライバー開発は初心者にとって不親切で、どこからどのように始めればよいのかわかりません。初心者にとっては、特に簡単な問題が発生したときに、どう解決すればよいか分からずに困ってしまいますが、この一連のチュートリアルは、そうした問題を解決するために使用されます。

ほとんどのドライバー開発チュートリアルでは、最初にドキュメントとデモが投稿されます。

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、、、、、、、、などの関連ツール必要です。これらのツールは、ここからダウンロードできます。テスト機に置きます。DriverMonitorIRPTraceWinObjDeviceTreeDiskViewDriverManagerEzDriverInstaller

通常モードでは、テスト マシンは署名のない Windows ドライバーをインストールできないため、署名の検証を必要としないようにテスト マシンを変更する必要があります。

を押してshiftテスト マシンを再起動します。

ここに画像の説明を挿入します
このインターフェイスに入り、[トラブルシューティング] -> [起動設定] -> [再起動] を選択します。システムに再起動し、次のページで 7 を押して Windows を起動します。

ここに画像の説明を挿入します
再起動後、コンパイルされたコードをHelloWDKテスト マシンに配置し、デバイス管理に入り (コンピューターを右クリック -> 「管理」)、古いハードウェアを追加します。

ここに画像の説明を挿入します

表示されるまで次の手順を実行し从磁盘安装、先ほどコピーしたパスへのインストール パスを選択します。

ここに画像の説明を挿入します

ドライバーをインストールする前に、ドライバー先以管理员的身份を開いて以下を選択し、出力を待ちdebugviewますCapturelog
ここに画像の説明を挿入します

ドライバーをインストールするときに、次のプロンプトが表示されますが、そのままインストールすることを選択します。

ここに画像の説明を挿入します
インストールが完了したことを示すメッセージが表示されます。

ここに画像の説明を挿入します

デバイス管理に次の新しいデバイスが表示されました。

ここに画像の説明を挿入します
同時に、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"

デモのソース コードが必要な場合は、私にプライベート メッセージを送ってください。

おすすめ

転載: blog.csdn.net/weixin_40425640/article/details/125259953#comments_28549300