⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 safe_terminate_process.cpp

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 CPP
字号:
#define STRICT#include <windows.h>BOOL SafeTerminateProcess(HANDLE hProcess, UINT uExitCode){    DWORD dwTID, dwCode, dwErr = 0;    HANDLE hProcessDup = INVALID_HANDLE_VALUE;    HANDLE hRT = NULL;    HINSTANCE hKernel = GetModuleHandle("Kernel32");    BOOL bSuccess = FALSE;    BOOL bDup = DuplicateHandle(GetCurrentProcess(),	hProcess,	GetCurrentProcess(),	&hProcessDup,	PROCESS_ALL_ACCESS,	FALSE,	0);    if (GetExitCodeProcess((bDup) ? hProcessDup : hProcess, &dwCode) &&	(dwCode == STILL_ACTIVE))    {	FARPROC pfnExitProc;	pfnExitProc = GetProcAddress(hKernel, "ExitProcess");	if (pfnExitProc)	{	    hRT = CreateRemoteThread((bDup) ? hProcessDup : hProcess,		NULL,		0,		// This relies on the probability that Kernel32.dll is mapped to the same place on all processes		// If it gets relocated, this function will produce spurious results		(LPTHREAD_START_ROUTINE)pfnExitProc,		(PVOID)uExitCode, 0, &dwTID);	}		if (hRT == NULL)	    dwErr = GetLastError();    }    else    {	dwErr = ERROR_PROCESS_ABORTED;    }    if (hRT)    {	if (WaitForSingleObject((bDup) ? hProcessDup : hProcess, 30000) == WAIT_OBJECT_0)	    bSuccess = TRUE;	else	{	    dwErr = ERROR_TIMEOUT;	    bSuccess = FALSE;	}	CloseHandle(hRT);    }    if (bDup)	CloseHandle(hProcessDup);    if (!bSuccess)	SetLastError(dwErr);    return bSuccess;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -