Funzione KeExpandKernelStackAndCalloutEx (ntddk.h)
La routine KeExpandKernelStackAndCalloutEx chiama una routine e garantisce che per questa chiamata sia disponibile una quantità specificata di spazio dello stack.
Sintassi
NTSTATUS KeExpandKernelStackAndCalloutEx(
PEXPAND_STACK_CALLOUT Callout,
PVOID Parameter,
SIZE_T Size,
BOOLEAN Wait,
PVOID Context
);
Parametri
Callout
Puntatore di funzione a una routine ExpandedStackCall . KeExpandKernelStackAndCalloutEx espande lo stack, se necessario, prima di chiamare questa routine.
Parameter
Specifica il valore del parametro da passare alla routine ExpandedStackCall .
Size
Specifica il numero di byte dello spazio dello stack da fornire per la chiamata alla routine ExpandedStackCall . Questo valore deve essere abbastanza grande per soddisfare l'utilizzo dello stack della routine ExpandedStackCall e 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 richiesto 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 disponibile per espandere lo stack. |
STATUS_STACK_OVERFLOW | Lo stack, se espanso, supera i limiti interni del sistema operativo sullo spazio dello stack. |
Commenti
Questa routine determina innanzitutto se è disponibile un minimo di byte di dimensioni nello stack corrente per la chiamata alla routine ExpandedStackCall . In caso contrario, KeExpandKernelStackAndCalloutEx tenta di espandere lo stack corrente in byte size . Se lo stack corrente non può essere espanso in base a questa quantità, KeExpandKernelStackAndCalloutEx alloca temporaneamente un nuovo segmento dello stack di 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 richiesto, restituisce senza chiamare la routine ExpandedStackCall . KeExpandKernelStackAndCalloutEx restituisce STATUS_SUCCESS solo se è in grado di chiamare la routine ExpandedStackCall . 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 routine KeExpandKernelStackAndCallout è 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 routine PsTerminateSystemThread finché non viene restituita la routine ExpandedStackCall del thread. PsTerminateSystemThread verifica se la routine ExpandedStackCall è ancora attiva e, se è, causa un controllo di bug.
In Windows Vista e Windows Server 2008, KeExpandKernelStackAndCalloutEx deve essere chiamato 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 verificarsi in IRQL <= APC_LEVEL.
Requisiti
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. |
Vedi anche
ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread