只在网上找到了这么一段c++代码
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++我不懂啊,小弟菜啊,来个高人帮帮忙啊~~~  尽量详细点 ,谢谢了先

解决方案 »

  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
      

  2.   

    大神啊,您能不能说的详细一点啊,小弟学生,正在不断地学习进取中,不能以你的详细来衡量我的详细啊
    还有个问题 ,网上查到RtlAdjustPrivilege这个东东,可 我用c#实现这个方法的时候从事报错,不知道是什么问题 ,错误是什么常识读或写受保护的内存。。实在是郁闷