SetVolumeLabel (kernel32)
Last changed: -82.242.102.192

.
Summary
Sets the label of a file system volume.

C# Signature:

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool SetVolumeLabel(string lpRootPathName, string lpVolumeName);

VB.NET Signature:

<DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SetVolumeLabel(ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Boolean
End Function

User-Defined Types:

None.

Notes:

This API is unnecessary. Class System.IO.DriveInfo can both get and set the given drive label. See http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx for more info.

^^^^^^^^ Unfortunately the DriveInfo Class does NOT support Network drives.

^^^^^^^^ Unfortunately the DriveInfo Class only handles volume with drive letter.

Tips & Tricks:

Please add some!

C# Sample Code:

using System;
using System.Runtime.InteropServices;

namespace PInvoke.Test
{

    class NameChanger
    {
        [DllImport("kernel32.dll")]
        static extern bool SetVolumeLabel(string lpRootPathName, string lpVolumeName);

        [STAThread]
        public static void Main()
        {
            if(SetVolumeLabel("C:\\","PInvokeC Drive"))
                Console.WriteLine("Name Changed");
            else
                Console.WriteLine("Unable to change");
        }
    }
}

VB.NET Sample Code:

Imports System.ComponentModel
Imports System.Runtime.InteropServices

''' <summary>
''' Managed wrapper for changing the drive label
''' </summary>
Public Module VolumeLabel
    <DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Function SetVolumeLabel(ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Boolean
    End Function

    Public Property DriveLabel(ByVal DrivePath As String) As String
        Get
            Return Dir(DrivePath, FileAttribute.Volume)
        End Get
        Set(ByVal value As String)
            If Not SetVolumeLabel(DrivePath, value) Then Throw New Win32Exception(Marshal.GetLastWin32Error())
        End Set
    End Property
End Module

Alternative Managed API:

Dim Drive As New System.IO.DriveInfo("C:\")
MessageBox.Show(Drive.VolumeLabel & " [" & Drive.Name & "]")
Drive.VolumeLabel = "Test volume label"

See http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx for more info.

Documentation