当前位置: 代码迷 >> 汇编语言 >> 在另一个进程写中断,内存不让写啊怎么处理
  详细解决方案

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

热度:4474   发布时间:2013-02-26 00:00:00.0
在另一个进程写中断,内存不让写啊,怎么办
我先提升本进程的权限
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,  
  相关解决方案