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());
}