| Предыдущий | Следующий |
| STATUS_BAD_DESCRIPTOR_FORMAT | STATUS_UNEXPECTED_IO_ERROR |
STATUS_INVALID_USER_BUFFER
Что означает STATUS_INVALID_USER_BUFFER
STATUS_INVALID_USER_BUFFER означает, что компонент ядра не смог безопасно использовать буфер, переданный из пользовательского режима. Для драйвера это прежде всего проблема способа передачи памяти, проверки адреса или времени жизни буфера, а не состояние учётной записи пользователя.
Что проверить
- Определите метод I/O для конкретного IOCTL/FSCTL: буферизованный, прямой или
METHOD_NEITHER. От этого зависит, кто проверяет и фиксирует память. - Для
METHOD_NEITHERпроверьте адрес и длину в контексте исходного процесса, учитывайте режим инициатора и корректно обрабатывайте исключения при обращении к пользовательской памяти. - Если запрос откладывается в очередь, не храните исходный пользовательский указатель после выхода из исходного контекста. Скопируйте данные или зафиксируйте и отобразите страницы штатным механизмом.
Как локализовать причину
Сопоставьте сбой с конкретным кодом управления, размером входного или выходного буфера и веткой драйвера, которая обращается к памяти. Если ошибка возникает только при асинхронной обработке, особенно подозрителен срок жизни адреса. Если только для одного метода I/O — проверяйте правила именно этого метода, а не увеличивайте размер буфера наугад.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
