Ожидание вертикального пробела в режиме ядра?

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

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

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


person kurczak    schedule 22.06.2012    source источник


Ответы (2)


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

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

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

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

Конечно, я полагаю, что вы уже давно разобрались с этим и двинулись дальше...

person dr-stevep    schedule 12.03.2013