Challenge 7

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 7

Mesaj gönderen thelvaci »

Bu da benim örneğim:

Kod: Tümünü seç

program pTwo_Instance_Max;

uses
  WinAPI.Windows,
  Vcl.Forms,
  uTwo_Instance_Max in 'uTwo_Instance_Max.pas' {Form1};

{$R *.res}

var
  SemaphoreHandle : NativeUInt;
  WaitResult      : Cardinal;
begin
  SemaphoreHandle := CreateSemaphore(nil, 2, 2, 'Bu_uygulamadan_2_tane_calistirabilirsiniz');

  WaitResult := WaitForSingleObject(SemaphoreHandle, 0);

  if WaitResult <> WAIT_OBJECT_0 then // WAIT_TIMEOUT döner, çünkü Semaphore limitlere ulaştı (2 tane app. açılınca)
  begin
    CloseHandle(SemaphoreHandle);
    Exit;
  end;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

  ReleaseSemaphore(SemaphoreHandle, 1, nil);
  CloseHandle(SemaphoreHandle);
end.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 126
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Challenge 7

Mesaj gönderen loaded »

Sandboxie tarzı programlar ile bu tür korumalar çözülebiliyor. Bu duruma bir çözüm getirilebilir mi ?
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 7

Mesaj gönderen thelvaci »

loaded yazdı:Sandboxie tarzı programlar ile bu tür korumalar çözülebiliyor. Bu duruma bir çözüm getirilebilir mi ?
İsimlendirilebilen kernel nesnelerine bir isim verdiğinizde aksini belirtmedi iseniz nesneniz local session bazlı çalışır yanlış bilmiyorsam eğer. Yani sisteme yeni bir kullanıcı ile bağlanır iseniz o kullanıcının session'unda ilgili nesneyi göremezsiniz. Terminal Services sessionlarında olduğu gibi.

Bunun engellemenin bir yolu var elbette, nesnenize isim verir iken "Global\" tag'ı ile başlatırsanız tüm session'larda geçerli olan bir kernel nesneniz olmuş olur. Detaylı bilgi için; Kernel object namespaces ve Object Namespaces konularına bakabilirsiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 7

Mesaj gönderen thelvaci »

Not olarak belirtmek isterim ki; zaten isimlendirilmiş kernel nesneleri başka process'lerin başka thread'leri tarafından açılabilir ve signaled/unsignaled durumlara sokulabilir. Eğer buna da engel olmak isterim ben derseniz o zaman genellikle bu tarz kernel nesnelerinde es geçtiğimiz güvenlik parametresi olan SECURITY_ATTRIBUTES 'u kullanmalısınız. Bu durumda, ilgili nesne için Acl/DAcl ayarları yapıp nesneyi koruma altına alabilirsiniz. ;)
Cevapla