VirtualBox

Changeset 13483 in vbox


Ignore:
Timestamp:
Oct 22, 2008 9:58:25 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38285
Message:

Fixed Windows2000 guest shutdown crash in VBoxGuest.sys

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

Legend:

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

    r8781 r13483  
    149149    if (!VBOX_SUCCESS(rc))
    150150    {
    151        dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed. rc = %d\n", rc));
     151       dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed for irqAckEvents. rc = %d\n", rc));
     152    }
     153    rc = VbglGRAlloc ((VMMDevRequestHeader **)&pDevExt->powerStateRequest, sizeof (VMMDevPowerStateRequest), VMMDevReq_SetPowerStatus);
     154    if (!VBOX_SUCCESS(rc))
     155    {
     156       dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed for powerStateRequest. rc = %d\n", rc));
    152157    }
    153158
  • trunk/src/VBox/Additions/WINNT/VBoxGuest/VBoxGuest.cpp

    r12084 r13483  
    11161116NTSTATUS VBoxGuestShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp)
    11171117{
    1118     VMMDevPowerStateRequest *req = NULL;
     1118    PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pDevObj->DeviceExtension;
    11191119
    11201120    dprintf(("VBoxGuest::VBoxGuestShutdown\n"));
    11211121
    1122     int rc = VbglGRAlloc ((VMMDevRequestHeader **)&req, sizeof (VMMDevPowerStateRequest), VMMDevReq_SetPowerStatus);
    1123 
    1124     if (VBOX_SUCCESS(rc))
    1125     {
     1122    if (pDevExt && pDevExt->powerStateRequest)
     1123    {
     1124        VMMDevPowerStateRequest *req = pDevExt->powerStateRequest;
     1125
     1126        req->header.requestType = VMMDevReq_SetPowerStatus;
    11261127        req->powerState = VMMDevPowerState_PowerOff;
    11271128
    1128         rc = VbglGRPerform (&req->header);
     1129        int rc = VbglGRPerform (&req->header);
    11291130
    11301131        if (VBOX_FAILURE(rc) || VBOX_FAILURE(req->header.rc))
     
    11331134                      "rc = %d, VMMDev rc = %Vrc\n", rc, req->header.rc));
    11341135        }
    1135 
    1136         VbglGRFree (&req->header);
    11371136    }
    11381137
  • trunk/src/VBox/Additions/WINNT/VBoxGuest/VBoxGuestPnP.cpp

    r8781 r13483  
    185185                        if (!VBOX_SUCCESS(rc))
    186186                        {
    187                             dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed. rcVBox = %d\n", rcVBox));
     187                            dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed for irqAckEvents. rcVBox = %d\n", rcVBox));
     188                            rc = STATUS_UNSUCCESSFUL;
     189                        }
     190                    }
     191
     192                    if (NT_SUCCESS(rc))
     193                    {
     194                        rcVBox = VbglGRAlloc ((VMMDevRequestHeader **)&pDevExt->powerStateRequest, sizeof (VMMDevPowerStateRequest), VMMDevReq_SetPowerStatus);
     195                        if (!VBOX_SUCCESS(rc))
     196                        {
     197                            dprintf(("VBoxGuest::START_DEVICE: VbglAlloc failed for powerStateRequest. rcVBox = %d\n", rcVBox));
    188198                            rc = STATUS_UNSUCCESSFUL;
    189199                        }
     
    561571                            {
    562572                                dprintf(("VBoxGuest::VBoxGuestPower: Telling the VMMDev to close the VM...\n"));
    563                                 VMMDevPowerStateRequest *req = NULL;
    564 
    565                                 int rc = VbglGRAlloc ((VMMDevRequestHeader **)&req, sizeof (VMMDevPowerStateRequest), VMMDevReq_SetPowerStatus);
    566 
    567                                 if (VBOX_SUCCESS(rc))
     573
     574                                if (pDevExt && pDevExt->powerStateRequest)
    568575                                {
     576                                    VMMDevPowerStateRequest *req = pDevExt->powerStateRequest;
     577
     578                                    req->header.requestType = VMMDevReq_SetPowerStatus;
    569579                                    req->powerState = VMMDevPowerState_PowerOff;
    570580
    571                                     rc = VbglGRPerform (&req->header);
     581                                    int rc = VbglGRPerform (&req->header);
    572582
    573583                                    if (VBOX_FAILURE(rc) || VBOX_FAILURE(req->header.rc))
     
    576586                                                 "rc = %d, VMMDev rc = %Vrc\n", rc, req->header.rc));
    577587                                    }
    578 
    579                                     VbglGRFree (&req->header);
    580588                                }
    581589                            }
  • trunk/src/VBox/Additions/WINNT/VBoxGuest/VBoxGuest_Internal.h

    r8781 r13483  
    206206    } MemBalloon;
    207207
     208    /* Preallocated generic request for shutdown. */
     209    VMMDevPowerStateRequest *powerStateRequest;
     210
    208211} VBOXGUESTDEVEXT, *PVBOXGUESTDEVEXT;
    209212
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