Delphi Can

Orjinalini görmek için tıklayınız: USB HDD Aktif - Pasif
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba Canlar

Benim birtane veritabanı yedekleme programım var bu arkadaş gidiyor günün belli bir saatinde veritabanının yedeğini usb hdd ye alıyor
güzel buraya kadar hiç bir sıkıntı yok. 

İsteğim ve yapmak istediğim şudur 

1-usb hdd bilgisayarda sürekli takılı olsun
2-usb hdd windows tarafından kapalı konumda dursun programın yedek alma zamanı gelince ilk önce usb hdd yi windows ta aktif etsin 
3-usb hdd nin açıldığındaki partition a yedeklemesini alsın daha sonra windows bağlantısını kessin bu şekildede dışarıdan gelen saldırılara karşı şifreleme programları gibi virüslere karşı savunmasız olmayacaktır diye düşünüyorum
4-neler yapabilirim siz değerli üstadlarımdan bilgiler bekliyorum.
Merhaba, bu konuyu biraz araştırdım, C ile yapılabilir diye gördüm birkaç yerde, şu linkten
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
şu linke
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. atıf yapmışlar.
Fakat genelde harici bir cihaz ile bunu yapın demişler. Bencede en güvenli yol sanırım harici bir cihaz ile USB belleği kapatıp açmaktır.
@esistem'e katılıyorum. 

AliExpress'de çok uygun fiyata Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. ürün var.

Bir USB'den cihazın şebeke gücünü kesip geri açabilirsiniz. Aynı USB HUB ile gücü gelen HDD'nin hazır oluşunu HID mesajından takip eder yedeklerinizi alırsınız. 

Elinizden geliyorsa 3.5"  USB sürücü kasasına sığar gibi görünüyor, kapağını açıp içine koyabilirsiniz de. 

Bu mesajı yazmayı gerekli bulduğum asıl meseleye geleyim:
Unutmamanız gereken çok önemli bir unsur, yedekten sonra gücü kesmeden önce güvenli kaldır işlemi benzerini yaparak cache bellekteki tüm verinin yazıldığına emin olun. 

Fayda ararken kaos yaratmayalım. Smile
Öncelikle verdiğiniz cevaplar için çok teşekkür ederim ama daha çok istediğim şey delphi kodu ile git 2 nolu usb portunu aç yada kapat yapan bir kod olsa çok daha iyi olurdu. böyle bir şey yokmu hatta o portu açmak için şifre falan abartıyor muyum
git 2 nolu usb portunu aç
şifre giriniz şifre şafak
şifre doğrulaması yapıldı 2 nolu usb portu açık
git 2 nolu usb portunu kapat
şifre giriniz şifre şafak
şifre doğrulaması yapıldı 2 nolu usb portu kapandı gibi
Siparişe girmeden önce Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. işinizi görüp görmeyeceğini soralım.  Idea
Ben olsam,

Arduino ve role alırım. Seri port üzerinden haberleşerek HDD bağlantısını kesip açarım. Smile
Port kapatmaya ilişkin sorunu şöyle açayım

Belirli bir USB portunu erişime kapatmak bildiğim kadarıyla mümkün değil. Çünkü USB adı üzerinde universal serial bus. 

Tüm USB sistemini registry üzerinden bloke etme imkanı olabilir bu durumda da ADMIN yetkisi var olması gerekir. 

Bir de yazılımımız sürekli açık olacaksa (sağlayabilirseniz) her cihazın VendorID ve ProductID  (VID ve PID) ile yedek diskinizi takip edebilirsiniz. Verdiğim linkteki fonksiyonlar ile de işiniz görüleceği çerçevede yolu açar veya hemen eject ettirirsiniz.
1-) Registry de bir değeri değiştirip USB flash disklere erişimi engelleyebiliyorsun. USB harddiskler ve yazıcılar ve diğer aygıtlar çalışıyor. Belki bu genişletilebilir yada daraltılabilir. Bazı nternet kafeler müzik/film/oyun kopyalanmasın diye kullanıyorlardı.
2-) Windows ta bir sürücüyü sürücü harfi olarak gizleyebiliyoruz. Örneğin D:\ sürücüsü bilgisayarımda veya başka yerde gözükmüyor. Adres satırına C:\ yazarak giriliyor. Sanırım bazı uygulamalar bu sürücüye erişmiyorlardı. Belki işini görebilir.

Her iki yöntemi de kullandım şuan hatırlamıyorum.
(26-03-2018, Saat: 13:07)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Siparişe girmeden önce Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. işinizi görüp görmeyeceğini soralım.  Idea

bu linkteki  aşağıdaki kodlar usb portuna erişimi engelledi ve işimi gördü peki tekrar aktif etmem gerektiği zaman ne yapmam gerekir yine hiç bir bilgim yok yardımcı olabilirmisiniz.


