-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSyscallWrapper.h
More file actions
30 lines (24 loc) · 1.1 KB
/
SyscallWrapper.h
File metadata and controls
30 lines (24 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once
#include <type_traits>
#include <functional>
#include <Windows.h>
#include "SyscallFailure.h"
#include "Defs.h"
namespace libreg
{
template <typename Routine, typename ...Args>
typename std::invoke_result_t<Routine, Args...> Syscall(Routine routine, Args... args);
template <typename Routine, typename ...Args>
typename std::invoke_result_t<Routine, Args...>
SyscallWithError(Routine routine, typename std::invoke_result_t<Routine, Args...> error_value, Args... args);
template <typename Routine, typename ...Args>
typename std::invoke_result_t<Routine, Args...>
SyscallWithExpectedReturn(Routine routine, typename std::invoke_result_t<Routine, Args...> expected_value, Args... args);
template <typename Routine, typename ...Args>
typename std::invoke_result_t<Routine, Args...>
SyscallWithExpectedReturn(Routine routine,
std::function<bool(typename std::invoke_result_t<Routine, Args...>)> pred, Args... args);
template <typename T, typename... Args>
void ComCall(const char* exp, HRESULT(T::*routine)(Args...), T* self, Args... args);
}
#include "SyscallWrapper.hxx"