.NET 下 VirtualProtectEx 声明 应该是啥样?偶这个声明遇到了很有趣的问题!
情况如下:
我把声明改成如下形式:
Private Declare Function VirtualProtectEx Lib "kernel32 " (ByVal hProcess As Integer, ByVal lpAddress As Integer, ByVal dwSize As Integer, ByVal flNewProtect As Integer, ByRef lpflOldProtect As Integer) As Integer
进行如下调用
If VirtualProtectEx(hProcess, addr, len, 4, lOldProtect) <> 0 Then
'某些操作
Else
MsgBox(GetLastError)
End If
这里的hProcess是正确的,OpenProcess(&H1F0FFF, True, m_Pid)获取,我的程序本身具有进程操作的全部权限,addr是一个内存块的开始地址,len是该内存块大小(字节),4是PAGE_READWRITE常数,lOldProtect初始化为0
当调用上面过程的时候,出现很有意思的一个问题,当内存块本身属性已经是PAGE_READWRITE时,函数返回0,即调用成功,当内存块本身属性为其他值时,GetLastError返回值为87(错误参数),搞不定了。
大家来帮忙啊~~~~55555555555
另外前几天发布那个修改器,竟然有10几处致命的错误,我的娘来,我严重道歉。。。。。。。真恼了。。。还在进一步修复当中。。。。。
[解决办法]
..............................................
[解决办法]
Private Declare Function VirtualProtectEx Lib "kernel32 " (ByVal hProcess As Integer, ByRef lpAddress As Integer, ByVal dwSize As Integer, ByVal flNewProtect As Integer, ByVal lpflOldProtect As Integer) As Integer
[解决办法]
BOOL VirtualProtectEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);
这是C++的原型,先mark,等会我看看