在VC中利用Makefile工程编译DDK驱动

本文介绍了一种在Visual C++环境中通过编写批处理文件实现Windows Driver Model驱动程序编译的方法,使得开发者能够在VC界面下直接进行DDK程序的编译工作,极大提升了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 相信很多朋友都为VC不能直接编译DDK程序而苦恼吧!所以有的就直接在MSDOS窗口中或者用单独的一个批处理文件来编译,但总是繁琐,偶也为此大伤脑筋过,最近终于找到这个比较方便的办法,将VC本身和批处理完美地结合在一起了。唯一的缺点就是编译出错时双击信息行不能自动跳转到出错行。场面话就不说了,赶紧来Look一下吧!方法如下:

1 先写好一个批处理文件,取名为test.bat,内容如下:
@echo off
echo Function : 开始DDK编译环境设置并编译WDM Driver File
echo on
call D:/WINDDK/3790/bin/setenv.bat D:/WINDDK/3790 chk wxp // 调用DDK的环境配置文件
F:
cd F:/project/driver/test  //进入自己的代码目录
build -cz

2 用VC的工程向导新建一个Makefile工程,在General窗口的Build command line框中输入test.bat,点击OK完成此向导;

3 把所有的源代码加入此工程;

4 选择VC菜单中的Tools->Options,在Directory->Executable files中添加此test.bat的路径,然后直接点VC的编译图标就能编译了。

注:在此工程中点击“编译”时会自动去调用test.bat,而它的路径正是在第4步中设置的;
 

