首页
社区
课程
招聘
[原创] VsCode配置Wdk7600开发环境 以及 "自动编译" 和 sources文件简单介绍..
发表于: 2023-6-6 11:35 20532

[原创] VsCode配置Wdk7600开发环境 以及 "自动编译" 和 sources文件简单介绍..

2023-6-6 11:35
20532

目录

VsCode配置Wdk7600开发环境 以及 "自动编译" 和 sources文件简单介绍..

一丶 简介

虽然Wdk7600已经过时,但还是有很多项目是使用Wdk7600编写的. 而很多老项目配置环境有很多种方式. 如配置在visual studio 中编写. 配置在 notepad++中编写. 搜索全网也没看到有VsCode配置的方式. 索性这里就写一下.

 

注意: 不讨论文章技术.对你有用你就看,对你无用就无需看. 且 不要站在现在很多人都用Vs2019 vs2022的IDE去写项目的角度去看. 个人写代码用什么IDE都可以. Vs2019也不错.也很推荐.

 

但本文章也主要讲解WDK7600的配置. 很多企业人员有很多项目为了稳定不会贸然升级驱动. 所以WDK7600用的还是蛮多.

1.2 软件安装

如果配置此环境请下好以下软件.

请将 Wdk7600 安装到默认目录 等熟悉后可以将其修改为你自定义的目录. 或者先通读此片文章之后再进行配置.

1.3 开发环境配置步骤

  • 1.添加路径包含项

    点击设置-设置里面搜索System include 然后在里面添加项.

1
2
3
C:\WinDDK\7600.16385.1\inc\crt
C:\WinDDK\7600.16385.1\inc\ddk
C:\WinDDK\7600.16385.1\inc\api

  • 2.新建一个驱动文件,和对应sources文件,查看是否可以使用驱动文件

sources文件内容如下:

1
2
3
4
5
6
7
8
TARGETNAME=TestDriver
TARGETPATH=.
TARGETTYPE=DRIVER
 
MSC_WARNING_LEVEL= /W3 /WX
 
 
SOURCES= Driver.c

driver.c文件内容如下

1
2
3
4
5
6
7
#include
 
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
                     PUNICODE_STRING RegistryPath) {
  DbgPrint("Hello, world!\n");
  return STATUS_SUCCESS;
}

在命令行中启动 编译环境. 然后cd到驱动文件所在目录. 直接输入 build -cez 或者 bld即可.

 

 

 

可以看到可以正常输出. 到这一步说明VsCode的开发环境已经配置好了. 可以放心写代码了.

 

但有一点不足, 每次编译都要另外一个CMD窗口启动吗? 这样显得会很麻烦. 如果能集成到VsCode中那么是不是就很好了.

1.4 集成终端编译

1.4.1 集成任务

这一点经过我的研究已经实现. 我们需要使用VsCode中的 任务 在VsCode中有一个 终端,终端选项中有一个配置任务. (task) 我们只需要生成一个task. 然后将task替换为我给的即可.

 

注意,这里使用的路径是默认路径,如果你修改过wdk的安装目录.请手动更改此json.
图片描述
生成的tasks.json使用我给定的即可.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "BuildDebug64_Win7OrHigh",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ chk x64 WIN7\" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "BuildRelease64_Win7OrHigh",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ fre x64 WIN7\" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "BuildDebug32_Win7OrHigh",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ chk x86 WIN7\" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "BuildRelease32_Win7OrHigh",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ fre x86 WIN7\" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "BuildDebug_WinXP",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ chk x86 WXP \" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "BuildRelease_WinXP",
      "type": "shell",
      "command": "C:\\Windows\\System32\\cmd.exe",
      "args": [
        "/k",
        "pushd \".\" && call \"C:\\WinDDK\\7600.16385.1\\bin\\setenv.bat \" C:\\WinDDK\\7600.16385.1\\ fre x86 WXP \" && popd"
      ],
      "group": "build",
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    }
  ]
}

1.4.2 设置为全局任务.

上面生成好的task.json 请放到

 

C:\Users\YourComputerName\AppData\Roaming\Code\User
如下图所示:

 

最后 在终端中运行任务. 任务则选择你配置好的编译环境即可.

 

 

 

在终端的右侧 则有你运行的任务. 现在你可以在你想要的任务中 运行 bld 命令进行编译.

 

再也不需要 单独打开一个cmd窗口进行编译了.

 

如你想要编译 win7release64版本则切换到此任务编译即可. 想编译32位版本则切换到32即可. 任务可以开多个.需要哪个在那个里面执行 bld命令即可.

二丶Sources 文件编程

下面的内容可看可不看.我是写到一起做个记录.

2.1 INCLUDES 字段

主要作用: 处理Include与CPP文件分离得情况

 

场景:

 

目录A存放着 xxx.h文件.

 

目录B(主目录)存放着 xxx.cpp得实现文件

 

目录B中有目录A

 

那么对应sources应该改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
TARGETNAME=testDriver1
TARGETPATH=.
TARGETTYPE=DRIVER
 
