2010-07-26 79 views
2

問候!你怎麼用CreateProcess()來使用SECURITY_ATTRIBUTES?

當我嘗試對我已經開始用的CreateProcess()的線程中使用GetThreadContext(),我收到的998: ERROR_NOACCESS

錯誤你可以在這裏找到這個問題的做作,但功能的代碼示例:http://pastebin.com/tamDhYza

根據關於「線程安全和訪問權限」的MSDN文章,我的假設是我需要首先將THREAD_GET_CONTEXT屬性傳遞給CreateProcess()的lpThreadAttributes參數。這個參數需要的類型是LPSECURITY_ATTRIBUTES,它似乎是一個指向struct SECURITY_ATTRIBUTES的長指針。不幸的是,我沒有多少運氣來弄清楚如何增加這個結構的權利。

任何人都可以幫助指向正確的方向嗎?

回答

2

我想你可能需要調整調用代碼的權限,以便可以訪問遠程進程。我懷疑在嘗試獲取遠程線程上下文之前,您需要啓用SE_DEBUG_NAME權限(請參閱here)。我不知道,雖然我平時使用的調試API和呼叫CreateProcess()DEBUG_PROCESS需要SE_DEBUG_NAME反正...

如果你需要創建你正在做的又是什麼創造了DACL安全描述符(自由訪問控制列表),這是一個SECURITY_ATTRIBUTES結構,它填充了允許或拒絕各種主體(用戶,計算機等)訪問資源的ACL(訪問控制列表)。這過去很複雜,需要大量複雜的API調用,但現在更容易了,詳情請參閱http://msdn.microsoft.com/en-us/library/ms717798(VS.85).aspx

+0

感謝您的回覆,Len。關於如何將THREAD_GET_CONTEXT編碼爲安全描述符字符串格式,您有任何指導嗎? – lechnito 2010-07-26 07:59:29

+0

嘗試先用'DEBUG_PROCESS'啓動進程。我認爲這可能是你需要做的一切。您要爲您創建的流程創建的安全描述符是告訴它IT不能對IT做什麼。 – 2010-07-26 08:27:32