【问题标题】:Should you close the process' previous Window Station handle after a new one is set?您是否应该在设置新的 Window Station 句柄后关闭该进程的先前 Window Station 句柄?
【发布时间】:2021-06-21 15:33:12
【问题描述】:

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);

【问题讨论】:

    标签: winapi


    【解决方案1】:

    不,您不能关闭GetProcessWindowStation 函数返回的句柄。这是直接说明的。这个 api 不是创建 new 句柄而是返回 existing (我们可以简单地通过调用 api 2 次来检查这一点 - 将返回相同的值)。因为这并不需要关闭这个句柄。系统自行管理。如果您为进程设置另一个窗口站 - 系统自动关闭旧。成功后致电SetProcessWindowStation(newWinSta) 你的oldWinSta - 已经关闭。并尝试再次执行此操作 CloseWindowStation(oldWinSta); 在最好的情况下返回错误 - STATUS_INVALID_HANDLE 或句柄将被重用并且你关闭其他东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-18
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多