NTSTATUS CUsbDkHubFilterStrategy::PNPPreProcess(PIRP Irp) { auto irpStack = IoGetCurrentIrpStackLocation(Irp); if ((irpStack->MinorFunction == IRP_MN_QUERY_DEVICE_RELATIONS) && (BusRelations == irpStack->Parameters.QueryDeviceRelations.Type)) { return PostProcessOnSuccess(Irp, [this](PIRP Irp) { CNonPagedDeviceRelations Relations; auto status = Relations.Create((PDEVICE_RELATIONS)Irp->IoStatus.Information); if (!NT_SUCCESS(status)) { TraceEvents(TRACE_LEVEL_ERROR, TRACE_FILTERDEVICE, "%!FUNC! Failed to create device relations object: %!STATUS!", status); return; } TraceEvents(TRACE_LEVEL_ERROR, TRACE_FILTERDEVICE, "%!FUNC! Starting relations array processing:"); Relations.Dump(); DropRemovedDevices(Relations); AddNewDevices(Relations); WipeHiddenDevices(Relations); TraceEvents(TRACE_LEVEL_ERROR, TRACE_FILTERDEVICE, "%!FUNC! Finished relations array processing"); }); } return CUsbDkFilterStrategy::PNPPreProcess(Irp); }
NTSTATUS CUsbDkHubFilterStrategy::PNPPreProcess(PIRP Irp) { auto irpStack = IoGetCurrentIrpStackLocation(Irp); if ((irpStack->MinorFunction == IRP_MN_QUERY_DEVICE_RELATIONS) && (BusRelations == irpStack->Parameters.QueryDeviceRelations.Type)) { return PostProcessOnSuccess(Irp, [this](PIRP Irp) { CDeviceRelations Relations((PDEVICE_RELATIONS)Irp->IoStatus.Information); DropRemovedDevices(Relations); AddNewDevices(Relations); WipeHiddenDevices(Relations); }); } return CUsbDkFilterStrategy::PNPPreProcess(Irp); }