Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разработчики минидрайверов для потоковой передачи могут разрешить драйверу класса выполнить задачи по синхронизации. Когда мини-драйверы регистрируются в драйвере класса, они могут выбрать синхронизацию, предоставляемую драйвером класса, установив элементу TurnOffSynchronization в HW_INITIALIZATION_DATA значение FALSE.
Когда драйвер класса обрабатывает синхронизацию, он гарантирует, что два фрагмента кода минидрайвера никогда не выполняются одновременно. Драйвер класса ставит в очередь все потоковые запросы и передает их минидрайверу по одному за раз.
Одна из целей этой синхронизации заключается в том, чтобы избавить разработчика мини-драйвера от необходимости разбираться со всеми деталями синхронизации драйверов и очереди запросов в многозадачной, реентерабельной, многопроцессорной среде. Однако некоторые минидрайверы не должны использовать его. В разделе "Примеры синхронизации" приведены два примера, которые иллюстрируют, что минидрайвер должен делать в отношении синхронизации.
Отключение синхронизации класса потоков означает, что все запросы немедленно и асинхронно вызываются к минидрайверу в контексте передающего потока на уровне PASSIVE_LEVEL. Исключения из предыдущего правила : HwCancelPacket, TimeoutHandler и таймер. Они вызываются на уровне DISPATCH_LEVEL. Последним исключением является обработчик прерываний, который вызывается в DIRQL.
При отключении синхронизации мини-драйвер отвечает за выполнение синхронизации в соответствии с моделью WDM. Если минидрайвер вызывает на уровне PASSIVE_LEVEL, он может быть прерван любыми более высокоуровневыми событиями IRQL, такими как DPC или прерывания. Аналогичным образом, если минидрайвер вызывается на уровне DISPATCH_LEVEL, он впоследствии может быть прерван прерываниями. Функции minidriver, управляющие общими ресурсами, должны синхронизировать доступ.
Несколько запросов могут быть одновременно выданы одному или разным потокам при отключении синхронизации класса потока. Минидрайвер должен поставить в очередь свои собственные запросы и обрабатывать аппаратную синхронизацию с другими потоками и ISR. Спинлоки, мьютексы и KeSynchronizeExecution — это некоторые объекты синхронизации, доступные минидрайверам потоков, работающим без синхронизации классов потоков.