Alexandre Julliard : ntdll: Store a copy of the environment in RtlCreateProcessParametersEx().
Alexandre Julliard
julliard at winehq.org
Tue Oct 16 15:53:07 CDT 2018
Module: wine
Branch: master
Commit: fce198cc5e797679f904c0ec58ed715fd0e8c481
URL: https://source.winehq.org/git/wine.git/?a=commit;h=fce198cc5e797679f904c0ec58ed715fd0e8c481
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Oct 16 15:15:27 2018 +0200
ntdll: Store a copy of the environment in RtlCreateProcessParametersEx().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/env.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c
index 9288713..fdd5d4f 100644
--- a/dlls/ntdll/env.c
+++ b/dlls/ntdll/env.c
@@ -453,8 +453,9 @@ NTSTATUS WINAPI RtlCreateProcessParametersEx( RTL_USER_PROCESS_PARAMETERS **resu
static const UNICODE_STRING null_str = { 0, 0, NULL };
const RTL_USER_PROCESS_PARAMETERS *cur_params;
- SIZE_T size, total_size;
+ SIZE_T size, env_size, total_size;
void *ptr;
+ const WCHAR *env;
NTSTATUS status;
RtlAcquirePebLock();
@@ -474,6 +475,11 @@ NTSTATUS WINAPI RtlCreateProcessParametersEx( RTL_USER_PROCESS_PARAMETERS **resu
if (!ShellInfo) ShellInfo = &empty_str;
if (!RuntimeInfo) RuntimeInfo = &null_str;
+ env = Environment;
+ while (*env) env += strlenW(env) + 1;
+ env++;
+ env_size = (env - Environment) * sizeof(WCHAR);
+
size = (sizeof(RTL_USER_PROCESS_PARAMETERS)
+ ImagePathName->MaximumLength
+ DllPath->MaximumLength
@@ -484,7 +490,7 @@ NTSTATUS WINAPI RtlCreateProcessParametersEx( RTL_USER_PROCESS_PARAMETERS **resu
+ ShellInfo->MaximumLength
+ RuntimeInfo->MaximumLength);
- total_size = size;
+ total_size = size + env_size;
ptr = NULL;
if ((status = NtAllocateVirtualMemory( NtCurrentProcess(), &ptr, 0, &total_size,
MEM_COMMIT, PAGE_READWRITE )) == STATUS_SUCCESS)
@@ -494,7 +500,6 @@ NTSTATUS WINAPI RtlCreateProcessParametersEx( RTL_USER_PROCESS_PARAMETERS **resu
params->Size = size;
params->Flags = PROCESS_PARAMS_FLAG_NORMALIZED;
params->ConsoleFlags = cur_params->ConsoleFlags;
- params->Environment = Environment;
/* all other fields are zero */
ptr = params + 1;
@@ -506,6 +511,8 @@ NTSTATUS WINAPI RtlCreateProcessParametersEx( RTL_USER_PROCESS_PARAMETERS **resu
append_unicode_string( &ptr, Desktop, ¶ms->Desktop );
append_unicode_string( &ptr, ShellInfo, ¶ms->ShellInfo );
append_unicode_string( &ptr, RuntimeInfo, ¶ms->RuntimeInfo );
+ params->Environment = ptr;
+ memcpy( ptr, Environment, (env - Environment) * sizeof(WCHAR) );
*result = params;
if (!(flags & PROCESS_PARAMS_FLAG_NORMALIZED)) RtlDeNormalizeProcessParams( params );
}
More information about the wine-cvs
mailing list