青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 8  文章 - 4  trackbacks - 0
首先是參數說明宏。參數說明宏一般都是空宏,最常見的是IN和OUT。其實定義很簡單,如下所示:
#define IN
#define OUT
        這樣一來,IN和OUT就被定義成了空。無論出現在代碼中的任何地方,對代碼都不會有什么實質的影響。在WDK的代碼中,用來作為函數的說明。IN表示這個參數用于輸入;OUT表示這個參數用來返回結果。比如下面的例子:
NTSTATUS
  ZwQueryInformationFile(
    IN HANDLE  FileHandle,
    OUT PIO_STATUS_BLOCK  IoStatusBlock,
    OUT PVOID  FileInformation,
    IN ULONG  Length,
    IN FILE_INFORMATION_CLASS  FileInformationClass
    );
        IN和OUT是比較傳統的參數說明宏。在WDK中到處可見更復雜的參數說明宏,比如下面的例子:
VOID
NdisProtStatus(
    IN NDIS_HANDLE                          ProtocolBindingContext,
    IN NDIS_STATUS                          GeneralStatus,
    __in_bcount(StatusBufferSize) IN PVOID  StatusBuffer,
    IN UINT                                 StatusBufferSize
    )

        其中的__in_bcount不但說明參數StatusBuffer是一個輸入參數,而且說明了StatusBuffer作為一個緩沖區,它的字節長度被另一個參數StatusBufferSize所指定。讀者再見到類似的說明宏,就以字面意思理解即可。

        然后是指定函數位置的預編譯指令。比如下面的例子:
NTSTATUS
ZwQueryInformationFile(
    IN HANDLE  FileHandle,
    OUT PIO_STATUS_BLOCK  IoStatusBlock,
    OUT PVOID  FileInformation,
    IN ULONG  Length,
    IN FILE_INFORMATION_CLASS  FileInformationClass
    );
        IN和OUT是比較傳統的參數說明宏。在WDK中到處可見更復雜的參數說明宏,比如下面的例子:
VOID
NdisProtStatus(
    IN NDIS_HANDLE                          ProtocolBindingContext,
    IN NDIS_STATUS                          GeneralStatus,
    __in_bcount(StatusBufferSize) IN PVOID  StatusBuffer,
    IN UINT                                 StatusBufferSize
    )
         其中的__in_bcount不但說明參數StatusBuffer是一個輸入參數,而且說明了StatusBuffer作為一個緩沖區,它的字節長度被另一個參數StatusBufferSize所指定。讀者再見到類似的說明宏,就以字面意思理解即可。

        然后是指定函數位置的預編譯指令。比如下面的例子:
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, NdisProtUnload)
#pragma alloc_text(PAGE, NdisProtOpen)
#pragma alloc_text(PAGE, NdisProtClose)
#pragma alloc_text

        這個宏僅僅用來指定某個函數的可執行代碼在編譯出來后在sys文件中的位置。內核模塊編譯出來之后是一個PE格式的sys文件,這個文件的代碼段(text段)中有不同的節(Section),不同的節被加載到內存中之后處理情況不同。讀者需要關心的主要是3種節:INIT節的特點是在初始化完畢之后就被釋放。也就是說,就不再占用內存空間了。PAGE節的特點是位于可以進行分頁交換的內存空間,這些空間在內存緊張時可以被交換到硬盤上以節省內存。如果未用上述的預編譯指令處理,則代碼默認位于PAGELK節,加載后位于不可分頁交換的內存空間中。

        函數DriverEntry顯然只需要在初始化階段執行一次,因此這個函數一般都用#pragma alloc_text(INIT, DriverEntry)使之位于初始化后立刻釋放的空間內。為了節約內存,可以把很多函數放在PAGE節中。但是要注意:放在PAGE節中的函數不可以在Dispatch級調用,因為這種函數的調用可能誘發缺頁中斷。但是缺頁中斷處理不能在Dispatch級完成。為此,一般都用一個宏PAGED_CODE()進行測試。如果發現當前中斷級為Dispatch級,則程序直接報異常,讓程序員及早發現。示例如下:
