用VS2008做的一个MFC程序,我想获取另外一个进程列表中的内容.调试时可以正常运行,运行生成的程序总是得不到句柄.而之前我用VS2005做的相同的功能的Win32程序,不论在调试还是直接运行都能正常获得句柄.pChiWnd=pWnd->FindWindowEx( pWnd->m_hWnd, NULL, NULL, NULL );
GetWindowThreadProcessId( pChiWnd->m_hWnd, &PID );
hProc=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
if(!hProc){
AfxMessageBox( L"获取进程句柄操作失败!" );
return;
}else{
pLvItem = (LVITEM*)VirtualAllocEx(hProc, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
pszItemBuf=(TCHAR*)VirtualAllocEx(hProc, NULL, TEXTBUFLEN, MEM_COMMIT, PAGE_READWRITE);
if((!pLvItem)||(!pszItemBuf)){
AfxMessageBox(L"无法分配内存!");
return;
}
}
如果改动 PROCESS_ALL_ACCESS ,那下面的内存分配又会出现问题.请问是不是要在VS的项目属性中进行一些设置?
GetWindowThreadProcessId( pChiWnd->m_hWnd, &PID );
hProc=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
if(!hProc){
AfxMessageBox( L"获取进程句柄操作失败!" );
return;
}else{
pLvItem = (LVITEM*)VirtualAllocEx(hProc, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
pszItemBuf=(TCHAR*)VirtualAllocEx(hProc, NULL, TEXTBUFLEN, MEM_COMMIT, PAGE_READWRITE);
if((!pLvItem)||(!pszItemBuf)){
AfxMessageBox(L"无法分配内存!");
return;
}
}
如果改动 PROCESS_ALL_ACCESS ,那下面的内存分配又会出现问题.请问是不是要在VS的项目属性中进行一些设置?
请问怎么提升进程级别?
BOOL EnablePrivilege(LPCSTR lpName, BOOL fEnable)
{
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE; if (LookupPrivilegeValue(NULL, lpName, &Luid))
{
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);
CloseHandle(hObject);
return TRUE;
}
return FALSE;
}
EnablePrivilege(SE_DEBUG_NAME,TRUE);