在安裝期間,Windows 如何判斷最適合的裝置驅動程式以進行安裝

文章翻譯 文章翻譯
文章編號: 279112 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

本文將告訴您在安裝期間,用來為裝置選取 最適合之裝置驅動程式的處理程序。

當您執行 Windows 安裝程式時,可能會有一組以上處理用來特定裝置的裝置驅動程式或 .inf 檔案。安裝程式與「隨插即用」功能都會嘗試為正在安裝的裝置選取最適合的裝置驅動程式,解決這些衝突。

注意:本文僅說明在安裝程式的圖形使用者介面 (GUI) 階段或安裝程式完成以後,供正在安裝之裝置使用的處理程序。在以「文字」模式部分進行安裝期間執行的大型存放體控制卡偵測和裝置驅動程式選取程序,都會遵循不同的程序。

其他相關資訊

如需有關大型存放體控制卡偵測的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
220845 Adding Third-Party or Updated Driver During Windows Setup

「隨插即用」會透過比對硬體的隨插即用「識別碼」(ID) (由裝置韌體或系統 BIOS 在列舉過裝置後傳回) 與位於 .inf 檔中任何相符的隨插即用識別碼,嘗試找出相容的裝置驅動程式。

「隨插即用」可以搜尋所有 .inf 檔案,為特定裝置找尋最適合安裝的裝置驅動程式。「隨插即用」功能不會在找到第一個相符的「隨插即用」驅動程式後就停止搜尋,而是會繼續搜尋列於「隨插即用」搜尋路徑中的全部 .inf 檔,如下列登錄項目所定義:
HKEY-LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
DevicePath:Reg_Expand_SZ:%Systemroot%\Inf

注意:依預設,前一個登錄位置僅包含此單一項目,但是執行自主式安裝時,您可以將額外路徑附加到此項目,並且在自主式回應檔案中使用 OemPnpDriversPath = 參數。

安裝程式會建立相容的裝置驅動程式清單,其中包含 .inf 檔中的相符項目,並為所找到的各個項目指定「排名」。這個排名可以從 "0" 一直到 "0xFFFF",其中 0 為最適合的可能相符項目;而 0xFFFF 則為最不適合的可能相符項目。因此,排名最低的裝置驅動程式會被視為最適合的可能相符項目,也就是所安裝的裝置驅動程式。

裝置驅動程式的排名範圍如下:
  • 0x0 到 0xfff:裝置硬體識別碼符合 .inf 檔所列硬體識別碼。
  • 0x1000 到 0x1fff:裝置硬體識別碼與 .inf 檔所列其中一個硬體識別碼相容。
  • 0x2000 到 0x2fff:其中一個裝置相容識別碼符合 .inf 檔的硬體識別碼。
  • 0x3000 到 0x3fff:其中一個裝置相容識別碼與 .inf 檔的硬體識別碼相容。
  • 0xFFFF:最不適合的相符情況。
在 Windows XP 和 Windows Server 2003 中,還有其他裝置驅動程式的排名範圍:
  • 0x8000 到 0x8FFF:符合不受信任的硬體識別碼
  • 0x9000 到 0x9FFF:符合不受信任的相容識別碼
如果沒有數位簽章,或是型號部分的名稱不包含 Windows NT 特定的裝飾 (裝置可以安裝在 Windows NT、Windows 95 或 Windows 98 上,但是卻不具有這些作業系統的特定項目),這些 .inf 檔案就屬於不受信任的級別。

如果安裝程式判斷裝置驅動程式未受信任,則可以變更該裝置驅動程式的排名,納入上述的適當範圍中。
從 0x0 到 0xfff 範圍中的裝置驅動程式稱為「硬體識別碼相符」,因為它們會比對檔案中的硬體識別碼與裝置硬體的識別碼,這些範圍也被視為是最適合的相符項目;而其他任何範圍都列為「相容」,因為在建立裝置驅動程式排名時,其中至少會有一個相容的識別碼。如果安裝程式判斷裝置驅動程式無法支援該裝置,或是變更裝置驅動程式的排名時,類別安裝程式和副安裝程式也會將裝置驅動程式加上「無效」旗標,影響裝置驅動程式的選取。

但是,如果兩個裝置驅動程式都具有最低的排名,安裝程式便會使用日期最近的裝置驅動程式。如果其中一個裝置驅動程式具有簽章,而另一個則尚未簽章,則會指定 0xFFFFFFFF 值給未簽章的裝置驅動程式日期,從而選取並安裝具有簽章的裝置驅動程式。

您可以提供 OEM 提供的裝置驅動程式,但可能不會遭到選取及使用。雖然製造商已提供了更新的裝置驅動程式,但可能只是將該程式撰寫成相容的裝置驅動程式,因此被判定為排名較高而變成最不適合的相符項目。安裝程式在選取相符的裝置驅動程式時,不會考慮 OEM 提供的裝置驅動程式是否具有數位簽章。如果未簽章的裝置驅動程式排名較低,而且相符程度比其他任何隨附裝置驅動程式都來得高,則安裝程式就會選取並安裝該裝置驅動程式。

執行安裝程式時,如果在任何 .inf 檔中都找不到相符項目,便可能會將該裝置的安裝作業延後,而裝置便會在「裝置管理員」中成為無法辨識的裝置。如果 (不是在安裝期間) 加入新裝置,而且在電腦上的任何 .inf 檔中都找不到相符項目,「找到新硬體」提示便會出現,並請您提供裝置驅動程式。

例如,您的電腦配備 PCI 視訊卡,其「隨插即用識別碼」出現在 Nv3_disp.inf 和 Nv4_disp.inf 這兩個 .inf 檔案中,但是這兩個裝置驅動程式檔案都沒有數位簽章,因此這兩個裝置驅動程式都會指定為 0xFFFFFFFF 值。就此範例而言,這兩個檔案分別位於下列 D:\Drivers\Video1 和 D:\Drivers\Video2 資料夾中。

