HINTERNET 句柄
本部分包含有关 WinINet 函数使用的句柄及其工作层次结构的信息。
关于 HINTERNET 句柄
WinINet 函数创建并使用的句柄的类型为 HINTERNET。 WinINet 函数返回不可与其他句柄类型互换的 HINTERNET 句柄。 因此,它们不能与 ReadFile 或 CloseHandle 等函数一起使用。 同样,其他句柄类型不能与 WinINet 函数一起使用。 例如, CreateFile 返回的句柄无法传递到 InternetReadFile。
InternetCloseHandle 函数关闭 HINTERNET 类型的句柄。 请注意,句柄值会快速回收;因此,如果关闭句柄并立即生成新句柄,则新句柄的值很可能与刚刚关闭的句柄相同。
句柄层次结构
HINTERNET 句柄在树层次结构中维护。 InternetOpen 函数返回的句柄是根节点。 InternetConnect 函数返回的句柄占据下一级别。 FtpOpenFile、FtpFindFirstFile 和 HttpOpenRequest 函数返回的句柄是叶节点。
Windows XP 和 Windows Server 2003 R2 及更早版本: 、 GopherOpenFile 和 GopherFindFirstFile 返回的句柄也是叶节点。
下图说明了 HINTERNET 句柄的层次结构。 关系图中的每个框都表示返回 HINTERNET 句柄的函数。
顶层是 InternetOpen 函数,用于创建根句柄。 下一个级别包含 InternetOpenUrl 和 InternetConnect 函数。 使用 InternetConnect 返回的句柄的函数构成最后一个级别。
下图显示了依赖于 InternetOpenUrl 创建的句柄的函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用关联函数创建的 HINTERNET 句柄的函数。
InternetQueryDataAvailable、InternetReadFile 和 InternetSetFilePointer 函数使用 InternetOpenUrl 创建的 HINTERNET 句柄。
FTP 层次结构
下图显示了依赖于 InternetConnect 返回的 FTP 会话句柄的 FTP 函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。
FtpCreateDirectory、FtpDeleteFile、FtpGetCurrentDirectory、FtpGetFile、FtpPutFile、FtpRemoveDirectory、FtpRenameFile 和 FtpSetCurrentDirectory 函数都使用 InternetConnect 创建的 HINTERNET 句柄。
下图显示了返回句柄的两个 FTP 函数和依赖于它们的函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。
InternetFindNextFile 函数依赖于 FtpFindFirstFile 创建的句柄,而 InternetReadFile 和 InternetWriteFile 使用 FtpOpenFile 创建的句柄。
HTTP 层次结构
下图显示了用于 HTTP 协议的函数的关系。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx 和 InternetErrorDlg 函数依赖于 HttpOpenRequest 创建的句柄。
下图显示了使用 HttpSendRequest 发送后由 HttpOpenRequest 创建的 HINTERNET 句柄的函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。
HttpSendRequest 使用 HttpOpenRequest 返回的句柄后,InternetQueryDataAvailable、InternetReadFile 和 InternetSetFilePointer 可以使用它。
HttpSendRequestEx 使用 HttpOpenRequest 返回的句柄后,HttpEndRequest、InternetReadFileEx 和 InternetWriteFile 可以使用该句柄。 调用 HttpEndRequest 后, InternetReadFile、 InternetSetFilePointer 和 InternetQueryDataAvailable 可以使用句柄。
注意
WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP) 。