|
8 | 8 | *
|
9 | 9 | * C++ VM detection library
|
10 | 10 | *
|
11 |
| - * - Made by: @kernelwernel (https://github.com/kernelwernel) |
| 11 | + * - Made by: kernelwernel (https://github.com/kernelwernel) |
12 | 12 | * - Contributed by:
|
13 | 13 | * - Requiem (https://github.com/NotRequiem)
|
14 | 14 | * - Alex (https://github.com/greenozon)
|
15 | 15 | * - Marek Knápek (https://github.com/MarekKnapek)
|
16 | 16 | * - Vladyslav Miachkov (https://github.com/fameowner99)
|
17 | 17 | * - Alan Tse (https://github.com/alandtse)
|
18 | 18 | * - Georgii Gennadev (https://github.com/D00Movenok)
|
| 19 | + * - utoshu (https://github.com/utoshu) |
19 | 20 | * - Repository: https://github.com/kernelwernel/VMAware
|
20 | 21 | * - Docs: https://github.com/kernelwernel/VMAware/docs/documentation.md
|
21 | 22 | * - Full credits: https://github.com/kernelwernel/VMAware#credits-and-contributors-%EF%B8%8F
|
@@ -439,6 +440,7 @@ struct VM {
|
439 | 440 | WSL_PROC,
|
440 | 441 | ANYRUN_DRIVER,
|
441 | 442 | ANYRUN_DIRECTORY,
|
| 443 | + GPU_CHIPTYPE, |
442 | 444 |
|
443 | 445 | // start of settings technique flags (THE ORDERING IS VERY SPECIFIC HERE AND MIGHT BREAK SOMETHING IF RE-ORDERED)
|
444 | 446 | NO_MEMO,
|
@@ -9128,6 +9130,54 @@ struct VM {
|
9128 | 9130 | }
|
9129 | 9131 |
|
9130 | 9132 |
|
| 9133 | + /** |
| 9134 | + * @brief Use wmic to get the GPU/videocontrollers chip type. |
| 9135 | + * @category Windows |
| 9136 | + * @author utoshu |
| 9137 | + */ |
| 9138 | + [[nodiscard]] static bool gpu_chiptype() try { |
| 9139 | +#if (!MSVC) |
| 9140 | + return false; |
| 9141 | +#else |
| 9142 | + std::string command = "wmic path win32_videocontroller get videoprocessor"; |
| 9143 | + std::string result = ""; |
| 9144 | + |
| 9145 | + FILE* pipe = _popen(command.c_str(), "r"); |
| 9146 | + if (!pipe) { |
| 9147 | + debug("GPU_CHIPTYPE: failed to run wmic command"); |
| 9148 | + return false; |
| 9149 | + } |
| 9150 | + |
| 9151 | + char buffer[128]; |
| 9152 | + while (!feof(pipe)) { |
| 9153 | + if (fgets(buffer, 128, pipe) != NULL) |
| 9154 | + result += buffer; |
| 9155 | + } |
| 9156 | + _pclose(pipe); |
| 9157 | + |
| 9158 | + std::transform(result.begin(), result.end(), result.begin(), ::tolower); |
| 9159 | + |
| 9160 | + if (util::find(result, "vmware")) { |
| 9161 | + return core::add(VMWARE); |
| 9162 | + } |
| 9163 | + |
| 9164 | + if (util::find(result, "virtualbox")) { |
| 9165 | + return core::add(VBOX); |
| 9166 | + } |
| 9167 | + |
| 9168 | + if (util::find(result, "hyper-v")) { |
| 9169 | + return core::add(HYPERV); |
| 9170 | + } |
| 9171 | + |
| 9172 | + return false; |
| 9173 | + #endif |
| 9174 | + } |
| 9175 | + catch (...) { |
| 9176 | + debug("GPU_CHIPTYPE: caught error, returned false"); |
| 9177 | + return false; |
| 9178 | + } |
| 9179 | + |
| 9180 | + |
9131 | 9181 | /**
|
9132 | 9182 | * @brief Check for any.run driver presence
|
9133 | 9183 | * @category Windows
|
@@ -10708,5 +10758,6 @@ const std::map<VM::enum_flags, VM::core::technique> VM::core::technique_table =
|
10708 | 10758 | { VM::PODMAN_FILE, { 15, VM::podman_file, true } },
|
10709 | 10759 | { VM::WSL_PROC, { 30, VM::wsl_proc_subdir, false } },
|
10710 | 10760 | { VM::ANYRUN_DRIVER, { 65, VM::anyrun_driver, false } },
|
10711 |
| - { VM::ANYRUN_DIRECTORY, { 35, VM::anyrun_directory, false } } |
| 10761 | + { VM::ANYRUN_DIRECTORY, { 35, VM::anyrun_directory, false } }, |
| 10762 | + { VM::GPU_CHIPTYPE, { 100, VM::gpu_chiptype, false }} |
10712 | 10763 | };
|
0 commit comments