在设置新的 Window Station 句柄后是否应该关闭进程的前一个 Window Station 句柄?

问题描述 投票:0回答:1

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个回答
1
投票

不,你不能关闭

GetProcessWindowStation
函数返回的句柄,这是直接说明的。该 API 不会创建“新”句柄,而是返回一个“现有”句柄(我们可以通过调用 API 2 次来简单地检查这一点 - 将返回相同的句柄值)。因此,您不需要关闭该句柄,系统会自行管理它。如果您为进程设置另一个窗口站 - 系统将自行关闭旧窗口站。成功调用 SetProcessWindowStation(newWinSta) 后,您的 oldWinSta 已关闭。当您再次尝试调用
CloseWindowStation(oldWinSta)
时,它将返回
STATUS_INVALID_HANDLE
,直到该句柄被其他窗口站重新占用;在这种情况下,它将被关闭。
    

© www.soinside.com 2019 - 2024. All rights reserved.