Поделиться через


Рабочие элементы ввода-вывода NDIS

Драйверы могут ставить в очередь функции обратного вызова рабочих элементов ввода-вывода для последующего выполнения. NDIS вызывает функцию обратного вызова, указанную драйвером, в irQL = PASSIVE_LEVEL. Это повышает производительность системы, позволяя текущей функции немедленно возвращаться, а драйверу выполнять работу позже при более низком irQL.

NDIS 6.0 и более поздних версий предоставляют функции-оболочки для подпрограмм рабочих элементов ввода-вывода ядра IoAllocateWorkItem, IoFreeWorkItem и IoQueueWorkItem. Вместо частной структуры IO_WORKITEM NDIS использует частную структуру NDIS_IO_WORKITEM .

Драйверы NDIS 6.0 вызывают функцию NdisAllocateIoWorkItem для выделения рабочего элемента. Драйверы мини-порта NDIS передают NdisAllocateIoWorkItem дескриптор адаптера, который NDIS передал функции MiniportInitializeEx . NdisAllocateIoWorkItem получает объект устройства, связанный с дескриптором, и передает объект устройства в подпрограмму IoAllocateWorkItem . Драйверы фильтров передают дескриптор фильтра.

Примечание Драйверы протоколов не могут использовать NdisAllocateIoWorkItem , так как NDIS не связывает драйверы протокола с объектами устройства.

Драйверы NDIS вызывают функцию NdisQueueIoWorkItem для постановки рабочих элементов в очередь. Рабочие элементы NDIS используют тип очереди CriticalWorkQueue .

Драйверы NDIS должны вызывать функцию NdisFreeIoWorkItem , чтобы освободить ресурсы, связанные с рабочим элементом, выделенным NdisAllocateIoWorkItem .

Потоки системной рабочей роли