1.什么是打印機(jī)驅(qū)動(dòng)娄柳?
打印機(jī)驅(qū)動(dòng)是一種基于操作系統(tǒng)的DDI接口而開發(fā)的,用于將各種Application數(shù)據(jù)翻譯成打印機(jī)能解釋的數(shù)據(jù)温圆,并輸出到打印機(jī)而開發(fā)的程序麻敌。
2.為什么要做打印機(jī)驅(qū)動(dòng)妇汗?
打印機(jī)的語言有很多種(如ps帘不,lips,pcl等)杨箭,各個(gè)廠商開發(fā)的打印機(jī)所能解釋的打印機(jī)數(shù)據(jù)也是各不相同的厌均。如果沒有打印機(jī)驅(qū)動(dòng),那么每個(gè)Application就需要針對(duì)每一種打印機(jī)開發(fā)不同的輸出程序告唆,這顯然是不可能的。為解決該問題晶密,操作系統(tǒng)就制定了一套機(jī)制DDI(device driver interface)擒悬,基于這套機(jī)制,Application無需考慮輸出設(shè)備的具體信息(如打印機(jī)語言等)稻艰,只需要調(diào)用相應(yīng)的GDI(graphics device interface)函數(shù)懂牧,就可以將數(shù)據(jù)輸出到不同的輸出設(shè)備上,也就是說設(shè)備無關(guān)的尊勿。同時(shí)GDI會(huì)調(diào)用OS提供的相應(yīng)的DDI接口僧凤,而這些DDI接口的實(shí)現(xiàn),就是打印機(jī)驅(qū)動(dòng)元扔。在打印機(jī)驅(qū)動(dòng)內(nèi)部躯保,需要針對(duì)不同的設(shè)備,作相應(yīng)的處理澎语,從而減少了Application開發(fā)輸出程序的負(fù)擔(dān)途事。
3.Application,GDI擅羞,打印機(jī)驅(qū)動(dòng)之間的關(guān)系
在上面的圖中尸变,需要注意的是Application是不能直接調(diào)用DDI接口的,必須通過 調(diào)用GDI函數(shù)來實(shí)現(xiàn)對(duì)DDI接口的調(diào)用减俏。
4.打印機(jī)驅(qū)動(dòng)的結(jié)構(gòu) 打印機(jī)驅(qū)動(dòng)主要由兩大部分組成召烂,即圖形部分和界面部分。 圖形部分的功能為通過GDI將打印機(jī)參數(shù)傳給Application娃承,同時(shí)將GDI傳過來的數(shù)據(jù)翻譯成打印機(jī)可以解釋的數(shù)據(jù)奏夫,并且發(fā)送到print spooler。其流程結(jié)構(gòu)如下圖:
上面是USER MODE打印數(shù)據(jù)流程历筝,與之相對(duì)的也有KERNEL MODE打印數(shù)據(jù)流程桶蛔,這個(gè)以后再說。 圖形部分內(nèi)部流程的詳細(xì)說明:
其中的DDI接口在DDK幫助文檔中都有詳細(xì)的說明漫谷。 界面部分的功能為提供用戶界面仔雷,用戶可以根據(jù)自己的需要通過該界面設(shè)置不同的打印參數(shù),同時(shí)提供一個(gè)spooler為通知驅(qū)動(dòng)打印相關(guān)的系統(tǒng)事件而能夠調(diào)用的接口。 界面部分函數(shù)的說明:
其中的DDI接口在DDK幫助文檔中都有詳細(xì)的說明碟婆。