Função KeExpandKernelStackAndCalloutEx (ntddk.h)
A rotina KeExpandKernelStackAndCalloutEx chama uma rotina e garante que uma quantidade especificada de espaço de pilha esteja disponível para essa chamada.
Sintaxe
NTSTATUS KeExpandKernelStackAndCalloutEx(
PEXPAND_STACK_CALLOUT Callout,
PVOID Parameter,
SIZE_T Size,
BOOLEAN Wait,
PVOID Context
);
Parâmetros
Callout
Um ponteiro de função para um rotina de ExpandedStackCall. KeExpandKernelStackAndCalloutEx expande a pilha, se necessário, antes de chamar essa rotina.
Parameter
Especifica o valor do parâmetro a ser passado para a rotina deExpandedStackCall.
Size
Especifica o número de bytes de espaço de pilha a ser fornecido para a chamada à rotinaExpandedStackCall. Esse valor deve ser grande o suficiente para acomodar o uso de pilha do rotina de ExpandedStackCall e de qualquer chamada que essa rotina possa fazer. O valor tamanho não deve exceder MAXIMUM_EXPANSION_SIZE.
Wait
Especifica se a rotina deve aguardar para alocar o espaço de pilha necessário se esse espaço não estiver disponível imediatamente. Defina a espera para TRUE se a rotina puder aguardar a alocação de uma pilha expandida. Caso contrário, defina Wait to FALSE. Esse parâmetro deve ser FALSE se KeExpandKernelStackAndCalloutEx for chamado em IRQL = DISPATCH_LEVEL.
Context
Reservado. Sempre defina esse parâmetro como NULL.
Valor de retorno
KeExpandKernelStackAndCalloutEx retornará STATUS_SUCCESS se a chamada for bem-sucedida. Os valores de retorno possíveis incluem os seguintes códigos de erro.
Código de retorno | Descrição |
---|---|
STATUS_INVALID_PARAMETER_3 | O parâmetro Size é maior que MAXIMUM_EXPANSION_SIZE. |
STATUS_INVALID_PARAMETER_4 | O parâmetro Wait é TRUE, mas a rotina foi chamada em IRQL = DISPATCH_LEVEL. |
STATUS_NO_MEMORY | Não há memória suficiente disponível para expandir a pilha. |
STATUS_STACK_OVERFLOW | A pilha, se expandida, excederia os limites internos do sistema operacional no espaço de pilha. |
Observações
Essa rotina primeiro determina se um mínimo de Tamanho bytes está disponível na pilha atual para a chamada para a rotina deExpandedStackCall. Caso contrário, KeExpandKernelStackAndCalloutEx tenta expandir a pilha atual Tamanho bytes. Se a pilha atual não puder ser expandida por esse valor, KeExpandKernelStackAndCalloutEx alocará temporariamente um novo segmento de pilha de kernel. Se uma pilha do tamanho necessário estiver disponível, KeExpandKernelStackAndCalloutEx usa essa pilha para chamar a rotinaExpandedStackCall.
Se KeExpandKernelStackAndCalloutEx não conseguir obter o espaço de pilha necessário, ele retornará sem chamar a rotina deExpandedStackCall. KeExpandKernelStackAndCalloutEx retornará STATUS_SUCCESS somente se puder chamar a rotinaExpandedStackCall. Caso contrário, ele retornará um código de erro.
KeExpandKernelStackAndCalloutEx não é declarado em um arquivo de cabeçalho. Para usar essa rotina em seu driver, inclua a seguinte declaração de função no código do 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
A rotina deKeExpandKernelStackAndCallouté semelhante a KeExpandKernelStackAndCalloutEx, mas não tem parâmetros Wait e Context. Além disso, KeExpandKernelStackAndCallout sempre devem ser chamados no <DO IRQL = APC_LEVEL, enquanto KeExpandKernelStackAndCalloutEx podem ser chamados em DISPATCH_LEVEL (mas somente se de Espera for FALSE).
O thread de chamada não deve chamar a rotina dePsTerminateSystemThreadaté que a rotina ExpandedStackCall do thread retorne. PsTerminateSystemThread verifica se a rotina ExpandedStackCall ainda está ativa e, se estiver, causará uma verificação de bugs.
No Windows Vista e no Windows Server 2008, KeExpandKernelStackAndCalloutEx devem ser chamados em IRQL <= APC_LEVEL. No Windows 7, windows server 2008 R2 e versões posteriores do Windows, essa rotina pode ser chamada em IRQL <= DISPATCH_LEVEL. No entanto, o parâmetro Wait deverá ser FALSE se a rotina for chamada em DISPATCH_LEVEL. Se de Espera for TRUE, a chamada deverá ocorrer em IRQL <= APC_LEVEL.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows Vista. |
da Plataforma de Destino | Universal |
cabeçalho | ntddk.h |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | Consulte a seção Comentários. |
Consulte também
ExpandedStackCallKeExpandKernelStackAndCalloutPsTerminateSystemThread