WinHttpReadDataEx 函数 (winhttp.h)

WinHttpOpenRequest 函数打开的句柄读取数据。

语法

WINHTTPAPI DWORD WinHttpReadDataEx(
  HINTERNET hRequest,
  LPVOID    lpBuffer,
  DWORD     dwNumberOfBytesToRead,
  LPDWORD   lpdwNumberOfBytesRead,
  ULONGLONG ullFlags,
  DWORD     cbProperty,
  PVOID     pvProperty
);

参数

hRequest

类型:在 HINTERNET 中

从先前调用 WinHttpOpenRequest 返回的 HINTERNET 句柄。

WinHttpReceiveResponseWinHttpQueryDataAvailable 必须已为此句柄调用,并且必须在调用 WinHttpReadDataEx 之前完成。 虽然在 WinHttpReceiveResponse 完成后立即调用 WinHttpReadDataEx 可避免缓冲区复制费用,但这样做需要应用程序使用固定长度的缓冲区进行读取。

lpBuffer

类型:_Out_writes_bytes_to_ (dwNumberOfBytesToRead、*lpdwNumberOfBytesRead) __out_data_source (NETWORK) LPVOID

指向接收读取数据的缓冲区的指针。 确保此缓冲区在 WinHttpReadDataEx 完成之前保持有效。

dwNumberOfBytesToRead

类型:IN DWORD

包含要读取的字节数的无符号长整数值。

lpdwNumberOfBytesRead

类型:OUT LPDWORD

指向接收读取字节数的无符号长整数变量的指针。 WinHttpReadDataEx 在执行任何工作或错误检查之前将此值设置为零。 异步使用 WinHTTP 时,始终将此参数设置为 NULL ,并在回调函数中检索信息;不这样做可能会导致内存故障。

ullFlags

类型:IN ULONGLONG

如果传递 WINHTTP_READ_DATA_EX_FLAG_FILL_BUFFER,则在填充提供的数据缓冲区或完成响应之前,WinHttp 不会完成对 WinHttpReadDataEx 的调用。 传递此标志会使此 API 的行为与 WinHttpReadData 的行为等效。

cbProperty

类型:IN DWORD

保留。 传递 0。

pvProperty

类型:_In_reads_bytes_opt_ (cbProperty) PVOID

保留。 传递 NULL。

返回值

指示操作结果的状态代码。 返回的错误代码如下。

错误代码 说明
ERROR_WINHTTP_CONNECTION_ERROR
与服务器的连接已重置或终止,或者遇到不兼容的 SSL 协议。 例如,WinHTTP 5.1 不支持 SSL2,除非客户端专门启用 SSL2。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
无法执行请求的操作,因为提供的句柄未处于正确的状态。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
此操作提供的句柄类型不正确。
ERROR_WINHTTP_INTERNAL_ERROR
发生了内部错误。
ERROR_WINHTTP_OPERATION_CANCELLED
操作被取消,通常是因为操作之前关闭了操作请求的句柄。
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
当传入响应超过内部 WinHTTP 大小限制时返回。
ERROR_WINHTTP_TIMEOUT
请求已超时。
ERROR_NOT_ENOUGH_MEMORY
内存不足,无法完成请求的操作。 (Windows 错误代码)

注解

默认情况下, WinHttpReadDataEx 在将任意数量的数据写入到你提供的缓冲区后返回, (函数不会始终完全填充你) 提供的缓冲区。

要求

   
最低受支持的客户端 Windows 10内部版本 20348
最低受支持的服务器 Windows 10内部版本 20348
目标平台 Windows
标头 winhttp.h
Library Winhttp.lib
DLL Winhttp.dll

另请参阅