Commit graph

196 commits

Author SHA1 Message Date
Dmitry Fleytman
2ca0b2a3ab UsbDk: Rename CStringComparator -> CStringBase
This class will contain additional logic besides compares,
the name needs to be adjusted.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
975bf63c3f UsbDk: Trivial: fix trace groups
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
0687192cb8 UsbDk: Drop uneeded members of redirector strategy
Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
d9618e05e7 UsbDk: Move abstract filter strategy to a separate file
Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
298c37e024 UsbDk: Rename DevFilterStrategy RedirectorStrategy
Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
82c21ede3e UsbDk: Cosmetic changes in FilterDevice
Move strategy definition to a separate function

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
f067af15e2 UsbDk: Cosmetic changes in FilterDevice
Rename CreateFilterDevice -> InitializeFilterDevice

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
cab94efc44 UsbDk: Cosmetic changes in FilterDevice
Fix traces severity

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Pavel Gurvich
5b7747afe7 UsbDk: Cosmetic changes
1. Remove unnesesary UNREFERENCED_PARAMETER
2. Add TRACE in UsbDk/Driver.cpp

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
9d68c75522 UsbDk: Rename RedirectorDevice -> RedirectorStrategy
No real changes done in this commit.
A few files renamed only.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
9e37474e50 UsbDk: Implement PDO filering instead of replacement
This patch implements better scheme for USB device
IDs patching. Instead of replacing PDO on QDR completion
and processing all requests coming to the PDO explicitely
we attach filter device to the PDO and indicate is as-is
to PnP Manager.

WDF implements direct pass-through for all requests
coming to PDO implicitely and we only intercept requests
we really have to filter.

Though both schemes are not fully documented the later
one doesn't require explicit coding to preserve PnP state
machine correctness. It also requires much less code overall.

This patch passed basic verification (install, redirect, uninstall)
with driver verifier.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:13 +03:00
Dmitry Fleytman
a7cd673ab3 UsbDk: Fix invalid status returned for IOCTL IRPs
API doesn't fill IOSTATUS->STATUS field when IRP
processing finished synchronously. In this case IoCallDriver
returns proper status directly.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
94a5284e2c UsbDk: Fix verifier BSOD in CIrp
For some requests API requires iostatus->status
IRP field to be initialized with STATUS_NOT_SUPPORTED.

Driver verifier checks this and produces BSOD on violation.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
c98b49296a UsbDk: Introduce CRegText:MatchPrefix() method
MatchPrefix() checks whether given string is a prefix
of at least one string held by CRegText object

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
688a990c0b UsbDkHelper: Improve error printout
Print symlink name on open failure

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
2073325b0f UsbDkHelper: Fix PCH creation directives
RedirectorAccess.cpp and DriverFile.cpp should not
create precompiled headers.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
97fdb05b36 UsbDkController: Update test application with new interface of UsbDkHelper
Update test application with new interface of UsbDkHelper

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
9e800256d1 UsbDkHelper: Integrate new redirection functionality
Integrate redirection functionality in driver with UsbDkHelper.

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
78e7e610ef UsbDkHelper: Refactoring of UsbDkDriverAccess
Make UsbDkDriverAccess inherited from UsbDkDriverFile

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
1503502858 RHHelper: Introduce UsbDkRedirectorAccess class
UsbDkRedirectorAccess is responsible for redirected device interfacing

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
82a7c6d339 UsbDkHelper: Introduce UsbDkDriverFile class
UsbDkDriverFile is responsible for operations on driver symlinks

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Pavel Gurvich
cabdf800c4 UsbDk&UsbDkHelper&UsbDkController: Remove separate reset API
Reset should be part of start/stop redirection. No separate API needed

Signed-off-by: Pavel Gurvich <pavel@daynix.com>
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
bd7c2fd950 UsbDk: Simplify QDR processing
QDR processing greatly simplified by using "Forward-Wait-Process"
scheme instead of "Forward-Completion-Workitem-Process".

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
fada79a253 UsbDk: Introduce CIrp::ForwardAndWait
A generic function for sending IRP synchronously

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
c4781f5a0a UsbDk: Fix filter device context leak
Fixed leak of filter device context memory
on non-filtered device traversal.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
51b02ec56c UsbDk: Fix children devices removal
Removal of control device requires passive level.

Children device list is locked and its enumeration
is performed on IRQL raised by lock which is a problem
for children removal case.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
fe447f627d UsbDk: CIrp: Set event for async. completions only
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
780ea265cd UsbDk: Make CWdmDeviceAccess return non-paged buffers
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
b9222c825a UsbDk: Create redirector as control device, not PDO
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
bdeaae2b8e UsbDk: Util: static buffer duplication function
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
d3c4ba2cd5 UsbDk: Fix CMemoryBuffer leaks
Make destructor virtual to avoid the classical problem

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
3ab3ebf502 UsbDk: make string comparator work on any IRQL
Do not use RtlCompare...String() functions because
they require PASSIVE_LEVEL.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
4e201d269f UsbDk: Introduce ARRAY_SIZE macro for kernel mode
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
e4e10ca028 UsbDk: Filter device - store driver handle
Driver handle will be needed for redirector devices creation

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
f240ed2f29 UsbDk: Simplify redirector device init code
Make INIT and DEVICE classes friends to allow
INIT class access DEVICE callbacks directly.

Do not pass callback pointers from DEVICE to its INIT
via function parameters.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
bae8efb419 UsbDk: Trivial: remove dead code
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
2b6266aa10 UsbDk: Fix redirector device cleanup
Do not delete explicitely, use CWdfDevice::Delete()

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
2f94f30148 UsbDk: Trivial: fix control device traces
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
499019813b UsbDk: Fix control device cleanup
Delete control device object on CleanupContext callback

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
396ee1ed68 UsbDk: Fix CWdfDevice class destruction
Proper WDF object destruction scheme is following:

  1. WdfObjectDelete
  2. WDF waits for all object counter to become zero
  3. WDF calls ContextCleanup callback
  4. ContextCleanup deletes all pointers in context

If CWdfDelete instance deleted explicitely context cleans up too early.
This patch introduces CWdfObject::Delete() function to be used instead
of delete operator.

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
4db384084e UsbDk: Generalize CRefCountingHolder class
Make object delete function configurable

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
010e4c2cf1 UsbDk: Generalize CObjHolder class
Make object delete function configurable

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
f2b1a12610 UsbDk: CObjHolder: Replace NULL with nullptr
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
5abd2b78c1 UsbDk: CPreAllocatedDeviceInit: Make minor functions array const
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
871c77ef82 UsbDk: Fix incorrect indentation
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
c6c5c88f20 UsbDk: Encapsulate redirector device into child device
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
0d87c0a69b UsbDk: RedirectorDevice: Drop OS object accessor 2014-05-11 19:26:12 +03:00
Dmitry Fleytman
c760152fd6 UsbDk: WdfDevice: Add accessors for OS objects
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
2db3b5c961 UsbDk: Additional traces in redirector logic
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00
Dmitry Fleytman
864f65021e UsbDk: Rename RedirectorPDO -> RedirectorDevice
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
2014-05-11 19:26:12 +03:00