- /* Make sure the buffer is a valid string which within the given length */
- if ((NtInitialUserProcessBufferType != REG_SZ) ||
- ((NtInitialUserProcessBufferLength != -1) &&
- ((NtInitialUserProcessBufferLength < sizeof(WCHAR)) ||
- (NtInitialUserProcessBufferLength >
- sizeof(NtInitialUserProcessBuffer) - sizeof(WCHAR)))))
- {
- /* Invalid initial process string, bugcheck */
- KeBugCheckEx(SESSION2_INITIALIZATION_FAILED,
- (ULONG_PTR)STATUS_INVALID_PARAMETER,
- NtInitialUserProcessBufferType,
- NtInitialUserProcessBufferLength,
- sizeof(NtInitialUserProcessBuffer));
- }
-
- /* Cut out anything after a space */
- p = NtInitialUserProcessBuffer;
- while (*p && *p != L' ') p++;
-
- /* Set the image path length */
- ProcessParameters->ImagePathName.Length =
- (USHORT)((PCHAR)p - (PCHAR)NtInitialUserProcessBuffer);
-
- /* Copy the actual buffer */
- RtlCopyMemory(ProcessParameters->ImagePathName.Buffer,
- NtInitialUserProcessBuffer,
- ProcessParameters->ImagePathName.Length);
-
- /* Null-terminate it */
- ProcessParameters->
- ImagePathName.Buffer[ProcessParameters->ImagePathName.Length /
- sizeof(WCHAR)] = UNICODE_NULL;
-
- /* Make a buffer for the command line */
- p = (PWSTR)((PCHAR)ProcessParameters->ImagePathName.Buffer +
- ProcessParameters->ImagePathName.MaximumLength);
- ProcessParameters->CommandLine.Buffer = p;
- ProcessParameters->CommandLine.MaximumLength = MAX_PATH * sizeof(WCHAR);
-
- /* Add the image name to the command line */
- RtlAppendUnicodeToString(&ProcessParameters->CommandLine,
- NtInitialUserProcessBuffer);