Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
9fba161d
Commit
9fba161d
authored
Dec 13, 2019
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernelbase: Remove support for LZ files in 32-bit version functions.
Windows doesn't support it either. Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
4cb8497c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
89 deletions
+61
-89
version.c
dlls/kernelbase/version.c
+61
-89
No files found.
dlls/kernelbase/version.c
View file @
9fba161d
...
...
@@ -36,7 +36,6 @@
#include "winuser.h"
#include "winnls.h"
#include "winternl.h"
#include "lzexpand.h"
#include "winerror.h"
#include "kernelbase.h"
...
...
@@ -208,58 +207,32 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_language( const IMAGE_RESOURCE
}
/***********************************************************************
* read_xx_header [internal]
*/
static
int
read_xx_header
(
HFILE
lzfd
)
static
DWORD
read_data
(
HANDLE
handle
,
DWORD
offset
,
void
*
data
,
DWORD
len
)
{
IMAGE_DOS_HEADER
mzh
;
char
magic
[
3
];
DWORD
res
;
LZSeek
(
lzfd
,
0
,
SEEK_SET
);
if
(
sizeof
(
mzh
)
!=
LZRead
(
lzfd
,
(
LPSTR
)
&
mzh
,
sizeof
(
mzh
)
)
)
return
0
;
if
(
mzh
.
e_magic
!=
IMAGE_DOS_SIGNATURE
)
{
if
(
!
memcmp
(
&
mzh
,
"
\177
ELF"
,
4
))
return
1
;
/* ELF */
if
(
*
(
UINT
*
)
&
mzh
==
0xfeedface
||
*
(
UINT
*
)
&
mzh
==
0xcefaedfe
)
return
1
;
/* Mach-O */
return
0
;
}
LZSeek
(
lzfd
,
mzh
.
e_lfanew
,
SEEK_SET
);
if
(
2
!=
LZRead
(
lzfd
,
magic
,
2
)
)
return
0
;
LZSeek
(
lzfd
,
mzh
.
e_lfanew
,
SEEK_SET
);
if
(
magic
[
0
]
==
'N'
&&
magic
[
1
]
==
'E'
)
return
IMAGE_OS2_SIGNATURE
;
if
(
magic
[
0
]
==
'P'
&&
magic
[
1
]
==
'E'
)
return
IMAGE_NT_SIGNATURE
;
magic
[
2
]
=
'\0'
;
WARN
(
"Can't handle %s files.
\n
"
,
magic
);
return
0
;
SetFilePointer
(
handle
,
offset
,
NULL
,
FILE_BEGIN
);
if
(
!
ReadFile
(
handle
,
data
,
len
,
&
res
,
NULL
))
res
=
0
;
return
res
;
}
/***********************************************************************
* find_ne_resource [internal]
*/
static
BOOL
find_ne_resource
(
H
FILE
lzfd
,
DWORD
*
resLen
,
DWORD
*
resOff
)
static
BOOL
find_ne_resource
(
H
ANDLE
handle
,
DWORD
*
resLen
,
DWORD
*
resOff
)
{
const
WORD
typeid
=
VS_FILE_INFO
|
0x8000
;
const
WORD
resid
=
VS_VERSION_INFO
|
0x8000
;
IMAGE_OS2_HEADER
nehd
;
NE_TYPEINFO
*
typeInfo
;
NE_NAMEINFO
*
nameInfo
;
DWORD
nehdoffset
;
DWORD
nehdoffset
=
*
resOff
;
LPBYTE
resTab
;
DWORD
resTabSize
;
int
count
;
/* Read in NE header */
nehdoffset
=
LZSeek
(
lzfd
,
0
,
SEEK_CUR
);
if
(
sizeof
(
nehd
)
!=
LZRead
(
lzfd
,
(
LPSTR
)
&
nehd
,
sizeof
(
nehd
)
)
)
return
FALSE
;
if
(
read_data
(
handle
,
nehdoffset
,
&
nehd
,
sizeof
(
nehd
)
)
!=
sizeof
(
nehd
))
return
FALSE
;
resTabSize
=
nehd
.
ne_restab
-
nehd
.
ne_rsrctab
;
if
(
!
resTabSize
)
...
...
@@ -272,8 +245,7 @@ static BOOL find_ne_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
resTab
=
HeapAlloc
(
GetProcessHeap
(),
0
,
resTabSize
);
if
(
!
resTab
)
return
FALSE
;
LZSeek
(
lzfd
,
nehd
.
ne_rsrctab
+
nehdoffset
,
SEEK_SET
);
if
(
resTabSize
!=
LZRead
(
lzfd
,
(
char
*
)
resTab
,
resTabSize
)
)
if
(
read_data
(
handle
,
nehd
.
ne_rsrctab
+
nehdoffset
,
resTab
,
resTabSize
)
!=
resTabSize
)
{
HeapFree
(
GetProcessHeap
(),
0
,
resTab
);
return
FALSE
;
...
...
@@ -303,8 +275,8 @@ static BOOL find_ne_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
found_name:
/* Return resource data */
if
(
resLen
)
*
resLen
=
nameInfo
->
length
<<
*
(
WORD
*
)
resTab
;
if
(
resOff
)
*
resOff
=
nameInfo
->
offset
<<
*
(
WORD
*
)
resTab
;
*
resLen
=
nameInfo
->
length
<<
*
(
WORD
*
)
resTab
;
*
resOff
=
nameInfo
->
offset
<<
*
(
WORD
*
)
resTab
;
HeapFree
(
GetProcessHeap
(),
0
,
resTab
);
return
TRUE
;
...
...
@@ -313,27 +285,26 @@ static BOOL find_ne_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
/***********************************************************************
* find_pe_resource [internal]
*/
static
BOOL
find_pe_resource
(
H
FILE
lzfd
,
DWORD
*
resLen
,
DWORD
*
resOff
,
DWORD
flags
)
static
BOOL
find_pe_resource
(
H
ANDLE
handle
,
DWORD
*
resLen
,
DWORD
*
resOff
,
DWORD
flags
)
{
union
{
IMAGE_NT_HEADERS32
nt32
;
IMAGE_NT_HEADERS64
nt64
;
}
pehd
;
DWORD
pehdoffset
;
DWORD
pehdoffset
=
*
resOff
;
PIMAGE_DATA_DIRECTORY
resDataDir
;
PIMAGE_SECTION_HEADER
sections
;
LPBYTE
resSection
;
DWORD
section_size
,
data_size
;
DWORD
len
,
section_size
,
data_size
;
const
void
*
resDir
;
const
IMAGE_RESOURCE_DIRECTORY
*
resPtr
;
const
IMAGE_RESOURCE_DATA_ENTRY
*
resData
;
int
i
,
len
,
nSections
;
int
i
,
nSections
;
BOOL
ret
=
FALSE
;
/* Read in PE header */
pehdoffset
=
LZSeek
(
lzfd
,
0
,
SEEK_CUR
);
len
=
LZRead
(
lzfd
,
(
LPSTR
)
&
pehd
,
sizeof
(
pehd
)
);
len
=
read_data
(
handle
,
pehdoffset
,
&
pehd
,
sizeof
(
pehd
)
);
if
(
len
<
sizeof
(
pehd
.
nt32
.
FileHeader
))
return
FALSE
;
if
(
len
<
sizeof
(
pehd
))
memset
(
(
char
*
)
&
pehd
+
len
,
0
,
sizeof
(
pehd
)
-
len
);
...
...
@@ -362,10 +333,8 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff, DWORD fl
if
(
!
sections
)
return
FALSE
;
len
=
FIELD_OFFSET
(
IMAGE_NT_HEADERS32
,
OptionalHeader
)
+
pehd
.
nt32
.
FileHeader
.
SizeOfOptionalHeader
;
LZSeek
(
lzfd
,
pehdoffset
+
len
,
SEEK_SET
);
if
(
nSections
*
sizeof
(
IMAGE_SECTION_HEADER
)
!=
LZRead
(
lzfd
,
(
LPSTR
)
sections
,
nSections
*
sizeof
(
IMAGE_SECTION_HEADER
)
)
)
if
(
read_data
(
handle
,
pehdoffset
+
len
,
sections
,
nSections
*
sizeof
(
IMAGE_SECTION_HEADER
)
)
!=
nSections
*
sizeof
(
IMAGE_SECTION_HEADER
))
{
HeapFree
(
GetProcessHeap
(),
0
,
sections
);
return
FALSE
;
...
...
@@ -395,8 +364,7 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff, DWORD fl
return
FALSE
;
}
LZSeek
(
lzfd
,
sections
[
i
].
PointerToRawData
,
SEEK_SET
);
if
(
data_size
!=
LZRead
(
lzfd
,
(
char
*
)
resSection
,
data_size
))
goto
done
;
if
(
read_data
(
handle
,
sections
[
i
].
PointerToRawData
,
resSection
,
data_size
)
!=
data_size
)
goto
done
;
if
(
data_size
<
section_size
)
memset
(
(
char
*
)
resSection
+
data_size
,
0
,
section_size
-
data_size
);
/* Find resource */
...
...
@@ -437,9 +405,8 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff, DWORD fl
}
/* Return resource data */
if
(
resLen
)
*
resLen
=
resData
->
Size
;
if
(
resOff
)
*
resOff
=
resData
->
OffsetToData
-
sections
[
i
].
VirtualAddress
+
sections
[
i
].
PointerToRawData
;
*
resLen
=
resData
->
Size
;
*
resOff
=
resData
->
OffsetToData
-
sections
[
i
].
VirtualAddress
+
sections
[
i
].
PointerToRawData
;
ret
=
TRUE
;
done:
...
...
@@ -452,19 +419,27 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff, DWORD fl
/***********************************************************************
* find_version_resource [internal]
*/
static
DWORD
find_version_resource
(
H
FILE
lzfd
,
DWORD
*
reslen
,
DWORD
*
offset
,
DWORD
flags
)
static
DWORD
find_version_resource
(
H
ANDLE
handle
,
DWORD
*
reslen
,
DWORD
*
offset
,
DWORD
flags
)
{
DWORD
magic
=
read_xx_header
(
lzfd
);
IMAGE_DOS_HEADER
mzh
;
WORD
magic
;
if
(
read_data
(
handle
,
0
,
&
mzh
,
sizeof
(
mzh
)
)
!=
sizeof
(
mzh
))
return
0
;
if
(
mzh
.
e_magic
!=
IMAGE_DOS_SIGNATURE
)
return
0
;
if
(
read_data
(
handle
,
mzh
.
e_lfanew
,
&
magic
,
sizeof
(
magic
)
)
!=
sizeof
(
magic
))
return
0
;
*
offset
=
mzh
.
e_lfanew
;
switch
(
magic
)
{
case
IMAGE_OS2_SIGNATURE
:
if
(
!
find_ne_resource
(
lzfd
,
reslen
,
offset
))
magic
=
0
;
if
(
!
find_ne_resource
(
handle
,
reslen
,
offset
))
magic
=
0
;
break
;
case
IMAGE_NT_SIGNATURE
:
if
(
!
find_pe_resource
(
lzfd
,
reslen
,
offset
,
flags
))
magic
=
0
;
if
(
!
find_pe_resource
(
handle
,
reslen
,
offset
,
flags
))
magic
=
0
;
break
;
}
WARN
(
"Can't handle %04x files.
\n
"
,
magic
);
return
magic
;
}
...
...
@@ -620,16 +595,14 @@ DWORD WINAPI GetFileVersionInfoSizeA( LPCSTR filename, LPDWORD handle )
/******************************************************************************
* GetFileVersionInfoSizeExW (kernelbase.@)
*/
DWORD
WINAPI
GetFileVersionInfoSizeExW
(
DWORD
flags
,
LPCWSTR
filename
,
LPDWORD
handle
)
DWORD
WINAPI
GetFileVersionInfoSizeExW
(
DWORD
flags
,
LPCWSTR
filename
,
LPDWORD
ret_
handle
)
{
DWORD
len
,
offset
,
magic
=
1
;
HFILE
lzfd
;
HMODULE
hModule
;
OFSTRUCT
ofs
;
TRACE
(
"(0x%x,%s,%p)
\n
"
,
flags
,
debugstr_w
(
filename
),
handle
);
TRACE
(
"(0x%x,%s,%p)
\n
"
,
flags
,
debugstr_w
(
filename
),
ret_
handle
);
if
(
handle
)
*
handle
=
0
;
if
(
ret_handle
)
*
ret_
handle
=
0
;
if
(
!
filename
)
{
...
...
@@ -644,13 +617,7 @@ DWORD WINAPI GetFileVersionInfoSizeExW( DWORD flags, LPCWSTR filename, LPDWORD h
if
(
flags
&
~
FILE_VER_GET_LOCALISED
)
FIXME
(
"flags 0x%x ignored
\n
"
,
flags
&
~
FILE_VER_GET_LOCALISED
);
if
((
lzfd
=
LZOpenFileW
(
(
LPWSTR
)
filename
,
&
ofs
,
OF_READ
))
!=
HFILE_ERROR
)
{
magic
=
find_version_resource
(
lzfd
,
&
len
,
&
offset
,
flags
);
LZClose
(
lzfd
);
}
if
((
magic
==
1
)
&&
(
hModule
=
LoadLibraryExW
(
filename
,
0
,
LOAD_LIBRARY_AS_DATAFILE
)))
if
((
hModule
=
LoadLibraryExW
(
filename
,
0
,
LOAD_LIBRARY_AS_DATAFILE
)))
{
HRSRC
hRsrc
=
NULL
;
if
(
!
(
flags
&
FILE_VER_GET_LOCALISED
))
...
...
@@ -670,6 +637,15 @@ DWORD WINAPI GetFileVersionInfoSizeExW( DWORD flags, LPCWSTR filename, LPDWORD h
FreeLibrary
(
hModule
);
}
if
(
magic
==
1
)
{
HANDLE
handle
=
CreateFileW
(
filename
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
,
NULL
,
OPEN_EXISTING
,
0
,
0
);
if
(
handle
==
INVALID_HANDLE_VALUE
)
return
0
;
magic
=
find_version_resource
(
handle
,
&
len
,
&
offset
,
flags
);
CloseHandle
(
handle
);
}
switch
(
magic
)
{
case
IMAGE_OS2_SIGNATURE
:
...
...
@@ -696,9 +672,7 @@ DWORD WINAPI GetFileVersionInfoSizeExW( DWORD flags, LPCWSTR filename, LPDWORD h
return
(
len
*
2
)
+
4
;
default:
if
(
lzfd
==
HFILE_ERROR
)
SetLastError
(
ofs
.
nErrCode
);
else
if
(
GetVersion
()
&
0x80000000
)
/* Windows 95/98 */
if
(
GetVersion
()
&
0x80000000
)
/* Windows 95/98 */
SetLastError
(
ERROR_FILE_NOT_FOUND
);
else
SetLastError
(
ERROR_RESOURCE_DATA_NOT_FOUND
);
...
...
@@ -731,17 +705,15 @@ DWORD WINAPI GetFileVersionInfoSizeExA( DWORD flags, LPCSTR filename, LPDWORD ha
/***********************************************************************
* GetFileVersionInfoExW (kernelbase.@)
*/
BOOL
WINAPI
GetFileVersionInfoExW
(
DWORD
flags
,
LPCWSTR
filename
,
DWORD
handle
,
DWORD
datasize
,
LPVOID
data
)
BOOL
WINAPI
GetFileVersionInfoExW
(
DWORD
flags
,
LPCWSTR
filename
,
DWORD
ignored
,
DWORD
datasize
,
LPVOID
data
)
{
static
const
char
signature
[
4
]
=
"FE2X"
;
DWORD
len
,
offset
,
magic
=
1
;
HFILE
lzfd
;
OFSTRUCT
ofs
;
HMODULE
hModule
;
VS_VERSION_INFO_STRUCT32
*
vvis
=
data
;
TRACE
(
"(0x%x,%s,%d,size=%d,data=%p)
\n
"
,
flags
,
debugstr_w
(
filename
),
handle
,
datasize
,
data
);
flags
,
debugstr_w
(
filename
),
ignored
,
datasize
,
data
);
if
(
!
data
)
{
...
...
@@ -751,17 +723,7 @@ BOOL WINAPI GetFileVersionInfoExW( DWORD flags, LPCWSTR filename, DWORD handle,
if
(
flags
&
~
FILE_VER_GET_LOCALISED
)
FIXME
(
"flags 0x%x ignored
\n
"
,
flags
&
~
FILE_VER_GET_LOCALISED
);
if
((
lzfd
=
LZOpenFileW
(
(
LPWSTR
)
filename
,
&
ofs
,
OF_READ
))
!=
HFILE_ERROR
)
{
if
((
magic
=
find_version_resource
(
lzfd
,
&
len
,
&
offset
,
flags
))
>
1
)
{
LZSeek
(
lzfd
,
offset
,
0
/* SEEK_SET */
);
len
=
LZRead
(
lzfd
,
data
,
min
(
len
,
datasize
)
);
}
LZClose
(
lzfd
);
}
if
((
magic
==
1
)
&&
(
hModule
=
LoadLibraryExW
(
filename
,
0
,
LOAD_LIBRARY_AS_DATAFILE
)))
if
((
hModule
=
LoadLibraryExW
(
filename
,
0
,
LOAD_LIBRARY_AS_DATAFILE
)))
{
HRSRC
hRsrc
=
NULL
;
if
(
!
(
flags
&
FILE_VER_GET_LOCALISED
))
...
...
@@ -784,6 +746,16 @@ BOOL WINAPI GetFileVersionInfoExW( DWORD flags, LPCWSTR filename, DWORD handle,
FreeLibrary
(
hModule
);
}
if
(
magic
==
1
)
{
HANDLE
handle
=
CreateFileW
(
filename
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
,
NULL
,
OPEN_EXISTING
,
0
,
0
);
if
(
handle
==
INVALID_HANDLE_VALUE
)
return
0
;
if
((
magic
=
find_version_resource
(
handle
,
&
len
,
&
offset
,
flags
)))
len
=
read_data
(
handle
,
offset
,
data
,
min
(
len
,
datasize
));
CloseHandle
(
handle
);
}
switch
(
magic
)
{
case
IMAGE_OS2_SIGNATURE
:
...
...
@@ -807,7 +779,7 @@ BOOL WINAPI GetFileVersionInfoExW( DWORD flags, LPCWSTR filename, DWORD handle,
return
TRUE
;
default:
SetLastError
(
lzfd
==
HFILE_ERROR
?
ofs
.
nErrCode
:
ERROR_RESOURCE_DATA_NOT_FOUND
);
SetLastError
(
ERROR_RESOURCE_DATA_NOT_FOUND
);
return
FALSE
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment