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:
Yuri Benditovich 2020-01-02 14:58:39 +02:00
parent 653a1097ac
commit a9ccbf5baf
2 changed files with 12 additions and 0 deletions

View file

@ -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;
}

View file

@ -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;