From 316afd47bf52a2f6cc147cc1e5d1c21f1d7140c1 Mon Sep 17 00:00:00 2001 From: Pavel Yosifovich Date: Wed, 15 Mar 2023 13:59:59 -0400 Subject: [PATCH] cleanup process parameters --- nativerun/nativerun.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/nativerun/nativerun.cpp b/nativerun/nativerun.cpp index 5d937d1..5b9e0a3 100644 --- a/nativerun/nativerun.cpp +++ b/nativerun/nativerun.cpp @@ -17,16 +17,6 @@ typedef struct _RTL_USER_PROCESS_INFORMATION { } RTL_USER_PROCESS_INFORMATION, * PRTL_USER_PROCESS_INFORMATION; extern"C" { - NTSTATUS NTAPI NtCreateProcess( - _Out_ PHANDLE ProcessHandle, - _In_ ACCESS_MASK DesiredAccess, - _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, - _In_ HANDLE ParentProcess, - _In_ BOOLEAN InheritObjectTable, - _In_opt_ HANDLE SectionHandle, - _In_opt_ HANDLE DebugPort, - _In_opt_ HANDLE ExceptionPort - ); NTSTATUS NTAPI RtlCreateUserProcess( __in PUNICODE_STRING NtImagePathName, __in ULONG Attributes, @@ -37,11 +27,10 @@ extern"C" { __in BOOLEAN InheritHandles, __in_opt HANDLE DebugPort, __in_opt HANDLE TokenHandle, - __out PRTL_USER_PROCESS_INFORMATION ProcessInformation - ); + __out PRTL_USER_PROCESS_INFORMATION ProcessInformation); NTSTATUS NTAPI RtlCreateProcessParameters( - __deref_out PVOID* pProcessParameters, + __deref_out PRTL_USER_PROCESS_PARAMETERS* pProcessParameters, __in PUNICODE_STRING ImagePathName, __in_opt PUNICODE_STRING DllPath, __in_opt PUNICODE_STRING CurrentDirectory, @@ -50,8 +39,11 @@ extern"C" { __in_opt PUNICODE_STRING WindowTitle, __in_opt PUNICODE_STRING DesktopInfo, __in_opt PUNICODE_STRING ShellInfo, - __in_opt PUNICODE_STRING RuntimeData - ); + __in_opt PUNICODE_STRING RuntimeData); + + NTSTATUS NTAPI RtlDestroyProcessParameters( + _In_ _Post_invalid_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters); + } int Error(NTSTATUS status) { @@ -69,7 +61,7 @@ int wmain(int argc, const wchar_t* argv[]) { RtlInitUnicodeString(&name, argv[1]); RTL_USER_PROCESS_INFORMATION info; - PVOID params; + PRTL_USER_PROCESS_PARAMETERS params; auto status = RtlCreateProcessParameters(¶ms, &name, nullptr, nullptr, &name, nullptr, nullptr, @@ -86,6 +78,7 @@ int wmain(int argc, const wchar_t* argv[]) { printf("Process 0x%p created!\n", info.ClientId.UniqueProcess); ResumeThread(info.Thread); + RtlDestroyProcessParameters(params); return 0; }