#pragma alloc_text(PAGE, SfAttachToMountedDevice)
……
NTSTATUS
SfAttachToMountedDevice (
    IN PDEVICE_OBJECT DeviceObject,
    IN PDEVICE_OBJECT SFilterDeviceObject
    )
{       
    PSFILTER_DEVICE_EXTENSION newDevExt =
   SFilterDeviceObject->DeviceExtension;
    NTSTATUS status;
    ULONG i;

    PAGED_CODE();
 …

本文摘自《寒江獨釣:Windows內核安全編程》

posted on 2009-11-15 23:03 Only Soft 閱讀(720) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区三区免费看| 亚洲一区在线观看视频| 老司机精品视频一区二区三区| 国模精品娜娜一二三区| 久久久久久色| 久久影视三级福利片| 亚洲人www| 在线亚洲精品| 国内不卡一区二区三区| 欧美激情亚洲国产| 欧美激情二区三区| 欧美一区二区三区啪啪| 久久成人人人人精品欧| 亚洲乱码国产乱码精品精可以看| 最新亚洲视频| 国产日韩av在线播放| 久久综合中文字幕| 欧美日韩精品一区二区三区| 午夜欧美不卡精品aaaaa| 久久久精品网| 亚洲一区亚洲| 老司机aⅴ在线精品导航| 亚洲一区成人| 免费亚洲一区二区| 久久成人国产精品| 欧美bbbxxxxx| 久久天堂国产精品| 国产精品久久久久三级| 老司机免费视频久久| 国产精品久久久久久五月尺| 免费欧美电影| 国产精品一区二区三区成人| 亚洲第一精品久久忘忧草社区| 国产精品自在在线| 欧美激情欧美激情在线五月| 国产一区二区精品久久| av成人免费观看| 亚洲精品久久久久久下一站| 性久久久久久| 欧美亚洲午夜视频在线观看| 欧美日本免费| 欧美国产日韩xxxxx| 国内精品99| 国产夜色精品一区二区av| 午夜精品视频网站| 欧美日本簧片| 亚洲二区在线| 亚洲激情影视| 久久综合久久综合久久综合| 久久久免费av| 国产一区二区| 欧美一区二区三区在| 亚洲欧美日本国产有色| 欧美日韩亚洲视频一区| 欧美激情四色| 亚洲国产精品尤物yw在线观看| 欧美一区二区在线| 久久精品成人| 国产一区二区精品丝袜| 欧美一区二区在线免费播放| 久久精品亚洲一区| 国产视频在线观看一区二区三区| 亚洲美女av在线播放| 在线综合亚洲欧美在线视频| 欧美久久久久中文字幕| 99亚洲一区二区| 亚洲欧美日韩一区二区在线| 国产精品久久久久久av下载红粉| 一本一本久久a久久精品综合麻豆| aa亚洲婷婷| 欧美日韩日本国产亚洲在线| 一本色道**综合亚洲精品蜜桃冫 | 亚洲精品美女久久久久| 亚洲美女免费精品视频在线观看| 欧美精品日本| 亚洲深夜福利| 久久久噜噜噜久久中文字免| 影音先锋亚洲一区| 欧美成人精品激情在线观看| 亚洲承认在线| 亚洲一区在线直播| 国产自产2019最新不卡| 免费欧美日韩| 亚洲美女毛片| 欧美影视一区| 最新中文字幕亚洲| 欧美色大人视频| 欧美在线视频观看免费网站| 欧美成人精品高清在线播放| 日韩一级大片在线| 国产精品视频99| 久久久久国产精品麻豆ai换脸| 亚洲激情在线| 欧美一区二区三区四区夜夜大片| 韩国免费一区| 欧美日韩视频在线一区二区| 亚洲欧美影院| 91久久久久久| 巨乳诱惑日韩免费av| 日韩视频免费在线| 国产综合久久久久影院| 欧美精品一区三区在线观看| 西西裸体人体做爰大胆久久久| 欧美激情视频一区二区三区免费| 亚洲一区二区三区久久| 亚洲高清免费在线| 国产精品久久久久久久久免费| 久久免费观看视频| 亚洲午夜精品久久| 欧美大片免费| 久久裸体艺术| 亚洲综合国产| 亚洲精品一区二区三区在线观看| 亚洲神马久久| 久久久久久伊人| 国产精品99久久久久久白浆小说 | 久久精品免费| 亚洲免费视频在线观看| 亚洲国产天堂久久综合| 久久综合给合| 久久久久综合网| 亚洲欧美一级二级三级| 一本色道久久加勒比精品| 一色屋精品视频免费看| 国产午夜久久| 国产精品一二三视频| 欧美日韩亚洲成人| 欧美激情第二页| 女女同性精品视频| 久热爱精品视频线路一| 久久爱另类一区二区小说| 亚洲在线国产日韩欧美| 一区二区三区不卡视频在线观看| 亚洲国产精品欧美一二99| 你懂的视频一区二区| 麻豆视频一区二区| 噜噜噜噜噜久久久久久91| 久久精品观看| 久久久久国产一区二区| 久久精品视频免费| 久久精品国产清高在天天线 | 亚洲国产综合91精品麻豆| 亚洲高清毛片| 99xxxx成人网| 亚洲图片激情小说| 亚洲男人的天堂在线| 欧美亚洲综合网| 久久精品女人| 欧美成年人视频| 亚洲成色777777女色窝| 亚洲国产精品一区| 日韩午夜免费视频| 亚洲女人天堂成人av在线| 亚洲欧美成人一区二区在线电影 | 欧美高清在线一区二区| 亚洲国产mv| 亚洲麻豆av| 亚洲欧美精品suv| 久久久久青草大香线综合精品| 噜噜噜躁狠狠躁狠狠精品视频| 欧美国产1区2区| 国产精品国产三级国产aⅴ入口 | 国产亚洲高清视频| 激情国产一区| 99国产精品99久久久久久| 亚洲视频免费| 久久久久国产精品厨房| 亚洲国产成人高清精品| 中文精品视频一区二区在线观看| 亚洲欧美日韩另类| 免费亚洲一区| 国产精品自拍网站| 亚洲第一福利视频| 亚洲视频综合在线| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲人成亚洲人成在线观看图片| 亚洲视频一区二区免费在线观看| 欧美亚洲综合另类| 欧美精品久久99| 国产一区二区三区日韩欧美| 99视频精品| 久久天天躁夜夜躁狠狠躁2022| 亚洲伦理在线免费看| 亚洲欧美视频在线观看视频| 欧美成人精品一区二区| 欧美色综合天天久久综合精品| 韩国在线视频一区| 亚洲综合视频一区| 欧美激情一区二区三区在线视频| 亚洲一区日韩| 亚洲人成网站色ww在线| 日韩亚洲国产精品| 久久久久国产一区二区三区四区 | 欧美人与禽性xxxxx杂性| 国产日韩欧美综合精品| 一区二区三区色| 欧美国产免费| 久久免费视频在线| 国产视频一区在线观看| 亚洲一级黄色|