Introduction
This article describes about communicating with the service with elevating and without elevating on Vista.I have taken use of named events for creating the same.
Background
Showing the UI through service is really a big task as sending messages across the sessions have been banned on vista.
Using the Demo Project
1. Copy the MessageBox folder to the c:\ drive
2. Copy all the binaries in one folder .Install the service using Vista_UAC_Service.exe install
3. Use Vista_XP_Compatible.exe for testing the UI which is a created process through the service.
Blocks of code should be set as style "Formatted" like this:
"http://msdn2.microsoft.com/en-us/library/ms717798.aspxTCHAR">http:
TCHAR * szSD = TEXT("D:")
TEXT("(A;OICI;GA;;;BG)")
TEXT("(A;OICI;GA;;;AN)")
TEXT("(A;OICI;GRGWGX;;;AU)")
TEXT("(A;OICI;GA;;;BA)");
For getting the session ids in the session 0
WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,0,1,&wsi,&dwNos);
for(int i=0;i<dwNos;i++)
{
if(wsi[i].State == WTSActive)
{
dwSessionId= wsi[i].SessionId;
}
}
Use createprocessasuser for creating the process
bool bRet = ::CreateProcessAsUser( Token, L"c:\\Messagebox\\MessageBox.exe", NULL, NULL, NULL, FALSE,
CREATE_NEW_PROCESS_GROUP | CREATE_UNICODE_ENVIRONMENT|CREATE_NO_WINDOW , pEnv, NULL,
&startupInfo, &processInfo);