Browse Source

Rebase master

flysand7 1 year ago
parent
commit
56d55e4a86
2 changed files with 36 additions and 5 deletions
  1. 18 5
      core/os/os2/process.odin
  2. 18 0
      core/os/os2/process_windows.odin

+ 18 - 5
core/os/os2/process.odin

@@ -111,12 +111,25 @@ process_list :: proc(allocator: runtime.Allocator) -> ([]int, Error) {
 	return _process_list(allocator)
 }
 
-
+/*
+	Handle to a process.
+*/
 Process :: struct {
-	pid:          int,
-	handle:       uintptr,
-	is_done:      b32,
-	signal_mutex: sync.RW_Mutex,
+	handle: _Process_Handle,
+}
+
+/*
+	Obtain a process handle.
+*/
+process_open :: proc(pid: int) -> (Process, Error) {
+	return _process_open(pid)
+}
+
+/*
+	Close a process handle
+*/
+process_close :: proc(process: Process) -> (Error) {
+	return _process_close(process)
 }
 
 

+ 18 - 0
core/os/os2/process_windows.odin

@@ -4,6 +4,8 @@ package os2
 import "core:sys/windows"
 import "base:runtime"
 
+_Process_Handle :: windows.HANDLE
+
 _exit :: proc "contextless" (code: int) -> ! {
 	windows.ExitProcess(u32(code))
 }
@@ -60,3 +62,19 @@ _process_list :: proc(allocator: runtime.Allocator) -> ([]int, Error) {
 	}
 	return pid_list[:], nil
 }
+
+_process_open :: proc(pid: int) -> (Process, Error) {
+	handle := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, cast(u32) pid)
+	if handle == windows.INVALID_HANDLE_VALUE {
+		return {}, _get_platform_error()
+	}
+	return Process {
+		handle = handle,
+	}, nil
+}
+
+_process_close :: proc(process: Process) -> (Error) {
+	if !windows.CloseHandle(process.handle) {
+		return _get_platform_error()
+	}
+}