driver: maintain owner process id field of CUsbDkRedirection
Set owner process id when device redirection successfully established (i.e. filter device is open and respective user mode handle created for the process). Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
This commit is contained in:
parent
653a1097ac
commit
a9ccbf5baf
2 changed files with 12 additions and 0 deletions
|
|
@ -1120,6 +1120,12 @@ void CUsbDkRedirection::Dump(LPCSTR message) const
|
|||
m_DeviceID, m_InstanceID);
|
||||
}
|
||||
|
||||
bool CUsbDkRedirection::MatchProcess(ULONG pid)
|
||||
{
|
||||
TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_WDFDEVICE, "%!FUNC! pid 0x%X, owner 0x%X", pid, m_OwnerPid);
|
||||
return pid == m_OwnerPid;
|
||||
}
|
||||
|
||||
void CUsbDkRedirection::NotifyRedirectorCreated(CUsbDkFilterDevice *RedirectorDevice)
|
||||
{
|
||||
TraceEvents(TRACE_LEVEL_ERROR, TRACE_WDFDEVICE, "%!FUNC! Redirector created for");
|
||||
|
|
@ -1209,6 +1215,9 @@ NTSTATUS CUsbDkRedirection::CreateRedirectorHandle(HANDLE RequestorProcess, PHAN
|
|||
status = m_RedirectorDevice->CreateUserModeHandle(RequestorProcess, ObjectHandle);
|
||||
if (NT_SUCCESS(status))
|
||||
{
|
||||
ULONG pid = (ULONG)(ULONG_PTR)PsGetCurrentProcessId();
|
||||
TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_WDFDEVICE, "%!FUNC! done for process 0x%X", pid);
|
||||
m_OwnerPid = pid;
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,8 @@ public:
|
|||
bool IsPreparedForRemove() const
|
||||
{ return m_RemovalInProgress; }
|
||||
|
||||
bool MatchProcess(ULONG pid);
|
||||
|
||||
NTSTATUS WaitForAttachment()
|
||||
{ return m_RedirectionCreated.Wait(true, -SecondsTo100Nanoseconds(120)); }
|
||||
|
||||
|
|
@ -216,6 +218,7 @@ private:
|
|||
CWdmEvent m_RedirectionCreated;
|
||||
CWdmEvent m_RedirectionRemoved;
|
||||
CUsbDkFilterDevice *m_RedirectorDevice = nullptr;
|
||||
ULONG m_OwnerPid = 0;
|
||||
|
||||
bool m_RemovalInProgress = false;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue