https://git.reactos.org/?p=reactos.git;a=commitdiff;h=50a1479c53e8e22f187a51...
commit 50a1479c53e8e22f187a512c185c19d07d6cf029 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sat Feb 26 19:08:15 2022 +0100 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Sat Feb 26 19:08:15 2022 +0100
[SECLOGON] Create the remote process --- base/services/seclogon/rpcserver.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/base/services/seclogon/rpcserver.c b/base/services/seclogon/rpcserver.c index b927ca7e868..410b50fc6b9 100644 --- a/base/services/seclogon/rpcserver.c +++ b/base/services/seclogon/rpcserver.c @@ -59,6 +59,9 @@ SeclCreateProcessWithLogonW( _In_ SECL_REQUEST *pRequest, _Out_ SECL_RESPONSE *pResponse) { + STARTUPINFOW StartupInfo; + PROCESS_INFORMATION ProcessInfo; + PROFILEINFOW ProfileInfo; HANDLE hToken = NULL;
@@ -111,9 +114,41 @@ SeclCreateProcessWithLogonW( } }
- /* FIXME: Create Process */ + ZeroMemory(&StartupInfo, sizeof(StartupInfo)); + StartupInfo.cb = sizeof(StartupInfo); + + /* FIXME: Get startup info from the caller */ + + ZeroMemory(&ProcessInfo, sizeof(ProcessInfo)); + + /* Create Process */ + rc = CreateProcessAsUserW(hToken, + pRequest->ApplicationName, + pRequest->CommandLine, + NULL, // lpProcessAttributes, + NULL, // lpThreadAttributes, + FALSE, // bInheritHandles, + pRequest->dwCreationFlags, + NULL, // lpEnvironment, + pRequest->CurrentDirectory, + &StartupInfo, + &ProcessInfo); + if (rc == FALSE) + { + dwError = GetLastError(); + WARN("CreateProcessAsUser() failed with Error %lu\n", dwError); + goto done; + } + + /* FIXME: Pass process info to the caller */
done: + if (ProcessInfo.hThread) + CloseHandle(ProcessInfo.hThread); + + if (ProcessInfo.hProcess) + CloseHandle(ProcessInfo.hProcess); + if (ProfileInfo.hProfile != NULL) UnloadUserProfile(hToken, ProfileInfo.hProfile);