Я не знаю, существует ли существующее решение.Но вы можете создать свой собственный.
В Windows все прерывания имеют приоритет.Таким образом, если код драйвера работает на высоком уровне IRQL, ваш драйвер не сможет обслуживать ваше прерывание, если его уровень ниже.По крайней мере, он не сможет работать на том же процессоре.
Я бы сделал следующее:
- Настройте драйвер для работы на одном процессоре (непомните, как это сделать, но такая опция определенно существует).
- Добавьте управляющий код ввода-вывода в свой драйвер.
- В процедуре
Dispatch
вашего драйвера выполняйте занятое ожиданиевысокий IRQL (подробнее об этом позже) - Позвоните своему водителю (через
DeviceIoControl
) для имитации стресса.
Ожидание при занятости может выглядеть примерно так:
KIRQL oldIrql;
__int64 t1, t2;
KeRaiseIrql(31, &oldIrql);
KeQuerySystemTime((LARGE_INTEGER*) &t1);
while (1)
{
KeQuerySystemTime((LARGE_INTEGER*) &t2);
if (t1 - t1 > /* put the needed time interval */)
break;
}
KeLowerIrql(oldIrql);