• <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>
            aurain
            技術(shù)文摘
            posts - 137,  comments - 268,  trackbacks - 0

            一、前言

                   大量的系統(tǒng)安全問題是由于薄弱的緩沖處理以及由此產(chǎn)生的緩沖區(qū)溢出造成的,而薄弱的緩沖區(qū)處理常常與字符串操作相關(guān)。c/c++語言運(yùn)行庫提供的標(biāo)準(zhǔn)字符串操作函數(shù)(strcpy, strcat, sprintf等)不能阻止在超出字符串尾端的寫入。

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

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

            二、如何在內(nèi)核驅(qū)動代碼中引入安全字符串函數(shù)

                有兩種方式可以引入安全字符串函數(shù):

            l        以內(nèi)聯(lián)的方式引入,包含在ntstrsafe.h

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

            其中,如果代碼需要在系統(tǒng)為Windows XP及以后版本運(yùn)行時,可以使用內(nèi)聯(lián)的方式;如果代碼需要運(yùn)行在早于Windows XP時,則必須使用鏈接庫的方式。

            以內(nèi)聯(lián)方式引入

            只需包含頭文件即可

            #include <ntstrsafe.h>

            以鏈接庫的方式

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

            #define NTSTRSAFE_LIB

            #include <ntstrsafe.h>

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

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

                如果還希望繼續(xù)使用c/c++運(yùn)行庫函數(shù),即在使用安全字符串函數(shù)的時候,c/c++運(yùn)行庫函數(shù)還可以繼續(xù)使用,則需要在包含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中定義。另外,如果一個字符串需要被轉(zhuǎn)換成UNICODE_STRING結(jié)構(gòu),則該字符串長度不能超過65535.

            三、內(nèi)核模式安全字符串函數(shù)概述

                下表概述了可以在內(nèi)核驅(qū)動中使用的安全字符串函數(shù),并指明了它們用來何種類型的c/c++運(yùn)行庫函數(shù)。

            說明:

            函數(shù)名含有Cb的是以字節(jié)數(shù)為單位,含有Cch的是以字符數(shù)為單位。

            函數(shù)名

            作用

            取代

            RtlStringCbCat
            RtlStringCbCatEx
            RtlStringCchCat
            RtlStringCchCatEx

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

            strcat
            wcscat

            RtlStringCbCatN
            RtlStringCbCatNEx
            RtlStringCchCatN
            RtlStringCchCatNEx

            將源字符串指定數(shù)目的字符連接到目的字符串的末尾

            strncat
            wcsncat

            RtlStringCbCopy
            RtlStringCbCopyEx
            RtlStringCchCopy
            RtlStringCchCopyEx

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

            strcpy
            wcscpy

            RtlStringCbCopyN
            RtlStringCbCopyNEx
            RtlStringCchCopyN
            RtlStringCchCopyNEx

            將源字符串指定數(shù)目的字符拷貝到目的字符串

            strncpy
            wcsncpy

            RtlStringCbLength
            RtlStringCchLength

            確定字符串的長度

            strlen
            wcslen

            RtlStringCbPrintf
            RtlStringCbPrintfEx
            RtlStringCchPrintf
            RtlStringCchPrintfEx

            格式化輸出

            sprintf
            swprintf
            _snprintf
            _snwprintf

            RtlStringCbVPrintf
            RtlStringCbVPrintfEx
            RtlStringCchVPrintf
            RtlStringCchVPrintfEx

            可變格式化輸出

            vsprintf
            vswprintf
            _vsnprintf
            _vsnwprintf

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

            posted on 2009-09-27 14:50 閱讀(6390) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



            <2008年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(17)

            隨筆分類(138)

            隨筆檔案(137)

            網(wǎng)絡(luò)開發(fā)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 500428
            • 排名 - 37

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            青青热久久国产久精品 | 狠狠人妻久久久久久综合蜜桃| 亚洲精品美女久久久久99小说| 久久久久国产精品| 91精品国产91久久久久福利| 久久精品无码专区免费东京热 | 久久久久亚洲AV综合波多野结衣| 久久国产精品视频| 欧美亚洲另类久久综合婷婷| 久久综合精品国产一区二区三区| 久久福利片| 久久精品国产男包| 久久精品国产亚洲av影院| 久久精品黄AA片一区二区三区| 国产成人精品久久一区二区三区| 国产99久久精品一区二区| 国产L精品国产亚洲区久久| 久久久久女教师免费一区| 久久综合亚洲色HEZYO国产| 日本亚洲色大成网站WWW久久| 国产69精品久久久久9999APGF| 久久香蕉超碰97国产精品| 99久久精品国产毛片| 亚洲v国产v天堂a无码久久| 久久综合给久久狠狠97色 | 国产亚洲色婷婷久久99精品| 久久精品国产99国产精品澳门| 99久久精品免费国产大片| 一本久久精品一区二区| 国产国产成人精品久久| 婷婷久久综合九色综合九七| 精品少妇人妻av无码久久| 欧美亚洲国产精品久久蜜芽| 中文字幕精品无码久久久久久3D日动漫 | 久久96国产精品久久久| 日本精品一区二区久久久| 久久w5ww成w人免费| 久久久久久久亚洲精品| 丰满少妇高潮惨叫久久久| 久久婷婷五月综合97色直播| 91久久国产视频|