2012-01-18 58 views
11

我正在開發一個分區磁盤程序,併爲我讀取\\\\.\\PhysicalDrive0我需要管理員權限。可執行文件是否有可能要求管理員權限? (Windows 7)

我想知道在程序運行期間是否有可能獲得管理權限?這有什麼好處嗎?

我想這樣做,因爲我希望只有在讀取/寫入磁盤時才使用管理權限執行程序。出於安全原因,我不希望程序隨時使用管理權限執行,因爲某些人可能在某些模塊中發現一個錯誤(例如堆棧或堆溢出),並執行任意命令作爲adm。

+0

不需要。您必須將該代碼移動到具有要求UAC提升權限的清單的另一個.exe項目。必要時啓動.exe。 – 2012-01-18 19:17:50

+0

謝謝你所有的答案!分離過程的訣竅將完成這項工作。 – 2012-01-18 19:40:50

+1

@HansPassant:不一定_another_ .exe。查看任務管理器,如果您選擇「查看所有用戶的進程」,則使用管理員權限重新啓動自己。 – MSalters 2012-01-19 16:14:59

回答

13

進程已經啓動後,您不能獲得提升的權限。您的選項有:

  1. 將需要提升權限的應用程序放入單獨的進程並使用requireAdministrator進行清單。
  2. 將需要提升權限的應用程序部分作爲超出程序的COM對象運行。
+0

有關COM提升方法,請參見MSDN上的[本文](http://msdn.microsoft.com/en-us/library/windows/desktop/ms679687(v = vs.85).aspx)。 – Deanna 2012-01-20 09:50:37

5

一旦進程開始執行,我從來沒有見過過渡權利的方法。我所知道的唯一方法是將流程創建爲特權。

我期待其他答案,如果有另一種方式。

(更新)
文章Teach Your Apps To Play Nicely With Windows Vista User Account Control(大約一半)確認管理員權限只能在進程創建時授予。

+0

鏈接已損壞。 – 2017-06-09 01:47:43

+0

@bronzeman:固定。 – wallyk 2017-06-09 03:21:59

2

您需要嵌入清單與requireAdministrator標誌

http://msdn.microsoft.com/en-us/library/bb756929.aspx

+0

沒有閱讀的問題。 – Voo 2012-01-18 19:18:55

+0

那麼因爲程序需要訪問低級別的計算機部件,所以我沒有看到任何理由不能使用管理員權限運行。同樣的原因適用於每次需要執行特權操作的特權子進程 – 2012-01-18 20:09:50

+2

由於完全相同的原因,OpenSSH沒有運行具有根權限的所有內容,僅僅因爲它必須在端口22處進行偵聽。其他任何事情都是可怕的設計和違反了安全代碼設計的最基本原則之一。 [甚至有關於它的維基文章](http://en.wikipedia.org/wiki/Privilege_separation) – Voo 2012-01-18 20:27:41

1

項目的化子性質(Alt + Enter鍵)->鏈接->清單文件 -> UAC執行水平(VS2015,在2010年它的相似) -> requireAdministrator或highestAvailable

編輯:另外,如果它的更新程序,只需將程序名稱從Update開始,Windows就會自動識別它。

相關問題