根据文档,WTSFreeMemoryExA
可用于WTS_SESSION_INFO_1A
通过传递 aWTS_TYPE_CLASS
来释放结构WTSTypeSessionInfoLevel1
。但是,任何尝试这样做都会失败,并出现错误代码 87 ( ERROR_INVALID_PARAMETER
, "The parameter is incorrect"
)。
怎么去WTSFreeMemoryExA
上班?
根据文档,WTSFreeMemoryExA
可用于WTS_SESSION_INFO_1A
通过传递 aWTS_TYPE_CLASS
来释放结构WTSTypeSessionInfoLevel1
。但是,任何尝试这样做都会失败,并出现错误代码 87 ( ERROR_INVALID_PARAMETER
, "The parameter is incorrect"
)。
怎么去WTSFreeMemoryExA
上班?
这似乎是 Windows 中的一个错误(至少在 Windows 10 版本 2004 中)。与文档相反,该WTSFreeMemoryExA
函数不接受WTSTypeSessionInfoLevel1
,而接受WTSFreeMemoryExW
。这意味着您需要使用WTSEnumerateSessionsExA
返回结构的函数而不是使用返回结构的函数。WTS_SESSION_INFO_1A
WTSEnumerateSessionsExW
WTS_SESSION_INFO_1W
WTSEnumerateSessionsExA
除非您不关心由于无法释放其结果而导致的内存泄漏,否则此错误实际上会导致无法使用。这个错误似乎已经知道了一段时间。(希望有一天,微软会解决这个问题。)
一些报告声称,即使使用WTSEnumerateSessionsExW
andWTSFreeMemoryExW
似乎也会泄漏内存,这意味着WTSEnumerateSessions
结合 withWTSQuerySessionInformation
可能是更好的方法。但是,我自己一直无法重现该问题。我怀疑这曾经是一个真正的问题,但微软在最近的 Windows 版本中已修复。
谢谢你提出这个问题。
我们查看了相关的源码,找到了相关的源码WTSFreeMemoryA
。它接受第一个参数WTSTypeClass
为WTSTypeProcessInfoLevel0
or WTSTypeProcessInfoLevel1
,但它不接受该值WTSTypeSessionInfoLevel1
,因此ERROR_INVALID_PARAMETER
在此调用中返回错误。
这与文档中的描述不同,我们将提交此问题。你可以尝试使用WTSFreeMemoryW
来避免这个问题。