функция обратного вызова PLOAD_IMAGE_NOTIFY_ROUTINE (ntddk.h)
Вызывается операционной системой для уведомления драйвера о сопоставлении образа драйвера или пользовательского образа (например, БИБЛИОТЕКи DLL или EXE) с виртуальной памятью. Операционная система вызывает эту подпрограмму после сопоставления образа с памятью, но до вызова его точки входа.
Предупреждение
Действия, которые можно выполнять в этой подпрограмме, ограничены для безопасных вызовов. См. рекомендации.
Синтаксис
PLOAD_IMAGE_NOTIFY_ROUTINE PloadImageNotifyRoutine;
void PloadImageNotifyRoutine(
[in, optional] PUNICODE_STRING FullImageName,
[in] HANDLE ProcessId,
[in] PIMAGE_INFO ImageInfo
)
{...}
Параметры
[in, optional] FullImageName
Указатель на буферированную строку Юникода, которая идентифицирует исполняемый файл изображения. (Параметр FullImageName может иметь значение NULL в случаях, когда операционной системе не удается получить полное имя образа во время создания процесса.)
[in] ProcessId
Идентификатор процесса, в котором был сопоставлен образ, но этот дескриптор равен нулю, если недавно загруженный образ является драйвером.
[in] ImageInfo
Указатель на структуру IMAGE_INFO , содержащую сведения об изображении. См. заметки.
Возвращаемое значение
None
Remarks
Драйверы профилирования системы самого высокого уровня могут вызывать PsSetLoadImageNotifyRoutine , чтобы настроить подпрограмму уведомления о загрузке образа.
Операционная система не вызывает подпрограммы уведомления load-image, когда разделы, созданные с помощью атрибута SEC_IMAGE_NO_EXECUTE, сопоставляются с виртуальной памятью.
В Windows 7, Windows Server 2008 R2 и более ранних версиях Windows операционная система сохраняет внутреннюю системную блокировку во время вызовов подпрограмм уведомления load-image для образов, загруженных в адресное пространство процесса пользователя (пользовательское пространство). Чтобы избежать взаимоблокировок, подпрограммы уведомления о загрузке образа не должны вызывать системные подпрограммы, которые сопоставляют, выделяют, запрашивают, освобождают или выполняют другие операции с виртуальной памятью пользовательского пространства.
Перед выгрузкой драйвер должен удалить все обратные вызовы, которые он регистрирует. Обратный вызов можно удалить, вызвав подпрограмму PsRemoveLoadImageNotifyRoutine .
При загрузке main исполняемого образа для созданного процесса подпрограмма уведомления load-image выполняется в контексте нового процесса. Операционная система вызывает подпрограмму уведомления о загрузке образа драйвера в PASSIVE_LEVEL в критическом регионе с обычными БПП ядра всегда отключены, а иногда и с ядром и специальными БПП отключены.
При вызове подпрограммы уведомления load-image входное значение FullImageName указывает на буферированную строку Юникода, которая идентифицирует исполняемый файл изображения. (Параметр FullImageName может иметь значение NULL в случаях, когда операционной системе не удается получить полное имя образа во время создания процесса.) Дескриптор ProcessId идентифицирует процесс, в котором был сопоставлен образ, но этот дескриптор равен нулю, если недавно загруженный образ является драйвером. Чтобы просмотреть формат буферизированных данных в ImageInfo, см . IMAGE_INFO. Если флаг ExtendedInfoPresent установлен в структуре IMAGE_INFO , сведения являются частью более крупной расширенной версии структуры сведений об изображении , IMAGE_INFO_EX.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 2000. |
Целевая платформа | Универсальное |
Верхняя часть | ntddk.h (включая Ntddk.h) |
IRQL | PASSIVE_LEVEL |