Microsoft Windows可讓您控制執行緒物件的存取。 如需安全性的詳細資訊,請參閱
存取控制模型
。
呼叫
CreateProcess
、
CreateProcessAsUser
、
CreateProcessWithLogonW
、
CreateThread
或
CreateRemoteThread
函式時,您可以指定執行緒
的安全性描述元
。 如果您指定
Null
,執行緒會取得預設的安全性描述元。 執行緒預設安全性描述元中的 ACL 來自建立者的主要或模擬權杖。
若要擷取執行緒的安全性描述元,請呼叫
GetSecurityInfo
函式。 若要變更執行緒的安全性描述元,請呼叫
SetSecurityInfo
函式。
CreateThread
函式所傳回的控制碼具有線程物件的
THREAD_ALL_ACCESS
存取權。 當您呼叫
GetCurrentThread
函式時,系統會傳回虛擬手寫,且執行緒的安全性描述元允許呼叫端的最大存取權。
執行緒物件的有效存取權限包括
標準存取權限
和一些執行緒特定的存取權限。 下表列出所有物件所使用的標準存取權限。
READ_CONTROL
(0x00020000L)
需要讀取物件之安全性描述元中的資訊,不包括 SACL 中的資訊。 若要讀取或寫入 SACL,您必須要求
ACCESS_SYSTEM_SECURITY
存取權限。 如需詳細資訊,請參閱
SACL 存取權限
。
SYNCHRONIZE
(0x00100000L)
使用同步物件的權限。 這可讓執行緒等到物件處於訊號狀態為止。
WRITE_DAC
(0x00040000L)
需要修改 物件之安全性描述元中的 DACL。
WRITE_OWNER
(0x00080000L)
需要變更 物件之安全性描述元中的擁有者。
THREAD_ALL_ACCESS
執行緒物件的所有可能存取權限。
Windows Server 2003 和 Windows XP:Windows Server 2008
和 Windows Vista 上增加
THREAD_ALL_ACCESS旗標
的值。 如果針對 Windows Server 2008 和 Windows Vista 編譯的應用程式是在 Windows Server 2003 或 Windows XP 上執行,
則THREAD_ALL_ACCESS
旗標包含不支援的存取位,且指定此旗標的函式會失敗並出現
ERROR_ACCESS_DENIED
。 若要避免這個問題,請指定作業所需的最小存取權限集。 如果必須使用
THREAD_ALL_ACCESS
,請將
_WIN32_WINNT
設定為應用程式 (目標的最低作業系統,
#define _WIN32_WINNT _WIN32_WINNT_WINXP
例如) 。 如需詳細資訊,請參閱
使用Windows標頭
。
THREAD_DIRECT_IMPERSONATION
(0x0200)
模擬用戶端的伺服器執行緒需要 。
THREAD_GET_CONTEXT
(0x0008)
需要使用
GetThreadCoNtext
讀取執行緒的內容。
THREAD_IMPERSONATE
(0x0100)
需要直接使用執行緒的安全性資訊,而不需使用提供模擬服務的通訊機制呼叫它。
THREAD_QUERY_INFORMATION
(0x0040)
需要從執行緒物件讀取特定資訊,例如結束代碼 (請參閱
GetExitCodeThread
) 。
THREAD_QUERY_LIMITED_INFORMATION
(0x0800)
需要從執行緒物件讀取特定資訊, (請參閱
GetProcessIdOfThread
) 。 具有
THREAD_QUERY_INFORMATION
存取權限的控制碼會自動授與
THREAD_QUERY_LIMITED_INFORMATION
。
Windows Server 2003 和 Windows XP:
不支援此存取權限。
THREAD_SET_CONTEXT
(0x0010)
使用
SetThreadCoNtext
寫入執行緒內容的必要專案。
THREAD_SET_INFORMATION
(0x0020)
必須線上程物件中設定特定資訊。
THREAD_SET_LIMITED_INFORMATION
(0x0400)
必須線上程物件中設定特定資訊。 具有
THREAD_SET_INFORMATION
存取權限的控制碼會自動授
與THREAD_SET_LIMITED_INFORMATION
。
Windows Server 2003 和 Windows XP:
不支援此存取權限。
THREAD_SET_THREAD_TOKEN
(0x0080)
必須使用
SetThreadToken
設定執行緒的模擬權杖。
THREAD_SUSPEND_RESUME
(0x0002)
暫停或繼續執行緒所需的 (請參閱
SuspendThread
和
ResumeThread
) 。
THREAD_TERMINATE
(0x0001)
使用
TerminateThread
終止執行緒的必要專案。
如果您想要讀取或寫入物件的 SACL,您可以要求
ACCESS_SYSTEM_SECURITY
執行緒物件的存取權。 如需詳細資訊,請參閱
存取控制清單 (ACL)
和
SACL 存取權限
。
受保護的處理程序
受保護的程式
可增強數位Rights Management的支援。 系統會限制受保護進程的存取權,以及受保護進程的執行緒。
Windows Server 2003 和 Windows XP:
已從 Windows Vista 開始新增受保護的進程。
下列特定存取權限不允許從進程到受保護進程的執行緒:
THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE
引進
了THREAD_QUERY_LIMITED_INFORMATION
許可權,以便存取可透過
THREAD_QUERY_INFORMATION
取得的資訊子集。