Función KeExpandKernelStackAndCalloutEx (ntddk.h)

La rutina KeExpandKernelStackAndCalloutEx llama a una rutina y garantiza que hay disponible una cantidad especificada de espacio de pila para esta llamada.

Sintaxis

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

Parámetros

Callout

Puntero de función a una rutina ExpandedStackCall . KeExpandKernelStackAndCalloutEx expande la pila, si es necesario, antes de llamar a esta rutina.

Parameter

Especifica el valor del parámetro que se va a pasar a la rutina ExpandedStackCall .

Size

Especifica el número de bytes de espacio de pila que se va a proporcionar para la llamada a la rutina ExpandedStackCall . Este valor debe ser lo suficientemente grande como para acomodar el uso de la pila de la rutina ExpandedStackCall y de cualquier llamada que pueda realizar esta rutina. El valor Tamaño no debe superar MAXIMUM_EXPANSION_SIZE.

Wait

Especifica si la rutina debe esperar para asignar el espacio de pila necesario si este espacio no está disponible inmediatamente. Establezca Esperar en TRUE si la rutina puede esperar a que se asigne una pila expandida. De lo contrario, establezca Esperar en FALSE. Este parámetro debe ser FALSE si se llama a KeExpandKernelStackAndCalloutEx en IRQL = DISPATCH_LEVEL.

Context

Reservado. Establezca siempre este parámetro en NULL.

Valor devuelto

KeExpandKernelStackAndCalloutEx devuelve STATUS_SUCCESS si la llamada es correcta. Los valores devueltos posibles incluyen los siguientes códigos de error.

Código devuelto Descripción
STATUS_INVALID_PARAMETER_3 El parámetro Size es mayor que MAXIMUM_EXPANSION_SIZE.
STATUS_INVALID_PARAMETER_4 El parámetro Wait es TRUE, pero se llamó a la rutina en IRQL = DISPATCH_LEVEL.
STATUS_NO_MEMORY No hay suficiente memoria disponible para expandir la pila.
STATUS_STACK_OVERFLOW La pila, si se expande, superaría los límites internos del sistema operativo en el espacio de pila.

Comentarios

Esta rutina determina primero si hay disponible un mínimo de bytes Size en la pila actual para la llamada a la rutina ExpandedStackCall . Si no es así, KeExpandKernelStackAndCalloutEx intenta expandir la pila actual por bytes de tamaño . Si esta cantidad no puede expandir la pila actual, KeExpandKernelStackAndCalloutEx asigna temporalmente un nuevo segmento de pila de kernel. Si hay disponible una pila del tamaño necesario, KeExpandKernelStackAndCalloutEx usa esta pila para llamar a la rutina ExpandedStackCall .

Si KeExpandKernelStackAndCalloutEx no puede obtener el espacio de pila necesario, devuelve sin llamar a la rutina ExpandedStackCall . KeExpandKernelStackAndCalloutEx devuelve STATUS_SUCCESS solo si puede llamar a la rutina ExpandedStackCall . De lo contrario, devuelve un código de error.

KeExpandKernelStackAndCalloutEx no se declara en un archivo de encabezado. Para usar esta rutina en el controlador, incluya la siguiente declaración de función en el código del controlador:

#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 rutina KeExpandKernelStackAndCallout es similar a KeExpandKernelStackAndCalloutEx , pero no tiene parámetros Wait y Context . Además, se debe llamar siempre a KeExpandKernelStackAndCallout en IRQL <= APC_LEVEL, mientras que KeExpandKernelStackAndCalloutEx se puede llamar en DISPATCH_LEVEL (pero solo si Wait es FALSE).

El subproceso que realiza la llamada no debe llamar a la rutina PsTerminateSystemThread hasta que se devuelva la rutina ExpandedStackCall del subproceso. PsTerminateSystemThread comprueba si la rutina ExpandedStackCall sigue activa y, si es así, provoca una comprobación de errores.

En Windows Vista y Windows Server 2008, se debe llamar a KeExpandKernelStackAndCalloutEx en IRQL <= APC_LEVEL. En Windows 7, Windows Server 2008 R2 y versiones posteriores de Windows, se puede llamar a esta rutina en IRQL <= DISPATCH_LEVEL. Sin embargo, el parámetro Wait debe ser FALSE si se llama a la rutina en DISPATCH_LEVEL. Si Wait es TRUE, la llamada debe producirse en IRQL <= APC_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows Vista.
Plataforma de destino Universal
Encabezado ntddk.h
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL vea la sección Comentarios.

Consulte también

ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread