HINTERNET 句柄

本部分包含有关 WinINet 函数使用的句柄及其工作层次结构的信息。

关于 HINTERNET 句柄

WinINet 函数创建并使用的句柄的类型为 HINTERNET。 WinINet 函数返回不可与其他句柄类型互换的 HINTERNET 句柄。 因此,它们不能与 ReadFileCloseHandle 等函数一起使用。 同样,其他句柄类型不能与 WinINet 函数一起使用。 例如, CreateFile 返回的句柄无法传递到 InternetReadFile

InternetCloseHandle 函数关闭 HINTERNET 类型的句柄。 请注意,句柄值会快速回收;因此,如果关闭句柄并立即生成新句柄,则新句柄的值很可能与刚刚关闭的句柄相同。

句柄层次结构

HINTERNET 句柄在树层次结构中维护。 InternetOpen 函数返回的句柄是根节点。 InternetConnect 函数返回的句柄占据下一级别。 FtpOpenFileFtpFindFirstFileHttpOpenRequest 函数返回的句柄是叶节点。

Windows XP 和 Windows Server 2003 R2 及更早版本:GopherOpenFileGopherFindFirstFile 返回的句柄也是叶节点。

下图说明了 HINTERNET 句柄的层次结构。 关系图中的每个框都表示返回 HINTERNET 句柄的函数。

创建句柄的函数

顶层是 InternetOpen 函数,用于创建根句柄。 下一个级别包含 InternetOpenUrlInternetConnect 函数。 使用 InternetConnect 返回的句柄的函数构成最后一个级别。

下图显示了依赖于 InternetOpenUrl 创建的句柄的函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用关联函数创建的 HINTERNET 句柄的函数。

使用 Internetopenurl 句柄的函数

InternetQueryDataAvailableInternetReadFileInternetSetFilePointer 函数使用 InternetOpenUrl 创建的 HINTERNET 句柄。

FTP 层次结构

下图显示了依赖于 InternetConnect 返回的 FTP 会话句柄的 FTP 函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。

使用 ftp 会话句柄的函数

FtpCreateDirectoryFtpDeleteFileFtpGetCurrentDirectoryFtpGetFileFtpPutFileFtpRemoveDirectoryFtpRenameFileFtpSetCurrentDirectory 函数都使用 InternetConnect 创建的 HINTERNET 句柄。

下图显示了返回句柄的两个 FTP 函数和依赖于它们的函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。

使用 ftpopen 和 ftpfindfirstfile 中的句柄的函数

InternetFindNextFile 函数依赖于 FtpFindFirstFile 创建的句柄,而 InternetReadFileInternetWriteFile 使用 FtpOpenFile 创建的句柄。

HTTP 层次结构

下图显示了用于 HTTP 协议的函数的关系。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。

使用 httpopenrequest 中的句柄的函数

HttpAddRequestHeadersHttpQueryInfoHttpSendRequestHttpSendRequestExInternetErrorDlg 函数依赖于 HttpOpenRequest 创建的句柄。

下图显示了使用 HttpSendRequest 发送后由 HttpOpenRequest 创建的 HINTERNET 句柄函数。 带阴影的框表示返回 HINTERNET 句柄的函数,而普通框表示使用由它们所依赖的函数创建的 HINTERNET 句柄的函数。

httpsendrequest 之后使用句柄的函数

HttpSendRequest 使用 HttpOpenRequest 返回的句柄后,InternetQueryDataAvailableInternetReadFileInternetSetFilePointer 可以使用它。

httpsendrequestex 之后使用句柄的函数

HttpSendRequestEx 使用 HttpOpenRequest 返回的句柄后,HttpEndRequestInternetReadFileExInternetWriteFile 可以使用该句柄。 调用 HttpEndRequest 后, InternetReadFileInternetSetFilePointerInternetQueryDataAvailable 可以使用句柄。

注意

WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP)