Compartir a través de


Función GetQueuedCompletionStatus (ioapiset.h)

Intenta quitar un paquete de finalización de E/S desde el puerto de finalización de E/S especificado. Si no hay ningún paquete de finalización en cola, la función espera a que se complete una operación de E/S pendiente asociada al puerto de finalización.

Para quitar varios paquetes de finalización de E/S a la vez, use la función GetQueuedCompletionStatusEx.

Sintaxis

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

Parámetros

[in] CompletionPort

Identificador del puerto de finalización. Para crear un puerto de finalización, use la función CreateIoCompletionPort.

lpNumberOfBytesTransferred

Puntero a una variable que recibe el número de bytes transferidos en una operación de E/S completada.

[out] lpCompletionKey

Puntero a una variable que recibe el valor de clave de finalización asociado al identificador de archivo cuya operación de E/S se ha completado. Una clave de finalización es una clave por archivo especificada en una llamada a CreateIoCompletionPort.

[out] lpOverlapped

Puntero a una variable que recibe la dirección del estructura de SUPERPUESTA que se especificó cuando se inició la operación de E/S completada.

Incluso si ha pasado la función un identificador de archivo asociado a un puerto de finalización y una estructura de superpuesta válida , una aplicación puede impedir la notificación del puerto de finalización. Para ello, se especifica un identificador de evento válido para el miembro hEvent del superpuesta estructura y se establece su bit de orden bajo. Un controlador de eventos válido cuyo bit de orden bajo se establece impide que la finalización de la E/S superpuesta incluya un paquete de finalización en el puerto de finalización.

[in] dwMilliseconds

Número de milisegundos que el autor de la llamada está dispuesto a esperar a que aparezca un paquete de finalización en el puerto de finalización. Si un paquete de finalización no aparece dentro del tiempo especificado, la función agota el tiempo de espera, devuelve FALSEy establece *lpOverlapped en NULL.

Si dwMilliseconds es INFINITE, la función nunca agotará el tiempo de espera. Si dwMilliseconds es cero y no hay ninguna operación de E/S para desqueue, la función agotará el tiempo de espera inmediatamente.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 y Windows Server 2008 R2: El dwMilliseconds valor incluye el tiempo invertido en estados de baja potencia. Por ejemplo, el tiempo de espera continúa contando mientras el equipo está dormido.

Windows 8 y versiones más recientes, Windows Server 2012 y versiones posteriores: El dwMilliseconds valor no incluye el tiempo invertido en estados de baja potencia. Por ejemplo, el tiempo de espera no continúa contando mientras el equipo está dormido.

Valor devuelto

Devuelve un valor distinto de cero (TRUE) si es correcto o cero (FALSE) de lo contrario.

Para obtener información de error extendida, llame a GetLastError.

Para obtener más información, vea la sección Comentarios.

Observaciones

Esta función asocia un subproceso al puerto de finalización especificado. Un subproceso se puede asociar como máximo a un puerto de finalización.

Si se produce un error en una llamada a GetQueuedCompletionStatus porque el identificador de puerto de finalización asociado a él está cerrado mientras la llamada está pendiente, la función devuelve FALSE, *lpOverlapped será nully GetLastError devolverá ERROR_ABANDONED_WAIT_0.

Windows Server 2003 y Windows XP: Cerrar el identificador de puerto de finalización mientras una llamada está pendiente no dará lugar al comportamiento indicado anteriormente. La función seguirá esperando hasta que se quite una entrada del puerto o hasta que se produzca un tiempo de espera, si se especifica como un valor distinto de INFINITE.

Si la función GetQueuedCompletionStatus se realiza correctamente, desconotó un paquete de finalización para una operación de E/S correcta desde el puerto de finalización y ha almacenado información en las variables a las que apuntaban los parámetros siguientes: lpNumberOfBytes, lpCompletionKeyy lpOverlapped. Tras un error (el valor devuelto es FALSE), esos mismos parámetros pueden contener combinaciones de valores particulares de la siguiente manera:

  • Si *lpOverlapped es NULL, la función no desconocía un paquete de finalización del puerto de finalización. En este caso, la función no almacena información en las variables a las que apunta el lpNumberOfBytes y parámetros lpCompletionKey y sus valores son indeterminados.
  • Si *lpOverlapped no es NULL y la función desqueue un paquete de finalización para una operación de E/S con error desde el puerto de finalización, la función almacena información sobre la operación con errores en las variables a las que apunta lpNumberOfBytes, lpCompletionKeyy lpOverlapped. Para obtener información de error extendida, llame a GetLastError.
Para obtener más información sobre la teoría del puerto de finalización de E/S, el uso y las funciones asociadas, consulte puertos de finalización de E/S.

En Windows 8 y Windows Server 2012, esta función es compatible con las siguientes tecnologías.

Tecnología Soportado
Protocolo bloque de mensajes del servidor (SMB) 3.0
Conmutación por error transparente (TFO) de SMB 3.0
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO)
Sistema de archivos de volumen compartido de clúster (CsvFS)
Sistema de archivos resistente (ReFS)

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de ioapiset.h (incluya Windows.h)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

funciones de administración de archivos

funciones de

GetQueuedCompletionStatusEx

de puertos de finalización de E/S de

LockFileEx de

Temas de información general de

PostQueuedCompletionStatus

ReadFile

TransactNamedPipe

usar los encabezados de Windows

WaitCommEvent

WriteFile