「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Windows でストレージ ボリュームの名前を取得するには、GoLang の Get VolumeInformation 関数を使用するにはどうすればよいですか?

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

2024 年 10 月 31 日公開
ブラウズ:877

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

コード例

次のコード スニペットの例は、次のコード スニペットの例です。 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))
}

考慮事項

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

結論

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3