訓練
模組
Manage drivers and device peripherals - Training
This module introduces device drivers. Student will learn how drivers work and the tools used to manage common peripheral devices such as printers.
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
印表機迷你驅動程式會實作 OEMEnableDriver 函式,以通知其功能的核心驅動程式,其會填入DRVENABLEDATA結構的成員。 這個結構的 pdrvfn 成員應該使用DRVFN結構的數位地址來設定。 此陣列的每個元素都應該使用函式索引初始化,以及 IHV 所實作之 其中一個 OEMXxx 函式的位址。 (如需每個 的詳細描述OEMXxx 函式,請參閱 非 COM 型 DDI 攔截輸出函式。)
當應用程式呼叫 Microsoft Win32 GDI 來執行轉譯工作時,Win32 GDI 會接著呼叫 Unidrv 或 Pscript5 核心驅動程式,而後者通常會處理工作。 不過,如果印表機迷你驅動程式指出它能夠攔截特定的轉譯作業,核心驅動程式會將轉譯工作傳遞至 IHV 轉譯外掛程式。
例如,請考慮呼叫 Win32 LineTo API 的應用程式(如 Windows SDK 檔中所述)。 一般而言,這會導致再次呼叫核心驅動程式的 DrvLineTo DDI來繪製線條。 不過,如果印表機 minidriver 表示其打算掛接此 DDI 的呼叫,DrvLineTo 會立即將呼叫轉送至 IHV 的 OEMLineTo 函式。
IHV 可以實作 OEMLineTo,或非 COM 型 DDI Hook-Out 函式中所述的任何其他攔截函式,讓它可以完全處理轉譯作業,也可以回呼讓核心驅動程式處理該作業。
OEMLineTo 可以實作,如下列虛擬程式碼範例所示:
BOOL APIENTRY
OEMLineTo(
SURFOBJ *pso,
CLIPOBJ *pco,
BRUSHOBJ *pbo,
LONG x1,
LONG y1,
LONG x2,
LONG y2,
RECTL *prclBounds,
MIX mix
)
{
if ( OEM intends to handle the call ) {
code to handle the call
}
else
// OEM calls Unidrv's DrvLineTo DDI
bRetVal = (((PFN_DrvLineTo)(poempdev->pfnUnidrv[UD_DrvLineTo])) (
pso,
pco,
pbo,
x1,
x2,
y1,
y2,
prclBounds,
mix,));
}
在上述範例中,表達式
poempdev->pfnUnidrv[UD_DrvLineTo]
評估為核心驅動程式 DrvLineTo DDI的位址。 前面將函式指標轉換成適當類型的 (PFN_DrvLineTo) 表達式。 本節所列的每個勾點函式都會與其自己的函式指標相關聯。
請注意,當 OEMXxx DDI 回呼 Unidrv 核心驅動程式,且涉及的表面是裝置管理的介面時,Unidrv 只需傳回 FALSE 即可忽略呼叫。
訓練
模組
Manage drivers and device peripherals - Training
This module introduces device drivers. Student will learn how drivers work and the tools used to manage common peripheral devices such as printers.