В дополнение к манифесту Использование JNI для вызова ShellExecute с глаголом = runas также сделает это, но указание вещей с помощью манифеста - более надежный способ сделать это. Получение встроенного в exe манифеста может быть немного сложным, и было много проблем с обработкой манифеста в более ранних версиях Visual C ++, но большинство из них уже разработаны.
Тем не менее, я бы посоветовал вам задуматься над тем, зачем вам нужен доступ к корневому каталогу системы - это хранить настройки для всех пользователей? Если это так, вы можете рассмотреть возможность использования отдельного приложения для управления этими настройками (с его собственным манифестом). Вы не можете просто открыть диалоговое окно повышения прав UAC - вам действительно нужно запустить новый процесс (если вы посмотрите на диспетчер задач с приложениями, которые работают таким образом, вы увидите, что второй экземпляр приложения фактически запускается - посмотрите на столбец виртуализации UAC в диспетчере задач, чтобы увидеть различия).
Другая возможность состоит в том, чтобы настроить параметры безопасности в области реестра, которые вам абсолютно необходимо настроить из процесса без повышенных прав - но это идет вразрез с дизайном UAC, и это почти всегда вызовет больше проблем, чем стоит , Вероятно, лучше выпить M $ kool-aid и правильно спроектировать свое приложение для UAC. (Поверь мне, я чувствую твою боль по этому поводу - проходил через это несколько раз).
Поскольку я сам испытывал эту боль, я нашел следующую статью MSDN весьма полезной для понимания замысла разработки Microsoft с UAC:
http://msdn.microsoft.com/en-us/library/aa511445.aspx
Надеюсь, это поможет ...