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;
1楼的程序在WINXP下和2000下能通过
直接取出用户名不行吗?怎么这么复杂?procedure TForm1.Button1Click(Sender: TObject); function getMyName : string; var buf: array[0..255] of char; i: DWORD; begin i := 256; GetUserName(buf,i); result := buf; end; begin ShowMessage(getMyName); end;
呵呵,全部贴进去当然不行,这样吧,你增加一个Button,Name为Button1,然后双击一下Button1,写入 if IsAdmin then ShowMessage('Is Admin') else ShowMessage('Is Not Admin!');然后在前面加上 Function IsAdmin: Boolean; Const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; 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;
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;
function getMyName : string;
var
buf: array[0..255] of char;
i: DWORD;
begin
i := 256;
GetUserName(buf,i);
result := buf;
end;
begin
ShowMessage(getMyName);
end;
if IsAdmin then
ShowMessage('Is Admin')
else
ShowMessage('Is Not Admin!');然后在前面加上
Function IsAdmin: Boolean;
Const
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
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;
您就会立即收到我反佣的¥10.00的奖金,告诉我你贝宝的ID和注册的信箱,
我会注入您的贝宝帐户10元。我QQ315557123
注意要用身份证认证,认证全部免费,身份证有的不会自动认证,如果提示身份证号错误,
请拍下身份证用电邮传给贝宝公司,1天就可以认证成功。
https://www.paypal.com/cn/refer/pal=loulixin1983%40yahoo%2ecom%2ecn
还有一个特别的方法
适合XP/2003的
用MS的LegitCheck COM来做,LegitCheck就是MS WinXP/2003的正版验证系统
其提供的ILegitCheck就有IsAdministrator的函数,呵呵:)