Creating an Interactive Process

The following code fragment shows how a Win32 service process could use the STARTUPINFO structure in a CreateProcess call to create a process that has access to the user's interactive window station and default desktop. A noninteractive Win32 service could use this technique to interact with the logged on user. The new process could then use a named pipe or some other means of interprocess communication to communicate with the Win32 service.

To create an interactive process as shown in this example, a Win32 service must be logged in to the LocalSystem account.

#include <windows.h> 
 
STARTUPINFO si; 
PROCESS_INFORMATION ProcessInformation; 
 
si.cb = sizeof(STARTUPINFO); 
si.lpReserved = NULL; 
si.lpTitle = NULL; 
si.lpDesktop = "WinSta0\\Default"; 
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L; 
si.dwFlags = 0;; 
si.wShowWindow = SW_SHOW; 
si.lpReserved2 = NULL; 
si.cbReserved2 = 0; 
if (CreateProcess(NULL, lpszCmdLine, NULL, NULL, FALSE, 
                   0, NULL, NULL, &si, &ProcessInformation)) 
{ 
    CloseHandle(ProcessInformation.hProcess); 
    CloseHandle(ProcessInformation.hThread); 
}