阅读:1003回复:3
急急急急!!!!!!
我用DS2.5在NT下写了一个虚拟的驱动,设备名是\"HIT\",但为什么我在应运程序用函数DeviceIoControl与之通迅时,在函数CreateFile中用设备名\"HIT\"总是打不开,还只能设备名\"HIT0\"(在设备名加上一个零)才能打开这是为什么???我要怎么做才能不要加上这个讨厌的\"0\"呢??????
|
|
沙发#
发布于:2002-05-24 08:49
ntStatus = IoCreateDevice (DriverObject,
sizeof (DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, FILE_AUTOGENERATED_DEVICE_NAME, FALSE, DeviceObject); 注意第五个FILE_AUTOGENERATED_DEVICE_NAME参数,它表示由IO管理器自动产生DeviceName序列,其意义是如果系统中只有一个设备,其设备名是DeviceName0,有两个设备则为DeviceName1,....说道这里应该知道怎么做了吧? :D |
|
|
板凳#
发布于:2002-05-24 09:23
加序号是为了区分一个驱动程序管理的几块相同的物理卡,
这样就可以分别打开操作不同的deviceobject对象,否则,你怎么区分。 你要不愿意要也可以,在创建symbollink的时候,不要加序号就行了 |
|
|
地板#
发布于:2002-05-24 13:29
谢谢版主和zydcat的答复。你们的答复使我感到人间的温暖和这里的可信。
用DS构造驱动时,IoCreateDevice和IoCreateSymbolicLink都封装在DS的类中的,所以不可能去改它们的。 这个问题我自己已经解决了。 是这样的: 在DriverEntry函数中,原来有这样一段代码: pHitDevice = new ( static_cast<PCWSTR>(KUnitizedName(L\"Hit\", Unit)),\\\\设备名 FILE_DEVICE_UNKNOWN, static_cast<PCWSTR>(KUnitizedName(L\"Hit\", Unit)),\\\\连接名 0, DO_EXCLUSIVE | DO_DIRECT_IO ) HitDevice(); 关键是 static_cast<PCWSTR>(KUnitizedName(L\"Hit\", Unit)),在做坏,函数KUnitizedName(L\"Hit\", Unit)会把整数 Unit 加到串\"Hit\"的后面在返回,所以设备名和连接名变成了\"Hit0\"!!! |
|