即插即用设备检测虚拟机

又学到一个骚操作

参考:https://twitter.com/NinjaParanoid/status/1358098804122083334

也是一个骚思路,在真机上监视器会显示即插即用设备,而虚拟机上不是

检测

powershell

1
Get-WmiObject Win32_PnPSignedDriver | select DeviceName|where {$_.DeviceName -like "*PnP*"}

在真机上,会输出*PnP*,而虚拟机上则会输出*Non-PnP*

API

利用EnumDisplayDevices即可遍历获取监视器相关信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool in_vm()
{
DISPLAY_DEVICE dd;
dd.cb = sizeof(dd);
DWORD dev_index = 0;
wchar_t dev_name[32];
// 遍历显示设备
while (EnumDisplayDevicesW(NULL, dev_index, &dd, DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) {
wcsncpy(dev_name, dd.DeviceName, 32);

// 遍历监视器
DWORD monitor_index = 0;
while (EnumDisplayDevicesW(dev_name, monitor_index, &dd, 0)) {
// 查找特征"-PnP"
std::wstring name = dd.DeviceString;
if (name.find(L"-PnP") != std::wstring::npos) {
return true;
}
monitor_index++;
}

dev_index++;
}
return false;
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021 lzeroyuee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信