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;
/*
* @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;
}
/*