先祝大家圣诞快乐:)大概的代码如下:
    1.mProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessId);   //ProcessId是前面得到的,取得方法无误--------此句成功,返回非0
    2.VirtualProtectEx;          //设某地址1个字节的长度为读写-------此句成功,返回1
    3.WriteProcessMemory;        //写此地址一个字节---------此句出错,返回0
    4.GetLastError;              //取错误代码为6,Access is denied.
    5.VirtualProtectEx;          //恢复前面的1个字节长度的地址为原来的权限----成功,返回1
    6.CloseHandle;问题:
    测试了取某记事本的进程ID作为ProcessId时代码成功运行,但很奇怪对某个游戏进程取ID作为ProcessId来OpenProcess后WriteProcessMemory返回值为6,求高手帮忙分析解决,谢谢!

解决方案 »

  1.   

    2.VirtualProtectEx;          //设某地址1个字节的长度为读写-------此句成功,返回1范围弄大一点 比如4BYTES
      

  2.   

    to eunt(小妖):
        我已调用VirtualProtectEx设此段地址可写并返回成功
      

  3.   

    to beyondtkl(大龙驹<*GOAL!what do u want REALLY?*>) :
        VirtualProtectEx函数我改成一长段地址返回仍然成功,但WriteProcessMemory仍然失败返回6
      

  4.   

    提升对进程操作得权限
    OpenProcessToken
    AdjustTokenPrivileges主要是你对进程得操作权限不够,需要提升一下你得权限。查查这方面得资料
    //提升权限
    void EnableDebugPriv( void )
    {
    HANDLE hToken;
    LUID sedebugnameValue;
    TOKEN_PRIVILEGES tkp;if ( ! OpenProcessToken( GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
    return;
    if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
    CloseHandle( hToken );
    return;
    }
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Luid = sedebugnameValue;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
    CloseHandle( hToken );
    }
      

  5.   

    to gooyan(超级替补):
        我已经调用过提升权限的函数了,返回成功,但WriteProcessMemory仍然返回6,只有对这个进程写的时候会出这种错,其他进程没见过这种错,一般都是998,227等错
      

  6.   

    错误代号6是:无效的句柄
    6 The handle is invalid.  ERROR_INVALID_HANDLE
      

  7.   

    OpenProcess()确实成功了,返回了一个非零正数
      

  8.   

    那GetLastError()还是6?奇怪啊,没碰到过   :(
      

  9.   

    就是啊,我也很奇怪啊,怎么错误会是6,我想知道目标进程究竟有什么办法可以做到让我OpenProcess后WriteProcessMessage的返回错误是6