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