在另一个进程写中断,内存不让写啊,怎么办
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,这是为什么呢?我已经提升了权限啊?
高手帮帮忙~
相关推荐
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
在本篇文章里小编给大家整理的是关于PHP 多进程与信号中断实现多任务常驻内存管理的相关知识点,有需要的朋友们学习下。
对Linux内核中进程上下文和中断上下文的理解
( 对Linux内核中进程上下文和中断上下文的理解
操作系统实验进程的软中断通信
1[实验题目] 进程的软中断通信 2[实验目的] (1)理解掌握软中断的概念和技术; (2)掌握进程之间基于软中断的通信技术。 3[实验内容] 编写一段程序,父进程创建一个子进程p1;并使子进程利用系统调用kill()向父进程发送信号,父进程得到信号后输出字符串“received p1 signal.” 。 4[实验要求] (1)正确应用系统调用signal()建立进程与信号(异步事件)之间的联系,理解信号机制; (2)正确应用系统调用getppid()、kill(),进步理解广义同步的含义。 5[思考问题] (1)为什么说系统调用signal()是建立进程与信号之间的联系,而不是接收信号的操作? (2)若子进程向父进程发送信号,父进程接到信号后可以缺省操作、或忽视信号、或执行一函数,各是什么含义?
orange's 操作系统实验,ABC三个进程通过时钟中断和键盘中断跳转
orange's一个操作系统的实现,操作系统实验。 实现分时的进程调度和事件触发的进程调度。要求如下: 1. 三个用户进程A、B、C功能分别是打印出“hello,I am proc A/B/C” 2. 系统启动先运行A,然后通过键盘中断切换到B运行;B运行10个时钟周期后,切换到C。
linux下进程的管道通信和软中断通信
加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质,并了解Linux系统中进程通信的基本原理。


