Bagikan melalui


Struktur buram kernel Windows

Artikel ini mencantumkan dan menjelaskan struktur buram kernel Windows. Untuk banyak struktur ini, driver tidak boleh mengakses atau mengubah anggota apa pun tetapi harus menggunakan rutinitas yang disediakan sistem untuk mengakses informasi. Lihat setiap struktur untuk detailnya.

EPROCESS

Struktur EPROCESS adalah struktur buram yang berfungsi sebagai objek proses untuk suatu proses.

Beberapa rutinitas, seperti PsGetProcessCreateTimeQuadPart, menggunakan EPROCESS untuk mengidentifikasi proses yang akan dioperasikan. Driver dapat menggunakan rutinitas PsGetCurrentProcess untuk mendapatkan penunjuk ke objek proses untuk proses saat ini dan dapat menggunakan rutinitas ObReferenceObjectByHandle untuk mendapatkan penunjuk ke objek proses yang terkait dengan handel yang ditentukan. Variabel global PsInitialSystemProcess menunjuk ke objek proses untuk proses sistem.

Objek proses adalah objek Object Manager. Driver harus menggunakan rutinitas Object Manager seperti ObReferenceObject dan ObDereferenceObject untuk mempertahankan jumlah referensi objek.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

Struktur ETHREAD adalah struktur buram yang berfungsi sebagai objek utas untuk utas.

Beberapa rutinitas, seperti PsIsSystemThread, menggunakan ETHREAD untuk mengidentifikasi utas yang akan dioperasikan. Driver dapat menggunakan rutinitas PsGetCurrentThread untuk mendapatkan penunjuk ke objek utas untuk utas saat ini dan dapat menggunakan rutinitas ObReferenceObjectByHandle untuk mendapatkan penunjuk ke objek utas yang terkait dengan handel yang ditentukan.

Objek utas adalah objek Object Manager. Driver harus menggunakan rutinitas Object Manager seperti ObReferenceObject dan ObDereferenceObject untuk mempertahankan jumlah referensi objek.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

Struktur EX_RUNDOWN_REF adalah struktur sistem buram yang berisi informasi tentang status perlindungan run-down untuk objek bersama terkait.

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

Rutinitas perlindungan run-down yang tercantum di bagian bawah halaman ini semuanya mengambil pointer ke struktur EX_RUNDOWN_REF sebagai parameter pertama mereka.

Untuk informasi selengkapnya, lihat Perlindungan Run-Down. Header: Wdm.h. Sertakan Wdm.h.

EX_TIMER

Struktur EX_TIMER adalah struktur buram yang digunakan sistem operasi untuk mewakili objek timer EX_TIMER .

typedef struct _EX_TIMER *PEX_TIMER;

Semua anggota struktur ini buram bagi driver.

Rutinitas ExXxxTimer berikut memerlukan penunjuk ke struktur EX_TIMER yang dialokasikan sistem sebagai parameter input:

Sistem operasi membuat objek timer berbasis EX_TIMER. Untuk mendapatkan objek timer seperti itu, driver Anda memanggil rutinitas ExAllocateTimer . Ketika objek ini tidak lagi diperlukan, driver bertanggung jawab untuk menghapus objek dengan memanggil ExDeleteTimer.

Untuk informasi selengkapnya, lihat Rutinitas Timer ExXxxdan Objek EX_TIMER.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

Struktur FAST_MUTEX adalah struktur data buram yang mewakili mutex cepat. Rutinitas ExInitializeFastMutex menginisialisasi struktur ini.

Untuk informasi selengkapnya tentang mutex cepat, lihat Fast Mutexes dan Guarded Mutexes.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

Struktur IO_CSQ adalah struktur buram yang digunakan untuk menentukan rutinitas antrean IRP pembatalan aman driver. Jangan atur anggota struktur ini secara langsung. Gunakan IoCsqInitialize atau IoCsqInitializeEx untuk menginisialisasi struktur ini.

Untuk gambaran umum tentang cara menggunakan antrean IRP batal aman, lihat Antrean IRP Batal-Aman.

Tersedia di Microsoft Windows XP dan versi yang lebih baru dari sistem operasi Windows.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

Struktur IO_CSQ_IRP_CONTEXT adalah struktur data buram yang digunakan untuk menentukan konteks IRP untuk IRP dalam antrean IRP pembatalan aman driver. Rutinitas IoCsqInsertIrp, IoCsqInsertIrpEx, dan IoCsqRemoveIrp menggunakan struktur ini sebagai kunci untuk mengidentifikasi IRP tertentu dalam antrean.

