2012-06-22 9 views
1

Я пишу драйвер, которому требуется синхронизация с вертикальным пустым прерыванием, чтобы отправить некоторые данные по USB-трубе.Ожидание вертикальной заготовки в режиме ядра?

В пользовательском режиме доступны такие функции Direct X, как IDXGIOutput::WaitForVBlank и несколько более старых. Я не могу использовать их из ядра. Я нашел еще один интерфейс в SDK Windows 8: D3DKMTWaitForVerticalBlankEvent, который даже имеет заголовок ядра (заголовок находится в/км/папке SDK), но для этого требуется gdi32.lib, который использует библиотеку пользовательского режима и связывает с ней калечащий драйвер.

Есть ли способ подождать или получить уведомление о вертикальном пустоте (без опроса)?

ответ

1

Допустимо ли иметь часть пользовательского режима вашего драйвера? У вас может быть вспомогательный процесс в пользовательском режиме, который ждет VBI, и каким-то образом этот процесс запускает ваш KM-драйвер.

+0

вот как я это делаю прямо сейчас; хотя я бы хотел избавиться от накладных расходов на отправку IOCTLS до драйвера. Мне нужно каждую микросекунду, которую я могу получить. – kurczak

1

Вы можете использовать именованное событие.

  • В вашем драйвере создайте именованное событие и поток ядра, чтобы ждать события, прежде чем выполнять настоящую работу.
  • В вспомогательном приложении/службе пользовательского режима откройте именованное событие и создайте поток для вызова IDXGIOutput :: WaitForVBlank, а затем сразу же установите именованное событие.

Конечно, я предположил бы, что вы работали на это давно и переехал на ...

 Смежные вопросы

  • Нет связанных вопросов^_^