• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            怎樣控制驅(qū)動程序的加載順序?

            Posted on 2009-10-25 17:00 S.l.e!ep.¢% 閱讀(650) 評論(0)  編輯 收藏 引用 所屬分類: Windows WDM
            怎樣控制驅(qū)動程序的加載順序?
            2009-10-13 18:05

            設計 Windows NT 時所采用的概念是:第一個提出占有某設備的驅(qū)動程序獲得該設備的所有權(quán)。這個所有權(quán)可以共享,也可以獨占,這由提出占有要求的設備驅(qū)動程序決定。如果設備驅(qū)動程序?qū)υO備提出了獨占占有要求,則由以后加載的設備驅(qū)動程序?qū)υ撛O備嘗試提出的任何占有要求都將失敗。因此,設備驅(qū)動程序的加載順序必須可以由設備驅(qū)動程序的作者進行修改。本文介紹可用于控制設備驅(qū)動程序加載順序的兩種方法。

            更多信息有兩種方法可以用于控制設備驅(qū)動程序的加載順序。這兩種方法都利用了位于 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\...有兩種方法可以用于控制設備驅(qū)動程序的加載順序。這兩種方法都利用了位于 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 的注冊表項。第一種方法是修改 ServiceGroupOrder。第二種方法是根據(jù) GroupOrderList 分配用于決定驅(qū)動程序加載順序的 Tag 值。Tag 值、起始值、類型值和組名稱都位于 HKLM\SYSTEM\CurrentControlSet\Services\<drivername> 項中,必須先添加此項,然后這些值才能在組名稱列表中列出。

            這兩種方法僅對起始值為 0 (SERVICE_BOOT_START) 或 1 (SERVICE_SYSTEM_START) 的設備驅(qū)動程序有效。在所有情況中,起始值為 0 的設備驅(qū)動程序都將在起始值為 1 的所有設備驅(qū)動程序嘗試加載之前先加載。

            方法 1:ServiceGroupOrder
            ServiceGroupOrder 包含按加載順序排列的組名稱列表。下面原樣列出 ServiceGroupOrder 的內(nèi)容:


            SCSI miniport
            port
            Primary disk
            SCSI class
            SCSI CDROM class
            filter
            boot file system
            Base
            Pointer Port
            Keyboard Port
            Pointer Class
            Keyboard Class
            Video Init
            Video
            Video Save
            file system
            Event log
            Streams Drivers
            NDIS
            TDI
            NetBIOSGroup
            SpoolerGroup
            根據(jù) ServiceGroupOrder,“SCSI class”組中的設備驅(qū)動程序?qū)⒃凇癙rimary disk”組中的所有設備驅(qū)動程序之后,及“SCSI CDROM class”組中的設備驅(qū)動程序之前加載。設備驅(qū)動程序所在的組在列表中的位置越高,越先加載它。ServiceGroupOrder 列表將被掃描兩次。首先加載所有起始值為 0 的設備驅(qū)動程序,然后加載所有起始值為 1 的設備驅(qū)動程序。因此,無論起始值為 0 的設備驅(qū)動程序在 ServiceGroupOrder 列表中處于什么位置,它都會在所有起始值為 1 的設備驅(qū)動程序之前加載。

            設備驅(qū)動程序的作者可以編輯 ServiceGroupOrder。這樣就可以在列表中的任意位置創(chuàng)建新組。名為“SAMPLDRV”的 SCSI class 設備驅(qū)動程序就是個很好的示例,因為“SCSIDISK”正在提出占有 SAMPLDRV 需要提出占有的設備,所以 SAMPLDRV 需要在 SCSIDISK 之前加載。下面是 SCSIDISK 的注冊表項:

            \registry\machine\system\currentcontrolset\services\scsidisk
            Type = REG_DWORD 0x00000001
            Start = REG_DWORD 0x00000000
            Group = SCSI class
            ErrorControl = REG_DWORD 0x00000000
            DependOnGroup = REG_MULTI_SZ "SCSI miniport"



            可以將名為“Load Me First”的新組添加到 ServiceGroupOrder 中,并將 SAMPLDRV 設置為 Load Me First 組的成員。下面是經(jīng)過修改的 ServiceGroupOrder:


            SCSI miniport
            port
            Primary disk
            Load Me First
            SCSI class
            SCSI CDROM class
            filter
            boot file system
            .
            .
            .
            下面是 SAMPLDRV 的注冊表項:

            \registry\machine\system\currentcontrolset\services\sampldrv
            Type = REG_DWORD 0x00000001
            Start = REG_DWORD 0x00000000
            Group = Load Me First
            ErrorControl = REG_DWORD 0x00000000
            DependOnGroup = REG_MULTI_SZ "SCSI miniport"



            根據(jù)該配置,SAMPLDRV 將在 SCSIDISK 之前加載。

            方法 2:GroupOrderList 和 Tag 值
            稱為 Tag 的可選項可以包括在設備驅(qū)動程序的注冊表中。Tag 的值可以幫助決定某個組內(nèi)設備驅(qū)動程序的加載順序。加載順序不必按數(shù)字順序排列,相反,可以按照由 GroupOrderList 定義的順序排列。GroupOrderList 中每個組的第一項都是 Tag 值的數(shù)值。接下來是要加載的 Tag 值的數(shù)字順序。組中的設備驅(qū)動程序首先按照其由 GroupOrderList 所定義的 Tag 值進行加載。如果設備驅(qū)動程序沒有 Tag 值,或者 Tag 值不在 GroupOrderList 中,則這些設備驅(qū)動程序?qū)⒃诩虞d具有有效 Tag 值的設備驅(qū)動程序之后進行加載。對于這些設備驅(qū)動程序,無法保證加載順序,只能保證組中的所有設備驅(qū)動程序都在下一組加載之前進行加載。

            下面是 GroupOrderList 的部分輸出:

            \registry\machine\system\currentcontrolset\control\grouporderlist
            Base = REG_BINARY 0d 00 00 00 01 00...
            Extended base = REG_BINARY 04 00 00 00 01 00...
            Filter = REG_BINARY 05 00 00 00 01 00...
            Keyboard Class = REG_BINARY 01 00 00 00 01 00...
            Keyboard Port = REG_BINARY 01 00 00 00 01 00...
            Ndis = REG_BINARY 09 00 00 00 01 00...
            Pointer Class = REG_BINARY 01 00 00 00 01 00...
            Pointer Port = REG_BINARY 03 00 00 00 01 00...
            .
            .
            .



            注意:沒有為 SCSI class 定義值。并非每個組都出現(xiàn)在 GroupOrderList 中。如果 GroupOrderList 中沒有某個組,則無法保證組內(nèi)設備驅(qū)動程序的加載順序。

            與 ServiceGroupOrder 一樣,GroupOrderList 也可以修改。以上示例可以添加 SCSI class 的 Tag 項:

            \registry\machine\system\currentcontrolset\control\grouporderlist
            SCSI class = REG_BINARY 02 00 00 00 02 00 00 00 01 00 00 00
            Base = REG_BINARY 0d 00 00 00 01 00...
            Extended base = REG_BINARY 04 00 00 00 01 00...
            .
            .
            .



            在這個示例中,SCSI class 組識別出兩個 Tag 值:00000001 和 00000002。Tag 值的加載順序是先加載 00000002,其次是 00000001。如果 SAMPLDRV 在 SCSI class 組中(與 SCSIDISK 相同),則任一 Tag 值都可以保證 SAMPLDRV 在 SCSIDISK 之前加載,因為 SCSIDISK 沒有 Tag 值,而沒有作標記的驅(qū)動程序?qū)⒃诮M中最后一個加載。

            如果由于某種原因,SCSIDISK 分配的 Tag 值是 0x00000001,則當 SAMPLDRV 分配的 Tag 值是 00000002 時,SAMPLDRV 在 SCSIDISK 之前加載:

            \registry\machine\system\currentcontrolset\services\sampldrv
            Type = REG_DWORD 0x00000001
            Start = REG_DWORD 0x00000000
            Group = SCSI class
            ErrorControl = REG_DWORD 0x00000000
            DependOnGroup = REG_MULTI_SZ "SCSI miniport"
            Tag = REG_DWORD 0x00000002
            亚洲级αV无码毛片久久精品| 色欲综合久久中文字幕网 | 色婷婷狠狠久久综合五月| 伊人久久大香线蕉综合5g | 国产成人精品久久一区二区三区av | 亚洲国产精品一区二区久久hs| 天堂无码久久综合东京热| 亚洲欧美久久久久9999| 97久久国产露脸精品国产| 久久99精品国产麻豆婷婷| 久久亚洲精品国产精品婷婷| 九九精品99久久久香蕉| 久久99精品久久久久久hb无码 | 色综合久久久久无码专区| 91久久婷婷国产综合精品青草 | 97视频久久久| 国产精品禁18久久久夂久| www.久久热.com| 亚洲性久久久影院| 久久综合欧美成人| 精品伊人久久久| 久久久久免费视频| 国产精品久久久久9999高清| 波多野结衣中文字幕久久| 久久久精品人妻无码专区不卡 | 久久久久亚洲精品男人的天堂| 天堂久久天堂AV色综合 | 久久久久99这里有精品10| 99久久精品免费看国产| 久久国产精品99精品国产| 丁香久久婷婷国产午夜视频| 久久天天躁狠狠躁夜夜av浪潮| 久久精品aⅴ无码中文字字幕不卡| 国产人久久人人人人爽| 久久免费视频一区| 久久久国产精华液| 久久久久亚洲av毛片大| 91久久精品视频| 国产高潮国产高潮久久久91 | 久久青青草原亚洲av无码app| 亚洲精品乱码久久久久久蜜桃图片|