【问题标题】:com0com virtual port not foundcom0com 虚拟端口未找到
【发布时间】:2012-01-07 20:28:18
【问题描述】:

我已经在 64 位 Windows 7 机器上安装了 com0com v2.2.2.0,显然是成功的。

我运行命令实用程序,如下所示:

command> install PortName=COM9 PortName=COM8
       CNCA0 PortName=COM9
       CNCB0 PortName=COM8
ComDB: COM8 - logged as "in use"
ComDB: COM9 - logged as "in use"

command> busynames COM?*
COM3
COM4
COM5
COM6
COM8
COM9
COMPOSITEBATTERY

注意:记录为“正在使用” 不是错误消息吗?

然后我尝试像这样打开COM8

m_hIDComDev = CreateFileA( szCodedPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( m_hIDComDev == NULL  || m_hIDComDev == INVALID_HANDLE_VALUE ) {

    wchar_t * lpMsgBuf;
    DWORD dw = ::GetLastError(); 
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

    myErrorMsg = (char*)malloc( 200 );
    sprintf(myErrorMsg,"Error creating connection %s ( %s ) %S",
        szPort,szCodedPort,lpMsgBuf);

这失败了

Error creating connection COM8 ( COM8 ) The system cannot find the file specified.

“COM8”和"\\.\COM8"我都试过了。

请注意,对 CreateFileA 的完全相同的调用可以在“真实”COM 端口上完美运行。

问:谁能告诉我问题出在哪里?

答:在 Windows 7 64 位上,您必须启用对未签名驱动程序的测试。

  • 以管理员身份运行命令提示符。 (仅从具有管理员权限的帐户运行是不够的。有关如何执行此操作的详细信息,请参阅here。)

  • 输入命令bcdedit -set TESTSIGNING ON

  • 重启。 (Windows会在桌面右下角放置一个“测试模式”的注释)

对于 Windows 8,这种方法不能令人满意或容易地工作。这是some discussion 的问题和解决方法。

或者,您可能想尝试signed version - 我自己没有尝试过。

【问题讨论】:

  • 它显示 COM8 - logged as "in use" - 这可能是您的问题。
  • @Jonathon Reinhart 你熟悉 com0com 吗?根据文档中的提示,“正在使用”消息仅表示这些 COM 端口已由 com0com 驱动程序分配,因此不会再次分配。如果操作系统认为他们很忙,它会给我一个不同的错误。哎呀!
  • “正在使用”通常是一条错误消息。开源很好,您可以阅读代码以了解它的实际含义。
  • 是的,我使用过 com0com,但使用 C# 访问它。抱歉,我无法提供更多帮助。
  • @Hans Passant 好的,是什么导致了错误?

标签: winapi com0com


【解决方案1】:

如果有人引用这个并且对此主题感兴趣,2.2.2.0 version of com0com 是为 64 位 Windows 签名的。这样就无需跳过将 Windows 置于“测试”模式的麻烦。

【讨论】:

  • 3.0.0.0 版本可以 在 Windows 7 64Bit 上工作。 2.2.2.0 完美运行。
  • SourceForge 上的 3.0.0.0 文件夹中没有 Changes.txt。有谁知道 2.2.2.0 和 3.0.0.0 之间发生了什么变化?
【解决方案2】:

这是我的观点:

  • Microsoft 要求 64-bit driverssigned
  • com0com.sys(64 位)只是一个无符号内核模式驱动程序。

SoftWx 写了一篇关于在 64 位 Windows 7 机器上安装它的有趣教程。您可以获取它here

【讨论】:

  • 谢谢。这为我指明了正确的方向。诀窍是从“以管理员身份”启动的推荐提示符运行 bcdedit。仅从具有管理员权限的帐户运行是不够的。
  • 此解决方案的唯一问题是 Windows 必须处于测试模式才能使驱动程序工作。重新启动后,您将无法再使用它。此解决方案不是永久性的,我不想让我的计算机一直处于驱动程序测试模式(这会带来安全风险)。
【解决方案3】:

这是一个非常古老的帖子,但如果有人像我一样偶然发现它,只是为了添加一些帮助。

在 Windows 10 版本 2004 之后,您可能需要在 BIOS 中禁用安全启动。

我从 SourceForge 获得了该应用程序的签名版本 3.0,这在我的一台 PC 上运行良好(Windows 10 Pro 版本 2004)。我刚刚安装了应用程序,立即创建了两对链接端口。

在我的笔记本电脑(Windows 10 Pro 版本 20H2)上,我没有得到相同的结果。没有创建 COM 端口,并且在设备管理器中无法配置设备。更改BIOS设置后,我重新安装,一切顺利。

参考链接:

https://sourceforge.net/projects/com0com/

https://sourceforge.net/projects/signed-drivers/files/com0com/v3.0/

要回答上面的@DaAwesomeP(我没有代表将其放入 cmets),GitHub 上有一个 repo https://github.com/paulakg4/com0com,我可以在其中看到 changes.txt。如果我比较日期,它看起来就像是相同的 3.0 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2020-10-12
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多