setupapi: Don't set the DLL flag when creating a fake dll that ends in .exe.
This commit is contained in:
parent
b9271be3c0
commit
361057501f
|
@ -245,11 +245,13 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build a complete fake dll from scratch */
|
/* build a complete fake dll from scratch */
|
||||||
static BOOL build_fake_dll( HANDLE file )
|
static BOOL build_fake_dll( HANDLE file, const WCHAR *name )
|
||||||
{
|
{
|
||||||
|
static const WCHAR dotexeW[] = { '.','e','x','e',0 };
|
||||||
IMAGE_DOS_HEADER *dos;
|
IMAGE_DOS_HEADER *dos;
|
||||||
IMAGE_NT_HEADERS *nt;
|
IMAGE_NT_HEADERS *nt;
|
||||||
struct dll_info info;
|
struct dll_info info;
|
||||||
|
const WCHAR *ext;
|
||||||
BYTE *buffer;
|
BYTE *buffer;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
DWORD lfanew = (sizeof(*dos) + sizeof(fakedll_signature) + 15) & ~15;
|
DWORD lfanew = (sizeof(*dos) + sizeof(fakedll_signature) + 15) & ~15;
|
||||||
|
@ -279,7 +281,7 @@ static BOOL build_fake_dll( HANDLE file )
|
||||||
nt->FileHeader.Machine = IMAGE_FILE_MACHINE_I386;
|
nt->FileHeader.Machine = IMAGE_FILE_MACHINE_I386;
|
||||||
#endif
|
#endif
|
||||||
nt->FileHeader.TimeDateStamp = 0;
|
nt->FileHeader.TimeDateStamp = 0;
|
||||||
nt->FileHeader.Characteristics = IMAGE_FILE_DLL;
|
nt->FileHeader.Characteristics = 0;
|
||||||
nt->OptionalHeader.MajorLinkerVersion = 1;
|
nt->OptionalHeader.MajorLinkerVersion = 1;
|
||||||
nt->OptionalHeader.MinorLinkerVersion = 0;
|
nt->OptionalHeader.MinorLinkerVersion = 0;
|
||||||
nt->OptionalHeader.MajorOperatingSystemVersion = 1;
|
nt->OptionalHeader.MajorOperatingSystemVersion = 1;
|
||||||
|
@ -312,6 +314,9 @@ static BOOL build_fake_dll( HANDLE file )
|
||||||
nt->OptionalHeader.AddressOfEntryPoint = info.mem_pos;
|
nt->OptionalHeader.AddressOfEntryPoint = info.mem_pos;
|
||||||
nt->OptionalHeader.BaseOfCode = info.mem_pos;
|
nt->OptionalHeader.BaseOfCode = info.mem_pos;
|
||||||
|
|
||||||
|
ext = strrchrW( name, '.' );
|
||||||
|
if (!ext || strcmpiW( ext, dotexeW )) nt->FileHeader.Characteristics |= IMAGE_FILE_DLL;
|
||||||
|
|
||||||
if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL)
|
if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL)
|
||||||
{
|
{
|
||||||
size = sizeof(dll_code_section);
|
size = sizeof(dll_code_section);
|
||||||
|
@ -963,7 +968,7 @@ BOOL create_fake_dll( const WCHAR *name, const WCHAR *source )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WARN( "fake dll %s not found for %s\n", debugstr_w(source), debugstr_w(name) );
|
WARN( "fake dll %s not found for %s\n", debugstr_w(source), debugstr_w(name) );
|
||||||
ret = build_fake_dll( h );
|
ret = build_fake_dll( h, name );
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle( h );
|
CloseHandle( h );
|
||||||
|
|
Loading…
Reference in New Issue