| Предыдущий | Следующий |
| INVALID_PROCESS_ATTACH_ATTEMPT | INVALID_SOFTWARE_INTERRUPT |
INVALID_PROCESS_DETACH_ATTEMPT
Проверка ошибок INVALID_PROCESS_DETACH_ATTEMPT имеет значение 0x00000006.
Эта проверка возникает крайне редко. Эта проверка ошибки может быть вызвана вызовом процедуры KeStackAttachProcess с последующим вызовом KeUnstackDetachProcess в реализации драйвером функции обратного вызова PLOAD_IMAGE_NOTIFY_ROUTINE . Расширение Обратный вызов выполняется в потоке процесса, в который был загружен образ.
Важно
Эта статья предназначена для программистов. Если при работе с компьютером появился синий экран с кодом INVALID_PROCESS_DETACH_ATTEMPT, см. Устранение ошибок синего экрана.
Функция обратного вызова PLOAD_IMAGE_NOTIFY_ROUTINE
Вызывается операционной системой для уведомления драйвера о том, что образ драйвера или пользовательский образ (например, DLL или EXE) отображён в виртуальную память. Расширение Операционная система вызывает эту процедуру после отображения образа в память, но до вызова его точки входа.
PLOAD_IMAGE_NOTIFY_ROUTINE PloadImageNotifyRoutine;
void PloadImageNotifyRoutine(
[in, optional] PUNICODE_STRING FullImageName,
[in] HANDLE ProcessId,
[in] PIMAGE_INFO ImageInfo
)
{...}
Системные драйверы профилирования верхнего уровня могут вызвать PsSetLoadImageNotifyRoutine, чтобы зарегистрировать свою процедуру уведомления о загрузке образа.
Операционная система не вызывает процедуры уведомления о загрузке образа, когда разделы, созданные с атрибутом SEC_IMAGE_NO_EXECUTE, отображаются в виртуальную память.
В Windows 7, Windows Server 2008 R2 и более ранних версиях Windows операционная система удерживает внутреннюю системную блокировку во время вызова процедур уведомления о загрузке образов, загружаемых в адресное пространство пользовательского процесса. Во избежание взаимоблокировок процедуры уведомления о загрузке образа не должны вызывать системные процедуры, которые отображают, выделяют, запрашивают, освобождают или выполняют другие операции с виртуальной памятью пользовательского пространства.
Перед выгрузкой драйвер обязан удалить все зарегистрированные им обратные вызовы. Удалить обратный вызов можно с помощью процедуры PsRemoveLoadImageNotifyRoutine.
Когда загружается основной исполняемый образ вновь созданного процесса, процедура уведомления о загрузке образа выполняется в контексте нового процесса. Расширение Операционная система вызывает процедуру уведомления драйвера о загрузке образа на уровне PASSIVE_LEVEL внутри критической области, где обычные APC ядра всегда отключены, а иногда отключены как обычные, так и специальные APC ядра.
При вызове процедуры уведомления о загрузке образа входной параметр FullImageName указывает на буферизованную строку Unicode, идентифицирующую файл исполняемого образа. (Параметр FullImageName может быть NULL, если операционной системе не удалось получить полное имя образа при создании процесса.) Дескриптор ProcessId идентифицирует процесс, в который отображён образ, но равен нулю, если вновь загруженный образ является драйвером. Формат буферизованных данных в ImageInfo описан в IMAGE_INFO. Если флаг ExtendedInfoPresent установлен в структуре IMAGE_INFO, сведения являются частью более крупной расширенной версии структуры информации об образе, IMAGE_INFO_EX.
Нужно найти другой код? Найти другой код состояния или ошибки.