summaryrefslogtreecommitdiff
path: root/src/util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.cpp')
-rw-r--r--src/util.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp
new file mode 100644
index 0000000..576dcbd
--- /dev/null
+++ b/src/util.cpp
@@ -0,0 +1,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 );
+}