VirtualBox

Changeset 40672 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 28, 2012 10:12:31 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77117
Message:

VBoxTray: Display thread fixes.

File:
1 edited

Legend:

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

    r34130 r40672  
    553553                 * but a new resolution will be read in this poll loop.
    554554                 */
    555                 for (;;)
     555                VMMDevDisplayChangeRequest2 displayChangeRequest = {0};
     556                displayChangeRequest.header.size        = sizeof(VMMDevDisplayChangeRequest2);
     557                displayChangeRequest.header.version     = VMMDEV_REQUEST_HEADER_VERSION;
     558                displayChangeRequest.header.requestType = VMMDevReq_GetDisplayChangeRequest2;
     559                displayChangeRequest.eventAck           = VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
     560                BOOL fDisplayChangeQueried = DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(VMMDevDisplayChangeRequest2)), &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest2),
     561                                                             &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest2), &cbReturned, NULL);
     562                if (!fDisplayChangeQueried)
    556563                {
    557                     /* get the display change request */
    558                     VMMDevDisplayChangeRequest2 displayChangeRequest = {0};
    559                     displayChangeRequest.header.size        = sizeof(VMMDevDisplayChangeRequest2);
     564                    /* Try the old version of the request for old VBox hosts. */
     565                    displayChangeRequest.header.size        = sizeof(VMMDevDisplayChangeRequest);
    560566                    displayChangeRequest.header.version     = VMMDEV_REQUEST_HEADER_VERSION;
    561                     displayChangeRequest.header.requestType = VMMDevReq_GetDisplayChangeRequest2;
     567                    displayChangeRequest.header.requestType = VMMDevReq_GetDisplayChangeRequest;
    562568                    displayChangeRequest.eventAck           = VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
    563                     BOOL fDisplayChangeQueried = DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(VMMDevDisplayChangeRequest2)), &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest2),
    564                                                                  &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest2), &cbReturned, NULL);
    565                     if (!fDisplayChangeQueried)
    566                     {
    567                         /* Try the old version of the request for old VBox hosts. */
    568                         displayChangeRequest.header.size        = sizeof(VMMDevDisplayChangeRequest);
    569                         displayChangeRequest.header.version     = VMMDEV_REQUEST_HEADER_VERSION;
    570                         displayChangeRequest.header.requestType = VMMDevReq_GetDisplayChangeRequest;
    571                         displayChangeRequest.eventAck           = VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
    572                         fDisplayChangeQueried = DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(VMMDevDisplayChangeRequest)), &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest),
    573                                                                  &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest), &cbReturned, NULL);
    574                         displayChangeRequest.display = 0;
    575                     }
    576 
    577                     if (fDisplayChangeQueried)
     569                    fDisplayChangeQueried = DeviceIoControl(gVBoxDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(VMMDevDisplayChangeRequest)), &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest),
     570                                                             &displayChangeRequest, sizeof(VMMDevDisplayChangeRequest), &cbReturned, NULL);
     571                    displayChangeRequest.display = 0;
     572                }
     573
     574                if (fDisplayChangeQueried)
     575                {
     576                    /* Try to set the requested video mode. Repeat until it is successful or is rejected by the driver. */
     577                    for (;;)
    578578                    {
    579579                        Log(("VBoxTray: VBoxDisplayThread: VMMDevReq_GetDisplayChangeRequest2: %dx%dx%d at %d\n", displayChangeRequest.xres, displayChangeRequest.yres, displayChangeRequest.bpp, displayChangeRequest.display));
     
    708708                        }
    709709                    }
    710                     else
     710                }
     711                else
     712                {
     713                    Log(("VBoxTray: VBoxDisplayThread: error from DeviceIoControl VBOXGUEST_IOCTL_VMMREQUEST\n"));
     714                    /* sleep a bit to not eat too much CPU while retrying */
     715                    /* are we supposed to stop? */
     716                    if (WaitForSingleObject(pCtx->pEnv->hStopEvent, 50) == WAIT_OBJECT_0)
    711717                    {
    712                         Log(("VBoxTray: VBoxDisplayThread: error from DeviceIoControl VBOXGUEST_IOCTL_VMMREQUEST\n"));
    713                         /* sleep a bit to not eat too much CPU while retrying */
    714                         /* are we supposed to stop? */
    715                         if (WaitForSingleObject(pCtx->pEnv->hStopEvent, 50) == WAIT_OBJECT_0)
    716                         {
    717                             fTerminate = true;
    718                             break;
    719                         }
     718                        fTerminate = true;
     719                        break;
    720720                    }
    721721                }
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