久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    驅(qū)動編寫的全過程(下)

     iceberg_horn 2010-03-17
     
    查看文章
     
    標(biāo)題:驅(qū)動編寫的全過程(下)
    2009-07-20 17:46:05
     

    ☆ 編寫hello.inf文件

    ; ------------------------------------------------------------------------

    ;
    ; Copyright to satisfy the CHKINF utility
    ;

    [Version]
    Signature           = "$Windows NT$"
    Class               = %ClassName%
    ;
    ; For a new device setup class, the INF must specify a newly generated
    ; ClassGuid value
    ;
    ; 用\WINDDK\2600.1106\tools\other\i386\guidgen.exe生成
    ;
    ClassGuid           = {EABDB9DF-F09D-44ba-81E5-551C2ABC1FA9}
    Provider            = %INFCreator%
    DriverVer           = 06/10/2003,1.00.1993.9

    ; ------------------------------------------------------------------------

    [ClassInstall32.ntx86]
    AddReg              = ClassInstall32Reg

    [ClassInstall32Reg]
    HKR,,,,%ClassName%

    ; ------------------------------------------------------------------------

    [Manufacturer]
    %INFCreator%        = HelloWorldSection

    ; ------------------------------------------------------------------------

    [HelloWorldSection]
    %DESCRIPTION%       = DDInstall,*HWD1993

    ; ------------------------------------------------------------------------

    [SourceDisksNames.x86]
    1                   = %DiskDescription%,,,

    [SourceDisksFiles.x86]
    hello.sys           = 1

    [DestinationDirs]
    DefaultDestDir      = 10,system32\drivers
    FileList            = 10,system32\drivers

    ; ------------------------------------------------------------------------

    [DDInstall.ntx86]
    Copyfiles           = FileList

    [FileList]
    hello.sys,,,0x00000002

    ; ------------------------------------------------------------------------

    [DDInstall.ntx86.Services]
    AddService          = HelloWorld,0x00000002,ServiceInstall

    [ServiceInstall]
    DisplayName         = %FriendlyName%                   ; friendly name
    ServiceType         = 0x00000001                       ; SERVICE_KERNEL_DRIVER
    StartType           = 0x3                              ; SERVICE_DEMAND_START
    ErrorControl        = 0x1                              ; SERVICE_ERROR_NORMAL
    ServiceBinary       = %10%\system32\drivers\hello.sys

    ; ------------------------------------------------------------------------

    [DDInstall.ntx86.HW]
    AddReg              = DDInstallRegHW

    [DDInstallRegHW]
    HKR,,HelloWorldInfo,,%DESCRIPTION%

    ; ------------------------------------------------------------------------

    [Strings]
    ClassName           = "HelloWorldClass"
    INFCreator          = "The Hello World Software"
    DESCRIPTION         = "The Hello World Driver"
    DiskDescription     = "The Hello World Software Disk"
    FriendlyName        = "Hello World"

    ; ------------------------------------------------------------------------

    DDK文檔詳細(xì)解釋了如何編寫INF文件。不過個人覺得DDK文檔適合在閱讀一份現(xiàn)成的
    INF文件時當(dāng)作手冊查看。如果妄圖在沒有樣板INF文件的情況下通過查看DDK文檔來
    從頭寫一份新INF文件,至少初學(xué)者不要有這樣的念頭。為了寫這么點(diǎn)破爛,我費(fèi)勁
    壞了。

    用\WINDDK\2600.1106\tools\other\i386\guidgen.exe生成ClassGuid。

    執(zhí)行如下命令對hello.inf文件提前進(jìn)行一些檢查:

    \WINDDK\2600.1106\tools\chkinf> chkinf.bat hello.inf

    在\WINDDK\2600.1106\tools\chkinf\htm\目錄里生成分析報(bào)告:

    --------------------------------------------------------------------------
    Line 7: (E22.1.1081) Directive: CatalogFile required (and must not be blank) in section [Version] for WHQL digital signature.
    Line 9: (E22.1.1310) Class HelloWorldClass (ClassGUID {EABDB9DF-F09D-44ba-81E5-551C2ABC1FA9}) is unrecognized.
    --------------------------------------------------------------------------

    第一個錯誤因?yàn)槲覜]有指定"CatalogFile.ntx86 = ...",目前階段也沒法指定。第
    二個錯誤因?yàn)镃lassGuid是新創(chuàng)建的。

    剛開始寫hello.inf文件時,分析報(bào)告里還有不少錯誤、警告信息。應(yīng)該在某注釋行
    中包含"Copyright"單詞,否則分析報(bào)告里有"No Copyright information found."警
    告信息。

    知道為什么要安裝ActivePerl 5.6.1么,chkinf.bat需要Perl解釋器的支持!

    Walter Oney的光盤([1])需要安裝,他的安裝過程會在這里增加相關(guān)內(nèi)容:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class

    不清楚他這么做的好處何在,說實(shí)話,挺煩這手的。不喜歡安裝這些人提供的隨書光
    盤,它們使我喪失了深入了解問題本質(zhì)的機(jī)會,這也是我沒有安裝DriverStudio中其
    它開發(fā)工具的原因。由于源代碼已經(jīng)在那里,我沒有執(zhí)行setup.exe,只是直接編譯
    并試圖安裝其中的某些例子程序:

    > fastinst.exe xxx.inf

    結(jié)果得到一個對話框式的錯誤提示,ERROR_SECTION_NOTFOUND。setupapi.log中看到:

    --------------------------------------------------------------------------
    找不到 [ClassInstall32] 段。
    --------------------------------------------------------------------------

    chkinf.bat xxx.inf的分析報(bào)告里有相應(yīng)警告信息:

    --------------------------------------------------------------------------
    Custom defined Classes should have a [ClassInstall32] section.
    --------------------------------------------------------------------------

    最初的hello.inf沒有下面這部分內(nèi)容,自然會遇上同樣的問題:

    --------------------------------------------------------------------------
    [ClassInstall32.ntx86]
    AddReg              = ClassInstall32Reg

    [ClassInstall32Reg]
    HKR,,,,%ClassName%
    --------------------------------------------------------------------------

    此外,注意這一節(jié):

    --------------------------------------------------------------------------
    [DDInstall.ntx86]
    Copyfiles           = FileList
    --------------------------------------------------------------------------

    剛開始多根據(jù)DDK文檔寫成"CopyFiles = ...",結(jié)果在\windows\setupapi.log中看
    到:

    --------------------------------------------------------------------------
    在 "hello.inf" 的 [FileList] 段分析 "Copyfiles" 失敗。 錯誤 0xe0000102: 在 INF 中找不到所需的行。
    --------------------------------------------------------------------------

    這個錯誤導(dǎo)致hello.sys未被復(fù)制到\windows\system32\drivers\目錄下。按大小寫
    敏感方式修改成現(xiàn)在使用的樣子就解決了。如果用"fastinst.exe hello.inf"進(jìn)行安
    裝,不會遇到該問題,我懷疑這是MS的一個小BUG。

    經(jīng)驗(yàn)就是,安裝過程出了問題先看setupapi.log文件。

    順便提一下,DDK提供了GenInf工具,這是一個垃圾工具,即使對初學(xué)者也如此。測
    試使用了一次,強(qiáng)烈建議大家當(dāng)它不存在。Art Baker委婉地表述了類似觀點(diǎn)([3])。

    ☆ 安裝hello.inf文件

    Walter Oney的fastinst.exe果然便捷,不過個人建議在試圖了解更多細(xì)節(jié)的時候還
    是少依賴它為妙。

    控制面板->添加硬件->是,硬件已聯(lián)接好->添加新的硬件設(shè)備->
    安裝我手動從列表選擇的硬件(高級)->顯示所有設(shè)備->從磁盤安裝->完成

    由于hello.c最后故意失敗返回,安裝雖然完成,但加載驅(qū)動必然失敗。在設(shè)備管理
    器中可以看到黃色驚嘆號,表示無法成功加載驅(qū)動程序。

    這次安裝過程導(dǎo)致如下一些動作:

    1)

    --------------------------------------------------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EABDB9DF-F09D-44BA-81E5-551C2ABC1FA9}]
    "Class"="HelloWorldClass"
    @="HelloWorldClass"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EABDB9DF-F09D-44BA-81E5-551C2ABC1FA9}\0000]
    "InfPath"="oem5.inf"
    "InfSection"="DDInstall"
    "InfSectionExt"=".NTx86"
    "ProviderName"="The Hello World Software"
    "DriverDateData"=hex:00,40,43,3c,e3,2e,c3,01
    "DriverDate"="6-10-2003"
    "DriverVersion"="1.0.1993.9"
    "MatchingDeviceId"="*hwd1993"
    "DriverDesc"="The Hello World Driver"

    --------------------------------------------------------------------------

    2)

    --------------------------------------------------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN]

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN\0000]
    "ClassGUID"="{EABDB9DF-F09D-44BA-81E5-551C2ABC1FA9}"
    "ConfigFlags"=dword:00000004
    "Driver"="{EABDB9DF-F09D-44BA-81E5-551C2ABC1FA9}\\0000"
    "Class"="HelloWorldClass"
    "Mfg"="The Hello World Software"
    "HardwareID"=hex(7):2a,00,68,00,77,00,64,00,31,00,39,00,39,00,33,00,00,00,00,\
    00
    "Service"="HelloWorld"
    "DeviceDesc"="The Hello World Driver"
    "Capabilities"=dword:00000000

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN\0000\Device Parameters]
    "HelloWorldInfo"="The Hello World Driver"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN\0000\LogConf]

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN\0000\Control]

    --------------------------------------------------------------------------

    3)

    --------------------------------------------------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HelloWorld]
    "Type"=dword:00000001
    "Start"=dword:00000003
    "ErrorControl"=dword:00000001
    "ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\
    72,00,69,00,76,00,65,00,72,00,73,00,5c,00,68,00,65,00,6c,00,6c,00,6f,00,2e,\
    00,73,00,79,00,73,00,00,00
    "DisplayName"="Hello World"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HelloWorld\Security]
    "Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02,\
    00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
    00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\
    05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
    20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,\
    00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,\
    00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HelloWorld\Enum]
    "0"="ROOT\\UNKNOWN\\0000"
    "Count"=dword:00000001
    "NextInstance"=dword:00000001
    "INITSTARTFAILED"=dword:00000001

    --------------------------------------------------------------------------

    4) 復(fù)制hello.sys到\windows\system32\drivers\目錄下。

    在setupapi.log中可以看到如下內(nèi)容:

    --------------------------------------------------------------------------
    [2003/06/11 14:06:31 1780.404]
    #-198 處理的命令行: "\system32\rundll32.exe" shell32.dll,Control_RunDLL "\system32\hdwwiz.cpl",添加硬件
    #I140 正在安裝設(shè)備類別: "HelloWorldClass" {EABDB9DF-F09D-44ba-81E5-551C2ABC1FA9}。
    #I141 類別安裝已結(jié)束,沒有出錯。
    [2003/06/11 14:06:32 1780.407 Driver Install]
    #-124 正在做“僅復(fù)制”安裝 "ROOT\UNKNOWN\0000"。
    #-198 處理的命令行: "\system32\rundll32.exe" shell32.dll,Control_RunDLL "\system32\hdwwiz.cpl",添加硬件
    #E360 驅(qū)動程序 "The Hello World Driver" 的一個未經(jīng)過簽署或簽署不正確的文件 "hello.inf" 將得到安裝(策略=忽略)。 錯誤 0xe000022f: 第三方 INF 不包含數(shù)字簽名信息。
    #-024 正在將文件 "hello.sys" 復(fù)制到 "\system32\drivers\hello.sys"。
    #E360 驅(qū)動程序 "The Hello World Driver" 的一個未經(jīng)過簽署或簽署不正確的文件 "hello.inf" 將得到安裝(策略=忽略)。 錯誤 0xe000022f: 第三方 INF 不包含數(shù)字簽名信息。
    #-166 設(shè)備安裝函數(shù): DIF_REGISTER_COINSTALLERS。
    #I056 注冊了共同安裝程序。
    #-166 設(shè)備安裝函數(shù): DIF_INSTALLINTERFACES。
    #-011 正在從 "hello.inf" 安裝段 [DDInstall.NTx86.Interfaces]。
    #I054 安裝接口。
    #-166 設(shè)備安裝函數(shù): DIF_INSTALLDEVICE。
    #I123 進(jìn)行 "ROOT\UNKNOWN\0000" 的完整安裝。
    #E360 驅(qū)動程序 "The Hello World Driver" 的一個未經(jīng)過簽署或簽署不正確的文件 "hello.inf" 將得到安裝(策略=忽略)。 錯誤 0xe000022f: 第三方 INF 不包含數(shù)字簽名信息。
    #I163 設(shè)備未開始: 設(shè)備有問題: 0x25: CM_PROB_FAILED_DRIVER_ENTRY.
    #I121 "ROOT\UNKNOWN\0000" 的設(shè)備安裝成功完成。
    --------------------------------------------------------------------------

    如果在資源管理器中右鍵選中hello.inf,點(diǎn)擊菜單里的"安裝",不知為何,毫無動
    靜。注冊表、drivers目錄、setupapi.log均無變化,活見鬼了。目前我還不懂這里
    的竅道,以后再來理解。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet只是到ControlSet<nnn>的符號鏈接,
    HKEY_LOCAL_MACHINE\SYSTEM\Select用于具體確定是到誰的符號鏈接。啟動時F8菜單
    有一個選項(xiàng)對應(yīng)最近一次成功引導(dǎo)所用設(shè)置,就是由LastKnownGood決定的。參看[4]
    的5.2.6小節(jié)。

    ☆ 卸載hello.sys及相關(guān)設(shè)置

    1)

    手工卸載很簡單,在注冊表中刪除上述三處內(nèi)容,在drivers目錄中刪除hello.sys。

    2)

    也可以執(zhí)行"sc delete HelloWorld":

    > sc delete HelloWorld
    [SC] DeleteService SUCCESS

    設(shè)備管理器中倒是看不到相應(yīng)顯示了。注冊表中殘留了一點(diǎn)內(nèi)容:

    --------------------------------------------------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EABDB9DF-F09D-44BA-81E5-551C2ABC1FA9}]
    "Class"="HelloWorldClass"
    @="HelloWorldClass"

    --------------------------------------------------------------------------

    并且drivers\hello.sys也未刪除。

    3)

    還有一種方式,通過設(shè)備管理器卸載,比"sc delete HelloWorld"干得活還要少些,
    注冊表中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HelloWorld"
    還在。

    個人建議用第二種方式,結(jié)合一些手動操作。

    這樣仔細(xì)地手工折騰一趟之后,想必對驅(qū)動的安裝/卸載有了初步認(rèn)識吧。反正我是
    感覺學(xué)到不少東西。

    ☆ 察看KdPrint輸出

    從Unix轉(zhuǎn)過來的兄弟們不要幻想有uprintf()這樣的內(nèi)核函數(shù)可用。只有類似Linux下
    printk()的KdPrint輸出。有很多辦法察看這個輸出,這次我用DebugView([5])。在
    Capture菜單里勾中Capture kernel、Pass-Through、Capture Events即可。扔到一
    邊別理它。

    添加硬件過程最終會嘗試加載hello.sys,DriverEntry()被調(diào)用,在DebugView中可
    以看到KdPrint輸出,確認(rèn)SEH起作用了。

    安裝結(jié)束后如想再次進(jìn)入DriverEntry(),可以執(zhí)行"net start HelloWorld"。

    ☆ 使用DriverMonitor

    Compuware DriverStudio Release 2.7中提供了DriverMonitor。在File菜單里選擇
    "Open Driver"打開hello.sys,選擇"Start Driver"調(diào)用DriverEntry(),直接看到
    KdPrint輸出信息。如果同時啟動了DebugView,兩邊都可看到,此時可以順帶加強(qiáng)對
    Pass-Through設(shè)置的理解。

    好處在于不必編寫hello.inf就可測試hello.sys。"Open Driver"時會臨時在注冊表
    中設(shè)置一些內(nèi)容:

    --------------------------------------------------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Hello]
    "Type"=dword:00000001
    "Start"=dword:00000003
    "ErrorControl"=dword:00000001
    "ImagePath"=hex(2):5c,00,3f,00,3f,00,5c,00,63,00,3a,00,5c,00,6f,00,6e,00,6c,00,\
    79,00,74,00,65,00,6d,00,70,00,5c,00,68,00,65,00,6c,00,6c,00,6f,00,5c,00,68,\
    00,65,00,6c,00,6c,00,6f,00,2e,00,73,00,79,00,73,00,00,00
    "DisplayName"="Hello"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Hello\Security]
    "Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02,\
    00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
    00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\
    05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
    20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,\
    00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,\
    00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Hello\Enum]
    "Count"=dword:00000000
    "NextInstance"=dword:00000000
    "INITSTARTFAILED"=dword:00000001

    --------------------------------------------------------------------------

    因此可以"net start Hello"激發(fā)KdPrint輸出。在File菜單里選擇"Remove Service
    Entry"將刪除上述內(nèi)容,退出DriverMonitor前應(yīng)該執(zhí)行該操作。

    DriverMonitor不會做其它操作,比如不會復(fù)制hello.sys到drivers目錄下,也不影
    響設(shè)備管理器。

    好,我這次目的達(dá)到了,現(xiàn)在對編譯、安裝、卸載Windows驅(qū)動有了感性認(rèn)識,順帶
    學(xué)習(xí)了一些工具的使用,希望對你也有所幫助。下次就不知道什么時候開始第三次學(xué)
    習(xí)了,正經(jīng)工作是編寫掃描器插件以及Unix漏洞跟蹤分析,想學(xué)點(diǎn)Windows不容易,
    還好不是太苦悶。

    ☆ 參考資源

    [ 1] <<Programming the Microsoft Windows Driver Model>> - Walter Oney

    [ 2] <<Windows NT Device Driver Development>> - P. Viscarola, W. Mason

    [ 3] <<The Windows 2000 Device Driver Book, Second Edition>> - Art Baker, Jerry Lozano

    [ 4] <<Inside Microsoft Windows 2000 Third Edition>> - David A. Solomon, Mark E. Russinovich

    [ 5] DebugView
         http://www.

     


       cygwin (夢醒⊙崇尚暴力) 于 (Wed Jun 11 17:01:07 2003) 提到:


    【 在 soycola (醬油可樂) 的大作中提到: 】
    : 標(biāo) 題: Re: 學(xué)習(xí)寫一個Hello World驅(qū)動
    : 發(fā)信站: BBS 水木清華站 (Wed Jun 11 16:15:09 2003), 轉(zhuǎn)信
    :
    : 這個是wdm版的hello world,這個過程掩蓋了很多實(shí)質(zhì)問題。
    :
    : 我的理解wdm為了支持設(shè)備的即插即用引入了復(fù)雜的驅(qū)動安裝
    : 過程,即必須編寫inf文件并使用新設(shè)備向?qū)В从^nt驅(qū)動,
    : 只要調(diào)用幾個service control manager的api就可以完成安裝,
    : 究其本質(zhì)原因,應(yīng)當(dāng)是nt4的driver-centered的驅(qū)動模型和
    : win 2000的device centered驅(qū)動模型之間的區(qū)別。nt4的驅(qū)動
    : 模型說白了就是linux采用的模型,nt4的net start就是linux的
    : 的insmod,nt4的net stop就是linux的rmmod。當(dāng)然nt4在執(zhí)行
    : net start之前必須執(zhí)行一個輕量級的安裝工作(主要是createservice
    : ),而這個createservice的過程在linux下面只是將驅(qū)動的.o
    : 文件拷貝到相關(guān)路徑中即可(我自己的理解,請小四兄指正)。
    : 當(dāng)然nt4的這個‘服務(wù)式’驅(qū)動模型和linux的驅(qū)動模型也有區(qū)別,
    : nt4中的服務(wù)可以是用戶態(tài)的,換句話說,nt4的服務(wù)約等于
    : linux的核心模塊+linux的daemon程序,而wdm驅(qū)動則約等于
    : nt4核心態(tài)驅(qū)動+pnp支持+電源管理支持。
    你所說的nt4方案也可以2k下用啊
    只要打開service manager
    加入服務(wù),啟動服務(wù)
    就搞定了

    :
    : 所以,如果說nt4的驅(qū)動模式更接近于linux,則那些ms fans不妨可以
    : 認(rèn)為windows的wdm比linux先進(jìn)。
    :
    : btw,對于小四兄的應(yīng)用,我想大部分情況下應(yīng)該只是一個nt4核心
    : 態(tài)驅(qū)動就夠了,不需要wdm支持。對這種程序,寫一個hello
    : world其實(shí)更簡單。我一會兒轉(zhuǎn)一個過來大家審查一下。
    : 【 在 hellguard (小四★北渡北漢江⊙) 的大作中提到: 】
    : : 學(xué)習(xí)筆記,沒有技術(shù)含量,高手勿Ctrl-F了
    : : 日期: 2003-06-10 21:50
    : : 更新:
    : : --------------------------------------------------------------------------
    : : 目錄:
    : :     ☆ 概述
    : :     ☆ 編寫hello.c文件
    : :     ☆ 編寫dirs文件
    : :     ☆ 編寫sources文件
    : :     ☆ 編寫makefile文件
    : :     ☆ 編譯產(chǎn)生hello.sys文件
    : : ...................
    :
    : --
    :
    : ※ 來源:·BBS 水木清華站 smth.org·[FROM: 61.51.240.205]

     

     

       cygwin (夢醒⊙崇尚暴力) 于 (Wed Jun 11 17:12:01 2003) 提到:

    這我就不懂了
    filemon的那個驅(qū)動不是wdm的?

    【 在 soycola (醬油可樂) 的大作中提到: 】
    : wdm驅(qū)動這樣做是不行的,嘿嘿,wdm驅(qū)動都是按需加載的,有設(shè)備才
    : 加載(所以才能實(shí)現(xiàn)pnp),所以它那個StartupType統(tǒng)統(tǒng)是3:demand_start
    : ,除了一些啟動時需要加載的驅(qū)動以外。2k為了兼容nt,wdm驅(qū)動仍然
    : 保留了服務(wù)這個概念,但是由于我在上面說的原因,我們應(yīng)當(dāng)認(rèn)識到
    : 服務(wù)這個driver center的東西本質(zhì)上和wdm這種device centered的架構(gòu)
    : 是不甚融洽的。

     

     

       cygwin (夢醒⊙崇尚暴力) 于 (Wed Jun 11 17:21:35 2003) 提到:

    我只寫過一回驅(qū)動
    所以對這些了解不多
    剛才在driverdev找kmd,
    發(fā)現(xiàn)只有一篇文章,還是提問的

    驅(qū)動除了vxd(win9x),wdm,kmd還有沒有其它類型?
    而wdm與kmd又有何居別?

    【 在 soycola (醬油可樂) 的大作中提到: 】
    : 小四所說‘想說hello不容易’是因?yàn)閗md的驅(qū)動編譯環(huán)境實(shí)在
    : 復(fù)雜,相信每個寫過驅(qū)動的人都有體會,至于安裝復(fù)雜還在其次。
    : 我回的帖子主要是兩個意思,1是可以用那個極簡單的makefile解決
    : 編譯復(fù)雜的問題(ddk的那個build程序是微軟自己用來編譯win2k
    : 的,所以考慮了很多細(xì)節(jié),至于我們用它則屬于牛刀宰雞),2是
    : 可以回避復(fù)雜的安裝,直接用nt4的那個方案,因?yàn)樾∷挠玫某绦?br>: 估計(jì)只是一個KMD。
    反正我知道它的這個程序肯定可以用nt4的那種方式加載。

     

     

       hellguard (小四★北渡北漢江⊙) 于 (Wed Jun 11 17:46:17 2003) 提到:


    【 在 soycola (醬油可樂) 的大作中提到: 】
    > 我想大部分情況下應(yīng)該只是一個nt4核心
    > 態(tài)驅(qū)動就夠了,不需要wdm支持。對這種程序,寫一個hello
    > world其實(shí)更簡單。我一會兒轉(zhuǎn)一個過來大家審查一下。

    這個我明白,的確是不需要WDM,不過是順手逮著學(xué)學(xué)。那我就等著學(xué)
    你那個例子啦。主要是市面上的書直奔硬件而去,我想找個Hello World
    而不得,只好自己瞎折騰一回,見笑見笑。

    Linux的驅(qū)動模型我并不熟悉更多,只是從前寫過LLKM而已。我所
    接觸的FKLD、SLKM都是偽設(shè)備驅(qū)動,真要討論涉及物理的驅(qū)動,我
    一點(diǎn)經(jīng)驗(yàn)都沒有的。

     

     

       hellguard (小四★北渡北漢江⊙) 于 (Wed Jun 11 17:47:57 2003) 提到:

    好,多謝,我回頭學(xué)學(xué)

    【 在 soycola (醬油可樂) 的大作中提到: 】
    : 諾,就是這個,很久以前在driverdev貼的,自己挺臭美的所以就轉(zhuǎn)過來了呵呵。
    : /*++
    :         hello.c
    : --*/
    : #define _X86_
    : #include <ddk/ntddk.h>
    : #pragma comment(linker, "/entry:DriverEntry /subsystem:native /base:0x10000 /driver")
    : #pragma comment(lib, "wdm.lib")
    : VOID _stdcall Unload(IN PDRIVER_OBJECT DriverObject)
    : {
    :         DbgPrint("Bye bye!\n");
    : ...................

     


       hellguard (小四★北渡北漢江⊙) 于 (Wed Jun 11 17:56:00 2003) 提到:

    發(fā)現(xiàn)聽你講這些挺省事的啊,雖然不搞這些東西,聽你講講
    也有收獲,

    上次你們提到

    A New Interface for Driver Writing -- The Windows Driver Framework

    在OSR主站上有這篇,

    http://www./article.cfm?id=212

    我轉(zhuǎn)在Driver版了,已經(jīng)換行處理過

    【 在 soycola (醬油可樂) 的大作中提到: 】
    : 98就不說了。只說wdm和kmd,我能想到的最精確的描述就是:
    : KMD(kernel mode driver)是‘驅(qū)動程序?yàn)橹行?#8217;驅(qū)動架構(gòu)
    : 下的產(chǎn)物WDM驅(qū)動是設(shè)備中心的驅(qū)動架構(gòu)下的產(chǎn)物。不過這么
    : 說可能過于概括。在KMD時代,驅(qū)動程序處于主導(dǎo)地位,發(fā)現(xiàn)
    : 并枚舉總線和設(shè)備、找到或分配設(shè)備的資源占用情況、創(chuàng)建
    : 設(shè)備對象并提供環(huán)境子系統(tǒng)可以訪問的符號鏈接等,都是驅(qū)動
    : 程序的工作。驅(qū)動告訴os說這里有個設(shè)備,驅(qū)動告訴os說這個
    : 設(shè)備的io、mem、dma、irq,驅(qū)動創(chuàng)建一個設(shè)備對象然后扔給os說
    : 給你個設(shè)備,然后os才知道有個設(shè)備;
    : 而在WDM時代就不一樣了,設(shè)備翻身做了主人,在總線驅(qū)動和控
    : 制器驅(qū)動(注1)的幫助下,os自己就知道當(dāng)前計(jì)算機(jī)上鏈接有哪些設(shè)
    : ...................

     


       netfun (netfun) 于 (Tue Jun 17 15:41:30 2003) 提到:

    WDM是Microsoft為了統(tǒng)一9x系列與NT系列而引入的驅(qū)動模型,實(shí)際上pnp與power只是
    她的兩個需求而已,這可以從Windows Driver Model的命名可以看到。
    在NT系列中WDM構(gòu)建于NT Legacy KMD(Kernel Mode Driver NT4)的基礎(chǔ)上,并不是不
    甚融洽的。而正是由于PNP與Power的引入才使Driver的安裝發(fā)生了根本的變革,使其復(fù)雜
    的多,但是pnp driver的安裝仍是基于最基本的services的概念,正是由于安裝的復(fù)雜,
    microsoft引入了setupapi.dll用于這部分任務(wù),而setupapi.dll則是對services的封
    裝,當(dāng)然實(shí)際上整個過程是非常復(fù)雜的,從內(nèi)核態(tài)引入root bus(\driver\pnpmanager
    這是一個ntoskrnl.exe buildin driver)到device node等等。這一切的基礎(chǔ)都是KMD。
    Microsoft并沒有鄙棄KMD,WDM是KMD發(fā)展而來的。

    【 在 soycola (醬油可樂) 的大作中提到: 】
    : wdm驅(qū)動這樣做是不行的,嘿嘿,wdm驅(qū)動都是按需加載的,有設(shè)備才
    : 加載(所以才能實(shí)現(xiàn)pnp),所以它那個StartupType統(tǒng)統(tǒng)是3:demand_start
    : ,除了一些啟動時需要加載的驅(qū)動以外。2k為了兼容nt,wdm驅(qū)動仍然
    : 保留了服務(wù)這個概念,但是由于我在上面說的原因,我們應(yīng)當(dāng)認(rèn)識到
    : 服務(wù)這個driver center的東西本質(zhì)上和wdm這種device centered的架構(gòu)
    : 是不甚融洽的。


    本文引用通告地址:http://mayer.spaces.eepw.com.cn/articles/trackback/item/60315

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 伊人久久精品无码麻豆一区| 亚洲色大成永久WW网站| 亚洲色大成网站WWW永久麻豆| 亚洲旡码欧美大片| 亚洲色欲色欲WWW成人网| 国产精品中文字幕视频| 东京一本一道一二三区| 欧美日韩中文国产一区发布| 国产精品中文av专线| 曰韩亚洲AV人人夜夜澡人人爽| 99久久99这里只有免费费精品| 国产成人精彩在线视频| 人人妻人人添人人爽欧美一区| 人妻中文字幕精品一页| 久久精品国产亚洲夜色AV网站| 中文字幕在线精品人妻| 大帝AV在线一区二区三区| 亚洲一区二区三区啪啪| 成人免费看片又大又黄| 国产成人亚洲综合图区| 亚洲中文字幕无线无码毛片| 国内精品视频一区二区三区八戒 | 欧美人妻一区二区三区| 午夜成人无码免费看网站| 国产乱子伦一区二区三区| 亚洲欧美卡通另类丝袜美腿| 好男人官网资源在线观看| 50岁熟妇的呻吟声对白| 在国产线视频A在线视频| 亚洲AV永久无码精品一区二区国产| 成人无码区免费视频| 国内精品久久久久影院网站| 国产精品麻豆成人AV电影艾秋 | 99精品国产中文字幕| 亚洲色偷偷色噜噜狠狠99| 国产综合久久99久久| 精品成人乱色一区二区 | 国产精品中文第一字幕| 久久精品国产亚洲夜色AV网站 | 国产小受被做到哭咬床单GV| 色噜噜亚洲男人的天堂|