bool enableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) {
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {
CloseHandle(hToken);
return false;
}
return true;
}
求教高人在C#里面应该怎样用
OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges
这三个东西,c++我不懂啊,小弟菜啊,来个高人帮帮忙啊~~~ 尽量详细点 ,谢谢了先
4 个解决方案
#1
[ DllImport( "advapi32.dll", EntryPoint="OpenProcessToken", CharSet=CharSet.Ansi )]
private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);
/// LookupPrivilegeValue函数返回本地唯一标志LUID,用于在指定的系统上代表特定的权限名
/// </summary>
/// <param name="lpSystemName">以null结束的字符串指针,标志了在其上查找权限名的系统名称. 如果设置为null, 函数将试图查找指定系统的权限名.</param>
/// <param name="lpName">以null结束的字符串指针,指定了在Winnt.h头文件中定义的权限名. 例如, 该参数可以是一个常量 SE_SECURITY_NAME, 或者对应的字符串 "SeSecurityPrivilege".</param>
/// <param name="lpLuid">接收本地唯一标志LUID的变量指针,通过它可以知道由lpSystemName 参数指定的系统上的权限.</param>
/// <returns>如果执行成功,返回非0<br></br><br>如果执行失败,返回0,如果要获取更多的错误信息,请调用Marshal.GetLastWin32Error.</br></returns>
[ DllImport( "advapi32.dll", EntryPoint="LookupPrivilegeValueA", CharSet=CharSet.Ansi )]
private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
http://topic.csdn.net/u/20080710/09/7d739529-015e-4ece-93dd-0c142b90a7bf.html
private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);
/// LookupPrivilegeValue函数返回本地唯一标志LUID,用于在指定的系统上代表特定的权限名
/// </summary>
/// <param name="lpSystemName">以null结束的字符串指针,标志了在其上查找权限名的系统名称. 如果设置为null, 函数将试图查找指定系统的权限名.</param>
/// <param name="lpName">以null结束的字符串指针,指定了在Winnt.h头文件中定义的权限名. 例如, 该参数可以是一个常量 SE_SECURITY_NAME, 或者对应的字符串 "SeSecurityPrivilege".</param>
/// <param name="lpLuid">接收本地唯一标志LUID的变量指针,通过它可以知道由lpSystemName 参数指定的系统上的权限.</param>
/// <returns>如果执行成功,返回非0<br></br><br>如果执行失败,返回0,如果要获取更多的错误信息,请调用Marshal.GetLastWin32Error.</br></returns>
[ DllImport( "advapi32.dll", EntryPoint="LookupPrivilegeValueA", CharSet=CharSet.Ansi )]
private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
http://topic.csdn.net/u/20080710/09/7d739529-015e-4ece-93dd-0c142b90a7bf.html
#2
大神啊,您能不能说的详细一点啊,小弟学生,正在不断地学习进取中,不能以你的详细来衡量我的详细啊
还有个问题 ,网上查到RtlAdjustPrivilege这个东东,可 我用c#实现这个方法的时候从事报错,不知道是什么问题 ,错误是什么常识读或写受保护的内存。。。。。实在是郁闷
还有个问题 ,网上查到RtlAdjustPrivilege这个东东,可 我用c#实现这个方法的时候从事报错,不知道是什么问题 ,错误是什么常识读或写受保护的内存。。。。。实在是郁闷
#3
哇塞。
假装路过。。。。。
假装路过。。。。。
#4
唉 落伍了 学生都学这么深奥的
#1
[ DllImport( "advapi32.dll", EntryPoint="OpenProcessToken", CharSet=CharSet.Ansi )]
private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);
/// LookupPrivilegeValue函数返回本地唯一标志LUID,用于在指定的系统上代表特定的权限名
/// </summary>
/// <param name="lpSystemName">以null结束的字符串指针,标志了在其上查找权限名的系统名称. 如果设置为null, 函数将试图查找指定系统的权限名.</param>
/// <param name="lpName">以null结束的字符串指针,指定了在Winnt.h头文件中定义的权限名. 例如, 该参数可以是一个常量 SE_SECURITY_NAME, 或者对应的字符串 "SeSecurityPrivilege".</param>
/// <param name="lpLuid">接收本地唯一标志LUID的变量指针,通过它可以知道由lpSystemName 参数指定的系统上的权限.</param>
/// <returns>如果执行成功,返回非0<br></br><br>如果执行失败,返回0,如果要获取更多的错误信息,请调用Marshal.GetLastWin32Error.</br></returns>
[ DllImport( "advapi32.dll", EntryPoint="LookupPrivilegeValueA", CharSet=CharSet.Ansi )]
private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
http://topic.csdn.net/u/20080710/09/7d739529-015e-4ece-93dd-0c142b90a7bf.html
private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);
/// LookupPrivilegeValue函数返回本地唯一标志LUID,用于在指定的系统上代表特定的权限名
/// </summary>
/// <param name="lpSystemName">以null结束的字符串指针,标志了在其上查找权限名的系统名称. 如果设置为null, 函数将试图查找指定系统的权限名.</param>
/// <param name="lpName">以null结束的字符串指针,指定了在Winnt.h头文件中定义的权限名. 例如, 该参数可以是一个常量 SE_SECURITY_NAME, 或者对应的字符串 "SeSecurityPrivilege".</param>
/// <param name="lpLuid">接收本地唯一标志LUID的变量指针,通过它可以知道由lpSystemName 参数指定的系统上的权限.</param>
/// <returns>如果执行成功,返回非0<br></br><br>如果执行失败,返回0,如果要获取更多的错误信息,请调用Marshal.GetLastWin32Error.</br></returns>
[ DllImport( "advapi32.dll", EntryPoint="LookupPrivilegeValueA", CharSet=CharSet.Ansi )]
private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
http://topic.csdn.net/u/20080710/09/7d739529-015e-4ece-93dd-0c142b90a7bf.html
#2
大神啊,您能不能说的详细一点啊,小弟学生,正在不断地学习进取中,不能以你的详细来衡量我的详细啊
还有个问题 ,网上查到RtlAdjustPrivilege这个东东,可 我用c#实现这个方法的时候从事报错,不知道是什么问题 ,错误是什么常识读或写受保护的内存。。。。。实在是郁闷
还有个问题 ,网上查到RtlAdjustPrivilege这个东东,可 我用c#实现这个方法的时候从事报错,不知道是什么问题 ,错误是什么常识读或写受保护的内存。。。。。实在是郁闷
#3
哇塞。
假装路过。。。。。
假装路过。。。。。
#4
唉 落伍了 学生都学这么深奥的