VirtualBox

Changeset 46182 in vbox for trunk/src


Ignore:
Timestamp:
May 21, 2013 12:04:48 AM (12 years ago)
Author:
vboxsync
Message:

VBoxHook.cpp: Fixed warning in WriteLog. Some other cleanups in this and related code.

Location:
trunk/src/VBox/Additions/WINNT
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxHook/VBoxHook.cpp

    • Property svn:keywords changed from Id Revision to Author Date Id Revision
    r45703 r46182  
     1/* $Id$ */
    12/** @file
    2  *
    33 * VBoxHook -- Global windows hook dll
    4  *
     4 */
     5
     6/*
    57 * Copyright (C) 2006-2010 Oracle Corporation
    68 *
     
    1315 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1416 */
     17
    1518#include <Windows.h>
    1619#include <VBoxHook.h>
     
    2831
    2932#ifdef DEBUG
    30 void WriteLog(char *String, ...);
    31 #define dprintf(a) do { WriteLog a; } while (0)
     33static void WriteLog(const char *pszFormat, ...);
     34# define dprintf(a) do { WriteLog a; } while (0)
    3235#else
    33 #define dprintf(a) do {} while (0)
    34 #endif /* DEBUG */
     36# define dprintf(a) do {} while (0)
     37#endif /* !DEBUG */
    3538
    3639
    3740static void CALLBACK VBoxHandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
    38                                  LONG idObject, LONG idChild,
    39                                  DWORD dwEventThread, DWORD dwmsEventTime)
     41                                        LONG idObject, LONG idChild,
     42                                        DWORD dwEventThread, DWORD dwmsEventTime)
    4043{
    4144    DWORD dwStyle;
     
    9093
    9194static void CALLBACK VBoxHandleDesktopEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
    92                                  LONG idObject, LONG idChild,
    93                                  DWORD dwEventThread, DWORD dwmsEventTime)
     95                                            LONG idObject, LONG idChild,
     96                                            DWORD dwEventThread, DWORD dwmsEventTime)
    9497{
    9598    if (!hDesktopNotifyEvent)
     
    109112    CoInitialize(NULL);
    110113    hDesktopEventHook = SetWinEventHook(EVENT_SYSTEM_DESKTOPSWITCH, EVENT_SYSTEM_DESKTOPSWITCH,
    111                                     hDll,
    112                                     VBoxHandleDesktopEvent,
    113                                     0, 0,
    114                                     0);
     114                                        hDll,
     115                                        VBoxHandleDesktopEvent,
     116                                        0, 0,
     117                                        0);
    115118
    116119    return !!hDesktopEventHook;
     
    129132}
    130133
    131 /* Install the global message hook */
     134/** Install the global message hook */
    132135BOOL VBoxHookInstallWindowTracker(HMODULE hDll)
    133136{
     
    137140    CoInitialize(NULL);
    138141    hWinEventHook[0] = SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE,
    139                                     hDll,
    140                                     VBoxHandleWinEvent,
    141                                     0, 0,
    142                                     WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS);
     142                                       hDll,
     143                                       VBoxHandleWinEvent,
     144                                       0, 0,
     145                                       WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS);
    143146
    144147    hWinEventHook[1] = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_HIDE,
    145                                     hDll,
    146                                     VBoxHandleWinEvent,
    147                                     0, 0,
    148                                     WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS);
     148                                       hDll,
     149                                       VBoxHandleWinEvent,
     150                                       0, 0,
     151                                       WINEVENT_INCONTEXT | WINEVENT_SKIPOWNPROCESS);
    149152    return !!hWinEventHook[0];
    150153}
    151154
    152 /* Remove the global message hook */
     155/** Remove the global message hook */
    153156BOOL VBoxHookRemoveWindowTracker()
    154157{
     
    165168
    166169#ifdef DEBUG
    167 #include <VBox/VBoxGuest.h>
    168 #include <VBox/VMMDev.h>
    169 
    170 static char LogBuffer[1024];
    171 static HANDLE gVBoxDriver = INVALID_HANDLE_VALUE;
    172 
    173 VBGLR3DECL(int) VbglR3GRPerform(VMMDevRequestHeader *pReq)
    174 {
     170# include <VBox/VBoxGuest.h>
     171# include <VBox/VMMDev.h>
     172
     173/**
     174 * dprintf worker using VBoxGuest.sys and VMMDevReq_LogString.
     175 */
     176static void WriteLog(const char *pszFormat, ...)
     177{
     178    /*
     179     * Open VBox guest driver once.
     180     */
     181    static HANDLE s_hVBoxGuest = INVALID_HANDLE_VALUE;
     182    HANDLE hVBoxGuest = s_hVBoxGuest;
     183    if (hVBoxGuest == INVALID_HANDLE_VALUE)
     184    {
     185        hVBoxGuest = CreateFile(VBOXGUEST_DEVICE_NAME,
     186                                GENERIC_READ | GENERIC_WRITE,
     187                                FILE_SHARE_READ | FILE_SHARE_WRITE,
     188                                NULL,
     189                                OPEN_EXISTING,
     190                                FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
     191                                NULL);
     192        if (hVBoxGuest == INVALID_HANDLE_VALUE)
     193            return;
     194        s_hVBoxGuest = hVBoxGuest;
     195    }
     196
     197    /*
     198     * We're apparently afraid of using stack here, so we use a static buffer
     199     * instead and pray we won't be here at the same time on two threads...
     200     */
     201    static union
     202    {
     203        VMMDevReqLogString Req;
     204        uint8_t abBuf[1024];
     205    } s_uBuf;
     206
     207    vmmdevInitRequest(&s_uBuf.Req.header, VMMDevReq_LogString);
     208
     209    va_list va;
     210    va_start(va, pszFormat);
     211    size_t cch = vsprintf(s_uBuf.Req.szString, pszFormat, va);
     212    va_end(va);
     213
     214    s_uBuf.Req.header.size += (uint32_t)cch;
     215    if (s_uBuf.Req.header.size > sizeof(s_uBuf))
     216        __debugbreak();
     217
    175218    DWORD cbReturned;
    176     DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(pReq->size), pReq, pReq->size,
    177                     pReq, pReq->size, &cbReturned, NULL);
    178     return VINF_SUCCESS;
    179 }
    180 
    181 void WriteLog(char *pszStr, ...)
    182 {
    183     VMMDevReqLogString *pReq = (VMMDevReqLogString *)LogBuffer;
    184     int rc;
    185 
    186     /* open VBox guest driver */
    187     if (gVBoxDriver == INVALID_HANDLE_VALUE)
    188         gVBoxDriver = CreateFile(VBOXGUEST_DEVICE_NAME,
    189                              GENERIC_READ | GENERIC_WRITE,
    190                              FILE_SHARE_READ | FILE_SHARE_WRITE,
    191                              NULL,
    192                              OPEN_EXISTING,
    193                              FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
    194                              NULL);
    195 
    196     if (gVBoxDriver == INVALID_HANDLE_VALUE)
    197         return;
    198 
    199     va_list va;
    200 
    201     va_start(va, pszStr);
    202 
    203     vmmdevInitRequest(&pReq->header, VMMDevReq_LogString);
    204     vsprintf(pReq->szString, pszStr, va);
    205     pReq->header.size += strlen(pReq->szString);
    206     rc = VbglR3GRPerform(&pReq->header);
    207 
    208     va_end (va);
    209     return;
    210 }
    211 
    212 #endif
     219    DeviceIoControl(hVBoxGuest, VBOXGUEST_IOCTL_VMMREQUEST(s_uBuf.Req.size),
     220                    &s_uBuf.Req, s_uBuf.Req.header.size,
     221                    &s_uBuf.Req, s_uBuf.Req.header.size,
     222                    &cbReturned, NULL);
     223}
     224
     225#endif /* DEBUG */
     226
  • trunk/src/VBox/Additions/WINNT/VBoxHook/VBoxHook.def

    • Property svn:keywords set to Author Date Id Revision
    r45703 r46182  
    1 ;/** @file
    2 ; *
    3 ; * VBoxHook -- Global windows hook dll
    4 ; *
     1; $Id$
     2;; @file
     3; VBoxHook -- Global windows hook dll
     4;
     5
     6;
    57; Copyright (C) 2006-2010 Oracle Corporation
    68;
     
    1315; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1416;
    15 ; */
    1617
    1718LIBRARY VBoxHook
    18 
    1919
    2020EXPORTS
  • trunk/src/VBox/Additions/WINNT/VBoxHook/dllmain.cpp

    • Property svn:keywords changed from Id Revision to Author Date Id Revision
    r44528 r46182  
     1/* $Id$ */
    12/** @file
    2  *
    33 * VBoxHook -- Global windows hook dll
    4  *
     4 */
     5
     6/*
    57 * Copyright (C) 2006-2010 Oracle Corporation
    68 *
     
    1315 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1416 */
    15 #include <windows.h>
     17
     18
     19#include <Windows.h>
    1620
    1721
     
    2630BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
    2731{
    28     BOOL    bStatus = TRUE;
    29 
    3032    switch (fdwReason)
    3133    {
    32     case DLL_PROCESS_ATTACH:
    33         return TRUE;
     34        case DLL_PROCESS_ATTACH:
     35            return TRUE;
    3436
    35     case DLL_PROCESS_DETACH:
    36         return TRUE;
     37        case DLL_PROCESS_DETACH:
     38            return TRUE;
    3739
    38     case DLL_THREAD_ATTACH:
    39         break;
     40        case DLL_THREAD_ATTACH:
     41            return TRUE;
    4042
    41     case DLL_THREAD_DETACH:
    42         return TRUE;
     43        case DLL_THREAD_DETACH:
     44            return TRUE;
    4345
    44     default:
    45         break;
     46        default:
     47            return TRUE;
    4648    }
    47 
    48     return bStatus;
    4949}
    5050
  • trunk/src/VBox/Additions/WINNT/include/VBoxHook.h

    • Property svn:keywords set to Author Date Id Revision
    r45760 r46182  
     1/* $Id$ */
    12/** @file
    2  *
    3  * VBoxHook -- Global windows hook dll
    4  *
     3 * VBoxHook -- Global windows hook dll.
     4 */
     5
     6/*
    57 * Copyright (C) 2006-2010 Oracle Corporation
    68 *
     
    1315 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1416 */
    15 #ifndef __VBoxHook_h__
    16 #define __VBoxHook_h__
     17#ifndef ___winnt_include_VBoxHook_h
     18#define ___winnt_include_VBoxHook_h
    1719
    1820/* custom messages as we must install the hook from the main thread */
     
    3436BOOL VBoxHookRemoveWindowTracker();
    3537
    36 #endif /* __VBoxHook_h__ */
     38#endif
     39
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette