Compartilhar via


Função GetQueuedCompletionStatus (ioapiset.h)

Tenta remover um pacote de conclusão de E/S da porta de conclusão de E/S especificada. Se não houver nenhum pacote de conclusão na fila, a função aguardará a conclusão de uma operação de E/S pendente associada à porta de conclusão.

Para remover vários pacotes de conclusão de E/S ao mesmo tempo, use a função GetQueuedCompletionStatusEx.

Sintaxe

BOOL GetQueuedCompletionStatus(
  [in]  HANDLE       CompletionPort,
        LPDWORD      lpNumberOfBytesTransferred,
  [out] PULONG_PTR   lpCompletionKey,
  [out] LPOVERLAPPED *lpOverlapped,
  [in]  DWORD        dwMilliseconds
);

Parâmetros

[in] CompletionPort

Um identificador para a porta de conclusão. Para criar uma porta de conclusão, use a função CreateIoCompletionPort.

lpNumberOfBytesTransferred

Um ponteiro para uma variável que recebe o número de bytes transferidos em uma operação de E/S concluída.

[out] lpCompletionKey

Um ponteiro para uma variável que recebe o valor da chave de conclusão associado ao identificador de arquivo cuja operação de E/S foi concluída. Uma chave de conclusão é uma chave por arquivo especificada em uma chamada para CreateIoCompletionPort.

[out] lpOverlapped

Um ponteiro para uma variável que recebe o endereço da estrutura de OVERLAPPED que foi especificada quando a operação de E/S concluída foi iniciada.

Mesmo que você tenha passado na função um identificador de arquivo associado a uma porta de conclusão e uma estrutura de OVERLAPPED válida, um aplicativo poderá impedir a notificação da porta de conclusão. Isso é feito especificando um identificador de evento válido para o hEvent membro da estrutura de OVERLAPPED e definindo seu bit de baixa ordem. Um identificador de evento válido cujo bit de baixa ordem é definido impede que a conclusão da E/S sobreposta enfileira um pacote de conclusão para a porta de conclusão.

[in] dwMilliseconds

O número de milissegundos que o chamador está disposto a aguardar que um pacote de conclusão apareça na porta de conclusão. Se um pacote de conclusão não aparecer dentro do tempo especificado, a função atingirá o tempo limite, retornará FALSE e definirá * lpOverlapped para NULL.

Se dwMilliseconds for INFINITE, a função nunca terá tempo limite. Se dwMilliseconds for zero e não houver nenhuma operação de E/S para desembolsar, a função acabará imediatamente.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 e Windows Server 2008 R2: O valor dwMilliseconds inclui o tempo gasto em estados de baixa potência. Por exemplo, o tempo limite continua em contagem regressiva enquanto o computador está dormindo.

Windows 8 e mais recente, Windows Server 2012 e mais recente: o valor dwMilliseconds não inclui o tempo gasto em estados de baixa potência. Por exemplo, o tempo limite não continua a contagem regressiva enquanto o computador está dormindo.

Valor de retorno

Retorna nonzero (TRUE) se bem-sucedido ou zero (FALSE) caso contrário.

Para obter informações de erro estendidas, chame GetLastError.

Para obter mais informações, consulte a seção Comentários.

Observações

Essa função associa um thread à porta de conclusão especificada. Um thread pode ser associado a no máximo uma porta de conclusão.

Se uma chamada para GetQueuedCompletionStatus falhar porque o identificador de porta de conclusão associado a ele está fechado enquanto a chamada está pendente, a função retorna false, *lpOverlapped será NULL e GetLastError retornará ERROR_ABANDONED_WAIT_0.

Windows Server 2003 e Windows XP: Fechar o identificador da porta de conclusão enquanto uma chamada estiver pendente não resultará no comportamento declarado anteriormente. A função continuará aguardando até que uma entrada seja removida da porta ou até que ocorra um tempo limite, se especificado como um valor diferente de INFINITE.

Se a função GetQueuedCompletionStatus for bem-sucedida, ela descodificará um pacote de conclusão para uma operação de E/S bem-sucedida da porta de conclusão e armazenará informações nas variáveis apontadas pelos seguintes parâmetros: lpNumberOfBytes, lpCompletionKeye lpOverlapped. Após a falha (o valor retornado é FALSE), esses mesmos parâmetros podem conter combinações de valor específicas da seguinte maneira:

  • Se * lpOverlapped é NULL, a função não desempou um pacote de conclusão da porta de conclusão. Nesse caso, a função não armazena informações nas variáveis apontadas pelos parâmetros lpNumberOfBytes e lpCompletionKey e seus valores são indeterminados.
  • Se * lpOverlapped não estiver NULL e a função remover um pacote de conclusão para uma operação de E/S com falha na porta de conclusão, a função armazena informações sobre a operação com falha nas variáveis apontadas por lpNumberOfBytes, lpCompletionKeye lpOverlapped. Para obter informações de erro estendidas, chame GetLastError.
Para obter mais informações sobre a teoria da porta de conclusão de E/S, o uso e as funções associadas, consulte portas de conclusão de E/S.

No Windows 8 e no Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Suportado
Protocolo SMB (Bloco de Mensagens do Servidor) 3.0 Sim
TFO (Failover Transparente) do SMB 3.0 Sim
SMB 3.0 com Compartilhamentos de Arquivos de Expansão (SO) Sim
Sistema de Arquivos de Volume Compartilhado de Cluster (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho ioapiset.h (inclua Windows.h)
biblioteca Kernel32.lib
de DLL Kernel32.dll

Consulte também

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

Funções de gerenciamento de arquivos

Funções

GetQueuedCompletionStatusEx

portas de conclusão de E/S

LockFileEx

Tópicos de visão geral

PostQueuedCompletionStatus

ReadFile

TransactNamedPipe

usando os cabeçalhos do Windows

WaitCommEvent

writefile