调用上游系统调用失败解决办法失败是什么意思

Win10启动英魂之刃提示“获取游戏openkey失败”如何解决-系统城
当前位置: &
& Win10启动英魂之刃提示“获取游戏openkey失败”如何解决
Win10启动英魂之刃提示“获取游戏openkey失败”如何解决
一位用户反馈自己在win10系统下通过QQ游戏打开英魂之刃,发现点击游戏无反应,之后在网上下载了英魂之刃的独立客户端运行游戏,可是打开后却弹出提示“获取游戏openkey失败”,该怎么办呢?接下来,就随小编一起看看该问题的解决方法。推荐:步骤如下:1、打开 开始菜单-- Windows附件 --- internet Explorer;2、打开ie浏览器后,点击【工具】--【internet 选项】,如图:3、切换到 【高级】选卡;4、在高级选卡下面 点击重置 按钮;5、在重置internet Explorer 设置 框中勾选【删除个人设置】,然后点击重置。6、重置浏览器之后,会提示 你需要重新启动你的计算机才能使更改生效,关闭浏览器。通过上述几个步骤的简单操作,我们再次运行英魂之刃就不会出现获取游戏openkey失败 的提示正常进行游戏!
我要分享:
Win10启动英魂之刃提示“获取游戏openkey失败”如何解决相关教程
热&门推&荐
&热门教程推荐
12345678910
&win10系统推荐
&|&&|&本站发布的系统与软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件!
如侵犯到您的权益,请及时通知我们,我们会及时处理。
Copyright @ 2011 系统城下次自动登录
现在的位置:
& 综合 & 正文
32位程序在64位系统上调用GetModuleFileNameEx失败
转自: http://blog.csdn.net/anycell/archive//3505864.aspx
前两天遇到同样的问题,特转载。
-------------------------------------------
今天客户打来电话说我们公司的服务器程序在新装的64位Windows 2003上以系统服务方式启动不起来。初步怀疑是我们的32位服务程序哪个地方在64位机上不兼容了。结果忙活了一上午,终于找到了问题所在。程序里有一段代码是用来判断程序是以服务方式启动还是以窗口形式启动:在应用程序初始化时获得父进程的句柄。然后通过句柄获得父进程的执行程序全路径。如果全路径中存在"service.exe"字符串,则程序以服务方式启动。伪代码如下:
HANDLE hParentP
if(GetModuleFileNameEx(hParentProc, NULL, pszPath, MAX_PATH))
if(strstr(pszPath, "services.exe") != NULL)
bRet = TRUE;
通过调试发现问题出在GetModuleFileNameEx函数上。本来它返回的是获取全路径的长度,结果在64位机上返回0,pszPath变量并没有取得父进程的全路径。我用GetLastError()查看返回值为error
299——“Only part of a ReadProcessMemory or WriteProcessMemory request was completed.” 。我开始怀疑是因为32位程序调用API处理64位内存地址时出现的问题。于是我Google了一下,终于找到答案了:当我们调用GetModuleFileNameEx的API函数时,为了获得指定进程的全路径,它内部需要访问进程的PEB头(process environment block),将PEB中的信息设置到一个叫PROCESS_BASIC_INFORMATION 的结构体中。结构体声明如下
typedef struct _PROCESS_BASIC_INFORMATION {
NTSTATUS ExitS
PPEB PebBaseA
ULONG_PTR AffinityM
KPRIORITY BaseP
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
其中PEB的地址被设置在PebBaseAddress中。但是64位进程的PEB头地址是保存在64位长度的地址中的(比如上面说道的系统进程Services.exe),而32位进程的PEB头地址只有32位长度。运行在64位系统上32位应用程序是如何将64位的PEB地址转换成32位地址的呢?如果64位PEB地址的高32位为0,则转换不会出现任何问题。但如果高32位也包含地址信息,那么WOW64(Windows
32-bit on Windows 64-bit,windows 64位系统上兼容32位应用程序的技术,作为由32位向64位程序的过渡方案)只是简单的将低32位的PEB地址赋给32位应用程序中的PebBaseAddress变量,当然就会发生错误了!于是Windows就会出发error 299并返回失败。
如果你的32位应用程序是运行在Windows XP或者以上的操作系统上的,推荐的解决方案是使用GetProccessImageFileName来替代GetModuleFileNameEx来取得进程的全路径,这个函数内部的内部操作不会像GetModuleFileName那样麻烦,只返回一个全路径字符串而已。但是返回的全路径是DOS格式的盘符路径(
/Device/HarddiskVolumeX),因此需要自己再转换一下。
出了GetModuleFileNameEx之外,还有EnumProcessModule和EnumProcessModuleEx 也会出现这样的问题,都是因为访问64位进程的PEB头的原因。CreateToolHelpSnapshot调用失败原因也与上面的原理类似。参考:/?p=26
&&&&推荐文章:
【上篇】【下篇】页面已拦截
无锡网警提示您:
该网址被大量用户举报,可能含有恶意信息。VC/MFC(173)
Windows(43)
今天客户打来电话说我们公司的服务器程序在新装的64位Windows 2003上以系统服务方式启动不起来。初步怀疑是我们的32位服务程序哪个地方在64位机上不兼容了。结果忙活了一上午,终于找到了问题所在。程序里有一段代码是用来判断程序是以服务方式启动还是以窗口形式启动:在应用程序初始化时获得父进程的句柄。然后通过句柄获得父进程的执行程序全路径。如果全路径中存在&service.exe&字符串,则程序以服务方式启动。伪代码如下:
通过调试发现问题出在GetModuleFileNameEx函数上。本来它返回的是获取全路径的长度,结果在64位机上返回0,pszPath变量并没有取得父进程的全路径。我用GetLastError()查看返回值为error
299——“Only part of a ReadProcessMemory or WriteProcessMemory request was completed.” 。我开始怀疑是因为32位程序调用API处理64位内存地址时出现的问题。
于是我Google了一下,终于找到答案了:
当我们调用GetModuleFileNameEx的API函数时,为了获得指定进程的全路径,它内部需要访问进程的PEB头(process environment block),将PEB中的信息设置到一个叫PROCESS_BASIC_INFORMATION&的结构体中。结构体声明如下
其中PEB的地址被设置在PebBaseAddress中。但是64位进程的PEB头地址是保存在64位长度的地址中的(比如上面说道的系统进程Services.exe),而32位进程的PEB头地址只有32位长度。运行在64位系统上32位应用程序是如何将64位的PEB地址转换成32位地址的呢?如果64位PEB地址的高32位为0,则转换不会出现任何问题。但如果高32位也包含地址信息,那么WOW64(Windows
32-bit on Windows 64-bit,windows 64位系统上兼容32位应用程序的技术,作为由32位向64位程序的过渡方案)只是简单的将低32位的PEB地址赋给32位应用程序中的PebBaseAddress变量,当然就会发生错误了!于是Windows就会出发error 299并返回失败。
&&& 如果你的32位应用程序是运行在Windows XP或者以上的操作系统上的,推荐的解决方案是使用GetProcessImageFileName来替代GetModuleFileNameEx来取得进程的全路径,这个函数内部的内部操作不会像GetModuleFileName那样麻烦,只返回一个全路径字符串而已。但是返回的全路径是DOS格式的盘符路径( /Device/HarddiskVolumeX),因此需要自己再转换一下。
& & 除了GetModuleFileNameEx之外,还有EnumProcessModule和EnumProcessModuleEx&也会出现这样的问题,都是因为访问64位进程的PEB头的原因。CreateToolHelpSnapshot调用失败原因也与上面的原理类似。
/en-us/library/ms682631(VS.85).aspx
/getmodulefilenameex-enumprocessmodulesex-failures-in-wow64/
https://social./Forums/vstudio/en-US/d63cc18c-f54d-4e5a-964f-dda789b1f318/createtoolhelp32snapshot-on-a-64-bit-machine?forum=vcgeneral
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:382789次
积分:7473
积分:7473
排名:第3119名
原创:356篇
转载:44篇
评论:15条
(8)(8)(7)(1)(1)(3)(1)(2)(2)(1)(1)(2)(5)(3)(8)(15)(15)(35)(26)(35)(15)(18)(29)(23)(2)(18)(16)(48)(37)(23)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 瑞刷调用系统服务失败 的文章

 

随机推荐