mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 08:54:40 +00:00
[atl]
- Fix atl thunks to be allocated in executable memory and not from the stack in order to run libraries that use atl (such as browseui) in windows with DEP enabled svn path=/branches/shell-experiments/; revision=62011
This commit is contained in:
parent
1724ea64fb
commit
f0aee80fcb
|
@ -153,21 +153,32 @@ struct thunkCode
|
|||
class CWndProcThunk
|
||||
{
|
||||
public:
|
||||
thunkCode m_thunk;
|
||||
thunkCode *m_pthunk;
|
||||
_AtlCreateWndData cd;
|
||||
public:
|
||||
|
||||
CWndProcThunk()
|
||||
{
|
||||
m_pthunk = (thunkCode*)VirtualAlloc(NULL, sizeof(thunkCode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
}
|
||||
|
||||
~CWndProcThunk()
|
||||
{
|
||||
VirtualFree(m_pthunk, sizeof(thunkCode), MEM_RELEASE);
|
||||
}
|
||||
|
||||
BOOL Init(WNDPROC proc, void *pThis)
|
||||
{
|
||||
m_thunk.m_mov = 0x042444C7;
|
||||
m_thunk.m_this = PtrToUlong(pThis);
|
||||
m_thunk.m_jmp = 0xe9;
|
||||
m_thunk.m_relproc = DWORD(reinterpret_cast<char *>(proc) - (reinterpret_cast<char *>(this) + sizeof(thunkCode)));
|
||||
m_pthunk->m_mov = 0x042444C7;
|
||||
m_pthunk->m_this = PtrToUlong(pThis);
|
||||
m_pthunk->m_jmp = 0xe9;
|
||||
m_pthunk->m_relproc = DWORD(reinterpret_cast<char *>(proc) - (reinterpret_cast<char *>(m_pthunk) + sizeof(thunkCode)));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
WNDPROC GetWNDPROC()
|
||||
{
|
||||
return reinterpret_cast<WNDPROC>(&m_thunk);
|
||||
return reinterpret_cast<WNDPROC>(m_pthunk);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue