阅读:1510回复:15
和驱动通信--添加了代码
wsprintf( completeDeviceName, TEXT("\\\\.\\%s"), "Diskperf" );
hDevice = CreateFile( completeDeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 开始,我在应用层写如上程序,打算和diskperf通信,但是hDevice 返回0xffffff. 请问这是为什么? [编辑 - 1/12/05 by aasa2] [编辑 - 1/13/05 by aasa2] |
|
|
沙发#
发布于:2005-01-12 10:07
奇怪!diskperf中原来没有IoCreateSymbolicLink驱动为何也能运行?
我在驱动中增加IoCreateSymbolicLink(),结果电脑重启。 [编辑 - 1/12/05 by aasa2] |
|
|
板凳#
发布于:2005-01-12 10:33
hDevice返回是0xffffff,还是0xffffffff?
你看看GetLastError的结果是多少? |
|
|
地板#
发布于:2005-01-12 10:50
看看有没有这个符号连接
|
|
地下室#
发布于:2005-01-12 12:48
hDevice返回是0xffffff,还是0xffffffff? 这样子也可能是有效句柄 #define INVALID_HANDLE_VALUE (HANDLE)-1 if(hDevice == INVALID_HANDLE_VALUE ) { return ; } |
|
|
5楼#
发布于:2005-01-12 12:51
[quote]奇怪!diskperf中原来没有IoCreateSymbolicLink驱动为何也能运行?
我在驱动中增加IoCreateSymbolicLink(),结果电脑重启。 把你的代码贴出来看看 |
|
|
6楼#
发布于:2005-01-12 13:39
to fsfile:
GetLastError()值为2 to snowStart: 我想是无效句柄 应为我这样做: wsprintf( completeDeviceName, TEXT("\\.\%s"), "Diskperf1111" ); hDevice = CreateFile( completeDeviceName,.......) GetLastError()值还是为 2。 to wowocock 我想我添加了IoCreateSymbolicLink()是不对的,或许根本没有必要添加这个函数。 还请大家帮一帮忙,看一下diskperf。我主要想在应用层使用CreateFile()和diskperf通信 [编辑 - 1/12/05 by aasa2] |
|
|
7楼#
发布于:2005-01-12 16:57
你的驱动加载了没有,CreateService没问题吧。
|
|
|
8楼#
发布于:2005-01-12 18:53
Diskperf本身是OS自己就加载了,并且没有符号名称,你当然打不开咯
|
|
|
9楼#
发布于:2005-01-12 19:59
你自己创建SYMBOLIC LINK因该不会出错吧????
|
|
|
10楼#
发布于:2005-01-13 08:33
我想这段代码用在diskperf上没问题吧?
wowocock请指点一下。 NTSTATUS ntStatus; PDEVICE_OBJECT guiDevice; WCHAR deviceNameBuffer[] = L"\Device\Diskperf"; UNICODE_STRING deviceNameUnicodeString; WCHAR deviceLinkBuffer[] = L"\DosDevices\Diskperf"; UNICODE_STRING deviceLinkUnicodeString; DbgPrint (("Diskperf.SYS: entering DriverEntryn")); RtlInitUnicodeString (&deviceNameUnicodeString, deviceNameBuffer ); ntStatus = IoCreateDevice ( DriverObject, sizeof(DEVICE_EXTENSION), &deviceNameUnicodeString, FILE_DEVICE_DISKPERF, 0, TRUE, &guiDevice ); if(NT_SUCCESS(ntStatus)) { RtlInitUnicodeString (&deviceLinkUnicodeString, deviceLinkBuffer ); ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString, &deviceNameUnicodeString ); if(!NT_SUCCESS(ntStatus)) { IoDeleteDevice( guiDevice ); return ntStatus; } } [编辑 - 1/13/05 by aasa2] |
|
|
11楼#
发布于:2005-01-13 14:37
你用SOFTICE跟踪下看看是哪条指令出的问题.
|
|
|
12楼#
发布于:2005-01-13 15:33
你用SOFTICE跟踪下看看是哪条指令出的问题. 是啊,光看代码很难发现问题,只有调试最管用了。 |
|
|
13楼#
发布于:2005-01-13 19:55
我已经使用其它方法和diskperf通信了。
但是这个问题我会找个时间慢慢解决的,呵呵。 |
|
|
14楼#
发布于:2005-01-21 15:15
我用了半天的时间,搞定了应用层和diskperf通信的问题,高兴。等我修改好了,把代码贴出来。
|
|
|
15楼#
发布于:2005-01-22 18:29
先搞清楚filter device object和control device object之间的区别再说
|
|
|