MSC_WARNING_LEVEL= /W3 /WX
 
 
INCLUDES= \
        ./test1            
 
SOURCES= Driver.cpp\
         test.cpp

目录A则是 test1 这里主要使用了 INCLUDES 命令指明了 .h所在得目录.

 

当然也可以指向系统得目录.

1
2
3
4
5
6
7
8
9
INCLUDES=   $(INCLUDES) \
            $(DDK_INC_PATH); \
            ..\common; \
            ..\..\util;
 
 
INCLUDES = $(DDK_INC_PATH);\
 
DDK_INC_PATH == WDKROOT\inc\ddk
  • 目录A(test1)中 .h文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifdef __cplusplus
  extern "C"
  {
  #endif
 
  #include
  #include
  #include
  #include "ntimage.h"
  #ifdef __cplusplus
  }
  #endif
 
 
  PVOID testprint();
  • 主目录实现.cpp内容如下

    driver.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include
    #include
    #include "test.h"
    VOID DriverUnLoad(
        PDRIVER_OBJECT DriverObject)
    {
        KdPrint(("Exit"));
    }
     
    extern "C" NTSTATUS DriverEntry(
        PDRIVER_OBJECT pDriverObj,
        PUNICODE_STRING pReg)
    {
        UNREFERENCED_PARAMETER(pDriverObj);
        UNREFERENCED_PARAMETER(pReg);
        KdBreakPoint();
        testprint();        //引用了Test.h中的函数
        return STATUS_SUCCESS;
    }

    test.cpp

    1
    2
    3
    4
    5
    6
    7
    #include "test.h"
     
    PVOID testprint()
    {
        DbgPrint("testprint");
        return NULL;
    }

如果sources中不使用 INCLUDES知名.则会报错,无法找到xxx.h 亦或者 .h和.cpp都放在同一目录下.(主目录下) 则不需要使用 INCLUDES

2.2 i386_SOURCES 32位驱动使用内联汇编

  • 用法一,cpp中使用内联汇编.

在32位驱动中可以让我们使用 内联汇编.

 

设: test.cpp test.h driver.cpp都在同一目录. 所以不需要使用 INCLUDES字段了.

 

例子如下:

 

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2023-6-6 14:14 被TkBinary编辑 ,原因: 加图,和修改代码.
收藏
免费 6
支持
分享
最新回复 (9)
雪    币: 1125
活跃值: (10207)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
2
占楼,给新手看的.老东西了.写下来自己记录下. 对你有用就看,没用就关即可. 
2023-6-6 11:37
0
雪    币: 2023
活跃值: (5417)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是不是有图没显示出来
2023-6-6 11:56
0
雪    币: 1125
活跃值: (10207)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
4
值得怀疑 是不是有图没显示出来
那块
2023-6-6 13:15
0
雪    币: 2023
活跃值: (5417)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
TkBinary 那块
所有图都看不到啊,难道是我网络问题?
2023-6-6 13:53
0
雪    币: 1125
活跃值: (10207)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
6
值得怀疑 所有图都看不到啊,难道是我网络问题?
可能外链,我改一下.
2023-6-6 13:59
0
雪    币: 1125
活跃值: (10207)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
7
值得怀疑 所有图都看不到啊,难道是我网络问题?
现在看下.
2023-6-6 14:08
0
雪    币: 14
活跃值: (469)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
图片没有问题了,感谢楼主分享。
2023-6-6 14:14
0
雪    币: 1125
活跃值: (10207)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
9
taskiller 图片没有问题了,感谢楼主分享。
okok 没啥技术含量,能学到就行.  主要任务那块可以看看. 研究了有段时间. 终于集成了.
2023-6-6 14:17
0
雪    币: 127
活跃值: (3053)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可以尝试 xmake + vscode + clangd 的组合
d63K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5L8h3q4C8k6g2)9J5k6h3W2G2i4K6u0r3i4K6t1K6i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8X3N6#2K9h3c8W2i4K6u0r3M7s2u0G2K9X3g2U0N6q4)9#2k6X3g2^5j5h3#2H3L8r3g2K6i4K6y4r3K9h3c8Q4x3@1c8%4k6r3E0Q4x3U0g2W2z5g2)9J5y4h3p5&6i4K6t1#2j5U0q4Q4x3U0g2W2y4g2)9J5y4e0S2S2i4K6t1#2j5e0S2Q4x3U0g2W2y4#2)9J5y4h3p5^5i4K6t1#2z5r3u0Q4x3U0g2W2y4g2)9J5y4h3u0S2i4K6t1#2z5r3j5`.
5ceK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1j5X3!0G2P5q4)9J5k6h3!0J5k6#2)9J5c8X3y4F1i4K6u0r3x3U0l9I4z5q4)9J5c8U0l9$3i4K6u0r3x3e0c8Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0V1N6$3c8C8i4K6u0r3
2023-6-6 16:58
0
游客
登录 | 注册 方可回帖
返回