jan*_*anm 18
检查句柄是否"有效"是一个错误.你需要有一个更好的方法来解决这个问题.
问题是,一旦句柄被关闭,可以通过新打开不同的东西生成相同的句柄值,并且您的测试可能会说句柄有效,但您没有对您认为的文件进行操作.
例如,请考虑以下顺序:
因此,如果是您的过程,则需要跟踪哪些句柄有效以及哪些句柄无效.如果你从其他进程获得了句柄,那么它将使用DuplicateHandle()进入你的进程.在这种情况下,您应该管理句柄的生命周期,源进程不应该为您执行此操作.如果你的句柄是从另一个进程关闭的,我认为你就是这样做的,你需要处理簿记.
即使有效的句柄传递给它们,一些WinAPI函数也会返回无意义的ERROR_INVALID_PARAMETER,因此有一个真实的用例来检查句柄的有效性.
GetHandleInformation函数完成这项工作:http: //msdn.microsoft.com/en-us/library/ms724329%28v=vs.85%29.aspx
因为端口可能由外部应用程序关闭
这是不可能的,外部应用程序无法获取传递给CloseHandle()的正确句柄值.打开端口后,尝试获取端口句柄的任何其他进程都将获得AccessDenied.
也就是说,那里的crapware通过秘密了解存储进程句柄的未记录内核结构来解决这一限制.你对他们无能为力,不要错误地做同样的战斗.你会输的.如果客户抱怨这个,那就给他们医生的建议:"如果疼,那就不要这样做".