zoukankan      html  css  js  c++  java
  • 如何搭建Visual Studio的内核编程开发环境

    最近正在看《寒江独钓——Windows内核安全编程》这本书,感觉这本书非常好,有兴趣的朋友可以买来看看,有关这本书的信息请参考:http://www.china-pub.com/195592

    这本书里没有详细介绍如何搭建Visual Studio的内核编程开发环境,在这里我简单介绍一下,希望能让像我一样刚学习内核编程的朋友更方便地开发。

    一、下载与安装WDK

    《寒》说,以前说的DDK、IFS已成为历史,现在已经改为使用WDK了,具体下载地址可以这里注册并下载:http://connect.microsoft.com,目前的版本是6001.18002,大小只有577MB。

    下载安装后,假设安装路径为“c:winddk”,接下来要设计环境变量,添加:BASEDIR,值为:“c:winddk6001”。必须设置此环境变量,否则下面编译时会出问题。

    二、Visual Studio的开发环境

    笔者用的是Visual Studio 2005,所以就以此版本介绍,其他版本的类似。

    首先新建项目,类型选择Visual C++->General中的“Makefile Project”,这里的项目保存路径不要包括空格、中文等字符,否则会造成后面编译时的出错。

    image

    下一步,在Debug Configuration Settings中设置如下:

    Build command line: ddk_build chk wxp

    Clean commands: ddk_clean chk wxp

    Rebuild command line: ddk_build chk wxp /a

    Output: first.sys

    如图:

    image

    下一步,在Release Configuration Settings中与Debug的一样,只是把“chk”改为“fre”即可,如下图:

    image

    接下来设置工程属性,在All Configurations中,Configuration Properties->NMake->Include Search Path中添加路径:

    C:WinDDK6000incddk;C:WinDDK6000incapi

    接下来添加源代码文件,举个例子:

    first.c

    #include <ntddk.h>

    VOID DriverUnload(PDRIVER_OBJECT driver) 

        DbgPrint("Driver unloading... "); 
    }

    NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) 

        DbgPrint("Entered Driver Entry! ");

        driver->DriverUnload = DriverUnload; 
        return STATUS_SUCCESS; 
    }

    现在可以发现在VS中可以使用VS开发环境带来的强大功能,如查看PDRIVER_OBJECT的定义、查看某变量的成员函数(Ctrl+J)等等。

    接下来要为编译作准备,添加以下这些文件:

    makefile

    !IF 0

    Copyright (C) Microsoft Corporation, 1999 - 2002

    Module Name:

        makefile.

    Notes:

        DO NOT EDIT THIS FILE!!!  Edit .sources. if you want to add a new source 
        file to this component.  This file merely indirects to the real make file 
        that is shared by all the components of Windows NT (DDK)

    !ENDIF

    !INCLUDE $(NTMAKEENV)makefile.def

    sources

    TARGETNAME=first 
    TARGETTYPE=DRIVER 
    TARGETPATH=obj

    SOURCES=first.c

    ddk_build.bat

    @echo on 
    @echo %1 is chk or fre %2 is WXP or W2K or WNET.

    if "%4"=="/a" call ddk_clean %1 %2

    pushd. 
    call %BASEDIR%insetenv.bat %BASEDIR% %1 %2 
    popd

    @echo on 
    build

    ddk_clean.bat

    if exist Debug rd /s /q Debug 
    if exist Release rd /s /q Release 
    if exist obj%1_%2_x86 rd /s /q obj%1_%2_x86

    现在,按F7就可以编译连接了。

    以上就是搭建VS的内核开发环境过程。

    三、调试环境

    在《寒》一书中,有详细的调试方法介绍,在这里就不说了。不过可以透露的是,使用到的工具是:VMware、WinDbg、srvinstw.exe等。

    http://www.cnblogs.com/cxun/archive/2009/08/03/1537646.html

  • 相关阅读:
    有一天人人都会变成程序猿
    mysql 假设存在id则设数据自添加1 ,不存在则加入。java月份计算比較
    做程序员的老婆应该注意的一些事情
    人类科技的发展为什么会是加速度的(TRIZ方法再推荐)
    Unity5.0 RPG角色扮演历险类游戏之 森林历险记
    linux目录对照命令——meld
    iOS --- [持续更新中] iOS移动开发中的优质资源
    【spring bean】spring中bean的懒加载和depends-on属性设置
    【spring bean】 spring中bean之间的引用以及内部bean
    【spring set注入 注入集合】 使用set注入的方式注入List集合和Map集合/将一个bean注入另一个Bean
  • 原文地址:https://www.cnblogs.com/findumars/p/5543260.html
Copyright © 2011-2022 走看看