一.VC
方法名稱:OpenProcess
位置:Kernel32.dll
OpenProcess 函式用來打開一個已存在的進程對象,並返回進程的句柄。
1.函式原型
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的訪問許可權(標誌)
BOOL bInheritHandle, // 是否繼承句柄
DWORD dwProcessId// 進程標示符
);
2.返回值:
如成功,返回值為指定進程的句柄。
如失敗,返回值為空,可調用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.舉例
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 打開進程
IfhProcess Then
ReadProcessMemoryhProcess, 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.