阅读:1746回复:12
为什么无法打开设备??
我的WDM驱动的AddDevice如下:
NTSTATUS AddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo ) { NTSTATUS status; PDEVICE_OBJECT fdo; UNICODE_STRING devname; RtlInitUnicodeString( &devname, L\"\\\\DosDevices\\\\FILEIO\" ); status = IoCreateDevice( DriverObject, sizeof(pdx), &devname, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo ); if( STATUS_SUCCESS==status ) { pdx.LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo); } return status; } 用softice跟踪,所用的调用都成功,但是我在application用 hdevice = CreateFile( \"\\\\\\\\.\\\\FILEIO\", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 想打开设备,却总是失败。 GetLastError()=2(The system cannot find the file specified. ) 这是什么原因呢?? |
|
|
沙发#
发布于:2002-12-06 15:05
用CreateFile( )需用IoCreateSymbolicLink来创建一个符号连接。
|
|
|
板凳#
发布于:2002-12-06 15:23
如何使用IoCreateSymbolicLink来创建一个符号连接?
|
|
地板#
发布于:2002-12-06 15:55
AddDevice明明返回了STATUS_SUCCESS,但是我在设备管理器里看到的确实一个叹号。怪不得打不开这个设备了。
我用softice的driver和device命令都可以看到这个设备的 这又是什么原因呢????? 晕 |
|
|
地下室#
发布于:2002-12-06 16:00
要用CreateFile访问,需知道设备的符号连接名。你到DDK去找一个例子看一下。
|
|
|
5楼#
发布于:2002-12-06 16:06
但是设备管理器看到的为什么是叹号呢??
叹号应该表示该设备当前的状态不正常呀 |
|
|
6楼#
发布于:2002-12-06 16:06
create success 并不代表 start success
|
|
|
7楼#
发布于:2002-12-06 16:11
那么怎样才能确定设备start successfully??
|
|
|
8楼#
发布于:2002-12-06 16:21
IoRegisterDeviceInterface() //register and enable your device interface. 之后再调用 IoAttachDeviceToDeviceStack(fdo, pdo); |
|
|
9楼#
发布于:2002-12-07 09:25
我对照了别的Wdm的例子看了一下,发现还得加上PnpHandler
在AddDevice里还得上fdo->Flags &= ~DO_DEVICE_INITIALIZING; Wdm比我想象的要复杂,还是Ndis省事一些。 |
|
|
10楼#
发布于:2002-12-08 13:14
你可以通过guid来访问设备,楼上的大老说的很对。
|
|
|
11楼#
发布于:2002-12-10 11:49
崇拜啊!
|
|
|
12楼#
发布于:2002-12-10 14:29
你打开的FILEIO是一个设备名称,而不是符号连接!
hdevice = CreateFile( \"\\\\\\\\.\\\\FILEIO\", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 在DRIVERENTRY之外创建的设备理论上都是需要自己动手把DO_DEVICE_INITIALIZING清掉的 |
|