Changeset 45703 in vbox for trunk/src/VBox/Additions/WINNT/VBoxHook
- Timestamp:
- Apr 24, 2013 2:31:56 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85249
- Location:
- trunk/src/VBox/Additions/WINNT/VBoxHook
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/VBoxHook/VBoxHook.cpp
r44528 r45703 19 19 20 20 #pragma data_seg("SHARED") 21 static HWINEVENTHOOK hEventHook[2] = {0}; 21 static HWINEVENTHOOK hWinEventHook[2] = {0}; 22 static HWINEVENTHOOK hDesktopEventHook = NULL; 22 23 #pragma data_seg() 23 24 #pragma comment(linker, "/section:SHARED,RWS") 24 25 25 static HANDLE hNotifyEvent = 0; 26 static HANDLE hWinNotifyEvent = 0; 27 static HANDLE hDesktopNotifyEvent = 0; 26 28 27 29 #ifdef DEBUG … … 33 35 34 36 35 void CALLBACK VBoxHandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,37 static void CALLBACK VBoxHandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd, 36 38 LONG idObject, LONG idChild, 37 39 DWORD dwEventThread, DWORD dwmsEventTime) … … 76 78 } 77 79 #endif 78 if (!h NotifyEvent)80 if (!hWinNotifyEvent) 79 81 { 80 h NotifyEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, VBOXHOOK_GLOBAL_EVENT_NAME);81 dprintf(("OpenEvent returned %x (last err=%x)\n", h NotifyEvent, GetLastError()));82 hWinNotifyEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, VBOXHOOK_GLOBAL_WT_EVENT_NAME); 83 dprintf(("OpenEvent returned %x (last err=%x)\n", hWinNotifyEvent, GetLastError())); 82 84 } 83 BOOL ret = SetEvent(h NotifyEvent);84 dprintf(("SetEvent %x returned %d (last error %x)\n", h NotifyEvent, ret, GetLastError()));85 BOOL ret = SetEvent(hWinNotifyEvent); 86 dprintf(("SetEvent %x returned %d (last error %x)\n", hWinNotifyEvent, ret, GetLastError())); 85 87 break; 86 88 } 87 89 } 88 90 91 static void CALLBACK VBoxHandleDesktopEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd, 92 LONG idObject, LONG idChild, 93 DWORD dwEventThread, DWORD dwmsEventTime) 94 { 95 if (!hDesktopNotifyEvent) 96 { 97 hDesktopNotifyEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, VBOXHOOK_GLOBAL_DT_EVENT_NAME); 98 dprintf(("OpenEvent returned %x (last err=%x)\n", hDesktopNotifyEvent, GetLastError())); 99 } 100 BOOL ret = SetEvent(hDesktopNotifyEvent); 101 dprintf(("SetEvent %x returned %d (last error %x)\n", hDesktopNotifyEvent, ret, GetLastError())); 102 } 103 104 BOOL VBoxHookInstallActiveDesktopTracker(HMODULE hDll) 105 { 106 if (hDesktopEventHook) 107 return TRUE; 108 109 CoInitialize(NULL); 110 hDesktopEventHook = SetWinEventHook(EVENT_SYSTEM_DESKTOPSWITCH, EVENT_SYSTEM_DESKTOPSWITCH, 111 hDll, 112 VBoxHandleDesktopEvent, 113 0, 0, 114 0); 115 116 return !!hDesktopEventHook; 117 118 } 119 120 BOOL VBoxHookRemoveActiveDesktopTracker() 121 { 122 if (hDesktopEventHook) 123 { 124 UnhookWinEvent(hDesktopEventHook); 125 CoUninitialize(); 126 } 127 hDesktopEventHook = 0; 128 return TRUE; 129 } 89 130 90 131 /* Install the global message hook */ 91 BOOL VBox InstallHook(HMODULE hDll)92 { 93 if (h EventHook[0] || hEventHook[1])132 BOOL VBoxHookInstallWindowTracker(HMODULE hDll) 133 { 134 if (hWinEventHook[0] || hWinEventHook[1]) 94 135 return TRUE; 95 136 96 137 CoInitialize(NULL); 97 h EventHook[0] = SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE,138 hWinEventHook[0] = SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE, 98 139 hDll, 99 140 VBoxHandleWinEvent, … … 101 142 WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS); 102 143 103 h EventHook[1] = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_HIDE,144 hWinEventHook[1] = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_HIDE, 104 145 hDll, 105 146 VBoxHandleWinEvent, 106 147 0, 0, 107 148 WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS); 108 return !!h EventHook[0];149 return !!hWinEventHook[0]; 109 150 } 110 151 111 152 /* Remove the global message hook */ 112 BOOL VBox RemoveHook()113 { 114 if (h EventHook[0] && hEventHook[1])115 { 116 UnhookWinEvent(h EventHook[0]);117 UnhookWinEvent(h EventHook[1]);153 BOOL VBoxHookRemoveWindowTracker() 154 { 155 if (hWinEventHook[0] && hWinEventHook[1]) 156 { 157 UnhookWinEvent(hWinEventHook[0]); 158 UnhookWinEvent(hWinEventHook[1]); 118 159 CoUninitialize(); 119 160 } 120 h EventHook[0] = hEventHook[1] = 0;121 return true;161 hWinEventHook[0] = hWinEventHook[1] = 0; 162 return TRUE; 122 163 } 123 164 -
trunk/src/VBox/Additions/WINNT/VBoxHook/VBoxHook.def
r44528 r45703 19 19 20 20 EXPORTS 21 VBoxInstallHook 22 VBoxRemoveHook 21 VBoxHookInstallActiveDesktopTracker 22 VBoxHookRemoveActiveDesktopTracker 23 VBoxHookInstallWindowTracker 24 VBoxHookRemoveWindowTracker -
trunk/src/VBox/Additions/WINNT/VBoxHook/testcase/tstHook.cpp
r44528 r45703 22 22 printf("Enabling global hook\n"); 23 23 24 HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, VBOXHOOK_GLOBAL_ EVENT_NAME);24 HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, VBOXHOOK_GLOBAL_WT_EVENT_NAME); 25 25 26 VBox InstallHook(GetModuleHandle("VBoxHook.dll"));26 VBoxHookInstallWindowTracker(GetModuleHandle("VBoxHook.dll")); 27 27 getchar(); 28 28 29 29 printf("Disabling global hook\n"); 30 VBox RemoveHook();30 VBoxHookRemoveWindowTracker(); 31 31 return 0; 32 32 }
Note:
See TracChangeset
for help on using the changeset viewer.