Introducción al desarrollo de controladores de Windows 10 (1): configuración del entorno

El desarrollo de controladores no es amigable para los principiantes: no sabemos cómo ni por dónde empezar. Los principiantes están perdidos, especialmente cuando se encuentran con un problema muy simple y no saben cómo resolverlo, esta serie de tutoriales se utiliza para eliminar estos obstáculos.

La mayoría de los tutoriales de desarrollo de controladores primero publicarán documentación y demostraciones para nosotros:

Introducción a los controladores de Windows: Introducción a los controladores de Windows - Controladores de Windows | Microsoft Docs

Github: https://github.com/Microsoft/Windows-driver-samples

Pero para los principiantes, al principio es de poca utilidad porque no pueden entenderlo. Todavía tenemos una cierta base de programación antes de ingresar al desarrollo de controladores. Se supone que tienes instalado vs2019 o superior vistual studio. Primero desarrolle un Hello Worldcontrolador, instálelo en la máquina de prueba y vea qué sucede. No nos importan los principios lógicos internos, sigamos el ejemplo y creemos la primera Hello Worlddemostración.

Instalación de WDK (kit de controladores de Windows)

La instalación WDKtambién es un asunto relativamente simple: Vistual studio Installbúsquelo en Internet Windows Driver Kite instálelo. Una vez completada la instalación, aparecerá Windows Driver Kitque ha sido verificado.

Insertar descripción de la imagen aquí

Escribiendo HolaWDK

Cree un nuevo proyecto, seleccione Empty WDM Driverel proyecto, cree un nuevo driver.cpparchivo y escriba el siguiente código:

Insertar descripción de la imagen aquí

// 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;
}

En este momento, se producirá un error de compilación.

error C2220: 以下警告被视为错误
warning C4100: “pRegPath”: 未引用的形参
warning C4100: “pDriverObject”: 未引用的形参

También necesitamos las siguientes configuraciones:

1. Propiedades de configuración - C/C++ - Tratar las advertencias como errores en General está establecido en No

2. Establezca el Modo de firma en Propiedades de configuración - Firma del controlador - General en Desactivado.

3. Propiedades de configuración-Inf2cat-run Inf2cat está configurado en No.

Después de una compilación exitosa, se generan los archivos HelloWDM.infy . HelloWDM.sysSe completa la primera demostración.

Probar máquina virtual

Al crear el controlador, a diferencia de las aplicaciones desarrolladas anteriormente, es mejor no probarlo directamente en la máquina local. Necesitamos una máquina virtual con Windows 10. Para conocer el método de instalación de la máquina virtual, consulte los tutoriales pertinentes.

Insertar descripción de la imagen aquí
También necesitamos herramientas relacionadas para el desarrollo de controladores, incluidas , , , DebugView, DriverMonitor, IRPTrace, que se pueden descargar aquí . Ponlo en la máquina de prueba.WinObjDeviceTreeDiskViewDriverManagerEzDriverInstaller

En modo normal, la máquina de prueba no puede instalar controladores de Windows no firmados. Necesitamos cambiar la máquina de prueba para que no requiera verificación de firma.

Presione para shiftreiniciar la máquina de prueba.

Insertar descripción de la imagen aquí
Ingrese a esta interfaz y seleccione Solucionar problemas->Configuración de inicio->Reiniciar. Vuelva a ingresar al sistema y presione 7 en la siguiente página para iniciar Windows.

Insertar descripción de la imagen aquí
Después de reiniciar, coloque el código compilado HelloWDKen la máquina de prueba, ingrese a la administración de dispositivos (haga clic derecho en la computadora -> Administrar) y agregue hardware obsoleto.

Insertar descripción de la imagen aquí

Siga el siguiente paso hasta que aparezca 从磁盘安装, seleccione la ruta de instalación a la ruta que acaba de copiar.

Insertar descripción de la imagen aquí

Antes de instalar el controlador, 先以管理员的身份lo abrimos debugview, Captureseleccionamos lo siguiente y esperamos logel resultado.
Insertar descripción de la imagen aquí

Al instalar el controlador, aparecerá el siguiente mensaje, elija instalarlo de todos modos.

Insertar descripción de la imagen aquí
Indica que la instalación está completa.

Insertar descripción de la imagen aquí

Los siguientes dispositivos nuevos aparecieron en la administración de dispositivos.

Insertar descripción de la imagen aquí
Al mismo tiempo, debugviewa continuación , podemos ver lo siguiente log.

Insertar descripción de la imagen aquí
Esto es logde gran importancia para nosotros, muestra que no solo instalamos exitosamente el controlador, sino que también imprimimos el registro, lo que equivale a depurar, y nuestros corazones se sienten aliviados.

El contenido de HelloWDK.inf es el siguiente:

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

Si necesitas el código fuente de la demo, puedes enviarme un mensaje privado.

Supongo que te gusta

Origin blog.csdn.net/weixin_40425640/article/details/125259953#comments_28549300
Recomendado
Clasificación