Untuk gambaran umum tentang cara menggunakan antrean IRP batal aman, lihat Antrean IRP Batal-Aman.

Tersedia di Microsoft Windows XP dan versi yang lebih baru dari sistem operasi Windows.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

Struktur IO_WORKITEM adalah struktur buram yang menjelaskan item kerja untuk utas pekerja sistem.

Driver dapat mengalokasikan item kerja dengan memanggil IoAllocateWorkItem. Atau, driver dapat mengalokasikan buffer sendiri, lalu memanggil IoInitializeWorkItem untuk menginisialisasi buffer tersebut sebagai item kerja.

Item kerja apa pun yang dialokasikan IoAllocateWorkItem harus dibebaskan oleh IoFreeWorkItem. Memori apa pun yang diinisialisasi oleh IoInitializeWorkItem harus tidak diinisialisasi oleh IoUninitializeWorkItem sebelum dapat dibebaskan.

Untuk informasi selengkapnya tentang item kerja, lihat Utas Pekerja Sistem.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

Struktur KBUGCHECK_CALLBACK_RECORD adalah struktur buram yang digunakan oleh rutinitas KeRegisterBugCheckCallback dan KeDeregisterBugCheckCallback .

Struktur KBUGCHECK_CALLBACK_RECORD digunakan oleh rutinitas KeRegisterBugCheckReasonCallback dan KeDeregisterBugCheckReasonCallback untuk pembukuan.

Struktur harus dialokasikan dalam memori penduduk, seperti kumpulan yang tidak dipagasi. Gunakan rutinitas KeInitializeCallbackRecord untuk menginisialisasi struktur sebelum menggunakannya.

Header: Ntddk.h. Sertakan: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

Struktur KBUGCHECK_REASON_CALLBACK_RECORD adalah struktur buram yang digunakan oleh rutinitas KeRegisterBugCheckReasonCallback dan KeDeregisterBugCheckReasonCallback .

Struktur KBUGCHECK_REASON_CALLBACK_RECORD digunakan oleh rutinitas KeRegisterBugCheckReasonCallback dan KeDeregisterBugCheckReasonCallback untuk pembukuan.

Struktur harus dialokasikan dalam memori penduduk, seperti kumpulan yang tidak dipagasi. Gunakan rutinitas KeInitializeCallbackRecord untuk menginisialisasi struktur sebelum menggunakannya.

Tersedia di Microsoft Windows XP dengan Paket Layanan 1 (SP1), Windows Server 2003, dan versi sistem operasi Windows yang lebih baru.

Header: Ntddk.h. Sertakan: Ntddk.h.

KDPC

Struktur KDPC adalah struktur buram yang mewakili objek DPC. Jangan atur anggota struktur ini secara langsung. Lihat Objek DPC dan DPC.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

Struktur KFLOATING_SAVE adalah struktur buram yang menjelaskan status floating-point yang disimpan rutin KeSaveFloatingPointState .

Gunakan KeRestoreFloatingPointState untuk memulihkan status floating-point.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

Struktur KGUARDED_MUTEX adalah struktur buram yang mewakili mutex yang dijaga.

Gunakan KeInitializeGuardedMutex untuk menginisialisasi struktur KGUARDED_MUTEX sebagai muteks yang dijaga.

Mutex yang dijaga harus dialokasikan dari kumpulan non-halaman.

Untuk informasi selengkapnya tentang mutex yang dijaga, lihat Mutex Cepat dan Mutex Terjaga.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

Struktur KINTERRUPT adalah struktur buram yang mewakili gangguan pada sistem.

IoConnectInterruptEx menyediakan pointer ke struktur KINTERRUPT untuk interupsi ketika driver mendaftarkan rutinitas InterruptService atau InterruptMessageService . Driver menggunakan pointer ini saat memperoleh atau melepaskan kunci spin interupsi untuk interupsi. Driver juga menggunakan pointer ini ketika membatalkan pendaftaran rutinitas InterruptService .

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

Struktur KLOCK_QUEUE_HANDLE adalah struktur buram yang menggambarkan kunci putar antrean. Driver mengalokasikan struktur KLOCK_QUEUE_HANDLE , dan meneruskannya ke KeAcquireInStackQueuedSpinLock dan KeAcquireInStackQueuedSpinLockAtDpcLevel untuk memperoleh kunci spin yang diantrekan. Rutinitas tersebut menginisialisasi struktur untuk mewakili kunci putar yang diantrekan. Driver meneruskan struktur ke KeReleaseInStackQueuedSpinLock dan KeReleaseInStackQueuedSpinLockFromDpcLevel saat merilis kunci spin.

