首页
社区
课程
招聘
[求助]关于驱动程序的编译问题
2006-9-28 14:44 7834

[求助]关于驱动程序的编译问题

2006-9-28 14:44
7834
小弟驱动还没有入门,拿人家写好的驱动程序用vc6编译,,,

开始的时候说没有找到NTDD.H

在环境变量中设置好INCLUDE 路径后,

就报一些错误

这些错误是说:
ntddk。h里头有些“;”未定义什么的,有没有人有这样的精力啊,

小弟谢谢了!!!

非常感谢

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞7
打赏
分享
最新回复 (15)
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-9-28 15:34
2
0
不知道

装了DDK没有?

DDK自己有编译器的

写个make文件
雪    币: 560
活跃值: (309)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
laomms 34 2006-9-28 15:42
3
0
VC实现驱动程序的开发和编译的完整步骤:

前提: 事先装好DDK编译环境,各个操作系统不同,WIN2K装WIN2K的DDK,WINXP装WINXP SP1 DDK,WIN2003装WIN2003的DDK。DDK在安装后会自动创建一个环境变量%DDKROOT%

1) 创建批处理文件 build.bat, 其代码如下:

//<--------------build.bat------------------

if "%1" == "" goto InvalidParameter

if not exist %1\bin\setenv.bat goto SetenvNotFound

call %1\bin\setenv.bat %1 %2

%3

cd %4

build

goto exit

:InvalidParameter

echo InvalidParameter.

goto exit

:SetenvNotFound

echo Can't found setenv.bat.

goto exit

:exit

//>--------------build.bat------------------

  说明: %1表示DDK的安装路径,默认为%DDKROOT%,你也可以写绝对路径,如:G:\NTDDK。 %2表示编译模式,checked为DEBUG模式,free为REREASE模式。 %3 表示用来存放DDK源代码的磁盘盘符,如E:。%4 是存放DDK源代码的完整路径,如:E:\ATMP\VCPROG\DDK\DDKTest\test1

2)

执行VC并建立一个空的MakeFile工程,如图:



3)

在Debug的Command栏里输入

" build.bat %DDKROOT% checked  E: E:\ATMP\VCPROG\DDK\DDKTest\test1 “



4)

在Release的Command栏里输入

" build.bat %DDKROOT% free  E: E:\ATMP\VCPROG\DDK\DDKTest\test1 “



5)

创建完工程后,把第1步创建的build.bat文件copy到新建工程的目录下,本例为DDKTest。

6)

在..\test1目录下编写自己的源程序(.c ,.h )和工程文件( makefile , source )。

本例中为: MinDriver.c , MinDriver.h , MAKEFILE , Sources .

//<------------------ Sources 文件-------------------------

TARGETNAME = MinDriver

TARGETPATH = obj

TARGETTYPE = DRIVER

SOURCES = MinDriver.c

//>------------------ Sources 文件-------------------------

//<------------------ MAKEFILE 文件-------------------------

!INCLUDE $(NTMAKEENV)\makefile.def

//>------------------ MAKEFILE 文件-------------------------

//<------------------ MinDriver.h 文件-------------------------

//输出调试宏

#define  DBGPRINT(Fmt)                                                                                                  \

{                                                                                                                                               \

     DbgPrint("MinDriver debug: %s(%d)", __FILE__, __LINE__ );         \

     DbgPrint(Fmt);                                                                                                        \

}

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       );

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        );

//>------------------ MinDriver.h 文件-------------------------

//<------------------ MinDriver.c 文件-------------------------

#include <ndis.h>

#include "MinDriver.h"

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       )

{

     //输入调试信息

     DBGPRINT(" DriverEntry Loading...\n" );

     //指定卸载程序的函数指针,卸载程序会直接调用PacketUnload完成卸载

     DriverObject->DriverUnload = PacketUnload;

     return(0);

}

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        )

{

     PDEVICE_OBJECT DeviceObject;

     PDEVICE_OBJECT OldDeviceObject;

     DBGPRINT("DriverEntry unLoading...\n");

     //将驱动程序创建的设备保存到临时变量中

     DeviceObject = DriverObject->DeviceObject;

     //一个驱动程序可以创建多个设备,循环删除这个驱动程序创建的所有设备

     while( DeviceObject != NULL )

     {

              OldDeviceObject = DeviceObject;

              DeviceObject = DeviceObject->NextDevice;

              IoDeleteDevice( OldDeviceObject );

     }

}

//>------------------ MinDriver.c 文件-------------------------

7)

