summaryrefslogtreecommitdiff
path: root/src/util.cpp
blob: 576dcbd830b183959dde5b1441e449ecf8a6b742 (plain)
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 );
}