FindFirstVolume (kernel32)
Last changed: -173.21.208.49

.
Summary

C# Signature:

[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr FindFirstVolume([Out] StringBuilder lpszVolumeName,
   uint cchBufferLength);

User-Defined Types:

None.

VB.NET Signature:

  Declare Function FindFirstVolumeW Lib "kernel32.dll" (ByVal lpszVolumeName As System.Text.StringBuilder, ByVal cchBufferLength As UInteger) As IntPtr

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern FindVolumeSafeHandle FindFirstVolume([Out] StringBuilder lpszVolumeName, uint cchBufferLength);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool FindNextVolume(FindVolumeSafeHandle hFindVolume, [Out] StringBuilder lpszVolumeName, uint cchBufferLength);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool FindVolumeClose(IntPtr hFindVolume);

    public class FindVolumeSafeHandle : SafeHandleZeroOrMinusOneIsInvalid
    {
        private FindVolumeSafeHandle()
        : base(true)
        {
        }

        public FindVolumeSafeHandle(IntPtr preexistingHandle, bool ownsHandle)
        : base(ownsHandle)
        {
        SetHandle(preexistingHandle);
        }

        protected override bool ReleaseHandle()
        {
        return FindVolumeClose(handle);
        }
    }

    public static StringCollection GetVolumes()
    {
        const uint bufferLength = 1024;
        StringBuilder volume = new StringBuilder((int)bufferLength, (int)bufferLength);
        StringCollection ret = new StringCollection();

        using (FindVolumeSafeHandle volumeHandle = FindFirstVolume(volume, bufferLength))
        {
        if (volumeHandle.IsInvalid)
        {
            throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
        }

        do
        {
            ret.Add(volume.ToString());
        } while (FindNextVolume(volumeHandle, volume, bufferLength));

        return ret;
        }
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation

See also:

FindNextVolume

FindVolumeClose