“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
阅读:3054回复:20

传一个简单的隐藏文件的过滤驱动,想请教与应用程序的通信问题

楼主#
更多 发布于:2007-11-22 10:49
在驱动程序中:
// 创建连接名
RtlInitUnicodeString(&DosNameLink, L"\\DosDevices\\SFilter");    
status = IoCreateSymbolicLink(&DosNameLink, &nameString);
返回的status 的值是成功的。我想这个连接应该创建成功的。

在应用程序中:
CHAR    DevicePath[] = "\\\\.\\SFilter";
HANDLE    hDevice;

hDevice = CreateFile(DevicePath,
                      0,
                      FILE_SHARE_READ | FILE_SHARE_WRITE,
                      NULL,
                      OPEN_EXISTING,
                      0,
                      NULL);

if (INVALID_HANDLE_VALUE == hDevice)
{
    MessageBox("打开文件出错!!");
    return;
}

我想这样应该可以打开设备的吧?可是总是提示“打开文件出错”

不知道为什么,所以应用程序至今一直无法通信。


想请各位大哥帮忙下!
附件名称/大小 下载次数 最后更新
sfilter.rar (202KB)  222 2007-11-22 10:49
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-22 10:55
我也是同样的问题,不知道哪里设置出了问题,正在想办法。
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-22 14:43
用GetLastError看看错误出在哪里。
“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-22 15:21
int    i = 1;

i = GetLastError();

i得到的值是00000000000

不知道是什么原因
“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-22 15:48
〖0〗-成功完成,没有错误。
〖1〗-功能错误。
〖2〗-系统找不到指定的文件。

我想是这样吧,说明是正确的可是为什么INVALID_HANDLE_VALUE == hDevice
有点想不通了
“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-11-22 15:52
GetLastError();
放错位置了  

其值为1, 说明功能错误。

不知道这个问题要怎么解决
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-11-22 21:17
我也是createfile返回INVALID_HANDLE_VALUE ,GetLastError()得到0x1错误码,修改调试搞了2,3天了,毫无进展,不知道哪里出了问题,郁闷。
tracera
禁止发言
禁止发言
  • 注册日期2006-01-09
  • 最后登录2018-09-25
  • 粉丝8
  • 关注0
  • 积分-5788分
  • 威望135321点
  • 贡献值0点
  • 好评度625点
  • 原创分1分
  • 专家分0分
  • 社区居民
7楼#
发布于:2007-11-23 10:53
用户被禁言,该主题自动屏蔽!
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
8楼#
发布于:2007-11-23 10:57
ifs中不是有现成的例子吗?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
9楼#
发布于:2007-11-23 12:30
1 看看错误号1什么意思

2 如果不知道错误号1什么意思:确定驱动是否加载成功?
走走看看开源好 Solaris vs Linux
“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-11-23 13:17
我只知道 1 是功能错误
其他不知道了

驱动一定加载成功了
因为可以用了, 可以隐藏文件夹名为hide 的文件夹。和文件后缀名为.hide的文件
所以深信驱动是加载成功的。 我以前写过U盘跟应用程序的通信 觉得是没有问题的
所以这次在我已知的范围内,我想是正确的。

找不出到底错在哪里
mmloveread
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2011-06-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-11-23 13:44
是不是要加  GENERIC_READ  和 GENERIC_WRITE
geland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望251点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-11-23 14:27
小妹你检查一下你的设备对象是否有正确处理IRP_MJ_CREATE!!
ddkittt
驱动牛犊
驱动牛犊
  • 注册日期2004-10-28
  • 最后登录2018-01-07
  • 粉丝0
  • 关注0
  • 积分166分
  • 威望58点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2007-11-23 16:43
改filespy也碰到过这种错误,不知道是怎么回事
llj2655506
驱动牛犊
驱动牛犊
  • 注册日期2007-03-27
  • 最后登录2009-06-11
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望27点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-11-23 20:18
驱动VS应用.rar 以前的找不到了,这里发个简单的连接例子,肯定能帮到你的.写的驱动SYS和应用程序连接的.
驱网无线,快乐无限
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2007-11-23 22:17
你的驱动最少有两个错误。
1,当判断是自己的设备的时候,特别是在irp_mj_create的时候,返回成功并完成,之所以会出现错误代码一,是因为你返回的STATUS_INVALID_DEVICE_REQUEST造成的
2,你的控制码不能那么定义。微软要求某个值以上的是用户自定义,你这样做很可能造成系统的deviceiocontrol被你错误的完成
“驱动小妹”
驱动牛犊
驱动牛犊
  • 注册日期2006-09-09
  • 最后登录2007-11-24
  • 粉丝0
  • 关注0
  • 积分770分
  • 威望78点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-11-24 09:55
谢谢各位大哥指点 试试
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-11-26 12:05
我是在DriverEntry中对创建的控制设备对象建立符号连接,在SfCreate中设置irp成功并完成irp,返回STATUS_SUCCESS,但是当应用程序createfile的时候就蓝屏了,问题还是没有解决,苦恼中。
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-11-26 13:57
按xx_qiang说的,非要在SfCreate中判断DeviceObject是不是控制设备对象里面,也就是在
if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) {……} 里面把 Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST和return STATUS_INVALID_DEVICE_REQUEST 改成 Irp->IoStatus.Status = STATUS_SUCCESS和return STATUS_SUCCESS,这样应用程序CreateFile时是成功的。而我是在SfCreate函数最开始,也就是在 if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) {……} 的前面做这些事的:
        Irp->IoStatus.Status = STATUS_SUCCESS;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest( Irp, IO_NO_INCREMENT );

        return STATUS_SUCCESS;
最终应用程序CreateFile时导致蓝屏,实在不明白为什么非要判断DeviceObject是不是控制设备对象,非要在if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) {……} 里面改才行,在外面改就不行了?搞不懂,SFilter的规则吗?(而且声明变量只能在函数的最开始声明,不然就会编译错误,实在搞不懂?)
hitopsoftware
驱动牛犊
驱动牛犊
  • 注册日期2007-04-02
  • 最后登录2009-09-18
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2008-05-21 15:53
Re:传一个简单的隐藏文件的过滤驱动,想请教与的通信问题应用程序
   
上一页
游客

返回顶部