ZC: 郁金香驱动
[00:50] 创建空的VC6(Console Application)空工程(test_z_event),将 "??\WINDDK\3790.1830\src\general\event\sys" 下的全部文件 copy到 工程(test_z_event)中
[01:30] 对VC6进行一些设置:
Tools --> Options ... --> Directories --> 选择"Executable Files"选项卡 --> New一个 --> 选择路径"??\WINDDK\3790.1830\BIN\X86",并且把它移动到最上面
[02:16] 将 刚才copy过来的驱动文件(所有的.h/.c/.rc) 加入到 项目中
[02:22] 此时编译会出错“??\ZC_Code\VC6\test_z_event\event.c(67) : fatal error C1083: Cannot open include file: 'ntddk.h': No such file or directory”
[02:28] VC6设置:
Tools --> Options ... --> Directories --> 选择"Include Files"选项卡 --> 添加路径"F:\WINDDK\3790.1830\INC\CRT"、"F:\WINDDK\3790.1830\INC\DDK\WXP"、"F:\WINDDK\3790.1830\INC\DDK\WDM\WXP"、"F:\WINDDK\3790.1830\INC\WXP",并把它们移动到最上面
[02:38] 驱动的头文件 非常的多,我们视情况而定(ZC: 看需要添加哪些),现在我们需要的是这个 "F:\WINDDK\3790.1830\INC\CRT"、"F:\WINDDK\3790.1830\INC\DDK\WXP"、"F:\WINDDK\3790.1830\INC\DDK\WDM\WXP"、"F:\WINDDK\3790.1830\INC\WXP",并把它们移动到最上面。
[03:33] 此时再编译,出现错误:
“
f:\WINDDK\3790.1830\inc\ddk\wxp\ntddk.h(10778) : error C2061: syntax error : identifier 'PCONTEXT'
f:\WINDDK\3790.1830\inc\ddk\wxp\ntddk.h(10779) : error C2059: syntax error : '}'
f:\WINDDK\3790.1830\inc\ddk\wxp\ntddk.h(11722) : fatal error C1189: #error : "no target architecture"
Error executing cl.exe.
”
提示语法错误之类的,其实VC6还有一些需要设置。
Tools --> Options ... --> Directories --> 选择"Library Files"选项卡 --> 添加 "F:\WINDDK\3790.1830\LIB\WXP\I386" ,并把它移动到最上面
[04:00] 此时编译,错误依旧(ZC: 一模一样的错误...)
[04:20] 此时需要对 "Project Settings" 进行设置
Build --> Configurations... --> Add... :(ZC: 我这里的信息为如下所示)
Configurations 填写为:check_ddk1830 (ZC:对应的是 Debug的相关设置)
其他 都是默认值
[04:15] ZC: 视频中,将 Debug和Release都删掉了,我没删
[05:25] (ZC: 这里,"Project-->Settings"中,一定要确保左侧的"Setting For:"里面的值选择的是我刚刚创建的"check_ddk1830"所对应的"Win32_check_ddk1830",不然修改的就是别的选项卡所对应的设置 !!!)Project --> Settings ... --> 选项卡"C/C++" --> "Project Options" 中,原来的值是:
“
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/test_z_event.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
”
现在,改成 如下的值:
“
/nologo /Gz /MLd /W2 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x501 /D DBG=1 /Fo"ddk_check/" /Fd"ddk_check/" /FD /c
”
[05:35] 这些参数,我们在后面的章节里面讲
ZC: 注意,我的配置的话,应该要把 上面的 "ddk_check/" 改成 "check_ddk1830/" 才对,这样就变成了:
“
/nologo /Gz /MLd /W2 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x501 /D DBG=1 /Fo"check_ddk1830/" /Fd"check_ddk1830/" /FD /c
”
[05:47] Project --> Settings ... --> 选项卡"Link" --> "Project Options" 中,原来的值是:
“
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/test_z_event.pdb" /debug /machine:I386 /out:"Debug/test_z_event.exe" /pdbtype:sept
”
现在,改成 如下的值:
“
Wdm.lib ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console
/incremental:no /pdb:"check_ddk1830/event.pdb" /debug /machine:I386 /nodefaultlib /out:"check_ddk1830/event.sys"
/subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078
”
整理一下(ZC: 去掉里面的 回车换行),就是这样:
“
Wdm.lib ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"check_ddk1830/event.pdb" /debug /machine:I386 /nodefaultlib /out:"check_ddk1830/event.sys" /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078
”
[06:03] 这里我们看到两个库 Wdm.lib(WDM式驱动的库文件)、ntoskrnl.lib(NT式驱动的库文件),这里 其实ntoskrnl.lib可以不要(ZC: 但是他还是把它留着了...)
[06:18] 此时再编译就没有任何错误/警告了。
ZC: 这里可以看到,原来驱动文件里面的 makefile文件 就不需要了,个人感觉 里面的设置 已经写到上面的"Project --> Settings"的相关地方了。
[06:40] 将 文件event.res 的生成路径改一下,这样编译的时候就不会生成两个文件夹了。
Project --> Settings ... --> 选项卡"Resources" --> "Resource file name :" 中,原来的值"Debug/event.res" 改为 "check_ddk1830/event.res" 。
[07:23] Project --> Settings ... --> 选项卡"Link" --> "Project Options" 中 的设置值:
“
Wdm.lib ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"check_ddk1830/event.pdb" /debug /machine:I386 /nodefaultlib /out:"check_ddk1830/event.sys" /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078
” 同样适用于,NT式驱动的编译 和 WDM式驱动的编译。其他的驱动就不知道了,∵ 其他的驱动 要使用的库文件(lib文件) 肯定是不同的,还有一些参数的设置也不一样
[07:53] 比如 "C/C++"中设置的 "DBG=1" 表示 check版的驱动,也就是相当于 应用程序的Debug版
2、