Hey Giannis.
How big qre the thunks ? A whole page for each of them looks like a lot of resources. What about a special heap ?
Keep it up!
Regards Jérôme
Le jeudi 6 février 2014, 13:07:37 gadamopoulos@svn.reactos.org a écrit :
Author: gadamopoulos Date: Thu Feb 6 13:07:37 2014 New Revision: 62011
URL: http://svn.reactos.org/svn/reactos?rev=62011&view=rev Log: [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
Modified: branches/shell-experiments/lib/atl/atlwin.h
Modified: branches/shell-experiments/lib/atl/atlwin.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/lib/atl/atlwi n.h?rev=62011&r1=62010&r2=62011&view=diff =========================================================================== === --- branches/shell-experiments/lib/atl/atlwin.h [iso-8859-1] (original) +++ branches/shell-experiments/lib/atl/atlwin.h [iso-8859-1] Thu Feb 6 13:07:37 2014 @@ -153,21 +153,32 @@ 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);};