.
This commit is contained in:
parent
c7291ead23
commit
ff748bd3ff
2 changed files with 386 additions and 68 deletions
|
|
@ -15,6 +15,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if COLLA_CMT_LIB
|
||||
#pragma comment(lib, "Advapi32")
|
||||
#endif
|
||||
|
||||
#ifndef PROCESSOR_ARCHITECTURE_ARM64
|
||||
#define PROCESSOR_ARCHITECTURE_ARM64 12
|
||||
#endif
|
||||
|
|
@ -352,6 +356,80 @@ oshandle_t os_win_conin(void) {
|
|||
return w32_data.hconin;
|
||||
}
|
||||
|
||||
oshandle_t os_win_regopen(arena_t scratch, strview_t name) {
|
||||
HKEY key = NULL;
|
||||
str16_t key_name = strv_to_str16(&scratch, name);
|
||||
LONG result = RegOpenKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
key_name.buf,
|
||||
0,
|
||||
KEY_READ,
|
||||
&key
|
||||
);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
err("failed to open registry key %v", name);
|
||||
return os_handle_zero();
|
||||
}
|
||||
return (oshandle_t){ .data = (uptr)key };
|
||||
}
|
||||
|
||||
void os_win_regclose(oshandle_t key) {
|
||||
RegCloseKey((HKEY)key.data);
|
||||
}
|
||||
|
||||
str_t os_win_regread_str(arena_t *arena, oshandle_t key, strview_t value) {
|
||||
u8 buf[KB(5)] = {0};
|
||||
DWORD bufsize = sizeof(buf);
|
||||
|
||||
arena_t scratch = *arena;
|
||||
str16_t value_str = strv_to_str16(&scratch, value);
|
||||
|
||||
DWORD type = 0;
|
||||
|
||||
LONG result = RegQueryValueExW(
|
||||
(HKEY)key.data,
|
||||
value_str.buf,
|
||||
NULL,
|
||||
&type,
|
||||
buf,
|
||||
&bufsize
|
||||
);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
err("failed to read registry key %v", value);
|
||||
return STR_EMPTY;
|
||||
}
|
||||
|
||||
return str_from_str16(arena, str16_init((char16_t*)buf, 0));
|
||||
}
|
||||
|
||||
i64 os_win_regread_int(arena_t scratch, oshandle_t key, strview_t value) {
|
||||
DWORD regvalue = 0;
|
||||
DWORD type = 0;
|
||||
DWORD bufsize = sizeof(regvalue);
|
||||
str16_t value_str = strv_to_str16(&scratch, value);
|
||||
LONG result = RegQueryValueExW(
|
||||
(HKEY)key.data,
|
||||
value_str.buf,
|
||||
NULL,
|
||||
&type,
|
||||
(u8*)®value,
|
||||
&bufsize
|
||||
);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
err("failed to read registry key %v", value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (i64)regvalue;
|
||||
}
|
||||
|
||||
str_t os_win_regkey_str(arena_t *arena, strview_t key, strview_t value) {
|
||||
oshandle_t hkey = os_win_regopen(*arena, key);
|
||||
str_t out = os_win_regread_str(arena, hkey, value);
|
||||
os_win_regclose(hkey);
|
||||
return out;
|
||||
}
|
||||
|
||||
// == FILE ======================================
|
||||
|
||||
#define OS_SMALL_SCRATCH() \
|
||||
|
|
@ -690,6 +768,7 @@ oshandle_t os_run_cmd_async(arena_t scratch, os_cmd_t *cmd, os_cmd_options_t *op
|
|||
HANDLE hstdout_write = NULL;
|
||||
HANDLE hstderr_write = NULL;
|
||||
HANDLE hstdin_read = NULL;
|
||||
bool quiet = options ? options->quiet : false;
|
||||
|
||||
SECURITY_ATTRIBUTES sa_attr = {
|
||||
.nLength = sizeof(SECURITY_ATTRIBUTES),
|
||||
|
|
@ -777,7 +856,7 @@ oshandle_t os_run_cmd_async(arena_t scratch, os_cmd_t *cmd, os_cmd_options_t *op
|
|||
options->env->data = NULL;
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
if (!success && !quiet) {
|
||||
err("couldn't create process (%v): %v", cmd_str, os_get_error_string(os_get_last_error()));
|
||||
return os_handle_zero();
|
||||
}
|
||||
|
|
@ -1357,3 +1436,4 @@ void sk_destroy_event(oshandle_t handle) {
|
|||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue