summaryrefslogtreecommitdiff
path: root/psutil/_virt.py
diff options
context:
space:
mode:
Diffstat (limited to 'psutil/_virt.py')
-rw-r--r--psutil/_virt.py51
1 files changed, 35 insertions, 16 deletions
diff --git a/psutil/_virt.py b/psutil/_virt.py
index 5114c1e9..de46970c 100644
--- a/psutil/_virt.py
+++ b/psutil/_virt.py
@@ -342,18 +342,24 @@ if LINUX:
# =====================================================================
elif WINDOWS:
- from . import _psutil_windows as cext
import winreg
- def _winreg_key_exists(name, base=winreg.HKEY_LOCAL_MACHINE):
- debug("checking %r" % name)
- reg = winreg.ConnectRegistry(None, base)
+ from . import _psutil_windows as cext
+
+ def _winreg_key_exists(key, root=winreg.HKEY_LOCAL_MACHINE):
try:
- with winreg.OpenKey(reg, name, 0, winreg.KEY_READ):
+ with winreg.OpenKeyEx(root, key):
return True
except FileNotFoundError:
return False
+ def _winreg_key_get(key, subkey, root=winreg.HKEY_LOCAL_MACHINE):
+ try:
+ with winreg.OpenKeyEx(root, key) as handle:
+ return winreg.QueryValueEx(handle, subkey)[0]
+ except FileNotFoundError:
+ return ""
+
class GenericDetector:
@staticmethod
@@ -369,23 +375,35 @@ elif WINDOWS:
# https://github.com/a0rtega/pafish/blob/master/pafish/vbox.c
@staticmethod
- def from_registry():
+ def from_registry_1():
keys = [
- r"SOFTWARE\\Oracle\\VirtualBox Guest Additions",
- r"HARDWARE\\ACPI\\DSDT\\VBOX__",
- r"HARDWARE\\ACPI\\FADT\\VBOX__",
- r"HARDWARE\\ACPI\\RSDT\\VBOX__",
- r"SYSTEM\\ControlSet001\\Services\\VBoxGuest",
- r"SYSTEM\\ControlSet001\\Services\\VBoxMouse",
- r"SYSTEM\\ControlSet001\\Services\\VBoxService",
- r"SYSTEM\\ControlSet001\\Services\\VBoxSF",
- r"SYSTEM\\ControlSet001\\Services\\VBoxVideo",
+ "SOFTWARE\\Oracle\\VirtualBox Guest Additions",
+ "HARDWARE\\ACPI\\DSDT\\VBOX__",
+ "HARDWARE\\ACPI\\FADT\\VBOX__",
+ "HARDWARE\\ACPI\\RSDT\\VBOX__",
+ "SYSTEM\\ControlSet001\\Services\\VBoxGuest",
+ "SYSTEM\\ControlSet001\\Services\\VBoxMouse",
+ "SYSTEM\\ControlSet001\\Services\\VBoxService",
+ "SYSTEM\\ControlSet001\\Services\\VBoxSF",
+ "SYSTEM\\ControlSet001\\Services\\VBoxVideo",
]
for k in keys:
if _winreg_key_exists(k):
return VIRTUALIZATION_VIRTUALBOX
@staticmethod
+ def from_registry_2():
+ triples = [
+ ("HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", "Identifier", "VBOX"), # NOQA
+ ("HARDWARE\\Description\\System", "SystemBiosVersion", "VBOX"),
+ ("HARDWARE\\Description\\System", "VideoBiosVersion", "VIRTUALBOX"), # NOQA
+ ("HARDWARE\\DESCRIPTION\\System", "SystemBiosDate", "06/23/99"), # NOQA
+ ]
+ for key, subkey, value in triples:
+ if _winreg_key_get(key, subkey).startswith(value):
+ return VIRTUALIZATION_VIRTUALBOX
+
+ @staticmethod
def from_devices():
devs = [
"\\\\.\\VBoxMiniRdrDN",
@@ -407,7 +425,8 @@ elif WINDOWS:
vbox = VboxDetector()
return [
generic.ask_cpuid,
- vbox.from_registry,
+ vbox.from_registry_1,
+ vbox.from_registry_2,
vbox.from_devices,
]