日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取进程或线程的ID以及句柄信息

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取进程或线程的ID以及句柄信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先介紹一下創建線程或進程的時候是可以得到相應的ID以及句柄信息的。

BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATIONlpProcessInformation );

其他的參數就不介紹了,最后一個參數lpProcessInformation指向一個用來接收新進程的識別信息的PROCESS_INFORMATION結構體。

typedef struct_PROCESS_INFORMATION{ HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; }PROCESS_INFORMATION;

其中成員含義如下。
① hProcess:返回新進程的句柄。
② hThread:返回主線程的句柄。
③ dwProcessId:返回一個全局進程標識符。該標識符用于標識一個進程。從進程被創建到終止,該值始終有效。
④ dwThreadId:返回一個全局線程標識符。該標識符用于標識一個線程。從線程被創建到終止,該值始終有效。

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD SIZE_T dwStackSize,//initialstacksize LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction LPVOID lpParameter,//threadargument DWORD dwCreationFlags,//creationoption LPDWORD lpThreadId//threadidentifier )

最后一個參數 lpThreadId:保存新線程的id,返回值就是創建的新線程的句柄。


接下來說一下創建之后的情況

進程

HANDLE GetCurrentProcess(VOID);
說明:獲取當前進程的一個句柄
返回值:為當前進程的句柄,該句柄可以復制,但不可繼承。不必調用CloseHandle函數來關閉這個句柄。

注意:但是要注意的是,這個句柄只是一個偽句柄,只能在我們的進程中才能代表當前進程的句柄,事實上這個函數目前只是簡單的返回-1這個值。也就是說在我們的程序中-1便能表示本進程的句柄。

獲得進程真正的句柄,但是這時候獲取到的真正句柄需要關閉!

HANDLE?hProcess=NULL;???? DuplicateHandle(GetCurrentProcess(),????GetCurrentProcess(),????GetCurrentProcess(),????&hProcess,????0,????FALSE,????DUPLICATE_SAME_ACCESS);//偽進程句柄轉為真實進程句柄????

DWORD GetCurrentProcessId(VOID);
說明:獲取當前進程的標示符(PID)
返回值:返回一個標示符(PID)

線程基本和進程是系統的相同的

HANDLE GetCurrentThread(VOID); //獲取線程偽句柄

DWORD GetCurrentThreadId(VOID); //獲取線程ID

轉換為真正的線程句柄

HANDLE?hThread=NULL;?? DuplicateHandle(GetCurrentProcess(),??GetCurrentThread(),??GetCurrentProcess(),??&hThread,??0,??FALSE,??DUPLICATE_SAME_ACCESS);//偽線程句柄轉換為真實線程句柄?? //..???? //不用時也必須關閉?? CloseHandle(hThread); ?


總結

以上是生活随笔為你收集整理的获取进程或线程的ID以及句柄信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。