首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

在另一个进程写中断,内存不让写啊怎么处理

2012-03-11 
在另一个进程写中断,内存不让写啊,怎么办我先提升本进程的权限DWORDEnableDebugAccessCtl(BOOLbEnable){HA

在另一个进程写中断,内存不让写啊,怎么办
我先提升本进程的权限
DWORD   EnableDebugAccessCtl(BOOL   bEnable)  

{
        HANDLE   hTokenHandle   =   NULL;
        if(   !OpenProcessToken(GetCurrentProcess(),  
                                                        TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,  
                                                        &hTokenHandle   )   )
        {
                return   GetLastError();
        }
        //   Lookup   the   privilege   value  
        TOKEN_PRIVILEGES   tp;  
        tp.PrivilegeCount   =   1;
        if(   !LookupPrivilegeValue(   NULL,   SE_DEBUG_NAME,   &tp.Privileges[0].Luid   )   )
        {
                CloseHandle(hTokenHandle);
                return   -1;
        }
        //   Enable/disable   the   privilege

        tp.Privileges[0].Attributes   =   bEnable   ?   SE_PRIVILEGE_ENABLED   :   0;
        if(   !AdjustTokenPrivileges(   hTokenHandle,   FALSE,   &tp,   sizeof(tp),   NULL,   NULL   )   )
        {
                CloseHandle(hTokenHandle);
                return   -1;
        }
        CloseHandle(hTokenHandle);
        return   0;
}


在我的子线程UINT   ProjDebugThreadFunc(LPVOID   lpParam)里调用上面这个函数提升权限,
                  int   purview;//设置权限
if(purview   =   EnableDebugAccessCtl(TRUE))
{
Info.pComplyShow-> SetWindowText( "权限不够! ");
return   purview;
}

再然后创建进程
STARTUPINFO   si;
        PROCESS_INFORMATION   pi;
        ZeroMemory(   &si,   sizeof(si)   );
        si.cb   =   sizeof(si);
::GetStartupInfo(&si);
        ZeroMemory(   &pi,   sizeof(pi)   );
CString   Cmd;
Cmd   =   Info.strPathName.Left(Info.strPathName.Find( '. '));
Cmd   +=   ".exe ";
        if(   !CreateProcess(NULL,   Cmd.GetBuffer(0),  
                                                NULL,   NULL,   FALSE,  
                                                      DEBUG_PROCESS   |   DEBUG_ONLY_THIS_PROCESS,  


                                                NULL,   NULL,  
                                                &si,   &pi   )   )
        {
Info.pComplyShow-> SetWindowText( "创建不成功! ");
                return   GetLastError();            
        }
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);

最后进入WaitForDebugEvent(&DebugInfo.debug_event,   INFINITE);   循环
在此循环中WriteProcessMemory(hProcess,(LPVOID)rip,&codebuf,1,&readsize);不能写入,函数返回值为FALSE,这是为什么呢?我已经提升了权限啊?
高手帮帮忙~

[解决办法]
关注。。
[解决办法]
调用过GetLastError看具体错误没?

context是线程上下文结构,保存线程切换时的状态。

热点排行