能力值:
( LV2,RANK:10 )
|
-
-
2 楼
Process32First 找到的第一个进程,是IDLE进程,这玩意你要是打得开,你就牛B了。。
|
能力值:
( LV6,RANK:80 )
|
-
-
3 楼
我已经过虑掉去打开IDle这个进程了。
|
能力值:
( LV6,RANK:80 )
|
-
-
4 楼
但是。提示没有访问权限了。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
先提权,再去打开,不要先去打开,再去提权。。。
|
能力值:
( LV6,RANK:80 )
|
-
-
6 楼
void CTaskMgrDlg::UpdatePrivilege()
{
OSVERSIONINFO vi;
ZeroMemory(&vi, sizeof(vi));
CString err;
vi.dwOSVersionInfoSize = sizeof(vi);
GetVersionEx(&vi);
if (vi.dwPlatformId != VER_PLATFORM_WIN32_NT)
return;
if (GetCurrentProcessId()==0)
{
return;
}
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
if (hProcess)
{
HANDLE hToken;
if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LUID luid;
if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
}
else
{
err.Format(_T("----LookupPrivilegeValue:%d"),GetLastError());
MessageBox(err);
}
CloseHandle(hToken);
}
else
{
err.Format(_T("----OpenProcessToken:%d"),GetLastError());
MessageBox(err);
}
}
else
{
err.Format(_T("----OpenProcess:%d"),GetLastError());
MessageBox(err);
}
}
void CTaskMgrDlg::ProcessList()
{
HANDLE hProcessSnap;
int nIndex;
HANDLE hProcess;
PROCESSENTRY32 pe32;
CString err;
HANDLE hToken;
int isok;
DWORD cbName = 1024;
TCHAR szName[1024] = {0};
DWORD cbReferencedDomainName = 1024;
TCHAR szDomain[1024] = {0};
char buf[0x400];
DWORD dwNumBytesRet;
SID_NAME_USE peUse;
PROCESS_MEMORY_COUNTERS promem;
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap==INVALID_HANDLE_VALUE)
{
MessageBox(L"hProcessSnap",L"error");
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap,&pe32))
{
CloseHandle( hProcessSnap );
MessageBox(L"Process32First",L"error");
}
do
{
if (pe32.th32ProcessID==0)
{
continue;
}
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pe32.th32ProcessID);
UpdatePrivilege();
isok = OpenProcessToken(hProcess, 0x20008/*TOKEN_ALL_ACCESS_P*/, &hToken);
if(isok)
{
isok = GetTokenInformation(hToken, TokenUser, &buf, 0x400, &dwNumBytesRet);
if(isok)
{
isok = LookupAccountSid(NULL, (DWORD *)(*(DWORD *)buf), szName, &cbName, szDomain, &cbReferencedDomainName, &peUse);
if(isok)
{
szUser.Format(_T("%s"),szName);
this->list.SetItemText(nIndex,2,szUser);
}
else
{
err.Format(_T("LookupAccountSid:%d"),GetLastError());
MessageBox(err);
}
CloseHandle(hToken);
}
else
{
err.Format(_T("GetTokenInformation:%d"),GetLastError());
MessageBox(err);
}
}
else
{
err.Format(_T("OpenProcessToken:%d"),GetLastError());
MessageBox(err);
}
// CloseHandle(hProcess);
GetProcessMemoryInfo(hProcess, &promem, sizeof(promem));
szMem.Format(_T("%d KB"),promem.WorkingSetSize/TransitionCount);
nIndex=this->list.GetItemCount();
this->list.InsertItem(nIndex,pe32.szExeFile);
szPID.Format(_T("%d"),pe32.th32ProcessID);
this->list.SetItemText(nIndex,1,szPID);
this->list.SetItemText(nIndex,4,szMem);
} while(Process32Next(hProcessSnap,&pe32));
}
又有新的问题了。提拒绝访问。不知道是不是权限提的不对
|
能力值:
( LV6,RANK:80 )
|
-
-
7 楼
看一下上面的代码.
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pe32.th32ProcessID);
UpdatePrivilege();
你这不还是先打开,再提权嘛,换一下位置。。。
|
能力值:
( LV6,RANK:80 )
|
-
-
9 楼
如果位置换一下也是一样的。
|