On Thu, Jul 13, 2017 at 2:59 PM, Michal Necasek <[email protected]> wrote:
> > Hi Sameeh/Yuri, > > Thanks for the patch. For us to actually accept it, the patch needs to be > either explicitly licensed under MIT or submitted by someone with a signed > OCA (Oracle Contributors Agreement). > No problem, how should we explicitly license it under MIT? > > Do you happen to know if the patch also solves interoperability problems > with USBPcap? > Probably but we haven't tested that. > > > Regards, > Michal > > > On 7/12/2017 10:39 AM, Sameeh Jubran wrote: > >> From: Yuri Benditovich <[email protected]> >> >> VBoxUsbMon hooks PnP call in driver object of top level devices >> in stack of every hub. There is assumption that such a way it >> will receive PnP messages for PDOs of USB devices created by >> these hubs. This assumption is not always correct: if there is >> upper filter installed in stack of hub devices but not in stack >> of USB devices, the VBoxUsbMon does not receive devices' PnP >> messages and USB redirection does not work. >> --- >> src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp | 4 ++++ >> src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp | 10 ++++++++++ >> src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h | 2 ++ >> 3 files changed, 16 insertions(+) >> >> diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp >> b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp >> index bd1eeaa..63cf973 100644 >> --- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp >> +++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp >> @@ -725,6 +725,7 @@ static bool >> vboxUsbFltDevCheckReplugLocked(PVBOXUSBFLT_DEVICE >> pDevice, PVBOXUSBF >> LOG(("Matching: Need replug")); >> /* the device needs to be filtered, but the owner >> changes, replug needed */ >> bNeedReplug = true; >> + EnsureDeviceIsFiltered(pDevice->Pdo); >> } >> } >> else >> @@ -740,6 +741,7 @@ static bool >> vboxUsbFltDevCheckReplugLocked(PVBOXUSBFLT_DEVICE >> pDevice, PVBOXUSBF >> { >> bNeedReplug = true; >> LOG(("Matching: Need replug")); >> + EnsureDeviceIsFiltered(pDevice->Pdo); >> } >> } >> } >> @@ -852,6 +854,7 @@ static DECLCALLBACK(BOOLEAN) >> vboxUsbFltFilterCheckWalker(PFILE_OBJECT pFile, PDE >> if (fFilter) >> { >> LOG(("Matching: This device SHOULD be filtered")); >> + EnsureDeviceIsFiltered(Device.Pdo); >> /* this device needs to be filtered, but it's not, >> * leave the PDO in array to issue a replug request >> for it >> * later on */ >> @@ -1295,6 +1298,7 @@ NTSTATUS VBoxUsbFltPdoAdd(PDEVICE_OBJECT pPdo, >> BOOLEAN *pbFiltered) >> ASSERT_WARN(pCtx, ("zero ctx")); >> ASSERT_WARN(uId, ("zero uId")); >> pDevice->enmState = VBOXUSBFLT_DEVSTATE_CAPTURING; >> + EnsureDeviceIsFiltered(pPdo); >> } >> else >> { >> diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp >> b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp >> index dba6c1d..307abe5 100644 >> --- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp >> +++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp >> @@ -1259,6 +1259,16 @@ static DECLCALLBACK(BOOLEAN) >> vboxUsbMonHookDrvObjWalker(PFILE_OBJECT pFile, PDEV >> return FALSE; >> } >> + >> +/** >> +* Ensure PnP hooks will be installed in the driver that >> + serves USB device PDO >> +*/ >> +void EnsureDeviceIsFiltered(PDEVICE_OBJECT Pdo) >> +{ >> + vboxUsbMonHookDrvObjWalker(NULL, NULL, Pdo, NULL); >> +} >> + >> /** >> * Finds all USB drivers in the system and installs hooks if haven't >> done already. >> */ >> diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h >> b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h >> index b218bde..c64d789 100644 >> --- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h >> +++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h >> @@ -58,4 +58,6 @@ typedef FNVBOXUSBMONDEVWALKER *PFNVBOXUSBMONDEVWALKER; >> VOID vboxUsbMonHubDevWalk(PFNVBOXUSBMONDEVWALKER pfnWalker, PVOID >> pvWalker, ULONG fFlags); >> +void EnsureDeviceIsFiltered(PDEVICE_OBJECT Pdo); >> + >> #endif /* #ifndef ___VBoxUsbMon_h___ */ >> >> > _______________________________________________ > vbox-dev mailing list > [email protected] > https://www.virtualbox.org/mailman/listinfo/vbox-dev > -- Respectfully, *Sameeh Jubran* *Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>* *Software Engineer @ Daynix <http://www.daynix.com>.*
_______________________________________________ vbox-dev mailing list [email protected] https://www.virtualbox.org/mailman/listinfo/vbox-dev
