栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

golang,调用WinVolumeInformation winapi函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang,调用WinVolumeInformation winapi函数

包裹不安全

不安全的软件包包含绕过Go程序的类型安全的操作。

类型指针

type Pointer *ArbitraryType

指针表示指向任意类型的指针。指针类型有四个特殊操作,而其他类型则不可用。

1)任何类型的指针值都可以转换为Pointer。

2)指针可以转换为任何类型的指针值。

3)可以将uintptr转换为Pointer。

4)指针可以转换为uintptr。

因此,指针允许程序击败类型系统并读写任意存储器。使用时应格外小心。

您没有注意

unsafe.Pointer
“应格外小心” 的警告。

试试这个:

package mainimport (    "fmt"    "syscall"    "unsafe")func main() {    var RootPathName = `C:`    var VolumeNameBuffer = make([]uint16, syscall.MAX_PATH+1)    var nVolumeNameSize = uint32(len(VolumeNameBuffer))    var VolumeSerialNumber uint32    var MaximumComponentLength uint32    var FileSystemFlags uint32    var FileSystemNameBuffer = 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(RootPathName))),        uintptr(unsafe.Pointer(&VolumeNameBuffer[0])),        uintptr(nVolumeNameSize),        uintptr(unsafe.Pointer(&VolumeSerialNumber)),        uintptr(unsafe.Pointer(&MaximumComponentLength)),        uintptr(unsafe.Pointer(&FileSystemFlags)),        uintptr(unsafe.Pointer(&FileSystemNameBuffer[0])),        uintptr(nFileSystemNameSize),        0)    fmt.Println(ret, callErr, syscall.UTF16ToString(VolumeNameBuffer))}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号