第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何利用TerminateProcess()和OpenProcess()函數(shù)阻止結(jié)束進(jìn)程?

如何利用TerminateProcess()和OpenProcess()函數(shù)阻止結(jié)束進(jìn)程?

子衿沉夜 2021-08-02 18:07:46
求一個(gè)簡(jiǎn)單的C#程序源碼,利用上面兩個(gè)API函數(shù)阻止用戶通過(guò)任務(wù)管理器等工具結(jié)束自己的進(jìn)程。以下思路為網(wǎng)上所找:任務(wù)管理器的“結(jié)束任務(wù)”實(shí)際上就是強(qiáng)制終止進(jìn)程,它調(diào)用一個(gè)叫做TerminateProcess()的Win32 API函數(shù)BOOL TerminateProcess(HANDLE hProcess, // 將被結(jié)束進(jìn)程的句柄UINT uExitCode // 指定進(jìn)程的退出碼);可見(jiàn)TerminateProcess在判斷結(jié)束進(jìn)程前會(huì)先判斷當(dāng)前進(jìn)程hProcess是不是我要結(jié)束的那個(gè),而獲得hprocess的方法需要調(diào)用OpenProcess所以我們只要在結(jié)束進(jìn)程前給OpenProcess這個(gè)函數(shù)并傳入要訪問(wèn)的進(jìn)程ID來(lái)獲得進(jìn)程的句柄HANDLE OpenProcess(DWORD dwDesiredAccess, // 希望獲得的訪問(wèn)權(quán)限BOOL bInheritHandle, // 指明是否希望所獲得的句柄可以繼承DWORD dwProcessId // 要訪問(wèn)的進(jìn)程ID);中的dwProcessId賦一個(gè)錯(cuò)誤的ID,管理器得不到正確的ID自然就不能結(jié)束這個(gè)進(jìn)程,隨后再?gòu)棾鰧?duì)話框利用自己的關(guān)閉方法我想就可以實(shí)現(xiàn)了請(qǐng)把代碼寫在一個(gè)文件里貼上來(lái),在線等,非常感謝。請(qǐng)注意,思路我已經(jīng)有了,寫在上面,我現(xiàn)在要的是實(shí)現(xiàn)的代碼,一定要是代碼,因?yàn)槲也磺宄唧w應(yīng)該怎么用,所以要個(gè)源碼參考一下,謝謝。請(qǐng)把代碼寫在一個(gè)文件里貼上來(lái)。非常感謝。
查看完整描述

2 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

windows 系統(tǒng)有一個(gè)叫做system hook的技術(shù),用于讓你對(duì)系統(tǒng)api做些手腳。
你可以通過(guò)注冊(cè)一個(gè)新的TerminateProcess函數(shù)鉤子,當(dāng)系統(tǒng)調(diào)用這個(gè)函數(shù)時(shí),就會(huì)調(diào)用你的函數(shù),你的函數(shù)可以判斷這個(gè)進(jìn)程是不是你的程序,比如通過(guò)窗口的title,class什么的。
如果不是你的窗口,就調(diào)用原始的TerminateProcess,如果是你的窗口,就直接return.

另外,你也可以試試重載你的C#程序的WinProc方法,對(duì)于WM_CLOSE, WM_DESTORY, WM_QUIT之類的消息進(jìn)行忽略,只對(duì)于自己發(fā)出的關(guān)閉才正常響應(yīng)。

上述兩個(gè)思路,你選擇吧。代碼沒(méi)有功夫?qū)憽?br/>
你的那個(gè)思路技術(shù)上有些問(wèn)題。

查看完整回答
反對(duì) 回復(fù) 2021-08-09
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

STARTUPINFO StartupInfo;//定義STARTUPINFO結(jié)構(gòu)指針 memset(&StartupInfo,0,sizeof(STARTUPINFO)); StartupInfo.cb = sizeof(STARTUPINFO); StartupInfo.dwFlags=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow=SW_SHOW; PROCESS_INFORMATION ProcessInfo; if (!CreateProcess("D:\\Program Files\\Fluent.Inc\\ntbin\\ntx86\\gambit.exe" , cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,"E:\\zuoye\\gambit1",&StartupInfo,&ProcessInfo)){cout<<"Create Fail!"<<endl;exit(1);}else{cout<<"Success!"<<endl;} WaitForSingleObject(ProcessInfo.hProcess,INFINITE);}void main(){gambit();HANDLE han=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取進(jìn)程快照 PROCESSENTRY32 lpp; lpp.dwSize=sizeof(PROCESSENTRY32);BOOL bo;bo=Process32First(han,&lpp); //從快照里取第一個(gè)進(jìn)程信息 TCHAR *str1;while(bo){str1=lpp.szExeFile ; if(!strcmp(str1,"exceed.exe") || !strcmp(str1,"gambit.exe")){HANDLE han2=OpenProcess(1,TRUE,lpp.th32ProcessID); //取進(jìn)程實(shí)例 PROCESS_TERMINATE //cout<<str; TerminateProcess(han2,0); //關(guān)閉}bo=Process32Next(han,&lpp); //取下一個(gè)進(jìn)程信息}CloseHandle(han); ------解決方案--------------------------------------------------------TerminateProcess結(jié)束進(jìn)程是不安全的。這個(gè)進(jìn)程最好沒(méi)有帶鎖的資源。而你的這個(gè)里面好像用到了cout,雖然我不知道這個(gè)到底是否有沒(méi)有鎖,但是這個(gè)cout肯定是互斥的。這樣就有可能導(dǎo)致了結(jié)束進(jìn)程失敗 ------解決方案--------------------------------------------------------先確定有沒(méi)有執(zhí)行到TerminateProcess ------解決方案--------------------------------------------------------既然是windows 平臺(tái), 那就用system 調(diào)用相關(guān)的 命令吧, system 執(zhí)行 下面的命令, 絕大部分進(jìn)程都能結(jié)束,方便實(shí)用。



查看完整回答
反對(duì) 回復(fù) 2021-08-09
  • 2 回答
  • 0 關(guān)注
  • 924 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)