From 1a1edc7f5a756ccd235be378b2bdae0ef32e92ef Mon Sep 17 00:00:00 2001 From: Dmitry Fleytman Date: Mon, 17 Feb 2014 16:05:15 +0200 Subject: [PATCH] UsbDk: CUsbDkControl: Dump all children devices on PING Signed-off-by: Dmitry Fleytman --- UsbDk/ControlDevice.cpp | 17 +++++++++++++++++ UsbDk/ControlDevice.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/UsbDk/ControlDevice.cpp b/UsbDk/ControlDevice.cpp index 460e783..424ca26 100644 --- a/UsbDk/ControlDevice.cpp +++ b/UsbDk/ControlDevice.cpp @@ -57,6 +57,12 @@ void CUsbDkControlDeviceQueue::DeviceControl(WDFQUEUE Queue, { TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, "Called IOCTL_USBDK_PING\n"); + //TEMP: Dump children devices + { + auto devExt = UsbDkControlGetContext(WdfIoQueueGetDevice(Queue)); + devExt->UsbDkControl->DumpAllChildren(); + } + LPTSTR outBuff; size_t outBuffLen; status = WdfRequestRetrieveOutputBuffer(Request, 0, (PVOID *)&outBuff, &outBuffLen); @@ -74,6 +80,14 @@ void CUsbDkControlDeviceQueue::DeviceControl(WDFQUEUE Queue, WdfRequestComplete(Request, status); } +void CUsbDkControlDevice::DumpAllChildren() +{ + m_FilterDevices.ForEach([](CUsbDkFilterDevice *Filter) + { + Filter->EnumerateChildren([](CUsbDkChildDevice *Child){ Child->Dump(); }); + }); +} + NTSTATUS CUsbDkControlDevice::Create(WDFDRIVER Driver) { CUsbDkControlDeviceInit DeviceInit; @@ -103,6 +117,9 @@ NTSTATUS CUsbDkControlDevice::Create(WDFDRIVER Driver) status = m_DeviceQueue->Create(); if (NT_SUCCESS(status)) { + auto deviceContext = UsbDkControlGetContext(m_Device); + deviceContext->UsbDkControl = this; + FinishInitializing(); } diff --git a/UsbDk/ControlDevice.h b/UsbDk/ControlDevice.h index 8a4e068..7950417 100644 --- a/UsbDk/ControlDevice.h +++ b/UsbDk/ControlDevice.h @@ -37,6 +37,9 @@ public: void UnregisterFilter(CUsbDkFilterDevice &FilterDevice) { m_FilterDevices.Remove(&FilterDevice); } + //TODO: Temporary, until enumeration implementation + void DumpAllChildren(); + static bool Allocate(); static void Deallocate() { delete m_UsbDkControlDevice; }