KeExpandKernelStackAndCalloutEx, fonction (ntddk.h)
Le KeExpandKernelStackAndCalloutEx routine 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 Taille ne doit pas dépasser MAXIMUM_EXPANSION_SIZE.
Wait
Spécifie si la routine doit attendre d’allouer l’espace de pile requis si cet espace n’est pas immédiatement disponible. Définissez Wait sur TRUE si la routine peut attendre qu’une pile développée soit allouée. Sinon, définissez Wait sur FALSE. Ce paramètre doit être FALSE si KeExpandKernelStackAndCalloutEx est appelée à IRQL = DISPATCH_LEVEL.
Context
Réservé. Définissez toujours ce paramètre sur NULL.
Valeur de retour
KeExpandKernelStackAndCalloutEx retourne STATUS_SUCCESS si l’appel réussit. Les valeurs de retour possibles incluent les codes d’erreur suivants.
Retourner le code | 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 est insuffisante pour développer la pile. |
STATUS_STACK_OVERFLOW | La pile, si développée, dépasserait les limites internes du système d’exploitation sur l’espace de pile. |
Remarques
Cette routine détermine d’abord si un minimum de taille octets 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 Size octets. Si la pile actuelle ne peut pas être développée par ce montant, 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, elle 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é au <IRQL = APC_LEVEL, alors que KeExpandKernelStackAndCalloutEx peuvent être appelés à DISPATCH_LEVEL (mais seulement si d’attente est 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, provoque une vérification de bogue.
Dans Windows Vista et Windows Server 2008, KeExpandKernelStackAndCalloutEx doivent être appelés au <IRQL = APC_LEVEL. Dans Windows 7, Windows Server 2008 R2 et versions ultérieures de Windows, cette routine peut être appelée au <IRQL = DISPATCH_LEVEL. Toutefois, le paramètre Wait doit être FALSE si la routine est appelée à DISPATCH_LEVEL. Si 'attente est TRUE, l’appel doit se produire au <IRQL = APC_LEVEL.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows Vista. |
plateforme cible | Universel |
d’en-tête | ntddk.h |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Voir la section Remarques. |
Voir aussi
ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread