Поделиться через


функция обратного вызова 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

См. также раздел

IMAGE_INFO

IMAGE_INFO_EX

PsSetLoadImageNotifyRoutine