mirror of
https://gitea.tendokyu.moe/TeamTofuShop/capnhook.git
synced 2026-09-27 09:27:54 +03:00
hook/hr.c: Add HRESULT helpers
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "hook/hr.h"
|
||||
|
||||
void hr_propagate_win32_(HRESULT hr)
|
||||
{
|
||||
uint32_t result;
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
result = ERROR_SUCCESS;
|
||||
} else if (HRESULT_FACILITY(hr) == FACILITY_WIN32) {
|
||||
result = HRESULT_CODE(hr);
|
||||
} else {
|
||||
switch (hr) {
|
||||
case E_ABORT: result = ERROR_OPERATION_ABORTED; break;
|
||||
case E_ACCESSDENIED: result = ERROR_ACCESS_DENIED; break;
|
||||
case E_FAIL: result = ERROR_GEN_FAILURE; break;
|
||||
case E_HANDLE: result = ERROR_INVALID_HANDLE; break;
|
||||
case E_INVALIDARG: result = ERROR_INVALID_PARAMETER; break;
|
||||
case E_NOINTERFACE: result = ERROR_INVALID_FUNCTION; break;
|
||||
case E_NOTIMPL: result = ERROR_NOT_SUPPORTED; break;
|
||||
case E_OUTOFMEMORY: result = ERROR_OUTOFMEMORY; break;
|
||||
case E_POINTER: result = ERROR_INVALID_ADDRESS; break;
|
||||
case E_UNEXPECTED: result = ERROR_INTERNAL_ERROR; break;
|
||||
default: result = ERROR_INTERNAL_ERROR; break;
|
||||
}
|
||||
}
|
||||
|
||||
SetLastError(result);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define hr_propagate_win32(hr, r) (hr_propagate_win32_(hr), r)
|
||||
|
||||
void hr_propagate_win32_(HRESULT hr);
|
||||
@@ -3,6 +3,8 @@ hook_lib = static_library(
|
||||
include_directories : inc,
|
||||
c_pch : '../precompiled.h',
|
||||
sources : [
|
||||
'hr.c',
|
||||
'hr.h',
|
||||
'pe.c',
|
||||
'pe.h',
|
||||
'peb.c',
|
||||
|
||||
Reference in New Issue
Block a user