在使用Windows系統時,開發者經常會發現需要與作業系統的檔案系統進行交互,檢索有關儲存卷的資訊。為此目的的一個重要函數是 GetVolumeInformation,它提供有關指定磁碟區的詳細資訊。
在本文中,我們將探討如何利用 GoLang 中的 GetVolumeInformation 函數來決定特定儲存磁碟區的名稱。
要使用GetVolumeInformation 函式擷取磁碟區名稱,我們需要遵循下列步驟:
下面是一個範例程式碼片段,示範如何在 GoLang 中使用 GetVolumeInformation 函數:
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)) }
使用 GetVolumeInformation 時要記住的一個重要方面是它在寬字串 (UTF-16) 上運行。因此,我們必須確保傳遞給函數和從函數傳回的所有字串均為 UTF-16 格式。否則可能會導致意想不到的結果。
GetVolumeInformation 函數提供了一種有效的方法來獲取有關 GoLang 中存儲卷的全面信息。透過執行本文中概述的步驟,您可以成功檢索磁碟區名稱和其他基本詳細信息,以滿足您的應用程式的需求。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3