FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/PC/validate_ucrtbase.py at main · python/cpython · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
python
/
cpython
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
35.3k
Star
75k
Code
Issues
5k+
Pull requests
2.6k
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
PC
/
validate_ucrtbase.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
89 lines (76 loc) · 2.69 KB
Breadcrumbs
cpython
/
PC
/
validate_ucrtbase.py
Copy path
File metadata and controls
89 lines (76 loc) · 2.69 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'''
This script gets the version number from ucrtbased.dll and checks
whether it is a version with a known issue.
'''
import
sys
from
ctypes
import
(
c_buffer
,
POINTER
,
byref
,
create_unicode_buffer
,
Structure
,
WinDLL
)
from
ctypes
.
wintypes
import
DWORD
,
HANDLE
class
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
=
130
while
actual_len
==
name_len
:
name_len
*=
2
name
=
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
)
or
not
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
)
Back
|
FazBrowse Home
|
New Git URL