1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome_frame/event_hooker.h" 6 7 #include <crtdbg.h> 8 #include "chrome_frame/bho_loader.h" 9 10 EXTERN_C IMAGE_DOS_HEADER __ImageBase; 11 12 EventHooker::EventHooker() 13 : window_creation_hook_(NULL) {} 14 15 EventHooker::~EventHooker() { 16 StopHook(); 17 } 18 19 bool EventHooker::StartHook() { 20 if ((NULL != window_creation_hook_)) { 21 return false; 22 } 23 24 window_creation_hook_ = SetWinEventHook(EVENT_OBJECT_CREATE, 25 EVENT_OBJECT_CREATE, 26 reinterpret_cast<HMODULE>( 27 &__ImageBase), 28 WindowCreationHookProc, 29 0, 30 0, 31 WINEVENT_INCONTEXT); 32 if (NULL == window_creation_hook_) { 33 return false; 34 } 35 return true; 36 } 37 38 void EventHooker::StopHook() { 39 if (NULL != window_creation_hook_) { 40 UnhookWinEvent(window_creation_hook_); 41 window_creation_hook_ = NULL; 42 } 43 } 44 45 VOID CALLBACK EventHooker::WindowCreationHookProc(HWINEVENTHOOK hook, 46 DWORD event, 47 HWND window, 48 LONG object_id, 49 LONG child_id, 50 DWORD event_tid, 51 DWORD event_time) { 52 _ASSERTE((EVENT_OBJECT_CREATE == event) || 53 (EVENT_OBJECT_PARENTCHANGE == event)); 54 if (OBJID_WINDOW == object_id) { 55 BHOLoader::GetInstance()->OnHookEvent(event, window); 56 } 57 } 58 59