0

根据文档WTSFreeMemoryExA可用于WTS_SESSION_INFO_1A通过传递 aWTS_TYPE_CLASS来释放结构WTSTypeSessionInfoLevel1。但是,任何尝试这样做都会失败,并出现错误代码 87 ( ERROR_INVALID_PARAMETER, "The parameter is incorrect")。

怎么去WTSFreeMemoryExA上班?

4

2 回答 2

1

这似乎是 Windows 中的一个错误(至少在 Windows 10 版本 2004 中)。与文档相反,该WTSFreeMemoryExA函数不接受WTSTypeSessionInfoLevel1,而接受WTSFreeMemoryExW。这意味着您需要使用WTSEnumerateSessionsExA返回结构的函数而不是使用返回结构的函数。WTS_SESSION_INFO_1A WTSEnumerateSessionsExWWTS_SESSION_INFO_1W

WTSEnumerateSessionsExA除非您不关心由于无法释放其结果而导致的内存泄漏,否则此错误实际上会导致无法使用。这个错误似乎已经知道了一段时间。(希望有一天,微软会解决这个问题。)

一些报告声称,即使使用WTSEnumerateSessionsExWandWTSFreeMemoryExW似乎也会泄漏内存,这意味着WTSEnumerateSessions结合 withWTSQuerySessionInformation可能是更好的方法。但是,我自己一直无法重现该问题。我怀疑这曾经是一个真正的问题,但微软在最近的 Windows 版本中已修复。

于 2021-05-07T00:31:59.260 回答
1

谢谢你提出这个问题。

我们查看了相关的源码,找到了相关的源码WTSFreeMemoryA。它接受第一个参数WTSTypeClassWTSTypeProcessInfoLevel0or WTSTypeProcessInfoLevel1,但它不接受该值WTSTypeSessionInfoLevel1,因此ERROR_INVALID_PARAMETER在此调用中返回错误。

这与文档中的描述不同,我们将提交此问题。你可以尝试使用WTSFreeMemoryW来避免这个问题。

于 2021-06-03T07:51:32.140 回答