以下代码片段显示了Win32服务进程如何在CreateProcess调用中使用STARTUPINFO结构来创建可访问用户的交互式窗口站和默认桌面的进程。非交互式Win32服务可以使用此技术与登录用户进行交互。然后,新进程可以使用命名管道或其他一些进程间通信方式与Win32服务进行通信。
要创建一个交互过程,如本示例所示,Win32服务必须登录到LocalSystem帐户。
#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);
}