mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
26 Commits
master
...
appcompat/
Author | SHA1 | Date | |
---|---|---|---|
|
1b3b7127de | ||
|
c0fa5e4d91 | ||
|
5b7fa9a8a7 | ||
|
900147e199 | ||
|
cf2e4d3580 | ||
|
6180f8163c | ||
|
7fee24aef2 | ||
|
5b68bec533 | ||
|
e8d6763ca5 | ||
|
a1bef9e646 | ||
|
2b03e48686 | ||
|
9239e7f16e | ||
|
9c010aeaea | ||
|
e6c488ca45 | ||
|
c40f787f03 | ||
|
fbd4954973 | ||
|
688606640a | ||
|
260a4fb369 | ||
|
ff1368ddb7 | ||
|
635ff4d37c | ||
|
549789cc74 | ||
|
d5a5efc92c | ||
|
0ac9a7d750 | ||
|
eea511bddf | ||
|
139e621fde | ||
|
9312543349 |
@@ -6,5 +6,5 @@ add_definitions(-D__WINESRC__)
|
|||||||
add_executable(reg add.c copy.c delete.c export.c import.c query.c reg.c reg.rc)
|
add_executable(reg add.c copy.c delete.c export.c import.c query.c reg.c reg.rc)
|
||||||
set_module_type(reg win32cui UNICODE)
|
set_module_type(reg win32cui UNICODE)
|
||||||
target_link_libraries(reg wine)
|
target_link_libraries(reg wine)
|
||||||
add_importlibs(reg advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
add_importlibs(reg advapi32_vista user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET reg DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET reg DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -57,7 +57,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_module_type(nfsd win32cui)
|
set_module_type(nfsd win32cui)
|
||||||
add_importlibs(nfsd advapi32 iphlpapi kernel32_vista libtirpc msvcrt shell32 ws2_32 wldap32 kernel32 ntdll)
|
add_importlibs(nfsd advapi32 iphlpapi libtirpc msvcrt shell32 ws2_32 wldap32 kernel32_vista ntdll)
|
||||||
add_pch(nfsd precomp.h SOURCE)
|
add_pch(nfsd precomp.h SOURCE)
|
||||||
|
|
||||||
add_cd_file(TARGET nfsd DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET nfsd DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -31,7 +31,7 @@ list(APPEND SOURCE
|
|||||||
|
|
||||||
file(GLOB explorer_rc_deps res/*.*)
|
file(GLOB explorer_rc_deps res/*.*)
|
||||||
add_rc_deps(explorer.rc ${explorer_rc_deps})
|
add_rc_deps(explorer.rc ${explorer_rc_deps})
|
||||||
add_executable(explorer ${SOURCE} explorer.rc)
|
add_executable(explorer ${SOURCE} $<TARGET_OBJECTS:roscompat_desc> explorer.rc)
|
||||||
target_link_libraries(explorer uuid wine cpprt atl_classes)
|
target_link_libraries(explorer uuid wine cpprt atl_classes)
|
||||||
set_module_type(explorer win32gui UNICODE)
|
set_module_type(explorer win32gui UNICODE)
|
||||||
add_importlibs(explorer advapi32 gdi32 user32 comctl32 ole32 oleaut32 shell32 browseui shlwapi shdocvw version uxtheme msvcrt kernel32 ntdll)
|
add_importlibs(explorer advapi32 gdi32 user32 comctl32 ole32 oleaut32 shell32 browseui shlwapi shdocvw version uxtheme msvcrt kernel32 ntdll)
|
||||||
|
@@ -23,6 +23,6 @@ add_executable(services ${SOURCE} services.rc)
|
|||||||
target_link_libraries(services ${PSEH_LIB})
|
target_link_libraries(services ${PSEH_LIB})
|
||||||
|
|
||||||
set_module_type(services win32gui UNICODE)
|
set_module_type(services win32gui UNICODE)
|
||||||
add_importlibs(services userenv user32 advapi32 advapi32_vista rpcrt4 msvcrt kernel32 ntdll)
|
add_importlibs(services userenv user32 advapi32_vista rpcrt4 msvcrt kernel32 ntdll)
|
||||||
add_pch(services services.h SOURCE)
|
add_pch(services services.h SOURCE)
|
||||||
add_cd_file(TARGET services DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET services DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
* Otherwise they are kept separated, unless an explicit /MERGE is used.
|
* Otherwise they are kept separated, unless an explicit /MERGE is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma comment(linker, "/SECTION:.text,ERW /SECTION:.data,RW /MERGE:.MBDATA=.text /MERGE:INIT=.text /MERGE:.edata=.rdata")
|
#pragma comment(linker, "/SECTION:.text,ERW /SECTION:.data,RW /MERGE:.MBDATA=.text /MERGE:INIT=.text /MERGE:.edata=.rdata /MERGE:.expvers=.rdata")
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
2
dll/3rdparty/libtirpc/CMakeLists.txt
vendored
2
dll/3rdparty/libtirpc/CMakeLists.txt
vendored
@@ -106,7 +106,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_module_type(libtirpc win32dll)
|
set_module_type(libtirpc win32dll)
|
||||||
add_importlibs(libtirpc user32 advapi32 kernel32_vista ws2_32 msvcrt kernel32 ntdll)
|
add_importlibs(libtirpc user32 advapi32 ws2_32 msvcrt kernel32_vista ntdll)
|
||||||
add_delay_importlibs(libtirpc secur32)
|
add_delay_importlibs(libtirpc secur32)
|
||||||
add_pch(libtirpc precomp.h SOURCE)
|
add_pch(libtirpc precomp.h SOURCE)
|
||||||
add_cd_file(TARGET libtirpc DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET libtirpc DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -19,6 +19,7 @@ add_rc_deps(appwiz.rc ${appwiz_rc_deps})
|
|||||||
add_library(appwiz MODULE
|
add_library(appwiz MODULE
|
||||||
${SOURCE}
|
${SOURCE}
|
||||||
appwiz.rc
|
appwiz.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/appwiz_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/appwiz.def)
|
${CMAKE_CURRENT_BINARY_DIR}/appwiz.def)
|
||||||
|
|
||||||
set_module_type(appwiz cpl UNICODE)
|
set_module_type(appwiz cpl UNICODE)
|
||||||
|
@@ -22,7 +22,7 @@ set_source_files_properties(devenum.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT
|
|||||||
set_module_type(devenum win32dll UNICODE)
|
set_module_type(devenum win32dll UNICODE)
|
||||||
target_link_libraries(devenum strmiids uuid wine)
|
target_link_libraries(devenum strmiids uuid wine)
|
||||||
add_delay_importlibs(devenum msvfw32)
|
add_delay_importlibs(devenum msvfw32)
|
||||||
add_importlibs(devenum advapi32 advapi32_vista ole32 oleaut32 winmm user32 avicap32 msacm32 dsound msdmo msvcrt kernel32 ntdll)
|
add_importlibs(devenum advapi32_vista ole32 oleaut32 winmm user32 avicap32 msacm32 dsound msdmo msvcrt kernel32 ntdll)
|
||||||
add_dependencies(devenum wineheaders)
|
add_dependencies(devenum wineheaders)
|
||||||
add_pch(devenum precomp.h SOURCE)
|
add_pch(devenum precomp.h SOURCE)
|
||||||
add_cd_file(TARGET devenum DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET devenum DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -23,6 +23,6 @@ add_library(qcap MODULE ${SOURCE}
|
|||||||
|
|
||||||
set_module_type(qcap win32dll)
|
set_module_type(qcap win32dll)
|
||||||
target_link_libraries(qcap strmbase strmiids uuid wine)
|
target_link_libraries(qcap strmbase strmiids uuid wine)
|
||||||
add_importlibs(qcap ole32 oleaut32 gdi32 advapi32 advapi32_vista msvcrt kernel32 ntdll)
|
add_importlibs(qcap ole32 oleaut32 gdi32 advapi32_vista msvcrt kernel32 ntdll)
|
||||||
add_delay_importlibs(qcap msvfw32)
|
add_delay_importlibs(qcap msvfw32)
|
||||||
add_cd_file(TARGET qcap DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET qcap DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -43,6 +43,7 @@ list(APPEND PCH_SKIP_SOURCE
|
|||||||
add_library(quartz MODULE
|
add_library(quartz MODULE
|
||||||
${SOURCE}
|
${SOURCE}
|
||||||
${PCH_SKIP_SOURCE}
|
${PCH_SKIP_SOURCE}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/quartz_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/quartz.def
|
${CMAKE_CURRENT_BINARY_DIR}/quartz.def
|
||||||
version.rc)
|
version.rc)
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ list(APPEND quartz_rc_deps
|
|||||||
set_source_files_properties(version.rc PROPERTIES OBJECT_DEPENDS "${quartz_rc_deps}")
|
set_source_files_properties(version.rc PROPERTIES OBJECT_DEPENDS "${quartz_rc_deps}")
|
||||||
set_module_type(quartz win32dll)
|
set_module_type(quartz win32dll)
|
||||||
target_link_libraries(quartz strmbase strmiids uuid dxguid wine ${PSEH_LIB})
|
target_link_libraries(quartz strmbase strmiids uuid dxguid wine ${PSEH_LIB})
|
||||||
add_importlibs(quartz dsound msacm32 msvfw32 ole32 oleaut32 rpcrt4 user32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
add_importlibs(quartz dsound msacm32 msvfw32 ole32 oleaut32 rpcrt4 user32 gdi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
||||||
add_dependencies(quartz dxsdk quartz_idlheader stdole2)
|
add_dependencies(quartz dxsdk quartz_idlheader stdole2)
|
||||||
add_pch(quartz precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(quartz precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET quartz DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET quartz DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -24,14 +24,18 @@ add_library(rtl_um OBJECT
|
|||||||
target_link_libraries(rtl_um apisets ${PSEH_LIB})
|
target_link_libraries(rtl_um apisets ${PSEH_LIB})
|
||||||
add_dependencies(rtl_um psdk)
|
add_dependencies(rtl_um psdk)
|
||||||
|
|
||||||
|
# On NT6+ this is used by advapi32
|
||||||
|
add_library(etwtrace etw/trace.c)
|
||||||
|
target_link_libraries(etwtrace ${PSEH_LIB})
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
dbg/dbgui.c
|
dbg/dbgui.c
|
||||||
|
ldr/appcompat.c
|
||||||
ldr/ldrapi.c
|
ldr/ldrapi.c
|
||||||
ldr/ldrinit.c
|
ldr/ldrinit.c
|
||||||
ldr/ldrpe.c
|
ldr/ldrpe.c
|
||||||
ldr/ldrutils.c
|
ldr/ldrutils.c
|
||||||
ldr/verifier.c
|
ldr/verifier.c)
|
||||||
etw/trace.c)
|
|
||||||
|
|
||||||
if(ARCH STREQUAL "i386")
|
if(ARCH STREQUAL "i386")
|
||||||
list(APPEND ASM_SOURCE dispatch/i386/dispatch.S)
|
list(APPEND ASM_SOURCE dispatch/i386/dispatch.S)
|
||||||
@@ -61,7 +65,7 @@ set_module_type(ntdll win32dll ENTRYPOINT 0)
|
|||||||
set_subsystem(ntdll console)
|
set_subsystem(ntdll console)
|
||||||
################# END HACK #################
|
################# END HACK #################
|
||||||
|
|
||||||
target_link_libraries(ntdll csrlib rtl rtl_um rtl_vista ntdllsys libcntpr uuid ${PSEH_LIB})
|
target_link_libraries(ntdll etwtrace csrlib rtl rtl_um rtl_vista ntdllsys libcntpr uuid ${PSEH_LIB})
|
||||||
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
target_link_libraries(ntdll cryptlib)
|
target_link_libraries(ntdll cryptlib)
|
||||||
endif()
|
endif()
|
||||||
@@ -78,3 +82,6 @@ add_cd_file(TARGET ntdll DESTINATION reactos/system32 NO_CAB FOR all)
|
|||||||
if(MSVC AND ARCH STREQUAL "i386")
|
if(MSVC AND ARCH STREQUAL "i386")
|
||||||
target_link_libraries(libntdll ftol2)
|
target_link_libraries(libntdll ftol2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
|
endif()
|
||||||
|
@@ -262,6 +262,7 @@
|
|||||||
@ stdcall NtCompressKey(ptr)
|
@ stdcall NtCompressKey(ptr)
|
||||||
@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
|
@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||||
@ stdcall NtContinue(ptr long)
|
@ stdcall NtContinue(ptr long)
|
||||||
|
@ stub -version=0x500 NtCreateChannel() # For testing only
|
||||||
@ stdcall NtCreateDebugObject(ptr long ptr long)
|
@ stdcall NtCreateDebugObject(ptr long ptr long)
|
||||||
@ stdcall NtCreateDirectoryObject(long long long)
|
@ stdcall NtCreateDirectoryObject(long long long)
|
||||||
@ stub -version=0x600+ NtCreateEnlistment
|
@ stub -version=0x600+ NtCreateEnlistment
|
||||||
@@ -1801,7 +1802,7 @@
|
|||||||
@ cdecl _strlwr(str)
|
@ cdecl _strlwr(str)
|
||||||
@ cdecl _strnicmp(str str long)
|
@ cdecl _strnicmp(str str long)
|
||||||
@ cdecl _strupr(str)
|
@ cdecl _strupr(str)
|
||||||
@ cdecl -version=0x400-0x502 -impsym _swprintf() swprintf # Compatibility for pre NT6
|
@ cdecl -version=0x400-0x502 -noroscompat -impsym _swprintf() swprintf # Compatibility for pre NT6
|
||||||
@ cdecl -version=0x600+ _swprintf(ptr str)
|
@ cdecl -version=0x600+ _swprintf(ptr str)
|
||||||
@ cdecl -version=0x502 _tolower(long)
|
@ cdecl -version=0x502 _tolower(long)
|
||||||
@ cdecl -version=0x502 _toupper(long)
|
@ cdecl -version=0x502 _toupper(long)
|
||||||
|
@@ -46,4 +46,7 @@
|
|||||||
/* PSEH */
|
/* PSEH */
|
||||||
#include <pseh/pseh2.h>
|
#include <pseh/pseh2.h>
|
||||||
|
|
||||||
|
/* RosCompat */
|
||||||
|
#include <roscompat.h>
|
||||||
|
|
||||||
#endif /* _NTDLL_H */
|
#endif /* _NTDLL_H */
|
||||||
|
@@ -83,15 +83,20 @@ VOID NTAPI LdrpEnsureLoaderLockIsHeld(VOID);
|
|||||||
/* ldrpe.c */
|
/* ldrpe.c */
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrpSnapThunk(IN PVOID ExportBase,
|
LdrpSnapThunk(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
||||||
IN PVOID ImportBase,
|
IN PVOID ImportBase,
|
||||||
IN PIMAGE_THUNK_DATA OriginalThunk,
|
IN PIMAGE_THUNK_DATA OriginalThunk,
|
||||||
IN OUT PIMAGE_THUNK_DATA Thunk,
|
IN OUT PIMAGE_THUNK_DATA Thunk,
|
||||||
IN PIMAGE_EXPORT_DIRECTORY ExportEntry,
|
IN PIMAGE_EXPORT_DIRECTORY ExportEntry,
|
||||||
IN ULONG ExportSize,
|
IN ULONG ExportSize,
|
||||||
IN BOOLEAN Static,
|
IN UCHAR SnapFlags,
|
||||||
IN LPSTR DllName);
|
IN LPSTR DllName);
|
||||||
|
|
||||||
|
/* SnapFlags for LdrpSnapThunk */
|
||||||
|
#define SNAP_DYNAMIC 0x0
|
||||||
|
#define SNAP_STATIC 0x1
|
||||||
|
#define SNAP_PRIVATE 0x2
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
|
LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
|
||||||
IN PLDR_DATA_TABLE_ENTRY LdrEntry);
|
IN PLDR_DATA_TABLE_ENTRY LdrEntry);
|
||||||
@@ -116,7 +121,8 @@ LdrpGetProcedureAddress(
|
|||||||
_In_opt_ _When_(Ordinal == 0, _Notnull_) PANSI_STRING Name,
|
_In_opt_ _When_(Ordinal == 0, _Notnull_) PANSI_STRING Name,
|
||||||
_In_opt_ _When_(Name == NULL, _In_range_(>, 0)) ULONG Ordinal,
|
_In_opt_ _When_(Name == NULL, _In_range_(>, 0)) ULONG Ordinal,
|
||||||
_Out_ PVOID *ProcedureAddress,
|
_Out_ PVOID *ProcedureAddress,
|
||||||
_In_ BOOLEAN ExecuteInit);
|
_In_ BOOLEAN ExecuteInit,
|
||||||
|
_In_ BOOLEAN UsePrivateExports);
|
||||||
|
|
||||||
PLDR_DATA_TABLE_ENTRY NTAPI
|
PLDR_DATA_TABLE_ENTRY NTAPI
|
||||||
LdrpAllocateDataTableEntry(IN PVOID BaseAddress);
|
LdrpAllocateDataTableEntry(IN PVOID BaseAddress);
|
||||||
@@ -237,6 +243,27 @@ RtlDoesFileExists_UStr(
|
|||||||
IN PUNICODE_STRING FileName
|
IN PUNICODE_STRING FileName
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* appcompat.c */
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
LdrpInitializeExportVersioning(
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY ImageLdrEntry,
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY NtdllLdrEntry);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
LdrpApplyDllExportVersioning(
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry);
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
LdrpValidateVersionedExport(
|
||||||
|
_In_ const LDR_DATA_TABLE_ENTRY* LdrEntry,
|
||||||
|
_In_ ULONG OrdinalIndex);
|
||||||
|
|
||||||
|
extern char __ImageBase;
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
RtlpInitializeKeyedEvent(
|
RtlpInitializeKeyedEvent(
|
||||||
|
233
dll/ntdll/ldr/appcompat.c
Normal file
233
dll/ntdll/ldr/appcompat.c
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS NT User-Mode Library
|
||||||
|
* FILE: dll/ntdll/ldr/appcompat.c
|
||||||
|
* PURPOSE:
|
||||||
|
* PROGRAMMERS: Timo Kreuzer <timo.kreuzer@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
#include <ntdll.h>
|
||||||
|
#include <compat_undoc.h>
|
||||||
|
#include <compatguid_undoc.h>
|
||||||
|
#include <roscompat.h>
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
static USHORT ExportVersionMask;
|
||||||
|
|
||||||
|
static
|
||||||
|
ROSCOMPAT_VERSION_BIT
|
||||||
|
TranslateAppcompatVersionToVersionBit(
|
||||||
|
_In_ DWORD AppcompatVersion)
|
||||||
|
{
|
||||||
|
switch (AppcompatVersion)
|
||||||
|
{
|
||||||
|
case _WIN32_WINNT_NT4:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_NT4;
|
||||||
|
case _WIN32_WINNT_WIN2K:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WIN2K;
|
||||||
|
case _WIN32_WINNT_WINXP:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WINXP;
|
||||||
|
case _WIN32_WINNT_WS03:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WS03;
|
||||||
|
case _WIN32_WINNT_VISTA:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_VISTA;
|
||||||
|
case _WIN32_WINNT_WIN7:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WIN7;
|
||||||
|
case _WIN32_WINNT_WIN8:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WIN8;
|
||||||
|
case _WIN32_WINNT_WINBLUE:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WIN81;
|
||||||
|
case _WIN32_WINNT_WIN10:
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WIN10;
|
||||||
|
default:
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ROSCOMPAT_VERSION_BIT_WS03;
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMAGE_SECTION_HEADER
|
||||||
|
LdrpFindSectionByName(
|
||||||
|
PVOID ImageBase,
|
||||||
|
PSTR SectionName)
|
||||||
|
{
|
||||||
|
PIMAGE_NT_HEADERS NtHeaders;
|
||||||
|
PIMAGE_SECTION_HEADER SectionHeaders;
|
||||||
|
SIZE_T NameLength;
|
||||||
|
ULONG i;
|
||||||
|
|
||||||
|
/* Get the NT headers */
|
||||||
|
NtHeaders = RtlImageNtHeader(ImageBase);
|
||||||
|
if (NtHeaders == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SectionHeaders = IMAGE_FIRST_SECTION(NtHeaders);
|
||||||
|
|
||||||
|
/* Check for long section name */
|
||||||
|
NameLength = strlen(SectionName);
|
||||||
|
if (NameLength <= IMAGE_SIZEOF_SHORT_NAME)
|
||||||
|
{
|
||||||
|
/* Loop the sections until we found the requested one */
|
||||||
|
for (i = 0; i < NtHeaders->FileHeader.NumberOfSections; i++)
|
||||||
|
{
|
||||||
|
/* Directly compare names */
|
||||||
|
if (strncmp((char*)SectionHeaders[i].Name, SectionName, IMAGE_SIZEOF_SHORT_NAME) == 0)
|
||||||
|
{
|
||||||
|
return &SectionHeaders[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// FIXME: support long section names
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PVOID
|
||||||
|
LdrpSectionHeaderToVAAndSize(
|
||||||
|
_In_ PVOID ImageBase,
|
||||||
|
_In_ PIMAGE_SECTION_HEADER SectionHeader,
|
||||||
|
_Out_ PSIZE_T SectionSize)
|
||||||
|
{
|
||||||
|
*SectionSize = SectionHeader->SizeOfRawData;
|
||||||
|
return (PVOID)((PUCHAR)ImageBase + SectionHeader->VirtualAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
PROSCOMPAT_DESCRIPTOR
|
||||||
|
FindRosCompatDescriptor(
|
||||||
|
_In_ PVOID ImageBase)
|
||||||
|
{
|
||||||
|
PIMAGE_SECTION_HEADER SectionHeader;
|
||||||
|
|
||||||
|
SectionHeader = LdrpFindSectionByName(ImageBase, ".expvers");
|
||||||
|
if (SectionHeader == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (PROSCOMPAT_DESCRIPTOR)((PUCHAR)ImageBase + SectionHeader->VirtualAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
LdrpApplyDllExportVersioning(
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry)
|
||||||
|
{
|
||||||
|
PROSCOMPAT_DESCRIPTOR RosCompatDescriptor;
|
||||||
|
|
||||||
|
/* Make sure we have a data table entry */
|
||||||
|
ASSERT(LdrEntry != NULL);
|
||||||
|
|
||||||
|
/* Ensure that this field is not used */
|
||||||
|
ASSERT(LdrEntry->PatchInformation == NULL);
|
||||||
|
|
||||||
|
/* Get the appcompat descriptor */
|
||||||
|
RosCompatDescriptor = FindRosCompatDescriptor(LdrEntry->DllBase);
|
||||||
|
if (RosCompatDescriptor == NULL)
|
||||||
|
{
|
||||||
|
DPRINT("roscompat: No descriptor in %wZ\n", &LdrEntry->BaseDllName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Save the descriptor */
|
||||||
|
LdrEntry->PatchInformation = RosCompatDescriptor;
|
||||||
|
|
||||||
|
/* Check for dummy descriptor */
|
||||||
|
if (RosCompatDescriptor->ExportMasks == NULL)
|
||||||
|
{
|
||||||
|
DPRINT("roscompat: Dummy descriptor in %wZ\n", &LdrEntry->BaseDllName);
|
||||||
|
*RosCompatDescriptor->NumberOfValidExports = MAXULONG;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Count the number of valid (public) exports */
|
||||||
|
ULONG NumberOfValidExports = 0;
|
||||||
|
for (ULONG i = 0; i < RosCompatDescriptor->NumberOfOrdinals; i++)
|
||||||
|
{
|
||||||
|
if (RosCompatDescriptor->ExportMasks[i] & ExportVersionMask)
|
||||||
|
{
|
||||||
|
NumberOfValidExports++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*RosCompatDescriptor->NumberOfValidExports = NumberOfValidExports;
|
||||||
|
|
||||||
|
DPRINT("roscompat: Applied export version info for '%wZ'\n",
|
||||||
|
&LdrEntry->BaseDllName);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
LdrpInitializeExportVersioning(
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY ImageLdrEntry,
|
||||||
|
_Inout_ PLDR_DATA_TABLE_ENTRY NtdllLdrEntry)
|
||||||
|
{
|
||||||
|
DWORD AppCompatVersion;
|
||||||
|
|
||||||
|
/* Get the AppCompat version */
|
||||||
|
AppCompatVersion = RosGetProcessCompatVersion();
|
||||||
|
if (AppCompatVersion == 0)
|
||||||
|
{
|
||||||
|
/* Default to WS 2003 */
|
||||||
|
AppCompatVersion = _WIN32_WINNT_WS03;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Patch the PEB */
|
||||||
|
PPEB Peb = NtCurrentPeb();
|
||||||
|
Peb->OSMajorVersion = AppCompatVersion >> 8;
|
||||||
|
Peb->OSMinorVersion = AppCompatVersion & 0xFF;
|
||||||
|
|
||||||
|
DPRINT("roscompat: Using AppCompat version %lu for image %wZ\n",
|
||||||
|
AppCompatVersion,
|
||||||
|
&ImageLdrEntry->BaseDllName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the global export version mask */
|
||||||
|
ExportVersionMask = 1 << TranslateAppcompatVersionToVersionBit(AppCompatVersion);
|
||||||
|
|
||||||
|
LdrpApplyDllExportVersioning(ImageLdrEntry);
|
||||||
|
LdrpApplyDllExportVersioning(NtdllLdrEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
LdrpValidateVersionedExport(
|
||||||
|
_In_ const LDR_DATA_TABLE_ENTRY* LdrEntry,
|
||||||
|
_In_ ULONG OrdinalIndex)
|
||||||
|
{
|
||||||
|
PROSCOMPAT_DESCRIPTOR RosCompatDescriptor = LdrEntry->PatchInformation;
|
||||||
|
|
||||||
|
/* Check for dummy descriptor */
|
||||||
|
if (RosCompatDescriptor->ExportMasks == NULL)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OrdinalIndex >= RosCompatDescriptor->NumberOfOrdinals)
|
||||||
|
{
|
||||||
|
DPRINT1("roscompat: Invalid ordinal %lu for '%wZ'\n",
|
||||||
|
OrdinalIndex,
|
||||||
|
&LdrEntry->BaseDllName);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((RosCompatDescriptor->ExportMasks[OrdinalIndex] & ExportVersionMask) == 0)
|
||||||
|
{
|
||||||
|
DPRINT1("roscompat: Export %lu is not valid for '%wZ'\n",
|
||||||
|
OrdinalIndex,
|
||||||
|
&LdrEntry->BaseDllName);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
@@ -793,7 +793,7 @@ LdrGetProcedureAddress(
|
|||||||
_Out_ PVOID *ProcedureAddress)
|
_Out_ PVOID *ProcedureAddress)
|
||||||
{
|
{
|
||||||
/* Call the internal routine and tell it to execute DllInit */
|
/* Call the internal routine and tell it to execute DllInit */
|
||||||
return LdrpGetProcedureAddress(BaseAddress, Name, Ordinal, ProcedureAddress, TRUE);
|
return LdrpGetProcedureAddress(BaseAddress, Name, Ordinal, ProcedureAddress, TRUE, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1526,8 +1526,7 @@ LdrUnloadDll(
|
|||||||
/* Check if a Hotpatch is active */
|
/* Check if a Hotpatch is active */
|
||||||
if (LdrEntry->PatchInformation)
|
if (LdrEntry->PatchInformation)
|
||||||
{
|
{
|
||||||
/* FIXME */
|
DPRINT("roscompat: %wZ has compat info\n", &CurrentEntry->BaseDllName);
|
||||||
DPRINT1("We don't support Hotpatching yet\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Deallocate the Entry */
|
/* Deallocate the Entry */
|
||||||
|
@@ -2267,6 +2267,9 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
|||||||
/* Initialize Wine's active context implementation for the current process */
|
/* Initialize Wine's active context implementation for the current process */
|
||||||
actctx_init(&OldShimData);
|
actctx_init(&OldShimData);
|
||||||
|
|
||||||
|
/* Process export versioning data */
|
||||||
|
LdrpInitializeExportVersioning(LdrpImageEntry, NtLdrEntry);
|
||||||
|
|
||||||
/* Set the current directory */
|
/* Set the current directory */
|
||||||
Status = RtlSetCurrentDirectory_U(&CurrentDirectory);
|
Status = RtlSetCurrentDirectory_U(&CurrentDirectory);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
@@ -2323,15 +2326,16 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = LdrGetProcedureAddress(Kernel32BaseAddress,
|
/* Look up BaseProcessInitPostImport and allow to get exports hidden by roscompat */
|
||||||
&BaseProcessInitPostImportName,
|
Status = LdrpGetProcedureAddress(Kernel32BaseAddress,
|
||||||
0,
|
&BaseProcessInitPostImportName,
|
||||||
&FunctionAddress);
|
0,
|
||||||
|
&FunctionAddress,
|
||||||
|
TRUE,
|
||||||
|
TRUE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (ShowSnaps)
|
DPRINT1("LDR: Unable to find BaseProcessInitPostImport in kernel32, Status=0x%08lx\n", Status);
|
||||||
DPRINT1("LDR: Unable to find post-import process init function, Status=0x%08lx\n", Status);
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Kernel32ProcessInitPostImportFunction = FunctionAddress;
|
Kernel32ProcessInitPostImportFunction = FunctionAddress;
|
||||||
|
@@ -37,6 +37,7 @@ LdrpSnapIAT(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
|||||||
LPSTR ImportName;
|
LPSTR ImportName;
|
||||||
ULONG ForwarderChain, i, Rva, OldProtect, IatSize, ExportSize;
|
ULONG ForwarderChain, i, Rva, OldProtect, IatSize, ExportSize;
|
||||||
SIZE_T ImportSize;
|
SIZE_T ImportSize;
|
||||||
|
UCHAR SnapFlags;
|
||||||
DPRINT("LdrpSnapIAT(%wZ %wZ %p %u)\n", &ExportLdrEntry->BaseDllName, &ImportLdrEntry->BaseDllName, IatEntry, EntriesValid);
|
DPRINT("LdrpSnapIAT(%wZ %wZ %p %u)\n", &ExportLdrEntry->BaseDllName, &ImportLdrEntry->BaseDllName, IatEntry, EntriesValid);
|
||||||
|
|
||||||
/* Get export directory */
|
/* Get export directory */
|
||||||
@@ -131,6 +132,13 @@ LdrpSnapIAT(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set snap flags. We allow private imports from our own modules */
|
||||||
|
SnapFlags = SNAP_STATIC;
|
||||||
|
if (ImportLdrEntry->PatchInformation != NULL)
|
||||||
|
{
|
||||||
|
SnapFlags |= SNAP_PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if the Thunks are already valid */
|
/* Check if the Thunks are already valid */
|
||||||
if (EntriesValid)
|
if (EntriesValid)
|
||||||
{
|
{
|
||||||
@@ -161,13 +169,13 @@ LdrpSnapIAT(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
|||||||
/* Snap the thunk */
|
/* Snap the thunk */
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
Status = LdrpSnapThunk(ExportLdrEntry->DllBase,
|
Status = LdrpSnapThunk(ExportLdrEntry,
|
||||||
ImportLdrEntry->DllBase,
|
ImportLdrEntry->DllBase,
|
||||||
OriginalThunk,
|
OriginalThunk,
|
||||||
FirstThunk,
|
FirstThunk,
|
||||||
ExportDirectory,
|
ExportDirectory,
|
||||||
ExportSize,
|
ExportSize,
|
||||||
TRUE,
|
SnapFlags,
|
||||||
ImportName);
|
ImportName);
|
||||||
|
|
||||||
/* Move to the next thunk */
|
/* Move to the next thunk */
|
||||||
@@ -217,13 +225,13 @@ LdrpSnapIAT(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
|||||||
/* Snap the Thunk */
|
/* Snap the Thunk */
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
Status = LdrpSnapThunk(ExportLdrEntry->DllBase,
|
Status = LdrpSnapThunk(ExportLdrEntry,
|
||||||
ImportLdrEntry->DllBase,
|
ImportLdrEntry->DllBase,
|
||||||
OriginalThunk,
|
OriginalThunk,
|
||||||
FirstThunk,
|
FirstThunk,
|
||||||
ExportDirectory,
|
ExportDirectory,
|
||||||
ExportSize,
|
ExportSize,
|
||||||
TRUE,
|
SnapFlags,
|
||||||
ImportName);
|
ImportName);
|
||||||
|
|
||||||
/* Next thunks */
|
/* Next thunks */
|
||||||
@@ -934,13 +942,13 @@ done:
|
|||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrpSnapThunk(IN PVOID ExportBase,
|
LdrpSnapThunk(IN PLDR_DATA_TABLE_ENTRY ExportLdrEntry,
|
||||||
IN PVOID ImportBase,
|
IN PVOID ImportBase,
|
||||||
IN PIMAGE_THUNK_DATA OriginalThunk,
|
IN PIMAGE_THUNK_DATA OriginalThunk,
|
||||||
IN OUT PIMAGE_THUNK_DATA Thunk,
|
IN OUT PIMAGE_THUNK_DATA Thunk,
|
||||||
IN PIMAGE_EXPORT_DIRECTORY ExportDirectory,
|
IN PIMAGE_EXPORT_DIRECTORY ExportDirectory,
|
||||||
IN ULONG ExportSize,
|
IN ULONG ExportSize,
|
||||||
IN BOOLEAN Static,
|
IN UCHAR SnapFlags,
|
||||||
IN LPSTR DllName)
|
IN LPSTR DllName)
|
||||||
{
|
{
|
||||||
BOOLEAN IsOrdinal;
|
BOOLEAN IsOrdinal;
|
||||||
@@ -963,6 +971,7 @@ LdrpSnapThunk(IN PVOID ExportBase,
|
|||||||
PANSI_STRING ForwardName;
|
PANSI_STRING ForwardName;
|
||||||
PVOID ForwarderHandle;
|
PVOID ForwarderHandle;
|
||||||
ULONG ForwardOrdinal;
|
ULONG ForwardOrdinal;
|
||||||
|
PVOID ExportBase = ExportLdrEntry->DllBase;
|
||||||
|
|
||||||
/* Check if the snap is by ordinal */
|
/* Check if the snap is by ordinal */
|
||||||
if ((IsOrdinal = IMAGE_SNAP_BY_ORDINAL(OriginalThunk->u1.Ordinal)))
|
if ((IsOrdinal = IMAGE_SNAP_BY_ORDINAL(OriginalThunk->u1.Ordinal)))
|
||||||
@@ -1013,14 +1022,11 @@ LdrpSnapThunk(IN PVOID ExportBase,
|
|||||||
{
|
{
|
||||||
FailurePath:
|
FailurePath:
|
||||||
/* Is this a static snap? */
|
/* Is this a static snap? */
|
||||||
if (Static)
|
if (SnapFlags & SNAP_STATIC)
|
||||||
{
|
{
|
||||||
UNICODE_STRING SnapTarget;
|
UNICODE_STRING SnapTarget;
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
|
|
||||||
/* What was the module we were searching in */
|
|
||||||
RtlInitAnsiString(&TempString, DllName ? DllName : "Unknown");
|
|
||||||
|
|
||||||
/* What was the module we were searching for */
|
/* What was the module we were searching for */
|
||||||
if (LdrpCheckForLoadedDllHandle(ImportBase, &LdrEntry))
|
if (LdrpCheckForLoadedDllHandle(ImportBase, &LdrEntry))
|
||||||
SnapTarget = LdrEntry->BaseDllName;
|
SnapTarget = LdrEntry->BaseDllName;
|
||||||
@@ -1029,12 +1035,14 @@ FailurePath:
|
|||||||
|
|
||||||
/* Inform the debug log */
|
/* Inform the debug log */
|
||||||
if (IsOrdinal)
|
if (IsOrdinal)
|
||||||
DPRINT1("Failed to snap ordinal %Z!0x%x for %wZ\n", &TempString, OriginalOrdinal, &SnapTarget);
|
DPRINT1("Failed to snap ordinal %wZ!0x%x for %wZ\n", &ExportLdrEntry->BaseDllName, OriginalOrdinal, &SnapTarget);
|
||||||
else
|
else
|
||||||
DPRINT1("Failed to snap %Z!%s for %wZ\n", &TempString, ImportName, &SnapTarget);
|
DPRINT1("Failed to snap %wZ!%s for %wZ\n", &ExportLdrEntry->BaseDllName, ImportName, &SnapTarget);
|
||||||
|
|
||||||
/* These are critical errors. Setup a string for the DLL name */
|
/* These are critical errors. Setup a string for the DLL name */
|
||||||
RtlAnsiStringToUnicodeString(&HardErrorDllName, &TempString, TRUE);
|
RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||||
|
&ExportLdrEntry->BaseDllName,
|
||||||
|
&HardErrorDllName);
|
||||||
|
|
||||||
/* Set it as the parameter */
|
/* Set it as the parameter */
|
||||||
HardErrorParameters[1] = (ULONG_PTR)&HardErrorDllName;
|
HardErrorParameters[1] = (ULONG_PTR)&HardErrorDllName;
|
||||||
@@ -1101,6 +1109,17 @@ FailurePath:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Check if we need to check export version information */
|
||||||
|
if (!(SnapFlags & SNAP_PRIVATE) && (ExportLdrEntry->PatchInformation != NULL))
|
||||||
|
{
|
||||||
|
/* Check if the export is allowed by current appcompat seetings */
|
||||||
|
if (!LdrpValidateVersionedExport(ExportLdrEntry, Ordinal))
|
||||||
|
{
|
||||||
|
/* It is not allowed, fail */
|
||||||
|
goto FailurePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* The ordinal seems correct, get the AddressOfFunctions VA */
|
/* The ordinal seems correct, get the AddressOfFunctions VA */
|
||||||
AddressOfFunctions = (PULONG)
|
AddressOfFunctions = (PULONG)
|
||||||
((ULONG_PTR)ExportBase +
|
((ULONG_PTR)ExportBase +
|
||||||
@@ -1195,7 +1214,8 @@ FailurePath:
|
|||||||
ForwardName,
|
ForwardName,
|
||||||
ForwardOrdinal,
|
ForwardOrdinal,
|
||||||
(PVOID*)&Thunk->u1.Function,
|
(PVOID*)&Thunk->u1.Function,
|
||||||
FALSE);
|
FALSE,
|
||||||
|
(ExportLdrEntry->PatchInformation != NULL));
|
||||||
/* If this fails, then error out */
|
/* If this fails, then error out */
|
||||||
if (!NT_SUCCESS(Status)) goto FailurePath;
|
if (!NT_SUCCESS(Status)) goto FailurePath;
|
||||||
}
|
}
|
||||||
|
@@ -1511,6 +1511,11 @@ NoRelocNeeded:
|
|||||||
LdrpValidateImageForMp(LdrEntry);
|
LdrpValidateImageForMp(LdrEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
LdrpApplyDllExportVersioning(LdrEntry);
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: LdrpCorUnloadImage() is missing
|
// FIXME: LdrpCorUnloadImage() is missing
|
||||||
|
|
||||||
/* Close section and return status */
|
/* Close section and return status */
|
||||||
@@ -2228,7 +2233,8 @@ LdrpGetProcedureAddress(
|
|||||||
_In_opt_ _When_(Ordinal == 0, _Notnull_) PANSI_STRING Name,
|
_In_opt_ _When_(Ordinal == 0, _Notnull_) PANSI_STRING Name,
|
||||||
_In_opt_ _When_(Name == NULL, _In_range_(>, 0)) ULONG Ordinal,
|
_In_opt_ _When_(Name == NULL, _In_range_(>, 0)) ULONG Ordinal,
|
||||||
_Out_ PVOID *ProcedureAddress,
|
_Out_ PVOID *ProcedureAddress,
|
||||||
_In_ BOOLEAN ExecuteInit)
|
_In_ BOOLEAN ExecuteInit,
|
||||||
|
_In_ BOOLEAN UsePrivateExports)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
UCHAR ImportBuffer[64]; // 128 since NT6.2
|
UCHAR ImportBuffer[64]; // 128 since NT6.2
|
||||||
@@ -2338,13 +2344,13 @@ LdrpGetProcedureAddress(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Now get the thunk */
|
/* Now get the thunk */
|
||||||
Status = LdrpSnapThunk(LdrEntry->DllBase,
|
Status = LdrpSnapThunk(LdrEntry,
|
||||||
ImageBase,
|
ImageBase,
|
||||||
&Thunk,
|
&Thunk,
|
||||||
&Thunk,
|
&Thunk,
|
||||||
ExportDir,
|
ExportDir,
|
||||||
ExportDirSize,
|
ExportDirSize,
|
||||||
FALSE,
|
UsePrivateExports ? SNAP_PRIVATE : 0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* Finally, see if we're supposed to run the init routines */
|
/* Finally, see if we're supposed to run the init routines */
|
||||||
@@ -2529,6 +2535,17 @@ LdrpLoadDll(IN BOOLEAN Redirected,
|
|||||||
if (LdrEntry->LoadCount != 0xFFFF) LdrEntry->LoadCount++;
|
if (LdrEntry->LoadCount != 0xFFFF) LdrEntry->LoadCount++;
|
||||||
LdrpUpdateLoadCount2(LdrEntry, LDRP_UPDATE_REFCOUNT);
|
LdrpUpdateLoadCount2(LdrEntry, LDRP_UPDATE_REFCOUNT);
|
||||||
|
|
||||||
|
/* Check for DLL with 0 valid exports */
|
||||||
|
if (NT_SUCCESS(Status) && LdrEntry->PatchInformation != NULL)
|
||||||
|
{
|
||||||
|
PROSCOMPAT_DESCRIPTOR RosCompatDescriptor = LdrEntry->PatchInformation;
|
||||||
|
if (*RosCompatDescriptor->NumberOfValidExports == 0)
|
||||||
|
{
|
||||||
|
DPRINT1("appcompat: %wZ has 0 valid exports\n", &RawDllName);
|
||||||
|
Status = STATUS_DLL_NOT_FOUND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we failed */
|
/* Check if we failed */
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
@@ -2598,6 +2615,17 @@ LdrpLoadDll(IN BOOLEAN Redirected,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Check for DLL with 0 valid exports */
|
||||||
|
if (LdrEntry->PatchInformation != NULL)
|
||||||
|
{
|
||||||
|
PROSCOMPAT_DESCRIPTOR RosCompatDescriptor = LdrEntry->PatchInformation;
|
||||||
|
if (*RosCompatDescriptor->NumberOfValidExports == 0)
|
||||||
|
{
|
||||||
|
Status = STATUS_DLL_NOT_FOUND;
|
||||||
|
_SEH2_LEAVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* We were already loaded. Are we a DLL? */
|
/* We were already loaded. Are we a DLL? */
|
||||||
if ((LdrEntry->Flags & LDRP_IMAGE_DLL) && (LdrEntry->LoadCount != 0xFFFF))
|
if ((LdrEntry->Flags & LDRP_IMAGE_DLL) && (LdrEntry->LoadCount != 0xFFFF))
|
||||||
{
|
{
|
||||||
@@ -2683,7 +2711,7 @@ PVOID LdrpGetShimEngineFunction(PCSZ FunctionName)
|
|||||||
PVOID Address;
|
PVOID Address;
|
||||||
RtlInitAnsiString(&Function, FunctionName);
|
RtlInitAnsiString(&Function, FunctionName);
|
||||||
/* Skip Dll init */
|
/* Skip Dll init */
|
||||||
Status = LdrpGetProcedureAddress(g_pShimEngineModule, &Function, 0, &Address, FALSE);
|
Status = LdrpGetProcedureAddress(g_pShimEngineModule, &Function, 0, &Address, FALSE, TRUE);
|
||||||
return NT_SUCCESS(Status) ? Address : NULL;
|
return NT_SUCCESS(Status) ? Address : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -267,7 +267,7 @@ AvrfpResolveThunks(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
|
|||||||
|
|
||||||
RtlInitAnsiString(&ThunkName, ThunkDescriptor->ThunkName);
|
RtlInitAnsiString(&ThunkName, ThunkDescriptor->ThunkName);
|
||||||
/* We cannot call the public api, because that would run init routines! */
|
/* We cannot call the public api, because that would run init routines! */
|
||||||
if (NT_SUCCESS(LdrpGetProcedureAddress(LdrEntry->DllBase, &ThunkName, 0, &ThunkDescriptor->ThunkOldAddress, FALSE)))
|
if (NT_SUCCESS(LdrpGetProcedureAddress(LdrEntry->DllBase, &ThunkName, 0, &ThunkDescriptor->ThunkOldAddress, FALSE, FALSE)))
|
||||||
{
|
{
|
||||||
if (AVrfpDebug & RTL_VRF_DBG_SHOWFOUNDEXPORTS)
|
if (AVrfpDebug & RTL_VRF_DBG_SHOWFOUNDEXPORTS)
|
||||||
DbgPrint("AVRF: (%wZ) %Z export found.\n", &LdrEntry->BaseDllName, &ThunkName);
|
DbgPrint("AVRF: (%wZ) %Z export found.\n", &LdrEntry->BaseDllName, &ThunkName);
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
|
|
||||||
spec2def(ntdll_vista.dll ntdll_vista.spec ADD_IMPORTLIB)
|
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-D__NTDLL__
|
-D__NTDLL__
|
||||||
-D_NTOSKRNL_
|
-D_NTOSKRNL_
|
||||||
@@ -14,12 +12,23 @@ list(APPEND SOURCE
|
|||||||
DllMain.c
|
DllMain.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/ntdll_vista.def)
|
${CMAKE_CURRENT_BINARY_DIR}/ntdll_vista.def)
|
||||||
|
|
||||||
add_library(ntdll_vista MODULE ${SOURCE} ntdll_vista.rc)
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
set_module_type(ntdll_vista win32dll ENTRYPOINT DllMain 12)
|
# On NT6+ builds this is an empty interface library
|
||||||
target_link_libraries(ntdll_vista smlib rtl_vista)
|
add_library(libntdll_vista INTERFACE)
|
||||||
if(ARCH STREQUAL "arm")
|
target_sources(libntdll_vista INTERFACE $<TARGET_OBJECTS:roscompat_desc>)
|
||||||
target_link_libraries(ntdll_vista chkstk)
|
else()
|
||||||
|
# On pre-NT6 builds we create an additional DLL
|
||||||
|
spec2def(ntdll_vista.dll ntdll_vista.spec ADD_IMPORTLIB)
|
||||||
|
add_library(ntdll_vista MODULE ${SOURCE} ntdll_vista.rc)
|
||||||
|
set_module_type(ntdll_vista win32dll ENTRYPOINT DllMain 12)
|
||||||
|
target_link_libraries(ntdll_vista smlib rtl_vista)
|
||||||
|
if(ARCH STREQUAL "arm")
|
||||||
|
target_link_libraries(ntdll_vista chkstk)
|
||||||
|
endif()
|
||||||
|
add_importlibs(ntdll_vista ntdll)
|
||||||
|
add_dependencies(ntdll_vista psdk)
|
||||||
|
add_cd_file(TARGET ntdll_vista DESTINATION reactos/system32 FOR all)
|
||||||
endif()
|
endif()
|
||||||
add_importlibs(ntdll_vista ntdll)
|
|
||||||
add_dependencies(ntdll_vista psdk)
|
# Implicitly link against ntdll
|
||||||
add_cd_file(TARGET ntdll_vista DESTINATION reactos/system32 FOR all)
|
target_link_libraries(libntdll_vista INTERFACE libntdll)
|
||||||
|
@@ -35,6 +35,7 @@ add_library(shellbtrfs MODULE
|
|||||||
${btrfs_asm}
|
${btrfs_asm}
|
||||||
${PCH_SKIP_SOURCE}
|
${PCH_SKIP_SOURCE}
|
||||||
shellbtrfs.rc
|
shellbtrfs.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/shellbtrfs_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/shellbtrfs.def)
|
${CMAKE_CURRENT_BINARY_DIR}/shellbtrfs.def)
|
||||||
|
|
||||||
file(GLOB shellbtrfs_rc_deps *.ico)
|
file(GLOB shellbtrfs_rc_deps *.ico)
|
||||||
@@ -43,6 +44,6 @@ add_rc_deps(shellbtrfs.rc ${shellbtrfs_rc_deps})
|
|||||||
set_module_type(shellbtrfs win32dll UNICODE)
|
set_module_type(shellbtrfs win32dll UNICODE)
|
||||||
target_link_libraries(shellbtrfs uuid cppstl)
|
target_link_libraries(shellbtrfs uuid cppstl)
|
||||||
set_target_cpp_properties(shellbtrfs WITH_EXCEPTIONS)
|
set_target_cpp_properties(shellbtrfs WITH_EXCEPTIONS)
|
||||||
add_importlibs(shellbtrfs advapi32 advapi32_vista ole32 shell32 shlwapi user32 comctl32 uxtheme setupapi comdlg32 gdi32 msvcrt kernel32_vista kernel32 ntdll)
|
add_importlibs(shellbtrfs advapi32_vista ole32 shell32 shlwapi user32 comctl32 uxtheme setupapi comdlg32 gdi32 msvcrt kernel32_vista ntdll)
|
||||||
add_pch(shellbtrfs precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(shellbtrfs precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET shellbtrfs DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET shellbtrfs DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -32,6 +32,7 @@ add_library(zipfldr MODULE
|
|||||||
${SOURCE}
|
${SOURCE}
|
||||||
${ZLIB_SOURCE}
|
${ZLIB_SOURCE}
|
||||||
zipfldr.rc
|
zipfldr.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/zipfldr_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/zipfldr.def)
|
${CMAKE_CURRENT_BINARY_DIR}/zipfldr.def)
|
||||||
|
|
||||||
set_module_type(zipfldr win32dll UNICODE)
|
set_module_type(zipfldr win32dll UNICODE)
|
||||||
|
@@ -63,6 +63,12 @@ add_library(advapi32 MODULE
|
|||||||
set_module_type(advapi32 win32dll UNICODE ENTRYPOINT DllMain 12)
|
set_module_type(advapi32 win32dll UNICODE ENTRYPOINT DllMain 12)
|
||||||
target_link_libraries(advapi32 cryptlib wine ${PSEH_LIB})
|
target_link_libraries(advapi32 cryptlib wine ${PSEH_LIB})
|
||||||
add_delay_importlibs(advapi32 secur32)
|
add_delay_importlibs(advapi32 secur32)
|
||||||
add_importlibs(advapi32 advapi32_vista rpcrt4 kernel32 ntdll)
|
add_importlibs(advapi32 rpcrt4 kernel32 ntdll)
|
||||||
add_pch(advapi32 advapi32.h "${PCH_SKIP_SOURCE}")
|
add_pch(advapi32 advapi32.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET advapi32 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET advapi32 DESTINATION reactos/system32 FOR all)
|
||||||
|
|
||||||
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
|
target_link_libraries(advapi32 etwtrace)
|
||||||
|
else()
|
||||||
|
add_importlibs(advapi32 advapi32_vista)
|
||||||
|
endif()
|
||||||
|
@@ -1,10 +1,13 @@
|
|||||||
1 stdcall I_ScGetCurrentGroupStateW(ptr wstr ptr)
|
1 stdcall I_ScGetCurrentGroupStateW(ptr wstr ptr)
|
||||||
@ stdcall -version=0x502 A_SHAFinal(ptr ptr)
|
@ stdcall -version=0x502 -noroscompat A_SHAFinal(ptr ptr)
|
||||||
@ stdcall -version=0x600+ A_SHAFinal(ptr ptr) ntdll.A_SHAFinal
|
@ stdcall -version=0x600+ -noroscompat A_SHAFinal(ptr ptr) ntdll.A_SHAFinal
|
||||||
@ stdcall -version=0x502 A_SHAInit(ptr)
|
@ stdcall -version=0x502+ -roscompat A_SHAFinal(ptr ptr) ntdll.A_SHAFinal
|
||||||
@ stdcall -version=0x600+ A_SHAInit(ptr) ntdll.A_SHAInit
|
@ stdcall -version=0x502 -noroscompat A_SHAInit(ptr)
|
||||||
@ stdcall -version=0x502 A_SHAUpdate(ptr ptr long)
|
@ stdcall -version=0x600+ -noroscompat A_SHAInit(ptr) ntdll.A_SHAInit
|
||||||
@ stdcall -version=0x600+ A_SHAUpdate(ptr ptr long) ntdll.A_SHAUpdate
|
@ stdcall -version=0x502+ -roscompat A_SHAInit(ptr) ntdll.A_SHAInit
|
||||||
|
@ stdcall -version=0x502 -noroscompat A_SHAUpdate(ptr ptr long)
|
||||||
|
@ stdcall -version=0x600+ -noroscompat A_SHAUpdate(ptr ptr long) ntdll.A_SHAUpdate
|
||||||
|
@ stdcall -version=0x502+ -roscompat A_SHAUpdate(ptr ptr long) ntdll.A_SHAUpdate
|
||||||
@ stdcall AbortSystemShutdownA(ptr)
|
@ stdcall AbortSystemShutdownA(ptr)
|
||||||
@ stdcall AbortSystemShutdownW(ptr)
|
@ stdcall AbortSystemShutdownW(ptr)
|
||||||
@ stdcall AccessCheck(ptr long long ptr ptr ptr ptr ptr)
|
@ stdcall AccessCheck(ptr long long ptr ptr ptr ptr ptr)
|
||||||
@@ -69,10 +72,12 @@
|
|||||||
@ stdcall CommandLineFromMsiDescriptor(wstr ptr ptr)
|
@ stdcall CommandLineFromMsiDescriptor(wstr ptr ptr)
|
||||||
@ stub ComputeAccessTokenFromCodeAuthzLevel
|
@ stub ComputeAccessTokenFromCodeAuthzLevel
|
||||||
@ stdcall ControlService(long long ptr)
|
@ stdcall ControlService(long long ptr)
|
||||||
@ stdcall -version=0x502 ControlTraceA(double str ptr long) ntdll.EtwControlTraceA
|
@ stdcall -version=0x502 -noroscompat ControlTraceA(double str ptr long) ntdll.EtwControlTraceA
|
||||||
@ stdcall -stub -version=0x600+ ControlTraceA(double str ptr long)
|
@ stdcall -version=0x600+ -noroscompat ControlTraceA(double str ptr long) EtwControlTraceA
|
||||||
@ stdcall -version=0x502 ControlTraceW(double wstr ptr long) ntdll.EtwControlTraceW
|
@ stdcall -version=0x502+ -roscompat ControlTraceA(double str ptr long) ntdll.EtwControlTraceA
|
||||||
@ stdcall -stub -version=0x600+ ControlTraceW(double wstr ptr long)
|
@ stdcall -version=0x502 -noroscompat ControlTraceW(double wstr ptr long) ntdll.EtwControlTraceW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat ControlTraceW(double wstr ptr long) EtwControlTraceW
|
||||||
|
@ stdcall -version=0x502+ -roscompat ControlTraceW(double wstr ptr long) ntdll.EtwControlTraceW
|
||||||
@ stub ConvertAccessToSecurityDescriptorA
|
@ stub ConvertAccessToSecurityDescriptorA
|
||||||
@ stub ConvertAccessToSecurityDescriptorW
|
@ stub ConvertAccessToSecurityDescriptorW
|
||||||
@ stub ConvertSDToStringSDRootDomainA
|
@ stub ConvertSDToStringSDRootDomainA
|
||||||
@@ -206,8 +211,9 @@
|
|||||||
@ stdcall ElfReportEventA(long long long long ptr long long ptr ptr long ptr ptr)
|
@ stdcall ElfReportEventA(long long long long ptr long long ptr ptr long ptr ptr)
|
||||||
@ stdcall ElfReportEventAndSourceW(long long ptr long long long ptr ptr long long ptr ptr long ptr ptr)
|
@ stdcall ElfReportEventAndSourceW(long long ptr long long long ptr ptr long long ptr ptr long ptr ptr)
|
||||||
@ stdcall ElfReportEventW(long long long long ptr long long ptr ptr long ptr ptr)
|
@ stdcall ElfReportEventW(long long long long ptr long long ptr ptr long ptr ptr)
|
||||||
@ stdcall -version=0x502 EnableTrace(long long long ptr double) ntdll.EtwEnableTrace
|
@ stdcall -version=0x502 -noroscompat EnableTrace(long long long ptr double) ntdll.EtwEnableTrace
|
||||||
@ stdcall -stub -version=0x600+ EnableTrace(long long long ptr double)
|
@ stdcall -version=0x600+ -noroscompat EnableTrace(long long long ptr double) EtwEnableTrace
|
||||||
|
@ stdcall -version=0x502+ -roscompat EnableTrace(long long long ptr double) ntdll.EtwEnableTrace
|
||||||
@ stdcall EncryptFileA(str)
|
@ stdcall EncryptFileA(str)
|
||||||
@ stdcall EncryptFileW(wstr)
|
@ stdcall EncryptFileW(wstr)
|
||||||
@ stub EncryptedFileKeyInfo
|
@ stub EncryptedFileKeyInfo
|
||||||
@@ -219,18 +225,21 @@
|
|||||||
@ stdcall EnumServicesStatusExA(long long long long ptr long ptr ptr ptr str)
|
@ stdcall EnumServicesStatusExA(long long long long ptr long ptr ptr ptr str)
|
||||||
@ stdcall EnumServicesStatusExW(long long long long ptr long ptr ptr ptr wstr)
|
@ stdcall EnumServicesStatusExW(long long long long ptr long ptr ptr ptr wstr)
|
||||||
@ stdcall EnumServicesStatusW(long long long ptr long ptr ptr ptr)
|
@ stdcall EnumServicesStatusW(long long long ptr long ptr ptr ptr)
|
||||||
@ stdcall -version=0x502 EnumerateTraceGuids(ptr long ptr) ntdll.EtwEnumerateTraceGuids
|
@ stdcall -version=0x502 -noroscompat EnumerateTraceGuids(ptr long ptr) ntdll.EtwEnumerateTraceGuids
|
||||||
@ stdcall -stub -version=0x600+ EnumerateTraceGuids(ptr long ptr)
|
@ stdcall -version=0x600+ -noroscompat EnumerateTraceGuids(ptr long ptr) EtwEnumerateTraceGuids
|
||||||
|
@ stdcall -version=0x502+ -roscompat EnumerateTraceGuids(ptr long ptr) ntdll.EtwEnumerateTraceGuids
|
||||||
@ stdcall EqualDomainSid(ptr ptr ptr)
|
@ stdcall EqualDomainSid(ptr ptr ptr)
|
||||||
@ stdcall EqualPrefixSid(ptr ptr)
|
@ stdcall EqualPrefixSid(ptr ptr)
|
||||||
@ stdcall EqualSid(ptr ptr)
|
@ stdcall EqualSid(ptr ptr)
|
||||||
@ stdcall FileEncryptionStatusA(str ptr)
|
@ stdcall FileEncryptionStatusA(str ptr)
|
||||||
@ stdcall FileEncryptionStatusW(wstr ptr)
|
@ stdcall FileEncryptionStatusW(wstr ptr)
|
||||||
@ stdcall FindFirstFreeAce(ptr ptr)
|
@ stdcall FindFirstFreeAce(ptr ptr)
|
||||||
@ stdcall -version=0x502 FlushTraceA(double str ptr) ntdll.EtwFlushTraceA
|
@ stdcall -version=0x502 -noroscompat FlushTraceA(double str ptr) ntdll.EtwFlushTraceA
|
||||||
@ stdcall -stub -version=0x600+ FlushTraceA(double str ptr)
|
@ stdcall -version=0x600+ -noroscompat FlushTraceA(double str ptr) EtwFlushTraceA
|
||||||
@ stdcall -version=0x502 FlushTraceW(double wstr ptr) ntdll.EtwFlushTraceW
|
@ stdcall -version=0x502+ -roscompat FlushTraceA(double str ptr) ntdll.EtwFlushTraceA
|
||||||
@ stdcall -stub -version=0x600+ FlushTraceW(double wstr ptr)
|
@ stdcall -version=0x502 -noroscompat FlushTraceW(double wstr ptr) ntdll.EtwFlushTraceW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat FlushTraceW(double wstr ptr) EtwFlushTraceW
|
||||||
|
@ stdcall -version=0x502+ -roscompat FlushTraceW(double wstr ptr) ntdll.EtwFlushTraceW
|
||||||
@ stub FreeEncryptedFileKeyInfo
|
@ stub FreeEncryptedFileKeyInfo
|
||||||
@ stdcall FreeEncryptionCertificateHashList(ptr)
|
@ stdcall FreeEncryptionCertificateHashList(ptr)
|
||||||
@ stdcall FreeInheritedFromArray(ptr long ptr)
|
@ stdcall FreeInheritedFromArray(ptr long ptr)
|
||||||
@@ -408,18 +417,24 @@
|
|||||||
@ stdcall LsaSetTrustedDomainInfoByName(ptr ptr long ptr)
|
@ stdcall LsaSetTrustedDomainInfoByName(ptr ptr long ptr)
|
||||||
@ stdcall LsaSetTrustedDomainInformation(ptr ptr long ptr)
|
@ stdcall LsaSetTrustedDomainInformation(ptr ptr long ptr)
|
||||||
@ stdcall LsaStorePrivateData(ptr ptr ptr)
|
@ stdcall LsaStorePrivateData(ptr ptr ptr)
|
||||||
@ stdcall -version=0x502 MD4Final(ptr)
|
@ stdcall -version=0x502 -noroscompat MD4Final(ptr)
|
||||||
@ stdcall -version=0x600+ MD4Final(ptr) ntdll.MD4Final
|
@ stdcall -version=0x600+ -noroscompat MD4Final(ptr) ntdll.MD4Final
|
||||||
@ stdcall -version=0x502 MD4Init(ptr)
|
@ stdcall -version=0x502+ -roscompat MD4Final(ptr) ntdll.MD4Final
|
||||||
@ stdcall -version=0x600+ MD4Init(ptr) ntdll.MD4Init
|
@ stdcall -version=0x502 -noroscompat MD4Init(ptr)
|
||||||
@ stdcall -version=0x502 MD4Update(ptr ptr long)
|
@ stdcall -version=0x600+ -noroscompat MD4Init(ptr) ntdll.MD4Init
|
||||||
@ stdcall -version=0x600+ MD4Update(ptr ptr long) ntdll.MD4Update
|
@ stdcall -version=0x502+ -roscompat MD4Init(ptr) ntdll.MD4Init
|
||||||
@ stdcall -version=0x502 MD5Final(ptr)
|
@ stdcall -version=0x502 -noroscompat MD4Update(ptr ptr long)
|
||||||
@ stdcall -version=0x600+ MD5Final(ptr) ntdll.MD5Final
|
@ stdcall -version=0x600+ -noroscompat MD4Update(ptr ptr long) ntdll.MD4Update
|
||||||
@ stdcall -version=0x502 MD5Init(ptr)
|
@ stdcall -version=0x502+ -roscompat MD4Update(ptr ptr long) ntdll.MD4Update
|
||||||
@ stdcall -version=0x600+ MD5Init(ptr) ntdll.MD5Init
|
@ stdcall -version=0x502 -noroscompat MD5Final(ptr)
|
||||||
@ stdcall -version=0x502 MD5Update(ptr ptr long)
|
@ stdcall -version=0x600+ -noroscompat MD5Final(ptr) ntdll.MD5Final
|
||||||
@ stdcall -version=0x600+ MD5Update(ptr ptr long) ntdll.MD5Update
|
@ stdcall -version=0x502+ -roscompat MD5Final(ptr) ntdll.MD5Final
|
||||||
|
@ stdcall -version=0x502 -noroscompat MD5Init(ptr)
|
||||||
|
@ stdcall -version=0x600+ -noroscompat MD5Init(ptr) ntdll.MD5Init
|
||||||
|
@ stdcall -version=0x502+ -roscompat MD5Init(ptr) ntdll.MD5Init
|
||||||
|
@ stdcall -version=0x502 -noroscompat MD5Update(ptr ptr long)
|
||||||
|
@ stdcall -version=0x600+ -noroscompat MD5Update(ptr ptr long) ntdll.MD5Update
|
||||||
|
@ stdcall -version=0x502+ -roscompat MD5Update(ptr ptr long) ntdll.MD5Update
|
||||||
@ stub MSChapSrvChangePassword2
|
@ stub MSChapSrvChangePassword2
|
||||||
@ stub MSChapSrvChangePassword
|
@ stub MSChapSrvChangePassword
|
||||||
@ stdcall MakeAbsoluteSD2(ptr ptr)
|
@ stdcall MakeAbsoluteSD2(ptr ptr)
|
||||||
@@ -455,10 +470,12 @@
|
|||||||
@ stdcall PrivilegedServiceAuditAlarmW(wstr wstr long ptr long)
|
@ stdcall PrivilegedServiceAuditAlarmW(wstr wstr long ptr long)
|
||||||
@ stub ProcessIdleTasks
|
@ stub ProcessIdleTasks
|
||||||
@ stdcall ProcessTrace(ptr long ptr ptr)
|
@ stdcall ProcessTrace(ptr long ptr ptr)
|
||||||
@ stdcall -version=0x502 QueryAllTracesA(ptr long ptr) ntdll.EtwQueryAllTracesA
|
@ stdcall -version=0x502 -noroscompat QueryAllTracesA(ptr long ptr) ntdll.EtwQueryAllTracesA
|
||||||
@ stdcall -stub -version=0x600+ QueryAllTracesA(ptr long ptr)
|
@ stdcall -version=0x600+ -noroscompat QueryAllTracesA(ptr long ptr) EtwQueryAllTracesA
|
||||||
@ stdcall -version=0x502 QueryAllTracesW(ptr long ptr) ntdll.EtwQueryAllTracesW
|
@ stdcall -version=0x502+ -roscompat QueryAllTracesA(ptr long ptr) ntdll.EtwQueryAllTracesA
|
||||||
@ stdcall -stub -version=0x600+ QueryAllTracesW(ptr long ptr)
|
@ stdcall -version=0x502 -noroscompat QueryAllTracesW(ptr long ptr) ntdll.EtwQueryAllTracesW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat QueryAllTracesW(ptr long ptr) EtwQueryAllTracesW
|
||||||
|
@ stdcall -version=0x502+ -roscompat QueryAllTracesW(ptr long ptr) ntdll.EtwQueryAllTracesW
|
||||||
@ stdcall QueryRecoveryAgentsOnEncryptedFile(wstr ptr)
|
@ stdcall QueryRecoveryAgentsOnEncryptedFile(wstr ptr)
|
||||||
@ stdcall QueryServiceConfig2A(long long ptr long ptr)
|
@ stdcall QueryServiceConfig2A(long long ptr long ptr)
|
||||||
@ stdcall QueryServiceConfig2W(long long ptr long ptr)
|
@ stdcall QueryServiceConfig2W(long long ptr long ptr)
|
||||||
@@ -469,10 +486,12 @@
|
|||||||
@ stdcall QueryServiceObjectSecurity(long long ptr long ptr)
|
@ stdcall QueryServiceObjectSecurity(long long ptr long ptr)
|
||||||
@ stdcall QueryServiceStatus(long ptr)
|
@ stdcall QueryServiceStatus(long ptr)
|
||||||
@ stdcall QueryServiceStatusEx(long long ptr long ptr)
|
@ stdcall QueryServiceStatusEx(long long ptr long ptr)
|
||||||
@ stdcall -version=0x502 QueryTraceA(double str ptr) ntdll.EtwQueryTraceA
|
@ stdcall -version=0x502 -noroscompat QueryTraceA(double str ptr) ntdll.EtwQueryTraceA
|
||||||
@ stdcall -stub -version=0x600+ QueryTraceA(double str ptr)
|
@ stdcall -version=0x600+ -noroscompat QueryTraceA(double str ptr) EtwQueryTraceA
|
||||||
@ stdcall -version=0x502 QueryTraceW(double str ptr) ntdll.EtwQueryTraceW
|
@ stdcall -version=0x502+ -roscompat QueryTraceA(double str ptr) ntdll.EtwQueryTraceA
|
||||||
@ stdcall -stub -version=0x600+ QueryTraceW(double str ptr)
|
@ stdcall -version=0x502 -noroscompat QueryTraceW(double str ptr) ntdll.EtwQueryTraceW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat QueryTraceW(double str ptr) EtwQueryTraceW
|
||||||
|
@ stdcall -version=0x502+ -roscompat QueryTraceW(double str ptr) ntdll.EtwQueryTraceW
|
||||||
@ stdcall QueryUsersOnEncryptedFile(wstr ptr)
|
@ stdcall QueryUsersOnEncryptedFile(wstr ptr)
|
||||||
@ stdcall ReadEncryptedFileRaw(ptr ptr ptr)
|
@ stdcall ReadEncryptedFileRaw(ptr ptr ptr)
|
||||||
@ stdcall ReadEventLogA(long long long ptr long ptr ptr)
|
@ stdcall ReadEventLogA(long long long ptr long ptr ptr)
|
||||||
@@ -482,6 +501,8 @@
|
|||||||
@ stub RegConnectRegistryExA
|
@ stub RegConnectRegistryExA
|
||||||
@ stub RegConnectRegistryExW
|
@ stub RegConnectRegistryExW
|
||||||
@ stdcall RegConnectRegistryW(wstr long ptr)
|
@ stdcall RegConnectRegistryW(wstr long ptr)
|
||||||
|
@ stdcall -version=0x600+ RegCopyTreeA(ptr str ptr)
|
||||||
|
@ stdcall -version=0x600+ RegCopyTreeW(ptr wstr ptr)
|
||||||
@ stdcall RegCreateKeyA(long str ptr)
|
@ stdcall RegCreateKeyA(long str ptr)
|
||||||
@ stdcall RegCreateKeyExA(long str long ptr long long ptr ptr ptr)
|
@ stdcall RegCreateKeyExA(long str long ptr long long ptr ptr ptr)
|
||||||
@ stdcall RegCreateKeyExW(long wstr long ptr long long ptr ptr ptr)
|
@ stdcall RegCreateKeyExW(long wstr long ptr long long ptr ptr ptr)
|
||||||
@@ -490,6 +511,8 @@
|
|||||||
@ stdcall RegDeleteKeyExA(long str long long)
|
@ stdcall RegDeleteKeyExA(long str long long)
|
||||||
@ stdcall RegDeleteKeyExW(long wstr long long)
|
@ stdcall RegDeleteKeyExW(long wstr long long)
|
||||||
@ stdcall RegDeleteKeyW(long wstr)
|
@ stdcall RegDeleteKeyW(long wstr)
|
||||||
|
@ stdcall -version=0x600+ RegDeleteTreeA(long str)
|
||||||
|
@ stdcall -version=0x600+ RegDeleteTreeW(long wstr)
|
||||||
@ stdcall RegDeleteValueA(long str)
|
@ stdcall RegDeleteValueA(long str)
|
||||||
@ stdcall RegDeleteValueW(long wstr)
|
@ stdcall RegDeleteValueW(long wstr)
|
||||||
@ stdcall RegDisablePredefinedCache()
|
@ stdcall RegDisablePredefinedCache()
|
||||||
@@ -533,6 +556,8 @@
|
|||||||
@ stdcall RegSaveKeyExW(long str ptr long)
|
@ stdcall RegSaveKeyExW(long str ptr long)
|
||||||
@ stdcall RegSaveKeyW(long ptr ptr)
|
@ stdcall RegSaveKeyW(long ptr ptr)
|
||||||
@ stdcall RegSetKeySecurity(long long ptr)
|
@ stdcall RegSetKeySecurity(long long ptr)
|
||||||
|
@ stdcall -version=0x600+ RegSetKeyValueA(long str str long ptr long)
|
||||||
|
@ stdcall -version=0x600+ RegSetKeyValueW(long wstr wstr long ptr long)
|
||||||
@ stdcall RegSetValueA(long str long ptr long)
|
@ stdcall RegSetValueA(long str long ptr long)
|
||||||
@ stdcall RegSetValueExA(long str long long ptr long)
|
@ stdcall RegSetValueExA(long str long long ptr long)
|
||||||
@ stdcall RegSetValueExW(long wstr long long ptr long)
|
@ stdcall RegSetValueExW(long wstr long long ptr long)
|
||||||
@@ -607,14 +632,18 @@
|
|||||||
@ stdcall StartServiceCtrlDispatcherA(ptr)
|
@ stdcall StartServiceCtrlDispatcherA(ptr)
|
||||||
@ stdcall StartServiceCtrlDispatcherW(ptr)
|
@ stdcall StartServiceCtrlDispatcherW(ptr)
|
||||||
@ stdcall StartServiceW(long long ptr)
|
@ stdcall StartServiceW(long long ptr)
|
||||||
@ stdcall -version=0x502 StartTraceA(ptr str ptr) ntdll.EtwStartTraceA
|
@ stdcall -version=0x502 -noroscompat StartTraceA(ptr str ptr) ntdll.EtwStartTraceA
|
||||||
@ stdcall -stub -version=0x600+ StartTraceA(ptr str ptr)
|
@ stdcall -version=0x600+ -noroscompat StartTraceA(ptr str ptr) EtwStartTraceA
|
||||||
@ stdcall -version=0x502 StartTraceW(ptr wstr ptr) ntdll.EtwStartTraceW
|
@ stdcall -version=0x502+ -roscompat StartTraceA(ptr str ptr) ntdll.EtwStartTraceA
|
||||||
@ stdcall -stub -version=0x600+ StartTraceW(ptr wstr ptr)
|
@ stdcall -version=0x502 -noroscompat StartTraceW(ptr wstr ptr) ntdll.EtwStartTraceW
|
||||||
@ stdcall -version=0x502 StopTraceA(double str ptr) ntdll.EtwStopTraceA
|
@ stdcall -version=0x600+ -noroscompat StartTraceW(ptr wstr ptr) EtwStartTraceW
|
||||||
@ stdcall -stub -version=0x600+ StopTraceA(double str ptr)
|
@ stdcall -version=0x502+ -roscompat StartTraceW(ptr wstr ptr) ntdll.EtwStartTraceW
|
||||||
@ stdcall -version=0x502 StopTraceW(double wstr ptr) ntdll.EtwStopTraceW
|
@ stdcall -version=0x502 -noroscompat StopTraceA(double str ptr) ntdll.EtwStopTraceA
|
||||||
@ stdcall -stub -version=0x600+ StopTraceW(double wstr ptr)
|
@ stdcall -version=0x600+ -noroscompat StopTraceA(double str ptr) EtwStopTraceA
|
||||||
|
@ stdcall -version=0x502+ -roscompat StopTraceA(double str ptr) ntdll.EtwStopTraceA
|
||||||
|
@ stdcall -version=0x502 -noroscompat StopTraceW(double wstr ptr) ntdll.EtwStopTraceW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat StopTraceW(double wstr ptr) EtwStopTraceW
|
||||||
|
@ stdcall -version=0x502+ -roscompat StopTraceW(double wstr ptr) ntdll.EtwStopTraceW
|
||||||
@ stdcall SystemFunction001(ptr ptr ptr)
|
@ stdcall SystemFunction001(ptr ptr ptr)
|
||||||
@ stdcall SystemFunction002(ptr ptr ptr)
|
@ stdcall SystemFunction002(ptr ptr ptr)
|
||||||
@ stdcall SystemFunction003(ptr ptr)
|
@ stdcall SystemFunction003(ptr ptr)
|
||||||
@@ -653,8 +682,9 @@
|
|||||||
@ stdcall SystemFunction036(ptr long) # RtlGenRandom
|
@ stdcall SystemFunction036(ptr long) # RtlGenRandom
|
||||||
@ stdcall SystemFunction040(ptr long long) # RtlEncryptMemory
|
@ stdcall SystemFunction040(ptr long long) # RtlEncryptMemory
|
||||||
@ stdcall SystemFunction041(ptr long long) # RtlDecryptMemory
|
@ stdcall SystemFunction041(ptr long long) # RtlDecryptMemory
|
||||||
@ stdcall -version=0x502 TraceEvent(double ptr) ntdll.EtwTraceEvent
|
@ stdcall -version=0x502 -noroscompat TraceEvent(double ptr) ntdll.EtwTraceEvent
|
||||||
@ stdcall -stub -version=0x600+ TraceEvent(double ptr)
|
@ stdcall -version=0x600+ -noroscompat TraceEvent(double ptr) EtwTraceEvent
|
||||||
|
@ stdcall -version=0x502+ -roscompat TraceEvent(double ptr) ntdll.EtwTraceEvent
|
||||||
@ stdcall TraceEventInstance(double ptr ptr ptr) ntdll.EtwTraceEventInstance
|
@ stdcall TraceEventInstance(double ptr ptr ptr) ntdll.EtwTraceEventInstance
|
||||||
@ varargs TraceMessage() ntdll.EtwTraceMessage
|
@ varargs TraceMessage() ntdll.EtwTraceMessage
|
||||||
@ stdcall TraceMessageVa() ntdll.EtwTraceMessageVa
|
@ stdcall TraceMessageVa() ntdll.EtwTraceMessageVa
|
||||||
@@ -666,10 +696,12 @@
|
|||||||
@ stdcall UnlockServiceDatabase(ptr)
|
@ stdcall UnlockServiceDatabase(ptr)
|
||||||
@ stub UnregisterIdleTask
|
@ stub UnregisterIdleTask
|
||||||
@ stdcall UnregisterTraceGuids(double) ntdll.EtwUnregisterTraceGuids
|
@ stdcall UnregisterTraceGuids(double) ntdll.EtwUnregisterTraceGuids
|
||||||
@ stdcall -version=0x502 UpdateTraceA(double str ptr) ntdll.EtwUpdateTraceA
|
@ stdcall -version=0x502 -noroscompat UpdateTraceA(double str ptr) ntdll.EtwUpdateTraceA
|
||||||
@ stdcall -stub -version=0x600+ UpdateTraceA(double str ptr)
|
@ stdcall -version=0x600+ -noroscompat UpdateTraceA(double str ptr) EtwUpdateTraceA
|
||||||
@ stdcall -version=0x502 UpdateTraceW(double wstr ptr) ntdll.EtwUpdateTraceW
|
@ stdcall -version=0x502+ -roscompat UpdateTraceA(double str ptr) ntdll.EtwUpdateTraceA
|
||||||
@ stdcall -stub -version=0x600+ UpdateTraceW(double wstr ptr)
|
@ stdcall -version=0x502 -noroscompat UpdateTraceW(double wstr ptr) ntdll.EtwUpdateTraceW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat UpdateTraceW(double wstr ptr) EtwUpdateTraceW
|
||||||
|
@ stdcall -version=0x502+ -roscompat UpdateTraceW(double wstr ptr) ntdll.EtwUpdateTraceW
|
||||||
@ stub WdmWmiServiceMain
|
@ stub WdmWmiServiceMain
|
||||||
@ stub WmiCloseBlock
|
@ stub WmiCloseBlock
|
||||||
@ stub WmiCloseTraceWithCursor
|
@ stub WmiCloseTraceWithCursor
|
||||||
@@ -687,10 +719,12 @@
|
|||||||
@ stub WmiGetTraceHeader
|
@ stub WmiGetTraceHeader
|
||||||
@ stub WmiMofEnumerateResourcesA
|
@ stub WmiMofEnumerateResourcesA
|
||||||
@ stub WmiMofEnumerateResourcesW
|
@ stub WmiMofEnumerateResourcesW
|
||||||
@ stdcall -version=0x502 WmiNotificationRegistrationA(ptr long ptr long long) ntdll.EtwNotificationRegistrationA
|
@ stdcall -version=0x502 -noroscompat WmiNotificationRegistrationA(ptr long ptr long long) ntdll.EtwNotificationRegistrationA
|
||||||
@ stdcall -stub -version=0x600+ WmiNotificationRegistrationA(ptr long ptr long long)
|
@ stdcall -version=0x600+ -noroscompat WmiNotificationRegistrationA(ptr long ptr long long) EtwNotificationRegistrationA
|
||||||
@ stdcall -version=0x502 WmiNotificationRegistrationW(ptr long ptr long long) ntdll.EtwNotificationRegistrationW
|
@ stdcall -version=0x502+ -roscompat WmiNotificationRegistrationA(ptr long ptr long long) ntdll.EtwNotificationRegistrationA
|
||||||
@ stdcall -stub -version=0x600+ WmiNotificationRegistrationW(ptr long ptr long long)
|
@ stdcall -version=0x502 -noroscompat WmiNotificationRegistrationW(ptr long ptr long long) ntdll.EtwNotificationRegistrationW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat WmiNotificationRegistrationW(ptr long ptr long long) EtwNotificationRegistrationW
|
||||||
|
@ stdcall -version=0x502+ -roscompat WmiNotificationRegistrationW(ptr long ptr long long) ntdll.EtwNotificationRegistrationW
|
||||||
@ stub WmiOpenBlock
|
@ stub WmiOpenBlock
|
||||||
@ stub WmiOpenTraceWithCursor
|
@ stub WmiOpenTraceWithCursor
|
||||||
@ stub WmiParseTraceEvent
|
@ stub WmiParseTraceEvent
|
||||||
@@ -703,10 +737,12 @@
|
|||||||
@ stub WmiQuerySingleInstanceMultipleA
|
@ stub WmiQuerySingleInstanceMultipleA
|
||||||
@ stub WmiQuerySingleInstanceMultipleW
|
@ stub WmiQuerySingleInstanceMultipleW
|
||||||
@ stub WmiQuerySingleInstanceW
|
@ stub WmiQuerySingleInstanceW
|
||||||
@ stdcall -version=0x502 WmiReceiveNotificationsA(long long long long) ntdll.EtwReceiveNotificationsA
|
@ stdcall -version=0x502 -noroscompat WmiReceiveNotificationsA(long long long long) ntdll.EtwReceiveNotificationsA
|
||||||
@ stdcall -stub -version=0x600+ WmiReceiveNotificationsA(long long long long)
|
@ stdcall -version=0x600+ -noroscompat WmiReceiveNotificationsA(long long long long) EtwReceiveNotificationsA
|
||||||
@ stdcall -version=0x502 WmiReceiveNotificationsW(long long long long) ntdll.EtwReceiveNotificationsW
|
@ stdcall -version=0x502+ -roscompat WmiReceiveNotificationsA(long long long long) ntdll.EtwReceiveNotificationsA
|
||||||
@ stdcall -stub -version=0x600+ WmiReceiveNotificationsW(long long long long)
|
@ stdcall -version=0x502 -noroscompat WmiReceiveNotificationsW(long long long long) ntdll.EtwReceiveNotificationsW
|
||||||
|
@ stdcall -version=0x600+ -noroscompat WmiReceiveNotificationsW(long long long long) EtwReceiveNotificationsW
|
||||||
|
@ stdcall -version=0x502+ -roscompat WmiReceiveNotificationsW(long long long long) ntdll.EtwReceiveNotificationsW
|
||||||
@ stub WmiSetSingleInstanceA
|
@ stub WmiSetSingleInstanceA
|
||||||
@ stub WmiSetSingleInstanceW
|
@ stub WmiSetSingleInstanceW
|
||||||
@ stub WmiSetSingleItemA
|
@ stub WmiSetSingleItemA
|
||||||
|
@@ -3,7 +3,6 @@ remove_definitions(-D_WIN32_WINNT=0x502 -DWINVER=0x502)
|
|||||||
add_definitions(-D_WIN32_WINNT=0x600 -DWINVER=0x600)
|
add_definitions(-D_WIN32_WINNT=0x600 -DWINVER=0x600)
|
||||||
|
|
||||||
add_definitions(-D_ADVAPI32_ -D_ADVAPI32_VISTA_)
|
add_definitions(-D_ADVAPI32_ -D_ADVAPI32_VISTA_)
|
||||||
spec2def(advapi32_vista.dll advapi32_vista.spec ADD_IMPORTLIB)
|
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
../advapi32
|
../advapi32
|
||||||
@@ -15,9 +14,20 @@ list(APPEND SOURCE
|
|||||||
../advapi32/reg/reg.c
|
../advapi32/reg/reg.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/advapi32_vista.def)
|
${CMAKE_CURRENT_BINARY_DIR}/advapi32_vista.def)
|
||||||
|
|
||||||
add_library(advapi32_vista MODULE ${SOURCE} advapi32_vista.rc)
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
set_module_type(advapi32_vista win32dll ENTRYPOINT DllMain 12)
|
# On NT6+ builds this is an empty interface library
|
||||||
target_link_libraries(advapi32_vista wine ${PSEH_LIB})
|
add_library(libadvapi32_vista INTERFACE)
|
||||||
add_importlibs(advapi32_vista advapi32 kernel32 ntdll)
|
target_sources(libadvapi32_vista INTERFACE $<TARGET_OBJECTS:roscompat_desc>)
|
||||||
add_dependencies(advapi32_vista psdk advapi32)
|
else()
|
||||||
add_cd_file(TARGET advapi32_vista DESTINATION reactos/system32 FOR all)
|
# On pre-NT6 builds we create an additional DLL
|
||||||
|
spec2def(advapi32_vista.dll advapi32_vista.spec ADD_IMPORTLIB)
|
||||||
|
add_library(advapi32_vista MODULE ${SOURCE} advapi32_vista.rc)
|
||||||
|
set_module_type(advapi32_vista win32dll ENTRYPOINT DllMain 12)
|
||||||
|
target_link_libraries(advapi32_vista wine ${PSEH_LIB})
|
||||||
|
add_importlibs(advapi32_vista advapi32 kernel32 ntdll)
|
||||||
|
add_dependencies(advapi32_vista psdk advapi32)
|
||||||
|
add_cd_file(TARGET advapi32_vista DESTINATION reactos/system32 FOR all)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Implicitly link against advapi32
|
||||||
|
target_link_libraries(libadvapi32_vista INTERFACE libadvapi32)
|
||||||
|
@@ -34,6 +34,6 @@ add_typelib(atl_lib.idl)
|
|||||||
add_dependencies(atl stdole2)
|
add_dependencies(atl stdole2)
|
||||||
set_module_type(atl win32dll)
|
set_module_type(atl win32dll)
|
||||||
target_link_libraries(atl uuid wine)
|
target_link_libraries(atl uuid wine)
|
||||||
add_importlibs(atl oleaut32 ole32 user32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
add_importlibs(atl oleaut32 ole32 user32 gdi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
||||||
add_pch(atl precomp.h SOURCE)
|
add_pch(atl precomp.h SOURCE)
|
||||||
add_cd_file(TARGET atl DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET atl DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -22,6 +22,6 @@ add_library(atl100 MODULE
|
|||||||
|
|
||||||
set_module_type(atl100 win32dll)
|
set_module_type(atl100 win32dll)
|
||||||
target_link_libraries(atl100 uuid wine)
|
target_link_libraries(atl100 uuid wine)
|
||||||
add_importlibs(atl100 ole32 oleaut32 user32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
add_importlibs(atl100 ole32 oleaut32 user32 gdi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
||||||
add_pch(atl100 precomp.h SOURCE)
|
add_pch(atl100 precomp.h SOURCE)
|
||||||
add_cd_file(TARGET atl100 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET atl100 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -22,6 +22,6 @@ add_library(atl80 MODULE
|
|||||||
|
|
||||||
set_module_type(atl80 win32dll)
|
set_module_type(atl80 win32dll)
|
||||||
target_link_libraries(atl80 uuid wine)
|
target_link_libraries(atl80 uuid wine)
|
||||||
add_importlibs(atl80 oleaut32 user32 ole32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
add_importlibs(atl80 oleaut32 user32 ole32 gdi32 advapi32_vista shlwapi msvcrt kernel32 ntdll)
|
||||||
add_pch(atl80 precomp.h SOURCE)
|
add_pch(atl80 precomp.h SOURCE)
|
||||||
add_cd_file(TARGET atl80 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET atl80 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -62,6 +62,7 @@ add_library(comctl32 MODULE
|
|||||||
${SOURCE}
|
${SOURCE}
|
||||||
${PCH_SKIP_SOURCE}
|
${PCH_SKIP_SOURCE}
|
||||||
rsrc.rc
|
rsrc.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/comctl32_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/comctl32.def)
|
${CMAKE_CURRENT_BINARY_DIR}/comctl32.def)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
@@ -55,6 +55,6 @@ endif()
|
|||||||
set_module_type(crypt32 win32dll)
|
set_module_type(crypt32 win32dll)
|
||||||
target_link_libraries(crypt32 wine ${PSEH_LIB} oldnames)
|
target_link_libraries(crypt32 wine ${PSEH_LIB} oldnames)
|
||||||
add_delay_importlibs(crypt32 cryptnet)
|
add_delay_importlibs(crypt32 cryptnet)
|
||||||
add_importlibs(crypt32 bcrypt user32 advapi32 advapi32_vista msvcrt kernel32 ntdll)
|
add_importlibs(crypt32 bcrypt user32 advapi32_vista msvcrt kernel32 ntdll)
|
||||||
add_pch(crypt32 precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(crypt32 precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET crypt32 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET crypt32 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -153,6 +153,7 @@ INT __WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, LPST
|
|||||||
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
|
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
|
||||||
#define IMAGE_DEBUG_MISC_EXENAME 1
|
#define IMAGE_DEBUG_MISC_EXENAME 1
|
||||||
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
|
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
|
||||||
|
#if 0
|
||||||
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
||||||
DWORD Characteristics;
|
DWORD Characteristics;
|
||||||
DWORD TimeDateStamp;
|
DWORD TimeDateStamp;
|
||||||
@@ -166,6 +167,7 @@ typedef struct _IMAGE_EXPORT_DIRECTORY {
|
|||||||
DWORD AddressOfNames;
|
DWORD AddressOfNames;
|
||||||
DWORD AddressOfNameOrdinals;
|
DWORD AddressOfNameOrdinals;
|
||||||
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
||||||
|
#endif
|
||||||
typedef struct _IMAGE_DEBUG_MISC {
|
typedef struct _IMAGE_DEBUG_MISC {
|
||||||
DWORD DataType;
|
DWORD DataType;
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
|
@@ -10,7 +10,7 @@ list(APPEND COMMON_SOURCE
|
|||||||
assembly.c
|
assembly.c
|
||||||
fusion.c
|
fusion.c
|
||||||
precomp.h
|
precomp.h
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/fusion_stubs.c)
|
)
|
||||||
|
|
||||||
add_library(fusion_common STATIC ${COMMON_SOURCE})
|
add_library(fusion_common STATIC ${COMMON_SOURCE})
|
||||||
add_dependencies(fusion_common psdk)
|
add_dependencies(fusion_common psdk)
|
||||||
@@ -18,6 +18,7 @@ add_pch(fusion_common precomp.h COMMON_SOURCE)
|
|||||||
|
|
||||||
add_library(fusion MODULE
|
add_library(fusion MODULE
|
||||||
version.rc
|
version.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/fusion_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
||||||
|
|
||||||
set_module_type(fusion win32dll)
|
set_module_type(fusion win32dll)
|
||||||
|
@@ -6,6 +6,7 @@ spec2def(fusion.dll fusion.spec)
|
|||||||
|
|
||||||
add_library(fusion_1_1 MODULE
|
add_library(fusion_1_1 MODULE
|
||||||
${fusion_folder}/version.rc
|
${fusion_folder}/version.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/fusion_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
||||||
|
|
||||||
set_module_type(fusion_1_1 win32dll)
|
set_module_type(fusion_1_1 win32dll)
|
||||||
|
@@ -6,6 +6,7 @@ spec2def(fusion.dll fusion.spec)
|
|||||||
|
|
||||||
add_library(fusion_2_0 MODULE
|
add_library(fusion_2_0 MODULE
|
||||||
${fusion_folder}/version.rc
|
${fusion_folder}/version.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/fusion_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
||||||
|
|
||||||
set_module_type(fusion_2_0 win32dll)
|
set_module_type(fusion_2_0 win32dll)
|
||||||
|
@@ -23,6 +23,6 @@ add_library(inseng MODULE
|
|||||||
|
|
||||||
set_module_type(inseng win32dll)
|
set_module_type(inseng win32dll)
|
||||||
target_link_libraries(inseng uuid wine)
|
target_link_libraries(inseng uuid wine)
|
||||||
add_importlibs(inseng ole32 urlmon kernel32_vista msvcrt kernel32 ntdll)
|
add_importlibs(inseng ole32 urlmon msvcrt kernel32_vista ntdll)
|
||||||
add_pch(inseng precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(inseng precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET inseng DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET inseng DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
@ stub -version=0x600+ BaseGenerateAppCompatData
|
@ stub -version=0x600+ BaseGenerateAppCompatData
|
||||||
@ stdcall BaseInitAppcompatCacheSupport()
|
@ stdcall BaseInitAppcompatCacheSupport()
|
||||||
@ stdcall BaseIsAppcompatInfrastructureDisabled() IsShimInfrastructureDisabled
|
@ stdcall BaseIsAppcompatInfrastructureDisabled() IsShimInfrastructureDisabled
|
||||||
@ stdcall -version=0x501-0x502 BaseProcessInitPostImport()
|
@ stdcall -version=0x501-0x502 -noroscompat BaseProcessInitPostImport()
|
||||||
@ stdcall -version=0x600+ BaseProcessInitPostImport() # HACK: This export is dynamicaly imported by ntdll
|
@ stdcall -version=0x600+ BaseProcessInitPostImport() # HACK: This export is dynamicaly imported by ntdll
|
||||||
;@ stdcall -version=0x502 -arch=x86_64 BaseProcessStart()
|
;@ stdcall -version=0x502 -arch=x86_64 BaseProcessStart()
|
||||||
@ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check
|
@ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check
|
||||||
|
@@ -4,7 +4,6 @@ add_definitions(-D_WIN32_WINNT=0x600 -DWINVER=0x600)
|
|||||||
|
|
||||||
add_definitions(-D_KERNEL32_)
|
add_definitions(-D_KERNEL32_)
|
||||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/subsys ..)
|
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/subsys ..)
|
||||||
spec2def(kernel32_vista.dll kernel32_vista.spec ADD_IMPORTLIB)
|
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
firmware.c
|
firmware.c
|
||||||
@@ -25,13 +24,25 @@ add_library(kernel32_vista_static ${SOURCE})
|
|||||||
target_link_libraries(kernel32_vista_static ${PSEH_LIB})
|
target_link_libraries(kernel32_vista_static ${PSEH_LIB})
|
||||||
add_dependencies(kernel32_vista_static psdk)
|
add_dependencies(kernel32_vista_static psdk)
|
||||||
|
|
||||||
add_library(kernel32_vista MODULE
|
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||||
DllMain.c
|
# On NT6+ builds this is an empty interface library
|
||||||
kernel32_vista.rc
|
add_library(libkernel32_vista INTERFACE)
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/kernel32_vista.def)
|
target_sources(libkernel32_vista INTERFACE $<TARGET_OBJECTS:roscompat_desc>)
|
||||||
set_module_type(kernel32_vista win32dll ENTRYPOINT DllMain 12)
|
else()
|
||||||
target_link_libraries(kernel32_vista kernel32_vista_static kernel32_shared)
|
# On pre-NT6 builds we create an additional DLL
|
||||||
add_importlibs(kernel32_vista kernel32 ntdll_vista ntdll)
|
spec2def(kernel32_vista.dll kernel32_vista.spec ADD_IMPORTLIB)
|
||||||
add_delay_importlibs(kernel32_vista ntdll_vista)
|
add_library(kernel32_vista MODULE
|
||||||
add_dependencies(kernel32_vista psdk)
|
DllMain.c
|
||||||
add_cd_file(TARGET kernel32_vista DESTINATION reactos/system32 FOR all)
|
kernel32_vista.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/kernel32_vista_stubs.c
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/kernel32_vista.def)
|
||||||
|
set_module_type(kernel32_vista win32dll ENTRYPOINT DllMain 12)
|
||||||
|
target_link_libraries(kernel32_vista kernel32_vista_static kernel32_shared)
|
||||||
|
add_importlibs(kernel32_vista kernel32 ntdll_vista)
|
||||||
|
add_delay_importlibs(kernel32_vista ntdll_vista)
|
||||||
|
add_dependencies(kernel32_vista psdk)
|
||||||
|
add_cd_file(TARGET kernel32_vista DESTINATION reactos/system32 FOR all)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Implicitly link against kernel32
|
||||||
|
target_link_libraries(libkernel32_vista INTERFACE libkernel32)
|
||||||
|
@@ -32,7 +32,7 @@ add_library(msctf MODULE
|
|||||||
|
|
||||||
set_module_type(msctf win32dll UNICODE)
|
set_module_type(msctf win32dll UNICODE)
|
||||||
target_link_libraries(msctf uuid wine cicero)
|
target_link_libraries(msctf uuid wine cicero)
|
||||||
add_importlibs(msctf user32 advapi32 advapi32_vista msvcrt kernel32 ntdll)
|
add_importlibs(msctf user32 advapi32_vista msvcrt kernel32 ntdll)
|
||||||
add_delay_importlibs(msctf shell32 shlwapi ole32 oleaut32 imm32 gdi32)
|
add_delay_importlibs(msctf shell32 shlwapi ole32 oleaut32 imm32 gdi32)
|
||||||
add_pch(msctf precomp.h SOURCE)
|
add_pch(msctf precomp.h SOURCE)
|
||||||
add_cd_file(TARGET msctf DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET msctf DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -87,13 +87,12 @@ set_module_type(msi win32dll)
|
|||||||
target_link_libraries(msi uuid ${PSEH_LIB} wine_dll_register oldnames)
|
target_link_libraries(msi uuid ${PSEH_LIB} wine_dll_register oldnames)
|
||||||
add_dependencies(msi msi_idlheader)
|
add_dependencies(msi msi_idlheader)
|
||||||
add_delay_importlibs(msi odbccp32 crypt32 wintrust apphelp)
|
add_delay_importlibs(msi odbccp32 crypt32 wintrust apphelp)
|
||||||
add_importlibs(msi advapi32 advapi32_vista cabinet comctl32 gdi32 ole32 oleaut32 shell32 shlwapi rpcrt4 urlmon user32 version wininet sxs
|
add_importlibs(msi advapi32_vista cabinet comctl32 gdi32 ole32 oleaut32 shell32 shlwapi rpcrt4 urlmon user32 version wininet sxs
|
||||||
#FIXME : imagehlp, mspatcha should be in delayed imports
|
#FIXME : imagehlp, mspatcha should be in delayed imports
|
||||||
imagehlp
|
imagehlp
|
||||||
mspatcha
|
mspatcha
|
||||||
msvcrt
|
msvcrt
|
||||||
kernel32_vista
|
kernel32_vista
|
||||||
kernel32
|
|
||||||
ntdll)
|
ntdll)
|
||||||
|
|
||||||
add_pch(msi precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(msi precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
|
@@ -241,8 +241,8 @@
|
|||||||
@ cdecl -arch=i386 -norelay __CxxFrameHandler2(ptr ptr ptr ptr) __CxxFrameHandler
|
@ cdecl -arch=i386 -norelay __CxxFrameHandler2(ptr ptr ptr ptr) __CxxFrameHandler
|
||||||
@ cdecl -version=0x600+ -arch=x86_64 -norelay __CxxFrameHandler2(ptr ptr ptr ptr) __CxxFrameHandler
|
@ cdecl -version=0x600+ -arch=x86_64 -norelay __CxxFrameHandler2(ptr ptr ptr ptr) __CxxFrameHandler
|
||||||
@ cdecl -arch=arm -norelay __CxxFrameHandler3(ptr ptr ptr ptr)
|
@ cdecl -arch=arm -norelay __CxxFrameHandler3(ptr ptr ptr ptr)
|
||||||
@ cdecl -version=0x600+ -arch=i386 -norelay __CxxFrameHandler3(ptr ptr ptr ptr)
|
@ cdecl -version=0x600+ -arch=i386 -norelay -private __CxxFrameHandler3(ptr ptr ptr ptr) # We link the one from msvcrtex
|
||||||
@ cdecl -version=0x600+ -arch=x86_64 -norelay __CxxFrameHandler3(ptr ptr ptr ptr) __CxxFrameHandler
|
@ cdecl -version=0x600+ -arch=x86_64 -norelay -private __CxxFrameHandler3(ptr ptr ptr ptr) __CxxFrameHandler # We link the one from msvcrtex
|
||||||
@ stdcall -arch=i386 __CxxLongjmpUnwind(ptr)
|
@ stdcall -arch=i386 __CxxLongjmpUnwind(ptr)
|
||||||
@ cdecl -arch=i386 __CxxQueryExceptionSize()
|
@ cdecl -arch=i386 __CxxQueryExceptionSize()
|
||||||
@ cdecl -arch=i386 __CxxRegisterExceptionObject()
|
@ cdecl -arch=i386 __CxxRegisterExceptionObject()
|
||||||
@@ -1035,7 +1035,7 @@
|
|||||||
@ cdecl -version=0x600+ _strupr_s_l(str long ptr)
|
@ cdecl -version=0x600+ _strupr_s_l(str long ptr)
|
||||||
@ cdecl -version=0x600+ _strxfrm_l(ptr str long ptr)
|
@ cdecl -version=0x600+ _strxfrm_l(ptr str long ptr)
|
||||||
@ cdecl _swab(str str long)
|
@ cdecl _swab(str str long)
|
||||||
@ cdecl -version=0x400-0x502 -impsym _swprintf(ptr str) swprintf # Compatibility for pre NT6
|
@ cdecl -version=0x400-0x502 -noroscompat -impsym _swprintf(ptr str) swprintf # Compatibility for pre NT6
|
||||||
@ cdecl -version=0x600+ _swprintf(ptr str)
|
@ cdecl -version=0x600+ _swprintf(ptr str)
|
||||||
@ stub -version=0x600+ _swprintf_c
|
@ stub -version=0x600+ _swprintf_c
|
||||||
@ stub -version=0x600+ _swprintf_c_l
|
@ stub -version=0x600+ _swprintf_c_l
|
||||||
@@ -1085,7 +1085,7 @@
|
|||||||
@ stub -version=0x600+ _vcprintf_p_l
|
@ stub -version=0x600+ _vcprintf_p_l
|
||||||
@ stub -version=0x600+ _vcprintf_s
|
@ stub -version=0x600+ _vcprintf_s
|
||||||
@ stub -version=0x600+ _vcprintf_s_l
|
@ stub -version=0x600+ _vcprintf_s_l
|
||||||
@ stub -version=0x600+ _vcwprintf
|
@ cdecl -version=0x600+ _vcwprintf(wstr ptr)
|
||||||
@ stub -version=0x600+ _vcwprintf_l
|
@ stub -version=0x600+ _vcwprintf_l
|
||||||
@ stub -version=0x600+ _vcwprintf_p
|
@ stub -version=0x600+ _vcwprintf_p
|
||||||
@ stub -version=0x600+ _vcwprintf_p_l
|
@ stub -version=0x600+ _vcwprintf_p_l
|
||||||
@@ -1123,7 +1123,7 @@
|
|||||||
@ stub -version=0x600+ _vsprintf_p
|
@ stub -version=0x600+ _vsprintf_p
|
||||||
@ stub -version=0x600+ _vsprintf_p_l
|
@ stub -version=0x600+ _vsprintf_p_l
|
||||||
@ stub -version=0x600+ _vsprintf_s_l
|
@ stub -version=0x600+ _vsprintf_s_l
|
||||||
@ cdecl -version=0x400-0x502 -impsym _vswprintf() vswprintf # Compatibility for pre NT6
|
@ cdecl -version=0x400-0x502 -noroscompat -impsym _vswprintf() vswprintf # Compatibility for pre NT6
|
||||||
@ stub -version=0x600+ _vswprintf
|
@ stub -version=0x600+ _vswprintf
|
||||||
@ stub -version=0x600+ _vswprintf_c
|
@ stub -version=0x600+ _vswprintf_c
|
||||||
@ stub -version=0x600+ _vswprintf_c_l
|
@ stub -version=0x600+ _vswprintf_c_l
|
||||||
@@ -1452,7 +1452,7 @@
|
|||||||
@ cdecl sinh(double)
|
@ cdecl sinh(double)
|
||||||
@ cdecl -arch=x86_64,arm sinhf(long)
|
@ cdecl -arch=x86_64,arm sinhf(long)
|
||||||
@ varargs sprintf(ptr str)
|
@ varargs sprintf(ptr str)
|
||||||
@ stub -version=0x600+ sprintf_s
|
@ varargs -version=0x600+ sprintf_s()
|
||||||
@ cdecl sqrt(double)
|
@ cdecl sqrt(double)
|
||||||
@ cdecl -arch=x86_64,arm sqrtf(long)
|
@ cdecl -arch=x86_64,arm sqrtf(long)
|
||||||
@ cdecl srand(long)
|
@ cdecl srand(long)
|
||||||
|
@@ -90,7 +90,7 @@ endif()
|
|||||||
set_module_type(ole32 win32dll)
|
set_module_type(ole32 win32dll)
|
||||||
target_link_libraries(ole32 wine uuid ${PSEH_LIB})
|
target_link_libraries(ole32 wine uuid ${PSEH_LIB})
|
||||||
add_delay_importlibs(ole32 oleaut32)
|
add_delay_importlibs(ole32 oleaut32)
|
||||||
add_importlibs(ole32 advapi32 user32 gdi32 rpcrt4 msvcrt kernel32 kernel32_vista ntdll)
|
add_importlibs(ole32 advapi32 user32 gdi32 rpcrt4 msvcrt kernel32_vista ntdll)
|
||||||
add_dependencies(ole32 ole32idl)
|
add_dependencies(ole32 ole32idl)
|
||||||
add_pch(ole32 precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(ole32 precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET ole32 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET ole32 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -60,6 +60,6 @@ add_dependencies(oleaut32 oleaut32_idlheader)
|
|||||||
set_module_type(oleaut32 win32dll)
|
set_module_type(oleaut32 win32dll)
|
||||||
target_link_libraries(oleaut32 wine wineldr uuid ${PSEH_LIB})
|
target_link_libraries(oleaut32 wine wineldr uuid ${PSEH_LIB})
|
||||||
add_delay_importlibs(oleaut32 comctl32 urlmon windowscodecs)
|
add_delay_importlibs(oleaut32 comctl32 urlmon windowscodecs)
|
||||||
add_importlibs(oleaut32 ole32 rpcrt4 user32 gdi32 advapi32 kernel32_vista msvcrt kernel32 ntdll)
|
add_importlibs(oleaut32 ole32 rpcrt4 user32 gdi32 advapi32 msvcrt kernel32_vista ntdll)
|
||||||
add_pch(oleaut32 precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(oleaut32 precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET oleaut32 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET oleaut32 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -14,5 +14,5 @@ list(APPEND SOURCE
|
|||||||
add_library(pdh MODULE ${SOURCE})
|
add_library(pdh MODULE ${SOURCE})
|
||||||
set_module_type(pdh win32dll)
|
set_module_type(pdh win32dll)
|
||||||
target_link_libraries(pdh wine)
|
target_link_libraries(pdh wine)
|
||||||
add_importlibs(pdh msvcrt kernel32_vista kernel32 ntdll)
|
add_importlibs(pdh msvcrt kernel32_vista ntdll)
|
||||||
add_cd_file(TARGET pdh DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET pdh DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -66,7 +66,7 @@ endif()
|
|||||||
set_module_type(rpcrt4 win32dll)
|
set_module_type(rpcrt4 win32dll)
|
||||||
target_link_libraries(rpcrt4 wine uuid ${PSEH_LIB})
|
target_link_libraries(rpcrt4 wine uuid ${PSEH_LIB})
|
||||||
add_delay_importlibs(rpcrt4 iphlpapi wininet secur32 user32 oleaut32)
|
add_delay_importlibs(rpcrt4 iphlpapi wininet secur32 user32 oleaut32)
|
||||||
add_importlibs(rpcrt4 advapi32 advapi32_vista kernel32_vista ws2_32 msvcrt kernel32 ntdll)
|
add_importlibs(rpcrt4 advapi32_vista ws2_32 msvcrt kernel32_vista ntdll)
|
||||||
add_dependencies(rpcrt4 ndr_types_header)
|
add_dependencies(rpcrt4 ndr_types_header)
|
||||||
add_pch(rpcrt4 precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(rpcrt4 precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET rpcrt4 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET rpcrt4 DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -20,6 +20,7 @@ list(APPEND SOURCE
|
|||||||
add_library(rsaenh MODULE
|
add_library(rsaenh MODULE
|
||||||
${SOURCE}
|
${SOURCE}
|
||||||
rsrc.rc
|
rsrc.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/rsaenh_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/rsaenh.def)
|
${CMAKE_CURRENT_BINARY_DIR}/rsaenh.def)
|
||||||
|
|
||||||
set_module_type(rsaenh win32dll)
|
set_module_type(rsaenh win32dll)
|
||||||
|
@@ -14,5 +14,5 @@ list(APPEND SOURCE
|
|||||||
add_library(snmpapi MODULE ${SOURCE} snmpapi.rc)
|
add_library(snmpapi MODULE ${SOURCE} snmpapi.rc)
|
||||||
set_module_type(snmpapi win32dll)
|
set_module_type(snmpapi win32dll)
|
||||||
target_link_libraries(snmpapi wine)
|
target_link_libraries(snmpapi wine)
|
||||||
add_importlibs(snmpapi msvcrt kernel32_vista kernel32 ntdll)
|
add_importlibs(snmpapi msvcrt kernel32_vista ntdll)
|
||||||
add_cd_file(TARGET snmpapi DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET snmpapi DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -2,9 +2,9 @@
|
|||||||
2 stdcall GenericChainFinalProv(ptr) wintrust.GenericChainFinalProv
|
2 stdcall GenericChainFinalProv(ptr) wintrust.GenericChainFinalProv
|
||||||
3 stdcall HTTPSCertificateTrust(ptr) wintrust.HTTPSCertificateTrust
|
3 stdcall HTTPSCertificateTrust(ptr) wintrust.HTTPSCertificateTrust
|
||||||
4 stdcall SoftpubDefCertInit(ptr) wintrust.SoftpubDefCertInit
|
4 stdcall SoftpubDefCertInit(ptr) wintrust.SoftpubDefCertInit
|
||||||
5 stub SoftpubFreeDefUsageCallData
|
5 stdcall SoftpubFreeDefUsageCallData(long ptr) wintrust.SoftpubFreeDefUsageCallData
|
||||||
6 stub SoftpubLoadDefUsageCallData
|
6 stdcall SoftpubLoadDefUsageCallData(long ptr) wintrust.SoftpubLoadDefUsageCallData
|
||||||
7 stub AddPersonalTrustDBPages
|
7 stdcall AddPersonalTrustDBPages() wintrust.AddPersonalTrustDBPages
|
||||||
@ stdcall -private DllRegisterServer() wintrust.SoftpubDllRegisterServer
|
@ stdcall -private DllRegisterServer() wintrust.SoftpubDllRegisterServer
|
||||||
@ stdcall -private DllUnregisterServer() wintrust.SoftpubDllUnregisterServer
|
@ stdcall -private DllUnregisterServer() wintrust.SoftpubDllUnregisterServer
|
||||||
10 stdcall DriverCleanupPolicy(ptr) wintrust.DriverCleanupPolicy
|
10 stdcall DriverCleanupPolicy(ptr) wintrust.DriverCleanupPolicy
|
||||||
|
@@ -52,6 +52,6 @@ add_library(urlmon MODULE
|
|||||||
set_module_type(urlmon win32dll)
|
set_module_type(urlmon win32dll)
|
||||||
target_link_libraries(urlmon uuid wine ${PSEH_LIB})
|
target_link_libraries(urlmon uuid wine ${PSEH_LIB})
|
||||||
add_delay_importlibs(urlmon advpack)
|
add_delay_importlibs(urlmon advpack)
|
||||||
add_importlibs(urlmon rpcrt4 propsys ole32 oleaut32 shlwapi shell32 wininet user32 advapi32 kernel32_vista msvcrt kernel32 ntdll)
|
add_importlibs(urlmon rpcrt4 propsys ole32 oleaut32 shlwapi shell32 wininet user32 advapi32 msvcrt kernel32_vista ntdll)
|
||||||
add_pch(urlmon precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(urlmon precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET urlmon DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET urlmon DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -24,6 +24,6 @@ add_library(userenv MODULE
|
|||||||
|
|
||||||
set_module_type(userenv win32dll)
|
set_module_type(userenv win32dll)
|
||||||
target_link_libraries(userenv uuid)
|
target_link_libraries(userenv uuid)
|
||||||
add_importlibs(userenv advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
add_importlibs(userenv advapi32_vista user32 msvcrt kernel32 ntdll)
|
||||||
add_pch(userenv precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(userenv precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET userenv DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET userenv DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -80,6 +80,6 @@ endif()
|
|||||||
|
|
||||||
set_module_type(windowscodecs win32dll)
|
set_module_type(windowscodecs win32dll)
|
||||||
target_link_libraries(windowscodecs wine uuid ${PSEH_LIB})
|
target_link_libraries(windowscodecs wine uuid ${PSEH_LIB})
|
||||||
add_importlibs(windowscodecs ole32 oleaut32 rpcrt4 shlwapi user32 gdi32 advapi32 advapi32_vista propsys msvcrt kernel32 ntdll)
|
add_importlibs(windowscodecs ole32 oleaut32 rpcrt4 shlwapi user32 gdi32 advapi32_vista propsys msvcrt kernel32 ntdll)
|
||||||
add_pch(windowscodecs precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(windowscodecs precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET windowscodecs DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET windowscodecs DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -25,12 +25,13 @@ add_typelib(winhttp_tlb.idl)
|
|||||||
add_library(winhttp MODULE
|
add_library(winhttp MODULE
|
||||||
${SOURCE}
|
${SOURCE}
|
||||||
rsrc.rc
|
rsrc.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/winhttp_stubs.c
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/winhttp.def)
|
${CMAKE_CURRENT_BINARY_DIR}/winhttp.def)
|
||||||
|
|
||||||
set_module_type(winhttp win32dll)
|
set_module_type(winhttp win32dll)
|
||||||
target_link_libraries(winhttp uuid wine)
|
target_link_libraries(winhttp uuid wine)
|
||||||
add_delay_importlibs(winhttp oleaut32 crypt32 secur32)
|
add_delay_importlibs(winhttp oleaut32 crypt32 secur32)
|
||||||
add_importlibs(winhttp user32 advapi32 ws2_32 jsproxy kernel32_vista msvcrt kernel32 ntdll)
|
add_importlibs(winhttp user32 advapi32 ws2_32 jsproxy msvcrt kernel32_vista ntdll)
|
||||||
add_dependencies(winhttp stdole2)
|
add_dependencies(winhttp stdole2)
|
||||||
add_pch(winhttp precomp.h SOURCE)
|
add_pch(winhttp precomp.h SOURCE)
|
||||||
add_cd_file(TARGET winhttp DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET winhttp DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -48,6 +48,6 @@ set_module_type(wininet win32dll)
|
|||||||
target_link_libraries(wininet wine ${PSEH_LIB} oldnames)
|
target_link_libraries(wininet wine ${PSEH_LIB} oldnames)
|
||||||
|
|
||||||
add_delay_importlibs(wininet secur32 crypt32 cryptui iphlpapi dhcpcsvc)
|
add_delay_importlibs(wininet secur32 crypt32 cryptui iphlpapi dhcpcsvc)
|
||||||
add_importlibs(wininet mpr shlwapi shell32 user32 advapi32 ws2_32 normaliz kernel32_vista msvcrt kernel32 ntdll)
|
add_importlibs(wininet mpr shlwapi shell32 user32 advapi32 ws2_32 normaliz msvcrt kernel32_vista ntdll)
|
||||||
add_pch(wininet precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(wininet precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET wininet DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET wininet DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -30,7 +30,7 @@ list(APPEND wshom_rc_deps
|
|||||||
set_source_files_properties(wshom.rc PROPERTIES OBJECT_DEPENDS "${wshom_rc_deps}")
|
set_source_files_properties(wshom.rc PROPERTIES OBJECT_DEPENDS "${wshom_rc_deps}")
|
||||||
set_module_type(wshom win32ocx)
|
set_module_type(wshom win32ocx)
|
||||||
target_link_libraries(wshom uuid wine)
|
target_link_libraries(wshom uuid wine)
|
||||||
add_importlibs(wshom oleaut32 ole32 shell32 advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
add_importlibs(wshom oleaut32 ole32 shell32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
||||||
add_dependencies(wshom stdole2 wshom_idlheader)
|
add_dependencies(wshom stdole2 wshom_idlheader)
|
||||||
add_pch(wshom precomp.h "${PCH_SKIP_SOURCE}")
|
add_pch(wshom precomp.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET wshom DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET wshom DESTINATION reactos/system32 FOR all)
|
||||||
|
@@ -12,7 +12,7 @@ function(add_hal _halname)
|
|||||||
cmake_parse_arguments(_haldata "" "" "SOURCES;COMPONENTS" ${ARGN})
|
cmake_parse_arguments(_haldata "" "" "SOURCES;COMPONENTS" ${ARGN})
|
||||||
|
|
||||||
# Handle the spec file for the dll name
|
# Handle the spec file for the dll name
|
||||||
spec2def(${_halname}.dll ../hal.spec ADD_IMPORTLIB)
|
spec2def(${_halname}.dll ../hal.spec ADD_IMPORTLIB KERNELMODE)
|
||||||
|
|
||||||
# Create the actual target
|
# Create the actual target
|
||||||
foreach(_component ${_haldata_COMPONENTS})
|
foreach(_component ${_haldata_COMPONENTS})
|
||||||
|
@@ -41,6 +41,7 @@ add_subdirectory(ole32)
|
|||||||
add_subdirectory(opengl32)
|
add_subdirectory(opengl32)
|
||||||
add_subdirectory(pefile)
|
add_subdirectory(pefile)
|
||||||
add_subdirectory(powrprof)
|
add_subdirectory(powrprof)
|
||||||
|
add_subdirectory(roscompat)
|
||||||
add_subdirectory(rtl)
|
add_subdirectory(rtl)
|
||||||
add_subdirectory(sdk)
|
add_subdirectory(sdk)
|
||||||
add_subdirectory(setupapi)
|
add_subdirectory(setupapi)
|
||||||
|
@@ -55,6 +55,7 @@ START_TEST(NtReadFile)
|
|||||||
trace("System is %d bits, Size of MDL: %lu\n", Is64BitSystem() ? 64 : 32, SizeOfMdl());
|
trace("System is %d bits, Size of MDL: %lu\n", Is64BitSystem() ? 64 : 32, SizeOfMdl());
|
||||||
trace("Max MDL data size: 0x%lx bytes\n", LargeMdlMaxDataSize);
|
trace("Max MDL data size: 0x%lx bytes\n", LargeMdlMaxDataSize);
|
||||||
|
|
||||||
|
fprintf(stderr, "NtReadFile Line %u\n", __LINE__);
|
||||||
ByteOffset.QuadPart = 0;
|
ByteOffset.QuadPart = 0;
|
||||||
|
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
@@ -71,6 +72,7 @@ START_TEST(NtReadFile)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "NtReadFile Line %u\n", __LINE__);
|
||||||
InitializeObjectAttributes(&ObjectAttributes,
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
&FileName,
|
&FileName,
|
||||||
OBJ_CASE_INSENSITIVE,
|
OBJ_CASE_INSENSITIVE,
|
||||||
@@ -88,6 +90,7 @@ START_TEST(NtReadFile)
|
|||||||
FILE_NO_INTERMEDIATE_BUFFERING,
|
FILE_NO_INTERMEDIATE_BUFFERING,
|
||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
|
fprintf(stderr, "NtReadFile Line %u\n", __LINE__);
|
||||||
ok_hex(Status, STATUS_SUCCESS);
|
ok_hex(Status, STATUS_SUCCESS);
|
||||||
|
|
||||||
ByteOffset.QuadPart = 0x10000;
|
ByteOffset.QuadPart = 0x10000;
|
||||||
|
5
modules/rostests/apitests/roscompat/CMakeLists.txt
Normal file
5
modules/rostests/apitests/roscompat/CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
add_executable(roscompat_apitest roscompat.c testlist.c)
|
||||||
|
set_module_type(roscompat_apitest win32cui)
|
||||||
|
add_importlibs(roscompat_apitest msvcrt advapi32 kernel32)
|
||||||
|
add_rostests_file(TARGET roscompat_apitest)
|
133
modules/rostests/apitests/roscompat/roscompat.c
Normal file
133
modules/rostests/apitests/roscompat/roscompat.c
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS API tests
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Test for reactos compatibility layer
|
||||||
|
* COPYRIGHT: Copyright 2024 Timo Kreuzer <timo.kreuzer@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <apitest.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ndk/rtlfuncs.h>
|
||||||
|
|
||||||
|
DWORD g_WinVersion;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
PSTR DllName;
|
||||||
|
PSTR FunctionName;
|
||||||
|
ULONG MinVersion;
|
||||||
|
ULONG MaxVersion;
|
||||||
|
} g_TestCases[] =
|
||||||
|
{
|
||||||
|
{"ntdll.dll", "NtCreateChannel", 0x0500, 0x0500},
|
||||||
|
{"ntdll.dll", "LdrFindCreateProcessManifest", 0x0501, 0x0502},
|
||||||
|
{"ntdll.dll", "NtCreateEnlistment", 0x0600, 0xFFFF},
|
||||||
|
};
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
InsideCompatMode(PSTR CompatMode)
|
||||||
|
{
|
||||||
|
CHAR szEnvVar[20];
|
||||||
|
HMODULE hModule;
|
||||||
|
PVOID pAddress;
|
||||||
|
|
||||||
|
GetEnvironmentVariableA("__COMPAT_LAYER", szEnvVar, _countof(szEnvVar));
|
||||||
|
fprintf(stderr, "Running test as %s, __COMPAT_LAYER='%s', g_Winver=0x%lx\n",
|
||||||
|
CompatMode,
|
||||||
|
szEnvVar,
|
||||||
|
g_WinVersion);
|
||||||
|
|
||||||
|
for (ULONG i = 0; i < _countof(g_TestCases); i++)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "i=%lu, 0x%lx [0x%lx .. 0x%lx]\n",
|
||||||
|
i,
|
||||||
|
g_WinVersion,
|
||||||
|
g_TestCases[i].MinVersion,
|
||||||
|
g_TestCases[i].MaxVersion);
|
||||||
|
|
||||||
|
hModule = LoadLibraryA(g_TestCases[i].DllName);
|
||||||
|
if (hModule == NULL)
|
||||||
|
{
|
||||||
|
printf("Failed to load %s\n", g_TestCases[i].DllName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pAddress = GetProcAddress(hModule, g_TestCases[i].FunctionName);
|
||||||
|
if ((g_WinVersion >= g_TestCases[i].MinVersion) &&
|
||||||
|
(g_WinVersion <= g_TestCases[i].MaxVersion))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "1\n");
|
||||||
|
ok(pAddress != NULL, "%s should be present\n", g_TestCases[i].FunctionName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "2\n");
|
||||||
|
ok(pAddress == NULL, "%s should not be present\n", g_TestCases[i].FunctionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
FreeLibrary(hModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Load a DLL with 0 exports and check if it's loaded
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int
|
||||||
|
RunTestInCompatMode(PSTR CompatMode)
|
||||||
|
{
|
||||||
|
CHAR szCmdLine[MAX_PATH];
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
ret = GetModuleFileNameA(NULL, szCmdLine, _countof(szCmdLine));
|
||||||
|
lstrcatA(szCmdLine, " roscompat ");
|
||||||
|
lstrcatA(szCmdLine, CompatMode);
|
||||||
|
|
||||||
|
// Set the compatibility mode
|
||||||
|
SetEnvironmentVariableA("__COMPAT_LAYER", CompatMode);
|
||||||
|
|
||||||
|
// Run the test
|
||||||
|
ret = system(szCmdLine);
|
||||||
|
|
||||||
|
// Clear the compatibility mode
|
||||||
|
SetEnvironmentVariableA("__COMPAT_LAYER", NULL);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
IsThisReactOS()
|
||||||
|
{
|
||||||
|
HKEY hKey;
|
||||||
|
LONG lRes;
|
||||||
|
|
||||||
|
lRes = RegOpenKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\ReactOS", &hKey);
|
||||||
|
return (lRes == ERROR_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(roscompat)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
if (!IsThisReactOS())
|
||||||
|
{
|
||||||
|
skip("This test is only for ReactOS\n")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
g_WinVersion = NtCurrentPeb()->OSMajorVersion << 8 | NtCurrentPeb()->OSMinorVersion;
|
||||||
|
|
||||||
|
if (__argc > 2)
|
||||||
|
{
|
||||||
|
InsideCompatMode(__argv[2]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RunTestInCompatMode("Win2k");
|
||||||
|
RunTestInCompatMode("WinXP");
|
||||||
|
RunTestInCompatMode("Win2k3");
|
||||||
|
RunTestInCompatMode("Vista");
|
||||||
|
RunTestInCompatMode("Win7");
|
||||||
|
RunTestInCompatMode("Win8");
|
||||||
|
}
|
14
modules/rostests/apitests/roscompat/testlist.c
Normal file
14
modules/rostests/apitests/roscompat/testlist.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#define __ROS_LONG64__
|
||||||
|
|
||||||
|
#define STANDALONE
|
||||||
|
#include <wine/test.h>
|
||||||
|
|
||||||
|
extern void func_roscompat(void);
|
||||||
|
|
||||||
|
const struct test winetest_testlist[] =
|
||||||
|
{
|
||||||
|
{ "roscompat", func_roscompat },
|
||||||
|
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
@@ -11,7 +11,7 @@ static const DWORD ListTimeout = 10000;
|
|||||||
|
|
||||||
// This value needs to be lower than the <timeout> configured in sysreg.xml! (usually 180000)
|
// This value needs to be lower than the <timeout> configured in sysreg.xml! (usually 180000)
|
||||||
// Otherwise, sysreg2 kills the VM before we can kill the process.
|
// Otherwise, sysreg2 kills the VM before we can kill the process.
|
||||||
static const DWORD ProcessActivityTimeout = 170000;
|
static const DWORD ProcessActivityTimeout = 60000;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -294,6 +294,7 @@ CWineTest::RunTest(CTestInfo* TestInfo)
|
|||||||
string tailString;
|
string tailString;
|
||||||
CPipe Pipe;
|
CPipe Pipe;
|
||||||
char Buffer[1024];
|
char Buffer[1024];
|
||||||
|
DWORD TimeutRepeats = 0;
|
||||||
|
|
||||||
ss << "Running Wine Test, Module: " << TestInfo->Module << ", Test: " << TestInfo->Test << endl;
|
ss << "Running Wine Test, Module: " << TestInfo->Module << ", Test: " << TestInfo->Test << endl;
|
||||||
StringOut(ss.str());
|
StringOut(ss.str());
|
||||||
@@ -327,6 +328,18 @@ CWineTest::RunTest(CTestInfo* TestInfo)
|
|||||||
}
|
}
|
||||||
else if (dwReadResult == WAIT_TIMEOUT)
|
else if (dwReadResult == WAIT_TIMEOUT)
|
||||||
{
|
{
|
||||||
|
if (++TimeutRepeats < 3)
|
||||||
|
{
|
||||||
|
// The process activity timeout above has elapsed without any new data.
|
||||||
|
// We'll try to read again, but only a few times.
|
||||||
|
float elapsed = ((float)GetTickCount() - StartTime)/1000;
|
||||||
|
stringstream ssTimeout;
|
||||||
|
ssTimeout << "[ROSAUTOTEST] Test timeout #" << TimeutRepeats;
|
||||||
|
ssTimeout << " @ " << elapsed << "s of test time. Retrying..." << endl;
|
||||||
|
|
||||||
|
StringOut(ssTimeout.str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// The process activity timeout above has elapsed without any new data.
|
// The process activity timeout above has elapsed without any new data.
|
||||||
TESTEXCEPTION("Timeout while waiting for the test process\n");
|
TESTEXCEPTION("Timeout while waiting for the test process\n");
|
||||||
}
|
}
|
||||||
|
@@ -1438,6 +1438,13 @@ static void test_FakeDLL(void)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
dll_func = (BYTE *)GetProcAddress(module, func_name);
|
dll_func = (BYTE *)GetProcAddress(module, func_name);
|
||||||
|
#ifdef __REACTOS__
|
||||||
|
if (!dll_func)
|
||||||
|
{
|
||||||
|
/* Not a bug, but a feature (versioned exports) */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif /* __REACTOS__ */
|
||||||
ok(dll_func != NULL, "%s: GetProcAddress returned NULL\n", func_name);
|
ok(dll_func != NULL, "%s: GetProcAddress returned NULL\n", func_name);
|
||||||
#if defined(__i386__)
|
#if defined(__i386__)
|
||||||
if (dll_func[0] == 0x90 && dll_func[1] == 0x90 &&
|
if (dll_func[0] == 0x90 && dll_func[1] == 0x90 &&
|
||||||
|
@@ -115,5 +115,8 @@ endif()
|
|||||||
set(USE_DUMMY_PSEH FALSE CACHE BOOL
|
set(USE_DUMMY_PSEH FALSE CACHE BOOL
|
||||||
"Whether to disable PSEH support.")
|
"Whether to disable PSEH support.")
|
||||||
|
|
||||||
set(DLL_EXPORT_VERSION "0x502" CACHE STRING
|
set(DLL_EXPORT_VERSION "0xFFF" CACHE STRING
|
||||||
"The NT version the user mode DLLs target.")
|
"The NT version the user mode DLLs target.")
|
||||||
|
|
||||||
|
set(ENABLE_EXPORT_VERSIONING TRUE CACHE BOOL
|
||||||
|
"Whether to enable export patching based on appcompat version.")
|
||||||
|
@@ -370,11 +370,17 @@ function(fixup_load_config _target)
|
|||||||
DEPENDS native-pefixup)
|
DEPENDS native-pefixup)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(generate_import_lib _libname _dllname _spec_file __version_arg)
|
if(ENABLE_EXPORT_VERSIONING)
|
||||||
|
set(SPEC2DEF_NOROSCOMPAT "")
|
||||||
|
else()
|
||||||
|
set(SPEC2DEF_NOROSCOMPAT "--noroscompat")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(generate_import_lib _libname _dllname _spec_file __version_arg __roscompat_arg)
|
||||||
# Generate the def for the import lib
|
# Generate the def for the import lib
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def
|
||||||
COMMAND native-spec2def ${__version_arg} -n=${_dllname} -a=${ARCH2} ${ARGN} --implib -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
COMMAND native-spec2def ${__roscompat_arg} ${__version_arg} -n=${_dllname} -a=${ARCH2} ${ARGN} --implib -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
||||||
|
|
||||||
# With this, we let DLLTOOL create an import library
|
# With this, we let DLLTOOL create an import library
|
||||||
@@ -424,7 +430,7 @@ endfunction()
|
|||||||
|
|
||||||
function(spec2def _dllname _spec_file)
|
function(spec2def _dllname _spec_file)
|
||||||
|
|
||||||
cmake_parse_arguments(__spec2def "ADD_IMPORTLIB;NO_PRIVATE_WARNINGS;WITH_RELAY" "VERSION" "" ${ARGN})
|
cmake_parse_arguments(__spec2def "ADD_IMPORTLIB;NO_PRIVATE_WARNINGS;WITH_RELAY;KERNELMODE" "VERSION" "" ${ARGN})
|
||||||
|
|
||||||
# Get library basename
|
# Get library basename
|
||||||
get_filename_component(_file ${_dllname} NAME_WE)
|
get_filename_component(_file ${_dllname} NAME_WE)
|
||||||
@@ -438,7 +444,11 @@ function(spec2def _dllname _spec_file)
|
|||||||
set(__with_relay_arg "--with-tracing")
|
set(__with_relay_arg "--with-tracing")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(__spec2def_VERSION)
|
set(__roscompat_arg ${SPEC2DEF_NOROSCOMPAT})
|
||||||
|
if(__spec2def_KERNELMODE)
|
||||||
|
set(__version_arg "--version=0x502")
|
||||||
|
set(__roscompat_arg "--noroscompat")
|
||||||
|
elseif(__spec2def_VERSION)
|
||||||
set(__version_arg "--version=0x${__spec2def_VERSION}")
|
set(__version_arg "--version=0x${__spec2def_VERSION}")
|
||||||
else()
|
else()
|
||||||
set(__version_arg "--version=${DLL_EXPORT_VERSION}")
|
set(__version_arg "--version=${DLL_EXPORT_VERSION}")
|
||||||
@@ -447,7 +457,7 @@ function(spec2def _dllname _spec_file)
|
|||||||
# Generate exports def and C stubs file for the DLL
|
# Generate exports def and C stubs file for the DLL
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
|
||||||
COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
COMMAND native-spec2def ${__roscompat_arg} -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
||||||
|
|
||||||
# Do not use precompiled headers for the stub file
|
# Do not use precompiled headers for the stub file
|
||||||
@@ -459,7 +469,7 @@ function(spec2def _dllname _spec_file)
|
|||||||
set(_extraflags --no-private-warnings)
|
set(_extraflags --no-private-warnings)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
generate_import_lib(lib${_file} ${_dllname} ${_spec_file} ${_extraflags} "${__version_arg}")
|
generate_import_lib(lib${_file} ${_dllname} ${_spec_file} ${_extraflags} "${__version_arg}" "${__roscompat_arg}")
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
@@ -313,7 +313,13 @@ function(fixup_load_config _target)
|
|||||||
# msvc knows how to generate a load_config so no hacks here
|
# msvc knows how to generate a load_config so no hacks here
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(generate_import_lib _libname _dllname _spec_file __version_arg)
|
if(ENABLE_EXPORT_VERSIONING)
|
||||||
|
set(SPEC2DEF_NOROSCOMPAT "")
|
||||||
|
else()
|
||||||
|
set(SPEC2DEF_NOROSCOMPAT "--noroscompat")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(generate_import_lib _libname _dllname _spec_file __version_arg __roscompat_arg)
|
||||||
|
|
||||||
set(_def_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def)
|
set(_def_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def)
|
||||||
set(_asm_stubs_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm)
|
set(_asm_stubs_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm)
|
||||||
@@ -322,7 +328,7 @@ function(generate_import_lib _libname _dllname _spec_file __version_arg)
|
|||||||
# Generate the def, asm stub and alias files
|
# Generate the def, asm stub and alias files
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${_asm_stubs_file} ${_def_file} ${_asm_impalias_file}
|
OUTPUT ${_asm_stubs_file} ${_def_file} ${_asm_impalias_file}
|
||||||
COMMAND native-spec2def --ms ${__version_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} -i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
COMMAND native-spec2def ${__roscompat_arg} --ms ${__version_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} -i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
||||||
|
|
||||||
# Compile the generated asm stub file
|
# Compile the generated asm stub file
|
||||||
@@ -372,7 +378,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
function(spec2def _dllname _spec_file)
|
function(spec2def _dllname _spec_file)
|
||||||
|
|
||||||
cmake_parse_arguments(__spec2def "ADD_IMPORTLIB;NO_PRIVATE_WARNINGS;WITH_RELAY" "VERSION" "" ${ARGN})
|
cmake_parse_arguments(__spec2def "ADD_IMPORTLIB;NO_PRIVATE_WARNINGS;WITH_RELAY;KERNELMODE" "VERSION" "" ${ARGN})
|
||||||
|
|
||||||
# Get library basename
|
# Get library basename
|
||||||
get_filename_component(_file ${_dllname} NAME_WE)
|
get_filename_component(_file ${_dllname} NAME_WE)
|
||||||
@@ -386,7 +392,11 @@ function(spec2def _dllname _spec_file)
|
|||||||
set(__with_relay_arg "--with-tracing")
|
set(__with_relay_arg "--with-tracing")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(__spec2def_VERSION)
|
set(__roscompat_arg ${SPEC2DEF_NOROSCOMPAT})
|
||||||
|
if(__spec2def_KERNELMODE)
|
||||||
|
set(__version_arg "--version=0x502")
|
||||||
|
set(__roscompat_arg "--noroscompat")
|
||||||
|
elseif(__spec2def_VERSION)
|
||||||
set(__version_arg "--version=0x${__spec2def_VERSION}")
|
set(__version_arg "--version=0x${__spec2def_VERSION}")
|
||||||
else()
|
else()
|
||||||
set(__version_arg "--version=${DLL_EXPORT_VERSION}")
|
set(__version_arg "--version=${DLL_EXPORT_VERSION}")
|
||||||
@@ -395,14 +405,14 @@ function(spec2def _dllname _spec_file)
|
|||||||
# Generate exports def and C stubs file for the DLL
|
# Generate exports def and C stubs file for the DLL
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
|
||||||
COMMAND native-spec2def --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
COMMAND native-spec2def ${__roscompat_arg} --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
|
||||||
|
|
||||||
# Do not use precompiled headers for the stub file
|
# Do not use precompiled headers for the stub file
|
||||||
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
|
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
|
||||||
|
|
||||||
if(__spec2def_ADD_IMPORTLIB)
|
if(__spec2def_ADD_IMPORTLIB)
|
||||||
generate_import_lib(lib${_file} ${_dllname} ${_spec_file} "${__version_arg}")
|
generate_import_lib(lib${_file} ${_dllname} ${_spec_file} "${__version_arg}" "${__roscompat_arg}")
|
||||||
if(__spec2def_NO_PRIVATE_WARNINGS)
|
if(__spec2def_NO_PRIVATE_WARNINGS)
|
||||||
set_property(TARGET lib${_file} APPEND PROPERTY STATIC_LIBRARY_OPTIONS /ignore:4104)
|
set_property(TARGET lib${_file} APPEND PROPERTY STATIC_LIBRARY_OPTIONS /ignore:4104)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "typedefs.h"
|
||||||
|
|
||||||
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
|
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
|
||||||
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
|
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
|
||||||
|
|
||||||
@@ -85,6 +87,22 @@ typedef struct _IMAGE_DOS_HEADER {
|
|||||||
} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
|
} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
#pragma pack(push,4)
|
||||||
|
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
||||||
|
ULONG Characteristics;
|
||||||
|
ULONG TimeDateStamp;
|
||||||
|
USHORT MajorVersion;
|
||||||
|
USHORT MinorVersion;
|
||||||
|
ULONG Name;
|
||||||
|
ULONG Base;
|
||||||
|
ULONG NumberOfFunctions;
|
||||||
|
ULONG NumberOfNames;
|
||||||
|
ULONG AddressOfFunctions;
|
||||||
|
ULONG AddressOfNames;
|
||||||
|
ULONG AddressOfNameOrdinals;
|
||||||
|
} IMAGE_EXPORT_DIRECTORY, * PIMAGE_EXPORT_DIRECTORY;
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
#pragma pack(push,4)
|
#pragma pack(push,4)
|
||||||
typedef struct _IMAGE_FILE_HEADER {
|
typedef struct _IMAGE_FILE_HEADER {
|
||||||
WORD Machine;
|
WORD Machine;
|
||||||
@@ -102,7 +120,7 @@ typedef struct _IMAGE_DATA_DIRECTORY {
|
|||||||
DWORD Size;
|
DWORD Size;
|
||||||
} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
|
} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
|
||||||
|
|
||||||
typedef struct _IMAGE_OPTIONAL_HEADER32 {
|
typedef struct _IMAGE_OPTIONAL_HEADER {
|
||||||
WORD Magic;
|
WORD Magic;
|
||||||
BYTE MajorLinkerVersion;
|
BYTE MajorLinkerVersion;
|
||||||
BYTE MinorLinkerVersion;
|
BYTE MinorLinkerVersion;
|
||||||
|
@@ -1011,7 +1011,7 @@ WINBOOL WINAPI EnumPrintersW(DWORD Flags,LPWSTR Name,DWORD Level,LPBYTE pPrinter
|
|||||||
LONG WINAPI DocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput,DWORD fMode);
|
LONG WINAPI DocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput,DWORD fMode);
|
||||||
LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput);
|
LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput);
|
||||||
LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput);
|
LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput);
|
||||||
LONG ExtDeviceMode(HWND hWnd,HANDLE hInst,LPDEVMODEA pDevModeOutput,LPSTR pDeviceName,LPSTR pPort,LPDEVMODEA pDevModeInput,LPSTR pProfile,DWORD fMode);
|
LONG WINAPI ExtDeviceMode(HWND hWnd,HANDLE hInst,LPDEVMODEA pDevModeOutput,LPSTR pDeviceName,LPSTR pPort,LPDEVMODEA pDevModeInput,LPSTR pProfile,DWORD fMode);
|
||||||
DWORD WINAPI GetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
DWORD WINAPI GetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
||||||
DWORD WINAPI GetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
DWORD WINAPI GetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
||||||
DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
|
||||||
|
49
sdk/include/reactos/roscompat.h
Normal file
49
sdk/include/reactos/roscompat.h
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*!
|
||||||
|
\brief Header shared by ntdll/ldr and spec2def
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef ROSCOMPAT_HOST
|
||||||
|
#include "../host/pecoff.h"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum _ROSCOMPAT_VERSION_BIT
|
||||||
|
{
|
||||||
|
ROSCOMPAT_VERSION_BIT_NT4 = 0,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WIN2K = 1,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WINXP = 2,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WS03 = 3,
|
||||||
|
ROSCOMPAT_VERSION_BIT_VISTA = 4,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WIN7 = 5,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WIN8 = 6,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WIN81 = 7,
|
||||||
|
ROSCOMPAT_VERSION_BIT_WIN10 = 8,
|
||||||
|
} ROSCOMPAT_VERSION_BIT;
|
||||||
|
|
||||||
|
typedef unsigned short ROSCOMPAT_VERMASK;
|
||||||
|
|
||||||
|
#if !defined(_WINNT_) && !defined(ROSCOMPAT_HOST)
|
||||||
|
typedef struct _IMAGE_EXPORT_DIRECTORY
|
||||||
|
{
|
||||||
|
unsigned long Characteristics;
|
||||||
|
unsigned long TimeDateStamp;
|
||||||
|
unsigned short MajorVersion;
|
||||||
|
unsigned short MinorVersion;
|
||||||
|
unsigned long Name;
|
||||||
|
unsigned long Base;
|
||||||
|
unsigned long NumberOfFunctions;
|
||||||
|
unsigned long NumberOfNames;
|
||||||
|
unsigned long AddressOfFunctions;
|
||||||
|
unsigned long AddressOfNames;
|
||||||
|
unsigned long AddressOfNameOrdinals;
|
||||||
|
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _ROSCOMPAT_DESCRIPTOR
|
||||||
|
{
|
||||||
|
ROSCOMPAT_VERMASK* ExportMasks; // Array with size NumberOfExportNames
|
||||||
|
unsigned long NumberOfOrdinals;
|
||||||
|
unsigned long BaseOrdinal;
|
||||||
|
unsigned long *NumberOfValidExports;
|
||||||
|
} ROSCOMPAT_DESCRIPTOR, * PROSCOMPAT_DESCRIPTOR;
|
@@ -1,4 +1,9 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define __STUBS__H__
|
||||||
|
|
||||||
|
#include <roscompat.h>
|
||||||
|
|
||||||
#ifndef _WINDEF_
|
#ifndef _WINDEF_
|
||||||
typedef unsigned short wchar_t;
|
typedef unsigned short wchar_t;
|
||||||
typedef unsigned long DWORD, ULONG;
|
typedef unsigned long DWORD, ULONG;
|
||||||
|
@@ -40,6 +40,7 @@ add_subdirectory(lsalib)
|
|||||||
add_subdirectory(nt)
|
add_subdirectory(nt)
|
||||||
add_subdirectory(pathcch)
|
add_subdirectory(pathcch)
|
||||||
add_subdirectory(pseh)
|
add_subdirectory(pseh)
|
||||||
|
add_subdirectory(roscompat)
|
||||||
|
|
||||||
if(KDBG)
|
if(KDBG)
|
||||||
add_subdirectory(rossym)
|
add_subdirectory(rossym)
|
||||||
|
@@ -55,11 +55,11 @@ if(ARCH STREQUAL "i386")
|
|||||||
elseif(ARCH STREQUAL "amd64")
|
elseif(ARCH STREQUAL "amd64")
|
||||||
list(APPEND MSVCRTEX_ASM_SOURCE
|
list(APPEND MSVCRTEX_ASM_SOURCE
|
||||||
except/amd64/chkstk_ms.s)
|
except/amd64/chkstk_ms.s)
|
||||||
if(MSVC AND DLL_EXPORT_VERSION LESS 0x600)
|
#if(MSVC AND DLL_EXPORT_VERSION LESS 0x600)
|
||||||
list(APPEND MSVCRTEX_ASM_SOURCE
|
list(APPEND MSVCRTEX_ASM_SOURCE
|
||||||
except/amd64/__CxxFrameHandler3.s
|
except/amd64/__CxxFrameHandler3.s
|
||||||
)
|
)
|
||||||
endif()
|
#endif()
|
||||||
elseif(ARCH STREQUAL "arm")
|
elseif(ARCH STREQUAL "arm")
|
||||||
list(APPEND MSVCRTEX_SOURCE
|
list(APPEND MSVCRTEX_SOURCE
|
||||||
math/arm/__rt_sdiv.c
|
math/arm/__rt_sdiv.c
|
||||||
|
2
sdk/lib/roscompat/CMakeLists.txt
Normal file
2
sdk/lib/roscompat/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
add_library(roscompat_desc OBJECT roscompat_desc.c)
|
20
sdk/lib/roscompat/roscompat_desc.c
Normal file
20
sdk/lib/roscompat/roscompat_desc.c
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
#include <roscompat.h>
|
||||||
|
|
||||||
|
static unsigned long NumberOfValidExports = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma section(".expvers$ZZZ")
|
||||||
|
__declspec(allocate(".expvers$ZZZ"))
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
__attribute__ ((section(".expvers$ZZZ")))
|
||||||
|
#else
|
||||||
|
#error Your compiler is not supported.
|
||||||
|
#endif
|
||||||
|
ROSCOMPAT_DESCRIPTOR __roscompat_dummy_descriptor__ =
|
||||||
|
{
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
&NumberOfValidExports
|
||||||
|
};
|
@@ -24,7 +24,6 @@ add_host_tool(mkshelllink mkshelllink/mkshelllink.c)
|
|||||||
add_host_tool(obj2bin obj2bin/obj2bin.c)
|
add_host_tool(obj2bin obj2bin/obj2bin.c)
|
||||||
target_link_libraries(obj2bin PRIVATE host_includes)
|
target_link_libraries(obj2bin PRIVATE host_includes)
|
||||||
|
|
||||||
add_host_tool(spec2def spec2def/spec2def.c)
|
|
||||||
add_host_tool(utf16le utf16le/utf16le.cpp)
|
add_host_tool(utf16le utf16le/utf16le.cpp)
|
||||||
|
|
||||||
add_subdirectory(asmpp)
|
add_subdirectory(asmpp)
|
||||||
@@ -37,6 +36,7 @@ add_subdirectory(kbdtool)
|
|||||||
add_subdirectory(log2lines)
|
add_subdirectory(log2lines)
|
||||||
add_subdirectory(mkhive)
|
add_subdirectory(mkhive)
|
||||||
add_subdirectory(mkisofs)
|
add_subdirectory(mkisofs)
|
||||||
|
add_subdirectory(spec2def)
|
||||||
add_subdirectory(rsym)
|
add_subdirectory(rsym)
|
||||||
add_subdirectory(txt2nls)
|
add_subdirectory(txt2nls)
|
||||||
add_subdirectory(unicode)
|
add_subdirectory(unicode)
|
||||||
|
4
sdk/tools/spec2def/CMakeLists.txt
Normal file
4
sdk/tools/spec2def/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos)
|
||||||
|
|
||||||
|
add_host_tool(spec2def spec2def.c)
|
@@ -4,6 +4,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#define ROSCOMPAT_HOST
|
||||||
|
#include <roscompat.h>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#define strcasecmp(_String1, _String2) _stricmp(_String1, _String2)
|
#define strcasecmp(_String1, _String2) _stricmp(_String1, _String2)
|
||||||
#define strncasecmp(_String1, _String2, _MaxCount) _strnicmp(_String1, _String2, _MaxCount)
|
#define strncasecmp(_String1, _String2, _MaxCount) _strnicmp(_String1, _String2, _MaxCount)
|
||||||
@@ -28,8 +31,7 @@ typedef struct
|
|||||||
int anArgs[30];
|
int anArgs[30];
|
||||||
unsigned int uFlags;
|
unsigned int uFlags;
|
||||||
int nNumber;
|
int nNumber;
|
||||||
unsigned nStartVersion;
|
unsigned short uVersionMask;
|
||||||
unsigned nEndVersion;
|
|
||||||
int bVersionIncluded;
|
int bVersionIncluded;
|
||||||
} EXPORT;
|
} EXPORT;
|
||||||
|
|
||||||
@@ -67,6 +69,7 @@ int gbImportLib = 0;
|
|||||||
int gbNotPrivateNoWarn = 0;
|
int gbNotPrivateNoWarn = 0;
|
||||||
int gbTracing = 0;
|
int gbTracing = 0;
|
||||||
int giArch = ARCH_X86;
|
int giArch = ARCH_X86;
|
||||||
|
int gbNoRosCompat = 0;
|
||||||
char *pszArchString = "i386";
|
char *pszArchString = "i386";
|
||||||
char *pszArchString2;
|
char *pszArchString2;
|
||||||
char *pszSourceFileName = NULL;
|
char *pszSourceFileName = NULL;
|
||||||
@@ -110,6 +113,31 @@ enum
|
|||||||
ARG_FLOAT
|
ARG_FLOAT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsigned short
|
||||||
|
GetVersionMask(unsigned uStartVersion, unsigned uEndVersion)
|
||||||
|
{
|
||||||
|
unsigned short uMask = 0;
|
||||||
|
if ((uStartVersion <= 0x400) && (uEndVersion >= 0x400))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_NT4);
|
||||||
|
if ((uStartVersion <= 0x500) && (uEndVersion >= 0x500))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WIN2K);
|
||||||
|
if ((uStartVersion <= 0x501) && (uEndVersion >= 0x501))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WINXP);
|
||||||
|
if ((uStartVersion <= 0x502) && (uEndVersion >= 0x502))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WS03);
|
||||||
|
if ((uStartVersion <= 0x600) && (uEndVersion >= 0x600))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_VISTA);
|
||||||
|
if ((uStartVersion <= 0x601) && (uEndVersion >= 0x601))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WIN7);
|
||||||
|
if ((uStartVersion <= 0x602) && (uEndVersion >= 0x602))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WIN8);
|
||||||
|
if ((uStartVersion <= 0x603) && (uEndVersion >= 0x603))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WIN81);
|
||||||
|
if ((uStartVersion <= 0xA00) && (uEndVersion >= 0xA00))
|
||||||
|
uMask |= (1 << ROSCOMPAT_VERSION_BIT_WIN10);
|
||||||
|
return uMask;
|
||||||
|
}
|
||||||
|
|
||||||
const char* astrCallingConventions[] =
|
const char* astrCallingConventions[] =
|
||||||
{
|
{
|
||||||
"STDCALL",
|
"STDCALL",
|
||||||
@@ -781,8 +809,8 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp)
|
|||||||
else
|
else
|
||||||
OutputLine_def_GCC(fileDest, pexp);
|
OutputLine_def_GCC(fileDest, pexp);
|
||||||
|
|
||||||
/* On GCC builds we force ordinals */
|
/* If it is not an import lib, we force ordinals */
|
||||||
if ((pexp->uFlags & FL_ORDINAL) || (!gbMSComp && !gbImportLib))
|
if ((pexp->uFlags & FL_ORDINAL) || !gbImportLib)
|
||||||
{
|
{
|
||||||
fprintf(fileDest, " @%d", pexp->nOrdinal);
|
fprintf(fileDest, " @%d", pexp->nOrdinal);
|
||||||
}
|
}
|
||||||
@@ -964,8 +992,7 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports)
|
|||||||
exp.nArgCount = 0;
|
exp.nArgCount = 0;
|
||||||
exp.uFlags = 0;
|
exp.uFlags = 0;
|
||||||
exp.nNumber++;
|
exp.nNumber++;
|
||||||
exp.nStartVersion = 0;
|
exp.uVersionMask = 0xFFFF;
|
||||||
exp.nEndVersion = 0xFFFFFFFF;
|
|
||||||
exp.bVersionIncluded = 1;
|
exp.bVersionIncluded = 1;
|
||||||
|
|
||||||
/* Skip white spaces */
|
/* Skip white spaces */
|
||||||
@@ -1087,12 +1114,21 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports)
|
|||||||
{
|
{
|
||||||
if (giArch != ARCH_X86) included = 0;
|
if (giArch != ARCH_X86) included = 0;
|
||||||
}
|
}
|
||||||
|
else if (CompareToken(pc, "-roscompat"))
|
||||||
|
{
|
||||||
|
if (gbNoRosCompat) included = 0;
|
||||||
|
}
|
||||||
|
else if (CompareToken(pc, "-noroscompat"))
|
||||||
|
{
|
||||||
|
if (!gbNoRosCompat) included = 0;
|
||||||
|
}
|
||||||
else if (CompareToken(pc, "-version="))
|
else if (CompareToken(pc, "-version="))
|
||||||
{
|
{
|
||||||
const char *pcVersionStart = pc + 9;
|
const char *pcVersionStart = pc + 9;
|
||||||
|
|
||||||
/* Default to not included */
|
/* Default to not included */
|
||||||
exp.bVersionIncluded = 0;
|
exp.bVersionIncluded = gbNoRosCompat ? 0 : 1;
|
||||||
|
exp.uVersionMask = 0;
|
||||||
pc += 8;
|
pc += 8;
|
||||||
|
|
||||||
/* Look if we are included */
|
/* Look if we are included */
|
||||||
@@ -1132,8 +1168,7 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports)
|
|||||||
"Invalid version range");
|
"Invalid version range");
|
||||||
}
|
}
|
||||||
|
|
||||||
exp.nStartVersion = version;
|
exp.uVersionMask |= GetVersionMask(version, endversion);
|
||||||
exp.nEndVersion = endversion;
|
|
||||||
|
|
||||||
/* Now compare the range with our version */
|
/* Now compare the range with our version */
|
||||||
if ((guOsVersion >= version) &&
|
if ((guOsVersion >= version) &&
|
||||||
@@ -1421,6 +1456,7 @@ ApplyOrdinals(EXPORT* pexports, unsigned cExports)
|
|||||||
{
|
{
|
||||||
unsigned short i, j;
|
unsigned short i, j;
|
||||||
char* used;
|
char* used;
|
||||||
|
unsigned short firstOrdinal = 0xFFFF, firstIndex = 0;
|
||||||
|
|
||||||
/* Allocate a table to mark used ordinals */
|
/* Allocate a table to mark used ordinals */
|
||||||
used = malloc(65536);
|
used = malloc(65536);
|
||||||
@@ -1436,22 +1472,50 @@ ApplyOrdinals(EXPORT* pexports, unsigned cExports)
|
|||||||
{
|
{
|
||||||
if (pexports[i].uFlags & FL_ORDINAL)
|
if (pexports[i].uFlags & FL_ORDINAL)
|
||||||
{
|
{
|
||||||
|
assert(pexports[i].nOrdinal >= 0 && pexports[i].nOrdinal <= 0xFFF);
|
||||||
if (used[pexports[i].nOrdinal] != 0)
|
if (used[pexports[i].nOrdinal] != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Found duplicate ordinal: %u\n", pexports[i].nOrdinal);
|
fprintf(stderr, "Found duplicate ordinal: %u\n", pexports[i].nOrdinal);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
used[pexports[i].nOrdinal] = 1;
|
used[pexports[i].nOrdinal] = 1;
|
||||||
|
if (pexports[i].nOrdinal < firstOrdinal)
|
||||||
|
{
|
||||||
|
firstOrdinal = pexports[i].nOrdinal;
|
||||||
|
firstIndex = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check if we found an ordinal */
|
||||||
|
if (firstOrdinal != 0xFFFF)
|
||||||
|
{
|
||||||
|
/* We did. Reserve ordinals for entries before that one. */
|
||||||
|
if (firstOrdinal > firstIndex)
|
||||||
|
firstOrdinal -= firstIndex;
|
||||||
|
else
|
||||||
|
firstOrdinal = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* We didn't, so start with 1 */
|
||||||
|
firstOrdinal = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Pass 2: apply available ordinals */
|
/* Pass 2: apply available ordinals */
|
||||||
for (i = 0, j = 1; i < cExports; i++)
|
for (i = 0, j = firstOrdinal; i < cExports; i++)
|
||||||
{
|
{
|
||||||
if ((pexports[i].uFlags & FL_ORDINAL) == 0 && pexports[i].bVersionIncluded)
|
if ((pexports[i].uFlags & FL_ORDINAL) == 0 && pexports[i].bVersionIncluded)
|
||||||
{
|
{
|
||||||
while (used[j] != 0)
|
while (used[j] != 0)
|
||||||
|
{
|
||||||
|
if (j >= 0xFFF)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Ran out of ordinals.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
j++;
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
pexports[i].nOrdinal = j;
|
pexports[i].nOrdinal = j;
|
||||||
used[j] = 1;
|
used[j] = 1;
|
||||||
@@ -1477,7 +1541,117 @@ void usage(void)
|
|||||||
" --implib generate a def file for an import library\n"
|
" --implib generate a def file for an import library\n"
|
||||||
" --no-private-warnings suppress warnings about symbols that should be -private\n"
|
" --no-private-warnings suppress warnings about symbols that should be -private\n"
|
||||||
" -a=<arch> set architecture to <arch> (i386, x86_64, arm, arm64)\n"
|
" -a=<arch> set architecture to <arch> (i386, x86_64, arm, arm64)\n"
|
||||||
" --with-tracing generate wine-like \"+relay\" trace trampolines (needs -s)\n");
|
" --with-tracing generate wine-like \"+relay\" trace trampolines (needs -s)\n"
|
||||||
|
" --noroscompat don't generate ros-compat information\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// HACK, because mingw headers
|
||||||
|
#define MIN(a,b) ((a) <= (b) ? (a) : (b))
|
||||||
|
|
||||||
|
int CompareExports(const void* pLeft,const void* pRight)
|
||||||
|
{
|
||||||
|
EXPORT *pexpLeft = (EXPORT*)pLeft;
|
||||||
|
EXPORT *pexpRight = (EXPORT*)pRight;
|
||||||
|
int result = strncmp(pexpLeft->strName.buf,
|
||||||
|
pexpRight->strName.buf,
|
||||||
|
MIN(pexpLeft->strName.len,
|
||||||
|
pexpRight->strName.len));
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
|
return (pexpLeft->strName.len < pexpRight->strName.len) ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Output_RosCompatDescriptor(FILE *file, EXPORT *pexports, unsigned int cExports)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned short ordinalToExport[0x10000];
|
||||||
|
unsigned short baseOrdinal = 0xFFFF;
|
||||||
|
unsigned short maxOrdinal = 0;
|
||||||
|
|
||||||
|
/* Initialize the ordinalToExport table */
|
||||||
|
memset(ordinalToExport, 0xFF, sizeof(ordinalToExport));
|
||||||
|
|
||||||
|
/* Fill in the ordinalToExport table */
|
||||||
|
for (i = 0; i < cExports; i++)
|
||||||
|
{
|
||||||
|
if (ordinalToExport[pexports[i].nOrdinal] != 0xFFFF)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Duplicate ordinal %d\n", pexports[i].nOrdinal);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ordinalToExport[pexports[i].nOrdinal] = i;
|
||||||
|
if (pexports[i].nOrdinal < baseOrdinal)
|
||||||
|
{
|
||||||
|
baseOrdinal = pexports[i].nOrdinal;
|
||||||
|
}
|
||||||
|
if (pexports[i].nOrdinal > maxOrdinal)
|
||||||
|
{
|
||||||
|
maxOrdinal = pexports[i].nOrdinal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(file, "unsigned short __roscompat_export_masks__[] =\n{\n");
|
||||||
|
|
||||||
|
for (unsigned short ordinal = baseOrdinal;
|
||||||
|
ordinal <= maxOrdinal;
|
||||||
|
ordinal++)
|
||||||
|
{
|
||||||
|
unsigned short iExport = ordinalToExport[ordinal];
|
||||||
|
if (iExport == 0xFFFF)
|
||||||
|
{
|
||||||
|
fprintf(file, " 0x0, // [%u]: Ordinal %u: <not exported>\n",
|
||||||
|
ordinal - baseOrdinal,
|
||||||
|
ordinal);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pexports[iExport].uFlags & FL_NONAME)
|
||||||
|
{
|
||||||
|
fprintf(file,
|
||||||
|
" 0x%04x, // [%u]: Ordinal %u: <noname>\n",
|
||||||
|
pexports[iExport].uVersionMask,
|
||||||
|
ordinal - baseOrdinal,
|
||||||
|
ordinal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(file,
|
||||||
|
" 0x%04x, // [%u]: Ordinal %u: %.*s\n",
|
||||||
|
pexports[iExport].uVersionMask,
|
||||||
|
ordinal - baseOrdinal,
|
||||||
|
ordinal,
|
||||||
|
pexports[iExport].strName.len,
|
||||||
|
pexports[iExport].strName.buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(file,
|
||||||
|
" 0x0 // dummy \n"
|
||||||
|
"};\n"
|
||||||
|
"\n"
|
||||||
|
"static unsigned long NumberOfValidExports = 0;\n"
|
||||||
|
"\n"
|
||||||
|
"#if defined(_MSC_VER)\n"
|
||||||
|
"#pragma section(\".expvers$AAA\")\n"
|
||||||
|
"__declspec(allocate(\".expvers$AAA\"))\n"
|
||||||
|
"#elif defined(__GNUC__)\n"
|
||||||
|
"__attribute__ ((section(\".expvers$AAA\")))\n"
|
||||||
|
"#else\n"
|
||||||
|
"#error Your compiler is not supported (fix in spec2def).\n"
|
||||||
|
"#endif\n"
|
||||||
|
"ROSCOMPAT_DESCRIPTOR __roscompat_descriptor__ = \n"
|
||||||
|
"{\n"
|
||||||
|
" __roscompat_export_masks__,\n"
|
||||||
|
" (sizeof(__roscompat_export_masks__) / sizeof(__roscompat_export_masks__[0])) - 1,\n"
|
||||||
|
" %u,\n"
|
||||||
|
" &NumberOfValidExports\n"
|
||||||
|
"};\n",
|
||||||
|
baseOrdinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@@ -1506,6 +1680,10 @@ int main(int argc, char *argv[])
|
|||||||
usage();
|
usage();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if (strcasecmp(argv[i], "--noroscompat") == 0)
|
||||||
|
{
|
||||||
|
gbNoRosCompat = 1;
|
||||||
|
}
|
||||||
else if (argv[i][1] == 'd' && argv[i][2] == '=')
|
else if (argv[i][1] == 'd' && argv[i][2] == '=')
|
||||||
{
|
{
|
||||||
pszDefFileName = argv[i] + 3;
|
pszDefFileName = argv[i] + 3;
|
||||||
@@ -1640,13 +1818,10 @@ int main(int argc, char *argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gbMSComp)
|
if (ApplyOrdinals(pexports, cExports) < 0)
|
||||||
{
|
{
|
||||||
if (ApplyOrdinals(pexports, cExports) < 0)
|
fprintf(stderr, "error: could not apply ordinals!\n");
|
||||||
{
|
return -1;
|
||||||
fprintf(stderr, "error: could not apply ordinals!\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pszDefFileName)
|
if (pszDefFileName)
|
||||||
@@ -1688,6 +1863,11 @@ int main(int argc, char *argv[])
|
|||||||
OutputLine_stub(file, &pexports[i]);
|
OutputLine_stub(file, &pexports[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gbNoRosCompat == 0)
|
||||||
|
{
|
||||||
|
Output_RosCompatDescriptor(file, pexports, cExports);
|
||||||
|
}
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -364,3 +364,30 @@ void RosConvertUnicodeDevModeToAnsiDevmode(PDEVMODEW pDevModeInput, PDEVMODEA pD
|
|||||||
memcpy( pDevModeOutput, pTmp, pTmp->dmSize + pTmp->dmDriverExtra); // Copy into a Wide char (Larger) buffer.
|
memcpy( pDevModeOutput, pTmp, pTmp->dmSize + pTmp->dmDriverExtra); // Copy into a Wide char (Larger) buffer.
|
||||||
HeapFree(hProcessHeap, 0, pTmp);
|
HeapFree(hProcessHeap, 0, pTmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WINAPI
|
||||||
|
DeviceMode(
|
||||||
|
PVOID param_1,
|
||||||
|
PVOID param_2,
|
||||||
|
PCHAR param_3,
|
||||||
|
PVOID param_4)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
LONG
|
||||||
|
WINAPI
|
||||||
|
ExtDeviceMode(
|
||||||
|
HWND hWnd,
|
||||||
|
HANDLE hInst,
|
||||||
|
LPDEVMODEA pDevModeOutput,
|
||||||
|
LPSTR pDeviceName,
|
||||||
|
LPSTR pPort,
|
||||||
|
LPDEVMODEA pDevModeInput,
|
||||||
|
LPSTR pProfile,
|
||||||
|
DWORD fMode)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -4059,3 +4059,36 @@ Cleanup:
|
|||||||
SetLastError(dwErrorCode);
|
SetLastError(dwErrorCode);
|
||||||
return (dwErrorCode == ERROR_SUCCESS);
|
return (dwErrorCode == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HANDLE
|
||||||
|
WINAPI
|
||||||
|
CreatePrinterIC(
|
||||||
|
_In_ HANDLE hPrinter,
|
||||||
|
_In_opt_ LPDEVMODEW pDevMode)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
DeletePrinterIC(
|
||||||
|
_In_ HANDLE hPrinterIC)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
PlayGdiScriptOnPrinterIC(
|
||||||
|
_In_ HANDLE hPrinterIC,
|
||||||
|
_In_reads_bytes_(cIn) LPBYTE pIn,
|
||||||
|
_In_ DWORD cIn,
|
||||||
|
_Out_writes_bytes_(cOut) LPBYTE pOut,
|
||||||
|
_In_ DWORD cOut,
|
||||||
|
_In_ DWORD ul)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@@ -40,7 +40,7 @@
|
|||||||
139 stub ConnectToPrinterDlg
|
139 stub ConnectToPrinterDlg
|
||||||
140 stub ConvertAnsiDevModeToUnicodeDevmode
|
140 stub ConvertAnsiDevModeToUnicodeDevmode
|
||||||
141 stub ConvertUnicodeDevModeToAnsiDevmode
|
141 stub ConvertUnicodeDevModeToAnsiDevmode
|
||||||
142 stdcall -stub CreatePrinterIC(ptr ptr)
|
142 stdcall CreatePrinterIC(ptr ptr)
|
||||||
143 stdcall DEVICECAPABILITIES(str str long ptr ptr) DeviceCapabilitiesA
|
143 stdcall DEVICECAPABILITIES(str str long ptr ptr) DeviceCapabilitiesA
|
||||||
144 stdcall DEVICEMODE(ptr ptr str ptr) DeviceMode
|
144 stdcall DEVICEMODE(ptr ptr str ptr) DeviceMode
|
||||||
145 stdcall DeleteFormA(ptr str)
|
145 stdcall DeleteFormA(ptr str)
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
163 stdcall DeletePrinterDriverExA(str str str long long)
|
163 stdcall DeletePrinterDriverExA(str str str long long)
|
||||||
164 stdcall DeletePrinterDriverExW(wstr wstr wstr long long)
|
164 stdcall DeletePrinterDriverExW(wstr wstr wstr long long)
|
||||||
165 stdcall DeletePrinterDriverW(wstr wstr wstr)
|
165 stdcall DeletePrinterDriverW(wstr wstr wstr)
|
||||||
166 stdcall -stub DeletePrinterIC(ptr)
|
166 stdcall DeletePrinterIC(ptr)
|
||||||
167 stdcall DeletePrinterKeyA(ptr str)
|
167 stdcall DeletePrinterKeyA(ptr str)
|
||||||
168 stdcall DeletePrinterKeyW(ptr wstr)
|
168 stdcall DeletePrinterKeyW(ptr wstr)
|
||||||
169 stdcall DevQueryPrint(ptr ptr ptr)
|
169 stdcall DevQueryPrint(ptr ptr ptr)
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
171 stdcall DeviceCapabilities(str str long ptr ptr) DeviceCapabilitiesA
|
171 stdcall DeviceCapabilities(str str long ptr ptr) DeviceCapabilitiesA
|
||||||
172 stdcall DeviceCapabilitiesA(str str long ptr ptr)
|
172 stdcall DeviceCapabilitiesA(str str long ptr ptr)
|
||||||
173 stdcall DeviceCapabilitiesW(wstr wstr long ptr ptr)
|
173 stdcall DeviceCapabilitiesW(wstr wstr long ptr ptr)
|
||||||
174 stdcall -stub DeviceMode(ptr ptr str ptr)
|
174 stdcall DeviceMode(ptr ptr str ptr)
|
||||||
175 stdcall DevicePropertySheets(ptr long)
|
175 stdcall DevicePropertySheets(ptr long)
|
||||||
176 stdcall DocumentEvent(ptr ptr long long ptr long ptr)
|
176 stdcall DocumentEvent(ptr ptr long long ptr long ptr)
|
||||||
177 stdcall DocumentPropertiesA(ptr ptr str ptr ptr long)
|
177 stdcall DocumentPropertiesA(ptr ptr str ptr ptr long)
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
233 stdcall EnumPrinterKeyW(ptr wstr wstr long ptr)
|
233 stdcall EnumPrinterKeyW(ptr wstr wstr long ptr)
|
||||||
234 stdcall EnumPrintersA(long ptr long ptr long ptr ptr)
|
234 stdcall EnumPrintersA(long ptr long ptr long ptr ptr)
|
||||||
235 stdcall EnumPrintersW(long ptr long ptr long ptr ptr)
|
235 stdcall EnumPrintersW(long ptr long ptr long ptr ptr)
|
||||||
236 stdcall -stub ExtDeviceMode(ptr ptr ptr str str ptr str long)
|
236 stdcall ExtDeviceMode(ptr ptr ptr str str ptr str long)
|
||||||
237 stub FindClosePrinterChangeNotification
|
237 stub FindClosePrinterChangeNotification
|
||||||
238 stub FindFirstPrinterChangeNotification
|
238 stub FindFirstPrinterChangeNotification
|
||||||
239 stub FindNextPrinterChangeNotification
|
239 stub FindNextPrinterChangeNotification
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
260 stdcall IsValidDevmodeW(ptr long)
|
260 stdcall IsValidDevmodeW(ptr long)
|
||||||
261 stdcall OpenPrinterA(str ptr ptr)
|
261 stdcall OpenPrinterA(str ptr ptr)
|
||||||
262 stdcall OpenPrinterW(wstr ptr ptr)
|
262 stdcall OpenPrinterW(wstr ptr ptr)
|
||||||
263 stdcall -stub PlayGdiScriptOnPrinterIC(ptr ptr long ptr long long)
|
263 stdcall PlayGdiScriptOnPrinterIC(ptr ptr long ptr long long)
|
||||||
264 stdcall PrinterMessageBoxA(ptr long ptr str str long)
|
264 stdcall PrinterMessageBoxA(ptr long ptr str str long)
|
||||||
265 stdcall PrinterMessageBoxW(ptr long ptr wstr wstr long)
|
265 stdcall PrinterMessageBoxW(ptr long ptr wstr wstr long)
|
||||||
266 stdcall PrinterProperties(ptr ptr)
|
266 stdcall PrinterProperties(ptr ptr)
|
||||||
|
@@ -29,6 +29,6 @@ add_library(localspl MODULE
|
|||||||
|
|
||||||
set_module_type(localspl win32dll UNICODE)
|
set_module_type(localspl win32dll UNICODE)
|
||||||
target_link_libraries(localspl skiplist16 wine)
|
target_link_libraries(localspl skiplist16 wine)
|
||||||
add_importlibs(localspl user32 advapi32 advapi32_vista netapi32 rpcrt4 secur32 spoolss msvcrt kernel32 ntdll)
|
add_importlibs(localspl user32 advapi32_vista netapi32 rpcrt4 secur32 spoolss msvcrt kernel32 ntdll)
|
||||||
add_pch(localspl precomp.h SOURCE)
|
add_pch(localspl precomp.h SOURCE)
|
||||||
add_cd_file(TARGET localspl DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET localspl DESTINATION reactos/system32 FOR all)
|
||||||
|
Reference in New Issue
Block a user