这篇文章的内容能够简单总结例如以下:

  1. WinINet函数创建和使用类型为HINTERNET的句柄
  2. HINTERNET句柄不能与其它类型的句柄互换使用
  3. InternetCloseHandle关闭HINTERNET句柄
  4. 有多种类型的HINTERNET句柄,它们形成一个树结构,例如以下图所看到的:

图中带阴影的方框创建的HINTERNET句柄被下一级的函数使用;背景空白的方框不创建HINTERNET句柄,仅使用上一级函数创建的句柄。HttpSendRequestHttpSendRequestExHttpEndRequest有些特殊,它们的下层函数不是使用它们创建的HINTERNET句柄,而是HttpOpenRequest创建的句柄,在调用这三个函数后,就能够调用下一级的函数了。

本节包括用于WinINet函数的句柄,以及它们的层次结构的信息。

关于HINTERNET句柄

WinINet函数创建和使用类型为HINTERNET的句柄。HINTERNET句柄不能与其它类型的句柄互换。因此,HINTERNET句柄不能用于ReadFile或者CloseHandle等函数。相同地,其它类型的句柄也不能用于WinINet函数。比方说,CreateFile返回的句柄不能传递给InternetReadFile

InternetCloseHandle函数用于关闭HINTERNET句柄。注意,句柄值非常快被回收重用。因此,假设关闭一个句柄,然后马上生成一个新句柄,则新句柄的值非常可能与刚被关闭句柄的值同样。

句柄层次结构

HINTERNET句柄形成了一个树结构。InternetOpen函数返回的句柄是树的根节点,InternetConnect函数返回的句柄则占有下一级,而FtpOpenFileFtpFindFirstFileHttpOpenRequestGopherOpenFileGopherFindFirstFile函数返回的句柄则是叶子节点。

下图展示了HINTERNET句柄的层次结构。图中每一个方框代表返回HINTERNET句柄的一个函数。

最顶层的是InternetOpen函数,它创建根节点。下一层包含InternetOpenUrlInternetConnect函数。组成了最后一层的是使用InternetConnect返回的句柄的函数。

下图展示了依赖于由InternetOpenUrl创建的句柄的函数。带阴影的方框代表返回HINTERNET句柄的函数,而空白方框代表使用HINTERNET句柄的函数。

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

FTP层次结构

下图展示了依赖于InternetConnect返回的FTP会话句柄的FTP函数。带阴影的方框代表返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。

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

下图展示了返回句柄的两个FTP函数,以及依赖于它们的函数。带阴影的方框代表返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。

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

Gopher层次结构

下图显示了用于Gopher协议的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。

GopherGetAttribute函数依赖于InternetConnect创建的句柄。InternetFindNextFile使用GopherFindFirstFile创建的句柄。GopherOpenFile创建的句柄被InternetQueryDataAvailableInternetReadFile使用。

HTTP层次结构

下图显示了用于HTTP协议的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。

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

下图展示了使用由HttpOpenRequest创建、然后被HttpSendRequest发送的句柄的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。

HttpOpenRequest返回的句柄被HttpSendRequest使用后,就能够被InternetQueryDataAvailableInternetReadFileInternetSetFilePointer使用了。

HttpOpenRequest返回的句柄,在被HttpSendRequestEx使用后,就能够被HttpEndRequestInternetReadFileExInternetWriteFile使用了。调用HttpEndRequest之后,句柄能够被InternetReadFileInternetSetFilePointerInternetQueryDataAvailable使用。

HINTERNET 句柄的更多相关文章

  1. WINHTTP的API接口说明。

    BOOL WINAPI WinHttpAddRequestHeaders(   _In_  HINTERNET hRequest,   _In_  LPCWSTR pwszHeaders,   _In ...

  2. vc:如何从Internet上有效而稳定地下载文件

    http://www.vckbase.com/index.php/wv/172 如何从Internet上有效而稳定地下载文件 ,这是很多网络应用程序要考虑的重要问题,本文提供的代码段针对这个问题进行了 ...

  3. WINHTTP的API接口说明

    BOOL WINAPI WinHttpAddRequestHeaders(   _In_  HINTERNET hRequest,   _In_  LPCWSTR pwszHeaders,   _In ...

  4. delphi 下载

    获取网络文件大小 //delphi 获取网络文件大小 function GetUrlFileSize(aURL: string): integer; var FileSize: integer; va ...

  5. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  6. Nodejs事件引擎libuv源码剖析之:句柄(handle)结构的设计剖析

    声明:本文为原创博文,转载请注明出处. 句柄(handle)代表一种对持有资源的索引,句柄的叫法在window上较多,在unix/linux等系统上大多称之为描述符,为了抽象不同平台的差异,libuv ...

  7. C#根据句柄改变窗体控件值

    需求是这样,有个程序界面我们需要通过自己的程序持续输入数据,界面如图. 可以获得控件的句柄而用钩子写入值.这里需要用到spy++工具.在VS的工具下有个spy++工具,打开如下图 通过这个工具可以获得 ...

  8. .NET对象与Windows句柄(一):句柄的基本概念

    在.NET编程中,得益于有效的内存管理机制,对象的创建和使用比较方便,大多数情况下我们无须关心对象创建和分配内存的细节,也可以放心的把对象的清理交给自动垃圾回收来完成.由于.NET类库对系统底层对象进 ...

  9. 源码剖析——深入Windows句柄本质

    参考资料: 1. http://www.codeforge.cn/read/146318/WinDef.h__html windef.h头文件 2. http://www.codeforge.cn/r ...

随机推荐

  1. 使用 Microsoft.ApplicationBlocks.Data SqlHelper 查询超时以及解决方案

     提示: 后面附有文件,不喜欢看吐槽的,直接到文章结尾下载 摘要:Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码,可以帮助用户调用存储过程以 ...

  2. 数据库中简单的增删改查(CRUD)

    一切都是基于数据,而对数据的管理都离不开数据库.最近学到数据库的简单操作,所以写下这篇文章,总结一下学习到的知识.浅陋之处,多多见谅. 补充一下:一直弄不清SQL Server,Mysql ,以及Or ...

  3. 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码

    [实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...

  4. Session,有没有必要使用它?

    阅读目录 开始 Session的来龙去脉 Session对并发访问的影响 Session的缺点总结 不使用Session的替代方法 Asp.net MVC 中的Session 现有的代码怎么办? 今天 ...

  5. ajaxFileUpload SyntaxError: syntax error

    在使用ajaxFileUpload上传文件时,Chrome没问题,IE和Firefox出错,Firefox报SyntaxError: syntax error错误 JS代码例如以下: $.ajaxFi ...

  6. POJ1742:Coins(多重背包)

    Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...

  7. ora-24247:网络访问被访问控制列表(ACL)拒绝

    用dba账户使用下面脚本授予报错账户访问外部网络服务的权限,以SCOTT为例: BEGIN -- Only uncomment the following line if ACL "netw ...

  8. CSS 设计彻底研究(四)盒子的浮动与定位

    第四章 盒子的浮动与定位 本章的重点和难点是深刻地理解”浮动“和”定位“这两个重要的性质,对于复杂页面的排版至关重要. 4.1 盒子的浮动 在标准流中,一个块级元素在水平方向会自动伸张,直到包含它的元 ...

  9. Android 6.0 闪光灯的使用

    Android6.0 已经抛弃了Camer 相关的API,改用新的API接口CamerManager,下面给出使用的简单实例 package com.inper.duqiang.slashlight; ...

  10. netCDF

    NetCDF started in 1989 most used in geoscience community array-oriented self-describing header, desc ...