VirtualBox

Changeset 45837 in vbox


Ignore:
Timestamp:
Apr 30, 2013 12:42:28 PM (12 years ago)
Author:
vboxsync
Message:

VBoxTray/seamless: more fixes

Location:
trunk/src/VBox/Additions/WINNT/VBoxTray
Files:
2 edited

Legend:

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

    r45803 r45837  
    6767static BOOL vboxStHandleEvent(WPARAM EventID, LPARAM SessionID);
    6868static BOOL vboxStIsActiveConsole();
     69static BOOL vboxStCheckTimer(WPARAM wEvent);
    6970
    7071/*
     
    915916            if (VBoxCapsCheckTimer(wParam))
    916917                return 0;
    917             if(vboxDtCheckTimer(wParam))
     918            if (vboxDtCheckTimer(wParam))
     919                return 0;
     920            if (vboxStCheckTimer(wParam))
    918921                return 0;
    919922
     
    10071010    BOOL fIsConsole;
    10081011    WTS_CONNECTSTATE_CLASS enmConnectState;
     1012    UINT_PTR idDelayedInitTimer;
    10091013    BOOL (WINAPI * pfnWTSRegisterSessionNotification)(HWND hWnd, DWORD dwFlags);
    10101014    BOOL (WINAPI * pfnWTSUnRegisterSessionNotification)(HWND hWnd);
     
    10261030            gVBoxSt.fIsConsole = (*pProtocolType == 0);
    10271031            gVBoxSt.enmConnectState = *penmConnectState;
     1032            return VINF_SUCCESS;
    10281033        }
    10291034        else
     
    10401045        rc = RTErrConvertFromWin32(dwErr);
    10411046    }
     1047
     1048    /* failure branch, set to "console-active" state */
     1049    gVBoxSt.fIsConsole = TRUE;
     1050    gVBoxSt.enmConnectState = WTSActive;
     1051
    10421052    return rc;
    10431053}
     
    10831093                DWORD dwErr = GetLastError();
    10841094                WARN(("VBoxTray: WTSRegisterSessionNotification failed, error = %08X\n", dwErr));
     1095                if (dwErr == RPC_S_INVALID_BINDING)
     1096                {
     1097                    gVBoxSt.idDelayedInitTimer = SetTimer(gVBoxSt.hWTSAPIWnd, TIMERID_VBOXTRAY_ST_DELAYED_INIT_TIMER, 500, (TIMERPROC)NULL);
     1098                }
    10851099                rc = RTErrConvertFromWin32(dwErr);
    10861100            }
     
    11101124    }
    11111125
    1112     if (!gVBoxSt.pfnWTSUnRegisterSessionNotification(gVBoxSt.hWTSAPIWnd))
    1113     {
    1114         DWORD dwErr = GetLastError();
    1115         WARN(("VBoxTray: WTSAPI32 load failed, error = %08X\n", dwErr));
     1126    if (gVBoxSt.idDelayedInitTimer)
     1127    {
     1128        /* notification is not registered, just kill timer */
     1129        KillTimer(gVBoxSt.hWTSAPIWnd, gVBoxSt.idDelayedInitTimer);
     1130        gVBoxSt.idDelayedInitTimer = 0;
     1131    }
     1132    else
     1133    {
     1134        if (!gVBoxSt.pfnWTSUnRegisterSessionNotification(gVBoxSt.hWTSAPIWnd))
     1135        {
     1136            DWORD dwErr = GetLastError();
     1137            WARN(("VBoxTray: WTSAPI32 load failed, error = %08X\n", dwErr));
     1138        }
    11161139    }
    11171140
     
    11401163    }
    11411164}
     1165
     1166static BOOL vboxStCheckTimer(WPARAM wEvent)
     1167{
     1168    if (wEvent != gVBoxSt.idDelayedInitTimer)
     1169        return FALSE;
     1170
     1171    if (gVBoxSt.pfnWTSRegisterSessionNotification(gVBoxSt.hWTSAPIWnd, NOTIFY_FOR_THIS_SESSION))
     1172    {
     1173        KillTimer(gVBoxSt.hWTSAPIWnd, gVBoxSt.idDelayedInitTimer);
     1174        gVBoxSt.idDelayedInitTimer = 0;
     1175    }
     1176    else
     1177    {
     1178        DWORD dwErr = GetLastError();
     1179        WARN(("VBoxTray: timer WTSRegisterSessionNotification failed, error = %08X\n", dwErr));
     1180    }
     1181
     1182    vboxStCheckState();
     1183}
     1184
    11421185
    11431186static BOOL vboxStHandleEvent(WPARAM wEvent, LPARAM SessionID)
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.h

    r45802 r45837  
    8383#define TIMERID_VBOXTRAY_CAPS_TIMER             1001
    8484#define TIMERID_VBOXTRAY_DT_TIMER               1002
     85#define TIMERID_VBOXTRAY_ST_DELAYED_INIT_TIMER  1003
    8586
    8687/* The environment information for services. */
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