首页 > 解决方案 > 您是否应该在设置新的 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);

标签: winapi

解决方案


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


推荐阅读