KeExpandKernelStackAndCalloutEx, fonction (ntddk.h)

La routine KeExpandKernelStackAndCalloutEx appelle une routine et garantit qu’une quantité spécifiée d’espace de pile est disponible pour cet appel.

Syntaxe

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

Paramètres

Callout

Pointeur de fonction vers une routine ExpandedStackCall . KeExpandKernelStackAndCalloutEx développe la pile, si nécessaire, avant d’appeler cette routine.

Parameter

Spécifie la valeur du paramètre à passer à la routine ExpandedStackCall .

Size

Spécifie le nombre d’octets d’espace de pile à fournir pour l’appel à la routine ExpandedStackCall . Cette valeur doit être suffisamment grande pour prendre en charge l’utilisation de la pile de la routine ExpandedStackCall et de tout appel que cette routine peut effectuer. La valeur Size ne doit pas dépasser MAXIMUM_EXPANSION_SIZE.

Wait

Spécifie si la routine doit attendre pour allouer l’espace de pile requis si cet espace n’est pas immédiatement disponible. Définissez Attendre sur TRUE si la routine peut attendre qu’une pile développée soit allouée. Sinon, définissez Attendre sur FALSE. Ce paramètre doit avoir la valeur FALSE si KeExpandKernelStackAndCalloutEx est appelé à l’adresse IRQL = DISPATCH_LEVEL.

Context

Réservé. Définissez toujours ce paramètre sur NULL.

Valeur retournée

KeExpandKernelStackAndCalloutEx retourne STATUS_SUCCESS si l’appel réussit. Les valeurs de retour possibles incluent les codes d’erreur suivants.

Code de retour Description
STATUS_INVALID_PARAMETER_3 Le paramètre Size est supérieur à MAXIMUM_EXPANSION_SIZE.
STATUS_INVALID_PARAMETER_4 Le paramètre Wait a la valeur TRUE, mais la routine a été appelée à IRQL = DISPATCH_LEVEL.
STATUS_NO_MEMORY La mémoire disponible est insuffisante pour développer la pile.
STATUS_STACK_OVERFLOW La pile, si elle était développée, dépasserait les limites internes du système d’exploitation en matière d’espace de pile.

Remarques

Cette routine détermine d’abord si un minimum d’octets de taille est disponible sur la pile actuelle pour l’appel à la routine ExpandedStackCall . Si ce n’est pas le cas, KeExpandKernelStackAndCalloutEx tente de développer la pile actuelle par taille d’octets. Si la pile actuelle ne peut pas être développée de cette manière, KeExpandKernelStackAndCalloutEx alloue temporairement un nouveau segment de pile de noyau. Si une pile de la taille requise est disponible, KeExpandKernelStackAndCalloutEx utilise cette pile pour appeler la routine ExpandedStackCall .

Si KeExpandKernelStackAndCalloutEx ne parvient pas à obtenir l’espace de pile requis, il retourne sans appeler la routine ExpandedStackCall . KeExpandKernelStackAndCalloutEx retourne STATUS_SUCCESS uniquement s’il est en mesure d’appeler la routine ExpandedStackCall . Sinon, il retourne un code d’erreur.

KeExpandKernelStackAndCalloutEx n’est pas déclaré dans un fichier d’en-tête. Pour utiliser cette routine dans votre pilote, incluez la déclaration de fonction suivante dans votre code de pilote :

#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

La routine KeExpandKernelStackAndCallout est similaire à KeExpandKernelStackAndCalloutEx , mais n’a pas de paramètres Wait et Context . En outre, KeExpandKernelStackAndCallout doit toujours être appelé à l’adresse IRQL <= APC_LEVEL, tandis que KeExpandKernelStackAndCalloutEx peut être appelé à DISPATCH_LEVEL (mais uniquement si Wait a la valeur FALSE).

Le thread appelant ne doit pas appeler la routine PsTerminateSystemThread tant que la routine ExpandedStackCall du thread n’est pas retournée. PsTerminateSystemThread vérifie si la routine ExpandedStackCall est toujours active et, le cas échéant, si elle provoque un bogue case activée.

Dans Windows Vista et Windows Server 2008, KeExpandKernelStackAndCalloutEx doit être appelé à l’adresse IRQL <= APC_LEVEL. Dans Windows 7, Windows Server 2008 R2 et les versions ultérieures de Windows, cette routine peut être appelée à l’adresse IRQL <= DISPATCH_LEVEL. Toutefois, le paramètre Wait doit avoir la valeur FALSE si la routine est appelée à DISPATCH_LEVEL. Si Wait a la valeur TRUE, l’appel doit se produire dans IRQL <= APC_LEVEL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows Vista.
Plateforme cible Universal
En-tête ntddk.h
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consultez la section Notes.

Voir aussi

ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread