Skip to content

Commit

Permalink
[3.11] gh-114107: test.pythoninfo logs Windows Developer Mode (GH-114121
Browse files Browse the repository at this point in the history
) (#114128)

gh-114107: test.pythoninfo logs Windows Developer Mode (GH-114121)

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

Log also ctypes.windll.shell32.IsUserAnAdmin().
(cherry picked from commit c77f552)

Co-authored-by: Victor Stinner <[email protected]>
  • Loading branch information
miss-islington and vstinner authored Jan 16, 2024
1 parent d42e54e commit ddc9e34
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 @@ -864,26 +864,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 @@ -892,6 +902,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 @@ -918,6 +929,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 @@ -936,6 +948,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 ddc9e34

Please sign in to comment.