Untuk informasi selengkapnya, lihat Kunci Spin Antrean.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

Struktur KTIMER adalah struktur buram yang mewakili objek timer. Jangan atur anggota struktur ini secara langsung. Untuk informasi selengkapnya, lihat Objek Timer dan DPC.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

Struktur LOOKASIDE_LIST_EX menjelaskan daftar lookaside.

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

Daftar lookaside adalah kumpulan buffer ukuran tetap yang dapat dikelola driver secara lokal untuk mengurangi jumlah panggilan ke rutinitas alokasi sistem, yang meningkatkan performa. Buffer berukuran seragam dan disimpan sebagai entri dalam daftar lookaside.

Driver harus memperlakukan struktur LOOKASIDE_LIST_EX sebagai buram. Driver yang mengakses anggota struktur atau yang memiliki dependensi pada lokasi anggota ini mungkin tidak tetap portabel dan dapat dioperasikan dengan driver lain.

Bagian Artikel terkait berisi daftar rutinitas yang menggunakan struktur ini.

Untuk informasi selengkapnya tentang daftar lookaside, lihat Menggunakan lookaside Lists.

Pada platform 64-bit, struktur ini harus selaras dengan 16 byte.

Didukung dimulai dengan Windows Vista.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

Struktur NPAGED_LOOKASIDE_LIST adalah struktur buram yang menjelaskan daftar tampilan buffer ukuran tetap yang dialokasikan dari kumpulan yang tidak dipagasi. Sistem membuat entri baru dan menghancurkan entri yang tidak digunakan dalam daftar seperlunya. Untuk buffer ukuran tetap, menggunakan daftar lookaside lebih cepat daripada mengalokasikan memori secara langsung.

Gunakan ExInitializeNPagedLookasideList untuk menginisialisasi daftar lookaside. Gunakan ExAllocateFromNPagedLookasideList untuk mengalokasikan buffer dari daftar, dan ExFreeToNPagedLookasideList untuk mengembalikan buffer ke daftar.

Driver harus selalu secara eksplisit membebaskan daftar tampilan apa pun yang mereka buat sebelum membongkar. Ini adalah kesalahan pemrograman serius untuk melakukan sebaliknya. Gunakan ExDeleteNPagedLookasideList untuk membebaskan daftar.

Driver juga dapat menggunakan daftar lookaside untuk kumpulan halaman. Dimulai dengan Windows 2000, struktur PAGED_LOOKASIDE_LIST menjelaskan daftar lookaside yang berisi buffer halaman. Dimulai di Windows Vista, struktur LOOKASIDE_LIST_EX dapat menjelaskan daftar tampilan yang berisi buffer halaman atau tidak berpaginasi. Untuk informasi selengkapnya, lihat Menggunakan Lists Lookaside.

Pada platform 64-bit, struktur ini harus selaras dengan 16 byte.

Didukung dimulai dengan Windows 2000.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

OBJECT_TYPE

OBJECT_TYPE adalah struktur buram yang menentukan jenis objek handel. Untuk informasi selengkapnya, lihat ObReferenceObjectByHandle.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

Struktur PAGED_LOOKASIDE_LIST adalah struktur buram yang menjelaskan daftar tampilan buffer ukuran tetap yang dialokasikan dari kumpulan halaman. Sistem membuat entri baru dan menghancurkan entri yang tidak digunakan dalam daftar seperlunya. Untuk buffer ukuran tetap, menggunakan daftar lookaside lebih cepat daripada mengalokasikan memori secara langsung.

Gunakan ExInitializePagedLookasideList untuk menginisialisasi daftar lookaside. Gunakan ExAllocateFromPagedLookasideList untuk mengalokasikan buffer dari daftar, dan ExFreeToPagedLookasideList untuk mengembalikan buffer ke daftar.

Driver harus selalu secara eksplisit membebaskan daftar tampilan apa pun yang mereka buat sebelum membongkar. Ini adalah kesalahan pemrograman serius untuk melakukan sebaliknya. Gunakan ExDeletePagedLookasideList untuk membebaskan daftar.

Driver juga dapat menggunakan daftar lookaside untuk kumpulan yang tidak di-halaman. Dimulai dengan Windows 2000, struktur NPAGED_LOOKASIDE_LIST menjelaskan daftar tampilan yang berisi buffer yang tidak di-halaman. Dimulai dengan Windows Vista, struktur LOOKASIDE_LIST_EX dapat menjelaskan daftar lookaside yang berisi buffer halaman atau yang tidak di-halaman. Untuk informasi selengkapnya, lihat Menggunakan Lists Lookaside.

