Mam's WebSite

Mamの覚書Q&A検索


大項目:「 Delphi 」 - 中項目:「 API 」

「 ログオフ無しに管理者権限でアプリケーションを起動する 」

ログオフ無しに管理者権限でアプリケーションを起動する


回答

CreateProcessAsUser() APIを使う。
ただし、
 LogonUser() で取得したトークンハンドルが必要になる。

ソース

BOOL LogonUser(LPTSTR lpszUsername,
LPTSTR lpszDomain, LPTSTR lpszPassword, DWORD dwLogonType,
DWORD dwLogonProvider, PHANDLE phToken)
 
LPTSTR lpszUsername ... ユーザ名
LPTSTR lpszDomain ... ドメイン名
LPTSTR lpszPassword ... パスワード
DWORD dwLogonType ... ログオンオペレーションタイプ
DWORD dwLogonProvider ... ログオンプロバイダータイプ
PHANDLE phToken ... トークンハンドル格納領域
 

 
BOOL CreateProcessAsUser(HANDLE hToken,
LPCTSTR lpApplicationName, LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles, DWORD dwCreationFlags,
LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInfo)
 
HANDLE hToken ... LogonUser()で取得したハンドル
LPCTSTR lpApplicationName ... モジュール名
LPTSTR lpCommandLine ... コマンドライン
LPSECURITY_ATTRIBUTES lpProcessAttributes ... プロセスのセキュリティ属性
LPSECURITY_ATTRIBUTES lpThreadAttributes ... スレッドのセキュリティ属性
BOOL bInheritHandles ... ハンドル継承フラグ
DWORD dwCreationFlags ... 作成フラグ
LPVOID lpEnvironment ... 新しい環境ブロック
LPCTSTR lpCurrentDirectory ... カレントディレクトリ
LPSTARTUPINFO lpStartupInfo ... STARTUPINFOを指す
LPPROCESS_INFORMATION lpProcessInformation ... PROCESS_INFORMATIONを指す

Copyright 2019 Mam