日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 今天為了KPI,搞了一天的PPT,搞得惡心想吐。最后還是回到這兒,這兒才是我的凈土,可以寫寫我的研究。

? ? ? ? 這兒講一些Reactos中一些明顯的錯誤。(轉載請指明出處)

? ? ? ? 在Reactos的RegQueryInfoKeyW中有段這樣的實現

    if (lpcbMaxSubKeyLen != NULL){*lpcbMaxSubKeyLen = FullInfo->MaxNameLen / sizeof(WCHAR) + 1;}if (lpcbMaxClassLen != NULL){*lpcbMaxClassLen = FullInfo->MaxClassLen / sizeof(WCHAR) + 1;}if (lpcbMaxValueNameLen != NULL){*lpcbMaxValueNameLen = FullInfo->MaxValueNameLen / sizeof(WCHAR) + 1;}

? ? ? ? 這兒存在一個明顯的錯誤,當待查詢鍵不存在子鍵時,最長子鍵名長度肯定是0啊,怎么會是1呢?同樣的錯誤出現在最長Class長度和最長項名長度。Reactos源碼中對這些長度數據的處理最后都加上了1,使我很不解,看MSDN,對這些變量的說明是pcMaxSubKeyLen?[out, optional]

A pointer to a variable that receives the size of the key's subkey with the longest name,in Unicode characters, not including the terminating?null?character. This parameter can be?NULL.

lpcMaxClassLen?[out, optional]

A pointer to a variable that receives the size of the longest string that specifies a subkey class, in Unicode characters. The count returned does not include the terminating?null?character.This parameter can be?NULL.

lpcMaxValueNameLen?[out, optional]

A pointer to a variable that receives the size of the key's longest value name, in Unicode characters. The size does not include the terminating?null?character. This parameter can be?NULL.

? ? ? ? 可以見得,這些數據都不含結尾符的,那干嘛還要+1呢?我只能理解為,如果數據沒按WCHAR對齊,在除以sizeof(WCHAR)后,數據將“缺”一位,于是就要多加一個1。但是它沒有考慮到子鍵和子項不存在的情況。

? ? ? ? 我修改后的代碼是

        if ( NULL != lpcMaxSubKeyLen ) {*lpcMaxSubKeyLen = ( ( FullInfo->MaxNameLen + 1 ) & ~1 ) / sizeof(WCHAR);}if ( NULL != lpcMaxClassLen ) {*lpcMaxClassLen = ( ( FullInfo->MaxClassLen + 1 ) & ~1 )  / sizeof(WCHAR);}if ( NULL != lpcMaxValueNameLen ) {*lpcMaxValueNameLen = ( ( FullInfo->MaxValueNameLen + 1 ) & ~1 )  / sizeof(WCHAR);}

總結

以上是生活随笔為你收集整理的一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。