Sunteți pe pagina 1din 8

1. În Driver.

c, începeți prin includerea acestor anteturi:


#include <ntddk.h>
#include <wdf.h>
Ntddk.h conține principalele definiții ale kernel-urilor Windows pentru toate driverele, în timp
ce Wdf.h conține definiții pentru drivere, bazate pe Windows
Driver Framework (WDF).

2. Apoi, furnizați declarații pentru cele două callback-uri pe care le veți utiliza:
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;

3. Utilizați următorul cod pentru a scrie DriverEntry :


DriverEntry este punctul de intrare pentru toate driverele, cum ar fi main() este pentru multe
aplicații pentru modul de utilizator. Misiunea DriverEntry este de a inițializa structurile și
resursele la nivelul driver-ului. În acest exemplu, ați introdus "Hello World"
pentru DriverEntry , ați configurat obiectul driverului pentru a vă înregistra punctul de intrare
pentru inversarea apelului EvtDeviceAdd , apoi ați creat obiectul driver și ați revenit.
Obiectul driverului acționează ca obiect parental pentru toate celelalte obiecte cadru pe care le-
ați putea crea în driverul dvs., care includ obiecte ale dispozitivului, cozi de intrare / ieșire,
cronometre, spinlocks și multe altele. Pentru DriverEntry , recomandăm insistent păstrarea
numelui ca "DriverEntry" pentru a ajuta la analiza și depanarea codului.
4. Apoi, utilizați următorul cod pentru a scrie KmdfHelloWorldEvtDeviceAdd :
EvtDeviceAdd este invocat de sistem când detectează că dispozitivul a sosit. Misiunea lui este de
a inițializa structurile și resursele pentru dispozitivul respectiv. În acest exemplu, ați tipărit
mesajul "Hello World" pentru EvtDeviceAdd , ați creat obiectul dispozitivului și ați
revenit. În alte drivere pe care le scrieți, este posibil să creați cozi de intrare / ieșire pentru
hardware-ul dvs., să configurați un spațiu de stocare în contextuldispozitivului pentru informații
specifice dispozitivului sau să efectuați alte activități necesare pregătirii dispozitivului. Pentru
dispozitivul adăugați callback, observați cum l-ați denumit cu numele driver-ului ca prefix
( KmdfHelloWorld EvtDeviceAdd). În general, vă recomandăm să numiți funcțiile driver-ului în
acest fel pentru a le diferenția de funcțiile celorlalți driveri. DriverEntry este singurul pe care
trebuie să-l numiți exact.
5.Driverul acum arata in felul urmator
#include <ntddk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;

NTSTATUS
DriverEntry(
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
// NTSTATUS variable to record success or failure
NTSTATUS status = STATUS_SUCCESS;

// Allocate the driver configuration object


WDF_DRIVER_CONFIG config;

// Print "Hello World" for DriverEntry


KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld:
DriverEntry\n"));

// Initialize the driver configuration object to register the


// entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAdd
WDF_DRIVER_CONFIG_INIT(&config,
KmdfHelloWorldEvtDeviceAdd
);

// Finally, create the driver object


status = WdfDriverCreate(DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE
);
return status;
}

NTSTATUS
KmdfHelloWorldEvtDeviceAdd(
_In_ WDFDRIVER Driver,
_Inout_ PWDFDEVICE_INIT DeviceInit
)
{
// We're not using the driver object,
// so we need to mark it as unreferenced
UNREFERENCED_PARAMETER(Driver);

NTSTATUS status;

// Allocate the device object


WDFDEVICE hDevice;

// Print "Hello World"


KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld:
KmdfHelloWorldEvtDeviceAdd\n"));

// Create the device object


status = WdfDeviceCreate(&DeviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
&hDevice
);
return status;
}

În continuare, vă veți construi driver.


Build driver-ul
1. În fereastra Soluție Explorer , faceți clic dreapta pe Soluția ;KmdfHelloWorld&quot; (1
proiect) și alegeți Manager de configurare . Alegeți o configurație și o platformă atât pentru
proiectul de driver, cât și pentru proiectul pachetului. Pentru acest exercițiu, alegem Debug și
x64.

2. În fereastra Solution Explorer , faceți clic dreapta pe KmdfHelloWorld și


alegeți Properties . În Wpp Trasare&gt; Toate opțiunile , setați Run Wpp tracking la No. Faceți
clic pe Aplicați și apoi pe OK .
3. Pentru a construi driverul și a crea un pachet de drivere, alegeți Build Solution din
meniul Build . Visual Studio prezintă progresul de construire în fereastra de ieșire . (Dacă
fereastra Output nu este vizibilă, selectați-o din meniul Vizualizare .) Când ați verificat dacă
soluția a fost construită cu succes, puteți închide Visual Studio.

4. Pentru a vedea driverul construit, în File Explorer, mergeți la folderul KmdfHelloWorld și apoi
la C: \ KmdfHelloWorld \ x64 \ Debug . Dosarul
include:
KmdfHelloWorld.sys - fișierul de driver kernel-mode
KmdfHelloWorld.inf - un fișier de informații pe care Windows îl folosește la
instalarea driverului
KmdfHelloWorld.cat - un fișier de catalog pe care instalatorul îl utilizează
pentru a verifica semnătura de test pentru pachetul driver

S-ar putea să vă placă și