用gopsutil/disk库编写脚本,下列代码执行报错Access is denied:
stats, err := disk.IOCounters("C:")if err != nil {fmt.Println("Error:", err)return
切换到管理员模式仍然报错,开始排查。
1 排查到是引用库中的这部分报错
h, err := windows.CreateFile(syscall.StringToUTF16Ptr(szDevice), 0, windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE, nil, windows.OPEN_EXISTING, 0, 0)if err != nil {if err == windows.ERROR_FILE_NOT_FOUND {continue}return drivemap, err}
2 打印,发现是走到 M盘时候报错,怀疑是M盘的问题,因为我的电脑没有M盘
\\.\C:
\\.\D:
\\.\M:
Error: Access is denied.
3 查看磁盘列表,发现逻辑分区,比实际分区多出一个M,可以确定是这个导致的
> wmic logicaldisk get caption
Caption
C:
D:
M:Get-WmiObject Win32_Volume | Select-Object DriveLetter, DeviceID, FileSystem, LabelDriveLetter DeviceID FileSystem Label
----------- -------- ---------- -----
C: \\?\Volume{865b8944-eee6-4637-9188-1ac95c53f5c2}\ NTFS Windows\\?\Volume{55a26f03-6b71-4efd-9176-3ae0567f14b5}\ NTFS WinRE_DRV
D: \\?\Volume{5824d226-b7e1-4721-964c-4fcb8ab70d79}\ NTFS Data\\?\Volume{31b8e965-f7e1-47c7-9d3a-554a3455c560}\ FAT32 SYSTEM
4