1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
//|_ _ _. _ ._ |_ _. _ |
//| | (/_ (_| \/ (/_ | | | | (_| (_ |<
#include "util.h"
#include "syscall.h"
ULONG u_thread_create( LPTHREAD_START_ROUTINE routine, void* param ) {
REG64 thread;
ULONG ret_id;
nt_create_thread64( &thread, 0x1fffff, 0, GetCurrentProcess(), routine, param, 0 );
ret_id = GetThreadId( (HANDLE)thread.u32[0] );
nt_close64( thread );
return ret_id;
}
ULONG u_thread_create( HANDLE proc, LPTHREAD_START_ROUTINE routine, void* param ) {
REG64 thread;
ULONG ret_id;
nt_create_thread64( &thread, 0x1fffff, 0, proc, routine, param, 0 );
ret_id = GetThreadId( (HANDLE)thread.u32[0] );
nt_close64( thread );
return ret_id;
}
void u_sleep( U64 ns ) {
static bool resolution_set = false;
if( !resolution_set ) {
ULONG timer_resolution;
nt_set_timer_resolution64( 1, true, &timer_resolution );
resolution_set = true;
}
LARGE_INTEGER interval;
interval.QuadPart = -1 * ns;
nt_delay_execution64( false, &interval );
}
|