共用方式為


使用Avc.sys

在 Windows 載入並初始化 Avc.sys之後, Avc.sys 會使用標準 AV/C 單位和子單位命令來探索連線到 IEEE 1394 匯流排的所有 AV/C 裝置上的作用中子單位, (當電腦是虛擬 AV/C 單位) 時,包括任何虛擬子單位。 然後,Avc.sys 為所有使用中子單位產生裝置識別碼 (識別碼) 。 接下來, Avc.sys會使用標準隨插即用 (PnP) 機制,為每個子單位載入適當的子單位驅動程式。 根據安裝子單位驅動程式的 INF 檔案,以及子單位的裝置識別碼,選取要載入的子單位驅動程式,如 Avc.sysAV/C 裝置識別碼中所述。 裝置識別碼是從 AV/C 裝置的單位資訊產生,結合子單位的 SubunitTypeSubunitID 欄位。 支援子單位的驅動程式可以是廠商專屬的,也可以是子單位類型的泛型。 例如,大部分 DV 攝影機的子單位驅動程式是 Microsoft 提供的 Msdv.sys

子單位驅動程式會透過以 WDM 架構為基礎的所有驅動程式採用的標準 IRP 型機制,與 Avc.sys 通訊。 子單位驅動程式會將其 AV/C 子單位配置並傳送至驅動程式堆疊,以與其 AV/C 子單位通訊, Avc.sys。 若要提出 I/O 要求,請包含標頭檔 Avc.h,隨附于 Microsoft Windows Driver Kit (WDK) 。

子單位驅動程式會配置和初始化要由 Avc.sys處理的 IRP。 子單位驅動程式會將 IRP 的參數 .DeviceIoControl.IoControlCode 成員設定為對應至所需 AV/C 作業的 IOCTL。

Avc.sys 會根據載入的子單位驅動程式堆疊,註冊兩個 裝置介面的其中一個,以支援 (對等或虛擬) 。 這些介面會定義 Avc.sys 匯出子單位驅動程式、其他驅動程式和要使用的應用程式的功能。 Avc.sys 接著會根據驅動程式的 PnP 狀態,將介面的狀態變更為已啟用或停用。

如果 載入Avc.sys提供對等) 堆疊 (外部 AV/C 子單位的支援,Avc.sys會註冊 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.sys的GUID_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 作業碼和運算元。