Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье перечислены и описаны непрозрачные структуры ядра Windows. Для многих из этих структур драйверы не должны получать доступ к данным или изменять элементы, но вместо этого следует использовать системные подпрограммы для доступа к информации. Дополнительные сведения см. в каждой структуре.
EPROCESS
Структура EPROCESS — это непрозрачная структура, которая служит объектом процесса для процесса.
Некоторые подпрограммы, такие как PsGetProcessCreateTimeQuadPart, используют EPROCESS для идентификации процесса для выполнения операций. Драйверы могут использовать процедуру PsGetCurrentProcess для получения указателя на объект процесса для текущего процесса и могут использовать процедуру ObReferenceObjectByHandle для получения указателя на объект процесса, связанный с указанным дескриптором. Глобальная переменная PsInitialSystemProcess указывает на объект процесса для системного процесса.
Объект процесса — это объект Object Manager. Драйверы должны использовать подпрограммы Диспетчера объектов, такие как ObReferenceObject и ObDereferenceObject для поддержания количества ссылок объекта.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
ETHREAD
Структура ETHREAD — это скрытая структура, которая служит объектом потока для нити.
Некоторые подпрограммы, такие как PsIsSystemThread, используют ETHREAD для идентификации потока для работы. Драйверы могут использовать подпрограмму PsGetCurrentThread для получения указателя на объект потока для текущего потока и могут использовать подпрограмму ObReferenceObjectByHandle для получения указателя на объект потока, связанный с указанным дескриптором.
Объект потока — это объект диспетчера объектов. Драйверы должны использовать подпрограммы Диспетчера объектов, такие как ObReferenceObject и ObDereferenceObject для поддержания количества ссылок объекта.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
EX_RUNDOWN_REF
Структура EX_RUNDOWN_REF — это непрозрачная системная структура, содержащая сведения о состоянии защиты от запуска связанного общего объекта.
typedef struct _EX_RUNDOWN_REF {
... // opaque
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
Подпрограммы защиты от запуска, перечисленные в нижней части этой страницы, принимают указатель на структуру EX_RUNDOWN_REF в качестве первого параметра.
Для получения дополнительной информации см. Защита от разряда. Заголовок: Wdm.h. Включите Wdm.h.
EX_TIMER
Структура EX_TIMER является непрозрачной структурой, используемой операционной системой для представления объекта таймера EX_TIMER .
typedef struct _EX_TIMER *PEX_TIMER;
Все члены этой структуры непрозрачны для драйверов.
Для следующих подпрограмм таймера ExXxxтребуется указатель на выделенную системой структуру EX_TIMER в качестве входного параметра:
Операционная система создает объекты таймера на основе EX_TIMER. Чтобы получить такой объект таймера, драйвер вызывает подпрограмму ExAllocateTimer . Если этот объект больше не нужен, драйвер отвечает за удаление объекта путем вызова ExDeleteTimer.
Дополнительные сведения см. в разделе "Подпрограммы таймера ExXxx" и объектов EX_TIMER.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
Быстрый мьютекс
Структура FAST_MUTEX — это непрозрачная структура данных, представляющая быстрый мьютекс. Подпрограмма ExInitializeFastMutex инициализирует эту структуру.
Дополнительные сведения о быстрых мьютексах см. в разделе "Быстрые мьютексы" и "Защищенные мьютексы".
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
IO_CSQ
Структура IO_CSQ — это закрытая структура, используемая для указания подпрограмм безопасной отмены очереди IRP для драйвера. Не устанавливайте элементы этой структуры напрямую. Используйте IoCsqInitialize или IoCsqInitializeEx для инициализации этой структуры.
Общие сведения об использовании очередей IRP, безопасных для отмены, см. в разделе "Очереди IRP", безопасные для отмены.
Доступно в Microsoft Windows XP и более поздних версиях операционной системы Windows.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
IO_CSQ_IRP_CONTEXT
Структура IO_CSQ_IRP_CONTEXT — это непрозрачная структура данных, используемая для указания контекста IRP в безопасной для отмены очереди IRP драйвера. Подпрограммы IoCsqInsertIrp, IoCsqInsertIrpEx и IoCsqRemoveIrp используют эту структуру в качестве ключа для идентификации конкретных IRP в очереди.
Общие сведения об использовании очередей IRP, безопасных для отмены, см. в разделе "Очереди IRP", безопасные для отмены.
Доступно в Microsoft Windows XP и более поздних версиях операционной системы Windows.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
IO_WORKITEM
Структура IO_WORKITEM — это непрозрачная структура, описывающая рабочий элемент для рабочего потока системы.
Драйвер может выделить рабочий элемент, вызвав IoAllocateWorkItem. Кроме того, драйвер может выделить свой собственный буфер, а затем вызвать IoInitializeWorkItem , чтобы инициализировать этот буфер в качестве рабочего элемента.
Любой элемент работы, который выделяется с помощью IoAllocateWorkItem, должен быть освобожден с помощью IoFreeWorkItem. Память, инициализированная с помощью IoInitializeWorkItem, должна быть неинициализирована с помощью IoUninitializeWorkItem перед её освобождением.
Дополнительные сведения о рабочих элементах см. в разделе "Рабочие потоки системы".
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KBUGCHECK_CALLBACK_RECORD
Структура KBUGCHECK_CALLBACK_RECORD является непрозрачной структурой, используемой подпрограммами KeRegisterBugCheckCallback и KeDeregisterBugCheckCallback.
Структура KBUGCHECK_CALLBACK_RECORD используется рутинами KeRegisterBugCheckReasonCallback и KeDeregisterBugCheckReasonCallback для ведения учёта.
Структура должна быть выделена в резидентной памяти, например, в нераспределённом пуле. Используйте подпрограмму KeInitializeCallbackRecord , чтобы инициализировать структуру перед его использованием.
Заголовок: Ntddk.h. Включить: Ntddk.h.
KBUGCHECK_REASON_CALLBACK_RECORD
Структура KBUGCHECK_REASON_CALLBACK_RECORD является непрозрачной структурой, используемой подпрограммами KeRegisterBugCheckReasonCallback и KeDeregisterBugCheckReasonCallback.
Структура KBUGCHECK_REASON_CALLBACK_RECORD используется подпрограммами KeRegisterBugCheckReasonCallback и KeDeregisterBugCheckReasonCallback для учета.
Структура должна быть выделена в памяти резидента, например непагрегированного пула. Используйте подпрограмму KeInitializeCallbackRecord , чтобы инициализировать структуру перед его использованием.
Доступно в Microsoft Windows XP с пакетом обновления 1 (SP1), Windows Server 2003 и более поздними версиями операционной системы Windows.
Заголовок: Ntddk.h. Включить: Ntddk.h.
KDPC
Структура KDPC — это непрозрачная структура, представляющая объект DPC. Не устанавливайте элементы этой структуры напрямую. См. статью "Объекты DPC" и "DPCs".
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KFLOATING_SAVE
Используйте KeRestoreFloatingPointState для восстановления состояния с плавающей запятой.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KGUARDED_MUTEX
Структура KGUARDED_MUTEX является непрозрачной структурой, представляющей защищенный мьютекс.
Используйте KeInitializeGuardedMutex для инициализации структуры KGUARDED_MUTEX как защищенного мьютекса.
Защищенные мьютексы должны быть выделены из нестраничного пула.
Для получения дополнительной информации о защищенных мьютексах см. Fast Mutexes и Guarded Mutexes.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KINTERRUPT
Структура KINTERRUPT — это непрозрачная структура, представляющая прерывание системы.
IoConnectInterruptEx предоставляет указатель на структуру KINTERRUPT для прерывания, когда драйвер регистрирует подпрограмму InterruptService или InterruptMessageService. Драйвер использует этот указатель при получении или освобождении спин-блокировки прерывания. Драйвер также использует этот указатель при отмене регистрации подпрограммы Прерывания.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KLOCK_QUEUE_HANDLE
Структура KLOCK_QUEUE_HANDLE — это непрозрачная структура, описывающая блокировку спина в очереди. Драйвер выделяет KLOCK_QUEUE_HANDLE структуру и передает его в KeAcquireInStackQueuedSpinLock и KeAcquireInStackQueuedSpinLockAtDpcLevel, чтобы получить очередь спин-блокировки. Эти подпрограммы инициализируют структуру для представления очередной спин-блокировки. Драйвер передает структуру в KeReleaseInStackQueuedSpinLock и KeReleaseInStackQueuedSpinLockFromDpcLevel при освобождении spin-блокировки.
Дополнительные сведения см. также в разделе "Очередные спин-блокировки".
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
KTIMER
Структура KTIMER — это непрозрачная структура, представляющая объект таймера. Не устанавливайте элементы этой структуры напрямую. Дополнительные сведения см. в разделе "Объекты таймера и DPC".
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
LOOKASIDE_LIST_EX
Структура LOOKASIDE_LIST_EX описывает список lookaside.
typedef struct _LOOKASIDE_LIST_EX {
... // opaque
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
Список lookaside — это пул буферов фиксированного размера, которым драйвер может управлять локально, чтобы уменьшить количество вызовов подпрограмм выделения системы, что повышает производительность. Буферы имеют универсальный размер и хранятся в виде записей в списке lookaside.
Драйверы должны рассматривать структуру LOOKASIDE_LIST_EX как непрозрачную. Драйверы, обращающиеся к элементам структуры или имеющие зависимости от расположений этих элементов, могут не оставаться переносимыми и совместимыми с другими драйверами.
В разделе "Связанные статьи" содержится список подпрограмм, использующих эту структуру.
Дополнительные сведения о списках lookaside см. в разделе Using Lookaside Lists.
На 64-разрядных платформах эта структура должна быть выровнена в 16 байтов.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
NPAGED_LOOKASIDE_LIST
Структура NPAGED_LOOKASIDE_LIST — это непрозрачная структура, описывающая список буферов фиксированного размера, выделенных из непагрегированного пула. Система создает новые записи и уничтожает неиспользуемые записи в списке по мере необходимости. Для буферов фиксированного размера использование списка lookaside быстрее, чем непосредственное выделение памяти.
Используйте ExInitializeNPagedLookasideList для инициализации списка lookaside. Используйте ExAllocateFromNPagedLookasideList для выделения буфера из списка и ExFreeToNPagedLookasideList для возврата буфера в список.
Драйверы обязаны всегда явно освободить память всех списков ожидания, которые они создают перед выгрузкой. В противном случае это серьезная ошибка программирования. Используйте ExDeleteNPagedLookasideList , чтобы освободить список.
Драйверы также могут использовать списки lookaside для страничного пула. Структура PAGED_LOOKASIDE_LIST описывает список lookaside, содержащий страницы буферов. Структура LOOKASIDE_LIST_EX может описать список lookaside, содержащий страницы или непагированные буферы. Дополнительные сведения см. в разделе "Использование списков Lookaside".
На 64-разрядных платформах эта структура должна быть выровнена по границе в 16 байтов.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
ТИП_ОБЪЕКТА
OBJECT_TYPE — непрозрачная структура, указывающая тип объекта дескриптора. Дополнительные сведения см. в разделе ObReferenceObjectByHandle.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
Списки быстрого доступа с разбиением на страницы (PAGED_LOOKASIDE_LIST)
Структура PAGED_LOOKASIDE_LIST — это непрозрачная структура, описывающая список буферов фиксированного размера, выделенных из пула страниц. Система создает новые записи и уничтожает неиспользуемые записи в списке по мере необходимости. Для буферов фиксированного размера использование списка lookaside быстрее, чем выделение памяти напрямую.
Используйте ExInitializePagedLookasideList для инициализации списка lookaside. Используйте ExAllocateFromPagedLookasideList для выделения буфера из списка и ExFreeToPagedLookasideList для возврата буфера в список.
Драйверы всегда должны явным образом освобождать все списки lookaside, которые они создают, перед выгрузкой. В противном случае это серьезная ошибка программирования. Используйте ExDeletePagedLookasideList, чтобы освободить список.
Драйверы также могут использовать списки lookaside для непагированного пула. Структура NPAGED_LOOKASIDE_LIST описывает список lookaside, содержащий непагированные буферы. Структура LOOKASIDE_LIST_EX может описывать список lookaside, содержащий либо страничные, либо непагированные буферы. Дополнительные сведения см. в разделе "Использование списков Lookaside".
На 64-разрядных платформах эта структура должна быть выровнена по 16 байтам.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
RTL_BITMAP
Структура RTL_BITMAP является непрозрачной структурой, описывающей растровое изображение.
typedef struct _RTL_BITMAP {
// opaque
} RTL_BITMAP, *PRTL_BITMAP;
Не обращаться непосредственно к членам этой структуры. Драйверы, которые имеют зависимости от расположений членов или напрямую получают доступ к значениям членов, могут перестать быть совместимыми с будущими версиями операционной системы Windows.
Структура RTL_BITMAP служит заголовком для одномерной растровой карты произвольной длины. Драйвер может использовать такую растровую карту как экономичный способ отслеживания набора повторно используемых элементов. Например, файловая система может использовать растровые изображения для отслеживания кластеров и секторов на жестком диске, которые уже были выделены для хранения данных файла.
Список подпрограмм RtlXxx , использующих структуры RTL_BITMAP , см. в разделе "Связанные статьи ". Вызывающий эти подпрограммы RtlXxx отвечает за выделение хранилища для структуры RTL_BITMAP и буфера, содержащего растровое изображение. Этот буфер должен начинаться с границы, кратной 4 байтам, в памяти и иметь длину, кратную 4 байтам. Растровое изображение начинается в начале буфера, но может содержать любое количество битов, которые помещаются в выделенный буфер.
Перед предоставлением структуры RTL_BITMAP в качестве параметра рутине RtlXxx вызовите рутину RtlInitializeBitMap для инициализации структуры. Входные параметры этой подпрограммы — это указатель на буфер, содержащий растровое изображение, и размер в битах растрового изображения. RtlInitializeBitMap не изменяет содержимое этого буфера.
Если вызывающий объект выделяет хранилище для структуры RTL_BITMAP и растрового изображения в памяти страниц, вызывающий объект должен выполняться в IRQL <= APC_LEVEL, когда он передает указатель на эту структуру в качестве параметра любой из подпрограмм RtlXxx, перечисленных в разделе "Связанные статьи". Если вызывающий объект выделяет хранилище из неспакованной памяти (или, аналогично, из заблокированной страничной памяти), вызывающий объект может работать на любом IRQL при вызове подпрограммы RtlXxx.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
RTL_RUN_ONCE
Структура RTL_RUN_ONCE — это непрозрачная структура, в которой хранятся сведения для однократной инициализации.
Драйверы должны инициализировать эту структуру, вызвав подпрограмму RtlRunOnceInitialize перед передачей в другие подпрограммы RtlRunOnceXxx.
Заголовок: Ntddk.h. Включите: Ntddk.h.
SECURITY_SUBJECT_CONTEXT
Структура SECURITY_SUBJECT_CONTEXT — это непрозрачная структура, представляющая контекст безопасности, в котором выполняется определенная операция. Драйверы не должны изменять или пытаться напрямую обращаться к любым членам этой структуры для принятия решений по безопасности. Вместо этого, чтобы избежать проблем с безопасностью в авторизации, передайте эту непрозрачную структуру в вызовах SeAccessCheck или SePrivilegeCheck.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
SLIST_HEADER
Структура SLIST_HEADER — это непрозрачная структура, которая служит заголовком для последовательно связанного списка. Дополнительные сведения см. в разделе "Односвязные и двусвязные списки".
На 64-разрядных платформах структуры SLIST_HEADER должны быть выровнены по 16 байтам.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
XSTATE_SAVE
Структура XSTATE_SAVE — это непрозрачная структура, описывающая сведения о состоянии расширенного процессора, которые сохраняет и восстанавливает драйвер в режиме ядра.
typedef struct _XSTATE_SAVE {
... // opaque
} XSTATE_SAVE, *PXSTATE_SAVE;
Все члены непрозрачны.
Подпрограммы KeSaveExtendedProcessorState и KeRestoreExtendedProcessorState используют эту структуру.
Заголовок: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.
Связанные статьи
ExAllocateFromNPagedLookasideList
ExAllocateFromPagedLookasideList
ExInitializePagedLookasideList
ExInitializeNPagedLookasideList
KeAcquireInStackQueuedSpinLock
KeAcquireInStackQueuedSpinLockAtDpcLevel
KeRestoreExtendedProcessorState
KeDeregisterBugCheckReasonCallback
KeRegisterBugCheckReasonCallback
KeReleaseInStackQueuedSpinLock
KeReleaseInStackQueuedSpinLockFromDpcLevel
PsGetProcessCreateTimeQuadPart