Hello World

编写第一个驱动:HelloWorld

1,启动VS2012,新建一个KMDF Empty工程


2,在KMDF HelloWorld工程中,添加Device.C[注意不是CPP]

3,添加如下代码:

#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 status;
    WDF_DRIVER_CONFIG config;
 
    KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n" ));
    WDF_DRIVER_CONFIG_INIT(&config, KmdfHelloWorldEvtDeviceAdd);
    status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);
    return status;
}

NTSTATUS KmdfHelloWorldEvtDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit)
{
    NTSTATUS status;
    WDFDEVICE hDevice;
    UNREFERENCED_PARAMETER(Driver);

    KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n" ));
    status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &hDevice);
    return status;
}
4,若此时编译,通常会产生两个错误:

a:error : (WppCreateFile)Cannot open file trace.h,

b:error MSB3030: Could not copy the file

5,在HelloWorld工程属性,Wpp Tracing改为No;再F7编译就能成功了。


6,配置部署:一般来说调试开发主机叫host,跑驱动的叫Target或者Test。现在就来配置Target: 

Driver -> Test -> Configure Computers


删除之前target,添加新的,输如计算机名:这个是虚拟机计算机名[不能写IP地址];手动配置,下一步


设置串口,速率等,这些都要跟虚拟机的设置一致。


检查设置,完成配置


7,配置目标驱动环境:解决方案[不是工程]属性中,根据需要进行更改:本例为win7 Debug Win32

8,F7生成解决方案,这时在...\KMDF HelloWorld\Win7Debug\KMDF HelloWorld Package目录中,会生成所需的驱动文件:inf,sys,cat还有一个WdfCoinstaller01011.dll。

9,安装驱动:

手动安装:

把上面的文件Copy到虚拟机,然后设备管理器->添加过时硬件->(double Click)所用硬件->从磁盘安装->浏览到inf所在路径,安装好后,虚拟机可惜需要重启。

利用Viso Studio:

package工程属性,Driver Install -> Deployment

对于真实硬件,选取Install and Verify;如果是虚拟驱动,可以使用Hardware ID,这个ID可以在inf文件中找到,一般格式为:

[Standard.NT$ARCH$]
%KMDFHelloWorld.DeviceDesc%=KMDFHelloWorld_Device, Root\KMDFHelloWorld; TODO: edit hw-id



10,虚拟机调试模式

在连接虚拟机之前,还要配置虚拟机的调试模式;由于win7采用的是BCD启动,因此需要进行如下操作:

在虚拟机中,以管理员模式运行CMD:

  1. bcdedit /debug on
    bcdedit /dbgsettings serial debugport: n baudrate: 115200

    where n is the number of a COM port on the virtual machine.


    最后重启虚拟机。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值