複製鏈接
請複製以下鏈接發送給好友

NtTerminateProcess

鎖定
NtTerminateProcess,Windows的關閉程序的函數。
外文名
NtTerminateProcess
定    義
Windows的關閉程序的函數
級    別
屬於內核級
退出代碼
ExitStatus

NtTerminateProcess函數簡介

這是一個,,大多數的程序都使用這個函數來實現關閉程序
也許你使用的是TerminateProcess,但是TerminateProcess是通過調用NtTerminateProcess來實現關閉程序的

NtTerminateProcess函數原型

NtTerminateProcessC、C++

NtTerminateProcess(
IN HANDLE ProcessHandle OPTIONAL,
IN NTSTATUS ExitStatus);

NtTerminateProcessVB

Declare Function NtTerminateProcess Lib "ntdll" (ByVal hProc As Long, ByVal ExitCode As Long) As Long

NtTerminateProcess參數意義

ProcessHandle : 進程的句柄,要用OpenProcess來獲得

NtTerminateProcess函數調用

TerminateProcess ->NtTerminateProcess ->ZwTerminateProcess
有時候,TerminateProcess 不能完全地結束一個進程,但是NtTerminateProcess 可以,ZwTerminateProcess 是基於內核驅動來關閉進程的.

NtTerminateProcessC++示例

#include <windows.h>
#include <stdio.h>
typedef DWORD (__stdcall *NtTerminateProcess)(HANDLE,UINT);
NtTerminateProcess fNtTerminateProcess=NULL;
BOOL ExitProc(HANDLE hProc)
{
HINSTANCE hModule=LoadLibrary("ntdll.dll"); //加載 ntdll.dll
if(hModule!=0)
{
fNtTerminateProcess=(NtTerminateProcess)GetProcAddress(hModule,"NtTerminateProcess"); //加載外部DLL函數
HANDLE hToken=OpenProcess(PROCESS_ALL_ACCESS,FALSE,(DWORD)hProc); //獲得進程的最大權限
if(hToken!=0){ if(fNtTerminateProcess(hToken,1)==0) //關閉程序
{
printf("End Proc:%d\n",(int)hProc);
return TRUE;
}
else
{
return FALSE;
}
}
return FALSE;
}

NtTerminateProcessVB示例

Private Const PROCESS_ALL_ACCESS = &H1F0FFF '全權打開進程
Private Function GetMaxPrivilegeToProcess(ByVal ProcessID As Long) As Long
GetMaxPrivilegeToProcess = OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID)
End Function
Public Function ExitProc(ByVal PID As Long) As Boolean
If NtTerminateProcess(PID, 1) = 0 Then
ExitProc = True
Else
ExitProc = False
End If
End Function