OpenProcess老是返回NULL
OpenProcess总是返回NULL
在VS2008下面,
DWORD pID=GetProcessID("QQ.exe");
HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS, TRUE, pID);
if (NULL == hProcess)
{
cout<<"Error :"<<GetLastError()<<endl;
}
TerminateProcess(hProcess, 0);
结果发现,Error 的值是5。根本执行不到TerminateProcess这个语句,,,这是怎么回事??
------解决思路----------------------
刚看了一下定义PROCESS_ALL_ACCESS和PROCESS_TERMINATE的值不一样.
PROCESS_ALL_ACCESS一般在内存读写用的较多.
PROCESS_ALL_ACCESS不包含PROCESS_TERMINATE可能和权限有关(猜的).
windows里面有一些api是要提升权限的,微软一向搞得很神秘,但是还是有间接办法搞定的
谁知道以后微软会不会把这些东西搞的再bt点
------解决思路----------------------
5:
拒绝访问。
------解决思路----------------------
提升权限试一下!
在VS2008下面,
DWORD pID=GetProcessID("QQ.exe");
HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS, TRUE, pID);
if (NULL == hProcess)
{
cout<<"Error :"<<GetLastError()<<endl;
}
TerminateProcess(hProcess, 0);
结果发现,Error 的值是5。根本执行不到TerminateProcess这个语句,,,这是怎么回事??
------解决思路----------------------
刚看了一下定义PROCESS_ALL_ACCESS和PROCESS_TERMINATE的值不一样.
PROCESS_ALL_ACCESS一般在内存读写用的较多.
PROCESS_ALL_ACCESS不包含PROCESS_TERMINATE可能和权限有关(猜的).
windows里面有一些api是要提升权限的,微软一向搞得很神秘,但是还是有间接办法搞定的
谁知道以后微软会不会把这些东西搞的再bt点
#define PROCESS_TERMINATE (0x0001)
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED
------解决思路----------------------
SYNCHRONIZE
------解决思路----------------------
\
0xFFFF)
#else
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED
------解决思路----------------------
SYNCHRONIZE
------解决思路----------------------
\
0xFFF)
#endif
------解决思路----------------------
5:
拒绝访问。
------解决思路----------------------
提升权限试一下!
/******************************************************\
功能描述:调整进程的权限
参数说明:
1.PrivilegeName:要调整权限的名字。
\******************************************************/
bool WINAPI EnablePrivilege(PCHAR PrivilegeName)
{
HANDLE hProc,hToken;
TOKEN_PRIVILEGES TP;
//获得进程句柄
hProc=GetCurrentProcess();
//打开进程令牌环
if(!OpenProcessToken(hProc,TOKEN_ADJUST_PRIVILEGES
------解决思路----------------------
TOKEN_QUERY,&hToken))
{
return false;
}
//获得进程本地唯一ID
if(!LookupPrivilegeValue(NULL,PrivilegeName,&TP.Privileges[0].Luid))
{
CloseHandle(hToken);
return false;
}
TP.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
TP.PrivilegeCount=1;
//调整权限
if(!AdjustTokenPrivileges(hToken,false,&TP,sizeof(TP),0,0))
{
CloseHandle(hToken);
return false;
}
CloseHandle(hToken);
return true;
}
//---------------------------------------