38#ifndef UTILS_WINDOWS_H_DA080A19_C6F3_48E1_A570_63665ED95C1F
39#define UTILS_WINDOWS_H_DA080A19_C6F3_48E1_A570_63665ED95C1F
60#define HRESULT_GET_ERROR_COMMON(res, errptr) \
62 case S_OK: errptr = "Operation successful"; break; \
63 case S_FALSE: errptr = "Operation completed"; break; \
64 case E_NOTIMPL: errptr = "Not implemented"; break; \
65 case E_NOINTERFACE: errptr = "No such interface supported"; break; \
66 case E_POINTER: errptr = "Pointer that is not valid"; break; \
67 case E_ABORT: errptr = "Operation aborted"; break; \
68 case E_FAIL: errptr = "Unspecified failure"; break; \
69 case E_UNEXPECTED: errptr = "Unexpected failure"; break; \
70 case E_ACCESSDENIED: errptr = "General access denied error"; break; \
71 case E_HANDLE: errptr = "Handle that is not valid"; break; \
72 case E_OUTOFMEMORY: errptr = "Failed to allocate necessary memory"; break; \
73 case E_INVALIDARG: errptr = "One or more arguments are not valid"; break; \
85const char *hresult_to_str(HRESULT res);
86const char *get_win32_error(DWORD error);
87const char *win_wstr_to_str(
const wchar_t *wstr);
88bool win_has_ancestor_process(
const char *
name);
89unsigned long get_windows_build(
void);
90void print_stacktrace_win(
void);
bool com_initialize(bool *com_initialized, const char *err_prefix)
void com_uninitialize(bool *com_initialized)
@ BUILD_WINDOWS_11_OR_LATER