delphi 7.0的程序,某个函数必须以system权限运行,有没有简单点的办法?

解决方案 »

  1.   

    分数加到120 谁能给个例子啊 我对api编程不怎么熟悉的 也可以发到我邮箱里去[email protected]
      

  2.   

    Windows服务程序是可以指定运行程序的权限的
    除了CreateProcessAsUser,还有一个API是CreateProcessWithLogon,供参考
      

  3.   

    要是具体的函数,还是用SYSTEM权限下的服务交互来调用
    而整个进程则可以使用修改EPROCESS结构的TOKEN实现
      

  4.   

    修改EPROCESS结构的TOKEN实现以任何一个存在的用户权限执行俺不是说了??
    靠~做这个需要编写驱动程序的,用DDK写
      

  5.   

    http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1900
    这是绿盟上的大虾写的文章,谁能帮忙把sysproc_now.c改成delphi的啊?
    教教小弟怎么在DELPHI 7.0里调用也可以
      

  6.   

    这里只是提供你一个思路或帮你完善下代码,自己google一下吧,代码1大堆
      

  7.   

    其实http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1900
    这个程序可以直接拿来用的, 用VC编译好以后生成命令行程序
    然后在你程序里面用shellexecute或者winexec调用即可
    winexec('sysadmin yourprog.exe',sw_hide)
      

  8.   

    楼上的能把程序改成DELPI的么,或者DLL的形式也行,实在不行就帮忙编译个EXE文件吧,我对C++是一窍不通啊,编译器也没有.
      

  9.   

    安装个VC,创建一个window console application ,
    把上面的代码copy进去就可以直接编译了 (我这边生成sysadmin.exe)
    刚刚调试过了,代码没有问题
    sysadmin regedit.exe 运行后可以看到注册表里面的sam数据
      

  10.   

    楼上的兄弟,能编译成DLL的形式么?
    还有个问题,用EXE文件调用EXE的形式太绕圈了,能不能用DLL的形式,直接在我程序里调用某个函数,让函数以SYSTEM权限运行?
      

  11.   

     能把EXE和DLL文件给我发一份么?
      

  12.   

    参考代码
    //激活或者停止指定的权限
    function EnabledDebugPrivilege(const bEnabled: Boolean):Boolean;
    var
      hToken: THandle;
      tp: TOKEN_PRIVILEGES;
      a: DWORD;
    const
      SE_DEBUG_NAME = 'SeDebugPrivilege';
    begin
      Result:=False;
      //打开当前Process的令牌(我一直叫Token为令牌)
      if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken)) then
      begin
        //调整令牌的权限,也就是加上或者取消调试权限(SE_DEBUG_NAME)
        tp.PrivilegeCount :=1;
        LookupPrivilegeValue(nil,SE_DEBUG_NAME ,tp.Privileges[0].Luid);
        if bEnabled then
          tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          tp.Privileges[0].Attributes := 0;
        a:=0;
        AdjustTokenPrivileges(hToken,False,tp,SizeOf(tp),nil,a);
        Result:= GetLastError = ERROR_SUCCESS;
        CloseHandle(hToken);
      end;
    end;
      

  13.   

    please refer to your email
      

  14.   

    CreateProcessAsUser最多是Admin权限,是不行的.
    服务, 远线程都可以. 也可以用有SYSTEM权限的程序来调用你程序
      

  15.   

    naughtyboy 你的邮件收到了 在我的机器上无法运行啊,显示
    version 5.1 
    AdjustTokenPrivileges() failed: 并非所有被引用的特权都指派给呼叫方。
    OpenProcess() failed: 拒绝访问。
    AdjustTokenPrivileges() failed: 并非所有被引用的特权都指派给呼叫方。
      

  16.   

    jzcdelphi 我调用你的代码 怎么返回false呢?老是不成功
      

  17.   

    jzcdelphi 你的代码只对NT 2000好用吧 我在XPSP2上运行总是FALSE
      

  18.   

    我想这个和你本地系统的安全策略有关系
    try following
    "开始"-"设置"-"控制面板"-"管理工具"-"本地安全策略"-"本地策略"-"用户权利指派"-"调试程序"
    把"调试程序"策略指派给你用户所在的组,如"Administrators" 如果是英文版的操作系统
    Start-Settings-Control Panel-Administrative Tools-Local Security Policy-Local Policies-User Rigthts Assignment-Debug Programs