Как установить приложение диспетчера утилит, которое может запускаться на безопасном рабочем столе?

Я пытался написать приложение Utility Manager и пытаюсь протестировать его на WinXP SP3. Я добавил его в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Utility Manager, и он хорошо работает при загрузке диспетчера утилит, когда я вошел в систему.

Однако, когда я пытаюсь загрузить его из Диспетчера служебных программ при запуске перед входом в систему (через Window + U) или с заблокированного экрана, появляется сообщение об ошибке (примерно, поскольку это немецкая версия WinXP) «Это приложение не может быть запущенным на безопасном рабочем столе. Обратитесь к системному администратору для получения необходимых разрешений ».

Что мне нужно сделать иначе, чтобы это работало на безопасном рабочем столе?

[b] edit: [/ b] Я последовал совету Дэвида Поупа и попытался отладить utilman.exe (используя OllyDebug так как я больше привык к этому, чем к использованию нового отладчика ..., и попросил его прервать создание процесса). Кажется, что мое приложение вообще не запускается. Поскольку в OllyDebug некоторые функции (например, прерывание при вызове API) были отключены (возможно, потому, что процесс выполняется от имени другого пользователя), я дважды проверил его с помощью Sysinternals Process Monitor. При запуске экранной клавиатуры появляется событие «Процесс создан»; при запуске моего инструмента никаких событий не появляется.

Еще одно примечание: когда я помещаю osk.exe (экранную клавиатуру) в свой новый раздел реестра, он работает нормально (тогда у меня в основном есть две записи на экранной клавиатуре в меню), но если я скопирую osk.exe в osk2. exe и поместите osk2.exe в качестве исполняемого файла, копия onls экранной клавиатуры запускается на незащищенном рабочем столе. Значит, это должна быть какая-то проверка (против имени файла + содержимого) перед вызовом исполняемого файла? Замена magnify.exe моим инструментом (или osk.exe) приведет к тому, что он не будет работать после следующей перезагрузки (при перезапуске utilman ??).

Другими словами: он будет работать только в том случае, если файл называется osk.exe и является экранной клавиатурой, или файл имеет имя magnify.exe и является лупой.

Это также не создает никакой информации в журнале событий.


person mihi    schedule 13.04.2009    source источник


Ответы (3)


Вы следовали всем инструкциям на этой странице? Кажется, он охватывает больше настроек реестра, чем то, что вы описали.

Изменить: Как вы заметили, похоже, что эта страница предназначена для Vista. Раздражает то, как MSFT отбирает устаревшую информацию и делает ее совершенно трудной для поиска ...

Одна вещь, которую нужно проверить, - это журналы событий - возможно, они содержат подсказку. Возможно, удастся поднять уровень аудита, чтобы увидеть больше данных, связанных с безопасностью.

У меня нет вашего кода, поэтому я не мог отладить его сам, но я смог подключить отладчик к utilman.exe и получить контроль в момент запуска утилит на защищенном рабочем столе. Может быть, если вы сделаете это, вы сможете выяснить нарушение безопасности.

  1. On the target computer:
    • Install the Debugging Tools for Windows.
    • Включите доступ RDP.
    • Заблокируйте экран.
    • Нажмите Win-U, чтобы открыть диспетчер утилит и оставить его включенным.
    • Убедитесь, что ваши символы и исходный код видны на целевой машине по тому же пути, по которому они были скомпилированы на машине разработчика.
  2. On another machine:
    • RDP into the target computer as a user with debugging/admin privileges.
  3. In the RDP session:
    • Run WinDBG and attach to the utilman process (F6 key)
    • Если в отладчик не попадает, нажмите ctrl-break.
    • Сделайте .childdbg 1, чтобы ваша утилита загружалась в этот экземпляр отладчика при запуске.
    • Сделайте g, чтобы продолжить работу.
  4. Back on the target computer console (login screen):
    • Launch your utility from the utility manager. The debugger (in the RDP session) should break inside the new process and you should be able to debug from there.

(У меня нет Visual Studio на машине, на которой я это пробовал; если у вас есть VStudio на целевой машине, вы, вероятно, можете использовать ее вместо WinDBG.)

Если ваша утилита даже не загружается, значит, Windows выполняет какую-то проверку перед вызовом CreateProcess. Журналы безопасности могут помочь вам в этом.

Редактировать 2. Я пробовал использовать строки служебная программа для поиска программы, которая генерирует диалоговое окно, но я использую английский WinXP, поэтому у меня нет фактической строки. Я также искал жестко запрограммированный "osk.exe" и т. Д., Но безуспешно.

Если вы можете выяснить, какой EXE выводит этот диалог (возможно, utilman, возможно, winlogon ...), вы сможете подключиться к нему с помощью отладчика и вернуться вверх по стеку, чтобы найти проверку, которая обнаруживает ошибки. Как только вы обнаружите, что проверка завершилась неудачей, вы сможете установить точку останова ранее в пути кода, которая должна проникнуть в отладчик при следующей попытке запуска. Оттуда вы сможете пройти через неудавшуюся проверку. Для всего этого убедитесь, что у вас есть символы ОС, так как это должно облегчить чтение "указателей". Я не знаю, поддерживает ли ваш отладчик сервер символов.

person David Pope    schedule 20.04.2009
comment
Похоже, ключи для Vista поменяли. Эти ключи не существуют в моей версии XP. - person mihi; 20.04.2009

Имеется ли ваша программа с цифровой подписью? Откуда запущена ваша программа?

Попробуйте разместить его на одном из следующих защищенных путей:

* ..\Program Files\ (and subfolders)
* ..\Program Files (x86)\ (and subfolders, in 64-bit versions of Windows only)
* ..\Windows\System32\ 

Вы видели http://netsecurity.about.com/od/secureyourwindowspc/qt/uacuiaccess.htm? Кажется, это описывает некоторые из того, что вы пытаетесь сделать.

person BarrettJ    schedule 24.04.2009
comment
Я подписал свое приложение цифровой подписью с помощью тестового ключа (которому доверяет моя тестовая машина). Это не помогло. Файл уже находился в папке \ Windows \ System32. Проблема в этой ссылке немного другая (речь идет о запуске запросов на повышение прав в Vista на незащищенном рабочем столе), я хочу запустить приложение на защищенном рабочем столе в WinXP. Но подписание приложения в любом случае могло быть хорошей идеей, просто это не помогло. - person mihi; 25.04.2009

Я не уверен, откуда взялось это сообщение, но я знаю, что существует объект рабочего стола Winlogon, который является безопасным рабочим столом CTRL + ALT + DELETE. Вы можете использовать OpenDesktop и SetThreadDesktop, прежде чем создавать какие-либо окна в потоке графического интерфейса, и это должно позволить вашим окнам отображаться там. Возможно, есть другой способ сделать это с помощью API специальных возможностей в новых версиях Windows.

person Chris Smith    schedule 15.04.2009
comment
Да, я знаю. Открытие собственного окна на защищенном рабочем столе - не моя проблема. Я хочу добавить свою программу в Utility Manager. Вы знаете, когда вы нажимаете Window + U на экране входа в систему, вы можете открыть лупу, экранную клавиатуру или диктор в некоторых версиях Windows. Я просто хочу быть в этом списке. - person mihi; 15.04.2009