OpenProcess

OpenProcess

方法名稱:OpenProcess

位置:Kernel32.dll

OpenProcess 函式用來打開一個已存在的進程對象,並返回進程的句柄。

基本介紹

  • 中文名:OpenProcess
  • 位置:Kernel32.dll
  • 函式原型:HANDLE OpenProcess
  • 功能:進程標示符
VC,在vb中的使用,Delphi,在易語言中的使用,

VC

1.函式原型
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的訪問許可權(標誌)
BOOL bInheritHandle, // 是否繼承句柄
DWORD dwProcessId// 進程標示符
);
dwDesiredAccess:獲取的許可權,可分為以下幾種
PROCESS_ALL_ACCESS:獲取所有許可權
PROCESS_CREATE_PROCESS:創建進程
PROCESS_CREATE_THREAD:創建執行緒
PROCESS_DUP_HANDLE:使用DuplicateHandle()函式複製一個新句柄
PROCESS_QUERY_INFORMATION:獲取進程的令牌、退出碼和優先權等信息
PROCESS_QUERY_LIMITED_INFORMATION:獲取進程特定的某個信息
PROCESS_SET_INFORMATION:設定進程的某種信息
PROCESS_SET_QUOTA:使用SetProcessWorkingSetSize函式設定記憶體限制
PROCESS_SUSPEND_RESUME:暫停或者恢復一個進程
PROCESS_TERMINATE:使用Terminate函式終止進程
PROCESS_VM_OPERATION:在進程的地址空間執行操作
PROCESS_VM_READ:使用ReadProcessMemory函式在進程中讀取記憶體
PROCESS_VM_WRITE:使用WriteProcessMemory函式在進程中寫入記憶體
SYNCHRONIZE:使用wait函式等待進程終止
bInheritHandle:TRUE或者FALSE
dwProcessId:pid
如成功,返回值為指定進程的句柄。
如失敗,返回值為空,可調用GetLastError獲得錯誤代碼。
-------------------------------------------------------------
3.舉例
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );
----------------------
4.附:
BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead);
參數
hProcess //為遠程進程的句柄
pvAddressRemote //用於指明遠程進程中的地址
pvBufferLocal //是本地進程中的記憶體地址
dwSize //是需要傳送的位元組數
pdwNumBytesRead和pdwNumBytesWritten //用於指明實際傳送的位元組數.當函式返回時,可以查看這兩個參數的值.

在vb中的使用

1.VB聲明
Declare Function OpenProcessLib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
說明
打開一個現有進程的句柄
2.返回值
Long,如執行成功,返回進程句柄;零表示失敗。會設定GetLastError
3.參數表
參數 類型 及 說明
dwDesiredAccess Long,指定這個句柄要求的訪問方法。指定API32.TXT檔案中以PROCESS_???開頭的一個或多個常數
bInheritHandle Long,如句柄能夠由子進程繼承,則為TRUE
dwProcessId Long,要打開那個進程的進程標識符
4.注
這個函式經常用來打開一個要進行同步的進程(同步:即步調協同,你說完,我再說,按說好的先後次序來)
5.舉例
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF=2035711
Dim hProcess As Long
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) '打開進程
If hProcess Then ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& '讀寫進程記憶體
CloseHandle hProcess '關閉進程句柄
End If

Delphi

var
ProcessHandle, PID: longword;
begin
GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID);//獲取c的PID
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打開進程
Inject(ProcessHandle, @Main);//插入代碼
CloseHandle(ProcessHandle);//關閉執行緒句柄
end.
OpenProcess(
dwDesiredAccess: DWORD; {access flags}
bInheritHandle: BOOL; {handle inheritance flag}
dwProcessId: DWORD {the process identifier}
): THandle; {returns the handle of the open process}
說明:
OpenProcess函式執行成功將根據傳入參數的PID返回該PID進程的句柄.執行失敗返回0.執行失敗的錯誤信息請使用GetLastError 函式.
參數說明:
dwDesiredAccess: 指定打開後,該進程的訪問許可權
PROCESS_ALL_ACCESS 給予進程所有可能允許的許可權.
PROCESS_DUP_HANDLE允許使用DuplicateHandle函式進行進程句柄的複製操作.
PROCESS_QUERY_INFORMATION允許函式GetExitCodeProcess 或函式GetPriorityClass functions 查詢進程的信息時使用該句柄.
PROCESS_SET_INFORMATION允許函式SetPriorityClass使用此句柄進行優先權設定.
PROCESS_TERMINATE允許函式TerminateProcess 使用此句柄關閉進程.
PROCESS_VM_OPERATION 允許函式VirtualProtectEx使用此句柄修改進程的虛擬記憶體.
PROCESS_VM_READ or PROCESS_VM_WRITE 允許函式訪問和寫入許可權
SYNCHRONIZE Windows NT 專用: 允許同步函式使用此句柄.
bInheritHandle: 指定返回的句柄是繼承dwProcessId指定的進程..
dwProcessId:指定打開需要打開的進程的PID.

在易語言中的使用

.版本 2
.DLL命令 OpenProcess, 整數型, "Kernel32.dll", "OpenProcess", , 打開一個已存在的進程對象,並返回進程的句柄
.參數 dwDesiredAccess, 整數型, , 渴望得到的訪問許可權(標誌)
.參數 bInheritHandle, 邏輯型, , 是否繼承句柄
.參數 dwProcessId, 整數型, , 進程標識符

相關詞條

熱門詞條

聯絡我們