Win2k, есть сервис , содержащий DCom объекты , соответственно чтоб их использовать по сети в Log on стоит не LocalSystem и данный сервис запускается в неинтерактивной сессии(window station). В то же время один из методов объекта должен выдавать юзеру диалог.
Соответственно необходимо обеспечить возможность взаимодействия сервиса с активным(видимым) десктопом из неинтерактивной сессии. В MSDN написано что для этого необходимо инперсонализоваться открыть интерактивную сессию, в ней выдать диалог , вернуться в исхлдную сессию... Там приведен код с инперсонализацией через RpcImpersonateClient(h) , где необходимый handle h передается в метод. У меня этого хендела на клиенте нет тк я в явном виде rpc не использую. Как выйти из ситуации — может кто сталкивался с проблеммой — киньте example
ps
пробовал инперсонализовываться через CoImpersonateClient в коде соответствующего метода Com объекта — не отрабатывает
// Impersonate the client and connect to the User's
// window station and desktop.
// RpcImpersonateClient(h);
LPSTR lpszWindowStation="WinSta0";
LPSTR lpszDesktop="WinSta0\\Default";
LPSTR lpszText="Данный MessageBox вызывается из сервиса \n со сменой Window Station на интерактивную \n и инперсонализацией процесса сервиса7";
LPSTR lpszTitle="Сообщение о кошках";
UINT fuStyle=MB_OK;
dwGuiThreadId = dwThreadId;
result = MessageBox(NULL, lpszText, lpszTitle, fuStyle);
// MessageBox выдается для простоты в данном примере — на самом деле здесь свой диатог так что
//MB_DEFAULT_DESKTOP_ONLY не подходит...
dwGuiThreadId = 0;