delphi 7.0的程序,某个函数必须以system权限运行,有没有简单点的办法?
解决方案 »
- Delphi 的 春天要来了,delphi XE2 快要发布了 --李维博客内容
- 100分求一条SQL 语句,统计学生成绩的,在线等,搞定就给分了。22:00之前
- 关于COM组件中异步调用的问题
- 断点设置与第三方控件的使用有关吗????(50急)
- 如何在IMAGE控件上选定区域并将选区以外的部分裁减掉?
- 关于打印多个报表的问题,高手们请进,一定给分!!!
- 关于对数据记录指针的移动问题
- 为什么出错,数据如何更新
- 用socket怎么向指定的端口发送文件,远端服务器不要程序。
- 如何listview改变columnheader颜色
- wise installation 如何添加自述文件
- TImgEdit控件上放透明Panel
除了CreateProcessAsUser,还有一个API是CreateProcessWithLogon,供参考
而整个进程则可以使用修改EPROCESS结构的TOKEN实现
靠~做这个需要编写驱动程序的,用DDK写
这是绿盟上的大虾写的文章,谁能帮忙把sysproc_now.c改成delphi的啊?
教教小弟怎么在DELPHI 7.0里调用也可以
这个程序可以直接拿来用的, 用VC编译好以后生成命令行程序
然后在你程序里面用shellexecute或者winexec调用即可
winexec('sysadmin yourprog.exe',sw_hide)
把上面的代码copy进去就可以直接编译了 (我这边生成sysadmin.exe)
刚刚调试过了,代码没有问题
sysadmin regedit.exe 运行后可以看到注册表里面的sam数据
还有个问题,用EXE文件调用EXE的形式太绕圈了,能不能用DLL的形式,直接在我程序里调用某个函数,让函数以SYSTEM权限运行?
//激活或者停止指定的权限
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;
服务, 远线程都可以. 也可以用有SYSTEM权限的程序来调用你程序
version 5.1
AdjustTokenPrivileges() failed: 并非所有被引用的特权都指派给呼叫方。
OpenProcess() failed: 拒绝访问。
AdjustTokenPrivileges() failed: 并非所有被引用的特权都指派给呼叫方。
try following
"开始"-"设置"-"控制面板"-"管理工具"-"本地安全策略"-"本地策略"-"用户权利指派"-"调试程序"
把"调试程序"策略指派给你用户所在的组,如"Administrators" 如果是英文版的操作系统
Start-Settings-Control Panel-Administrative Tools-Local Security Policy-Local Policies-User Rigthts Assignment-Debug Programs