I'm writing a driver that needs synchronization with vertical blank interrupt to send some data down the USB pipe.
In user-mode there are Direct X functions available for this like IDXGIOutput::WaitForVBlank and few older ones. I am not able to use them from kernel.
I found another interface in Windows 8 SDK: D3DKMTWaitForVerticalBlankEvent which even has a kernel header (the header is in /km/ folder of the SDK), but it requires gdi32.lib
which a user-mode library and linking with it cripples the driver.
Is there any way I can wait or get a notification about vertical blank occurence (without polling)?