zoukankan      html  css  js  c++  java
  • VS2015驱动环境配置

    准备

    vs2015社区中文版

    链接:https://pan.baidu.com/s/1gucO9NcymG1x8RRQetaNIw

    提取码:a4zj

     

    WDK10.0.26639

    链接:https://pan.baidu.com/s/140qjNUfo8TCNDqlmWmjuQw

    提取码:sng8

     

    正文

    安装位置默认,选择自定义安装

    选择功能这里只勾3个部分:vs2015更新3,编程语言的Visual C++,通用windows应用开发工具的windows 10 SDK10.0.10240。

    最后确认安装,这里安装的时间会相对较长,安装完成后就可以确定并启动了

    安装完vs2015后再安装wdk10,运行安装包后默认安装C盘,这里直接next就行

    隐私声明这里,直接选择yes和next就行

    许可协议这里选择Accept就行

    最后就是等待Windows Driver Kit的安装

    安装结束后close就行,learn more about复选框里勾或不勾都没啥影响

    重新打开vs2015,选择新建一个项目,这个时候就可以在Visual C++下看到Windows Driver这个选项

    打开Windows Driver->WDF选择里面的Empty(KMDF),名称和位置根据习惯修改

    项目建好后首先添加一个新建项,我习惯是用C写驱动代码,所以新建文件后缀为.C,如果习惯用C++写则文件后缀为.CPP

    最后就是修改项目属性,打开调试->项目属性

    由于我编译为debug版本,所以这里要确认配置的是debug的属性,如果是release则在配置这里选择为release后再修改属性

    打开C/C++的常规设置,把警告等级改成警告等级3,其他不同的设置按照图中进行修改即可

    打开Driver Settings,这里的Target OS Version和Target Platform按照图中设置就行,如果驱动在win10下运行就把Target OS Version改为windows10

    Inf2Cat是用于签名的,我们这里暂时不用管这个,在run inf2cat中选择否就行

    最后打开Driver Signing,这个也是驱动签名的,这里在Sign Mode里选择off就行。到此就完成了所有环境的配置,接下来就可以开始编写程序了

    用一段测试代码编译一下,成功后如图,测试代码在下面

    测试代码作用是打印打印ssdt函数地址,这个不用管,主要是加载驱动后会在

    DebugView中看到我们的相关信息,到虚拟机中加载,在DebugView中查看结果如图

    测试代码

     1 #include <ntddk.h>
     2 
     3 /*导出ssdt结构体*/
     4 typedef struct _ServiceDescriptorTable 
     5 {
     6   PVOID ServiceTableBase;                    //System Service Dispatch Table 的基地址  
     7   PVOID ServiceCounterTable;                //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。 
     8   unsigned int NumberOfServices;        //由 ServiceTableBase 描述的服务的数目。  
     9   PVOID ParamTableBase;                        //包含每个系统服务参数字节数表的基地址-系统服务参数表 
    10 } *PServiceDescriptorTable;
    11 extern PServiceDescriptorTable KeServiceDescriptorTable;
    12 
    13 VOID DriverUnload(PDRIVER_OBJECT pDriverObject) 
    14 {
    15   KdPrint(("驱动卸载成功!
    "));
    16 }
    17 
    18 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING reg_path) 
    19 {
    20   ULONG ssdtindex,ntaddress;
    21   ULONG *ssdtbase;
    22   KdPrint(("驱动成功加载!
    "));
    23   
    24   ssdtbase = KeServiceDescriptorTable->ServiceTableBase;
    25   for (ssdtindex = 0; ssdtindex < (ULONG)KeServiceDescriptorTable->NumberOfServices; ssdtindex++)
    26   {
    27     ntaddress = *ssdtbase;
    28     KdPrint(("%0x
    ", ntaddress));
    29     ssdtbase += 1;
    30   }
    31 
    32   
    33   pDriverObject->DriverUnload = DriverUnload;
    34   return STATUS_SUCCESS;
    35 }

    参考

    https://www.mycode.net.cn/language/cpp/1771.html

     
  • 相关阅读:
    .NET Core CSharp初级篇 1-1 基础类型介绍
    ASP.NET Core 基于JWT的认证(二)
    ASP.NET Core 基于JWT的认证(一)
    HOJ 1096 Divided Product (DFS)
    HDU1698 Just a Hook (区间更新)
    独立写作(A or B)
    HDU1394 Minimum Inversion Number(线段树OR归并排序)
    HDU5441 Travel (离线操作+并查集)
    学生管理系统(list)
    HDU5437 Alisha’s Party (优先队列 + 模拟)
  • 原文地址:https://www.cnblogs.com/QKSword/p/10887687.html
Copyright © 2011-2022 走看看