Windows核心編程之5 作業

來源:互聯網
上載者:User

先上代碼吧

有不懂得可以提問啊!

#include <iostream>#include <vector>#include <map>#include <Windows.h>#include <tchar.h>#include <process.h>#include <Strsafe.h>void CreateProcessInJob(PTSTR sCommangline, HANDLE hJob){STARTUPINFO stInfo = {sizeof(stInfo)};PROCESS_INFORMATION process_info = {0};int len = _tcsclen(sCommangline) * sizeof(TCHAR);int lSize = len + sizeof(TCHAR);PTSTR pBuffer = new TCHAR[lSize];memset(pBuffer,0,lSize);// size 必須要加上NULL字元StringCbCopy(pBuffer,lSize,sCommangline);// 參數2 的緩衝區要可寫,訪問違規BOOL bOk = CreateProcess(NULL,pBuffer,NULL,NULL,FALSE,CREATE_BREAKAWAY_FROM_JOB|CREATE_SUSPENDED,NULL,NULL,&stInfo,&process_info);__try{if(!bOk)__leave;AssignProcessToJobObject(hJob,process_info.hProcess);// 啟用線程::ResumeThread(process_info.hThread);}__finally{delete []pBuffer;pBuffer = NULL;//關閉進程對象,線程對象CloseHandle(process_info.hProcess);CloseHandle(process_info.hThread);}}unsigned int WINAPI ThreadFunc(LPVOID lparam){HANDLE hIOCP = (HANDLE)lparam;BOOL bGoOn = TRUE;DWORD dwlen = 0;DWORD dwProcessID;ULONG_PTR comkey;LPOVERLAPPED ov;while(bGoOn && GetQueuedCompletionStatus(hIOCP,&dwlen,&comkey,&ov,INFINITE)){if (comkey == 1){switch (dwlen){case JOB_OBJECT_MSG_EXIT_PROCESS:dwProcessID = (DWORD)ov;printf("process ID %d\n",dwProcessID);break;case JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO:printf("over all");ov;bGoOn = FALSE;break;case JOB_OBJECT_MSG_NEW_PROCESS:printf("new process ID %d\n",(DWORD)ov);break;}}}return 0;}int main( ){// Get the list of process identifiers.HANDLE hJob=NULL;HANDLE hIOPort = NULL;HANDLE hThread = NULL;ULONG_PTR completionKey = 1; // user-defined__try{hJob= CreateJobObject(NULL,TEXT("myJob"));if(NULL == hJob){__leave;}JOBOBJECT_BASIC_UI_RESTRICTIONS tagUiRestrictions;tagUiRestrictions.UIRestrictionsClass = JOB_OBJECT_UILIMIT_NONE;tagUiRestrictions.UIRestrictionsClass = JOB_OBJECT_UILIMIT_HANDLES | JOB_OBJECT_UILIMIT_EXITWINDOWS;BOOL bOk = SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&tagUiRestrictions,sizeof(tagUiRestrictions));if (!bOk){__leave;}hIOPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL, completionKey, 0);if (hIOPort == NULL){__leave;}JOBOBJECT_ASSOCIATE_COMPLETION_PORT tagAssCompletionPort;tagAssCompletionPort.CompletionKey= (PVOID)completionKey;tagAssCompletionPort.CompletionPort = hIOPort;bOk = SetInformationJobObject(hJob,JobObjectAssociateCompletionPortInformation,&tagAssCompletionPort,sizeof(tagAssCompletionPort));if (!bOk){__leave;}hThread = (HANDLE)_beginthreadex(NULL, 0,  ThreadFunc, hIOPort, 0, NULL);if (hThread == NULL){__leave;}CreateProcessInJob(TEXT("C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools\\spyxx.exe"),hJob);CreateProcessInJob(TEXT("C:\\Users\\Administrator\\Desktop\\procexp.exe"),hJob);WaitForSingleObject(hThread, INFINITE);}__finally{CloseHandle(hJob);CloseHandle(hIOPort);CloseHandle(hThread);hIOPort = hIOPort = hThread = NULL;}system("pause");return 0;}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.