Programın UAC denetimi yapması
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- amatorkaan
- Üye
- Mesajlar: 12
- Kayıt: 26 Mar 2014 09:53
Programın UAC denetimi yapması
Hazırladığım bir uygulama Registry'e kayıt ekliyor. Ancak bunu yapabilmesi için yönetici olarak çalıştırılması lazım. Yönetici olarak çalıştırıldığında direkt çalışmasını, normal çalıştırıldığında kullanıcıyı örneğin; "Lütfen programı yönetici olarak çalıştırın" şeklinde uyarmasını istiyorum. Program, bu kontrolü ne şekilde yapabilir?
Re: Programın UAC denetimi yapması
http://www.ahmetaltay.com.tr/2014/07/yo ... irmak-uac/ Başka siteden link vermek yasak mı değil mi bilmiyorum ama bir inceleyin isterseniz.
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...
Kod: Tümünü seç
Delete from hayat where cins="çıkarcılar"
Re: Programın UAC denetimi yapması
Kod: Tümünü seç
if (!Seri->bAdmin) {
SHELLEXECUTEINFO shCalistir;
shCalistir.cbSize = sizeof(SHELLEXECUTEINFO);
shCalistir.fMask = NULL;
shCalistir.hwnd = Application->Handle;
shCalistir.lpVerb = L"runas";
shCalistir.lpFile = Application->ExeName.w_str();
shCalistir.lpParameters = L"lisans"; // NULL;
shCalistir.lpDirectory = NULL;
shCalistir.nShow = SW_SHOWNORMAL;
shCalistir.hInstApp = NULL;
this->Hide();
ShellExecuteEx(&shCalistir);
Application->Terminate();
return;
}
Sizin asıl sorduğunuz, öncesinde kontrol gerçekleştirme kısmı ise if içerisinde.. ancak o kısmı ayrı bir class olarak değerlendirmişim. Beraberinde bir çok özel işlemle grift bir yapı oluşturduğundan sizinle paylaşacağım duruma gelmesi güç.
Ancak aşağıda vereceğim tanımlamalar işinize araştırma yönünden de olsa epey yarayacaktır.
Kod: Tümünü seç
#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
//
// Token Specific Access Rights.
//
#define TOKEN_ASSIGN_PRIMARY (0x0001)
#define TOKEN_DUPLICATE (0x0002)
#define TOKEN_IMPERSONATE (0x0004)
#define TOKEN_QUERY (0x0008)
#define TOKEN_QUERY_SOURCE (0x0010)
#define TOKEN_ADJUST_PRIVILEGES (0x0020)
#define TOKEN_ADJUST_GROUPS (0x0040)
#define TOKEN_ADJUST_DEFAULT (0x0080)
#define TOKEN_ADJUST_SESSIONID (0x0100)
#define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
TOKEN_ASSIGN_PRIMARY |\
TOKEN_DUPLICATE |\
TOKEN_IMPERSONATE |\
TOKEN_QUERY |\
TOKEN_QUERY_SOURCE |\
TOKEN_ADJUST_PRIVILEGES |\
TOKEN_ADJUST_GROUPS |\
TOKEN_ADJUST_DEFAULT )
#if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
TOKEN_ADJUST_SESSIONID )
#else
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
#endif
#define TOKEN_READ (STANDARD_RIGHTS_READ |\
TOKEN_QUERY)
#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
TOKEN_ADJUST_PRIVILEGES |\
TOKEN_ADJUST_GROUPS |\
TOKEN_ADJUST_DEFAULT)
#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
sayfaları işinizi görecektir.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
- amatorkaan
- Üye
- Mesajlar: 12
- Kayıt: 26 Mar 2014 09:53
Re: Programın UAC denetimi yapması
Maalesef verdiğiniz çözümler bana çok karışık geldi ve sorunu çözemedim. Bunun daha kolay bir yolu olması gerektiğini düşünüyorum. Delphi 7 kullanıyorum. Daha basit çözümleri olan arkadaşlar yardımcı olabilirse sevinirim. Teşekkürler.
Re: Programın UAC denetimi yapması
Aşağıda ki dosyaları projenle aynı klasöre koy. Daha sonra Project -> View Source bölümüne gel ve aşağıda ki kodu ekle.
Bu şekilde uygulaman her zaman admin modunda çalışır.
Kod: Tümünü seç
{$R 'ExecutionLevelRequireAdministratorManifest.RES' 'ExecutionLevelRequireAdministratorManifest.rc'}
- Dosya ekleri
-
- UAC Manifest.rar
- (1.08 KiB) 149 kere indirildi
Re: Programın UAC denetimi yapması
Ya diğer arkadaşların sunduğu gibi doğrudan admin olarak çalıştıracaksınız, ya da önceki yazımda en altta verdiğim microsoft linklerindeki gibi.
Bunun malesef başka çözümü yok. Sistem Microsoft un o da böyle yapabilirsiniz diyor.
Linklerin bir üstünde verdiğim tanımlamalar farklı ihtiyaçlar için farklı yetkiler almak için gerekli tanımlamalar.
O yetkilerin ne olduğu isimlendirme şeklinden anlaşılabilir durumda.
En üstte de nacizane kendi kullanımımdan bir örnek. Admin olup olmadığını if içinde kontrol edip değilse yetki istiyor.
Belki bir bileşen falan vardır bu işleri kolaylaştıran. Onu bilmiyorum.
Kod olarak yazımının size karışık gelmesiyle ilgili bir şey diyemiyorum. Belki de bu konudan henüz uzak durmanız gerektiğinizin işaretidir.
Bunun malesef başka çözümü yok. Sistem Microsoft un o da böyle yapabilirsiniz diyor.
Linklerin bir üstünde verdiğim tanımlamalar farklı ihtiyaçlar için farklı yetkiler almak için gerekli tanımlamalar.
O yetkilerin ne olduğu isimlendirme şeklinden anlaşılabilir durumda.
En üstte de nacizane kendi kullanımımdan bir örnek. Admin olup olmadığını if içinde kontrol edip değilse yetki istiyor.
Belki bir bileşen falan vardır bu işleri kolaylaştıran. Onu bilmiyorum.
Kod olarak yazımının size karışık gelmesiyle ilgili bir şey diyemiyorum. Belki de bu konudan henüz uzak durmanız gerektiğinizin işaretidir.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
- amatorkaan
- Üye
- Mesajlar: 12
- Kayıt: 26 Mar 2014 09:53
Re: Programın UAC denetimi yapması
warder nikli arkadaşımız; "Belki de bu konudan henüz uzak durmanız gerektiğinizin işaretidir" diye tavsiyede bulunduğu için tavsiyesine uydum ve belirttiği yol üzerinde çalışmadım. Farklı bir yol denedim ve isteğime ulaştım. Belki ilginen arkadaşlar olur diye çözümü aşağıya aldım. Formun Create olayında "CONTROL_UAC" isimli bir anahtar Registry'e eklenmek isteniyor. Bu kısmı try .. except blogu arasına aldım ki hata vermesin. Sonrasında eğer bu değer yazılmışsa zaten admin olarak çalıştırılmıştır, sorun yok. Yazılmamışsa admin olarak çalıştırılması için kullanıcıyı uyarıyor. Umarım bunu yapmakla warder arkadaşın uyarısını ihlal etmemişimdir
Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
var
reg: TRegistry;
begin
try
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false);
reg.WriteString('CONTROL_UAC','Uac Kontrolü');
except
if reg.ValueExists('CONTROL_UAC') = false then ShowMessage('Lütfen Programı Yönetici Olarak Çalıştırınız.')
else
begin
reg.CloseKey;
reg.free;
end;
end;
end;
Re: Programın UAC denetimi yapması
Basit ama etkili bir çözüm. Tebrik ediyorum.
Samimi söylüyorum; adım adım ilerlemek, ilerlerken de hazıra konmak değil de fikir yürüterek çözüm üreteni gördüğümde çok memnun oluyorum.
Samimi söylüyorum; adım adım ilerlemek, ilerlerken de hazıra konmak değil de fikir yürüterek çözüm üreteni gördüğümde çok memnun oluyorum.
Re: Programın UAC denetimi yapması
Bende tebrik ederim.
Bu forum gerçekten enteresan.
Online durumunu anlamak için herhangi bir siteye talep gönderme çözümünün yanına, programın admin olarak çalıştırılıp çalıştırılmadığını anlamak için registry kullanmaya çalışma çabası...
Sanıyorum hata bende sadece izleyici olarak kalmalıyım.
Ben sizi meşgul etmeyim. Işığınıza engel olmayım.
Kolay gelsin.
Bu forum gerçekten enteresan.
Online durumunu anlamak için herhangi bir siteye talep gönderme çözümünün yanına, programın admin olarak çalıştırılıp çalıştırılmadığını anlamak için registry kullanmaya çalışma çabası...
Sanıyorum hata bende sadece izleyici olarak kalmalıyım.
Ben sizi meşgul etmeyim. Işığınıza engel olmayım.
Kolay gelsin.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...