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 句柄。
WinHttpReceiveResponse 或 WinHttpQueryDataAvailable 必须已为此句柄调用,并且必须在调用 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。
返回值
指示操作结果的状态代码。 返回的错误代码如下。
错误代码 | 说明 |
---|---|
|
与服务器的连接已重置或终止,或者遇到不兼容的 SSL 协议。 例如,WinHTTP 5.1 不支持 SSL2,除非客户端专门启用 SSL2。 |
|
无法执行请求的操作,因为提供的句柄未处于正确的状态。 |
|
此操作提供的句柄类型不正确。 |
|
发生了内部错误。 |
|
操作被取消,通常是因为操作之前关闭了操作请求的句柄。 |
|
当传入响应超过内部 WinHTTP 大小限制时返回。 |
|
请求已超时。 |
|
内存不足,无法完成请求的操作。 (Windows 错误代码) |
注解
默认情况下, WinHttpReadDataEx 在将任意数量的数据写入到你提供的缓冲区后返回, (函数不会始终完全填充你) 提供的缓冲区。
要求
最低受支持的客户端 | Windows 10内部版本 20348 |
最低受支持的服务器 | Windows 10内部版本 20348 |
目标平台 | Windows |
标头 | winhttp.h |
Library | Winhttp.lib |
DLL | Winhttp.dll |