前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4

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

作者头像
方亮
发布2019-01-16 14:32:54
3860
发布2019-01-16 14:32:54
举报
文章被收录于专栏:方亮方亮

        今天为了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);
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年06月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档