Сразу после небольшого подтверждения:
Реализует ли XP SP3 механизм изоляции привилегий пользовательского интерфейса (UIPI), который есть в Vista?
Предыстория для человеческого интереса :) Недавно мне передали исходный код на C++ довольно большому приложению. К сожалению, единственный разработчик этого приложения, с момента его создания в середине 90-х, недавно скончался, оставив нас в довольно затруднительном положении, пока мы не сможем нанять нового разработчика.
Недавно пользователи сообщили, что приложение случайным образом перестало работать и / или некоторые функции, которые ранее работали, похоже, вообще не срабатывают, «хотя ничего не изменило мой конец!». "Ничего не изменилось" оказался SP3 :)
Зная это, и хотя я не специалист по C / C++, я подумал, что посмотрю на источник, чтобы узнать, смогу ли я что-нибудь узнать (потратив много времени на изучение брандмауэров, антивирусных сканеров и других внешние факторы).
Я отследил одну ошибку до вызова функции Api, SendMessage, и зашел в документацию MSDN, чтобы посмотреть. В нем четко указано «Microsoft Windows Vista и более поздние версии. Отправка сообщений подлежит изоляции привилегий пользовательского интерфейса (UIPI). Поток процесса может отправлять сообщения только в очереди сообщений потоков в процессах с меньшим или равным уровнем целостности».. Хотя я не уверен на 100%, это кажется вероятной причиной.
Ваше здоровье!
Ленни.





Нет, XP SP3 не реализует никаких изменений безопасности Vista, по крайней мере, не связанных с оконным менеджером. На самом деле вы не слишком подробно рассказываете о помощи, но что за ошибка связана с SendMessage ()?
SendMessage () - это очень широко используемая процедура, которая просто отправляет сообщение Windows в окно, поэтому я ожидаю, что ошибка связана с тем, как окно получателя обрабатывает входящее сообщение (или нет), а не с самим SendMessage (). Вместо того, чтобы думать о SendMessage () как о функции Windows, вы должны думать об этом как о функции, которая в конечном итоге вызовет дополнительный код приложения в любом приложении, которому принадлежит окно, в которое вы отправили сообщение, в частности, Код возврата из SendMessage () сообщает вам, как приложение окна пыталось обработать сообщение.
UIPI не сообщает об ошибках в SendMessage - если вы получаете сообщение об ошибке, значит, это что-то другое. И другие комментаторы правы, UIPI есть только в Vista, и вы бы не пострадали от этого в любом случае, если, например, вы не пытались отправить сообщение в службу.