MCPcopy Create free account
hub / github.com/rabbitstack/fibratus / getFileTypeFromVolumeInfo

Function getFileTypeFromVolumeInfo

pkg/fs/file.go:157–196  ·  view source on GitHub ↗
(filename string)

Source from the content-addressed store, hash-verified

155}
156
157func 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}

Callers 1

GetFileTypeFunction · 0.85

Calls 6

PathIsDirectoryFunction · 0.92
HandleMethod · 0.80
OpenMethod · 0.65
CloseMethod · 0.65
AddMethod · 0.65

Tested by

no test coverage detected