1.什么是打印機驅(qū)動?
打印機驅(qū)動是一種基于操作系統(tǒng)的DDI接口而開發(fā)的,用于將各種Application數(shù)據(jù)翻譯成打印機能解釋的數(shù)據(jù),并輸出到打印機而開發(fā)的程序。
2.為什么要做打印機驅(qū)動?
打印機的語言有很多種(如ps,lips,pcl等),各個廠商開發(fā)的打印機所能解釋的打印機數(shù)據(jù)也是各不相同的。如果沒有打印機驅(qū)動,那么每個Application就需要針對每一種打印機開發(fā)不同的輸出程序,這顯然是不可能的。為解決該問題,操作系統(tǒng)就制定了一套機制DDI(device driver interface),基于這套機制,Application無需考慮輸出設(shè)備的具體信息(如打印機語言等),只需要調(diào)用相應(yīng)的GDI(graphics device interface)函數(shù),就可以將數(shù)據(jù)輸出到不同的輸出設(shè)備上,也就是說設(shè)備無關(guān)的。同時GDI會調(diào)用OS提供的相應(yīng)的DDI接口,而這些DDI接口的實現(xiàn),就是打印機驅(qū)動。在打印機驅(qū)動內(nèi)部,需要針對不同的設(shè)備,作相應(yīng)的處理,從而減少了Application開發(fā)輸出程序的負擔(dān)。
3.Application,GDI,打印機驅(qū)動之間的關(guān)系

在上面的圖中,需要注意的是Application是不能直接調(diào)用DDI接口的,必須通過 調(diào)用GDI函數(shù)來實現(xiàn)對DDI接口的調(diào)用。
4.打印機驅(qū)動的結(jié)構(gòu) 打印機驅(qū)動主要由兩大部分組成,即圖形部分和界面部分。 圖形部分的功能為通過GDI將打印機參數(shù)傳給Application,同時將GDI傳過來的數(shù)據(jù)翻譯成打印機可以解釋的數(shù)據(jù),并且發(fā)送到print spooler。其流程結(jié)構(gòu)如下圖:

上面是USER MODE打印數(shù)據(jù)流程,與之相對的也有KERNEL MODE打印數(shù)據(jù)流程,這個以后再說。 圖形部分內(nèi)部流程的詳細說明:

其中的DDI接口在DDK幫助文檔中都有詳細的說明。 界面部分的功能為提供用戶界面,用戶可以根據(jù)自己的需要通過該界面設(shè)置不同的打印參數(shù),同時提供一個spooler為通知驅(qū)動打印相關(guān)的系統(tǒng)事件而能夠調(diào)用的接口。 界面部分函數(shù)的說明:

其中的DDI接口在DDK幫助文檔中都有詳細的說明。