GetProcessDEPPolicy 错误 87

Posted

技术标签:

【中文标题】GetProcessDEPPolicy 错误 87【英文标题】:GetProcessDEPPolicy error 87 【发布时间】:2016-06-17 19:55:45 【问题描述】:

当我尝试检查某个进程是否正在使用数据执行保护 (DEP) 时,我收到错误 87 (INVALID_PARAMETER)。我检查了我的代码,它似乎没问题,但不幸的是我仍然有同样的错误。

代码:

BOOL var = true;
DWORD dwPolicy;

HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, false, 3624);
if (hProc == NULL) 
    cout << "Can't open Process because of the error " << GetLastError() << endl;


if (GetProcessDEPPolicy(hProc, &dwPolicy, 0) != FALSE) 
    if (dwPolicy == PROCESS_DEP_ENABLE) 
        cout << "For try.exe process data execution prevention is enabled" << endl;

    
    else if (dwPolicy == NULL) 
        cout << "For try.exe process data execution prevention is disabled" << endl;
    
    else 
        cout << "Data is thrunked and we can't change DEP value in future" << endl;
    

else 
    cout << "There was an error with discovering DEP in try.exe process because of "<<GetLastError() << endl;

编译执行后得到:

There was an error with discovering DEP in try.exe process because of 87

【问题讨论】:

附带说明,如果OpenProcess() 失败,您不应该调用GetProcessDEPPolicy()。并且不要忘记在打开的HANDLE 上致电CloseHandle() 【参考方案1】:

查看文档,定义了函数GetProcessDEPPolicy

BOOL WINAPI GetProcessDEPPolicy(
  _In_  HANDLE  hProcess,
  _Out_ LPDWORD lpFlags,
  _Out_ PBOOL   lpPermanent
);

请注意,最后一个参数是一个 out 参数,它不是可选的,但您传递的是 0 aka NULL。调用应该是:

BOOL permanent = FALSE;
if (GetProcessDEPPolicy(hProc, &dwPolicy, &permanent) != FALSE) 

【讨论】:

谢谢,有帮助

以上是关于GetProcessDEPPolicy 错误 87的主要内容,如果未能解决你的问题,请参考以下文章

CreateProcessWithUser 无法模拟用户,出现错误 87、1349

InternetReadFile 问题(错误 87 - 参数不正确)

RegOpenKeyEx 在 MASM64 中返回错误 87

OpenProcess 错误 87 参数无效

无法启动应用程序(CreateProcess 错误=87),不能使用缩短类路径解决方法

Element.insertAdjacentHTML() API 在 chrome 55.0.2883.87 中引发错误