HINTERNET 句柄
这篇文章的内容能够简单总结例如以下:
- WinINet函数创建和使用类型为HINTERNET的句柄
- HINTERNET句柄不能与其它类型的句柄互换使用
- 用InternetCloseHandle关闭HINTERNET句柄
- 有多种类型的HINTERNET句柄,它们形成一个树结构,例如以下图所看到的:
图中带阴影的方框创建的HINTERNET句柄被下一级的函数使用;背景空白的方框不创建HINTERNET句柄,仅使用上一级函数创建的句柄。HttpSendRequest、HttpSendRequestEx和HttpEndRequest有些特殊,它们的下层函数不是使用它们创建的HINTERNET句柄,而是HttpOpenRequest创建的句柄,在调用这三个函数后,就能够调用下一级的函数了。
本节包括用于WinINet函数的句柄,以及它们的层次结构的信息。
关于HINTERNET句柄
WinINet函数创建和使用类型为HINTERNET的句柄。HINTERNET句柄不能与其它类型的句柄互换。因此,HINTERNET句柄不能用于ReadFile或者CloseHandle等函数。相同地,其它类型的句柄也不能用于WinINet函数。比方说,CreateFile返回的句柄不能传递给InternetReadFile。
InternetCloseHandle函数用于关闭HINTERNET句柄。注意,句柄值非常快被回收重用。因此,假设关闭一个句柄,然后马上生成一个新句柄,则新句柄的值非常可能与刚被关闭句柄的值同样。
句柄层次结构
HINTERNET句柄形成了一个树结构。InternetOpen函数返回的句柄是树的根节点,InternetConnect函数返回的句柄则占有下一级,而FtpOpenFile、FtpFindFirstFile、HttpOpenRequest、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创建的句柄。
Gopher层次结构
下图显示了用于Gopher协议的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。
GopherGetAttribute函数依赖于InternetConnect创建的句柄。InternetFindNextFile使用GopherFindFirstFile创建的句柄。GopherOpenFile创建的句柄被InternetQueryDataAvailable和InternetReadFile使用。
HTTP层次结构
下图显示了用于HTTP协议的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx和InternetErrorDlg函数依赖于HttpOpenRequest创建的句柄。
下图展示了使用由HttpOpenRequest创建、然后被HttpSendRequest发送的句柄的函数。带阴影的方框表示返回HINTERNET句柄的函数,空白方框表示使用它们所依赖的函数创建的HINTERNET句柄的函数。
由HttpOpenRequest返回的句柄被HttpSendRequest使用后,就能够被InternetQueryDataAvailable、InternetReadFile和InternetSetFilePointer使用了。
由HttpOpenRequest返回的句柄,在被HttpSendRequestEx使用后,就能够被HttpEndRequest、InternetReadFileEx和InternetWriteFile使用了。调用HttpEndRequest之后,句柄能够被InternetReadFile、InternetSetFilePointer和InternetQueryDataAvailable使用。
HINTERNET 句柄的更多相关文章
- WINHTTP的API接口说明。
		BOOL WINAPI WinHttpAddRequestHeaders( _In_ HINTERNET hRequest, _In_ LPCWSTR pwszHeaders, _In ... 
- vc:如何从Internet上有效而稳定地下载文件
		http://www.vckbase.com/index.php/wv/172 如何从Internet上有效而稳定地下载文件 ,这是很多网络应用程序要考虑的重要问题,本文提供的代码段针对这个问题进行了 ... 
- WINHTTP的API接口说明
		BOOL WINAPI WinHttpAddRequestHeaders( _In_ HINTERNET hRequest, _In_ LPCWSTR pwszHeaders, _In ... 
- delphi 下载
		获取网络文件大小 //delphi 获取网络文件大小 function GetUrlFileSize(aURL: string): integer; var FileSize: integer; va ... 
- JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)
		1.事件冒泡与事件捕获 2.事件与事件句柄 3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处: 1.每个函 ... 
- Nodejs事件引擎libuv源码剖析之:句柄(handle)结构的设计剖析
		声明:本文为原创博文,转载请注明出处. 句柄(handle)代表一种对持有资源的索引,句柄的叫法在window上较多,在unix/linux等系统上大多称之为描述符,为了抽象不同平台的差异,libuv ... 
- C#根据句柄改变窗体控件值
		需求是这样,有个程序界面我们需要通过自己的程序持续输入数据,界面如图. 可以获得控件的句柄而用钩子写入值.这里需要用到spy++工具.在VS的工具下有个spy++工具,打开如下图 通过这个工具可以获得 ... 
- .NET对象与Windows句柄(一):句柄的基本概念
		在.NET编程中,得益于有效的内存管理机制,对象的创建和使用比较方便,大多数情况下我们无须关心对象创建和分配内存的细节,也可以放心的把对象的清理交给自动垃圾回收来完成.由于.NET类库对系统底层对象进 ... 
- 源码剖析——深入Windows句柄本质
		参考资料: 1. http://www.codeforge.cn/read/146318/WinDef.h__html windef.h头文件 2. http://www.codeforge.cn/r ... 
随机推荐
- 《招聘一个靠谱的iOS》面试题参考答案(上)
			说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ... 
- dispatch_group_async
			- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. dispat ... 
- High bridge, low bridge(离散化, 前缀和)
			High bridge, low bridge Q:There are one high bridge and one low bridge across the river. The river h ... 
- Laravel 安装指南
			http://www.golaravel.com/article/laravel-installation-guide/ http://laravel.com/api/4.1/ http://ding ... 
- Windows下安装Django及WEB服务启动
			如果使用的是 Linux 或 Mac OS X ,系统可能已经预装了 Python .在命令提示符下 (或 OS X 的终端中) 输入python ,如果出现python编辑环境,说明 ... 
- JSP脚本元素上机手册
			L3 <JSP基础>上机手册 内容回顾 脚本元素<%! %> <%= %> <% %> 注释元素 JSP指令元素 JSP动作元素 上机目标 掌握脚本元素 ... 
- Python学习笔记5(字符串与正则表达式)
			1.字符串 1.1字符串的格式化 #格式化语法 "%s" % str1 "%s %s" % (str1,str2) #格式化字符串 str1 = "v ... 
- (转)ubuntu下如何查看和设置分辨率
			转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5681159.html 原网址: http://www.2cto.com/os/201303/19397 ... 
- 解决方案:elipse一直loading descriptor for...
			1,问题描述: 打开eclipse,一直在loading descriptor for...,eclipse假死,什么操作都做不了 2,环境描述: Java Compiler:1.8 Jdk :1.8 ... 
- Oracle创建主键自增表
			Oracle创建主键自增表 1.创建表 create table Test_Increase( userid number(10) NOT NULL primary k ... 
