summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/superpmi-shim-simple/iexecutionengine.cpp
blob: 4e8cbb4359e690943a9df8d4284396230018a04b (plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

#include "standardpch.h"
#include "iexecutionengine.h"
#include "superpmi-shim-simple.h"

//***************************************************************************
// IUnknown methods
//***************************************************************************
HRESULT STDMETHODCALLTYPE interceptor_IEE::QueryInterface(REFIID id, void** pInterface)
{
    return original_IEE->QueryInterface(id, pInterface);
}
ULONG STDMETHODCALLTYPE interceptor_IEE::AddRef()
{
    return original_IEE->AddRef();
}
ULONG STDMETHODCALLTYPE interceptor_IEE::Release()
{
    return original_IEE->Release();
}

//***************************************************************************
// IExecutionEngine methods for TLS
//***************************************************************************
// Associate a callback for cleanup with a TLS slot
VOID STDMETHODCALLTYPE interceptor_IEE::TLS_AssociateCallback(DWORD slot, PTLS_CALLBACK_FUNCTION callback)
{
    original_IEE->TLS_AssociateCallback(slot, callback);
}
// Get the TLS block for fast Get/Set operations
LPVOID* STDMETHODCALLTYPE interceptor_IEE::TLS_GetDataBlock()
{
    return original_IEE->TLS_GetDataBlock();
}

// Get the value at a slot
LPVOID STDMETHODCALLTYPE interceptor_IEE::TLS_GetValue(DWORD slot)
{
    return original_IEE->TLS_GetValue(slot);
}

// Get the value at a slot, return FALSE if TLS info block doesn't exist
BOOL STDMETHODCALLTYPE interceptor_IEE::TLS_CheckValue(DWORD slot, LPVOID* pValue)
{
    return original_IEE->TLS_CheckValue(slot, pValue);
}
// Set the value at a slot
VOID STDMETHODCALLTYPE interceptor_IEE::TLS_SetValue(DWORD slot, LPVOID pData)
{
    original_IEE->TLS_SetValue(slot, pData);
}
// Free TLS memory block and make callback
VOID STDMETHODCALLTYPE interceptor_IEE::TLS_ThreadDetaching()
{
    original_IEE->TLS_ThreadDetaching();
}

//***************************************************************************
// IExecutionEngine methods for locking
//***************************************************************************
CRITSEC_COOKIE STDMETHODCALLTYPE interceptor_IEE::CreateLock(LPCSTR szTag, LPCSTR level, CrstFlags flags)
{
    return original_IEE->CreateLock(szTag, level, flags);
}
void STDMETHODCALLTYPE interceptor_IEE::DestroyLock(CRITSEC_COOKIE lock)
{
    original_IEE->DestroyLock(lock);
}
void STDMETHODCALLTYPE interceptor_IEE::AcquireLock(CRITSEC_COOKIE lock)
{
    original_IEE->AcquireLock(lock);
}
void STDMETHODCALLTYPE interceptor_IEE::ReleaseLock(CRITSEC_COOKIE lock)
{
    original_IEE->ReleaseLock(lock);
}

EVENT_COOKIE STDMETHODCALLTYPE interceptor_IEE::CreateAutoEvent(BOOL bInitialState)
{
    return original_IEE->CreateAutoEvent(bInitialState);
}
EVENT_COOKIE STDMETHODCALLTYPE interceptor_IEE::CreateManualEvent(BOOL bInitialState)
{
    return original_IEE->CreateManualEvent(bInitialState);
}
void STDMETHODCALLTYPE interceptor_IEE::CloseEvent(EVENT_COOKIE event)
{
    original_IEE->CloseEvent(event);
}
BOOL STDMETHODCALLTYPE interceptor_IEE::ClrSetEvent(EVENT_COOKIE event)
{
    return original_IEE->ClrSetEvent(event);
}
BOOL STDMETHODCALLTYPE interceptor_IEE::ClrResetEvent(EVENT_COOKIE event)
{
    return original_IEE->ClrResetEvent(event);
}
DWORD STDMETHODCALLTYPE interceptor_IEE::WaitForEvent(EVENT_COOKIE event, DWORD dwMilliseconds, BOOL bAlertable)
{
    return original_IEE->WaitForEvent(event, dwMilliseconds, bAlertable);
}
DWORD STDMETHODCALLTYPE interceptor_IEE::WaitForSingleObject(HANDLE handle, DWORD dwMilliseconds)
{
    return original_IEE->WaitForSingleObject(handle, dwMilliseconds);
}
SEMAPHORE_COOKIE STDMETHODCALLTYPE interceptor_IEE::ClrCreateSemaphore(DWORD dwInitial, DWORD dwMax)
{
    return original_IEE->ClrCreateSemaphore(dwInitial, dwMax);
}
void STDMETHODCALLTYPE interceptor_IEE::ClrCloseSemaphore(SEMAPHORE_COOKIE semaphore)
{
    original_IEE->ClrCloseSemaphore(semaphore);
}
DWORD STDMETHODCALLTYPE interceptor_IEE::ClrWaitForSemaphore(SEMAPHORE_COOKIE semaphore,
                                                             DWORD            dwMilliseconds,
                                                             BOOL             bAlertable)
{
    return original_IEE->ClrWaitForSemaphore(semaphore, dwMilliseconds, bAlertable);
}
BOOL STDMETHODCALLTYPE interceptor_IEE::ClrReleaseSemaphore(SEMAPHORE_COOKIE semaphore,
                                                            LONG             lReleaseCount,
                                                            LONG*            lpPreviousCount)
{
    return original_IEE->ClrReleaseSemaphore(semaphore, lReleaseCount, lpPreviousCount);
}
MUTEX_COOKIE STDMETHODCALLTYPE interceptor_IEE::ClrCreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,
                                                               BOOL                  bInitialOwner,
                                                               LPCTSTR               lpName)
{
    return original_IEE->ClrCreateMutex(lpMutexAttributes, bInitialOwner, lpName);
}
void STDMETHODCALLTYPE interceptor_IEE::ClrCloseMutex(MUTEX_COOKIE mutex)
{
    original_IEE->ClrCloseMutex(mutex);
}
BOOL STDMETHODCALLTYPE interceptor_IEE::ClrReleaseMutex(MUTEX_COOKIE mutex)
{
    return original_IEE->ClrReleaseMutex(mutex);
}
DWORD STDMETHODCALLTYPE interceptor_IEE::ClrWaitForMutex(MUTEX_COOKIE mutex, DWORD dwMilliseconds, BOOL bAlertable)
{
    return original_IEE->ClrWaitForMutex(mutex, dwMilliseconds, bAlertable);
}

DWORD STDMETHODCALLTYPE interceptor_IEE::ClrSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
{
    return original_IEE->ClrSleepEx(dwMilliseconds, bAlertable);
}
BOOL STDMETHODCALLTYPE interceptor_IEE::ClrAllocationDisallowed()
{
    return original_IEE->ClrAllocationDisallowed();
}
void STDMETHODCALLTYPE interceptor_IEE::GetLastThrownObjectExceptionFromThread(void** ppvException)
{
    original_IEE->GetLastThrownObjectExceptionFromThread(ppvException);
}