在 Windows 載入並初始化 Avc.sys之後,Avc.sys 會使用標準 AV/C 單位和子單位命令,在連線到 IEEE 1394 總線的所有 AV/C 裝置上探索使用中的子單位(包括計算機為虛擬 AV/C 單位時的任何虛擬子單位)。 Avc.sys 然後為所有活動子單位生成裝置識別碼(標識符)。 接下來,Avc.sys 使用標準即插即用 (PnP) 機制,為每個子單位載入適當的子單位驅動程式。 系統會根據安裝子單位驅動程式的 INF 檔案以及由 Avc.sys 產生的子單位裝置識別碼,選擇要載入的子單位驅動程式,詳如 AV/C 裝置識別碼中所述。 裝置識別碼是從 AV/C 裝置的單位資訊產生,結合子單位的 SubunitType 和 SubunitID 欄位。 支援子單位的驅動程式可以是廠商特定的,也可以是子單位類型的泛型。 例如,大部分 DV 攝影機的子單位驅動程式是由 Microsoft 提供的 Msdv.sys。
子單位驅動程式會透過以 WDM 架構為基礎的所有驅動程式採用的標準 IRP 型機制,與 Avc.sys 通訊。 子單位驅動程式透過配置 IRP 並將其傳送至 AV/C 通訊協定驅動程式,以與其 AV/C 子單位通訊,Avc.sys。 若要提出 I/O 要求,請包含頭檔 Avc.h,它隨 Microsoft Windows Driver Kit (WDK) 提供。
子單位驅動程式會配置並初始化由 Avc.sys處理的 IRP。 子單位驅動程式會將 IRP 的 Parameters.DeviceIoControl.IoControlCode 成員設定為對應於所需 AV/C 操作的 IOCTL。
Avc.sys 會 註冊兩個裝置介面的其中一個,視載入的子單位驅動程式堆疊而定(對等或虛擬)。 這些介面會定義 Avc.sys 匯出子單位驅動程式、其他驅動程式和應用程式使用的功能。 Avc.sys 然後根據驅動程式的 PnP 狀態,將介面的狀態變更為啟用或停用。
當 Avc.sys 載入以提供外部 AV/C 子單位(對等堆棧)支援時,會註冊一個新的 GUID_AVC_CLASS 實例。 此介面僅支援下列 I/O 控制件 (IOCTL) 程式代碼:
IOCTL_AVC_CLASS接著支援多個功能代碼。 子驅動程式實例 、Avc.sys和,旨在支援對等子單位,保證可以透過其父裝置物件存取此介面。
GUID_AVC_CLASS介面支援所有IOCTL_AVC_CLASS函式程式代碼,不過有些函式的使用有限制,如每個函式的參考頁面所述。
Avc.sys 註冊新的 GUID_VIRTUAL_AVC_CLASS 實例,如果已載入,則為虛擬AV/C子單位(虛擬堆疊)提供支援。 此介面支援四個 I/O 控制件 (IOCTL) 程式代碼:
GUID_VIRTUAL_AVC_CLASS 介面不支援每個IOCTL_AVC_CLASS功能碼。 每個個別函式程式碼的參考頁面會指定是否支援 Avc.sysGUID_VIRTUAL_AVC_CLASS 實例。
IOCTL_AVC_CLASS IRP 只支援在核心模式下運行(通常用於驅動程式之間的通訊),透過 IRP_MJ_INTERNAL_DEVICE_CONTROL。 因此,應用程式無法直接存取 IOCTL_AVC_CLASS IOCTL 程式代碼所提供的函式。
透過 IRP_MJ_DEVICE_CONTROL,核心模式和使用者模式都支持最後三個 IOCTL 程式代碼。 這表示應用程式可以將這些 IOCTL 直接傳送至 Avc.sys。
IOCTL_AVC_CLASS IOCTL 程式代碼必須隨附 I/O 要求區塊 (IRB),這會進一步描述要執行的 AV/C 作業。 IRB 標頭包含函式編號,可決定 IRB 其餘部分的結構。 IRB 結構和大小會根據函式而有所不同。 Avc.sys 使用兩個自訂 IRB:
子單位驅動程序必須使用哪一個 IRB 的選擇取決於所需的函式。 如需 Avc.sys所支援之IOCTL_AVC_CLASS函式代碼的詳細資訊, 請參閱 AV/C 通訊協定驅動程式式代碼。
子單位驅動程式所使用的主要 AV/C 函式是 AVC_FUNCTION_COMMAND,它會使用 AVC_COMMAND_IRB 結構。 AVC_FUNCTION_COMMAND 傳送 AV/C 要求,並接收對應的 AV/C 回應。 建置 AV/C 命令的詳細資料是由 Avc.sys處理,但子單位驅動程式必須提供每個命令的 AV/C opcode 和作數。