(process_handle: *mut HANDLE, thread_handle: *mut HANDLE, process_access: u32, thread_access: u32, object_attributes: *mut OBJECT_ATTRIBUTES,
thread_object_attr: *mut OBJECT_ATTRIBUTES, process_fl
| 796 | } |
| 797 | |
| 798 | pub fn nt_create_user_process(process_handle: *mut HANDLE, thread_handle: *mut HANDLE, process_access: u32, thread_access: u32, object_attributes: *mut OBJECT_ATTRIBUTES, |
| 799 | thread_object_attr: *mut OBJECT_ATTRIBUTES, process_flags: u32, thread_flags: u32, parameters: PVOID, create_info: *mut PS_CREATE_INFO, attr_list: *mut PS_ATTRIBUTE_LIST) -> i32 { |
| 800 | |
| 801 | unsafe |
| 802 | { |
| 803 | let ret; |
| 804 | let func_ptr: data::NtCreateUserProcess; |
| 805 | let ntdll = get_module_base_address(&lc!("ntdll.dll")); |
| 806 | dynamic_invoke!(ntdll,&lc!("NtCreateUserProcess"),func_ptr,ret,process_handle,thread_handle,process_access,thread_access,object_attributes,thread_object_attr, |
| 807 | process_flags,thread_flags,parameters,create_info,attr_list); |
| 808 | |
| 809 | match ret { |
| 810 | Some(x) => return x, |
| 811 | None => return -1, |
| 812 | } |
| 813 | } |
| 814 | } |
| 815 | |
| 816 | /// Dynamically calls an exported function from the specified module. |
| 817 | /// |
no test coverage detected