9.進(jìn)程/線程/模塊信息 在此我們使用工具幫助函數(shù)(ToolHelp32)和系統(tǒng) OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken); //打開進(jìn)程的令牌,提升權(quán)限; AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL); //將進(jìn)程的權(quán)限提升到支持調(diào)試(Debug); CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //創(chuàng)建進(jìn)程的快照; Process32First(hProcessSnap,&ProcessEntry32); Process32First(hProcessSnap,&ProcessEntry32); //枚舉所有進(jìn)程; OpenProcess(PROCESS_QUERY_INformATION,FALSE,ProcessEntry32.th32ProcessID); //打開特定進(jìn)程,以查詢進(jìn)程相關(guān)信息; GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime); //獲取進(jìn)程的時(shí)間信息; GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter)); //獲取進(jìn)程的存儲區(qū)信息; GetPriorityClass(hProcess); //獲取進(jìn)程的優(yōu)先權(quán); GetProcessIoCounters(hProcess,&IoCounters); //獲取進(jìn)程的IO使用情況; CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID); //創(chuàng)建模塊快照; Module32First(hModuleSnap, &ModuleEntry32); Module32Next(hModuleSnap, &ModuleEntry32); //枚舉進(jìn)程模塊信息; CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); //創(chuàng)建線程快照; Thread32First(hThreadSnap, &ThreadEntry32); Thread32Next(hThreadSnap, &ThreadEntry32); //枚舉線程信息; OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID); //打開線程,須自己獲得此函數(shù)地址; TerminateProcess(hProcess,0); //終止進(jìn)程; SuspendThread(hThread); //懸掛線程; ResumeThread(hThread); //激活線程;
10.關(guān)機(jī) AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL); //調(diào)整進(jìn)程令牌,使其支持關(guān)機(jī); ExitWindowXXX(EWX_LOGOFF,0); //注銷系統(tǒng); LockWorkStation(); //鎖定系統(tǒng); InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig); //支持到記時(shí)和消息顯示的關(guān)機(jī)/重啟; SetSystemPowerState(bSig,FALSE); //系統(tǒng)休眠/冬眠;
11.用戶信息 NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf, dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle); //枚舉系統(tǒng)用戶信息; NetUserDel(NULL,lpUserNameW); //刪除指定用戶; 12.系統(tǒng)版本信息 GetVersionEx((LPOSVERSIONINFO)&osviex); //獲取操作系統(tǒng)的版本信息; 我們也可以通過注冊表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)獲取相關(guān)信息: GetTickCount(); //獲取開機(jī)時(shí)間; GetComputerName(szInfo,&dwInfo); //獲取計(jì)算機(jī)名稱; GetUserName(szInfo,&dwInfo); //獲取計(jì)算機(jī)用戶名; GetWindowsDirectory(szInfo,MAX_PATH+1); //獲取Windows目錄; GetSystemDirectory(szInfo,MAX_PATH+1); //獲取系統(tǒng)目錄;
小結(jié): 雖然我們現(xiàn)在已經(jīng)實(shí)現(xiàn)了任務(wù)管理器的各項(xiàng)功能,甚至比Windows自帶的功能還要強(qiáng)大,不過卻沒有什么興奮的感覺。因?yàn)榭纯次覀兊拇a,您就會發(fā)現(xiàn)那些都是直接調(diào)用的Win32API函數(shù),但是我們清楚系統(tǒng)底層究竟是怎么實(shí)現(xiàn)的嗎?不管我們是否只是為了實(shí)現(xiàn)一個(gè)功能,還是對操作系統(tǒng)感興趣,我們都應(yīng)該更多的對系統(tǒng)底層進(jìn)行研究,而不僅僅是只會使用高層函數(shù)的程序員。雖然微軟為我們隱藏了很多的內(nèi)部細(xì)節(jié),但正是這種底層的秘密激發(fā)了我們對其進(jìn)行深入研究的興趣和動(dòng)力。
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色
上一頁 剖析Windows任務(wù)管理器開發(fā)原理與實(shí)現(xiàn)<2> 下一頁
|