VirtualBox

Changeset 105526 in vbox for trunk


Ignore:
Timestamp:
Jul 26, 2024 3:48:28 PM (6 months ago)
Author:
vboxsync
Message:

GA/Windows: New VBOXESC_RECONNECT_TARGETS instead of VBOXESC_CONFIGURETARGETS to forcibly reconnect a guest displays. bugref:10714

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r104836 r105526  
    34233423                {
    34243424                    WARN(("VBOXESC_CONFIGURETARGETS invalid command %d", pEscapeHdr->u32CmdSpecific));
    3425                     Status = STATUS_INVALID_PARAMETER;
    3426                     break;
     3425//                    Status = STATUS_INVALID_PARAMETER;
     3426//                    break;
    34273427                }
    34283428
     
    34813481                break;
    34823482            }
     3483
     3484            case VBOXESC_RECONNECT_TARGETS:
     3485            {
     3486                LOG(("=> VBOXESC_RECONNECT_TARGETS"));
     3487
     3488                if (!pEscape->Flags.HardwareAccess)
     3489                {
     3490                    WARN(("VBOXESC_RECONNECT_TARGETS called without HardwareAccess flag set, failing\n"));
     3491                    Status = STATUS_INVALID_PARAMETER;
     3492                    break;
     3493                }
     3494
     3495                if (pEscape->PrivateDriverDataSize != sizeof (*pEscapeHdr))
     3496                {
     3497                    WARN(("VBOXESC_RECONNECT_TARGETS invalid private driver size %d\n", pEscape->PrivateDriverDataSize));
     3498                    Status = STATUS_INVALID_PARAMETER;
     3499                    break;
     3500                }
     3501
     3502                if (pEscapeHdr->u32CmdSpecific == 0)
     3503                {
     3504                    WARN(("VBOXESC_RECONNECT_TARGETS u32CmdSpecific is zero\n"));
     3505                    Status = STATUS_INVALID_PARAMETER;
     3506                    break;
     3507                }
     3508
     3509                uint32_t u32Mask = pEscapeHdr->u32CmdSpecific;
     3510
     3511                for (int i = 0; i < VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++i)
     3512                {
     3513                    VBOXWDDM_TARGET *pTarget = &pDevExt->aTargets[i];
     3514                    bool fConnReq = u32Mask & RT_BIT(i);
     3515
     3516                    pTarget->fConfigured = true;
     3517
     3518                    if (!pTarget->fConnected && fConnReq)
     3519                    {
     3520                        Status = VBoxWddmChildStatusConnect(pDevExt, (uint32_t)i, TRUE);
     3521                        LOG(("VBOXESC_RECONNECT_TARGETS connecting target %d, status 0x%x", i, Status));
     3522                    }
     3523                    else if (pTarget->fConnected && !fConnReq)
     3524                    {
     3525                        Status = VBoxWddmChildStatusConnect(pDevExt, (uint32_t)i, FALSE);
     3526                        LOG(("VBOXESC_RECONNECT_TARGETS disconnecting target %d, status 0x%x", i, Status));
     3527                    }
     3528                 }
     3529
     3530                Status = STATUS_SUCCESS;
     3531
     3532                LOG(("<= VBOXESC_RECONNECT_TARGETS"));
     3533                break;
     3534            }
     3535
    34833536            case VBOXESC_SETALLOCHOSTID:
    34843537            {
  • trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h

    r98103 r105526  
    5959# define VBOXESC_GUEST_DISPLAYCHANGED       0xABCD9017
    6060# define VBOXESC_TARGET_CONNECTIVITY        0xABCD9018
     61
     62# define VBOXESC_RECONNECT_TARGETS          0xABCD9019
    6163#endif /* #ifdef VBOX_WITH_WDDM */
    6264
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