Funzione KeExpandKernelStackAndCalloutEx (ntddk.h)
La routine KeExpandKernelStackAndCalloutEx chiama una routine e garantisce che per questa chiamata sia disponibile una quantità specificata di spazio nello stack.
Sintassi
NTSTATUS KeExpandKernelStackAndCalloutEx(
PEXPAND_STACK_CALLOUT Callout,
PVOID Parameter,
SIZE_T Size,
BOOLEAN Wait,
PVOID Context
);
Parametri
Callout
Puntatore a una routineExpandedStackCall. KeExpandKernelStackAndCalloutEx espande lo stack, se necessario, prima di chiamare questa routine.
Parameter
Specifica il valore del parametro da passare alla routineExpandedStackCall.
Size
Specifica il numero di byte di spazio dello stack da fornire per la chiamata alla routine ExpandedStackCall. Questo valore deve essere sufficientemente grande per supportare l'utilizzo dello stack della routineexpandedStackCalle di qualsiasi chiamata che questa routine potrebbe effettuare. Il valore Size non deve superare MAXIMUM_EXPANSION_SIZE.
Wait
Specifica se la routine deve attendere l'allocazione dello spazio dello stack necessario se questo spazio non è immediatamente disponibile. Impostare Wait su TRUE se la routine può attendere l'allocazione di uno stack espanso. In caso contrario, impostare Wait su FALSE. Questo parametro deve essere FALSE se KeExpandKernelStackAndCalloutEx viene chiamato in IRQL = DISPATCH_LEVEL.
Context
Riservato. Impostare sempre questo parametro su NULL.
Valore restituito
KeExpandKernelStackAndCalloutEx restituisce STATUS_SUCCESS se la chiamata ha esito positivo. I valori restituiti possibili includono i codici di errore seguenti.
Codice restituito | Descrizione |
---|---|
STATUS_INVALID_PARAMETER_3 | Il parametro Size è maggiore di MAXIMUM_EXPANSION_SIZE. |
STATUS_INVALID_PARAMETER_4 | Il parametro Wait è TRUE, ma la routine è stata chiamata in IRQL = DISPATCH_LEVEL. |
STATUS_NO_MEMORY | Memoria insufficiente per espandere lo stack. |
STATUS_STACK_OVERFLOW | Lo stack, se espanso, supererebbe i limiti interni del sistema operativo sullo spazio dello stack. |
Osservazioni
Questa routine determina innanzitutto se è disponibile almeno byte nello stack corrente per la chiamata alla routine ExpandedStackCall. In caso contrario, KeExpandKernelStackAndCalloutEx tenta di espandere lo stack corrente byte dimensioni. Se lo stack corrente non può essere espanso da questo importo, KeExpandKernelStackAndCalloutEx alloca temporaneamente un nuovo segmento dello stack del kernel. Se è disponibile uno stack delle dimensioni necessarie, KeExpandKernelStackAndCalloutEx usa questo stack per chiamare la routine ExpandedStackCall.
Se KeExpandKernelStackAndCalloutEx non è in grado di ottenere lo spazio dello stack necessario, restituisce senza chiamare la routine ExpandedStackCall. KeExpandKernelStackAndCalloutEx restituisce STATUS_SUCCESS solo se è in grado di chiamare la routineExpandedStackCall. In caso contrario, restituisce un codice di errore.
KeExpandKernelStackAndCalloutEx non è dichiarato in un file di intestazione. Per usare questa routine nel driver, includere la dichiarazione di funzione seguente nel codice del driver:
#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 routineKeExpandKernelStackAndCalloutè simile a KeExpandKernelStackAndCalloutEx, ma non dispone di parametri Wait e Context. Inoltre, KeExpandKernelStackAndCallout deve essere sempre chiamato in IRQL <= APC_LEVEL, mentre KeExpandKernelStackAndCalloutEx può essere chiamato in DISPATCH_LEVEL (ma solo se Wait è FALSE).
Il thread chiamante non deve chiamare la routinePsTerminateSystemThread fino a quando non viene restituita la routine diExpandedStackCall del thread. PsTerminateSystemThread controlla se la routine ExpandedStackCall è ancora attiva e, in caso affermativo, genera un controllo dei bug.
In Windows Vista e Windows Server 2008 è necessario chiamare KeExpandKernelStackAndCalloutEx in IRQL <= APC_LEVEL. In Windows 7, Windows Server 2008 R2 e versioni successive di Windows, questa routine può essere chiamata in IRQL <= DISPATCH_LEVEL. Tuttavia, il parametro Wait deve essere FALSE se la routine viene chiamata in DISPATCH_LEVEL. Se Wait è TRUE, la chiamata deve essere eseguita in IRQL <= APC_LEVEL.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows Vista. |
piattaforma di destinazione | Universale |
intestazione | ntddk.h |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | Vedere la sezione Osservazioni. |
Vedere anche
ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread