根据文档,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 WTSEnumerateSessionsExWWTS_SESSION_INFO_1W
WTSEnumerateSessionsExA除非您不关心由于无法释放其结果而导致的内存泄漏,否则此错误实际上会导致无法使用。这个错误似乎已经知道了一段时间。(希望有一天,微软会解决这个问题。)
一些报告声称,即使使用WTSEnumerateSessionsExWandWTSFreeMemoryExW似乎也会泄漏内存,这意味着WTSEnumerateSessions结合 withWTSQuerySessionInformation可能是更好的方法。但是,我自己一直无法重现该问题。我怀疑这曾经是一个真正的问题,但微软在最近的 Windows 版本中已修复。
谢谢你提出这个问题。
我们查看了相关的源码,找到了相关的源码WTSFreeMemoryA。它接受第一个参数WTSTypeClass为WTSTypeProcessInfoLevel0or WTSTypeProcessInfoLevel1,但它不接受该值WTSTypeSessionInfoLevel1,因此ERROR_INVALID_PARAMETER在此调用中返回错误。
这与文档中的描述不同,我们将提交此问题。你可以尝试使用WTSFreeMemoryW来避免这个问题。