微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Windows GetLogicalProcessorInformationEx函数混淆ReturnLength

我想在Windows中使用(相当新的)GetLogicalProcessor@R_920_4045@ionEx函数。 它所提供的ReturnLength是没有意义的。

较旧的GetLogicalProcessor@R_920_4045@ion给出合理的结果…

ReturnLength = 0; Result = GetLogicalProcessor@R_920_4045@ion(NULL,&ReturnLength); printf("GLPI (%d): %d %dn",Result,sizeof(SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION),ReturnLength);

这是输出(2核心,64位,Win7框):GLPI(0):32 416

换句话说,函数将填充416/32 = 13 SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION结构传递的缓冲区。

使用at访问共享networking

强制Google Chrome使用本地语音识别引擎

如何理解获取和释放语义?

在Windows 7上安装和configurationLDAP(AD LDS)

Windows商店 – 问题与应用程序内的产品

对于GetLogicalProcessor@R_920_4045@ionEx,这是我的电话…

ReturnLength = 0; Result = GetLogicalProcessor@R_920_4045@ionEx(RelationProcessorCore,NULL,&ReturnLength); printf("GLPIX (%d): %d %d %dn",sizeof(PROCESSOR_RELATIONSHIP),sizeof(SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION_EX),ReturnLength);

这是输出(2核心,64位,Win7框):GLPIX(0):40 80 96

Microsoft文档(http://msdn.microsoft.com/en-us/library/windows/desktop/dd405488(v=vs.85).aspx)表示函数将返回PROCESSOR_RELATIONSHIP或SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION_EX结构,具体取决于第一个参数的值。 ReturnLength表明它不会返回,虽然 – 96不能被sizeof(PROCESSOR_RELATIONSHIP)或sizeof(SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION_EX)整除。

我还尝试了RelationAll作为第一个参数,并给出了768的ReturnLength – 也不是一个40或80的倍数。

任何人都可以摆脱任何光?

蓝牙PAN在Windows上担当NAPangular色

当第二个屏幕不可见时,将窗口从第二个屏幕移动到主窗口

Facebook应用程序邀请通过Windows 8地铁应用程序

用户打开url时,如何启动我的Windows应用程序?

我在哪里可以findDart语言的解释器/编译器?

你需要相信函数返回的是什么。 必然如此,工会的结构有一个不可预测的大小 。 特别是PROCESSOR_RELATIONSHIP的这个成员:

GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];

ANYSIZE_ARRAY宏是提示,表示GroupMask数组的大小是可变的,取决于GroupCount成员的值。 在结构上使用sizeof永远不会给你正确的大小,它会太低。 请确保使用返回的大小为结构分配存储,如下所示:

SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION_EX* buf = (SYstem_LOGICAL_PROCESSOR_@R_920_4045@ION_EX*)malloc(ReturnLength);

这种模式在C和winapi中很常见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