共用方式為


擷取 IEEE 1394 節點設定 ROM 的內容

Windows 7 包含1394ohci.sys,這是使用核心模式驅動程式架構實作的新 IEEE 1394 匯流排驅動程式, (KMDF) 。 1394ohci.sys匯流排驅動程式會取代埠/迷你埠組態中的舊版 IEEE 匯流排驅動程式-- 1394bus.sys和ochi1394.sys。 它與舊版 1394 匯流排驅動程式回溯相容。 如需新和舊版 1394 匯流排驅動程式之間一些已知行為差異的資訊,請參閱 Windows 7 中的 IEEE 1394 匯流排驅動程式

本主題提供1394ohci.sys匯流排驅動程式如何擷取節點組態 ROM 內容的詳細資料,稍後會用於裝置列舉。 針對裝置探索處理節點設定 ROM 的內容尚未變更 Windows 7。 如需如何處理節點組態 ROM 內容的詳細資訊,請參閱 修改 1394 組態 ROM

1394ohci.sys匯流排驅動程式會在 1394 匯流排重設之後擷取節點組態 ROM 的內容,方法是將非同步讀取交易傳送至節點。 它會嘗試減少傳送至節點的非同步讀取交易數目,以擷取節點組態 ROM 的內容。

本主題包含下列幾節:

擷取組態 ROM 標頭

若要擷取節點組態 ROM 的內容,用戶端驅動程式會將 REQUEST_GET_LOCAL_HOST_INFO 要求傳送至 IEEE 1394 驅動程式堆疊,方法是指定 u.GetLocalHostInformation.nLevel 以GET_HOST_CONFIG_ROM。 完成要求之後,匯流排驅動程式會在 GET_LOCAL_HOST_INFO5 結構中擷取節點的組態 ROM 標頭。 組態 ROM 標頭位於節點組態 ROM 的前五個四邊列。 此標頭包含匯流排資訊區塊的內容,如 IEEE-1394a 規格中所定義。

1394ohci.sys匯流排驅動程式會嘗試擷取單一非同步區塊讀取交易中的組態 ROM 標頭。 不過,某些 1394 裝置可能無法正確回應此交易。 在此情況下,新的 1394 匯流排驅動程式會使用五個非同步四列讀取交易來擷取組態 ROM 標頭。

在擷取節點的組態 ROM 標頭期間,會決定與節點通訊的速度。 1394ohci.sys匯流排驅動程式會以最快的速度將非同步讀取交易傳送至節點,並考慮本機節點與目標節點之間的任何較慢節點。 如果非同步讀取交易未以最快的速度順利完成,則1394ohci.sys匯流排驅動程式會以較慢的速度將另一個非同步讀取交易傳送至節點。 1394ohci.sys匯流排驅動程式會繼續以較慢且較慢的速度將非同步讀取交易傳送至節點,直到交易成功完成為止。 以特定速度完成非同步交易之後,該速度會用於與節點進行所有其他通訊,直到發生另一個 1394 匯流排重設為止。 如果非同步讀取交易未以最慢的速度完成,則1394ohci.sys匯流排驅動程式不會擷取節點組態 ROM 的內容。

擷取設定 ROM 標頭之後,1394ohci.sys匯流排驅動程式會檢查先前是否已擷取節點組態 ROM 的內容。 如果是,它可以重複使用其快取的版本。 否則,它必須擷取節點組態 ROM 的其餘內容。

新增設定 ROM

如果1394ohci.sys匯流排驅動程式判斷先前未擷取節點組態 ROM 的內容,它會繼續擷取節點組態 ROM 的其餘內容。

1394ohci.sys匯流排驅動程式會使用組態 ROM 標頭之匯流排資訊區塊中的 max_rom 值,來判斷要傳送至節點的非同步讀取交易大小,以擷取組態 ROM 的其餘內容。 如果有任何非同步讀取交易失敗,不論 max_rom 值為何,新的 1394 匯流排驅動程式會使用非同步四次方程式讀取交易來擷取節點組態 ROM 的其餘內容。

先前擷取的組態 ROM

在1394ohci.sys匯流排驅動程式擷取節點組態 ROM 標頭的內容之後,它會判斷標頭是否符合驅動程式先前擷取之其中一個已快取組態 ROM 內容的標頭。 如果找到相符的組態 ROM 標頭,則會重複使用快取的組態 ROM 內容。

1394ohci.sys匯流排驅動程式會使用下列步驟來判斷是否可以重複使用節點組態 ROM 內容的快取複本:

  1. 匯流排驅動程式會決定節點組態 ROM 標頭之匯流排資訊區塊中的 node_vendor_idchip_id hichip_id lo 值是否符合其中一個驅動程式快取組態 ROM 內容的標頭中的相同值。
  2. 如果在步驟 1 中找到相符專案,則匯流排驅動程式會判斷匯流排資訊區塊中的產生值是否也相符。 如果產生值尚未變更 (,或設定為 1,表示它永遠不會變更) ,則匯流排驅動程式會重複使用組態 ROM 的快取內容。

您可以在 IEEE 1394 規格的先前步驟中找到組態 ROM 值的描述。 如果1394ohci.sys匯流排驅動程式找不到相符的快取組態 ROM 標頭,或必須重新讀取節點組態 ROM 的內容,因為 產生 值已變更,則會遵循先前的步驟來擷取新組態 ROM 的內容。

IEEE 1394 驅動程式堆疊
修改 1394 組態 ROM
REQUEST_GET_CONFIG_ROM