分享
 
 
 

使用INF文件从Internet下载组件

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

使用INF和OSD文件从Internet下载组件

作为系统服务,IE下载从internet组件通常需要进行认证和检查。对于发布者,有两种机制:

1、inf文件进行发布

2、osd文件发布(ie4及以后版本)

推荐使用cab来将所有需要文件打包,并进行签名。IE收到一个cab文件后:

首先查找是否存在OSD文件,如果存在,按照OSD语法(XML文档)进行处理。其中如果涉及到INF文件,还会打开INF文件进行引用。

如果不存在,会打开INF文件,按照INF文件进行解释安装。

CODEBASE 属性

在internet上发布组件,极其重要的属性就是codebase属性了,因为此url指定了一个“挑剔”的组件运行所需的全部文件从哪儿获取。

组件开发者可以将组件以下列方式打包发布:

。PE格式(.exe .ocx .dll ……),好处是文件就一个一布操作,但是文件不会被压缩,通过http方式下载。

。inf文件。此方式仅在浏览器安全设定为低、中时候才可行,原因在于单一inf文件不可被签名。Inf的语法可以指向一些多样性的可执行文件。

。cab文件。所有需要的文件打包到一个压缩文件中,可被签名。

INF文件格式

INF语法由Internet下载组件下载并处理。

所有URL必须被urlencode过,即空格以%20代替,且以codebase=<URL>中的url来作为基址解释。

代码下载器理解其中几个主要的节

[Add.Code] 及 [Setup Hooks]

如果者两个节均不存在,那么当作标准的win32 inf格式进行解释

Add.Code 节列出所有将要被安装的文件,包括可选文件

[Add.Code]

filename1=section-name1

filename2=section-name2

每一个文件自成一节(文件节),并进行单独描述安装属性。

[section-name1]

key1=value1

key2=value2

在一个文件节中,以下关键字可用:

File-%opersys%-%cpu%=[url | ignore | thiscab]

%opersys% 可以是 [win32 | mac] ,当前 %cpu% 可以是 [x86 | ppc | mips | alpha].。

File=[url | thiscab]

指示文件可以在那些地方下载得到。如果没有设定值且文件没有载用户的计算机上,下载失败。

FileVersion=a,b,c,d

文件版本定义

Clsid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}

组件的CLSID

DestDir=[10 | 11]

DestDir 可以设定为 10 即 \windows directory

11 windows\system directory.

如果没有设定值,则存放在cache目录中

RegisterServer=[yes | no]

是否自行注册组件,会覆盖inf文件中的其他关于注册的设定

Hook=section-name3

定义有条件挂钩。如果 clsid 或者文件的最小版本不匹配且无 File= or File-%opersys%-%cpu%= values 条目,安装程序会寻找关于定制的挂钩。挂钩节如下定义: [section-name3]

key1=value1

key2=value2

可以多个组件都挂同一个hook.

以下key可用:

File-%opersys%-%cpu%=[url | ignore]

File=

Run=[cmd-line]

为cab文件展开在临时文件夹后运行的名另。如果缺少此命令设定,将寻找 InfFile= and InfSection= keys 以运行挂钩节。

InfFile=[name of win32 INF file inside the CAB] 可以是在cab文件中的其他inf文件

InfSection=[section name in the InfFile mentioned in above key]

无条件安装Hook在[Setup Hooks]节中指定,且在add.Code节之前执行。

[Setup Hooks]

hookname1=section-name4

hookname2=section-name5

如果要使用Hook节,需要指定version如下(否则下载组件服务会忽略):

[Version]

Signature="$CHICAGO$"

AdvancedINF=2.0

;例子分析最后给出。

Internet 组件下载服务

Internet 组件下载服务通过单一函数导出:CoGetClassObjectFromURL。此函数下载应用代码,校验且安装OLE组件,由IE实现

CoGetClassObjectFromURL 函数返回一个给定rclsid的工厂对象。如果无CLSID (CLSID_NULL),此函数根据contentType的MIME类型进行选择。如果对象已经安装,就实例化,否则,从指定的url处或者internet搜索页下载必要的代码 。

