DisconnectNamedPipe返回false且GetLastError()返回1的可能原因
DisconnectNamedPipe返回错误码1(ERROR_INVALID_FUNCTION)的可能情况
错误码1对应Windows系统错误ERROR_INVALID_FUNCTION,以下是导致该错误的常见场景:
- 管道句柄已失效:尽管代码先调用了
isPipeClosed()检查,但存在竞态风险——检查完成后到调用DisconnectNamedPipe前,管道句柄可能被其他线程关闭、释放或复用,此时调用断开操作会触发无效函数错误。 - 管道状态不允许执行断开操作:
- 管道实际仍处于
CONNECTING_STATE或未完成客户端连接的状态,代码中的status变量可能未与管道真实状态同步,导致跳过判断后执行无效操作; - 管道已处于断开、关闭流程中,或已经完成所有I/O操作并被标记为待关闭,此时调用
DisconnectNamedPipe属于无效操作。
- 管道实际仍处于
- 管道类型或配置不支持断开操作:若创建命名管道时使用了不兼容的参数(例如部分特殊模式的字节流管道,或未正确设置面向连接的属性),
DisconnectNamedPipe可能无法正常执行,返回无效函数错误。 - 多线程操作冲突:其他线程正在对同一管道实例执行
CloseHandle、ConnectNamedPipe或I/O读写操作,导致管道状态在调用DisconnectNamedPipe时发生突变,触发无效函数调用。 - 句柄权限不足:当前进程持有的管道句柄仅拥有读权限,而
DisconnectNamedPipe需要更高的操作权限,在某些场景下系统会返回错误码1而非明确的权限错误。
内容的提问来源于stack exchange,提问作者Jidcoo
相关产品推荐
相关产品推荐

