共用方式為


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;

此頁面底部所列的向下執行保護例程全都會以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 的 IRP 內容。 IoCsqInsertIrpIoCsqInsertIrpExIoCsqRemoveIrp 例程會使用此結構作為識別佇列中特定 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_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 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 的不透明結構。

使用 KeInitializeGuardedMutex 將KGUARDED_MUTEX結構初始化為受防護的 Mutex。

受防護的 Mutex 必須從非分頁集區配置。

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

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

KINTERRUPT

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

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

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

KLOCK_QUEUE_HANDLE

KLOCK_QUEUE_HANDLE結構是描述佇列微調鎖定的不透明結構。 驅動程式會配置KLOCK_QUEUE_HANDLE結構,並將它傳遞給 KeAcquireInStackQueuedSpinLock KeAcquireInStackQueuedSpinLockAtDpcLevel 以取得佇列的微調鎖定。 這些例程會初始化 結構,以表示已排入佇列的微調鎖定。 驅動程式會在釋放微調鎖定時,將 結構傳遞給KeReleaseInStackInStackQueuedSpinLockFromDpcLevel

如需詳細資訊,請參閱 佇列微調鎖定

標頭: 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

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_BITMAP

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結構和位圖配置記憶體,則呼叫端必須在 IRQL <= APC_LEVEL執行,當呼叫端將指標傳遞至此結構做為參數傳遞至 [相關文章] 區段中所列的任何 RtlXxx 例程。 如果呼叫端從非分頁記憶體配置記憶體(或者,同樣地,從鎖定的分頁記憶體配置),呼叫端可以在呼叫 RtlXxx 例程時在任何 IRQL 上執行。

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

RTL_RUN_ONCE

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

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

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

SECURITY_SUBJECT_CONTEXT

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

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

SLIST_HEADER

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

Run-Down Protection

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx