V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
helloallen
V2EX  ›  问与答

有没有 Windows 驱动开发的筒子,请教一个问题

  •  
  •   helloallen · 2018-02-22 22:39:08 +08:00 · 1218 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各个朋友,我在 XP 上使用 DDK 开发时遇到如下问题,帮忙看看。谢谢

    我在 DeviceAdd 中调用了 IoRegisterDeviceInterface API,该函数的返回值为 0。

    #define GUID_UART_INTERFACE GUID_DEVCLASS_PORTS

    ret = IoRegisterDeviceInterface(port->pdo, &GUID_UART_INTERFACE, NULL, &port->interface_name);

    ret = 0,在注册表中发现了 MACH\STSTEM\CURRENT\CONTROL\DEVICECLASS 下面发现了相应的键值,也返回了 interface_name。

    但是 winobj 没有发现符号链接,在应用层可以枚举,枚举到的值和注册表中的相同,但 createfile 打开失败,找不到设备。

    IoSetDeviceInterfaceState 也返回 0,但无法理解的是 IoSetDeviceInterfaceState 多次调用都是返回 0,根据 MSDN 应该第二次调用应该出错的。IoSetDeviceInterfaceState 在 IRP_MN_START_DEVICE 中调用。

    不知道什么问题。

    3 条回复    2018-02-22 23:13:57 +08:00
    geelaw
        1
    geelaw  
       2018-02-22 23:01:01 +08:00
    我觉得你这种描述方式即使 Raymond Chen 也帮不了你
    helloallen
        2
    helloallen  
    OP
       2018-02-22 23:13:04 +08:00
    简单点说就是 IoRegisterDeviceInterface 和 IoSetDeviceInterfaceState 都调用成功了,interface_name 和注册表中的值一致,但是在 winobj 中没有发现只想 /device/xxxx 的符号链接,通过 SetupDiGetDeviceInterfaceDetail 得到的值也是和 interface_name 一致的,但是 createfile 打开失败。
    helloallen
        3
    helloallen  
    OP
       2018-02-22 23:13:57 +08:00
    简单点说就是 IoRegisterDeviceInterface 和 IoSetDeviceInterfaceState 都调用成功了,interface_name 和注册表中的值一致,但是在 winobj 中没有发现指向 /device/xxxx 的符号链接,通过 SetupDiGetDeviceInterfaceDetail 得到的值也是和 interface_name 一致的,但是 createfile 打开失败。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:22 · PVG 16:22 · LAX 01:22 · JFK 04:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.