function OpenVolume(ADrive: char): THandle;
var
  RootName, VolumeName: string;
  AccessFlags: DWORD;
begin
  RootName := ADrive + ':\'; (* '\'' // keep SO syntax highlighting working *)
  case GetDriveType(PChar(RootName)) of
    DRIVE_REMOVABLE:
      AccessFlags := GENERIC_READ or GENERIC_WRITE;
    DRIVE_CDROM:
      AccessFlags := GENERIC_READ;
  else
    Result := INVALID_HANDLE_VALUE;
    exit;
  end;
  VolumeName := Format('\\.\%s:', [ADrive]);
  Result := CreateFile(PChar(VolumeName), AccessFlags,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  if Result = INVALID_HANDLE_VALUE then
    RaiseLastWin32Error;
end;

function LockVolume(AVolumeHandle: THandle): boolean;
const
  LOCK_TIMEOUT = 10 * 1000; // 10 Seconds
  LOCK_RETRIES = 20;
  LOCK_SLEEP = LOCK_TIMEOUT div LOCK_RETRIES;

// #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
  FSCTL_LOCK_VOLUME = (9 shl 16) or (0 shl 14) or (6 shl 2) or 0;
var
  Retries: integer;
  BytesReturned: Cardinal;
begin
  for Retries := 1 to LOCK_RETRIES do begin
    Result := DeviceIoControl(AVolumeHandle, FSCTL_LOCK_VOLUME, nil, 0,
      nil, 0, BytesReturned, nil);
    if Result then
      break;
    Sleep(LOCK_SLEEP);
  end;
end;

function DismountVolume(AVolumeHandle: THandle): boolean;
const
// #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
  FSCTL_DISMOUNT_VOLUME = (9 shl 16) or (0 shl 14) or (8 shl 2) or 0;
var
  BytesReturned: Cardinal;
begin
  Result := DeviceIoControl(AVolumeHandle, FSCTL_DISMOUNT_VOLUME, nil, 0,
    nil, 0, BytesReturned, nil);
  if not Result then
    RaiseLastWin32Error;
end;

function PreventRemovalOfVolume(AVolumeHandle: THandle;
  APreventRemoval: boolean): boolean;
const
// #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
  IOCTL_STORAGE_MEDIA_REMOVAL = ($2d shl 16) or (1 shl 14) or ($201 shl 2) or 0;
type
  TPreventMediaRemoval = record
    PreventMediaRemoval: BOOL;
  end;
var
  BytesReturned: Cardinal;
  PMRBuffer: TPreventMediaRemoval;
begin
  PMRBuffer.PreventMediaRemoval := APreventRemoval;
  Result := DeviceIoControl(AVolumeHandle, IOCTL_STORAGE_MEDIA_REMOVAL,
    @PMRBuffer, SizeOf(TPreventMediaRemoval), nil, 0, BytesReturned, nil);
  if not Result then
    RaiseLastWin32Error;
end;

function AutoEjectVolume(AVolumeHandle: THandle): boolean;
const
// #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
  IOCTL_STORAGE_EJECT_MEDIA = ($2d shl 16) or (1 shl 14) or ($202 shl 2) or 0;
var
  BytesReturned: Cardinal;
begin
  Result := DeviceIoControl(AVolumeHandle, IOCTL_STORAGE_EJECT_MEDIA, nil, 0,
    nil, 0, BytesReturned, nil);
  if not Result then
    RaiseLastWin32Error;
end;

function EjectVolume(ADrive: char): boolean;
var
  VolumeHandle: THandle;
begin
  Result := FALSE;
  // Open the volume
  VolumeHandle := OpenVolume(ADrive);
  if VolumeHandle = INVALID_HANDLE_VALUE then
    exit;
  try
    // Lock and dismount the volume
    if LockVolume(VolumeHandle) and DismountVolume(VolumeHandle) then begin
      // Set prevent removal to false and eject the volume
      if PreventRemovalOfVolume(VolumeHandle, FALSE) then
        AutoEjectVolume(VolumeHandle);
    end;
  finally
    // Close the volume so other processes can use the drive
    CloseHandle(VolumeHandle);
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
EjectVolume('F');
ShowMessage(SysErrorMessage(GetLastError()));
end;
Merhaba.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. bir göz atmayı isteyebilirsin. 
Bu sayede Microsoft DevCon.EXE dosyasını kullanarak basit bir CMD batch dosyası ile enable / disable yapmayı deneyebilirsin.

Delphi ile yazılım geliştirmene gerek kalmaz, sizin için iyi niyetli olarak yapabileceğim kolaylık bununla sınırlı.