Что означает код NTSTATUS 0xC00000E8 (STATUS_INVALID_USER_BUFFER)?

 
Предыдущий Следующий
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 — проверяйте правила именно этого метода, а не увеличивайте размер буфера наугад.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.