Pada platform 64-bit, struktur ini harus selaras dengan 16 byte.

Didukung dimulai dengan Windows 2000.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

Struktur RTL_BITMAP adalah struktur buram yang menggambarkan bitmap.

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

Jangan langsung mengakses anggota struktur ini. Driver yang memiliki dependensi pada lokasi anggota atau yang mengakses nilai anggota secara langsung mungkin tidak tetap kompatibel dengan versi sistem operasi Windows di masa mendatang.

Struktur RTL_BITMAP berfungsi sebagai header untuk bitmap satu dimensi tujuan umum dengan panjang arbitrer. Driver dapat menggunakan bitmap seperti itu sebagai cara ekonomis untuk melacak serangkaian item yang dapat digunakan kembali. Misalnya, sistem file dapat menggunakan bitmap untuk melacak kluster dan sektor mana pada hard disk yang telah dialokasikan untuk menyimpan data file.

Untuk daftar rutinitas RtlXxx yang menggunakan struktur RTL_BITMAP , lihat bagian Artikel terkait . Pemanggil rutinitas RtlXxx ini bertanggung jawab untuk mengalokasikan penyimpanan untuk struktur RTL_BITMAP dan untuk buffer yang berisi bitmap. Buffer ini harus dimulai pada batas empat byte dalam memori dan harus memiliki panjang kelipatan empat byte. Bitmap dimulai pada awal buffer tetapi dapat berisi sejumlah bit yang pas di buffer yang dialokasikan.

Sebelum memasok struktur RTL_BITMAP sebagai parameter ke rutinitas RtlXxx , panggil rutinitas RtlInitializeBitMap untuk menginisialisasi struktur. Parameter input untuk rutinitas ini adalah penunjuk ke buffer yang berisi bitmap, dan ukuran, dalam bit, dari bitmap. RtlInitializeBitMap tidak mengubah konten buffer ini.

Jika penelepon mengalokasikan penyimpanan untuk struktur RTL_BITMAP dan bitmap dalam memori halaman, pemanggil harus berjalan di IRQL <= APC_LEVEL ketika meneruskan penunjuk ke struktur ini sebagai parameter ke salah satu rutinitas RtlXxx yang tercantum di bagian Artikel terkait . Jika penelepon mengalokasikan penyimpanan dari memori yang tidak di-patah (atau, setara, dari memori halaman terkunci), pemanggil dapat berjalan di IRQL apa pun ketika memanggil rutinitas RtlXxx .

Didukung di Windows 2000 dan versi Windows yang lebih baru.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

Struktur RTL_RUN_ONCE adalah struktur buram yang menyimpan informasi untuk inisialisasi satu kali.

Driver harus menginisialisasi struktur ini dengan memanggil rutinitas RtlRunOnceInitialize sebelum meneruskannya ke rutinitas RtlRunOnceXxx lainnya.

Tersedia di Windows Vista dan versi yang lebih baru dari sistem operasi Windows.

Header: Ntddk.h. Sertakan: Ntddk.h.

SECURITY_SUBJECT_CONTEXT

Struktur SECURITY_SUBJECT_CONTEXT adalah struktur buram yang mewakili konteks keamanan tempat operasi tertentu berlangsung. Driver tidak boleh memodifikasi atau mencoba mengakses secara langsung anggota struktur ini untuk membuat keputusan keamanan. Sebagai gantinya, untuk menghindari masalah keamanan dalam otorisasi, teruskan struktur buram ini dalam panggilan ke SeAccessCheck atau SePrivilegeCheck.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Struktur SLIST_HEADER adalah struktur buram yang berfungsi sebagai header untuk daftar yang ditautkan secara berurutan. Untuk informasi selengkapnya, lihat Lists Tertaut Singly dan Doubly.

Pada platform 64-bit, struktur SLIST_HEADER harus selaras dengan 16 byte.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

Struktur XSTATE_SAVE adalah struktur buram yang menjelaskan informasi status prosesor yang diperluas yang disimpan dan dipulihkan driver mode kernel.

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

Semua anggota buram.

Rutinitas KeSaveExtendedProcessorState dan KeRestoreExtendedProcessorState menggunakan struktur ini.

Didukung di Windows 7 dan versi yang lebih baru dari sistem operasi Windows.

Header: Wdm.h. Termasuk: Wdm.h, Ntddk.h, Ntifs.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

Membaca Data Panggilan Balik Pemeriksaan Bug

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Perlindungan Run-Down

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx