VirtualBox

Changeset 34097 in vbox


Ignore:
Timestamp:
Nov 16, 2010 10:39:51 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
67796
Message:

VBoxTray: Update on IPC handling.

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

Legend:

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

    r34085 r34097  
    2323#include <iprt/assert.h>
    2424#include <iprt/err.h>
     25#include <iprt/mem.h>
    2526#include <VBoxGuestInternal.h>
    2627
     
    3233} VBOXIPCCONTEXT, *PVBOXIPCCONTEXT;
    3334
    34 #define VBOXTRAY_PIPE_BUFSIZE 512
    35 
    3635static VBOXIPCCONTEXT gCtx = {0};
    3736
     
    3938{
    4039    int rc = VINF_SUCCESS;
    41     while (RT_SUCCESS(rc))
     40    do
    4241    {
    4342        DWORD dwRead;
    4443        if (!ReadFile(pCtx->hPipe, pMessage, cbMessage, &dwRead, 0))
     44        {
    4545            rc = RTErrConvertFromWin32(GetLastError());
    46         if (rc == VERR_MORE_DATA)
    47         {
    48             rc = VINF_SUCCESS;
     46        }
     47        else
     48        {
     49            if (rc == VERR_MORE_DATA)
     50                rc = VINF_SUCCESS;
    4951            pMessage += dwRead;
    50         }
    51     }
     52            cbMessage -= dwRead;
     53        }
     54    }
     55    while (cbMessage && RT_SUCCESS(rc));
    5256    return rc;
    5357}
     
    6973{
    7074    VBOXTRAYIPCHEADER hdr;
    71     hdr.uMsg = VBOXTRAYIPCMSGTYPE_QUIT;
    72     hdr.uVer = 0;
     75    hdr.ulMsg = VBOXTRAYIPCMSGTYPE_QUIT;
     76    hdr.ulVer = 0;
    7377    return VBoxIPCWriteMessage(pCtx, (BYTE*)&hdr, sizeof(hdr));
    7478}
     
    9195        hlpShowBalloonTip(gInstance, gToolWindow, ID_TRAYICON,
    9296                          msg.szBody, msg.szTitle,
    93                           msg.uShowMS, msg.uType);
     97                          msg.ulShowMS, msg.ulType);
    9498    }
    9599    return rc;
     
    103107    gCtx.pEnv = pEnv;
    104108
     109    int rc = VINF_SUCCESS;
    105110    SECURITY_ATTRIBUTES sa;
    106     sa.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)malloc(SECURITY_DESCRIPTOR_MIN_LENGTH);
    107     if (!InitializeSecurityDescriptor(sa.lpSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION))
    108     {
    109         DWORD er = ::GetLastError();
    110     }
    111     if (!SetSecurityDescriptorDacl(sa.lpSecurityDescriptor, TRUE, (PACL)0, FALSE))
    112     {
    113         DWORD er = ::GetLastError();
    114     }
    115     sa.nLength = sizeof sa;
    116     sa.bInheritHandle = TRUE;
    117 
    118     int rc = VINF_SUCCESS;
    119     gCtx.hPipe = ::CreateNamedPipe((LPSTR)VBOXTRAY_PIPE_IPC,
    120                                    PIPE_ACCESS_DUPLEX,
    121                                    PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
    122                                    PIPE_UNLIMITED_INSTANCES,
    123                                    VBOXTRAY_PIPE_BUFSIZE, // output buffer size
    124                                    VBOXTRAY_PIPE_BUFSIZE, // input buffer size
    125                                    NMPWAIT_USE_DEFAULT_WAIT,
    126                                    &sa);
    127     if (gCtx.hPipe == INVALID_HANDLE_VALUE)
    128     {
    129         DWORD dwError = ::GetLastError();
    130     }
     111    sa.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)RTMemAlloc(SECURITY_DESCRIPTOR_MIN_LENGTH);
     112    if (!sa.lpSecurityDescriptor)
     113        rc = VERR_NO_MEMORY;
    131114    else
    132115    {
    133         *pfStartThread = true;
    134         *ppInstance = &gCtx;
     116        if (!InitializeSecurityDescriptor(sa.lpSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION))
     117            rc = RTErrConvertFromWin32(GetLastError());
     118        else
     119        {
     120            if (!SetSecurityDescriptorDacl(sa.lpSecurityDescriptor, TRUE, (PACL)0, FALSE))
     121                rc = RTErrConvertFromWin32(GetLastError());
     122            else
     123            {
     124                sa.nLength = sizeof(sa);
     125                sa.bInheritHandle = TRUE;
     126            }
     127        }
     128
     129        if (RT_SUCCESS(rc))
     130        {
     131            gCtx.hPipe = CreateNamedPipe((LPSTR)VBOXTRAY_PIPE_IPC,
     132                                         PIPE_ACCESS_DUPLEX,
     133                                         PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
     134                                         PIPE_UNLIMITED_INSTANCES,
     135                                         VBOXTRAY_PIPE_IPC_BUFSIZE, /* Output buffer size. */
     136                                         VBOXTRAY_PIPE_IPC_BUFSIZE, /* Input buffer size. */
     137                                         NMPWAIT_USE_DEFAULT_WAIT,
     138                                         &sa);
     139            if (gCtx.hPipe == INVALID_HANDLE_VALUE)
     140                rc = RTErrConvertFromWin32(GetLastError());
     141            else
     142            {
     143                *pfStartThread = true;
     144                *ppInstance = &gCtx;
     145            }
     146        }
     147        RTMemFree(sa.lpSecurityDescriptor);
    135148    }
    136149    return rc;
     
    191204            if (SUCCEEDED(dwErr))
    192205            {
    193                 switch (hdr.uMsg)
     206                switch (hdr.ulMsg)
    194207                {
    195208                    case VBOXTRAYIPCMSGTYPE_SHOWBALLOONMSG:
    196                         rc = VBoxIPCMsgShowBalloonMsg(pCtx, hdr.uVer);
     209                        rc = VBoxIPCMsgShowBalloonMsg(pCtx, hdr.ulVer);
    197210                        break;
    198211
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTrayMsg.h

    r34085 r34097  
    1919#define ___VBOXTRAY_MSG_H
    2020
    21 #define VBOXTRAY_PIPE_IPC "\\\\.\\pipe\\VBoxTrayIPC"
     21#define VBOXTRAY_PIPE_IPC               "\\\\.\\pipe\\VBoxTrayIPC"
     22#define VBOXTRAY_PIPE_IPC_BUFSIZE       64 * 1024
    2223
    2324enum VBOXTRAYIPCMSGTYPE
     
    3334{
    3435    /** Message type. */
    35     UINT uMsg;
     36    ULONG ulMsg;
    3637    /** Version of message type. */
    37     UINT uVer;
     38    ULONG ulVer;
    3839} VBOXTRAYIPCHEADER, *PVBOXTRAYIPCHEADER;
    3940
     
    4546    TCHAR    szTitle[64];
    4647    /** Message type. */
    47     UINT     uType;
     48    ULONG    ulType;
    4849    /** Flags; not used yet. */
    49     UINT     uFlags;
     50    ULONG    ulFlags;
    5051    /** Time to show the message (in msec). */
    51     UINT     uShowMS;
     52    ULONG    ulShowMS;
    5253} VBOXTRAYIPCMSG_SHOWBALLOONMSG, *PVBOXTRAYIPCMSG_SHOWBALLOONMSG;
    5354
Note: See TracChangeset for help on using the changeset viewer.

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