Skip to content

Commit

Permalink
pythongh-114107: test.pythoninfo logs Windows Developer Mode (python#…
Browse files Browse the repository at this point in the history
…114121)

Also, don't skip the whole collect_windows() if ctypes is missing.

Log also ctypes.windll.shell32.IsUserAnAdmin().
  • Loading branch information
vstinner authored and aisk committed Feb 11, 2024
1 parent a0a5708 commit 9189996
Showing 1 changed file with 44 additions and 16 deletions.
60 changes: 44 additions & 16 deletions Lib/test/pythoninfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -865,26 +865,36 @@ def collect_subprocess(info_add):


def collect_windows(info_add):
try:
import ctypes
except ImportError:
return

if not hasattr(ctypes, 'WinDLL'):
if sys.platform != "win32":
# Code specific to Windows
return

ntdll = ctypes.WinDLL('ntdll')
BOOLEAN = ctypes.c_ubyte

# windows.RtlAreLongPathsEnabled: RtlAreLongPathsEnabled()
# windows.is_admin: IsUserAnAdmin()
try:
RtlAreLongPathsEnabled = ntdll.RtlAreLongPathsEnabled
except AttributeError:
res = '<function not available>'
import ctypes
if not hasattr(ctypes, 'WinDLL'):
raise ImportError
except ImportError:
pass
else:
RtlAreLongPathsEnabled.restype = BOOLEAN
RtlAreLongPathsEnabled.argtypes = ()
res = bool(RtlAreLongPathsEnabled())
info_add('windows.RtlAreLongPathsEnabled', res)
ntdll = ctypes.WinDLL('ntdll')
BOOLEAN = ctypes.c_ubyte
try:
RtlAreLongPathsEnabled = ntdll.RtlAreLongPathsEnabled
except AttributeError:
res = '<function not available>'
else:
RtlAreLongPathsEnabled.restype = BOOLEAN
RtlAreLongPathsEnabled.argtypes = ()
res = bool(RtlAreLongPathsEnabled())
info_add('windows.RtlAreLongPathsEnabled', res)

shell32 = ctypes.windll.shell32
IsUserAnAdmin = shell32.IsUserAnAdmin
IsUserAnAdmin.restype = BOOLEAN
IsUserAnAdmin.argtypes = ()
info_add('windows.is_admin', IsUserAnAdmin())

try:
import _winapi
Expand All @@ -893,6 +903,7 @@ def collect_windows(info_add):
except (ImportError, AttributeError):
pass

# windows.version_caption: "wmic os get Caption,Version /value" command
import subprocess
try:
# When wmic.exe output is redirected to a pipe,
Expand All @@ -919,6 +930,7 @@ def collect_windows(info_add):
if line:
info_add('windows.version', line)

# windows.ver: "ver" command
try:
proc = subprocess.Popen(["ver"], shell=True,
stdout=subprocess.PIPE,
Expand All @@ -937,6 +949,22 @@ def collect_windows(info_add):
if line:
info_add('windows.ver', line)

# windows.developer_mode: get AllowDevelopmentWithoutDevLicense registry
import winreg
try:
key = winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE,
r"SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock")
subkey = "AllowDevelopmentWithoutDevLicense"
try:
value, value_type = winreg.QueryValueEx(key, subkey)
finally:
winreg.CloseKey(key)
except OSError:
pass
else:
info_add('windows.developer_mode', "enabled" if value else "disabled")


def collect_fips(info_add):
try:
Expand Down

0 comments on commit 9189996

Please sign in to comment.