Хорошо известно, что ATL подключает окно к своему wndproc с помощью thunking, который фактически заменяет hwnd на этот указатель на месте, и переходит к wndproc, так что вызов wndproc (hwnd, ...) на самом деле является wndproc (это , ...).
Ниже приведен код сборки, который создает thunk:
mov dword ptr [esp+0x4], pThis (esp+0x4 is hWnd)
Мой вопрос таков: поскольку этот thunk выполняется только один раз , как мы можем быть уверены, что [esp + 0x4] не будет перезаписан процессором для вызова другой процедуры, и в следующий раз wndproc (... ) называется, hwnd передается снова? Насколько я понимаю, [esp + 0x4] - это многоразовый регистр общего назначения для хранения первого параметра любой процедуры.
Что здесь не так? каким образом модификация hwnd гарантированно будет вечной?
Спасибо.