When working with Windows systems, developers often find the need to interact with the operating system's file system and retrieve information about storage volumes. One essential function for this purpose is GetVolumeInformation, which provides details about a specified disk volume.
In this article, we explore how to utilize the GetVolumeInformation function in GoLang to ascertain the name of a particular storage volume.
To retrieve the volume name using the GetVolumeInformation function, we need to adhere to the following steps:
Here's an example code snippet demonstrating how to use the GetVolumeInformation function in GoLang:
package main import ( "fmt" "syscall" "unsafe" ) func main() { var lpRootPathName = "C:\\" var lpVolumeNameBuffer = make([]uint16, syscall.MAX_PATH 1) var nVolumeNameSize = uint32(len(lpVolumeNameBuffer)) var lpVolumeSerialNumber uint32 var lpMaximumComponentLength uint32 var lpFileSystemFlags uint32 var lpFileSystemNameBuffer = make([]uint16, 255) var nFileSystemNameSize uint32 = syscall.MAX_PATH 1 kernel32, _ := syscall.LoadLibrary("kernel32.dll") getVolume, _ := syscall.GetProcAddress(kernel32, "GetVolumeInformationW") var nargs uintptr = 8 ret, _, callErr := syscall.Syscall9(uintptr(getVolume), nargs, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpRootPathName))), uintptr(unsafe.Pointer(&lpVolumeNameBuffer[0])), uintptr(nVolumeNameSize), uintptr(unsafe.Pointer(&lpVolumeSerialNumber)), uintptr(unsafe.Pointer(&lpMaximumComponentLength)), uintptr(unsafe.Pointer(&lpFileSystemFlags)), uintptr(unsafe.Pointer(&lpFileSystemNameBuffer[0])), uintptr(nFileSystemNameSize), 0) fmt.Println(ret, callErr, syscall.UTF16ToString(lpVolumeNameBuffer)) }
One crucial aspect to remember when using GetVolumeInformation is that it operates on wide character strings (UTF-16). As a result, we must ensure that all strings passed to and returned from the function are in UTF-16 format. Failure to do so may lead to unexpected results.
The GetVolumeInformation function provides an effective way to obtain comprehensive information about storage volumes in GoLang. By following the steps outlined in this article, you can successfully retrieve volume names and other essential details to cater to your application's needs.
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3