Freigeben über


KeExpandKernelStackAndCalloutEx-Funktion (ntddk.h)

Die KeExpandKernelStackAndCalloutEx-Routine ruft eine Routine auf und garantiert, dass für diesen Aufruf eine angegebene Menge an Stapelspeicher verfügbar ist.

Syntax

NTSTATUS KeExpandKernelStackAndCalloutEx(
  PEXPAND_STACK_CALLOUT Callout,
  PVOID                 Parameter,
  SIZE_T                Size,
  BOOLEAN               Wait,
  PVOID                 Context
);

Parameter

Callout

Ein Funktionszeiger auf eine ExpandedStackCall-Routine . KeExpandKernelStackAndCalloutEx erweitert den Stapel bei Bedarf, bevor diese Routine aufgerufen wird.

Parameter

Gibt den Parameterwert an, der an die ExpandedStackCall-Routine übergeben werden soll.

Size

Gibt die Anzahl der Bytes des Stapelspeichers an, der für den Aufruf der ExpandedStackCall-Routine bereitgestellt werden soll. Dieser Wert muss groß genug sein, um die Stapelnutzung der ExpandedStackCall-Routine und aller Aufrufe dieser Routine zu berücksichtigen. Der Size-Wert darf MAXIMUM_EXPANSION_SIZE nicht überschreiten.

Wait

Gibt an, ob die Routine warten soll, um den erforderlichen Stapelspeicherplatz zuzuweisen, wenn dieser Speicherplatz nicht sofort verfügbar ist. Legen Sie Warten auf TRUE fest, wenn die Routine auf die Zuweisung eines erweiterten Stapels warten kann. Legen Sie andernfalls Warten auf FALSE fest. Dieser Parameter muss FALSE sein, wenn KeExpandKernelStackAndCalloutEx unter IRQL = DISPATCH_LEVEL aufgerufen wird.

Context

Reserviert. Legen Sie diesen Parameter immer auf NULL fest.

Rückgabewert

KeExpandKernelStackAndCalloutEx gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Rückgabewerte sind die folgenden Fehlercodes.

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER_3 Der Parameter Size ist größer als MAXIMUM_EXPANSION_SIZE.
STATUS_INVALID_PARAMETER_4 Der Wait-Parameter ist TRUE, aber die Routine wurde unter IRQL = DISPATCH_LEVEL aufgerufen.
STATUS_NO_MEMORY Zum Erweitern des Stapels steht nicht genügend Arbeitsspeicher zur Verfügung.
STATUS_STACK_OVERFLOW Der Stapel würde, wenn er erweitert wird, die internen Grenzwerte des Betriebssystems für den Stapelspeicher überschreiten.

Hinweise

Diese Routine bestimmt zunächst, ob für den Aufruf der ExpandedStackCall-Routine im aktuellen Stapel ein Minimum von Größenbytes verfügbar ist. Andernfalls versucht KeExpandKernelStackAndCalloutEx , den aktuellen Stapel um Bytes zu erweitern. Wenn der aktuelle Stapel nicht um diesen Betrag erweitert werden kann, weist KeExpandKernelStackAndCalloutEx vorübergehend ein neues Kernelstapelsegment zu. Wenn ein Stapel der erforderlichen Größe verfügbar ist, verwendet KeExpandKernelStackAndCalloutEx diesen Stapel, um die ExpandedStackCall-Routine aufzurufen.

Wenn KeExpandKernelStackAndCalloutEx den erforderlichen Stapelspeicher nicht abrufen kann, wird zurückgegeben, ohne die ExpandedStackCall-Routine aufzurufen. KeExpandKernelStackAndCalloutEx gibt STATUS_SUCCESS nur zurück, wenn die ExpandedStackCall-Routine aufgerufen werden kann. Andernfalls wird ein Fehlercode zurückgegeben.

KeExpandKernelStackAndCalloutEx wird in einer Headerdatei nicht deklariert. Um diese Routine in Ihrem Treiber zu verwenden, fügen Sie die folgende Funktionsdeklaration in Ihren Treibercode ein:

#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

Die KeExpandKernelStackAndCallout-Routine ähnelt KeExpandKernelStackAndCalloutEx , verfügt jedoch nicht über die Parameter Wait und Context . Darüber hinaus muss KeExpandKernelStackAndCallout immer unter IRQL <= APC_LEVEL aufgerufen werden, während KeExpandKernelStackAndCalloutEx bei DISPATCH_LEVEL aufgerufen werden kann (aber nur, wenn WaitFALSE ist).

Der aufrufende Thread darf die PsTerminateSystemThread-Routine erst aufrufen, wenn die ExpandedStackCall-Routine des Threads zurückgegeben wird. PsTerminateSystemThread überprüft, ob die ExpandedStackCall-Routine noch aktiv ist, und verursacht eine Fehlerprüfung.

In Windows Vista und Windows Server 2008 muss KeExpandKernelStackAndCalloutEx unter IRQL <= APC_LEVEL aufgerufen werden. In Windows 7, Windows Server 2008 R2 und höheren Versionen von Windows kann diese Routine unter IRQL <= DISPATCH_LEVEL aufgerufen werden. Der Wait-Parameter muss jedoch FALSE sein, wenn die Routine bei DISPATCH_LEVEL aufgerufen wird. Wenn Waittrue ist, muss der Aufruf unter IRQL <= APC_LEVEL erfolgen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows Vista.
Zielplattform Universell
Header ntddk.h
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Weitere Informationen

ExpandedStackCallKeExpandKernelStackAndCalloutpsTerminateSystemThread