RtlpCopyParameterString(PWCHAR *Ptr,
PUNICODE_STRING Destination,
PUNICODE_STRING Source,
- ULONG Size)
+ USHORT Size)
{
Destination->Length = Source->Length;
Destination->MaximumLength = Size ? Size : Source->MaximumLength;
PUNICODE_STRING ShellInfo,
PUNICODE_STRING RuntimeData)
{
- NTSTATUS Status = STATUS_SUCCESS;
PRTL_USER_PROCESS_PARAMETERS Param = NULL;
- SIZE_T RegionSize = 0;
ULONG Length = 0;
PWCHAR Dest;
UNICODE_STRING EmptyString;
Length += ALIGN(RuntimeData->MaximumLength, sizeof(ULONG));
/* Calculate the required block size */
- RegionSize = ROUND_UP(Length, PAGE_SIZE);
-
- Status = ZwAllocateVirtualMemory(NtCurrentProcess(),
- (PVOID*)&Param,
- 0,
- &RegionSize,
- MEM_RESERVE | MEM_COMMIT,
- PAGE_READWRITE);
- if (!NT_SUCCESS(Status))
+ Param = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, Length);
+ if (!Param)
{
RtlReleasePebLock();
- return Status;
+ return STATUS_INSUFFICIENT_RESOURCES;
}
DPRINT ("Process parameters allocated\n");
- Param->MaximumLength = RegionSize;
+ Param->MaximumLength = Length;
Param->Length = Length;
Param->Flags = RTL_USER_PROCESS_PARAMETERS_NORMALIZED;
Param->Environment = Environment;
/* make sure the current directory has a trailing backslash */
if (Param->CurrentDirectory.DosPath.Length > 0)
{
- ULONG Length;
-
Length = Param->CurrentDirectory.DosPath.Length / sizeof(WCHAR);
if (Param->CurrentDirectory.DosPath.Buffer[Length-1] != L'\\')
{
/*
* @implemented
*/
-NTSTATUS NTAPI
-RtlDestroyProcessParameters(PRTL_USER_PROCESS_PARAMETERS ProcessParameters)
+NTSTATUS
+NTAPI
+RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters)
{
- SIZE_T RegionSize = 0;
-
- return ZwFreeVirtualMemory (NtCurrentProcess (),
- (PVOID)ProcessParameters,
- &RegionSize,
- MEM_RELEASE);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, ProcessParameters);
+ return STATUS_SUCCESS;
}
/*