[vbox-dev] [PATCH] VBoxUsbMon: Hook proper driver object
Sameeh Jubran
sameeh at daynix.com
Thu Jul 13 12:05:58 UTC 2017
On Thu, Jul 13, 2017 at 2:59 PM, Michal Necasek <michal.necasek at oracle.com>
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 <yuri.benditovich at daynix.com>
>>
>> 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
> vbox-dev at virtualbox.org
> 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>.*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20170713/ac6c59ba/attachment.html>
More information about the vbox-dev
mailing list