• <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.¢%

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

            驅動開發中使用安全字符串函數

            Posted on 2009-09-27 21:44 S.l.e!ep.¢% 閱讀(1232) 評論(0)  編輯 收藏 引用 所屬分類: Windows WDM

            一、前言

            ?????? 大量的系統安全問題是由于薄弱的緩沖處理以及由此產生的緩沖區溢出造成的,而薄弱的緩沖區處理常常與字符串操作相關。 c/c++ 語言運行庫提供的標準字符串操作函數( strcpy, strcat, sprintf 等)不能阻止在超出字符串尾端的寫入。

            ?????? 基于 Windows XP SP1 以及隨后的操作系統的 Windows DDK 版本提供了安全字符串函數( safe string functions )。這類函數被設計的目的是用來取代相同功能的 c/c++ 標準函數和其它微軟提供的庫函數。這類函數具有以下特征:

            • 每個函數以目標緩沖區所占的字節大小作為其一個輸入參數,因此可以保證在寫入時不會超出緩沖區末端。
            • 每個函數的輸出字符串均以NULL結尾(null-terminate),即使該函數可能會對正確的結果進行截斷。
            • 所有函數均有返回值,類型為NTSTATUS,只有返回STATUS_SUCCESS時,操作結果才正確。
            • 每個函數均有兩種類型的版本,按字節或者按字符數。例如,RtlStringCbCatWRtlStringCchCatW
            • 每個函數均有支持雙字節的unicode字符(以W作為后綴)和單字節的ANSI字符(以A作為后綴)的版本。例如:RtlStringCbCatWRtlStringCbCatA
            • 大部分函數有提供擴展版本的函數(以Ex作為后綴),例如,RtlStringCbCatWRtlStringCbCatExW

            二、如何在內核驅動代碼中引入安全字符串函數

            ??? 有兩種方式可以引入安全字符串函數:

            l??????? 以內聯的方式引入,包含在ntstrsafe.h

            l??????? 在鏈接時以庫的方式引入

            其中,如果代碼需要在系統為Windows XP及以后版本運行時,可以使用內聯的方式;如果代碼需要運行在早于Windows XP時,則必須使用鏈接庫的方式。

            以內聯方式引入

            只需包含頭文件即可

            #include?<ntstrsafe.h>

            以鏈接庫的方式

            1. 在包含頭文件之前先定義宏

            #define?NTSTRSAFE_LIB

            #include?<ntstrsafe.h>

            1. 在項目的sources文件中,添加一TARGETLIBS條目如下: $(DDK_LIB_PATH)\ntstrsafe.lib.

            在默認情況下,當引入了安全字符串函數后,那些被取代的c/c++運行庫函數將變得無效,編譯是會報錯,提示需要使用安全字符串函數。

            ??? 如果還希望繼續使用c/c++運行庫函數,即在使用安全字符串函數的時候,c/c++運行庫函數還可以繼續使用,則需要在包含ntstrsafe.h之前先定義宏 NTSTRSAFE_NO_DEPRECATE

            #define?NTSTRSAFE_NO_DEPRECATE

            The maximum number of characters that any ANSI or Unicode string can contain is STRSAFE_MAX_CCH. This constant is defined in ntstrsafe.h.

            字符串最長長度為STRSAFE_MAX_CCH,該宏在ntstrsafe.h中定義。另外,如果一個字符串需要被轉換成UNICODE_STRING結構,則該字符串長度不能超過65535.

            三、內核模式安全字符串函數概述

            ??? 下表概述了可以在內核驅動中使用的安全字符串函數,并指明了它們用來何種類型的c/c++運行庫函數。

            說明:

            函數名含有Cb的是以字節數為單位,含有Cch的是以字符數為單位。

            函數名

            作用

            取代

            RtlStringCbCat
            RtlStringCbCatEx
            RtlStringCchCat
            RtlStringCchCatEx

            將源字符串連接到目的字符串的末尾

            strcat
            wcscat

            RtlStringCbCatN
            RtlStringCbCatNEx
            RtlStringCchCatN
            RtlStringCchCatNEx

            將源字符串指定數目的字符連接到目的字符串的末尾

            strncat
            wcsncat

            RtlStringCbCopy
            RtlStringCbCopyEx
            RtlStringCchCopy
            RtlStringCchCopyEx

            將源字符串拷貝到目的字符串

            strcpy
            wcscpy

            RtlStringCbCopyN
            RtlStringCbCopyNEx
            RtlStringCchCopyN
            RtlStringCchCopyNEx

            將源字符串指定數目的字符拷貝到目的字符串

            strncpy
            wcsncpy

            RtlStringCbLength
            RtlStringCchLength

            確定字符串的長度

            strlen
            wcslen

            RtlStringCbPrintf
            RtlStringCbPrintfEx
            RtlStringCchPrintf
            RtlStringCchPrintfEx

            格式化輸出

            sprintf
            swprintf
            _snprintf
            _snwprintf

            RtlStringCbVPrintf
            RtlStringCbVPrintfEx
            RtlStringCchVPrintf
            RtlStringCchVPrintfEx

            可變格式化輸出

            vsprintf
            vswprintf
            _vsnprintf
            _vsnwprintf

            各個函數的作用可以通過它所取代的c/c++函數可以大概看出,具體用法請查閱DDK幫助文檔。

            伊人色综合久久天天人守人婷 | 久久亚洲精品无码aⅴ大香| 久久亚洲AV成人无码电影| 亚洲第一永久AV网站久久精品男人的天堂AV | 成人久久免费网站| 伊人精品久久久久7777| 久久无码国产| 色婷婷噜噜久久国产精品12p| 办公室久久精品| 久久93精品国产91久久综合| 一级做a爰片久久毛片16| 青青草原综合久久大伊人精品| 久久国产乱子伦免费精品| 999久久久无码国产精品| 亚洲综合精品香蕉久久网97| 国产精品嫩草影院久久| 亚洲AV伊人久久青青草原| 综合久久国产九一剧情麻豆| 亚洲精品乱码久久久久久按摩 | 欧洲国产伦久久久久久久| 国内精品伊人久久久久妇| 日日噜噜夜夜狠狠久久丁香五月 | 久久午夜无码鲁丝片| 久久国产乱子伦精品免费强| 国产精品免费久久久久影院 | 2021国产精品午夜久久 | 久久亚洲精品成人AV| 精品久久久久中文字幕一区| 亚洲欧洲精品成人久久奇米网| 中文国产成人精品久久不卡 | 天堂久久天堂AV色综合| 青青青青久久精品国产h| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久久国产99久久国产一| 国内精品久久久久久久97牛牛| 久久亚洲精品无码观看不卡| 久久免费的精品国产V∧| 午夜精品久久影院蜜桃 | 嫩草影院久久99| 日产精品久久久久久久| 色综合久久久久综合99|