"下载和安装" 进程处理以下步骤:

使用URL Moniker(s)下载必要的代码。

调用 WinVerifyTrust 以确信所有下载文件安装是安全的

所有自注册组件完成注册

增加对下载的组件的跟踪的注册项

利用rclsid调用 CoGetClassObject

在通常浏览器设定下,直接通过HTML OBJECT 元素获取必须的参数。举例:对于一个 <OBJECT>标签"CODEBASE=http://www.foo.com/bar.ocx#Version=a,b,c,d",szCodeURL 是 "http://www.foo.com/bar.ocx", dwFileVersionMS 是 MAKELONG(b, a), dwFileVersionLS 是MAKELONG(d, c).

存储/缓存下载的代码

下载的代码存储在windowsoccache.。此位置可被注册表的HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionInternet SettingsActiveXCache值所覆盖。 有些组件安装在windows 和 windowssystem.。所有辖载的代码登记在一个新的 "Module Usage" 注册节以保持对此代码的跟踪。下载的代码不可被自动删除但可被用户通过控制面板的清除功能请除掉。

Internet 搜索路径

当Internet 组件下载调用下载代码,它遍历Internet搜索路径寻找引用的组件。此处的路径是对象对处服务器的列表,被GetClassObjectFromURL调用。 即使 <OBJECT> 标记没有指定CODEBASE 下载 OLE 控件,Internet 组件下载服务将依然使用Internet 搜索路径寻找必要的代码。

Internet 搜索路径语法

搜索路径存储在注册表HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionInternet SettingsCodeBaseSearchPath. ,如下格式:

CodeBaseSearchPath = <URL1>; <URL2>; ... <URLm>; CODEBASE; <URLm+1>;

... <URLn-1>; <URLn>

每一个URL都是绝对路径,依次搜索下载,按照CODEBASE指定的szCodeURL 。

Win32 INF 语法中特定变量:

EXTRACT_DIR

CAB文件展开后的目录

run=%EXTRACT_DIR%/mysetup.exe

OBJECT_DIR

Windows下的Downloaded Program Files 目录windows directory.

一个 internet inf的例子。

我们通过Terminal Services 服务来控制远端计算机时除了可以通过远程连接管理器外,还可以通过一个web中的activex控件进行发布,此控件信息在:[url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/embedding_the_remote_desktop_activex_control_in_a_web_page.asp]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/embedding_the_remote_desktop_activex_control_in_a_web_page.asp

此控件的internet发布inf文件如下,我们进行逐节分析:

; INF file for Terminal Server Web client 注释;开头

[VERSION] ;确定版本,否则下载服务不认可有关内容

signature="$CHICAGO$"

AdancedINF=2.0

[Add.Code] ;安装节 ,告诉我们此inf文件肯定还有一个称作msrdp.ocx

msrdp.ocx=msrdp.ocx ;的节,此inf文件仅安装一个组件

[msrdp.ocx] ;add.code节指定的节

file-win32-x86=thiscab ;文件在当前cab文件中

clsid={9059f30f-4eb1-4bd2-9fdc-36f43a218f4a} ;组件的clsid

FileVersion=5,1,2600,1094 ;文件版本

RegisterServer=yes ;是否注册组件,下在后注册组件

[Setup Hooks] ;无条件挂钩 ,此节指定有多少无条件挂钩,仅有一个

AddToRegHook=AddToRegHook

[AddToRegHook] ;无条件挂钩节

InfFile=msrdp.inf ;从msrdp.inf中读取信息

InfSection=DefaultInstall ;指定标准安装文件

[DefaultInstall] ;需要按照安装文件解释的节

AddReg=AddIMERegEntries ;寻找 AddIMERegEntries 节

[AddIMERegEntries] ;按照标准inf文件中的addreg类节来解释此节内容

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","msime95.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","msime97.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imejp98.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imejp.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imjp8.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imjp81.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msime95.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msime95k.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msuni95k.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr98u.ime",,"null"

HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr61.ime",,"null"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有