咱們打開淘寶等網站時,IE瀏覽器會提示安裝空間,這個控件即是用於對用戶名密碼進行加密的ActiveX控件。如何在咱們的站點上安裝如此控件,讓用戶能夠經過簡單的點擊即可方便使用咱們的空間呢?html
下面是如何讓在你的站點上安裝控件的方法。web
基礎知識shell
定義一個嵌入的對象。請使用此元素向您的 XHTML 頁面添加多媒體。此元素容許您規定插入 HTML 文檔中的對象的數據和參數,以及可用來顯示和操做數據的代碼。<object> 標籤用於包含對象,好比圖像、音頻、視頻、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不過因爲漏洞以及缺少瀏覽器支持,這一點並未實現。瀏覽器的對象支持有賴於對象類型。不幸的是,主流瀏覽器都使用不一樣的代碼來加載相同的對象類型。而幸運的是,object 對象提供瞭解決方案。若是未顯示 object 元素,就會執行位於 <object> 和 </object> 之間的代碼。經過這種方式,咱們可以嵌套多個 object 元素(每一個對應一個瀏覽器)。編程
向HTML中添加對象:windows
<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="50"> <param name="BorderStyle" value="1" /> <param name="MousePointer" value="0" /> <param name="Enabled" value="1" /> <param name="Min" value="0" /> <param name="Max" value="10" /> </object>
「通用惟一標識符」(UUID),用於標識 COM 組件。每一個 COM 組件在 Windows 註冊表中都有本身的 CLSID,以便讓其餘應用程序加載。api
在編譯完成每個ActiveX控件以後,系統會生成ocx.html文件,其中是調用該ActiveX控件的方法。該頁面中有一個標籤即爲Object,其中有一行則記錄着該ocx文件的CLSID,以下:瀏覽器
<object ID="TopoSceneViewer" WIDTH=800 HEIGHT=600 CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63"> </object>
cab文件中須要包含一系列文件,其中.inf文件會告訴IE如何去安裝這些文件。咱們從.inf文件開始
INF文件的組成有節(Sections),鍵(Key)和值(value)三部分。
關鍵節有
[Version]版本描述信息,主要用於版本控制。 [Strings]字符串信息,用於常量定義。 [DestinationDirs]定義系統路徑信息。 [SourceDisksNames]指明源盤信息。 [SourceDisksNames]指明源盤文件名。 [DefaultInstall]開始執行安裝。
其它的節能夠自定義app
最開始通常是[Version]區: 編輯器
[Version] signature="$XXXX$" AdvancedINF=2.0
"Signature"項定義了該INF文件須要運行在何種操做系統版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個值供選擇,通常選擇$Chicago$便可。ide
接下來就是最重要的[Add.Code]區:
[Add.Code] Ctrl1.dll=C1Section Ctrl2.dll=Ctrl2.dll
前面是要下載的文件名,後面是對應這個文件的區域名,能夠是任何名字,不過通常都是和文件的名字相同,這樣方便維護。
還有須要注意是在[Add.Code]區出現的文件要根據依賴性進行排序,例如前面說的ctrl1.dll要依賴於ctrl2.dll,則ctrl2.dll要出如今ctrl1.dll的前面。由於安裝時是按照相反的順序進行的,也就是說先安裝ctrl2.dll,而後纔是ctrl1.dll,哧哧,記清楚了,不要搞反了。
再接下來是各個文件的區域了
[Ctrl1.dll] file-win32-x86=thiscab RegisterServer=yes clsid={.....} DestDir= FileVersion=1,0,0,0
[Ctrl1.dll]區域中的第一個file值告訴ie到哪裏去獲得這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來講);第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,好比說x8六、 ppc (Power PC)、 mips或者alpha了。
file的值能夠取三個一個URL、ignore和thiscab,若是是URL則說明到URL所在的位置去下;若是是ignore說明對於這種OS和CPU,不須要下載這個文件(ctrl1.dll);若是是thiscab很明顯就在當前的cab文件中了。
接下來是RegisterServer,能夠取兩個值yes和no,若是爲yes則說明ie要註冊該dll,若是是no就沒必要了。+若是這裏選yes,則須要指定clsid,不然clsid一行能夠省略。+
再下來是DestDir,它的值是dll將要存到本地硬盤的位置,若是它的值是10,則將dll放到/Windows或者/WinNT下;若是是11,則放到/Windows/System或者/WinNT/System32下;若是是空(就是沒有值)則會放到/Windows或者/WinNT下的Downloaded Program Files目錄下;
最後是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本號。
其餘部分詳見參考文獻。
cabarc N ctrl1.cab ctrl1.inf ctrl1.dll
N表示要建立一個新的文件,ctrl1.cab是建立的文件名,ctrl1.inf是cab的inf,後而是須要加到cab裏的文件,可使用通配符。
而後就能夠將cab文件放到網頁上了
---------------------------------------------------------------------------------------------------------------------------------------------------------
如何寫INF文件:
INF文件全稱Information File文件,是Winodws操做系統下用來描述設備或文件等數據信息的文件。INF文件是由標準的ASCII碼組成,您能夠用任何一款文字編輯器查看修改其中的內容。通常咱們老是認爲INF文件是系統設備的驅動程序,其實這是錯誤的認識,Windows之因此在安裝某些硬件的驅動時提示須要INF文件是由於INF文件爲該設備提供了一個全面描述硬件參數和相應驅動文件(DLL文件)的信息。就比如咱們看着說明書安裝電腦硬件同樣,咱們就是Windows系統,說明書就是INF文件。INF文件功能很是強大,幾乎能完成平常操做的全部功能。您能夠把它當作是Windows系統底下的超強批初理。要熟練掌握和理解甚至是編寫INF文件須要對其內部結構有至關的認識。下面就讓咱們來深刻到INF文件中的內部一窺其真面貌吧!
INF文件的組成有節(Sections),鍵(Key)和值(value)三部分。
關鍵節有
[Version]版本描述信息,主要用於版本控制。
[Strings]字符串信息,用於常量定義。
[DestinationDirs]定義系統路徑信息。
[SourceDisksNames]指明源盤信息。
[SourceDisksNames]指明源盤文件名。
[DefaultInstall]開始執行安裝。
其它的節能夠自定義,下面用一實例來具體講解。
程序代碼
[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="添加文件關聯演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"
CustomFile="inf" ;修改您須要的文件名後綴
Program="NOTEPAD.EXE" ;修改您須要關聯的應用程序名
[Add.Reg]
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安裝信息
HKCR,%CustomFile%"File\shell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"File\shell\open\command","",FLG_ADDREG_TYPE_SZ,%program% %1
[DefaultInstall]
AddReg=Add.Reg
在[Version]節中"Signature"項定義了該INF文件須要運行在何種操做系統版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個值供選擇,通常選擇$Chicago$便可。項Provider中定義了該文件的創做來源,%Author%指引用Author項的值。您也可自定其它項來描述該INF文件的版本信息。該INF文件的做用是關聯文件,因此主要是對註冊表的操做,咱們來看[Add.Reg]節,共四條語句,格式都是同樣。HKCR表示根HKEY_CLASSES_ROOT,第二個參數是子鍵的路徑名,第三個參數是代表值的類型,最後是值(具體見附表)。以上都是對操做的定義與過程,在節[DefaultInstall]中是開始執行要安裝的流程,AddReg代表是對註冊表進行操做,操做對象是Add.Reg節中的定義。若是您把AddReg換成DelReg則是刪除註冊表中的鍵值。當鼠標單擊該INF文件在彈出的菜單中選擇「安裝」就開始執行您所定義的操做。該示例在系統的INF文件右鍵菜單中增長了查看編輯功能並設置了默認動做,由於在安裝了不瞭解的INF文件有可能對系統產生不良的影響,這樣雙擊文件就可打開編輯該文件了。
再看看INF文件在文件操做方面的能力吧。請看下面的一個例子。
程序代碼
[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="文件複製和安裝演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"
[FileList]
ProcessList.exe ;此文件已在當前目錄下,下同。
[FileList1]
Wordpad.exe
[DestinationDirs]
FileList=11 ;安裝到Windows的系統目錄
FileList1=10 ;安裝到Windows目錄
[DefaultInstall]
Copyfiles=FileList,FileList1
相同的節的做用與上一例相似,請注意新出現的節[FileList],這是我自定義的節名,它表示了一個文件組,[FileList1]也相似。在節[DestinationDirs]中需定義每一個文件組複製到的目錄(各個常量的意義見附表)。Copyfiles指明瞭須要進行復制的文件組。
INF文件的操做還包括服務(NT系統)程序的安裝和卸載,INI文件的轉換等。因爲這些操做都比較的複雜和繁瑣,且有必定的危險性故下次有機會再向你們進行深刻探討。
最後咱們來看一下INF文件的執行機制,這時你也許要問不就是簡單的執行一下「安裝」嗎?知其然不知其因此然知識水平是不會提升的。在「文件夾選項」中的「文件類型」找到INF文件的「安裝」命令看到一串命令。「rundll32.exe setupapi,InstallHinfSection DefaultInst_all 132 %1」它表示了運行Dll文件setupapi.dll中的命令InstallHinfSection並傳遞給它起始節的名字 DefaultInstall。可見起始節是能夠自定義的。INF文件的執行也可用在各類支持API調用的編程工具中。至此INF文件的結構和運行機制咱們已基本瞭解,如今就讓你的思惟開動起來,讓它更好的爲咱們工做吧。
註冊表操做的常量定義:
----------------------------------------------------------
常量 根值
HKCR HKEY_CLASSES_ROOT.
HKCU HKEY_CURRENT_USER.
HKLM HKEY_LOCAL_MACHINE.
HKU HKEY_USERS.
-----------------------------------------------------------
FLG_ADDREG_APPEND 在多字符串後添加字符
FLG_ADDREG_TYPE_SZ 字符類型
FLG_ADDREG_TYPE_MULTI_SZ 字符串類型
FLG_ADDREG_TYPE_EXPAND_SZ 擴展字符串類型
FLG_ADDREG_TYPE_BINARY 二進制值
FLG_ADDREG_TYPE_DWORD DWord值
FLG_ADDREG_TYPE_NONE NULL值
----------------------------------------------------------
[DestinationDirs]節中所定義的常量路徑
----------------------------------------------------------
01 源目錄(後跟路徑)
10 Windows目錄
11 Windows系統目錄
12 驅動目錄
17 INF文件目錄
18 幫助文件目錄
20 字體目錄
21 根目錄
24 應用程序目錄
25 共享目錄
30 當前根目錄
50 System目錄
51 Spool 目錄
52 Spool 驅動目錄
53 用戶配置目錄
----------------------------------------------------------
[DefaultInstall]節中定義的操做
----------------------------------------------------------
LogConfig Log日誌文件配置
Copyfiles 複製文件
Renfiles 文件更名
Delfiles 刪除文件
UpdateInis 更新Inis
UpdateIniFields 更新Ini字段
AddReg 添加註冊項
DelReg 刪除註冊項
Ini2Reg Ini文件轉換爲Reg文件
-----------------------------------------------------------
INF文件應用示例
1、修改telnet服務,端口改成99,NTLM認證方式爲1。
===============================
C:\myinf\Telnet.inf
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall]
AddReg=AddRegName
[My_AddReg_Name]
HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,TelnetPort,0x00010001,99
HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,NTLM,0x00010001,1
安裝:rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\myinf\telnet.inf
說明:[Version]和[DefaultInstall]是必須的,0x00010001表示REG_DWORD數據類型,0x00000000或省略該項(保留逗號)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。
InstallHinfSection是大小寫敏感的。它和setupapi之間只有一個逗號,沒有空格。128表示給定路徑,該參數其餘取值及含義參見MSDN。
特別注意,最後一個參數,必須是inf文件的全路徑,不要用相對路徑。
inf文件中的項目都是大小寫不敏感的。
2、服務
===============
增長一個服務:
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=inetsvr,,My_AddService_Name
[My_AddService_Name]
DisplayName=Windows Internet Service
Description=提供對 Internet 信息服務管理的支持。
ServiceType=0x10
StartType=2
ErrorControl=0
ServiceBinary=%11%\inetsvr.exe
保存爲inetsvr.inf,而後:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf
這個例子增長一個名爲inetsvr的服務(是否是很像系統自帶的服務,呵呵)。
幾點說明:
1,最後四項分別是
服務類型:0x10爲獨立進程服務,0x20爲共享進程服務(好比svchost);
啓動類型:0 系統引導時加載,1 OS初始化時加載,2 由SCM(服務控制管理器)自動啓動,3 手動啓動,4 禁用。
(注意,0和1只能用於驅動程序)
錯誤控制:0 忽略,1 繼續並警告,2 切換到LastKnownGood的設置,3 藍屏。
服務程序位置:%11%表示system32目錄,%10%表示系統目錄(WINNT或Windows),%12%爲驅動目錄system32\drivers。其餘取值參見DDK。你也能夠不用變量,直接使用全路徑。
這四項是必需要有的。
2,除例子中的六個項目,還有LoadOrderGroup、Dependencies等。不經常使用因此不介紹了。
3,inetsvr後面有兩個逗號,由於中間省略了一個不經常使用的參數flags。
刪除一個服務:
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
DelService=inetsvr
很簡單,不是嗎?
固然,你也能夠經過導入註冊表達到目的。但inf自有其優點。
1,導出一個系統自帶服務的註冊表項,你會發現其執行路徑是這樣的:
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,74,\
00,6c,00,6e,00,74,00,73,00,76,00,72,00,2e,00,65,00,78,00,65,00,00,00
可讀性太差。其實它就是%SystemRoot%\system32\tlntsvr.exe,但數據類型是REG_EXPAND_SZ。當手動導入註冊表以增長服務時,這樣定義ImagePath顯然很不方便。若是用REG_SZ代替會有些問題——不能用環境變量了。即只能使用完整路徑。用inf文件徹底沒有這個問題,ServiceBinary(即ImagePath)自動成爲REG_EXPAND_SZ。
2,最關鍵的是,和用SC等工具同樣,inf文件的效果是即時起效的,而導入reg後必須重啓纔有效。
3,inf文件會自動爲服務的註冊表項添加一個Security子鍵,使它看起來更像系統自帶的服務。
另外,AddService和DelService以及AddReg、DelReg能夠同時且重複使用。便可以同時增長和刪除多個服務和註冊表項。
3、組策略
==========
1、密碼最小6位
[version]
signature="$CHICAGO$"
[System Access]
MinimumPasswordLength = 6
PasswordComplexity = 1
保存爲gp.inf,而後導入:
secedit /configure /db gp.sdb /cfg gp.inf /quiet
2、關閉全部的「審覈策略
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Event Audit] >>1.inf
echo AuditSystemEvents=0 >>1.inf
echo AuditObjectAccess=0 >>1.inf
echo AuditPrivilegeUse=0 >>1.inf
echo AuditPolicyChange=0 >>1.inf
echo AuditAccountManage=0 >>1.inf
echo AuditProcessTracking=0 >>1.inf
echo AuditDSAccess=0 >>1.inf
echo AuditAccountLogon=0 >>1.inf
echo AuditLogonEvents=0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet
del 1.*
4、解決XP ipc$鏈接只有Guest權限
====================
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Registry Values] >>1.inf
echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log
del 1.*
簽名
要使用到makecert工具,在VS2005目錄下搜索能夠搜索到。
在命令提示行中執行
makecert -sk myNewKey -r -n "CN=發證機關的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer
cert2spc myNew.cer myNew.spc
makecert具體使用幫助可參考建立證書的工具(makecert.exe)
簽名
要使用到signtool工具,也能夠在VS2005目錄下找到。
signtool工具備多種使用模式,下面使用的是帶UI的嚮導模式。
在命令提示行中執行
signtool signwizard
以後進入signcodewizard:
step1.選擇要簽名的cab文件
step2.自定義
step3.從文件中選擇 myNew.spc
step4.csp中的私鑰/密鑰容器:myNewKey
step5.sha1
step6.next
step7.描述:插件名稱/web:www.yourcompany.com
step8.http://timestamp.verisign.com/scripts/timstamp.dll
signtool 的具體使用幫助可參考簽名工具 (SignTool.exe)