VirtualBox

Ignore:
Timestamp:
Jun 25, 2019 4:16:07 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131562
Message:

VBoxUSBMon.sys: Removed unused code.

Location:
trunk/src/VBox/HostDrivers/VBoxUSB/win/mon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp

    r79000 r79334  
    4747#include <devguid.h>
    4848
    49 /*
    50  * Note: Must match the VID & PID in the USB driver .inf file!!
    51  */
    52 /*
    53   BusQueryDeviceID USB\Vid_80EE&Pid_CAFE
    54   BusQueryInstanceID 2
    55   BusQueryHardwareIDs USB\Vid_80EE&Pid_CAFE&Rev_0100
    56   BusQueryHardwareIDs USB\Vid_80EE&Pid_CAFE
    57   BusQueryCompatibleIDs USB\Class_ff&SubClass_00&Prot_00
    58   BusQueryCompatibleIDs USB\Class_ff&SubClass_00
    59   BusQueryCompatibleIDs USB\Class_ff
    60 */
    61 
    62 #define szBusQueryDeviceId                  L"USB\\Vid_80EE&Pid_CAFE"
    63 #define szBusQueryHardwareIDs               L"USB\\Vid_80EE&Pid_CAFE&Rev_0100\0USB\\Vid_80EE&Pid_CAFE\0\0"
    64 #define szBusQueryCompatibleIDs             L"USB\\Class_ff&SubClass_00&Prot_00\0USB\\Class_ff&SubClass_00\0USB\\Class_ff\0\0"
    65 
    66 #define szDeviceTextDescription             L"VirtualBox USB"
    67 
    68 /* Possible USB bus driver names. */
    69 static LPWSTR lpszStandardControllerName[1] =
    70 {
    71     L"\\Driver\\usbhub",
    72 };
    7349
    7450/*
  • trunk/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp

    r79311 r79334  
    171171}
    172172
    173 void vboxUsbDbgPrintUnicodeString(PUNICODE_STRING pUnicodeString)
    174 {
    175     RT_NOREF1(pUnicodeString);
    176     Log(("%.*ls", pUnicodeString->Length / 2, pUnicodeString->Buffer));
    177 }
    178 
    179173/**
    180174 * Send IRP_MN_QUERY_DEVICE_RELATIONS
     
    240234    LOG(("IoCallDriver returned %x", Status));
    241235    return Status;
    242 }
    243 
    244 RT_C_DECLS_BEGIN
    245 /* these two come from IFS Kit, which is not included in 2K DDK we use,
    246  * although they are documented and exported in ntoskrnl,
    247  * and both should be present for >= XP according to MSDN */
    248 NTKERNELAPI
    249 NTSTATUS
    250 ObQueryNameString(
    251     __in PVOID Object,
    252     __out_bcount_opt(Length) POBJECT_NAME_INFORMATION ObjectNameInfo,
    253     __in ULONG Length,
    254     __out PULONG ReturnLength
    255     );
    256 
    257 NTKERNELAPI
    258 PDEVICE_OBJECT
    259 IoGetLowerDeviceObject(
    260     __in  PDEVICE_OBJECT  DeviceObject
    261     );
    262 
    263 RT_C_DECLS_END
    264 
    265 typedef DECLCALLBACK(VOID) FNVBOXUSBDEVNAMEMATCHER(PDEVICE_OBJECT pDo, PUNICODE_STRING pName, PVOID pvMatcher);
    266 typedef FNVBOXUSBDEVNAMEMATCHER *PFNVBOXUSBDEVNAMEMATCHER;
    267 
    268 static NTSTATUS vboxUsbObjCheckName(PDEVICE_OBJECT pDo, PFNVBOXUSBDEVNAMEMATCHER pfnMatcher, PVOID pvMatcher)
    269 {
    270     union
    271     {
    272         OBJECT_NAME_INFORMATION Info;
    273         char buf[1024];
    274     } buf;
    275     ULONG cbLength = 0;
    276 
    277     POBJECT_NAME_INFORMATION pInfo = &buf.Info;
    278     NTSTATUS Status = ObQueryNameString(pDo, &buf.Info, sizeof (buf), &cbLength);
    279     if (!NT_SUCCESS(Status))
    280     {
    281         if (STATUS_INFO_LENGTH_MISMATCH != Status)
    282         {
    283             WARN(("ObQueryNameString failed 0x%x", Status));
    284             return Status;
    285         }
    286 
    287         LOG(("ObQueryNameString returned STATUS_INFO_LENGTH_MISMATCH, required size %d", cbLength));
    288 
    289         pInfo = (POBJECT_NAME_INFORMATION)VBoxUsbMonMemAlloc(cbLength);
    290         if (!pInfo)
    291         {
    292             WARN(("VBoxUsbMonMemAlloc failed"));
    293             return STATUS_NO_MEMORY;
    294         }
    295         Status = ObQueryNameString(pDo, pInfo, cbLength, &cbLength);
    296         if (!NT_SUCCESS(Status))
    297         {
    298             WARN(("ObQueryNameString second try failed 0x%x", Status));
    299             VBoxUsbMonMemFree(pInfo);
    300             return Status;
    301         }
    302     }
    303 
    304     /* we've got the name! */
    305     LOG(("got the name:"));
    306     LOG_USTR(&pInfo->Name);
    307     pfnMatcher(pDo, &pInfo->Name, pvMatcher);
    308 
    309     if (&buf.Info != pInfo)
    310     {
    311         LOG(("freeing allocated pInfo(0x%p)", pInfo));
    312         VBoxUsbMonMemFree(pInfo);
    313     }
    314     else
    315     {
    316         LOG(("no freeing info needed"));
    317     }
    318 
    319     return STATUS_SUCCESS;
    320 }
    321 
    322 
    323 typedef DECLCALLBACK(BOOLEAN) FNVBOXUSBDEVSTACKWALKER(PDEVICE_OBJECT pTopDo, PDEVICE_OBJECT pCurDo, PVOID pvContext);
    324 typedef FNVBOXUSBDEVSTACKWALKER *PFNVBOXUSBDEVSTACKWALKER;
    325 
    326 VOID vboxUsbObjDevStackWalk(PDEVICE_OBJECT pDo, PFNVBOXUSBDEVSTACKWALKER pfnWalker, PVOID pvWalker)
    327 {
    328     LOG(("==>tree walk for Do 0x%p", pDo));
    329     PDEVICE_OBJECT pCurDo = pDo;
    330     ObReferenceObject(pCurDo); /* <- to make sure the dereferencing logic below works correctly */
    331     do
    332     {
    333         LOG(("==Do 0x%p", pCurDo));
    334 #ifdef VBOX_USB_WITH_VERBOSE_LOGGING
    335         {
    336             union
    337             {
    338                 OBJECT_NAME_INFORMATION Info;
    339                 char buf[1024];
    340             } buf;
    341             ULONG cbLength = 0;
    342 
    343             NTSTATUS tmpStatus = ObQueryNameString(pCurDo, &buf.Info, sizeof (buf), &cbLength);
    344             if (NT_SUCCESS(tmpStatus))
    345             {
    346                 LOG(("  Obj name:"));
    347                 LOG_USTR(&buf.Info.Name);
    348             }
    349             else
    350             {
    351                 if (STATUS_INFO_LENGTH_MISMATCH != tmpStatus)
    352                 {
    353                     WARN(("ObQueryNameString failed 0x%x", tmpStatus));
    354                 }
    355                 else
    356                 {
    357                     WARN(("ObQueryNameString STATUS_INFO_LENGTH_MISMATCH, required %d", cbLength));
    358                 }
    359             }
    360 
    361             if (pCurDo->DriverObject
    362                 && pCurDo->DriverObject->DriverName.Buffer
    363                 && pCurDo->DriverObject->DriverName.Length)
    364             {
    365                 LOG(("  Drv Obj(0x%p), name:", pCurDo->DriverObject));
    366                 LOG_USTR(&pCurDo->DriverObject->DriverName);
    367             }
    368             else
    369             {
    370                 LOG(("  No Drv Name, Drv Obj(0x%p)", pCurDo->DriverObject));
    371                 if (pCurDo->DriverObject)
    372                 {
    373                     LOG(("  driver name is zero, Length(%d), Buffer(0x%p)",
    374                                 pCurDo->DriverObject->DriverName.Length, pCurDo->DriverObject->DriverName.Buffer));
    375                 }
    376                 else
    377                 {
    378                     LOG(("  driver object is NULL"));
    379                 }
    380             }
    381         }
    382 #endif
    383         if (!pfnWalker(pDo, pCurDo, pvWalker))
    384         {
    385             LOG(("the walker said to stop"));
    386             ObDereferenceObject(pCurDo);
    387             break;
    388         }
    389 
    390         PDEVICE_OBJECT pLowerDo = IoGetLowerDeviceObject(pCurDo);
    391         ObDereferenceObject(pCurDo);
    392         if (!pLowerDo)
    393         {
    394             LOG(("IoGetLowerDeviceObject returnned NULL, stop"));
    395             break;
    396         }
    397         pCurDo = pLowerDo;
    398     } while (1);
    399 
    400     LOG(("<==tree walk"));
    401 }
    402 
    403 static DECLCALLBACK(BOOLEAN) vboxUsbObjNamePrefixMatch(PUNICODE_STRING pName, PUNICODE_STRING pNamePrefix, BOOLEAN fCaseInSensitive)
    404 {
    405     LOG(("Matching prefix:"));
    406     LOG_USTR(pNamePrefix);
    407     if (pNamePrefix->Length > pName->Length)
    408     {
    409         LOG(("Pregix Length(%d) > Name Length(%d)", pNamePrefix->Length, pName->Length));
    410         return FALSE;
    411     }
    412 
    413     LOG(("Pregix Length(%d) <= Name Length(%d)", pNamePrefix->Length, pName->Length));
    414 
    415     UNICODE_STRING NamePrefix = *pName;
    416     NamePrefix.Length = pNamePrefix->Length;
    417     LONG rc = RtlCompareUnicodeString(&NamePrefix, pNamePrefix, fCaseInSensitive);
    418 
    419     if (!rc)
    420     {
    421         LOG(("prefix MATCHED!"));
    422         return TRUE;
    423     }
    424 
    425     LOG(("prefix NOT matched!"));
    426     return FALSE;
    427 }
    428 
    429 typedef struct VBOXUSBOBJNAMEPREFIXMATCHER
    430 {
    431     PUNICODE_STRING pNamePrefix;
    432     BOOLEAN fMatched;
    433 } VBOXUSBOBJNAMEPREFIXMATCHER, *PVBOXUSBOBJNAMEPREFIXMATCHER;
    434 
    435 static DECLCALLBACK(VOID) vboxUsbObjDevNamePrefixMatcher(PDEVICE_OBJECT pDo, PUNICODE_STRING pName, PVOID pvMatcher)
    436 {
    437     RT_NOREF1(pDo);
    438     PVBOXUSBOBJNAMEPREFIXMATCHER pData = (PVBOXUSBOBJNAMEPREFIXMATCHER)pvMatcher;
    439     PUNICODE_STRING pNamePrefix = pData->pNamePrefix;
    440     ASSERT_WARN(!pData->fMatched, ("match flag already set!"));
    441     pData->fMatched = vboxUsbObjNamePrefixMatch(pName, pNamePrefix, TRUE /* fCaseInSensitive */);
    442     LOG(("match result (%d)", (int)pData->fMatched));
    443 }
    444 
    445 typedef struct VBOXUSBOBJDRVOBJSEARCHER
    446 {
    447     PDEVICE_OBJECT pDevObj;
    448     PUNICODE_STRING pDrvName;
    449     PUNICODE_STRING pPdoNamePrefix;
    450     ULONG fFlags;
    451 } VBOXUSBOBJDRVOBJSEARCHER, *PVBOXUSBOBJDRVOBJSEARCHER;
    452 
    453 static DECLCALLBACK(BOOLEAN) vboxUsbObjDevObjSearcherWalker(PDEVICE_OBJECT pTopDo, PDEVICE_OBJECT pCurDo, PVOID pvContext)
    454 {
    455     RT_NOREF1(pTopDo);
    456     PVBOXUSBOBJDRVOBJSEARCHER pData = (PVBOXUSBOBJDRVOBJSEARCHER)pvContext;
    457     ASSERT_WARN(!pData->pDevObj, ("non-null dev object (0x%p) on enter", pData->pDevObj));
    458     pData->pDevObj = NULL;
    459     if (pCurDo->DriverObject
    460         && pCurDo->DriverObject->DriverName.Buffer
    461         && pCurDo->DriverObject->DriverName.Length
    462         && !RtlCompareUnicodeString(pData->pDrvName, &pCurDo->DriverObject->DriverName, TRUE /* case insensitive */))
    463     {
    464         LOG(("MATCHED driver:"));
    465         LOG_USTR(&pCurDo->DriverObject->DriverName);
    466         if ((pData->fFlags & VBOXUSBMONHUBWALK_F_ALL) != VBOXUSBMONHUBWALK_F_ALL)
    467         {
    468             VBOXUSBOBJNAMEPREFIXMATCHER Data = {0};
    469             Data.pNamePrefix = pData->pPdoNamePrefix;
    470             NTSTATUS Status = vboxUsbObjCheckName(pCurDo, vboxUsbObjDevNamePrefixMatcher, &Data);
    471             if (!NT_SUCCESS(Status))
    472             {
    473                 WARN(("vboxUsbObjCheckName failed Status (0x%x)", Status));
    474                 return TRUE;
    475             }
    476 
    477 
    478             LOG(("prefix match result (%d)", Data.fMatched));
    479             if ((pData->fFlags & VBOXUSBMONHUBWALK_F_FDO) == VBOXUSBMONHUBWALK_F_FDO)
    480             {
    481                 LOG(("VBOXUSBMONHUBWALK_F_FDO"));
    482                 if (Data.fMatched)
    483                 {
    484                     LOG(("this is a PDO object, skip it and stop search"));
    485                     /* stop search as we will not find FDO here */
    486                     return FALSE;
    487                 }
    488 
    489                 LOG(("this is a FDO object, MATCHED!!"));
    490             }
    491             else if ((pData->fFlags & VBOXUSBMONHUBWALK_F_PDO) == VBOXUSBMONHUBWALK_F_PDO)
    492             {
    493                 LOG(("VBOXUSBMONHUBWALK_F_PDO"));
    494                 if (!Data.fMatched)
    495                 {
    496                     LOG(("this is a FDO object, skip it and continue search"));
    497                     /* continue seach since since this could be a nested hub that would have a usbhub-originated PDO */
    498                     return TRUE;
    499                 }
    500 
    501                 LOG(("this is a PDO object, MATCHED!!"));
    502             }
    503 
    504         }
    505         else
    506         {
    507             LOG(("VBOXUSBMONHUBWALK_F_ALL"));
    508             LOG(("either PDO or FDO, MATCHED!!"));
    509         }
    510 
    511         /* ensure the dev object is not destroyed */
    512         ObReferenceObject(pCurDo);
    513         pData->pDevObj = pCurDo;
    514         /* we are done */
    515         return FALSE;
    516     }
    517     else
    518     {
    519         LOG(("driver object (0x%p) no match", pCurDo->DriverObject));
    520         if (pCurDo->DriverObject)
    521         {
    522             if (   pCurDo->DriverObject->DriverName.Buffer
    523                 && pCurDo->DriverObject->DriverName.Length)
    524             {
    525                 LOG(("driver name not match, was:"));
    526                 LOG_USTR(&pCurDo->DriverObject->DriverName);
    527                 LOG(("but expected:"));
    528                 LOG_USTR(pData->pDrvName);
    529             }
    530             else
    531             {
    532                 LOG(("driver name is zero, Length(%d), Buffer(0x%p)",
    533                         pCurDo->DriverObject->DriverName.Length, pCurDo->DriverObject->DriverName.Buffer));
    534             }
    535         }
    536         else
    537         {
    538             LOG(("driver object is NULL"));
    539         }
    540     }
    541     return TRUE;
    542236}
    543237
     
    583277        ExFreePool(szwHubList);
    584278    }
    585 }
    586 
    587 typedef struct VBOXUSBMONFINDHUBWALKER
    588 {
    589     PDRIVER_OBJECT pDrvObj;
    590 } VBOXUSBMONFINDHUBWALKER, *PVBOXUSBMONFINDHUBWALKER;
    591 
    592 static DECLCALLBACK(BOOLEAN) vboxUsbMonFindHubDrvObjWalker(PFILE_OBJECT pFile, PDEVICE_OBJECT pTopDo, PDEVICE_OBJECT pHubDo, PVOID pvContext)
    593 {
    594     RT_NOREF2(pFile, pTopDo);
    595     PVBOXUSBMONFINDHUBWALKER pData = (PVBOXUSBMONFINDHUBWALKER)pvContext;
    596     PDRIVER_OBJECT pDrvObj = pHubDo->DriverObject;
    597 
    598     ASSERT_WARN(!pData->pDrvObj, ("pDrvObj expected null on enter, but was(0x%p)", pData->pDrvObj));
    599     if (pDrvObj)
    600     {
    601         LOG(("found driver object 0x%p", pDrvObj));
    602         ObReferenceObject(pDrvObj);
    603         pData->pDrvObj = pDrvObj;
    604         return FALSE;
    605     }
    606 
    607     WARN(("null pDrvObj!"));
    608     return TRUE;
    609 }
    610 
    611 static PDRIVER_OBJECT vboxUsbMonHookFindHubDrvObj()
    612 {
    613     UNICODE_STRING szStandardHubName;
    614     szStandardHubName.Length = 0;
    615     szStandardHubName.MaximumLength = 0;
    616     szStandardHubName.Buffer = 0;
    617     RtlInitUnicodeString(&szStandardHubName, L"\\Driver\\usbhub");
    618 
    619     LOG(("Search USB hub"));
    620     VBOXUSBMONFINDHUBWALKER Data = {0};
    621     vboxUsbMonHubDevWalk(vboxUsbMonFindHubDrvObjWalker, &Data, VBOXUSBMONHUBWALK_F_ALL);
    622     if (Data.pDrvObj)
    623         LOG(("returning driver object 0x%p", Data.pDrvObj));
    624     else
    625         WARN(("no hub driver object found!"));
    626     return Data.pDrvObj;
    627279}
    628280
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