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