阅读:1449回复:4
关于应用程序与驱动之间通信的问题,请高手不吝赐教。驱动中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,到底为什么啊? :( |
|
沙发#
发布于:2005-06-03 11:39
错误1说明函数不正确。
你的代码中PhysicalDrive0是干什么用的?? |
|
|
板凳#
发布于: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] |
|
地板#
发布于:2005-06-04 09:51
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试试看 |
|
地下室#
发布于:2005-06-08 14:56
终于搞定了,原来是驱动在处理IRP_MJ_CREATE时没有正确返回状态!
多谢楼上二位!! [编辑 - 6/8/05 by keyia] |
|