大虾们请帮忙 !驱动为何不能用??

lsmhg 2003-12-12 12:45:45
我是新手.

我自己写了一个驱动,只做了
ADDDIVICE()
和UNLOAD();

在ADDDEVICE()
里注册了一个设备接口?
没有分配资源?

然后使能 ?

在设备管理器里面为何老显示黄色 的叹号??

请指教?/

另:卸载为何不调用UNLOAD()
我跟踪不到他的消息文本..


谢谢?


...全文
52 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsmhg 2003-12-22
  • 打赏
  • 举报
回复
help me ?
lsmhg 2003-12-18
  • 打赏
  • 举报
回复
谢谢答复
我跟踪了,没有问题。已经ADDDEVICE了。
我用的只是软件,没有硬件。不过这应该没有关系。

不过我自己新注册了一个设备类,以及一个GUID,
驱动安装完成后,在设备管理器里系统显示工作状态正常。
该驱动只注册了一个设备接口,以及响应了最少的PNP消息。


我也用过UNKNOWN类,安装时系统 报告找不到硬件信息。

anothervip 2003-12-17
  • 打赏
  • 举报
回复
1.查一下你的设备安装在哪个设备类下了,如:Unknown等等。如果你的设备只是一个虚拟

设备没有实际的硬件,如果不指定设备类,则不会调用AddDevice。

2.建议楼主用softice在DriverEntry和AddDevice处加断点。
lsmhg 2003-12-17
  • 打赏
  • 举报
回复
注册表中有我的设备,
是用inf安装的,
为什么打开不了端口 啊?
anothervip 2003-12-13
  • 打赏
  • 举报
回复
看看注册表里有没有你的设备。

另外请问楼主,你是用inf安装的吗?
lsmhg 2003-12-13
  • 打赏
  • 举报
回复
谢谢关注

我的代码也大体这么写,可是仍然出现黄色叹号?

这两天有编译别人的代码,驱动是装上了,可是GUID却打不开了
如下:
我调用
HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
{
printf("No HDEVINFO available for this GUID\n");
return NULL;
}

// Get interface data for the requested instance
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
{
DWORD ll= ::GetLastError();
printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance\n");
SetupDiDestroyDeviceInfoList(info);
return NULL;
}


系统报告出错 说:No SP_INTERFACE_DEVICE_DATA available for this GUID instance。

为什么?


我做的例子是WIN2000实例开发的第一个WDM1。,并且在SETUPV.inf里自己定义了一个设备类,系统报告说该驱动工作正常。
为何打开不了接口?
有什么地方错了么?我该注意哪些方向啊?

请大虾帮忙啊?
ilovedrv 2003-12-12
  • 打赏
  • 举报
回复
NTSTATUS WdmDrvAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
{
NTSTATUS status;
PDEVICE_OBJECT fdo;
UNICODE_STRING DeviceName;
UNICODE_STRING DosDeviceName;

RtlInitUnicodeString(&DeviceName, WDMDRV_DEVICE_NAME);
status = IoCreateDevice(DriverObject, sizeof(WDMDRV_DEVICE_EXTENTION),
&DeviceName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
if (!NT_SUCCESS(status))
{
return status;
}

PWDMDRV_DEVICE_EXTENTION dx = (PWDMDRV_DEVICE_EXTENTION)fdo->DeviceExtension;
dx->fdo = fdo;
dx->lOpenHandleCount = 0;

RtlInitUnicodeString(&DosDeviceName, WDMDRV_DOS_DEVICE_NAME);
status = IoCreateSymbolicLink(&DosDeviceName, &DeviceName);

if (!NT_SUCCESS(status))
{
IoDeleteDevice(fdo);
return status;
}

status = IoRegisterDeviceInterface(pdo, &WDMDRV_GUID, NULL, &dx->ifSymLinkName);

if (!NT_SUCCESS(status))
{
IoDeleteDevice(fdo);
return status;
}

IoSetDeviceInterfaceState(&dx->ifSymLinkName, TRUE);

dx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, pdo);

fdo->Flags &= ~DO_DEVICE_INITIALIZING;
fdo->Flags |= DO_BUFFERED_IO;

return STATUS_SUCCESS;
}

另外:驱动没有装载成功,当然不会调用UNLOAD()。

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