目前登錄中的 Devicepath= 包含 %Systemroot%\Inf、%Systemdrive%\Drivers\Video1、%Systemdrive%\Drivers\Video2 等項目。

注意:%Systemroot% 是 D:\Winnt;而 %Systemdrive% 則是 D:

安裝程式和「隨插即用」功能都會針對上述路徑中找到的所有 .inf 檔進行搜尋,並記錄找到的任何相符項目。如果安裝程式或「隨插即用」找到一個以上的相符項目,就使用最適合的相符項目。

以下係摘錄自 Setupapi.log 檔的內容,其中詳細記錄了上述程序。針對此範例,我們使用了下列文件中的方式,在「詳細資訊」模式中加入了安裝程式的「記錄」模式:
243996 How to Enable Verbose Logging in Windows 2000 GUI-Mode Setup

如果安裝程式正常執行,您就不會在 Setupapi.log 檔案中看到如此詳細的資訊。

當裝置接受查詢時,會傳回硬體識別碼和相容識別碼的清單。不是所有裝置都會傳回多個識別碼,但是在大部分情況下都會。在此範例中,視訊卡會傳回下列識別碼:
Searching for hardware IDs:
Pci\Ven_10de&dev_0028&subsys_5a001092&rev_11,
Pci\Ven_10de&dev_0028&subsys_5a001092,
Pci\Ven_10de&dev_0028&cc_030000,
Pci\Ven_10de&dev_0028&cc_0300
Searching for compatible IDs:
Pci\Ven_10de&dev_0028&rev_11,
Pci\Ven_10de&dev_0028,
Pci\Ven_10de&cc_030000,
Pci\Ven_10de&cc_0300,
Pci\Ven_10de,pci\cc_030000,
Pci\Cc_0300
Enumerating files D:\Winnt\Inf\*.inf
@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\1394.inf".
@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\accessor.inf".
@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\acpi.inf".
@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\adm_mult.inf".
@ 07:11:59.191 : Opened PNF of "D:\Winnt\Inf\adm_port.inf".
@ 07:11:59.207 : Opened PNF of "D:\Winnt\Inf\agtinst.inf".
.
.
.
Enumerating files D:\Drivers\Video1\*.inf
@ 07:12:00.660 : Opened PNF of "D:\Drivers\Video1\NV4_DISP.inf".
@ 07:12:00.660 : The file (D:\Drivers\Video1\NV4_DISP.inf) is not digitally
signed, ignoring driver date.
@ 07:12:00.660 :Found Pci\VEN_10DE&DEV_0028 in 
D:\Drivers\Video1\NV4_DISP.inf; Device:NVIDIA RIVA TNT2; Driver:NVIDIA
RIVA TNT2; Provider:NVIDIA; Mfg:NVIDIA; Section:nv4
@ 07:12:00.660 : Decorated section name:nv4
Enumerating files D:\Drivers\Video2\*.inf
@ 07:12:00.660 : Opened PNF of "D:\Drivers\Video2\NV3_DISP.inf".
@ 07:12:00.675 : The file (D:\Drivers\Video2\NV3_DISP.inf) is not digitally
signed, ignoring driver date.
@ 07:12:00.675 : Found PCI\VEN_10DE&DEV_0028 in
D:\Drivers\Video2\NV3_DISP.inf; Device:NVIDIA RIVA TNT2; Driver:NVIDIA
RIVA TNT2; Provider:NVIDIA; Mfg:NVIDIA; Section:nv4
@ 07:12:00.675 : Decorated section name:nv4
@ 07:12:01.706 : Device install function:DIF_SELECTBESTCOMPATDRV.
@ 07:12:01.706 : Executing class installer.
@ 07:12:01.894 : Completed class installer.
@ 07:12:01.894 : Executing default installer.
@ 07:12:01.894 : Selected driver installs from section nv4 in D:\Drivers\Video1\Nv4_disp.inf.
@ 07:12:01.894 : Changed class GUID of device to {4D36E968-E325-11CE-BFC1-08002BE10318}.
@ 07:12:01.894 : Set selected driver.
@ 07:12:01.894 : Selected best compatible driver.
@ 07:12:01.894 : Completed default installer.
@ 07:12:06.565 : Device install function:DIF_ALLOW_INSTALL.
@ 07:12:06.565 : Executing class installer.
@ 07:12:06.565 : Completed class installer.
@ 07:12:06.581 : Device install function:DIF_INSTALLDEVICEFILES.
@ 07:12:06.581 : Executing class installer.
@ 07:12:06.581 : Completed class installer.
@ 07:12:06.581 : Executing default installer.
				
在範例輸出中,安裝程式是使用 D:\Drivers\Video1\Nv4_disp.inf 檔以選取並安裝裝置驅動程式,因為安裝程式發現該裝置驅動程式是最適合的相符項目。

如果要輕易找出已安裝的裝置和用來安裝該裝置的 .inf 檔案,請以 Windows 的「記事本」開啟 %Systemroot%\Setupapi.log 檔案,搜尋 DIF_SelectBestCompatDrv 以找出「隨插即用」安裝的裝置,或是搜尋 DIF_SelectDevice 以找出手動安裝的裝置。

屬性

文章編號: 279112 - 上次校閱: 2006年9月6日 - 版次: 6.3
這篇文章中的資訊適用於:
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition (家用版)
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows Small Business Server 2003 Premium Edition
  • Microsoft Windows Small Business Server 2003 Standard Edition
關鍵字:?
kbenv kbinfo kbsetup KB279112
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com