Skip to content
Suzu
1 min read

【Windows Internal】CallBack Function

關於 CallBack Function 的細節跟原理

View the complete series →
On this page

【Windows Internal】CallBack Function

一句話來看就是 留電話號碼給系統,時機到了系統回撥給你 的機制

這個函式主要是把函式 Pointer 交給 Windows,

約定好事件發生之後回頭呼叫你的 code,

因為保證會Callback,前一篇的 Hook 與 DLL 注入就是用這樣的方式把 code 送進別的 Process。

跟一般呼叫的差別

一般呼叫是我們主動叫 API 做事, CallBack 是反過來,

把 Function Pointer 傳給 API,約定事件發生時用 Calling Convention 呼叫他

Windows 裡有很多例子:

  • EnumWindows 的列舉 CallBack
  • SetWindowsHookEx 的 Hook Procedure
  • DllMain 也是一種 系統約定時機呼叫 的進入點
  • Malware 也會把 CallBack 當作執行的載具

CallBack 在哪個 Process、什麼權限下醒來取決於 誰觸發他

實作例子

這邊放一個比較經典的例子:EnumWindows 列舉所有視窗,每找到一個系統就 CallBack 一次

BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam) {
    wchar_t title[256];
    GetWindowTextW(hwnd, title, 256);
    wprintf(L"%p  %s\n", hwnd, title);   // 系統每列舉一個視窗就打給你一次
    return TRUE;
}
int main() { EnumWindows(EnumProc, 0); }

預期得到的輸出就會長這樣:

000102FA  Obsidian
000205BC  Program Manager

Share this page