'''This script gets the version number from ucrtbased.dll and checkswhether it is a version with a known issue.'''import sysfrom ctypes import (c_buffer, POINTER, byref, create_unicode_buffer,Structure, WinDLL)from ctypes.wintypes import DWORD, HANDLEclass VS_FIXEDFILEINFO(Structure):_fields_ = [("dwSignature", DWORD),("dwStrucVersion", DWORD),("dwFileVersionMS", DWORD),("dwFileVersionLS", DWORD),("dwProductVersionMS", DWORD),("dwProductVersionLS", DWORD),("dwFileFlagsMask", DWORD),("dwFileFlags", DWORD),("dwFileOS", DWORD),("dwFileType", DWORD),("dwFileSubtype", DWORD),("dwFileDateMS", DWORD),("dwFileDateLS", DWORD),]kernel32 = WinDLL('kernel32')version = WinDLL('version')if len(sys.argv) < 2:print('Usage: validate_ucrtbase.py <ucrtbase|ucrtbased>')sys.exit(2)try:ucrtbased = WinDLL(sys.argv[1])except OSError:print('Cannot find ucrtbased.dll')# This likely means that VS is not installed, but that is an# obvious enough problem if you're trying to produce a debug# build that we don't need to fail here.sys.exit(0)# We will immediately double the length up to MAX_PATH, but the# path may be longer, so we retry until the returned string is# shorter than our buffer.name_len = actual_len = 130while actual_len == name_len:name_len *= 2name = create_unicode_buffer(name_len)actual_len = kernel32.GetModuleFileNameW(HANDLE(ucrtbased._handle),name, len(name))if not actual_len:print('Failed to get full module name.')sys.exit(2)size = version.GetFileVersionInfoSizeW(name, None)if not size:print('Failed to get size of version info.')sys.exit(2)ver_block = c_buffer(size)if (not version.GetFileVersionInfoW(name, None, size, ver_block) ornot ver_block):print('Failed to get version info.')sys.exit(2)pvi = POINTER(VS_FIXEDFILEINFO)()if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())):print('Failed to get version value from info.')sys.exit(2)ver = (pvi.contents.dwProductVersionMS >> 16,pvi.contents.dwProductVersionMS & 0xFFFF,pvi.contents.dwProductVersionLS >> 16,pvi.contents.dwProductVersionLS & 0xFFFF,)print('{} is version {}.{}.{}.{}'.format(name.value, *ver))if ver < (10, 0, 10586):print('WARN: ucrtbased contains known issues. ''Please update the Windows 10 SDK.')print('See:')print(' http://bugs.python.org/issue27705')print(' https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk')sys.exit(1)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。