Fungsi KeExpandKernelStackAndCalloutEx (ntddk.h)
Rutinitas KeExpandKernelStackAndCalloutEx memanggil rutinitas dan menjamin bahwa jumlah ruang tumpukan yang ditentukan tersedia untuk panggilan ini.
Sintaks
NTSTATUS KeExpandKernelStackAndCalloutEx(
PEXPAND_STACK_CALLOUT Callout,
PVOID Parameter,
SIZE_T Size,
BOOLEAN Wait,
PVOID Context
);
Parameter
Callout
Penunjuk fungsi ke rutinitas ExpandedStackCall . KeExpandKernelStackAndCalloutEx memperluas tumpukan, jika perlu, sebelum memanggil rutinitas ini.
Parameter
Menentukan nilai parameter yang akan diteruskan ke rutinitas ExpandedStackCall .
Size
Menentukan jumlah byte ruang tumpukan yang akan disediakan untuk panggilan ke rutinitas ExpandedStackCall . Nilai ini harus cukup besar untuk mengakomodasi penggunaan tumpukan rutinitas ExpandedStackCall dan panggilan apa pun yang mungkin dilakukan rutinitas ini. Nilai Ukuran tidak boleh melebihi MAXIMUM_EXPANSION_SIZE.
Wait
Menentukan apakah rutinitas harus menunggu untuk mengalokasikan ruang tumpukan yang diperlukan jika ruang ini tidak segera tersedia. Atur Tunggu ke TRUE jika rutinitas dapat menunggu tumpukan yang diperluas dialokasikan. Jika tidak, atur Tunggu ke FALSE. Parameter ini harus FALSE jika KeExpandKernelStackAndCalloutEx dipanggil di IRQL = DISPATCH_LEVEL.
Context
Dicadangkan. Selalu atur parameter ini ke NULL.
Mengembalikan nilai
KeExpandKernelStackAndCalloutEx mengembalikan STATUS_SUCCESS jika panggilan berhasil. Nilai yang mungkin dikembalikan termasuk kode kesalahan berikut.
Menampilkan kode | Deskripsi |
---|---|
STATUS_INVALID_PARAMETER_3 | Parameter Ukuran lebih besar dari MAXIMUM_EXPANSION_SIZE. |
STATUS_INVALID_PARAMETER_4 | Parameter Tunggu TRUE tetapi rutinitas dipanggil di IRQL = DISPATCH_LEVEL. |
STATUS_NO_MEMORY | Memori tidak cukup tersedia untuk memperluas tumpukan. |
STATUS_STACK_OVERFLOW | Tumpukan, jika diperluas, akan melebihi batas internal sistem operasi pada ruang tumpukan. |
Keterangan
Rutinitas ini pertama-tama menentukan apakah minimum byte Ukuran tersedia pada tumpukan saat ini untuk panggilan ke rutinitas ExpandedStackCall . Jika tidak, KeExpandKernelStackAndCalloutEx mencoba memperluas tumpukan saat ini menurut byte Ukuran . Jika tumpukan saat ini tidak dapat diperluas dengan jumlah ini, KeExpandKernelStackAndCalloutEx untuk sementara mengalokasikan segmen tumpukan kernel baru. Jika tumpukan ukuran yang diperlukan tersedia, KeExpandKernelStackAndCalloutEx menggunakan tumpukan ini untuk memanggil rutinitas ExpandedStackCall .
Jika KeExpandKernelStackAndCalloutEx tidak dapat memperoleh ruang tumpukan yang diperlukan, ia akan kembali tanpa memanggil rutinitas ExpandedStackCall . KeExpandKernelStackAndCalloutEx mengembalikan STATUS_SUCCESS hanya jika dapat memanggil rutinitas ExpandedStackCall . Jika tidak, kode kesalahan akan dikembalikan.
KeExpandKernelStackAndCalloutEx tidak dinyatakan dalam file header. Untuk menggunakan rutinitas ini di driver Anda, sertakan deklarasi fungsi berikut dalam kode driver Anda:
#if (NTDDI_VERSION >= NTDDI_VISTA)
__checkReturn
__drv_minIRQL(PASSIVE_LEVEL)
__drv_maxIRQL(DISPATCH_LEVEL)
__drv_reportError("DISPATCH_LEVEL is only supported on Windows 7 or later versions of Windows.")
NTKERNELAPI
NTSTATUS
KeExpandKernelStackAndCalloutEx (
__in PEXPAND_STACK_CALLOUT Callout,
__in_opt PVOID Parameter,
__in SIZE_T Size,
__in BOOLEAN Wait,
__in_opt PVOID Context
);
#endif
Rutinitas KeExpandKernelStackAndCallout mirip dengan KeExpandKernelStackAndCalloutEx tetapi tidak memiliki parameter Tunggu dan Konteks . Selain itu, KeExpandKernelStackAndCallout harus selalu dipanggil di IRQL <= APC_LEVEL, sedangkan KeExpandKernelStackAndCalloutEx dapat dipanggil di DISPATCH_LEVEL (tetapi hanya jika TungguSALAH).
Utas panggilan tidak boleh memanggil rutinitas PsTerminateSystemThread hingga rutinitas ExpandedStackCall utas kembali. PsTerminateSystemThread memeriksa untuk menentukan apakah rutinitas ExpandedStackCall masih aktif dan, jika ya, menyebabkan pemeriksaan bug.
Di Windows Vista dan Windows Server 2008, KeExpandKernelStackAndCalloutEx harus dipanggil di IRQL <= APC_LEVEL. Di Windows 7, Windows Server 2008 R2, dan versi Windows yang lebih baru, rutinitas ini dapat dipanggil di IRQL <= DISPATCH_LEVEL. Namun, parameter Tunggu harus FALSE jika rutinitas dipanggil pada DISPATCH_LEVEL. Jika TungguTRUE, panggilan harus terjadi di IRQL <= APC_LEVEL.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows Vista. |
Target Platform | Universal |
Header | ntddk.h |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Lihat bagian Keterangan. |
Lihat juga
ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk