共用方式為


Windows 核心不透明結構

本文列出並描述 Windows 核心不透明結構。 對於其中許多結構,驅動程式不應該存取或變更任何成員,而是應該改用系統提供的例程來存取資訊。 如需詳細資訊,請參閱每個結構。

EPROCESS

EPROCESS 結構是一種不透明結構,可作為進程的進程物件。

某些例程,例如 PsGetProcessCreateTimeQuadPart,使用 EPROCESS 來識別要運作的程式。 驅動程式可以使用 PsGetCurrentProcess 常式來取得目前進程之進程物件的指標,並可以使用 ObReferenceObjectByHandle 常式來取得與指定控制碼相關聯之進程物件的指標。 PsInitialSystemProcess 全域變數會指向系統進程的進程物件。

進程物件是 Object Manager 物件。 驅動程式應該使用物件管理員例程,例如 ObReferenceObjectObDereferenceObject 來維護對象的參考計數。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

ETHREAD

ETHREAD 結構是一種不透明結構,可作為線程的線程物件。

某些例程,例如 PsIsSystemThread,使用 ETHREAD 來識別要運作的線程。 驅動程式可以使用 PsGetCurrentThread 常式來取得目前執行緒執行緒物件的指標,也可以使用 ObReferenceObjectByHandle 常式來取得與指定控制碼相關聯之執行緒物件的指標。

線程物件是 Object Manager 物件。 驅動程式應該使用物件管理員例程,例如 ObReferenceObjectObDereferenceObject 來維護對象的參考計數。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

EX_RUNDOWN_REF

EX_RUNDOWN_REF結構是不透明的系統結構,其中包含相關聯共用物件的執行流程保護狀態的相關資訊。

