keyia
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2008-06-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1449回复:4

关于应用程序与驱动之间通信的问题,请高手不吝赐教。

楼主#
更多 发布于:2005-06-03 09:07


驱动中IoCreateDevice:

RtlInitUnicodeString( &nameString, L\"\\\\Device\\\\Sfilter\" );
RtlInitUnicodeString( &symbolicLinkNameString, L\"\\\\DosDevices\\\\Sfilter\" );
...
status = IoCreateDevice( DriverObject,
0,                                                   &nameString,
FILE_DEVICE_DISK_FILE_SYSTEM,
FILE_DEVICE_SECURE_OPEN
TRUE,
&gSFilterControlDeviceObject );

status = IoCreateSymbolicLink( &symbolicLinkNameString, &nameString );


应用程序中的createfile:
#define DEVICE_NAME \"Sfilter\"
...
wsprintf(strDeviceName,\"\\\\\\\\.\\\\%s\",DEVICE_NAME);
...
devHandle = CreateFile(strDeviceName,
PhysicalDrive0
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

能够在winobj中的\"??\"中看到\"sfilter\",但总是不能获得驱动的handle,geilasterror错误代码为1,到底为什么啊? :(
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-03 11:39
错误1说明函数不正确。
你的代码中PhysicalDrive0是干什么用的??
在交流中学习。。。
keyia
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2008-06-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-03 15:10
对不起搞错了
devHandle = CreateFile(strDeviceName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

函数有问题你是指createfile 还是 iocreatedevice?

驱动能够正常工作,但就是不能通过createfile获得handle,好郁闷啊!!


[编辑 -  6/3/05 by  keyia]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-04 09:51


驱动中IoCreateDevice:

RtlInitUnicodeString( &nameString, L\"\\\\Device\\\\Sfilter\" );
RtlInitUnicodeString( &symbolicLinkNameString, L\"\\\\DosDevices\\\\Sfilter\" );
...
status = IoCreateDevice( DriverObject,
0,                                                   &nameString,
FILE_DEVICE_DISK_FILE_SYSTEM,
FILE_DEVICE_SECURE_OPEN
TRUE,
&gSFilterControlDeviceObject );

status = IoCreateSymbolicLink( &symbolicLinkNameString, &nameString );


应用程序中的createfile:
#define DEVICE_NAME \"Sfilter\"
...
wsprintf(strDeviceName,\"\\\\\\\\.\\\\%s\",DEVICE_NAME);
...
devHandle = CreateFile(strDeviceName,
PhysicalDrive0
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

能够在winobj中的\"??\"中看到\"sfilter\",但总是不能获得驱动的handle,geilasterror错误代码为1,到底为什么啊? :(

1.在MJ_CREATE设置个断点,看CreateFile的时候,断点是不是走到了
2。如果断点都没有走到,
status = IoCreateDevice( DriverObject,
0,                                                   &nameString,
FILE_DEVICE_DISK_FILE_SYSTEM,
FILE_DEVICE_SECURE_OPEN
TRUE,
&gSFilterControlDeviceObject );
把TRUE改成FALSE,FILE_DEVICE_SECURE_OPEN改成0试试看
keyia
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2008-06-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-08 14:56
终于搞定了,原来是驱动在处理IRP_MJ_CREATE时没有正确返回状态!
多谢楼上二位!!

[编辑 -  6/8/05 by  keyia]
游客

返回顶部