Função WinHttpCloseHandle (winhttp.h)
A função WinHttpCloseHandle fecha um único identificador HINTERNET (consulte Identificadores HINTERNET no WinHTTP).
Sintaxe
WINHTTPAPI BOOL WinHttpCloseHandle(
[in] HINTERNET hInternet
);
Parâmetros
[in] hInternet
Um identificador HINTERNET válido (consulte Identificadores HINTERNET no WinHTTP) a ser fechado.
Retornar valor
TRUE se o identificador for fechado com êxito, caso contrário, FALSE. Para obter informações de erro estendidas, chame GetLastError. Entre os códigos de erro retornados estão os seguintes.
Códigos de erro | Descrição |
---|---|
|
O suporte à função WinHTTP está sendo desligado ou descarregado. |
|
Ocorreu um erro interno. |
|
Não havia memória suficiente disponível para concluir a operação solicitada. (Código de erro do Windows) |
Comentários
Mesmo quando WinHTTP é usado no modo assíncrono (ou seja, quando WINHTTP_FLAG_ASYNC foi definido no WinHttpOpen), essa função opera de forma síncrona. O valor retornado indica êxito ou falha. Para obter informações de erro estendidas, chame GetLastError.
Se houver um retorno de chamada status registrado para o identificador que está sendo fechado e o identificador tiver sido criado com um valor de contexto não NULL, será feito um retorno de chamada WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING. Este é o último retorno de chamada feito do identificador e indica que o identificador está sendo destruído.
Um aplicativo pode encerrar uma solicitação assíncrona em andamento fechando o identificador de solicitação HINTERNET usando WinHttpCloseHandle. Lembre-se bem do seguinte:
- Depois que um aplicativo chama WinHttpCloseHandle em um identificador WinHTTP, ele não pode chamar nenhuma outra função da API WinHTTP usando esse identificador de qualquer thread.
- Mesmo depois que uma chamada para WinHttpCloseHandle retorna, o aplicativo ainda deve estar preparado para receber retornos de chamada para o identificador fechado, pois o WinHTTP pode derrubar o identificador de forma assíncrona. Se a solicitação assíncrona não puder ser concluída com êxito, o retorno de chamada receberá uma notificação WINHTTP_CALLBACK_STATUS_REQUEST_ERROR.
- Se um aplicativo associar uma estrutura de dados de contexto ou um objeto ao identificador, ele deverá manter essa associação até que a função de retorno de chamada receba uma notificação de WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING . Esta é a última notificação de retorno de chamada que o WinHTTP envia antes de excluir um objeto de identificador da memória. Para receber a notificação de retorno de chamada WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, o aplicativo deve habilitar o sinalizador WINHTTP_CALLBACK_FLAG_HANDLES na chamada WinHttpSetStatusCallback .
-
Antes de chamar WinHttpCloseHandle, um aplicativo pode chamar WinHttpSetStatusCallback para indicar que não devem ser feitos mais retornos de chamada:
WinHttpSetStatusCallback( hRequest, NULL, 0, 0 );
Pode parecer que a estrutura de dados de contexto pode ser liberada imediatamente em vez de precisar aguardar uma notificação de WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING , mas esse não é o caso: o WinHTTP não sincroniza WinHttpSetStatusCallback com retornos de chamada originados em threads de trabalho. Como resultado, um retorno de chamada já pode estar em andamento de outro thread, e o aplicativo pode receber uma notificação de retorno de chamada mesmo depois de ter o ponteiro da função de retorno de chamada NULL e excluído a estrutura de dados de contexto do identificador. Devido a essa condição de corrida potencial, seja conservador ao liberar a estrutura de contexto até depois de receber a notificação de WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP, Windows 2000 Professional com SP3 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003, Windows 2000 Server com SP3 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winhttp.h |
Biblioteca | Winhttp.lib |
DLL | Winhttp.dll |
Redistribuível | WinHTTP 5.0 e Internet Explorer 5.01 ou posterior no Windows XP e Windows 2000. |