func getLogicalDriveStrings()

in metric/system/diskio/diskstat_windows_helper.go [151:176]


func getLogicalDriveStrings() ([]logicalDrive, error) {
	lpBuffer := make([]byte, 254)
	r1, _, e1 := syscall.SyscallN(procGetLogicalDriveStringsW.Addr(), uintptr(len(lpBuffer)), uintptr(unsafe.Pointer(&lpBuffer[0])))
	if r1 == 0 {
		err := e1
		if e1 != errorSuccess {
			err = syscall.EINVAL
		}
		return nil, err
	}
	logicalDrives := make([]logicalDrive, 0, len(lpBuffer))
	for _, v := range lpBuffer {
		if v >= 65 && v <= 90 {
			s := string(v)
			if s == "A" || s == "B" {
				continue
			}
			path := s + ":"
			drive := logicalDrive{path, `\\.\` + path}
			if isValidLogicalDrive(path) {
				logicalDrives = append(logicalDrives, drive)
			}
		}
	}
	return logicalDrives, nil
}