TL; DR-唯一のオプションは、別のプロセスを生成することです。(新しいcmd.exe
。)コマンドプロンプトの場合、より高いアクセス許可を持つアクセストークンで新しいインスタンスを開始すると、常に新しいウィンドウが作成されます。
既に実行中のプロセスに追加のアクセス許可を付与することはできません。
管理者権限を持つユーザーが、ユーザーアカウント制御(UAC)が有効なWindowsマシンにログインすると、2つの個別のアクセストークンが作成されます。
- 完全な管理者アクセス権を持つもの、および
- 標準ユーザーアクセスを備えた2番目の「フィルタートークン」
プロセス(例CMD.EXE
)が作成されると、これらの2つのアクセストークンのいずれかが割り当てられます。プロセスが管理者として「昇格」で実行される場合、フィルター処理されていないアクセストークンが使用されます。プロセスに管理者権限が付与されていない場合、フィルタリングされた標準ユーザートークンが使用されます。
プロセスが作成されると、そのアクセストークンを置き換えることはできません。1このWindowsデスクトップ スレッドの MSDN アプリケーションセキュリティでは、Windowsカーネルチームのメンバーであることを示すポスターには次のように記載されています。
NTカーネルは、プロセスの実行開始後にトークンの切り替えを許可することを意図していませんでした。これは、ハンドルなどが古いセキュリティコンテキストで開かれている可能性があり、飛行中の操作が一貫性のないセキュリティコンテキストなどを使用している可能性があるためです。ただし、これはVistaまでは強制されませんでした。[エンファシス鉱山](@Ben Nに感謝します)
注:ユーザーアカウント制御は、Windows Vistaのリリースで導入されました。
このスーパーユーザーの回答は、同じことを確認する2つの追加ソースを引用しています。
したがって、コマンドプロンプトまたは他のプロセスを適切に昇格させることは、単に不可能です。唯一のオプションは、新しいアクセストークンで別のプロセスを生成することです(必要に応じて、元のプロセスの別のインスタンスにすることができます)。コマンドプロンプトの場合、より高いアクセス許可を持つアクセストークンで新しいインスタンスを起動すると、常に新しいウィンドウが作成されます。システムでUACプロンプトが有効になっている場合は、それらも同様にトリガーされます。
1 AdjustTokenPrivileges関数を使用して既存のアクセストークンの権限を調整できますが、MSDNによると:
AdjustTokenPrivileges関数は、アクセストークンに新しい特権を追加できません。トークンの既存の権限のみを有効または無効にできます。