不同机器和操作系统上的应用程序行为不同

XerZetZip

我正在编写Windows(MS)应用程序,以获取活动窗口的进程名称。

在运行32位Windows XP Professional的台式PC上,应用程序将按预期运行。但是,在具有64位Windows 7 Professional OS的便携式计算机上,该计算机无法正常工作。对于某些进程,将返回无效的句柄。在运行Windows 8.1 64位的超级本上,我得到相同的结果。

相关代码段如下:

DWORD dwThreadID, dwProcessID;
GUITHREADINFO gti;
HANDLE hProcess;
char szProcessFileName[MAX_PATH] = {0};

gti.cbSize = sizeof(GUITHREADINFO);

GetGUIThreadInfo(0, &gti);

dwThreadID = GetWindowThreadProcessId(gti.hwndActive, &dwProcessID);
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessID);

// Get the name of the process (no error checking for brevity)
GetModuleFileNameEx(hProcess, NULL, szProcessFileName, MAX_PATH);

当在非Windows XP操作系统的应用程序运行,如上文所述,对于某些工艺OpenProcessGetModuleFileNameEx失败。GetModuleFileNameEx通常会因ERROR_PARTIAL_COPY(错误代码:299)或ERROR_INVALID_PARAMETER(错误代码:87)而OpenProcess失败,由于ERROR_INVALID_HANDLE(错误代码:6)失败。

不知道发生了什么。任何帮助是极大的赞赏。我想知道这是否与用户权限有关。

源代码在运行Windows 7 Pro x64的64位计算机上被编译为32位应用程序。

迈克尔·布兰肯希(Michael Blankenship)

这是一个很长的阅读,但尝试...对于初学者。

如果您在XP或更高版本上运行,从32位进程获取64位进程映像路径的建议解决方法是使用较新的GetProcessImageFileName,它获取路径(通过NtQueryInformationProcess的ProcessImageFileName(27)进程信息类) )。这次wow64层没有做太多事情,因为它只是一个unicode字符串。但是,此函数有一个缺点–返回的路径的格式为/ Device / HarddiskVolumeX,而不是基于DOS样式驱动器号的路径。

请注意一个错误是如何试图告诉您一个64位地址中只有32位被复制到您的指针中。这篇文章比我能更好地描述它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于区块链的在线分布式应用程序显示了不同机器上的同时行为

如何从不同机器上的JSF应用程序访问EJB?

如何在不同机器上的两个电子应用程序之间进行交互

在不同操作系统上安装的.NET应用程序中使用什么版本的TLS

在不同操作系统上基于.glade文件的GTK + 3应用程序

Ansible,创建一个角色来在不同版本和不同配置的不同机器上部署应用程序

安装在不同机器上的Android应用程序(通过Android Studio)是否会获得不同的签名?

不同机器上的DNS和DHCP

在Visual Studio 2013中打开应用程序时,RadGrid在100%相同应用程序的不同机器上的渲染方式不同

是否可以将应用程序安装在与操作系统不同的单独驱动器上?

widgetSelected()和不同操作系统平台的行为

OpenGL应用程序代码在不同操作系统之间的可移植性

R Shiny 应用程序在不同操作系统中的兼容性?

不同机器上的不同内核版本

不同操作系统上的张量流训练和测试

在不同的操作系统上使用UTF8时的不同行为算法

Nginx 重定向与 2 台不同机器上的 IP 行为不同

基于应用程序的操作系统...?

Gradle在不同机器上的增量

Winapi在不同机器上缩放

连接在不同机器和不同网络上运行的两个不同的Ubuntu

DataGridViewComboBoxColumn在Windows 7+操作系统上的行为有所不同

如何解密在不同的openssl版本和不同的操作系统上加密的文件?

hash()在不同的操作系统上返回不同的值

在不同的操作系统上,导入模块的路径是否不同?

不同操作系统中CLOCKS_PER_SEC的行为

不同机器python代码上的不同输出

在不同机器上具有不同输出的并行代码

EPPlus AutoFit()在不同机器上的不同列宽