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

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

            一、前言

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

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

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

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

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

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

            l??????? 在鏈接時(shí)以庫(kù)的方式引入

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

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

            只需包含頭文件即可

            #include?<ntstrsafe.h>

            以鏈接庫(kù)的方式

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

            #define?NTSTRSAFE_LIB

            #include?<ntstrsafe.h>

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

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

            ??? 如果還希望繼續(xù)使用c/c++運(yùn)行庫(kù)函數(shù),即在使用安全字符串函數(shù)的時(shí)候,c/c++運(yùn)行庫(kù)函數(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.

            字符串最長(zhǎng)長(zhǎng)度為STRSAFE_MAX_CCH,該宏在ntstrsafe.h中定義。另外,如果一個(gè)字符串需要被轉(zhuǎn)換成UNICODE_STRING結(jié)構(gòu),則該字符串長(zhǎng)度不能超過(guò)65535.

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

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

            說(shuō)明:

            函數(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

            確定字符串的長(zhǎng)度

            strlen
            wcslen

            RtlStringCbPrintf
            RtlStringCbPrintfEx
            RtlStringCchPrintf
            RtlStringCchPrintfEx

            格式化輸出

            sprintf
            swprintf
            _snprintf
            _snwprintf

            RtlStringCbVPrintf
            RtlStringCbVPrintfEx
            RtlStringCchVPrintf
            RtlStringCchVPrintfEx

            可變格式化輸出

            vsprintf
            vswprintf
            _vsnprintf
            _vsnwprintf

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

            99久久精品免费看国产| 国产精品99久久不卡| 久久中文字幕无码专区| 欧美色综合久久久久久| 亚洲精品乱码久久久久久| 国产午夜久久影院| 久久综合狠狠综合久久97色| 久久综合色之久久综合| 97精品依人久久久大香线蕉97| 久久精品国产亚洲AV无码麻豆| 狠狠久久综合伊人不卡| 久久精品亚洲中文字幕无码麻豆 | 伊人久久免费视频| 中文字幕亚洲综合久久2| 久久精品无码一区二区WWW| 欧美与黑人午夜性猛交久久久| 国产成人精品久久| 色天使久久综合网天天| 精品久久久无码人妻中文字幕豆芽| 亚洲国产精品嫩草影院久久| 一本大道久久a久久精品综合| 亚洲精品国产自在久久| 成人精品一区二区久久久| 狠狠精品久久久无码中文字幕| 久久久久久久国产免费看| 伊人久久亚洲综合影院| 精品久久人人做人人爽综合| 国产婷婷成人久久Av免费高清| 亚洲日韩中文无码久久| 波多野结衣久久精品| 久久综合亚洲欧美成人| 国产精品免费看久久久| 中文精品久久久久人妻不卡| 青青草原综合久久大伊人| 午夜精品久久影院蜜桃| 亚洲国产精品无码久久久久久曰| 麻豆精品久久精品色综合| 无码国内精品久久人妻麻豆按摩| 精品久久久久中文字| 久久性精品| yy6080久久|