winapi - 您是否应该在设置新的 Window Station 句柄后关闭该进程的先前 Window Station 句柄?
问题描述
在该CloseWindowStation()
函数的文档中,它说:
不要指定
GetProcessWindowStation()
函数返回的句柄。
但是,如果你得到进程的窗口站句柄然后设置一个新的,你应该怎么做,使用SetProcessWindowStation()
?您应该关闭检索到的那个,还是应该两个手柄都保持打开状态?
HWINSTA oldWinSta = GetProcessWindowStation();
HWINSTA newWinSta = CreateWindowStation(...);
SetProcessWindowStation(newWinSta);
// should you do this?
// sins now GetProcessWindowStation would return newWinSta instead of oldWinSta
// or should both stay open?
CloseWindowStation(oldWinSta);
解决方案
不,您不能关闭GetProcessWindowStation
函数返回的句柄。这是直接说明的。此 api 不会创建新句柄而是返回现有句柄(我们可以通过调用 api 2 次来简单地检查这一点 - 将返回相同的值)。因为这并不需要关闭这个句柄。系统自行管理。如果您为进程设置另一个窗口站 - 系统自动关闭旧。成功后打电话给SetProcessWindowStation(newWinSta)
你oldWinSta
- 已经关闭。并CloseWindowStation(oldWinSta);
在最好的情况下再次尝试返回错误 -STATUS_INVALID_HANDLE
或者句柄将被重用并且你关闭其他东西
推荐阅读
- vue.js - vue中可以不显示源代码吗?
- makefile - 如何检查是否设置了在外部文件中定义的目标中使用的变量
- git - Windows 终端 - 通过 oh-my-posh/posh-git 设置主题错误的 PowerShell 自定义?
- python - Python Selenium 无头线程
- git - Docker COPY 使用 git lfs 使 Github 操作失败
- css - 使用三次贝塞尔计时函数 CSS 实现平滑的圆形动画
- three.js - 三 JS - 导入的 GLTF 模型看起来很模糊
- python - 在 Conda 环境中无法通过代理进行 pip 安装
- triggers - 如何使用更新触发器获取主表中明细表字段的总和
- c# - 如何为属性定义两种可能的数据类型