yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1598回复:11

运用CreateFile打开vxd

楼主#
更多 发布于:2004-06-01 22:05
下面是打开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
);
yetty_forever
KingV
驱动牛犊
驱动牛犊
  • 注册日期2001-11-27
  • 最后登录2006-08-04
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-01 22:54
放在在你的环境变量中已经声明过的任意路径下~~
当然可以放在SYSTEM下。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-02 08:53
一般放在system目录,当然放在别的地方也可以,
应该叫静态安装和动态安装吧,它是操作系统如何加载Apihook0.vxd驱动,
和你怎么访问它没有关系,CreateFile函数的参数应该一样的,
静态安装一般是在系统启动时就被加载,常把它放入sysytem.ini文件或写入注册表来实现,
动态安装是在需要访问时,由CreateFile函数动态加载vxd驱动
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-02 08:58
为什么我将机器中的所有Apihook0.vxd都删了,得到的句柄都是g_SysHandle=0x0000020
但是将参数Apihook0变为一个错误的不存在的比如abcdefg,返回的结果就是0xffffffff,
我都搞懵了。
yetty_forever
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-02 09:20
为什么我将机器中的所有Apihook0.vxd都删了,得到的句柄都是g_SysHandle=0x0000020
这个原因可能是因为我删除之后没有重新启动机器。
看来调程序还是用动态装载方便。
有没有人说一下动态装载要干些什么?
是不是将生成Apihook0.vxd文件与exe文件放到一个目录比如debug下,然后将CreateFile的第一个参数改为\\\\\\\\.\\\\Apihook0.vxd
就可以了?
!!!!!!!!!!!真得不想再失败
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-02 11:44
如果你使用vtools来生成驱动,那么你可以选择要生成的VxD是动态加载的或是静态加载的。如果你使用DDK,你则需要修改手动修改def文件,如:VxD  TESTVxD DYNAMIC,当然你的处理函数如:Device_Init等有所不同
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-02 13:05
在生成Vxd之前,要在Device Parameters页面,选上复选框Dynamically loadable,对应到.def文件的“VXD VXDNAME DYNAMIC“,就是楼上说的,可以添加
OnSysDynamicDeviceInit
OnSysDynamicDeviceExit消息初始化,也可以在DIOC_OPEN中初始化
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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?
yetty_forever
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-06-02 19:22
如果是F5 debug的话,vxd就要和dsw在一个目录,因为此时在工作目录就是dsw目录
返回0x20很正常,只是个index而已

OnSysDynamicDeviceInit在load的时候调用,OnSysDynamicDeviceExit在unload的时候调用,DIOC_OPEN在createfile的时候就会有一次
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-02 21:34
对于第一个参数还是有点区别,
静态时,\\\\\\\\.\\\\Apihook0
动态时,\\\\\\\\.\\\\Apihook0.vxd
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-04 16:02
按照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?

返回成功句柄不一定是0x0000020,可能正好这个句柄没有使用。你多家个驱动,先打开它,然后在打开这个,结果一定不是先前哪个了(当然你这时你还没有关闭以前哪个驱动)
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
crystal521
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2004-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
);

 

Crystal521
游客

返回顶部