none
Usb flash diski çıkartmak/enerjisini kesmek RRS feed

  • Soru

  • Takılı olan bir usb flash diski (eject etmem) çıkartmam gerekiyor msdn deki, stackoverflow daki, codeproject deki ve internette olan mevcut bütün yöntemleri win10 işletim sisteminde denediğim halde başarılı olamadım.çalışan güncel bir yöntem varsa paylaşırsanız çok sevinirim.Teşekkürler.
    10 Ekim 2018 Çarşamba 07:48

Yanıtlar

  • USB diski fiziki olarak çıkarmadığınız sürece Bilgisayarım penceresinin içerisinde görünmesi normaldir.

    Kodlar,

            const int OPEN_EXISTING = 3;
            const uint GENERIC_READ = 0x80000000;
            const uint GENERIC_WRITE = 0x40000000;
            const uint IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
    
            [DllImport("kernel32")]
            private static extern int CloseHandle(IntPtr handle);
    
            [DllImport("kernel32")]
            private static extern int DeviceIoControl(IntPtr deviceHandle, uint ioControlCode, IntPtr inBuffer, int inBufferSize, IntPtr outBuffer, int outBufferSize, ref int bytesReturned, IntPtr overlapped);
    
            [DllImport("kernel32")]
            private static extern IntPtr CreateFile(string filename, uint desiredAccess, uint shareMode, IntPtr securityAttributes, int creationDisposition, int flagsAndAttributes, IntPtr templateFile);
    
            static void EjectDrive(char driveLetter)
            {
                IntPtr handle = CreateFile($@"\\.\{driveLetter}:", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
                if ((long)handle == -1)
                {
                    MessageBox.Show($"HATA: {driveLetter} sürücüsü açılamadı.");
                    return;
                }
                int dummy = 0;
                DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0, IntPtr.Zero, 0, ref dummy, IntPtr.Zero);
                CloseHandle(handle);
                MessageBox.Show($"{driveLetter} sürücüsü güvenle çıkarılabilir.");
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                EjectDrive(textBox1.Text.Trim()[0]);
            }
    

    Bu komutlarla "Diskinizi güvenle çıkarabilirsiniz" aşamasına gelinir.

    Sonra usb diski de bilgisayarınızdan çıkarmalısınız. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen serdar35csharp 10 Ekim 2018 Çarşamba 12:23
    10 Ekim 2018 Çarşamba 11:43

Tüm Yanıtlar

  • Başarılı olmadığınız yöntemlerde bir hata aldınız mı? Genellikle böyle işler yönetici yetkisi gerektirir.

    www.cihanyakar.com

    10 Ekim 2018 Çarşamba 09:19
  • Çıkartıyormuş gibi yapıyor.diske ulaşamıyorsun ama aslında çıkartmıyor.bilgisayarımda yine görünüyor.orada sağ tıklayıp çıkart deyince o malum ses çıkıp çıkartıldı diye klasik bilgiyi veriyor yine.yani tam çıkartmıyorda ulaşımını engelliyor.denemediğim bir devcon exe kaldı onunla uğraşıyorum şimdi.amacım manuel mouse ile diski çıkart deyince yapılan işlemi yapmak.
    10 Ekim 2018 Çarşamba 09:52
  • USB diski fiziki olarak çıkarmadığınız sürece Bilgisayarım penceresinin içerisinde görünmesi normaldir.

    Kodlar,

            const int OPEN_EXISTING = 3;
            const uint GENERIC_READ = 0x80000000;
            const uint GENERIC_WRITE = 0x40000000;
            const uint IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
    
            [DllImport("kernel32")]
            private static extern int CloseHandle(IntPtr handle);
    
            [DllImport("kernel32")]
            private static extern int DeviceIoControl(IntPtr deviceHandle, uint ioControlCode, IntPtr inBuffer, int inBufferSize, IntPtr outBuffer, int outBufferSize, ref int bytesReturned, IntPtr overlapped);
    
            [DllImport("kernel32")]
            private static extern IntPtr CreateFile(string filename, uint desiredAccess, uint shareMode, IntPtr securityAttributes, int creationDisposition, int flagsAndAttributes, IntPtr templateFile);
    
            static void EjectDrive(char driveLetter)
            {
                IntPtr handle = CreateFile($@"\\.\{driveLetter}:", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
                if ((long)handle == -1)
                {
                    MessageBox.Show($"HATA: {driveLetter} sürücüsü açılamadı.");
                    return;
                }
                int dummy = 0;
                DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0, IntPtr.Zero, 0, ref dummy, IntPtr.Zero);
                CloseHandle(handle);
                MessageBox.Show($"{driveLetter} sürücüsü güvenle çıkarılabilir.");
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                EjectDrive(textBox1.Text.Trim()[0]);
            }
    

    Bu komutlarla "Diskinizi güvenle çıkarabilirsiniz" aşamasına gelinir.

    Sonra usb diski de bilgisayarınızdan çıkarmalısınız. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen serdar35csharp 10 Ekim 2018 Çarşamba 12:23
    10 Ekim 2018 Çarşamba 11:43
  • cevap için teşekkürler.ancak bilgisayarımdan sağ tıklayıp çıkar deyince yada saatin ordan çıkar diyince bilgisayarımda gözükmüyor.bir ses çıkartıp komple sanırım enerjisini kesiyor.Bu kod enteresan bir şekilde çalıştı.teşekkürler.
    10 Ekim 2018 Çarşamba 12:23