我要做一个程序,其中一些功能只允许 Windows 2000 的系统管理员才能运行,该怎么做?

hiflower 2003-07-16 01:19:33
我要做一个程序,其中一些功能只允许 Windows 2000 的系统管理员才能运行,该怎么做?
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiflower 2003-07-17
  • 打赏
  • 举报
回复
问题解决,供大家参考:
const
SECURITY_BUILTIN_DOMAIN_RID = $20;
DOMAIN_ALIAS_RID_ADMINS = $220;
SECURITY_NT_AUTHORITY:TSIDIDENTIFIERAUTHORITY=(Value:(0,0,0,0,0,5));
cmmi 2003-07-16
  • 打赏
  • 举报
回复
note: 用户名为administrator的不一定为系统管理员!
hiflower 2003-07-16
  • 打赏
  • 举报
回复
to sz1008(Need For Speed) :
谢谢!
再请教:
SECURITY_NT_AUTHORITY, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS
这几个值如何定义呢?编译通不过
haoguozhong 2003-07-16
  • 打赏
  • 举报
回复
如何从注册表中检查当前用户是否是administrator呢?
lovelymelon 2003-07-16
  • 打赏
  • 举报
回复
在运行该程序时,从注册表种检测一下当前用户是不是administrator,如果是,用一个全局变量admin:boolean型记录为true,如果不是,记录为false,这样一些只有管理员执行的功能时,首先读取全局变量admin,为true,可以执行,为false,不能执行
mrtxc 2003-07-16
  • 打赏
  • 举报
回复
你在执行功能时检查一下系统用户名应该能行。

没试过,好象在哪儿见过。
sz1008 2003-07-16
  • 打赏
  • 举报
回复
笨而简单的方法是做两个版本
深而复杂的方法是在运用次功能前判断是否为administrator代码如下(from Kingron's超级猛料)
判断是否为超级用户 [ Win2000 ]
function IsAdmin: Boolean;
var

hAccessToken: THandle;

ptgGroups: PTokenGroups;

dwInfoBufferSize: DWORD;

psidAdministrators: PSID;

x: Integer;

bSuccess: BOOL;

begin

Result := False;

bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,

hAccessToken);

if not bSuccess then

begin

if GetLastError = ERROR_NO_TOKEN then

bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,

hAccessToken);

end;

if bSuccess then

begin

GetMem(ptgGroups, 1024);

bSuccess := GetTokenInformation(hAccessToken, TokenGroups,

ptgGroups, 1024, dwInfoBufferSize);

CloseHandle(hAccessToken);

if bSuccess then

begin

AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,

SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,

0, 0, 0, 0, 0, 0, psidAdministrators);

{$R-}

for x := 0 to ptgGroups.GroupCount - 1 do

if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then

begin

Result := True;

Break;

end;

{$R+}

FreeSid(psidAdministrators);

end;

FreeMem(ptgGroups);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if isAdmin then

begin

ShowMessage('Logged in as Administrator');

end;

 


5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