Windows 核心不透明結構

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

EPROCESS

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

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

進程對像是物件管理員物件。 驅動程式應該使用物件管理員例程,例如 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;

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

下列 ExXxx 定時器 例程需要系統設定 EX_TIMER 結構的指標作為輸入參數:

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

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

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

FAST_MUTEX

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

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

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

IO_CSQ

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

如需如何使用取消安全 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 結構是 KeRegisterBugCheckCallbackKeDeregisterBugCheckCallback 例程使用的不透明結構。

KBUGCHECK_CALLBACK_RECORD結構是由 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 例程用於簿記。

結構必須配置在駐留記憶體中,例如非分頁集區。 使用 KeInitializeCallbackRecord 例程先初始化結構,再使用它。

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

KBUGCHECK_REASON_CALLBACK_RECORD

KBUGCHECK_REASON_CALLBACK_RECORD 結構是 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 例程使用的不透明結構。

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。

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

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

標頭: 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 ,以取得佇列的微調鎖定。 這些例程會初始化 結構,以表示已排入佇列的微調鎖定。 驅動程式會在釋放微調鎖定時,將結構傳遞至 KeReleaseInStackQueuedSpinLock和 KeReleaseInStackQueuedSpinLockFromDpcLevel

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

標頭: 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 清單中的專案。

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

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

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

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

從 Windows Vista 開始支援。

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

NPAGED_LOOKASIDE_LIST

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

使用 ExInitializeNPagedLo以sideList 初始化 lookaside 列表。 使用 ExAllocateFromNPagedLo一sideList 從清單中配置緩衝區,以及 使用 ExFreeToNPagedLo以列表 傳回緩衝區。

驅動程式在卸除之前,必須一律明確釋放它們建立的任何外觀清單。 否則,這是嚴重的程式設計錯誤。 使用 ExDeleteNPagedLo以sideList 釋放清單。

驅動程式也可以使用頁面集區的外觀清單。 從 Windows 2000 開始, PAGED_LOOKASIDE_LIST 結構描述包含分頁緩衝區的 lookaside 清單。 從 Windows Vista 開始, LOOKASIDE_LIST_EX 結構可以描述包含分頁或非分頁緩衝區的 lookaside 清單。 如需詳細資訊,請參閱使用 Lookaside 清單

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

從 Windows 2000 開始支援。

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

Object_Type

OBJECT_TYPE 是不透明的結構,可指定句柄的物件類型。 如需詳細資訊,請參閱 ObReferenceObjectByHandle

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

PAGED_LOOKASIDE_LIST

PAGED_LOOKASIDE_LIST 結構是不透明的結構,描述從分頁集區配置的固定大小緩衝區外觀清單。 系統會視需要建立新的專案,並終結清單上的未使用專案。 針對固定大小的緩衝區,使用 lookaside 清單比直接配置記憶體更快。

使用 ExInitializePagedLo以sideList 初始化 lookaside 列表。 使用 ExAllocateFromPagedLo一sideList 從清單中配置緩衝區,以及 使用 ExFreeToPagedLo可sideList 將緩衝區傳回清單。

驅動程式在卸除之前,必須一律明確釋放它們建立的任何外觀清單。 否則,這是嚴重的程式設計錯誤。 使用 ExDeletePagedLo以sideList 釋放清單。

驅動程式也可以使用非分頁集區的外觀清單。 從 Windows 2000 開始, NPAGED_LOOKASIDE_LIST 結構描述包含非分頁緩衝區的 lookaside 清單。 從 Windows Vista 開始, LOOKASIDE_LIST_EX 結構可以描述包含分頁或非分頁緩衝區的外觀清單。 如需詳細資訊,請參閱使用 Lookaside 清單

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

從 Windows 2000 開始支援。

標頭: 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 結構的記憶體,以及包含位圖的緩衝區。 這個緩衝區必須以記憶體中的四位元組界限開始,而且長度必須是四位元組的倍數。 位圖會從緩衝區的開頭開始,但可以包含符合配置緩衝區的任意數位。

在提供 RTL_BITMAP 結構做為 RtlXxx 例程的參數之前,請先呼叫 RtlInitializeBitMap 例程來初始化 結構。 這個例程的輸入參數是緩衝區的指標,其中包含位圖,以及點陣圖的大小。 RtlInitializeBitMap 不會變更此緩衝區的內容。

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

Windows 2000 和更新版本的 Windows 支援。

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

RTL_RUN_ONCE

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

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

可在 Windows Vista 和更新版本的 Windows 作業系統上使用。

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

SECURITY_SUBJECT_CONTEXT

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

標頭: 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 例程會使用此結構。

Windows 7 和更新版本的 Windows 作業系統支援。

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

ExAcquireFastMutex

ExAcquireFastMutexUnsafe

ExAllocateFromLookasideListEx

ExAllocateFromNPagedLookasideList

ExAllocateFromPagedLookasideList

ExAllocateTimer

ExDeletePagedLookasideList

ExFreeToPagedLofreesideList

ExInitializePagedLookasideList

ExCancelTimer

ExDeleteLookasideListEx

ExDeleteNPagedLookasideList

ExDeleteTimer

ExFlushLookasideListEx

ExFreeToLofreesideListEx

ExFreeToNPagedLofreesideList

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