在另一个进程写中断,内存不让写啊,怎么办
我先提升本进程的权限
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是线程上下文结构,保存线程切换时的状态。