VIDEO_ACCESS_RANGE結構 (video.h)
VIDEO_ACCESS_RANGE 結構會定義視訊配接器的裝置 I/O 埠或記憶體範圍。 每個迷你埠驅動程式的 HwVidFindAdapter 函式都必須針對迷你埠驅動程式支援的每個視訊配接器設定VIDEO_ACCESS_RANGE類型的元素陣列,稱為 存取範圍數位。
對於 VGA 相容的迷你埠驅動程式,VIDEO_ACCESS_RANGE也會定義傳遞至 VideoPortSetTrappedEmulatorPorts 陣列中的元素,,讓全螢幕 MS-DOS 應用程式啟用或停用對 I/O 埠的直接存取。
語法
typedef struct _VIDEO_ACCESS_RANGE {
PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
UCHAR RangeInIoSpace;
UCHAR RangeVisible;
UCHAR RangeShareable;
UCHAR RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
成員
RangeStart
指定傳遞至 videoPortVerifyAccessRanges 之存取範圍陣列中元素之內存或 I/O 埠範圍的總線相對基位址, 或由 VideoPortGetAccessRanges傳回。
指定要傳遞至 VideoPortSetTrappedEmulatorPorts之陣列之 I/O 埠範圍的總線相對基位址。
RangeLength
指定範圍的 I/O 連接埠數目或位元元元大小。
RangeInIoSpace
指定範圍是在 I/O 空間或記憶體空間中。 TRUE (1) 的值表示範圍位於 I/O 空間中;FALSE (0) 的值表示範圍位於記憶體空間中。
RangeVisible
如果迷你埠驅動程式的 HwVidFindAdapter 函式正在設定存取範圍數位,則會忽略。
設定為 VGA 相容迷你埠驅動程式的 TRUE,並傳遞至 VideoPortSetTrappedEmulatorPorts,讓全螢幕 MS-DOS 應用程式直接存取 I/O 埠範圍。 如果設定為 FALSE,則應用程式發出的指示會繼續被截獲並轉送至迷你埠驅動程式的 SvgaHwIoXxx 函式以進行驗證。
RangeShareable
如果這個專案描述的存取範圍可以與另一個驅動程式和/或裝置共用,或 FALSE 則無法共用範圍,則設為 TRUE。
VideoPortSetTrappedEmulatorPorts 會忽略。
RangePassive
指出裝置是否實際使用埠。 下表顯示此成員的值。
價值 | 意義 |
---|---|
VIDEO_RANGE_PASSIVE_DECODE | 裝置會譯碼埠,但驅動程式不會使用它。 |
VIDEO_RANGE_10_BIT_DECODE | 裝置會譯碼埠位址的十位。 |
言論
迷你埠驅動程序必須在其 DriverEntry 或 HwVidLegacyResources 函式中宣告舊版資源。
否則,迷你埠驅動程式的 HwVidFindAdapter 函式會設定適配卡 PCI 資源的存取範圍數位。 它可以使用 VideoPortGetAccessRanges所傳回的資訊。 或者,它可以使用從登錄擷取的資訊,方法是呼叫 VideoPortGetDeviceData 搭配迷你埠驅動程式提供的 HwVidQueryDeviceCallback 函式或 VideoPortGetRegistryParameters 搭配迷你端口驅動程式提供的 HwVidQueryNamedValueCallback 函式。 如果呼叫這些 VideoPortXxx 不提供總線相對存取範圍值,HwVidFindAdapter 可以使用驅動程式提供的總線相對預設值來設定存取範圍元素。
登錄中的宣告存取範圍
迷你埠驅動程序應該使用從 VideoPortGetDeviceData、VideoPortGetAccessRanges或預設提供的任何存取範圍呼叫 videoPortVerifyAccessRanges。 如果 VideoPortVerifyAccessRanges 針對這類存取範圍數位傳回NO_ERROR,HwVidFindAdapter 或 HwVidQueryDeviceCallback 函式,就可以將範圍與 VideoPortGetDeviceBase 對應,並使用傳回的對應邏輯位址來存取配接器。成功呼叫 VideoPortGetAccessRanges 也會宣告呼叫者登錄中傳回的總線相對存取範圍。 如果迷你埠驅動程式修改任何傳回的值,則必須呼叫具有完整存取範圍 VideoPortVerifyAccessRanges,包括任何未修改的專案。 VideoPortGetAccessRanges 或 VideoPortVerifyAccessRanges 特定視訊配接器的每個呼叫都會覆寫呼叫端在登錄中宣告的硬體資源。
迷你埠驅動程式不得嘗試使用 VideoPortVerifyAccessRanges 或 VideoPortGetAccessRanges 不會傳回NO_ERROR的範圍。
對應存取範圍以與配接器通訊
迷你埠驅動程式在適配卡登錄中宣告資源之後,就無法使用總線相對位址來存取或設定適配卡,因為 HAL 可以將所有總線相對裝置位址重新對應至 系統空間。迷你埠驅動程式的 HwVidFindAdapter 函式必須呼叫 VideoPortGetDeviceBase,以取得其存取範圍的對應邏輯位址。 只有這樣,迷你埠驅動程式才能將傳回的對應邏輯範圍位址傳遞至 VideoPortRead/WritePortXxx,以存取 I/O 空間中的裝置記憶體和/或 VideoPortRead/WriteRegisterXxx,以存取記憶體空間中的裝置記憶體。
判斷存取範圍是否可共用
請遵循下列指導方針來判斷是否可以共用存取範圍:- 如果此驅動程式應「擁有」記憶體或 I/O 連接埠範圍,而任何其他驅動程式對此範圍的存取可能會造成問題,請將 RangeSharable 設定為 FALSE。
- 如果範圍可以與合作裝置驅動程式共用,請將 RangeSharable 設定為 true 。
不過,使用傳遞IOCTL且可連線到任何 VGA 或 SVGA 卡的卡片迷你埠驅動程式不應使用任何系統 VGA 埠或記憶體範圍。 如果這樣做,這類驅動程式不應該嘗試宣告登錄中的任何 VGA 存取範圍。 這類迷你埠驅動程序嘗試宣告 VGA 資源可能會造成資源衝突,因為機器中任何 SVGA 卡的驅動程式都會將這些存取範圍宣告為無法共用。
將 I/O 埠範圍元素傳遞至 VideoPortSetTrappedEmulatorPorts
除非 x86 型機器中的 VGA 相容迷你埠驅動程序明確地重設 RangeVisible member(s) 來 TRUE,並呼叫 VideoPortSetTrappedEmulatorPorts 來啟用一或多個 I/O 埠範圍,否則所有描述 I/O 連接埠範圍的VIDEO_ACCESS_RANGE類型數組元素都會假設為不可見。 VideoPortSetTrappedEmulatorPorts 會忽略輸入陣列 RangeSharable 成員。在傳遞至 VideoPortSetTrappedEmulatorPorts之VIDEO_ACCESS_RANGE型別元素的數位中,每個元素的 RangeVisible 成員的值會決定是否可以直接存取指定的 I/O 埠 VDM(MS-DOS 在 x86 型機器上全螢幕執行的應用程式),或這類應用程式發出的 I/O 數據流是否會被截獲並轉送至小型埠驅動程式提供的 SvgaHwIoPortXxx 函式,以便先進行驗證。
要求
要求 | 價值 |
---|---|
標頭 | video.h (include Video.h) |
另請參閱
Video Miniport Driver 的 DriverEntry
VideoPortGetRegistryParameters