(filename string)
| 155 | } |
| 156 | |
| 157 | func getFileTypeFromVolumeInfo(filename string) FileType { |
| 158 | f, err := os.Open(filename) |
| 159 | if err != nil { |
| 160 | return Other |
| 161 | } |
| 162 | defer f.Close() |
| 163 | |
| 164 | queryVolumeCalls.Add(1) |
| 165 | |
| 166 | var ( |
| 167 | iosb windows.IO_STATUS_BLOCK |
| 168 | dev sys.FileFsDeviceInformation |
| 169 | ) |
| 170 | err = sys.NtQueryVolumeInformationFile( |
| 171 | windows.Handle(f.Fd()), |
| 172 | &iosb, |
| 173 | uintptr(unsafe.Pointer(&dev)), |
| 174 | uint32(unsafe.Sizeof(dev)), |
| 175 | sys.FileFsDeviceInformationClass, |
| 176 | ) |
| 177 | if err != nil { |
| 178 | return Other |
| 179 | } |
| 180 | switch dev.Type { |
| 181 | case deviceCDROM, deviceCDROMFs, deviceController, |
| 182 | deviceDatalink, deviceDFS, deviceDisk, deviceDiskFs: |
| 183 | if sys.PathIsDirectory(filename) { |
| 184 | return Directory |
| 185 | } |
| 186 | return Regular |
| 187 | case devConsole: |
| 188 | return Console |
| 189 | case devMailslot: |
| 190 | return Mailslot |
| 191 | case devNamedPipe: |
| 192 | return Pipe |
| 193 | default: |
| 194 | return Other |
| 195 | } |
| 196 | } |
no test coverage detected