Моя программа использует DXGI API для взаимодействия с выходами и адаптерами DXGI.
Я разрабатываю его, используя в основном инструменты командной строки, поскольку мне пока не нужен GUI.
Я также обращаюсь к своему экземпляру PowerShell через Bitvise SSH Server — каждый раз, когда я запускаю скомпилированную программу.exe через этот экземпляр PowerShell, насколько я могу судить, это означает, что моя программа выполняется в сеансе 0, а это означает, что у меня есть доступ только подмножество функциональности DXGI (см. Используйте Direct3D в процессах сеанса 0).
Есть ли способ, которым я могу как-то взломать это требование? Есть ли флаг, который я могу передать программе .exe, которая каким-то образом выскакивает из сессии 0?
Если не через WinAPI и если вы можете использовать и запустить дополнительный exe-файл для запуска вашей программы.exe, я думаю, вы можете попробовать использовать утилиту psexec: http://technet.microsoft.com/en-us/sysinternals/bb897553.
Я думаю, что есть похожие утилиты вокруг.
РЕДАКТИРОВАТЬ:
Вы также можете использовать psexec для запуска процессов на локальном компьютере, см. Ссылку на аргумент «computer»:
компьютер Направьте PsExec для запуска приложения на указанном компьютере или компьютерах. Если вы опустите имя компьютера, PsExec запустит приложение в локальной системе. и если вы введете имя компьютера «\ *», PsExec запустит приложения на всех компьютерах в текущем домене.
Другой РЕДАКТИРОВАТЬ
Я смог запустить notepad.exe в моем сеансе, имитируя то, что вы могли иметь:
psexec -i 0 psexec -s -i 1 C:\windows\system32\Notepad.exe
В этой командной строке запускается psexec для запуска в сеансе 0 (под системной учетной записью), а затем этот новый psexec вызывает notepad.exe для отображения в моем сеансе (сеанс 1). И это отчасти работает.
Конечно, вам понадобятся права администратора для запуска этих команд.
Других решений пока нет …