gpt4 book ai didi

c# - 尝试进行串行端口通信,返回 0x102 作为返回码

转载 作者:行者123 更新时间:2023-11-28 08:17:45 25 4
gpt4 key购买 nike

我正在使用 C# 开发一个程序,该程序通过串行端口与硬件通信(所述串行端口通信由 C++ 库处理)。它旨在取代已经变得无法维护的早期软件。目前,它根本没有按照我的意愿工作。在我的工作笔记本电脑上,使用旧程序运行良好。将新程序与旧 DLL 一起使用效果很好。将新程序与在 Debug模式下编译的 DLL 一起使用失败(以前,我能够在 Release模式下编译 DLL 并让它工作,但从那时起,项目中的设置发生了更改,导致它即使在 Release模式下也会失败) .具体来说,我用串行端口监视器跟踪它,它是我发送 SOM(消息开始)的时候。我发送“IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_IMMEDIATE_CHAR: Transmit immediate character),DOWN,TRUE,0x0,3A ,:”,这似乎成功了。然后我执行“IRP_MJ_READ,DOWN,FALSE,0x0,,”,这是用“IRP_MJ_READ,UP,FALSE,0x102,,”回答的错误。使用非调试 DLL 时,会发生完全相同的事件序列。

我一直无法找到对 0x102 的引用作为返回码,并不是每个人都会遇到同样的问题。我在太平洋另一边的同胞偶尔会看到这个错误,但只是在通过虚拟机运行时(他在 Windows 7 上运行,但我们最近需要为在 VM 上运行的 XP 开发。

有人知道这里的情况吗?

更新

嗯,根据我老板的说法,显然迁移到 .Net 是不行的。遗留原因。我的超时时间最多为 10 秒,但在 Debug模式下编译的 DLL 仍然会超时。我发现当在软件的 Release 模式下运行时,调用似乎是通过 rpcld.exe 路由的,它与 Absolute Software 的 LoJack 防盗系统相关联。在 Debug模式下编译时,不会进行此类调用。让我想知道串行端口是否被锁定,除非有一条路由通过那里。为了以防万一,我已经给他们的一位客户服务代表留言了。这可以解释为什么在我的对手进入虚拟机之前它在他的计算机上工作。

最佳答案

MS说0x102是一个NTSTATUS的意思

The given Timeout interval expired.

http://www.stallion.com.au/html/userdoc/easyadmw/easyadmw_2.html说了类似的话

Last Status This is the NT_STATUS code of the last Read IRP (IRP_MJ_READ) completed by the driver. The actual code can be decoded from the NT DDK file 'ntstatus.h', however any value except for STATUS_SUCCESS (0x0) or STATUS_TIMEOUT (0x102) is usually considered an error.

可能需要修改新的 DLL 以在与此设备通信时使用更高的超时...

或者您只是丢弃 DLL 并使用 SerialPort 类...

几个有用的链接:

编辑:
根据 OP 的评论,读取超时设置为 1000 毫秒(超时 = 间隔 * 乘数 + 常量),因为乘数为 0,常量 1000(毫秒)是读取操作使用的超时。

编辑 2 - 在 OP 更新之后:

您没有在原始帖子中提供这是什么样的设备的信息 - 此类设备通常实现某种“反调试”技术...这可能正是您所看到的...此类措施由于使用此类设备而实现:使用调试器可能会损害设备的效率......因此为了能够制造这样的设备,你需要实现一些措施以使其至少对任何攻击者来说更难...... . 没有这样的方案是 100% 安全的...

关于c# - 尝试进行串行端口通信,返回 0x102 作为返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com