"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je utiliser la fonction GetVolumeInformation dans GoLang pour récupérer le nom d'un volume de stockage sous Windows ?

Comment puis-je utiliser la fonction GetVolumeInformation dans GoLang pour récupérer le nom d'un volume de stockage sous Windows ?

Publié le 2024-10-31
Parcourir:362

How can I use the GetVolumeInformation function in GoLang to retrieve the name of a storage volume in Windows?

Comment utiliser la fonction GetVolumeInformation dans GoLang pour obtenir les noms de volumes

Lorsqu'ils travaillent avec des systèmes Windows, les développeurs ressentent souvent le besoin d'interagir avec le système de fichiers du système d'exploitation et récupérer des informations sur les volumes de stockage. Une fonction essentielle à cet effet est GetVolumeInformation, qui fournit des détails sur un volume de disque spécifié.

Dans cet article, nous explorons comment utiliser la fonction GetVolumeInformation dans GoLang pour déterminer le nom d'un volume de stockage particulier.

Utilisation de GetVolumeInformation dans GoLang

Pour récupérer le nom du volume à l'aide de la fonction GetVolumeInformation, nous devons respecter les étapes suivantes :

  1. Chargement de la bibliothèque Kernel32 : Tout d'abord, nous devons charger la bibliothèque "kernel32.dll", qui héberge la fonction GetVolumeInformation.
  2. Obtention du pointeur de fonction : Au sein de la bibliothèque kernel32, nous récupérons le pointeur de fonction pour GetVolumeInformationW. Cette fonction fonctionne avec des chaînes de caractères larges (UTF-16), ce qui nous permet de gérer les caractères Unicode.
  3. Préparation des arguments d'entrée : La fonction GetVolumeInformation nécessite plusieurs arguments d'entrée, tels que le chemin racine. nom du volume que nous voulons inspecter. Nous créons également des tampons pour recevoir le nom du volume, le numéro de série, le nom du système de fichiers et d'autres métadonnées.
  4. Appel de GetVolumeInformation : Une fois que nous avons préparé les arguments d'entrée, nous invoquons la fonction GetVolumeInformationW via appel système.Syscall9. Cette fonction prend plusieurs arguments et renvoie un code d'état.
  5. Gestion du résultat : Si l'exécution de la fonction réussit, nous pouvons accéder aux informations sur le volume, y compris le nom du volume stocké dans le tampon alloué.

Exemple de code

Voici un exemple d'extrait de code montrant comment utiliser la fonction GetVolumeInformation dans 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))
}

Considérations

Un aspect crucial à retenir lors de l'utilisation de GetVolumeInformation est qu'il fonctionne sur des chaînes de caractères larges (UTF-16). Par conséquent, nous devons nous assurer que toutes les chaînes transmises et renvoyées par la fonction sont au format UTF-16. Ne pas le faire peut entraîner des résultats inattendus.

Conclusion

La fonction GetVolumeInformation fournit un moyen efficace d'obtenir des informations complètes sur les volumes de stockage dans GoLang. En suivant les étapes décrites dans cet article, vous pouvez récupérer avec succès les noms de volumes et d'autres détails essentiels pour répondre aux besoins de votre application.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3