archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1746回复:12

为什么无法打开设备??

楼主#
更多 发布于:2002-12-06 14:45
我的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. )

这是什么原因呢??
archim
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-06 15:05
用CreateFile( )需用IoCreateSymbolicLink来创建一个符号连接。
生命驱动,活力无限!
DUPONTYP
驱动牛犊
驱动牛犊
  • 注册日期2002-11-30
  • 最后登录2004-04-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-06 15:23
如何使用IoCreateSymbolicLink来创建一个符号连接?
archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-06 15:55
AddDevice明明返回了STATUS_SUCCESS,但是我在设备管理器里看到的确实一个叹号。怪不得打不开这个设备了。

我用softice的driver和device命令都可以看到这个设备的

这又是什么原因呢?????

archim
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-06 16:00
要用CreateFile访问,需知道设备的符号连接名。你到DDK去找一个例子看一下。


生命驱动,活力无限!
archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-06 16:06
但是设备管理器看到的为什么是叹号呢??
叹号应该表示该设备当前的状态不正常呀
archim
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-12-06 16:06
create success 并不代表 start success
www.bjjcz.com
archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-06 16:11
那么怎样才能确定设备start successfully??
archim
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-06 16:21


IoRegisterDeviceInterface()
//register and enable your device interface.

之后再调用
IoAttachDeviceToDeviceStack(fdo, pdo);
生命驱动,活力无限!
archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-07 09:25
我对照了别的Wdm的例子看了一下,发现还得加上PnpHandler
在AddDevice里还得上fdo->Flags &= ~DO_DEVICE_INITIALIZING;

Wdm比我想象的要复杂,还是Ndis省事一些。
archim
yjhleaf
驱动小牛
驱动小牛
  • 注册日期2001-11-04
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-08 13:14
你可以通过guid来访问设备,楼上的大老说的很对。
忽如一夜春风来,千树万树梨花开。
danielxu22
驱动中牛
驱动中牛
  • 注册日期2002-11-22
  • 最后登录2014-03-24
  • 粉丝0
  • 关注1
  • 积分2分
  • 威望18点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
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清掉的
游客

返回顶部