Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Одной из основных обязанностей стека драйверов является передача данных между приложениями в пользовательском режиме и устройствами системы. Операционная система предоставляет следующие три метода доступа к буферам данных:
Буферизованный ввод-вывод
Операционная система создает некстраничный системный буфер, равный размеру буфера приложения. Для операций записи диспетчер ввода-вывода копирует данные пользователей в системный буфер перед вызовом стека драйверов. Для операций чтения диспетчер операций ввода-вывода копирует данные из системного буфера в буфер приложения после завершения запрошенной операции стека драйверов.
Дополнительные сведения см. в разделе Использование буферизованного ввода-вывода.
Прямой ввод-вывод
Операционная система блокирует буфер приложения в памяти. Затем он создает список дескриптора памяти (MDL), который определяет заблокированные страницы памяти и передает MDL в стек драйверов. Драйверы получают доступ к заблокированным страницам через MDL.
Дополнительные сведения см. в "Использование прямого ввода-вывода".
Ни буферизованного ввода-вывода, ни прямого ввода-вывода
Операционная система передает виртуальный начальный адрес и размер буфера приложения в стек драйверов. Буфер доступен только из драйверов, которые выполняются в контексте потока приложения.
Дополнительные сведения см. в разделе "Использование ни буферизованного, ни прямого ввода-вывода".
Для запросов IRP_MJ_READ и IRP_MJ_WRITE драйверы указывают метод ввода-вывода с помощью флагов в каждой структуре DEVICE_OBJECT . Дополнительные сведения см. в инициализации объекта устройства.
Для запросов IRP_MJ_DEVICE_CONTROL и IRP_MJ_INTERNAL_DEVICE_CONTROL метод ввода-вывода определяется значением TransferType , содержащимся в каждом значении IOCTL. Дополнительные сведения см. в разделе Определение кодов управления ввода-вывода.
Все драйверы в стеке драйверов должны использовать один и тот же метод доступа к буферу для каждого запроса, за исключением драйвера верхнего уровня, который может выбрать метод "ни один из методов" независимо от метода, используемого более низкими драйверами.