typedef struct _EX_RUNDOWN_REF {
  
  ...  // opaque
  
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;

本文結尾所列的 rundown 保護常式都會將指向 EX_RUNDOWN_REF 結構的指標作為其第一個參數。

如需詳細資訊,請參閱 Run-Down Protection。 標頭: Wdm.h。 包含 Wdm.h。

EX_TIMER

EX_TIMER 結構是操作系統用來表示EX_TIMER定時器物件的不透明結構。

typedef struct _EX_TIMER *PEX_TIMER;

此結構的所有成員都對驅動程式不透明。

下列 ExXxxTimer 例程需要系統設定 EX_TIMER 結構的指標做為輸入參數:

操作系統會 建立以EX_TIMER為基礎的定時器物件。 若要取得這類定時器物件,您的驅動程式會 呼叫 ExAllocateTimer 例程。 不再需要此物件時,驅動程式會負責藉由呼叫 ExDeleteTimer 來刪除物件。

如需詳細資訊,請參閱 Ex XxxTimer 例程和EX_TIMER物件

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

FAST_MUTEX

FAST_MUTEX 結構是代表快速 Mutex 的不透明數據結構。 ExInitializeFastMutex 例程會初始化這個結構。

如需有關快速 Mutex 的詳細資訊,請參閱 Fast Mutexes 和 Guarded Mutexes

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

IO_CSQ

IO_CSQ 結構是不透明的結構,用來指定驅動程式的取消安全 IRP 佇列例程。 請勿直接設定此結構的成員。 使用 IoCsqInitialize IoCsqInitializeEx 初始化此結構。

如需如何使用取消安全 IRP 佇列的概觀,請參閱 取消安全 IRP 佇列

Microsoft Windows XP 和更新版本的 Windows 作業系統上提供。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

IO_CSQ_IRP_CONTEXT

IO_CSQ_IRP_CONTEXT 結構是一種不透明的資料結構,用於在驅動程式的取消安全 IRP 佇列中指定 IRP 的上下文。 IoCsqInsertIrp、IoCsqInsertIrpEx 和 IoCsqRemoveIrp 例程會使用此結構作為識別佇列中特定 IRP 的索引鍵。

如需如何使用取消安全 IRP 佇列的概觀,請參閱 取消安全 IRP 佇列

Microsoft Windows XP 和更新版本的 Windows 作業系統上提供。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

IO_WORKITEM

IO_WORKITEM 結構是一種不透明的結構,用於描述系統工作線程的工作項目。

驅動程式可以呼叫 IoAllocateWorkItem來配置工作專案。 或者,驅動程式可以配置自己的緩衝區,然後呼叫 IoInitializeWorkItem ,將該緩衝區初始化為工作專案。

"任何由 IoAllocateWorkItem 配置的工作專案,必須由 IoFreeWorkItem 釋放。" 由IoInitializeWorkItem初始化的任何記憶體,都必須在釋放之前由IoUninitializeWorkItem取消初始化。

如需工作專案的詳細資訊,請參閱 系統工作執行緒

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KBUGCHECK 回呼記錄

KBUGCHECK_CALLBACK_RECORD 結構是一種不透明的結構,由 KeRegisterBugCheckCallback 和 KeDeregisterBugCheckCallback 例程使用。

KBUGCHECK_CALLBACK_RECORD 結構是由 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 例程用於執行記錄,而使用。

結構必須配置在常駐記憶體中,例如非分頁集區。 在使用結構之前,使用 KeInitializeCallbackRecord 例程來初始化該結構。

標頭: Ntddk.h。 包括: Ntddk.h

KBUGCHECK原因回調記錄

KBUGCHECK_REASON_CALLBACK_RECORD 結構是一個不透明結構,用於 KeRegisterBugCheckReasonCallback 和 KeDeregisterBugCheckReasonCallback 例程。

KBUGCHECK_REASON_CALLBACK_RECORD 結構由 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 函數用於記帳。

結構必須配置在常駐記憶體中,例如非分頁集區。 在使用結構之前,使用 KeInitializeCallbackRecord 例程來初始化該結構。

Microsoft Windows XP Service Pack 1(SP1)、Windows Server 2003 和更新版本的 Windows 操作系統上提供。

標頭: Ntddk.h。 包括: Ntddk.h

KDPC

KDPC 結構是代表 DPC 物件的不透明結構。 請勿直接設定此結構的成員。 請參閱 DPC 物件和 DPC

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KFLOATING_SAVE

KFLOATING_SAVE 結構是不透明的結構,描述 KeSaveFloatingPointState 例程儲存的浮點狀態。

使用 KeRestoreFloatingPointState 還原浮點狀態。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KGUARDED_MUTEX

KGUARDED_MUTEX 結構是代表受防護 Mutex 的不透明結構。

使用 KeInitializeGuardedMutexKGUARDED_MUTEX 結構初始化為受防護的互斥鎖。

受保護的互斥鎖必須從非分頁集區配置。

如需受防護 Mutex 的詳細資訊,請參閱 Fast Mutexes 和 Guarded Mutexes

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KINTERRUPT

KINTERRUPT 結構是不透明的結構,代表系統的中斷。

IoConnectInterruptEx 當驅動程式註冊 InterruptServiceInterruptMessageService 例程時,會為中斷提供 KINTERRUPT 結構的指標。 驅動程式在取得或釋放中斷微調鎖時,會使用此指標。 取消註冊 InterruptService 例程時,驅動程式也會使用此指標。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KLOCK_QUEUE_HANDLE

KLOCK_QUEUE_HANDLE 結構是一個描述佇列旋轉鎖的不透明結構體。 驅動程式會配置 KLOCK_QUEUE_HANDLE 結構,並將它傳遞給 KeAcquireInStackQueuedSpinLockKeAcquireInStackQueuedSpinLockAtDpcLevel 以取得佇列的自旋鎖。 這些例程會初始化結構,以表示已排入佇列的自旋鎖。 驅動程式在釋放自旋鎖時,將結構傳遞給KeReleaseInStackQueuedSpinLockKeReleaseInStackQueuedSpinLockFromDpcLevel

如需詳細資訊,請參閱 佇列自旋鎖

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

KTIMER

KTIMER 結構是代表定時器物件的不透明結構。 請勿直接設定此結構的成員。 如需詳細資訊,請參閱 定時器物件和 DPC

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

LOOKASIDE_LIST_EX

LOOKASIDE_LIST_EX 結構描述旁路列表。

typedef struct _LOOKASIDE_LIST_EX {
  ...  // opaque
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;

旁路列表是固定大小緩衝區的集區,驅動程式可以在本機管理,以減少對系統配置常式的呼叫次數。 減少這些呼叫可改善效能。 緩衝區的大小統一,並儲存為 lookaside 清單中的項目。

驅動程式應將LOOKASIDE_LIST_EX結構視為不透明。 存取結構成員或相依於這些成員位置的驅動程式可能無法保持可攜式,且與其他驅動程式互通。

[相關文章] 區段包含使用此結構的例程清單。

如需 lookaside 列表的詳細資訊,請參閱 使用 Lookaside 清單

在 64 位平臺上,此結構必須對齊 16 位元組。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

NPAGED_LOOKASIDE_LIST

NPAGED_LOOKASIDE_LIST 結構是一種不透明的結構,用於描述從非分頁集區配置的固定大小緩衝區的後備清單。 系統會建立新的專案,並視需要在清單中終結未使用的專案。 對於固定大小的緩衝區,使用 lookaside 清單比直接配置記憶體更快。

使用 ExInitializeNPagedLookasideList 初始化 lookaside 列表。 使用 ExAllocateFromNPagedLookasideList 從清單中配置緩衝區,並使用 ExFreeToNPagedLookasideList 將緩衝區傳回清單。

驅動程式必須明確釋放它們建立的任何旁路清單後再卸除。 否則,這是一個嚴重的程序設計錯誤。 使用 ExDeleteNPagedLookasideList 釋放清單。

驅動程式也可以使用分頁集區的旁路清單。 PAGED_LOOKASIDE_LIST 結構描述的是包含分頁緩衝區的查閱清單。 LOOKASIDE_LIST_EX 結構可以描述包含分頁或非分頁緩衝區的查閱清單。 如需詳細資訊,請參閱 使用 Lookaside 清單

在 64 位平臺上,此結構必須對齊 16 位元組。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

物件類型

OBJECT_TYPE是一種不透明的結構,用於定義句柄的物件類型。 如需詳細資訊,請參閱 ObReferenceObjectByHandle

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

PAGED_LOOKASIDE_LIST列表

PAGED_LOOKASIDE_LIST 結構是一個不透明的結構,描述了從分頁集區中配置的固定大小緩衝區的伺機列表。 系統會建立新的專案,並視需要在清單中終結未使用的專案。 對於固定大小的緩衝區,使用 lookaside 清單比直接配置記憶體更快。

使用 ExInitializePagedLookasideList 來初始化 lookaside 列表。 使用 ExAllocateFromPagedLookasideList 從清單中配置緩衝區,並使用 ExFreeToPagedLookasideList 將緩衝區傳回清單。

驅動程式必須明確釋放它們建立的任何旁路清單後再卸除。 否則,這是一個嚴重的程序設計錯誤。 使用 ExDeletePagedLookasideList 釋放清單。

驅動程式也可以使用非分頁集區的旁路清單。 NPAGED_LOOKASIDE_LIST 結構描述一個查閱清單,該清單包含非分頁緩衝區。 LOOKASIDE_LIST_EX 結構可以描述包含分頁或非分頁緩衝區的查閱清單。 如需詳細資訊,請參閱 使用 Lookaside 清單

在 64 位平臺上,此結構必須對齊 16 字節。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

RTL位元圖

RTL_BITMAP 結構是描述位圖的不透明結構。

typedef struct _RTL_BITMAP {
  // opaque
} RTL_BITMAP, *PRTL_BITMAP;

請勿直接存取此結構的成員。 與成員位置相依性的驅動程式,或直接存取成員值的驅動程式可能無法與未來的 Windows 操作系統版本相容。

RTL_BITMAP 結構可作為一般用途、一維點圖任意長度的標頭。 驅動程式可以使用這類位圖作為一種經濟方式來追蹤一組可重複使用的專案。 例如,文件系統可以使用位圖來追蹤硬碟上已配置哪些叢集和扇區來保存檔案數據。

如需使用 RTL_BITMAP 結構的 RtlXxx 例程清單,請參閱相關文章一節。 這些 RtlXxx 例程的呼叫端負責配置RTL_BITMAP結構的記憶體,以及包含位圖的緩衝區。 此緩衝區必須從記憶體中的 4 位元組界限開始,而且長度必須是 4 個位元組的倍數。 位圖從緩衝區的開頭開始,但可以包含任何數量的位元,只要能夠適合已配置的緩衝區。

在提供RTL_BITMAP結構做為 Rtl Xxx 例程的參數之前,請先呼叫 RtlInitializeBitMap 例程來初始化結構。 這個常式的輸入參數包括:一個指向包含位圖的緩衝區的指標,以及該位圖以位為單位的大小。 RtlInitializeBitMap 不會變更此緩衝區的內容。

如果呼叫端在分頁記憶體中為RTL_BITMAP結構和位圖配置記憶體,則在呼叫端將指標作為參數傳遞給Rtl<例程(列在相關文章區段中)時,必須在 IRQL = APC_LEVEL 執行。 如果呼叫端從非分頁記憶體(或同樣地,從鎖住的分頁記憶體)中配置儲存空間,則呼叫端可以在呼叫 RtlXxx 常式時在任何 IRQL 上執行。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

RTL_RUN_ONCE

RTL_RUN_ONCE 結構是一種不透明的結構,可儲存一次性初始化的資訊。

驅動程式必須先呼叫 RtlRunOnceInitialize 例程,再將它傳遞至任何其他 RtlRunOnceXxx 例程,以初始化這個結構。

標頭:Ntddk.h。 包括 Ntddk.h。

安全主體上下文

SECURITY_SUBJECT_CONTEXT 結構是一種不透明結構,代表執行特定作業的安全性內容。 驅動程式不得修改或嘗試直接存取此結構的任何成員,以做出安全性決策。 相反地,若要避免授權中的安全性問題,請在呼叫 SeAccessCheck 或 SePrivilegeCheck 時傳遞此不透明結構。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

SLIST_標頭

SLIST_HEADER結構是一種不透明結構,可作為循序單選連結清單的標頭。 如需詳細資訊,請參閱 Singly 和 Doubly 連結清單

在 64 位平臺上,SLIST_HEADER 結構必須是 16 位元組對齊。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

XSTATE_SAVE

XSTATE_SAVE 結構是不透明的結構,描述內核模式驅動程式儲存和還原的擴充處理器狀態資訊。

typedef struct _XSTATE_SAVE {
  ...  // opaque
} XSTATE_SAVE, *PXSTATE_SAVE;

所有成員都是不透明的。

KeSaveExtendedProcessorStateKeRestoreExtendedProcessorState 例程會使用此結構。

標頭: Wdm.h。 包含: Wdm.hNtddk.hNtifs.h

ExAcquireFastMutex

ExAcquireFastMutexUnsafe

ExAllocateFromLookasideListEx

ExAllocateFromNPagedLookasideList

ExAllocateFromPagedLookasideList

ExAllocateTimer

ExDeletePagedLookasideList

ExFreeToPagedLookasideList

ExInitializePagedLookasideList

ExCancelTimer

ExDeleteLookasideListEx

ExDeleteNPagedLookasideList

ExDeleteTimer

ExFlushLookasideListEx

ExFreeToLookasideListEx

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializeNPagedLookasideList

ExInitializeSListHead

ExInterlockedFlushSList

ExInterlockedPopEntrySList

ExInterlockedPushEntrySList

ExQueryDepthSList

ExReleaseFastMutex

ExReleaseFastMutexUnsafe

ExSetTimer

ExTryToAcquireFastMutex

ExTimerCallback

IoAllocateWorkItem

IoConnectInterruptEx

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoDisconnectInterruptEx

IoFreeWorkItem

IoInitializeWorkItem

IoRequestDpc

IoUninitializeWorkItem

KeAcquireGuardedMutex

KeAcquireGuardedMutexUnsafe

KeAcquireInStackQueuedSpinLock

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireInterruptSpinLock

KeCancelTimer

KeInitializeCallbackRecord

KeInitializeGuardedMutex

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeRestoreExtendedProcessorState

KeSaveExtendedProcessorState

KeSetTimer

KeSetTimerEx

KeDeregisterBugCheckCallback

KeDeregisterBugCheckReasonCallback

KeInsertQueueDpc

KeRegisterBugCheckCallback

KeRegisterBugCheckReasonCallback

KeReleaseGuardedMutexUnsafe

KeReleaseInStackQueuedSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel

KeReleaseInterruptSpinLock

KeRestoreFloatingPointState

KeSaveFloatingPointState

KeSynchronizeExecution

LookasideListAllocateEx

LookasideListFreeEx

ObReferenceObjectByHandle

PsGetCurrentProcess

PsGetProcessCreateTimeQuadPart

PsInitialSystemProcess

PsIsSystemThread

讀取錯誤檢查回呼數據

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

耗竭保護

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx