リモートデスクトップを介してUACをバイパスしようとしている場合は、IDオーバーライドを使用する必要があります。WTSGetActiveConsoleSessionId
これは、リモートデスクトップを使用するときにMicrosoftAPIメソッドが正しい情報を提供できないためです。
物理コンソールに接続されているセッションのセッションID。
したがって、Vista / Win7 / 2k8 UACをバイパスするには、基本的なPing機能を使用できます。これにより、ユーザーが表示できる正しいSIDを使用してローカルシステムでプロセスが開始されます。
これが発生していないことに気付いた場合は、プロセスマネージャに移動し、SIDを検査し、pingw/を使用userIDOverride
して正しいSIDを指定できます。
private static readonly ILog Logger
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
String applicationName = String.Empty;
bool result;
public Access()
{
Logger.Debug("I am now in Access Constructor");
}
public void Ping(string address)
{
Logger.Debug("I am now in Ping");
applicationName = @"C:\Windows\System32\ping.exe " + address + " -t";
Logger.Debug(String.Format("Application Name: {0} ", applicationName));
ApplicationLoader.PROCESS_INFORMATION procInfo;
result = ApplicationLoader.StartProcessAndBypassUAC(
applicationName,
out procInfo,
null);
Logger.Debug(String.Format(
"Result of StartProcessAndBypassUAC: {0} ", result.ToString()));
}
public void Ping(string address, int userIDOverride)
{
Logger.Debug("I am now in Ping w/ override");
applicationName = @"C:\Windows\System32\ping.exe " + address + " -t";
Logger.Debug(String.Format("Application Name: {0} ", applicationName));
ApplicationLoader.PROCESS_INFORMATION procInfo;
result = ApplicationLoader.StartProcessAndBypassUAC(
applicationName,
out procInfo,
userIDOverride);
Logger.Debug(String.Format(
"Result of StartProcessAndBypassUAC: {0} ", result.ToString()));
}