VBoxHook.cpp revision bd22ae3b86e9b0ed466109e988d302674ecf4aee
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync * VBoxHook -- Global windows hook dll
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2010 Oracle Corporation
c98fb3e16fcd571a790eab772c0c66173d225205vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c98fb3e16fcd571a790eab772c0c66173d225205vboxsync * available from http://www.virtualbox.org. This file is free software;
c98fb3e16fcd571a790eab772c0c66173d225205vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync#define dprintf(a) do {} while (0)
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync#endif /* DEBUG */
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsyncstatic void CALLBACK VBoxHandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync dprintf(("VBoxHandleWinEvent EVENT_OBJECT_LOCATIONCHANGE for window %x\n", hwnd));
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync dprintf(("VBoxHandleWinEvent EVENT_OBJECT_CREATE for window %x\n", hwnd));
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync dprintf(("VBoxHandleWinEvent EVENT_OBJECT_HIDE for window %x\n", hwnd));
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync dprintf(("VBoxHandleWinEvent EVENT_OBJECT_SHOW for window %x\n", hwnd));
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync dprintf(("VBoxHandleWinEvent EVENT_OBJECT_DESTROY for window %x\n", hwnd));
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync hWinNotifyEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, VBOXHOOK_GLOBAL_WT_EVENT_NAME);
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync dprintf(("OpenEvent returned %x (last err=%x)\n", hWinNotifyEvent, GetLastError()));
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync dprintf(("SetEvent %x returned %d (last error %x)\n", hWinNotifyEvent, ret, GetLastError()));
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsyncstatic void CALLBACK VBoxHandleDesktopEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync hDesktopNotifyEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, VBOXHOOK_GLOBAL_DT_EVENT_NAME);
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync dprintf(("OpenEvent returned %x (last err=%x)\n", hDesktopNotifyEvent, GetLastError()));
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync dprintf(("SetEvent %x returned %d (last error %x)\n", hDesktopNotifyEvent, ret, GetLastError()));
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsyncBOOL VBoxHookInstallActiveDesktopTracker(HMODULE hDll)
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync hDesktopEventHook = SetWinEventHook(EVENT_SYSTEM_DESKTOPSWITCH, EVENT_SYSTEM_DESKTOPSWITCH,
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync/* Install the global message hook */
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync hWinEventHook[0] = SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE,
bd22ae3b86e9b0ed466109e988d302674ecf4aeevboxsync hWinEventHook[1] = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_HIDE,
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync/* Remove the global message hook */
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsyncVBGLR3DECL(int) VbglR3GRPerform(VMMDevRequestHeader *pReq)
ba2e65ca2c6ee70366bca6b355a22b44899490e7vboxsync DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(pReq->size), pReq, pReq->size,
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync VMMDevReqLogString *pReq = (VMMDevReqLogString *)LogBuffer;
4604ab7d38c2bd2dfc255aa1facffdf81c1c9153vboxsync /* open VBox guest driver */