Winapi 为什么WTSFreeMemoryExA在传递WTSTypeSessionInfoLevel1的WTStyPecClass时总是返回错误\u无效\u参数?

Winapi 为什么WTSFreeMemoryExA在传递WTSTypeSessionInfoLevel1的WTStyPecClass时总是返回错误\u无效\u参数?,winapi,remote-desktop,wtsapi32,Winapi,Remote Desktop,Wtsapi32,根据,WTSFreeMemoryExA可以通过传递wtstypesioninfolevel1的值来释放结构。但是,任何尝试都会失败,错误代码为87(error\u INVALID\u PARAMETER,“参数不正确”) 如何使WTSFreeMemoryExA正常工作?这似乎是Windows中的一个错误(至少在Windows 10 2004版中是如此)。与文档相反,WTSFreeMemoryExA函数不接受wtstypesioninfolevel1,而WTSFreeMemoryExW则接受。这意

根据,
WTSFreeMemoryExA
可以通过传递
wtstypesioninfolevel1
的值来释放结构。但是,任何尝试都会失败,错误代码为87(
error\u INVALID\u PARAMETER
“参数不正确”


如何使WTSFreeMemoryExA正常工作?

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

此错误有效地使
WTSEnumerateSessionsExA
无法使用,除非您不关心由于无法释放其结果而导致的内存泄漏。这个bug应该已经被了解了一段时间了。(希望有一天微软能解决这个问题。)


声称即使使用
wtsenumeratesessionexw
WTSFreeMemoryExW
也会泄漏内存,这意味着
wtsenumeratessions
WTSQuerySessionInformation
结合使用可能会导致内存泄漏。然而,我本人无法再现这一问题。我怀疑这在某一点上是一个真正的问题,但是微软在最近的Windows版本中已经解决了。

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

此错误有效地使
WTSEnumerateSessionsExA
无法使用,除非您不关心由于无法释放其结果而导致的内存泄漏。这个bug应该已经被了解了一段时间了。(希望有一天微软能解决这个问题。)


声称即使使用
wtsenumeratesessionexw
WTSFreeMemoryExW
也会泄漏内存,这意味着
wtsenumeratessions
WTSQuerySessionInformation
结合使用可能会导致内存泄漏。然而,我本人无法再现这一问题。我怀疑这在某一点上是一个真正的问题,但是微软在最近的Windows版本中已经解决了这个问题。

谢谢你提出这个问题

我们检查了相关的源代码,找到了与
WTSFreeMemoryA
相关的源代码。它接受第一个参数
WTSTypeClass
作为
WTSTypeProcessInfoLevel0
WTSTypeProcessInfoLevel1
,但不接受值
wtstypepsessioninfolevel1
,因此在此调用中返回
错误\u无效\u参数
错误


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

谢谢您提出此问题

我们检查了相关的源代码,找到了与
WTSFreeMemoryA
相关的源代码。它接受第一个参数
WTSTypeClass
作为
WTSTypeProcessInfoLevel0
WTSTypeProcessInfoLevel1
,但不接受值
wtstypepsessioninfolevel1
,因此在此调用中返回
错误\u无效\u参数
错误


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

您好,我现在可以重现此问题。我会和内部工程师确认,如果有任何更新,我会在这里回复。感谢您的理解。使用WTS_SESSION_INFO_1A可能是用户代码中的一个错误,因为您不需要我解释为什么首选Unicode API。因此,修复这个缺陷并不是一个高优先级的问题。@DavidHeffernan从历史上看,您所说的是正确的,但随着W-over-a偏好的引入,可以说不再适用,所以这个bug的优先级将比以前更高。使用API而不是W的UTF-8代码页应用程序不是bug。使用UTF-8代码页,现在API也是Unicode的。(W=UTF-16,A=UTF-8)。@Simon这是一个公平的观点嗨,我现在可以复制这个问题了。我会和内部工程师确认,如果有任何更新,我会在这里回复。感谢您的理解。使用WTS_SESSION_INFO_1A可能是用户代码中的一个错误,因为您不需要我解释为什么首选Unicode API。因此,修复这个缺陷并不是一个高优先级的问题。@DavidHeffernan从历史上看,您所说的是正确的,但随着W-over-a偏好的引入,可以说不再适用,所以这个bug的优先级将比以前更高。使用API而不是W的UTF-8代码页应用程序不是bug。使用UTF-8代码页,现在API也是Unicode的。(W=UTF-16,A=UTF-8)。@Simon说得对,谢谢你的回答。当你说
WTSFreeMemoryA
时,你的意思是
WTSFreeMemoryExA
,对吗?(同样适用于
WTSFreeMemoryW
)另外,我知道您是Microsoft员工?在你的回答中澄清这一点可能是好的。(否则人们会想知道你是如何检查Windows源代码的。)谢谢你的回复。当你说
WTSFreeMemoryA
时,你的意思是
WTSFreeMemoryExA
,对吗?(同样适用于
WTSFreeMemoryW
)另外,我知道您是Microsoft员工?在你的回答中澄清这一点可能是好的。(否则人们会想知道您是如何检查Windows源代码的。)