簡體   English   中英

Microsoft線程,設置安全性和訪問權限

[英]Microsoft Threads, setting Security and Access Rights

我試圖做一個基本的線程管理器。 您可能已經看過我以前的一個問題,其中提出了一些不好的代碼,而我仍在研究該代碼! 但是我被困住了,因為我想能夠調用函數GetExitCodeThread(HANDLE,LPDWORD),但是我在實現它時遇到了麻煩。 我遇到的第一個問題是我想出了我需要做的事,但我不知道如何實現。 我最初是在將安全屬性設置為NULL的情況下調用CreateThread的,從它的外觀看,我需要將其設置為THREAD_QUERY_INFORMATION,但是我不知道如何填充所需的LPSECURITY_ATTRIBUTES結構。 msdn的結構為:

typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;

但是我不知道如何用THREAD_QUERY_INFORMATION來填充它,而且我也不明白我用其他結構來填充什么。

我認為,如果我設置了創建線程的安全性屬性,那么我應該能夠調用GetExitCodeThread,然后我的代碼應該可以工作...是否有人在創建線程時有設置安全性屬性的示例代碼,參考關閉? 關於更好地了解Windows庫的任何建議?

lpThreadAttributes參數確定句柄是否可繼承以及在線程對象上設置了哪些安全權限。 它不會影響對CreateThread返回的句柄的安全訪問,該句柄始終為THREAD_ALL_ACCESS

同樣,當新線程本身調用GetCurrentThread時返回的句柄始終具有完全訪問權限,但較舊的Windows不支持版本除外。

如果以后要使用OpenThread來獲取附加的句柄,或者如果外部進程試圖使用OpenThread來獲取句柄,那么線程安全權限便會發揮作用。

在Windows的受支持版本上,線程對象的默認安全權限總是(幾乎是?)總是合適的,因此lpThreadAttributeslpSecurityDescriptor應該為NULL 處理密碼,身份驗證或其他特別敏感任務的軟件在極少數情況下可能會使用非默認線程安全權限。 (我想這將不會有任何有用的目的,但是在某些情況下,適當的時候可能會出現這種情況。)

在舊版本的Windows上,如果調用CreateThread的線程正在模擬另一個用戶,則可能需要指定lpSecurityDescriptor ,盡管建議的做法是在調用CreateThread之前停止模擬。

MSDN文檔中的CreateThread對此進行了詳細說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM