阅读:1599回复:11
运用CreateFile打开vxd
下面是打开Apihook0.vxd,请问按照这种格式打开,Apihook0.vxd应该放在什么地方,是system下吗?还是system32下?还是和应用层的exe文件同目录?请知道的准确地说一下吧。顺便讲一下静态加载和动态加载时CreateFile的第一个参数是不是应该稍微不同。谢谢!
HANDLE g_SysHandle = ::CreateFile(\"\\\\\\\\.\\\\Apihook0\", 0, 0, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, NULL ); |
|
|
沙发#
发布于:2004-06-01 22:54
放在在你的环境变量中已经声明过的任意路径下~~
当然可以放在SYSTEM下。 |
|
板凳#
发布于:2004-06-02 08:53
一般放在system目录,当然放在别的地方也可以,
应该叫静态安装和动态安装吧,它是操作系统如何加载Apihook0.vxd驱动, 和你怎么访问它没有关系,CreateFile函数的参数应该一样的, 静态安装一般是在系统启动时就被加载,常把它放入sysytem.ini文件或写入注册表来实现, 动态安装是在需要访问时,由CreateFile函数动态加载vxd驱动 |
|
|
地板#
发布于:2004-06-02 08:58
为什么我将机器中的所有Apihook0.vxd都删了,得到的句柄都是g_SysHandle=0x0000020
但是将参数Apihook0变为一个错误的不存在的比如abcdefg,返回的结果就是0xffffffff, 我都搞懵了。 |
|
|
地下室#
发布于:2004-06-02 09:20
为什么我将机器中的所有Apihook0.vxd都删了,得到的句柄都是g_SysHandle=0x0000020
这个原因可能是因为我删除之后没有重新启动机器。 看来调程序还是用动态装载方便。 有没有人说一下动态装载要干些什么? 是不是将生成Apihook0.vxd文件与exe文件放到一个目录比如debug下,然后将CreateFile的第一个参数改为\\\\\\\\.\\\\Apihook0.vxd 就可以了? !!!!!!!!!!!真得不想再失败 |
|
|
5楼#
发布于:2004-06-02 11:44
如果你使用vtools来生成驱动,那么你可以选择要生成的VxD是动态加载的或是静态加载的。如果你使用DDK,你则需要修改手动修改def文件,如:VxD TESTVxD DYNAMIC,当然你的处理函数如:Device_Init等有所不同
|
|
|
6楼#
发布于:2004-06-02 13:05
在生成Vxd之前,要在Device Parameters页面,选上复选框Dynamically loadable,对应到.def文件的“VXD VXDNAME DYNAMIC“,就是楼上说的,可以添加
OnSysDynamicDeviceInit OnSysDynamicDeviceExit消息初始化,也可以在DIOC_OPEN中初始化 |
|
|
7楼#
发布于:2004-06-02 14:12
按照AllenZh的方法用vtools重新建了个模板,选择dynamic。并用vc编译生成nouse1.vxd,
建了一个应用程序nouse1exe.exe,以下列方式打开动态vxd,其中vxd应该放在应用程序nouse1exe.exe的上一级目录(原先以为与nouse1exe.exe同目录),也就是与nouse1exe.dsw同目录。 HANDLE g_SysHandle = ::CreateFile(\"\\\\\\\\.\\\\nouse1.vxd\", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, NULL ); 奇怪,这次返回的还是0x0000020 这可是一个完全不同的vxd啊,是不是只要返回成功了,句柄都是0x0000020? |
|
|
8楼#
发布于:2004-06-02 19:22
如果是F5 debug的话,vxd就要和dsw在一个目录,因为此时在工作目录就是dsw目录
返回0x20很正常,只是个index而已 OnSysDynamicDeviceInit在load的时候调用,OnSysDynamicDeviceExit在unload的时候调用,DIOC_OPEN在createfile的时候就会有一次 |
|
9楼#
发布于:2004-06-02 21:34
对于第一个参数还是有点区别,
静态时,\\\\\\\\.\\\\Apihook0 动态时,\\\\\\\\.\\\\Apihook0.vxd |
|
|
10楼#
发布于:2004-06-04 16:02
按照AllenZh的方法用vtools重新建了个模板,选择dynamic。并用vc编译生成nouse1.vxd, 返回成功句柄不一定是0x0000020,可能正好这个句柄没有使用。你多家个驱动,先打开它,然后在打开这个,结果一定不是先前哪个了(当然你这时你还没有关闭以前哪个驱动) |
|
|
11楼#
发布于:2004-06-08 10:44
引用
________________________________________________________ 下面是打开Apihook0.vxd,请问按照这种格式打开,Apihook0.vxd应该放在什么地方,是system下吗?还是system32下?还是和应用层的exe文件同目录?请知道的准确地说一下吧。顺便讲一下静态加载和动态加载时CreateFile的第一个参数是不是应该稍微不同。谢谢! HANDLE g_SysHandle = ::CreateFile("\\\\.\\Apihook0", 0, 0, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, NULL ); ――――――――――――――――――――――――――― 不管放在这三个目录那个都行,在加载是会自动搜索 动态加载为: HANDLE g_SysHandle = ::CreateFile("\\\\.\\Apihook0.vxd", 0, 0, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, NULL ); |
|
|