Как получить отфильтрованную информацию о целевом устройстве из фильтра Windows высшего класса

Я пишу фильтр высшего класса для устройства WPD. Я определил функции обратного вызова для Read/Write/Ioctl, из объявления обратного вызова я мог получить WDFQueue, WDFRequest.

VOID WdfFltrDeviceControl(IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t OutputBufferLength, IN size_t InputBufferLength, IN ULONG IoControlCode)

Но из параметра Queue или Request я мог получить только информацию об устройстве, которое создано моим драйвером. Есть ли способ получить информацию о подключенных устройствах, которые мой драйвер в настоящее время фильтрует?(Например, из журнала ядра я вижу запрос ioctl на мое устройство Android, но я не знаю, как получить объект устройства Android для получить имя устройства)

1 ответ

Вы действительно должны иметь возможность получить информацию о вашем запросе устройства WPD, используя параметры этого метода. Если это не так, возможно, ваш код или.inf фильтр настроен неправильно.

Вы можете использовать этот фрагмент кода, чтобы проверить, какое устройство вы сейчас фильтруете:

WDFDEVICE device = WdfIoQueueGetDevice(Queue);
WCHAR id[255];
ULONG resultLength;
NTSTATUS status = WdfDeviceQueryProperty(device, DevicePropertyHardwareID, sizeof(id), id, &resultLength);
if(NT_SUCCESS(status))
{
//check the device id here
} 

Или, если вы предпочитаете какой-то другой параметр, вы можете найти список здесь

Другие вопросы по тегам