Windows でストレージ ボリュームの名前を取得するには、GoLang の Get VolumeInformation 関数を使用するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-25 12:40:30
オリジナル
970 人が閲覧しました

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

GoLang で GetVolumeInformation 関数を使用してボリューム名を取得する方法

Windows システムを使用する場合、開発者はオペレーティング システムのファイル システムと対話する必要があることがよくあります。ストレージボリュームに関する情報を取得します。この目的に不可欠な関数の 1 つは、指定されたディスク ボリュームに関する詳細を提供する GetVolumeInformation です。

この記事では、GoLang で GetVolumeInformation 関数を使用して特定のストレージ ボリュームの名前を確認する方法を検討します。

GoLang での GetVolumeInformation の使用

GetVolumeInformation 関数を使用してボリューム名を取得するには、次の手順に従う必要があります:

  1. Kernel32 ライブラリのロード: まず、GetVolumeInformation 関数を含む「kernel32.dll」ライブラリをロードする必要があります。
  2. 関数ポインタの取得: kernel32 ライブラリ内で、次の関数ポインタを取得します。ボリューム情報を取得W.この関数はワイド文字列 (UTF-16) で動作するため、Unicode 文字を処理できます。
  3. 入力引数の準備: GetVolumeInformation 関数には、ルート パスなどのいくつかの入力引数が必要です。検査するボリュームの名前。また、ボリューム名、シリアル番号、ファイル システム名、およびその他のメタデータを受信するためのバッファーも作成します。
  4. GetVolumeInformation の呼び出し: 入力引数を準備したら、次の方法で GetVolumeInformationW 関数を呼び出します。 syscall.Syscall9。この関数は複数の引数を受け取り、ステータス コードを返します。
  5. 結果の処理: 関数の実行が成功すると、ボリュームに保存されているボリューム名などの情報にアクセスできます。割り当てられたバッファ。

コード例

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 を使用する際に覚えておくべき重要な点の 1 つは、Get VolumeInformation がワイド文字列 (UTF-16) を操作するということです。そのため、関数に渡される文字列と関数から返される文字列がすべて UTF-16 形式であることを確認する必要があります。そうしないと、予期しない結果が生じる可能性があります。

結論

GetVolumeInformation 関数は、GoLang のストレージ ボリュームに関する包括的な情報を取得する効果的な方法を提供します。この記事で説明されている手順に従うことで、ボリューム名やその他の重要な詳細を正常に取得して、アプリケーションのニーズを満たすことができます。

以上がWindows でストレージ ボリュームの名前を取得するには、GoLang の Get VolumeInformation 関数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!