2.内核回调机制
有誰調用了窗口過程?
NtUserCreateWindowEx()這樣設計是因為,如果你程序需要在窗口創建就做一些事情但窗口沒創建出來它接收不了消息,它剛好就能幫你解決,WM_CREATE就是它在你創建窗口出來之前就會被調用
KeUserModeCallback的執行流程
從0環調用3環函數的幾種方式:
APC、異常、內核回調
凡是有窗口的程序就有可能0環直接調用3環的程序。回調機制中0環調用3環的的代碼是函數:KeUserModeCallback
回到3環的落腳點:
APC:ntdll!KiUserApcDispatcher
異常:ntdll!KiUserExceptionDispatcher
內核回調在3環的落腳點:
KeUserModeCallback()
KernelCallbackTable 里面包含了一堆函數的地址,這堆函數由user32.dll提供
fs[0]->TEB-> PEB(+0x30)->KernelCallbackTable(0x2c)
這里面的函數再負責調用我們的窗口過程函數,窗口過程函數已經被壓入3環的堆棧中。
總結
- 上一篇: 1.消息机制
- 下一篇: Window核心编程