// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome_frame/event_hooker.h" #include <crtdbg.h> #include "chrome_frame/bho_loader.h" EXTERN_C IMAGE_DOS_HEADER __ImageBase; EventHooker::EventHooker() : window_creation_hook_(NULL) {} EventHooker::~EventHooker() { StopHook(); } bool EventHooker::StartHook() { if ((NULL != window_creation_hook_)) { return false; } window_creation_hook_ = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, reinterpret_cast<HMODULE>( &__ImageBase), WindowCreationHookProc, 0, 0, WINEVENT_INCONTEXT); if (NULL == window_creation_hook_) { return false; } return true; } void EventHooker::StopHook() { if (NULL != window_creation_hook_) { UnhookWinEvent(window_creation_hook_); window_creation_hook_ = NULL; } } VOID CALLBACK EventHooker::WindowCreationHookProc(HWINEVENTHOOK hook, DWORD event, HWND window, LONG object_id, LONG child_id, DWORD event_tid, DWORD event_time) { _ASSERTE((EVENT_OBJECT_CREATE == event) || (EVENT_OBJECT_PARENTCHANGE == event)); if (OBJID_WINDOW == object_id) { BHOLoader::GetInstance()->OnHookEvent(event, window); } }