修改系统时间问题(50分)

  • 主题发起人 主题发起人 moroko
  • 开始时间 开始时间
M

moroko

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在Users的系统权限下修改系统时间!
在Administrstors下修改都没问题,如何才能在Users组下修改系统时间呢!
最好能给个例子或实现实现方法!
 
function SetSystemTime(DateTime: TDateTime): Boolean;
var
tSetDati: TDateTime;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;
tST: TSystemTime;
begin
GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
tSetDati := DateTime + vDatiBias;
with tST do
begin
wYear := StrToInt(FormatDateTime('yyyy', tSetDati));
wMonth := StrToInt(FormatDateTime('mm', tSetDati));
wDay := StrToInt(FormatDateTime('dd', tSetDati));
wHour := StrToInt(FormatDateTime('hh', tSetDati));
wMinute := StrToInt(FormatDateTime('nn', tSetDati));
wSecond := StrToInt(FormatDateTime('ss', tSetDati));
wMilliseconds := 0;
end;
Result := Windows.SetSystemTime(tST);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
DateTime: TDateTime;
begin
DateTime:=StrToDate('2005-9-18') + StrToTime('10:00');
SetSystemTime(DateTime);
end;
 
上面代码我有了,不能改,请审题后在回答,谢谢!
 
这个你从系统API是做不到的:因为系统的默认安全策略中是这样定义的:
// 控制面板>管理工具>本地安全设置>本地策略>用户权力指派
更改系统时间:Administrators, Power Users
当然,你可以在超级用户下,修改这个配置,可以加上Users组。
这样就可以了!

如果要用程序突破权限限制?很期待....:)
 
同意 xiammy 的分析,在著名的 Jcl 中有代码可以调整当前用户权限的;或者干脆要求输入 administrator 的密码,然后调用 CreateProcessAsUser 启动你修改时间的程序 ...
 
BTW,还有一个方法:
把修改时间的程序做成系统服务然后安装,服务运行在 system 权限下,然后和服务交互。
 
LSUPER大侠终于回来了,鼓掌
 
Users,可以安装服务吗?
感谢
 
后退
顶部