我們有一個附帶清單的程序和選項「level =」requireAdministrator「 在標準用戶(不是管理員)下啓動程序後,它升級到管理員用戶,從那時起SHGetFolderPath(0,CSIDL_LOCAL_APPDATA ,0,SHGFP_TYPE_CURRENT,@ buf))返回管理本地目錄,但不是用戶的最初啓動的地方 當然,我們可以將標準用戶令牌作爲第三個參數傳遞給SHGetFolderPath,但我們如何才能在高級程序中獲得它?有沒有這樣做的方式?如何獲取原始用戶令牌? UAC,清單,安裝程序
當然,因爲這個問題我們有另一個問題。如何啓動另一個程序與ShellExecute不是在高級程序中的管理?當然,我們可以使用CreateProcessWithToke但是仍然存在令牌存在的問題(如何獲取此令牌)。 現在我們正在尋找IShellDispatch2接口,並嘗試啓動應用程序而不是以管理員身份使用瀏覽器,但有些東西告訴我這是錯誤的方式。
我知道我們必須以標準用戶身份啓動程序,然後使用com對象只提升應該使用管理權限執行的部分代碼。但是,主要問題仍然是令牌。
也有一個想法,就是要證明與「級別=」 asInvoker」,並開始第一程序作爲標準用戶,檢測到所有的本地用戶的路徑,並把它作爲參數與runas方式,SEE_MASK_NOCLOSEPROCESS選項給ShellExecuteEx並運行相同的程序,但作爲管理後,提高程序將退出,我們可以不升高程序不能執行任何程序作爲管理員這是正確的方式