diff --git a/src/detection/disk/disk.c b/src/detection/disk/disk.c index 325eab362..7d469c2ba 100644 --- a/src/detection/disk/disk.c +++ b/src/detection/disk/disk.c @@ -32,6 +32,7 @@ void ffDetectDiskWithStatvfs(const char* folderPath, struct statvfs* fs, FFDiskR result->used = result->total - (fs->f_bavail * fs->f_frsize); result->files = (uint32_t) (fs->f_files - fs->f_ffree); + result->removable = false; //To be set at other place } bool ffDiskDetectDiskFolders(FFinstance* instance, FFlist* folders) diff --git a/src/detection/disk/disk.h b/src/detection/disk/disk.h index 06b00b666..a68347fde 100644 --- a/src/detection/disk/disk.h +++ b/src/detection/disk/disk.h @@ -11,6 +11,7 @@ typedef struct FFDiskResult uint64_t used; uint64_t total; uint32_t files; + bool removable; FFstrbuf error; } FFDiskResult; diff --git a/src/detection/disk/disk_apple.m b/src/detection/disk/disk_apple.m index 391ec457f..b79d03e86 100644 --- a/src/detection/disk/disk_apple.m +++ b/src/detection/disk/disk_apple.m @@ -20,7 +20,9 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders) if(removable.boolValue && !instance->config.diskRemovable) continue; - ffDetectDiskWithStatvfs([url.relativePath cStringUsingEncoding:NSUTF8StringEncoding], NULL, (FFDiskResult*)ffListAdd(folders)); + FFDiskResult* folder = (FFDiskResult*)ffListAdd(folders); + ffDetectDiskWithStatvfs([url.relativePath cStringUsingEncoding:NSUTF8StringEncoding], NULL, folder); + folder->removable = removable.boolValue; } return NULL; diff --git a/src/detection/disk/disk_windows.cpp b/src/detection/disk/disk_windows.cpp index 3a7fb20a0..dce2f92eb 100644 --- a/src/detection/disk/disk_windows.cpp +++ b/src/detection/disk/disk_windows.cpp @@ -7,7 +7,10 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders) { FF_UNUSED(instance); - IEnumWbemClassObject* pEnumerator = ffQueryWmi(L"SELECT Name, DriveType, FreeSpace, Size FROM Win32_LogicalDisk", nullptr); + const wchar_t* query = instance->config.diskRemovable + ? L"SELECT Name, DriveType, FreeSpace, Size FROM Win32_LogicalDisk" + : L"SELECT Name, FreeSpace, Size FROM Win32_LogicalDisk WHERE DriveType != 2"; + IEnumWbemClassObject* pEnumerator = ffQueryWmi(query, nullptr); if(!pEnumerator) return "Query WMI service failed"; @@ -17,11 +20,6 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders) while(SUCCEEDED(pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn)) && uReturn != 0) { - uint64_t driveType; - ffGetWmiObjUnsigned(pclsObj, L"DriveType", &driveType); - if(driveType == 2 && !instance->config.diskRemovable) - continue; - FFDiskResult* folder = (FFDiskResult*)ffListAdd(folders); ffStrbufInit(&folder->path); @@ -32,6 +30,15 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders) ffGetWmiObjUnsigned(pclsObj, L"FreeSpace", &free); folder->used = folder->total - free; + if(instance->config.diskRemovable) + { + uint64_t driveType; + ffGetWmiObjUnsigned(pclsObj, L"DriveType", &driveType); + folder->removable = driveType == 2; + } + else + folder->removable = false; + folder->files = 0; //Unsupported ffStrbufInit(&folder->error); diff --git a/src/modules/disk.c b/src/modules/disk.c index 22751e097..8f97f54ba 100644 --- a/src/modules/disk.c +++ b/src/modules/disk.c @@ -37,7 +37,7 @@ static void printFolder(FFinstance* instance, FFDiskResult* folder) if(instance->config.disk.outputFormat.length == 0) { ffPrintLogoAndKey(instance, key.chars, 0, NULL); - printf("%s / %s (%u%%)\n", usedPretty.chars, totalPretty.chars, percentage); + printf("%s / %s (%u%%)%s\n", usedPretty.chars, totalPretty.chars, percentage, folder->removable ? " [Removable]" : ""); } else {