整合FileDisk和Filemon的MFC开源码,希望对新手有帮助! 说明:对大侠们可能没什么价值,仅以此献给像我一样的菜鸟! 软件环境和框架: 1.软件环境:VS.net2003 + XP IFS + DS3.2 2.框架:采用MFC框架; 功能: 1.自动加载FileDisk和Filemon的驱动程序部分; 2.用FileDisk生成一个虚拟硬盘,并自动分配盘符; 3.对新生成的虚拟盘符挂接Filemon的过滤驱动; 4.退出时自动卸载FileDisk和Filemon驱动; 不完善的地方(有兴趣的朋友可以完善下,并希望完善后请在我这里跟帖上传源码,就算是对我开源的支持,谢谢!): 1.FileDisk生成的虚拟硬盘需要先手动在资源管理器里进行格式化;可以在程序里调用SHFormat之类的启动格式化窗口进行改善,也可以使用第三方提供的格式化函数进行格式化; 2.Filemon目前是应用程序使用按照时间来进行查询的过滤方式,希望能改成驱动程序主动通知应用程序。 ------- 整理后面的回贴后追加的内容 ---------------- 1.在BOOL CMainFrame::Init(void)函数里有段网络通讯的代码,里面访问了我自己建的局域网服务器,大家那里应该是没有的,所以会报错,不好意思!注释或删掉以下内容就好了! CWebWrapper clsWebWrapper; CHttpDataPackage_Receive HttpData_Receive; //Call server function if (clsWebWrapper.PostCommand( _T(""), _T("abcd我你他"), &HttpData_Receive, _T("WebGrab"), this, FALSE, FALSE)) //if (clsWebWrapper.GetCommand( _T(""), _T("abcd我你他"), &HttpData_Receive, // _T("WebGrab"), this, FALSE, FALSE)) { AfxMessageBox(HttpData_Receive.GetContent_DataAll()); } else { AfxMessageBox("网络通讯失败"); return FALSE; } 2.大家如果想看文件过滤出来的信息,可以在BOOL CMainFrame::Init(void)函数里去掉对这句话//m_nTimer = SetTimer( 1, 500/*ms*/, NULL );的注释,那就相当于启动了定时器,然后会有信息显示在子窗口里,,当然我并没有去实现子窗口的滚动,所以子窗口里的内容满了后,就看不到最新的信息了,,哈哈,,我实在是没时间啊,,公司里的项目这2天在出演示版呢,,,忙啊。。。。大家自己加加代码哈,,,这也是个不完善的地方,希望完善了的朋友,,上传下代码啊,,,多谢! 3.另外,请下载使用了的朋友,有空的话来帮忙说下使用上有没有问题啊,如果有问题,我好及时做修改啊,谢谢了!如果可以用的话,有空就帮忙回个贴,说可以用,这样别的朋友就知道这个代码是可以用的,免得大家还以为下了个不能用的东东,那不是郁闷死了!先谢谢了! ------------- 最新补充说明 ------------------- 1.FileDisk和Filemon我用的都是比较老的版本了,FileDisk是2004年的,Filemon是4.34 ;FileDisk的作者在其网站上已经出了新版本了,是2006年的,我下载了,还没时间看过,所以大家有空也可以整合2006的驱动来替换我的老版本,毕竟老版本是可能有些不完善的地方的;而Filemon则没有再继续开放源码,,所以如果有朋友有幸获得了新版本的源码,能不能上传个,,多谢了! 2.Filemon.exe会自动在其目录下创建File.img文件做为虚拟磁盘使用的文件,大家只要手动格式化一次创建出来的虚拟磁盘,以后就不用再格式化,可以不断使用了,所以以后大家要是做成产品的话,可以直接把已经格式化好的对应的File.img文件一起打包到安装包里,呵呵! 3.我放弃了FileDisk中对CDROM部分的支持,以及Filemon中对Win9x的VxD驱动的支持,如果有朋友需要的话,可以自行添加!
sysinternals程序和部分程序源码 Sysinternals_Source/ AccessEnumSource filemon434 NtfsInfoSource TokenmonSource AdRestoreSource fmifs procfeatures TVcache AutologonSource FundeleteSource regmon435 VcMonSource CacheSetSource JunctionSource SDeleteSource VxDMonSource Ctrl2CapSource NetstatpSource SecDemoSource DiskExt NewSidSource ShareEnumSource SysinternalsSuite/ accesschk.exe Diskmnt.hlp PHYSMEM.EXE Reghide.exe AccessEnum.exe Diskmon.exe pipelist.exe regjump.exe AdExplorer.chm DISKMON.HLP PORTMON.CNT Regmon.exe ADExplorer.exe DiskView.exe portmon.exe REGMON.HLP ADInsight.chm DMON.SYS PORTMON.HLP RootkitRevealer.chm ADInsight.exe du.exe procexp.chm RootkitRevealer.exe adrestore.exe efsdump.exe procexp.exe sdelete.exe Autologon.exe Eula.txt ProcFeatures.exe ShareEnum.exe autoruns.chm Filemon.exe procmon.chm ShellRunas.exe autoruns.exe FILEMON.HLP Procmon.exe sigcheck.exe autorunsc.exe handle.exe psexec.exe streams.exe Bginfo.exe hex2dec.exe psfile.exe strings.exe Cacheset.exe junction.exe psgetsid.exe sync.exe Clockres.exe ldmdump.exe Psinfo.exe tcpvcon.exe Contig.exe Listdlls.exe pskill.exe tcpview.chm Coreinfo.exe livekd.exe pslist.exe Tcpview.exe ctrl2cap.amd.sys LoadOrd.exe psloggedon.exe TCPVIEW.HLP ctrl2cap.exe logonsessions.exe psloglist.exe Volumeid.exe ctrl2cap.nt4.sys movefile.exe pspasswd.exe whois.exe ctrl2cap.nt5.sys newsid.exe psservice.exe Winobj.exe dbgview.chm ntfsinfo.exe psshutdown.exe WINOBJ.HLP Dbgview.exe pagedfrg.exe pssuspend.exe ZoomIt.exe Desktops.exe pagedfrg.hlp Pstools.chm diskext.exe pdh.dll psversion.txt Diskmnt.exe pendmoves.exe RegDelNull.exe
转自看雪的CCDeath 【文章标题】: WinMount虚拟磁盘深入研究(-)之filedisk源代码详细分析 【下载地址】: 自己搜索下载 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 我的驱动入门三终结版,还再学习中。由于个人也有些事情要处理,研究起刘涛涛WinMount的虚拟 磁盘,而且这方面的书籍,貌似乎没见过,只有傻傻的几K代码存在,没注释什么的,整体框架也没说。 虚拟光驱用实现文件来模拟磁盘的原理,是文件系统驱动程序。 把filedisk驱动安装,查看install.txt文件。 1.Copy the driver (filedisk.sys) to %systemroot%\system32\drivers\. 2.Import filedisk.reg to the Registry. 3.Reboot. 4.Use the program filedisk.exe to mount/umount files, for an example of use see the file example.txt. 可以不用重起机子的方法,找一个动载加载驱动工具:DriverMonitor不错了。然后在“开始菜单”-> "运行"输入 "net start filedisk" 出现:“ 请求的服务已经启动”。这个必须得成功才行哦。 接下来注意点。cmd后 出现这个目录 C:\Documents and Settings \Administrator>,在接下来敲入 filedisk /mount 0 c:\temp\filedisk.img 8M f: C:\Documents and Settings \Administrator>filedisk /mount 0 c:\temp\filedisk.img 8M r: 回车一下。 出现"FileDisk:系统找不到指定路径" 。原因就出在这 "c:\temp\filedisk.img" 中的C:\temp要这个目录才行。至于 filedisk.img不是必须,会自动创建。 如果有出现"FileDisk:函数不正确" 中的“filedisk /mount 0 ”中"0"代号已经被使用。可以改为"1". 查看一下,结果就出现一个还未格式化 8M R磁盘,查看C:\temp下生成一个filedisk.img也8M。想卸载 掉"filedisk /umount r:". 还可以创建很大的虚拟磁盘,你把"8M"改换其他的就是了。 以上如果都没出现结果,基本上就没兴趣继续研究下去了,我看到了很多人初学filedisk都遇到以上这 些问题(包括我在内) ,把我折腾了半天。 先来分析驱动层代码,后来分析应用层代码。更详细的请看附件里的源代码。我对代码工程方式重新布 局,用起来更方便。 ===================================//先来分析驱动层代码 1.对filedisk.h进行分析 #define FILE_DEVICE_FILE_DISK 0x8000//用户定义范围0x8000~ #define IOCTL_FILE_DISK_OPEN_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_FILE_DISK_CLOSE_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_FILE_DISK_QUERY_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS) typedef struct _OPEN_FILE_INFORMATION { LARGE_INTEGER FileSize;//文件大小 BOOLEAN ReadOnly;//只读属性 USHORT Fil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值