diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a6683df8..06c6af5c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -857,7 +857,7 @@ elseif(WIN32) src/detection/physicalmemory/physicalmemory_linux.c src/detection/netio/netio_windows.c src/detection/opengl/opengl_windows.c - src/detection/os/os_windows.cpp + src/detection/os/os_windows.c src/detection/packages/packages_windows.c src/detection/poweradapter/poweradapter_nosupport.c src/detection/processes/processes_windows.c @@ -1315,6 +1315,7 @@ elseif(WIN32) PRIVATE "wtsapi32" PRIVATE "imagehlp" PRIVATE "cfgmgr32" + PRIVATE "winbrand" ) elseif(FreeBSD) target_link_libraries(libfastfetch diff --git a/src/detection/os/os_windows.cpp b/src/detection/os/os_windows.c similarity index 65% rename from src/detection/os/os_windows.cpp rename to src/detection/os/os_windows.c index ef93ff40c..dda2004c5 100644 --- a/src/detection/os/os_windows.cpp +++ b/src/detection/os/os_windows.c @@ -1,51 +1,18 @@ -extern "C" { #include "os.h" #include "common/library.h" -} -#include "util/windows/unicode.hpp" -#include "util/windows/wmi.hpp" +#include "util/windows/unicode.h" #include "util/stringUtils.h" -static const char* getOsNameByWmi(FFstrbuf* osName) -{ - FFWmiQuery query(L"SELECT Caption FROM Win32_OperatingSystem"); - if(!query) - return "Query WMI service failed"; - - if(FFWmiRecord record = query.next()) - { - if(auto vtCaption = record.get(L"Caption")) - { - ffStrbufSetWSV(osName, vtCaption.get()); - ffStrbufTrimRight(osName, ' '); - return NULL; - } - return "Get Caption failed"; - } - - return "No WMI result returned"; -} +#include PWSTR WINAPI BrandingFormatString(PCWSTR format); -static const char* getOsNameByWinbrand(FFstrbuf* osName) -{ - //https://dennisbabkin.com/blog/?t=how-to-tell-the-real-version-of-windows-your-app-is-running-on#ver_string - FF_LIBRARY_LOAD(winbrand, "dlopen winbrand" FF_LIBRARY_EXTENSION " failed", "winbrand" FF_LIBRARY_EXTENSION, 1); - FF_LIBRARY_LOAD_SYMBOL_MESSAGE(winbrand, BrandingFormatString); - - const wchar_t* rawName = ffBrandingFormatString(L"%WINDOWS_LONG%"); - ffStrbufSetWS(osName, rawName); - GlobalFree((HGLOBAL)rawName); - return NULL; -} - -extern "C" void ffDetectOSImpl(FFOSResult* os) { - if(getOsNameByWinbrand(&os->variant) && getOsNameByWmi(&os->variant)) - return; - + //https://dennisbabkin.com/blog/?t=how-to-tell-the-real-version-of-windows-your-app-is-running-on#ver_string + const wchar_t* rawName = BrandingFormatString(L"%WINDOWS_LONG%"); + ffStrbufSetWS(&os->variant, rawName); + GlobalFree((HGLOBAL)rawName); ffStrbufTrimRight(&os->variant, ' '); //WMI returns the "Microsoft" prefix while BrandingFormatString doesn't. Make them consistent.