我有一個在系統會話中永遠運行的行程。我需要將一個執行緒(我們稱之為t1)冒充到當前的標準用戶會話中,以訪問映射驅動器中的某些檔案,以及其他檔案操作等。
從被冒充的執行緒中,另一個執行緒被呼叫(我們稱其為t2)。t2使用CreateProcess()來創建一個具有默認值的行程。從t2創建的行程在系統會話中運行。
我并不想知道如何在用戶會話中運行子行程。相反,我想了解為什么子行程在系統會話中運行,即使呼叫者執行緒在用戶會話中。
CreateProcess()是否使用父行程的標記而不是執行緒的標記?
uj5u.com熱心網友回復:
根據CreateProcess檔案:
創建一個新的行程和它的主執行緒。這個新行程在呼叫行程的安全背景關系中運行。
如果呼叫行程正在冒充另一個用戶,新行程將使用呼叫行程的令牌,而不是冒充令牌。要在冒充令牌所代表的用戶的安全背景關系中運行新行程,請使用
CreateProcessAsUser或CreateProcessWithLogonW函式。
至于你所說的t2在用戶會話中運行,因為t1在創建t2時冒充了用戶,這是錯誤的,根據從被冒充的執行緒創建新執行緒...:
在 Windows XP SP2 和 Windows Server 2003 之前,如果呼叫的執行緒是冒充的,新執行緒將從創建者的冒充令牌中分配 DACL,如果不是,則從主令牌中分配。從Windows XP SP2和Windows Server 2003開始,行為始終是相同的:新執行緒被分配了來自從 Windows XP SP2 和 Windows Server 2003 開始,行為始終是相同的:新執行緒將從主令牌中分配 DACL,而不管呼叫者的冒名狀態如何。
這意味著t2實際上是在系統會話中運行,而不是在用戶會話中。t2將需要根據需要對用戶進行自己的冒名頂替。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/320309.html
標籤:
上一篇:如何在c#應用程式中使用win32獲得具有完整路徑的目錄和檔案串列
下一篇:如何隱藏終端中的Python資訊