至此,用VC环境对驱动程序进行编译的过程就已经完成了。执行编译在目录\test1\objchk\i386下可以得到文件MinDriver.sys。
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-9-28 15:52
4
0
精华之~~
向laomms学习
雪    币: 560
活跃值: (309)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
laomms 34 2006-9-28 16:17
5
0
正好最近在弄有关写狗驱动的事情,搜索到此精华文章。乃转贴。
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
thinkSJ 4 2006-9-28 16:24
6
0
向laomms学习!
BTW:在写SOURCES文件时,‘=’号两边不能有空格
再BTW:感觉你的VC能建立的工程比我的这个要多,是模板吗?快交
       出来
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-9-28 16:40
7
0
最初由 thinkSJ 发布
向laomms学习!
BTW:在写SOURCES文件时,‘=’号两边不能有空格
再BTW:感觉你的VC能建立的工程比我的这个要多,是模板吗?快交
出来


他不是转载的么?
模板是他自己的吗
如果是,交出来啊
雪    币: 560
活跃值: (309)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
laomms 34 2006-9-28 16:43
8
0
干脆好人做到底:
WIN98 DDK:http://www.vckbase.com/tools/downtools.asp?id=33
WINXP DDK:http://www.opes.cn/download/cn_xp_ddk.rar
WIN2K DDK:http://www.vckbase.com/tools/downtools.asp?id=31
还有的好像论坛的FTP上有。

放上两个实例源码,VC6.0 WINXP SP2下通过:
附件已删除
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-9-28 16:53
9
0
最初由 laomms 发布
干脆好人做到底:
WIN98 DDK:http://www.vckbase.com/tools/downtools.asp?id=33
WINXP DDK:http://www.opes.cn/download/cn_xp_ddk.rar
WIN2K DDK:http://www.vckbase.com/tools/downtools.asp?id=31
还有的好像论坛的FTP上有。
........


确实是好人。
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
thinkSJ 4 2006-9-28 18:33
10
0
最初由 winndy 发布
他不是转载的么?
模板是他自己的吗
如果是,交出来啊


是因为在我进来的时候他还没回贴,在我回完贴时他都已经回过了,,
雪    币: 560
活跃值: (309)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
laomms 34 2006-9-29 07:15
11
0
最初由 thinkSJ 发布
是因为在我进来的时候他还没回贴,在我回完贴时他都已经回过了,,


thinkSJ果然心思细腻
雪    币: 236
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 11 2006-10-1 20:05
12
0
去下载一个 DDAppWiz.AWX 的模板文件(对应的版本),然后将这个文件拷贝到你vc++的模板目录下:
\Microsoft Visual Studio\Common\MSDev98\Template
然后当你新建一个工程时,在菜单中就会有 W2k DEVICE DRIVER 的工程选项,使用这个选项创建的工程就带有建立驱动的环境和编译开关了,当然你的机器上要安装ntddk。
附加VC6 使用的模板:
上传的附件:
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-10-1 23:03
13
0
最初由 gzgzlxg 发布
去下载一个 DDAppWiz.AWX 的模板文件(对应的版本),然后将这个文件拷贝到你vc++的模板目录下:
\Microsoft Visual Studio\Common\MSDev98\Template
然后当你新建一个工程时,在菜单中就会有 W2k DEVICE DRIVER 的工程选项,使用这个选项创建的工程就带有建立驱动的环境和编译开关了,当然你的机器上要安装ntddk。
附加VC6 使用的模板:


好工具
谢谢

好像是从《Windows 2000 设备驱动程序设计指南》(机械工业出版社)附带的光盘中中来得,拷贝DDAppWiz.awx到%MSVC%\Common\MSDev98\Template目录下即可

雪    币: 236
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 11 2006-10-3 10:19
14
0
楼上的,你比我厉害多了,我虽然使用这个东西,但不知道他是那里来的,哈哈,谢谢,回头看看这本书去。
雪    币: 10110
活跃值: (1754)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wzmooo 2006-10-3 12:27
15
0
很多书上都是互相转这个文件 到处出处那就不知道了
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-10-3 12:49
16
0
最初由 gzgzlxg 发布
楼上的,你比我厉害多了,我虽然使用这个东西,但不知道他是那里来的,哈哈,谢谢,回头看看这本书去。


我在旧书店,花10元钱买了这本书,真是划算啊
还有一本很新的《Windos NT 技术内幕》
两本一起,22元

不过这个出处,我也是google到的,哈哈
那本书我还没看呢
游客
登录 | 注册 方可回帖
返回