سلام:)
من مي خواستم بدونم چه طوري ميشه تشخيص داد Accountي كه تو اونيم Administrator هست يا نه (البته از تو دلفي);)
Printable View
سلام:)
من مي خواستم بدونم چه طوري ميشه تشخيص داد Accountي كه تو اونيم Administrator هست يا نه (البته از تو دلفي);)
من قدیما که این کار رو به این طریق انجام میدادم:
توی یه مسیر دلخواه از Hkey_Local_machine یک کلید می ساختم.
بعد چک میکردم که کلید ایجاد شده یا نه.
اگه ایجاد شده بود در یوزر Administrator هستیم چون این یوزر به این شاخه دسترسی داره.
اگه ایجاد نشده بود در یوزر Guest یا Limited هستیم چون این یوزرها به این شاخه دسترسی ندارن!
البته اصلاً راه استانداردی نیست! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
باید راه بهتری هم باشه،ولی من اطلاع ندارم!
admiral جان هر مساله به تعداد كساني كه حلش مي كنن مي تونه راه حل داشتاه باشه پس راه حل استاندارد تو كامپيوتر كيلو چند ؟ هر كس با نبوغي كه داره مي تونه راهي واسه رسيدن به منظور پيدا كنه .
سلامنقل قول:
اين هم يك راه ديگر :
کد:const
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
(Value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
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
ShowMessage('Logged in as Administrator');
end;
منم قبلا از همين روش استفاده ميكردم ولي بعضي مواقع جواب غلط در ميومد.نقل قول:
مثلا تو يه كامپيوتر تو Limited اجرا كردم برنامه تشخيص داد ادمينه بعد اومد كاراشو انجام بده دويست تا ارور داد.
چون تو اون كامپيوتر تو Limitedش ميشد تو هر شاخه اي كليد ساخت!
به خاطر همين من كدشو خواستم كه NoneForce عريز لطف كردن گذاشتن.
امتحان ميكنم اگه مشكلي پيدا كردم ميگم:biggrin:نقل قول:
ممنون;)
NoneForce عزيز عالي بود.
ممنونم.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]