Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как сладить с режимом виртуализации в Win 7?


Автор: Zootekhnik 31.1.2011, 11:19
Доброго времени суток! Вынужден обратиться с проблемой.
Вкратце, как мне кажется, проблема в уровне привилегий Windows 7. В ОС XP и Vista без проблем.
Значит, есть прога которая загружает клавиатурный хук, из хука по некоторому событию посылаю сообщение WM_KBHOOK своей проге:
hWndInd = FindWindow(NULL, LPCTSTR("MyProga"));
PostMessage(hWndInd, WM_KBHOOK, (int)nNewMode, NULL);
Прога запускается из реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
В манифесте уровень привилегии выставил в As Invoker. 
Так вот, в этом виде прога работает нормально, т.е. в виде виртуализации, да  вот БЕДА, реестр Винды недоступен, не могу отключить автозапуск проги. 
Проблема возникает при запуске в режиме администратора, доступ к реестру появляется, но не могу послать PostMessage своей же проге - изложено выше ((( Вроде бы FindWindow находит а сообщение уходит в никуда (((. Есть ли решение этой проблемы, куда копать? Буду премного благодарен дельным советам!

Автор: Dem_max 31.1.2011, 11:29
программа запускается что ли на виртуальной машине ? а ты сообщение пытаешься передать в виртуальную машину ?

Автор: Zootekhnik 31.1.2011, 11:39
Дело не в виртуальной машине. Просто прога работала в XP и Vista, а в Windows 7 не желает нормально работать. Как мне кажется дело в самой ОС Win 7, вот сижу, копаю в этом направлении: Приложение без поддержки UAC в манифесте, которое не запускается явно с административными привилегиями, будет работать в режиме виртуализации совместимости. В этом режиме все глобальные операции записи, например в реестр или в разделы, не предназначенные для пользователя, перенаправляются в разделы, назначенные пользователю. Повышение пользователем уровня прав для такой программы невозможно. Система считает такую программу без манифеста UAC "старой" и создает в целях безопасности для такой программы выделенное пространство имен. Другие программы это пространство не видят.

Если вашему приложению требуется повысить уровень привелегий и отключить виртуализацию, необходимо добавить в манифест секцию Trust Info с разделом Security для поддержки управления учетными записями (UAC).

Автор: Zootekhnik 31.1.2011, 12:06
В Вин 7 похоже дела именно так и обстоят 
Цитата

программа запускается что ли на виртуальной машине ? а ты сообщение пытаешься передать в виртуальную машину ? 
 smile 

Автор: ncr 1.2.2011, 15:38
Цитата(Zootekhnik @ 31.1.2011,  11:19)
В манифесте уровень привилегии выставил в As Invoker. 
Так вот, в этом виде прога работает нормально, т.е. в виде виртуализации, да  вот БЕДА, реестр Винды недоступен, не могу отключить автозапуск проги.


Если в манифесте выславлено AsInvoker, то виртуализация отключается.
А реестр вам недоступен потому что в HKLM простым смертным писать нельзя (и это хорошо).
Пишите в HKCU.

Цитата
Проблема возникает при запуске в режиме администратора, доступ к реестру появляется, но не могу послать PostMessage своей же проге - изложено выше ((( Вроде бы FindWindow находит а сообщение уходит в никуда (((. Есть ли решение этой проблемы, куда копать?

Посылать сообщения из непривилегированного процесса окнам привилегированного процесса нельзя.
Либо не запускайте приёмник от имени администратора, либо запускайте передатчик от имени администратора, либо передавайте информацию другими способами.

Автор: Zootekhnik 1.2.2011, 16:39
Стало быть дела у меня дрянь smile с UAC вроде разобрался, а посему, скрипя сердцем в основное приложение заюзал HKEY_CURRENT_USER, слатегосподи хоть чтение возможно с HKEY_LOCAL_MACHINE. Но все таки вопрос насчет Postmessage остался открытым, вот насчет 
Цитата

либо передавайте информацию другими способами.
 а они в природе существуют чтоли? Немного офтопа:  smile Не понимал - за что ругают МелкоТелых, стало быть SetWindowsHookEx запретили, это как бы у Джека Лондона "Я хозяин своего слова - могу дать, могу и забрать обратно" smile 

Автор: ncr 1.2.2011, 16:44
Цитата(Zootekhnik @ 1.2.2011,  16:39)
а они в природе существуют чтоли?

http://msdn.microsoft.com/en-us/library/aa365574%28VS.85%29.aspx.


Автор: Dem_max 1.2.2011, 17:09
Цитата

SetWindowsHookEx запретили

с чего это запретили все работает. 
В остальном просто надо понимать куда разрешено читать и писать а куда нет в Win 7

Автор: Zootekhnik 1.2.2011, 17:41
Yоur bunnу wrоte!!! Вот говорила мама "Учи английский"  smile NCR спасибо за ссылку!!! Начну чтоли с WM_COPYDATA.  smile вот почему большинство троянцев не проникают в Seven smile приметил за свою долгую жизнь юзверя!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)