永发信息网

VirtualProtect 返回 errorcode 998 怎么办

答案:2  悬赏:20  手机版
解决时间 2021-02-26 02:15
  • 提问者网友:戎马万世
  • 2021-02-25 10:47
int main(void)
{
SIZE_T sizeVirtual = 4000; //大小
LPVOID lpRound = (LPVOID)0x100000FF; //地址

//分配内存,直接分配为已提交的内存
LPVOID lpAddress = VirtualAlloc(lpRound, sizeVirtual, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (lpAddress == NULL)
{
printf("VirualAlloc error: %d\n", GetLastError());
return 1;
}
/////////////////////////////////////////////////////////////////////////////////
//设置为READ-ONLY属性
if (!VirtualProtect(lpAddress, 0, PAGE_READONLY, NULL))
{
printf("VirtualProtect error: %d\n", GetLastError());
}
////////////////////////////////////////////////////////////////////////////////

//DECOMMIT 释放,页面将变为保留状态
printf("Free:DECOMMIT\n");
if (!VirtualFree(lpRound, sizeVirtual, MEM_DECOMMIT))
{
printf("VirtualFree error: %d", GetLastError());
return 1;
}

/////////////////////////////////////////////////////////////////////////////////
//设置为READ-ONLY属性
if (!

(lpAddress, 0, PAGE_READONLY, NULL))
{
printf("VirtualProtect error: %d\n", GetLastError());
}
////////////////////////////////////////////////////////////////////////////////

//释放内存
printf("Free:RELEASE\n");
if (!VirtualFree(lpAddress, 0, MEM_RELEASE))
{
printf("VirtualFree error: %d", GetLastError());
return 1;
}
return 0;
}
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-02-25 12:18
VirtualProtect第2个参数和第4个参数都设置一下!
如果第二个参数为零,VirtualProtect返回87(参数错误)
如果第四个参数为零,VirtualProtect返回998(内存位置访问无效)
(我也不知道为什么这个API不能省略输出参数,但只有这么用了……)

MSDN原话:
lpflOldProtect [out]
A pointer to a variable that receives the previous access protection value of the first page in the specified region of pages. If this parameter is NULL or does not point to a valid variable, the function fails.
就是说第四个参数传NULL或一个指向不合法地址的指针,函数失败。
全部回答
  • 1楼网友:woshuo
  • 2021-02-25 13:08
梵蒂冈地方和共和党呵呵呵
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