标题:c#——提升注册表操作的权限
取消只看楼主
wangzhen_andy
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:39
专家分:25
注 册:2008-9-22
结帖率:50%
 问题点数:0 回复次数:0 
c#——提升注册表操作的权限
今天搞了一天,用c#调用windows的api,用来提升备份和恢复数据库的权限,但GetLastWin32Error()返回998,表示程序访问了禁止访问的地址空间。纠结中,求教!

调试代码如下:
    static void Main(string[] args)
    {   
        IntPtr hToken = new IntPtr();
        
        bool retn = OpenProcessToken(Process.GetCurrentProcess().Handle, TokenAccessLevels.AdjustPrivileges, ref hToken);
        if (!retn)
            // 获取令牌失败!
            return;
        TokenPrivileges tp;  // 新特权结构体
        LUID Luid;
        retn = LookupPrivilegeValue(null, "SeRestorePrivilege", out Luid);     
        if (retn != true)
        {
            //获取Uid失败
            return;
        }
        tp.privilegecount = 1;
        tp.privileges.attributes = SE_PRIVILEGE_ENABLED;          // 这个参数的值不知道是否正确?
        tp.privileges.pluid = Luid;            

        AdjustTokenPrivileges(hToken, false, tp, 4 + (12 * tp.privilegecount), IntPtr.Zero, IntPtr.Zero);

        int retVal = RegLoadKey(HKEY_CURRENT_USER, @"Software\Kingsoft\Office\6.0\Common\updateinfo", @"d:\abc.reg");
        Console.Error.WriteLine(Marshal.GetLastWin32Error());
    }

搜索更多相关主题的帖子: 数据库 windows return 注册表 
2011-11-10 22:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-354898-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080097 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved