https://git.reactos.org/?p=reactos.git;a=commitdiff;h=50a1479c53e8e22f187a5…
commit 50a1479c53e8e22f187a512c185c19d07d6cf029
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sat Feb 26 19:08:15 2022 +0100
Commit: Eric Kohl <eric.kohl(a)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);