Skip to content

Commit 8d734bb

Browse files
committed
[SDK][KERNELBASE] Build Wine KernelBase
1 parent de74c47 commit 8d734bb

22 files changed

Lines changed: 554 additions & 131 deletions

dll/win32/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ add_subdirectory(itss)
7676
add_subdirectory(jscript)
7777
add_subdirectory(jsproxy)
7878
add_subdirectory(kernel32)
79+
add_subdirectory(kernelbase)
7980
add_subdirectory(loadperf)
8081
add_subdirectory(lpk)
8182
add_subdirectory(lsasrv)
Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,47 @@
11

22
remove_definitions(-D_WIN32_WINNT=0x502 -DWINVER=0x502)
3-
add_definitions(-D_WIN32_WINNT=0x601 -DWINVER=0x601)
3+
add_definitions(-D_WIN32_WINNT=0x600 -DWINVER=0x600)
44

5-
add_definitions(
6-
-D__WINESRC__
7-
-D_WINE
8-
-D_KERNELBASE_)
5+
if (DLL_EXPORT_VERSION LESS 0x601)
6+
set(kernelbase_name kernelbase)
7+
else()
8+
set(kernelbase_name kernelbase)
9+
endif()
910

10-
include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/wine)
11+
add_subdirectory(wine)
1112

12-
#add_subdirectory(wine)
13-
# TODO: ReactOS Isn't ready for Kernelbase.dll
13+
add_definitions(-D_KERNELBASE_)
14+
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/subsys)
15+
spec2def(${kernelbase_name}.dll kernelbase.spec ADD_IMPORTLIB)
16+
17+
if(MSVC)
18+
# Disable warning C4267: 'initializing': conversion from 'size_t' to 'DWORD', possible loss of data
19+
set_source_files_properties(kernel32/winnls/string/locale.c PROPERTIES COMPILE_OPTIONS "/wd4267")
20+
else()
21+
# Disable warning: 'variable' defined but not used
22+
set_source_files_properties(kernel32/winnls/string/locale.c PROPERTIES COMPILE_OPTIONS "-Wno-unused-variable")
23+
endif()
24+
25+
# This isn't called KernelBase because apps will explode and we aren't win7 yet.
26+
add_library(${kernelbase_name} MODULE
27+
wine/kernelbase.rc
28+
${CMAKE_CURRENT_BINARY_DIR}/${kernelbase_name}_stubs.c
29+
${CMAKE_CURRENT_BINARY_DIR}/${kernelbase_name}.def)
30+
31+
if(MSVC)
32+
# Disable warning C4133: 'function': incompatible types - from 'WICPixelFormatNumericRepresentation *' to 'DWORD *'
33+
# Disable warning C4146: unary minus operator applied to unsigned type, result still unsigned
34+
target_compile_options(${kernelbase_name} PRIVATE /wd4047 /wd4024 /wd4133 /wd4146)
35+
endif()
36+
37+
set_module_type(${kernelbase_name} win32dll ENTRYPOINT DllMain 12)
38+
#############################################
39+
## HACK FOR MSVC COMPILATION WITH win32dll ##
40+
set_subsystem(${kernelbase_name} console)
41+
################# END HACK #################
42+
43+
target_link_libraries(${kernelbase_name} win32_registry kernelbase_path kernelbase_static cryptlib wine chkstk ${PSEH_LIB})
44+
add_importlibs(${kernelbase_name} ntdll)
45+
add_pch(${kernelbase_name} kernel32/k32.h SOURCE)
46+
add_dependencies(${kernelbase_name} psdk errcodes asm)
47+
add_cd_file(TARGET ${kernelbase_name} DESTINATION reactos/system32 FOR all)

dll/win32/kernelbase/wine/CMakeLists.txt

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
add_definitions(-D__WINESRC__ -D_KERNEL32_ -DWINVER=0x601 -D_WIN32_WINNT=0x601)
1+
remove_definitions(-D_WIN32_WINNT=0x502 -DWINVER=0x502)
2+
remove_definitions(-D_WIN32_WINNT=0x600 -DWINVER=0x600)
3+
add_definitions(-D_WIN32_WINNT=0x601 -DWINVER=0x601)
4+
25
add_definitions(
36
-D__WINESRC__
47
-D_WINE
58
-Dwcsnicmp=_wcsnicmp
69
-Dwcsicmp=_wcsicmp
710
-Dstrnicmp=_strnicmp
811
-Dswprintf=_swprintf
9-
-D_KERNELBASE_)
12+
-D_KERNELBASE_
13+
-D_KERNEL32_)
1014

1115
include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/wine)
1216

@@ -23,26 +27,47 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR
2327
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-reorder>)
2428
endif()
2529

26-
#list(APPEND SOURCE_PATH
27-
# path.c
28-
# )
29-
#
30-
#add_library(kernelbase_path ${SOURCE_PATH})
31-
#target_link_libraries(kernelbase_path ${PSEH_LIB})
32-
#add_dependencies(kernelbase_path psdk)
30+
list(APPEND SOURCE_PATH
31+
path.c
32+
)
3333

34+
add_library(kernelbase_path ${SOURCE_PATH})
35+
target_link_libraries(kernelbase_path ${PSEH_LIB})
36+
add_dependencies(kernelbase_path psdk)
3437
if(NOT MSVC)
3538
target_compile_options(kernelbase_path PRIVATE -Wno-unused-variable)
3639
target_compile_options(kernelbase_path PRIVATE -Wno-unused-function)
3740
endif()
3841

3942
list(APPEND SOURCE_STATIC
40-
#console.c #looks like ReactOS console.c is nothing like wine.
43+
console.c
44+
debug.c
45+
file.c
46+
loader.c
47+
locale.c
48+
main.c
49+
memory.c
50+
process.c
51+
registry.c
52+
security.c
53+
string.c
54+
sync.c
55+
thread.c
56+
version.c #mostly Version.dll
57+
volume.c
4158
)
4259

4360
add_library(kernelbase_static ${SOURCE_STATIC})
4461
target_link_libraries(kernelbase_static psapi_static ${PSEH_LIB})
4562
add_dependencies(kernelbase_static psdk)
63+
if(MSVC)
64+
# Disable warning C4090: 'function': different 'const' qualifiers
65+
# Disable warning C4133: 'function': incompatible types - from 'UINT *' to 'MSIINSTALLCONTEXT *'
66+
# Disable warning C4146: unary minus operator applied to unsigned type, result still unsigned
67+
# Disable warning C4312: 'type cast': conversion from 'unsigned int' to 'HANDLE' of greater size
68+
target_compile_options(kernelbase_static PRIVATE /wd4090 /wd4133 /wd4146 /wd4312)
69+
endif()
70+
4671

4772
if(NOT MSVC)
4873
target_compile_options(kernelbase_static PRIVATE -Wno-unused-variable)

dll/win32/kernelbase/wine/console.c

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ static BOOL init_console_std_handles( BOOL override_all )
335335
/******************************************************************
336336
* AddConsoleAliasA (kernelbase.@)
337337
*/
338-
BOOL WINAPI AddConsoleAliasA( LPSTR source, LPSTR target, LPSTR exename )
338+
BOOL WINAPI AddConsoleAliasA( LPCSTR source, LPCSTR target, LPCSTR exename )
339339
{
340340
FIXME( ": (%s, %s, %s) stub!\n", debugstr_a(source), debugstr_a(target), debugstr_a(exename) );
341341
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -346,7 +346,7 @@ BOOL WINAPI AddConsoleAliasA( LPSTR source, LPSTR target, LPSTR exename )
346346
/******************************************************************
347347
* AddConsoleAliasW (kernelbase.@)
348348
*/
349-
BOOL WINAPI AddConsoleAliasW( LPWSTR source, LPWSTR target, LPWSTR exename )
349+
BOOL WINAPI AddConsoleAliasW( LPCWSTR source, LPCWSTR target, LPCWSTR exename )
350350
{
351351
FIXME( ": (%s, %s, %s) stub!\n", debugstr_w(source), debugstr_w(target), debugstr_w(exename) );
352352
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -455,8 +455,8 @@ static BOOL alloc_console( BOOL headless )
455455

456456
UpdateProcThreadAttribute( console_si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
457457
&server, sizeof(server), NULL, NULL );
458-
swprintf( conhost_path, ARRAY_SIZE(conhost_path), L"%s\\conhost.exe", system_dir );
459-
swprintf( cmd, ARRAY_SIZE(cmd), L"\"%s\" --server 0x%x", conhost_path, condrv_handle( server ));
458+
_snwprintf( conhost_path, ARRAY_SIZE(conhost_path), L"%s\\conhost.exe", system_dir );
459+
_snwprintf( cmd, ARRAY_SIZE(cmd), L"\"%s\" --server 0x%x", conhost_path, condrv_handle( server ));
460460
if (headless) wcscat( cmd, L" --headless" );
461461
Wow64DisableWow64FsRedirection( &redir );
462462
ret = CreateProcessW( conhost_path, cmd, NULL, NULL, TRUE, DETACHED_PROCESS | EXTENDED_STARTUPINFO_PRESENT,
@@ -499,7 +499,7 @@ BOOL WINAPI AllocConsole(void)
499499
* CreateConsoleScreenBuffer (kernelbase.@)
500500
*/
501501
HANDLE WINAPI DECLSPEC_HOTPATCH CreateConsoleScreenBuffer( DWORD access, DWORD share,
502-
SECURITY_ATTRIBUTES *sa, DWORD flags,
502+
CONST SECURITY_ATTRIBUTES *sa, DWORD flags,
503503
void *data )
504504
{
505505
OBJECT_ATTRIBUTES attr = {sizeof(attr)};
@@ -708,7 +708,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GenerateConsoleCtrlEvent( DWORD event, DWORD group
708708
/******************************************************************
709709
* GetConsoleAliasA (kernelbase.@)
710710
*/
711-
DWORD WINAPI GetConsoleAliasA( LPSTR source, LPSTR buffer, DWORD len, LPSTR exename )
711+
DWORD WINAPI GetConsoleAliasA( LPCSTR source, LPSTR buffer, DWORD len, LPCSTR exename )
712712
{
713713
FIXME( "(%s,%p,%ld,%s): stub\n", debugstr_a(source), buffer, len, debugstr_a(exename) );
714714
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -719,7 +719,7 @@ DWORD WINAPI GetConsoleAliasA( LPSTR source, LPSTR buffer, DWORD len, LPSTR exen
719719
/******************************************************************
720720
* GetConsoleAliasW (kernelbase.@)
721721
*/
722-
DWORD WINAPI GetConsoleAliasW( LPWSTR source, LPWSTR buffer, DWORD len, LPWSTR exename )
722+
DWORD WINAPI GetConsoleAliasW( LPCWSTR source, LPWSTR buffer, DWORD len, LPCWSTR exename )
723723
{
724724
FIXME( "(%s,%p,%ld,%s): stub\n", debugstr_w(source), buffer, len, debugstr_w(exename) );
725725
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -752,7 +752,7 @@ DWORD WINAPI GetConsoleAliasExesLengthW(void)
752752
/******************************************************************
753753
* GetConsoleAliasesLengthA (kernelbase.@)
754754
*/
755-
DWORD WINAPI GetConsoleAliasesLengthA( LPSTR unknown )
755+
DWORD WINAPI GetConsoleAliasesLengthA( LPCSTR unknown )
756756
{
757757
FIXME( ": (%s) stub!\n", debugstr_a(unknown) );
758758
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -763,7 +763,7 @@ DWORD WINAPI GetConsoleAliasesLengthA( LPSTR unknown )
763763
/******************************************************************
764764
* GetConsoleAliasesLengthW (kernelbase.@)
765765
*/
766-
DWORD WINAPI GetConsoleAliasesLengthW( LPWSTR unknown )
766+
DWORD WINAPI GetConsoleAliasesLengthW( LPCWSTR unknown )
767767
{
768768
FIXME( ": (%s) stub!\n", debugstr_w(unknown) );
769769
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
@@ -1538,7 +1538,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCtrlHandler( PHANDLER_ROUTINE func, BOOL
15381538
/******************************************************************************
15391539
* SetConsoleCursorInfo (kernelbase.@)
15401540
*/
1541-
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCursorInfo( HANDLE handle, CONSOLE_CURSOR_INFO *info )
1541+
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCursorInfo( HANDLE handle, CONST CONSOLE_CURSOR_INFO *info )
15421542
{
15431543
struct condrv_output_info_params params = { SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM };
15441544

@@ -1733,7 +1733,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleTitleW( LPCWSTR title )
17331733
/******************************************************************************
17341734
* SetConsoleWindowInfo (kernelbase.@)
17351735
*/
1736-
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleWindowInfo( HANDLE handle, BOOL absolute, SMALL_RECT *window )
1736+
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleWindowInfo( HANDLE handle, BOOL absolute, CONST SMALL_RECT *window )
17371737
{
17381738
struct condrv_output_info_params params = { SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW };
17391739
SMALL_RECT rect = *window;
@@ -2063,7 +2063,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterW( HANDLE handle, LPCWS
20632063
/***********************************************************************
20642064
* ReadConsoleA (kernelbase.@)
20652065
*/
2066-
BOOL WINAPI ReadConsoleA( HANDLE handle, void *buffer, DWORD length, DWORD *count, void *reserved )
2066+
BOOL WINAPI ReadConsoleA( HANDLE handle, void *buffer, DWORD length, DWORD *count,
2067+
PCONSOLE_READCONSOLE_CONTROL reserved )
20672068
{
20682069
if (length > INT_MAX)
20692070
{
@@ -2078,7 +2079,8 @@ BOOL WINAPI ReadConsoleA( HANDLE handle, void *buffer, DWORD length, DWORD *coun
20782079
/***********************************************************************
20792080
* ReadConsoleW (kernelbase.@)
20802081
*/
2081-
BOOL WINAPI ReadConsoleW( HANDLE handle, void *buffer, DWORD length, DWORD *count, void *reserved )
2082+
BOOL WINAPI ReadConsoleW( HANDLE handle, void *buffer, DWORD length, DWORD *count,
2083+
PCONSOLE_READCONSOLE_CONTROL reserved )
20822084
{
20832085
BOOL ret;
20842086

@@ -2113,7 +2115,7 @@ BOOL WINAPI ReadConsoleW( HANDLE handle, void *buffer, DWORD length, DWORD *coun
21132115
tmp, sizeof(DWORD) + length * sizeof(WCHAR), count );
21142116
if (ret)
21152117
{
2116-
memcpy( &crc->dwConsoleKeyState, tmp, sizeof(DWORD) );
2118+
memcpy( &crc->dwControlKeyState, tmp, sizeof(DWORD) );
21172119
*count -= sizeof(DWORD);
21182120
memcpy( buffer, tmp + sizeof(DWORD), *count );
21192121
}
@@ -2226,18 +2228,19 @@ static HANDLE create_pseudo_console( COORD size, HANDLE input, HANDLE output, HA
22262228
UpdateProcThreadAttribute( si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
22272229
inherit, sizeof(*inherit) * inherit_count, NULL, NULL );
22282230

2229-
swprintf( conhost_path, ARRAY_SIZE(conhost_path), L"%s\\conhost.exe", system_dir );
2231+
_snwprintf( conhost_path, ARRAY_SIZE(conhost_path), L"%s\\conhost.exe", system_dir );
22302232
if (signal)
22312233
{
2232-
swprintf( cmd, ARRAY_SIZE(cmd),
2233-
L"\"%s\" --headless %s--width %u --height %u --signal 0x%x --server 0x%x",
2234+
_snwprintf( cmd, ARRAY_SIZE(cmd),
2235+
L"\"%s\" --headless %s--width %u --height %u --signal 0x%llx --server 0x%llx",
22342236
conhost_path, (flags & PSEUDOCONSOLE_INHERIT_CURSOR) ? L"--inheritcursor " : L"",
2235-
size.X, size.Y, signal, server );
2237+
size.X, size.Y, (unsigned long long)(ULONG_PTR)signal,
2238+
(unsigned long long)(ULONG_PTR)server );
22362239
}
22372240
else
22382241
{
2239-
swprintf( cmd, ARRAY_SIZE(cmd), L"\"%s\" --unix --width %u --height %u --server 0x%x",
2240-
conhost_path, size.X, size.Y, server );
2242+
_snwprintf( cmd, ARRAY_SIZE(cmd), L"\"%s\" --unix --width %u --height %u --server 0x%llx",
2243+
conhost_path, size.X, size.Y, (unsigned long long)(ULONG_PTR)server );
22412244
}
22422245
Wow64DisableWow64FsRedirection( &redir );
22432246
res = CreateProcessW( conhost_path, cmd, NULL, NULL, TRUE, DETACHED_PROCESS | EXTENDED_STARTUPINFO_PRESENT,
@@ -2273,7 +2276,7 @@ HRESULT WINAPI CreatePseudoConsole( COORD size, HANDLE input, HANDLE output, DWO
22732276

22742277
if (!(pseudo_console = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pseudo_console) ))) return E_OUTOFMEMORY;
22752278

2276-
swprintf( pipe_name, ARRAY_SIZE(pipe_name), L"\\\\.\\pipe\\wine_pty_signal_pipe%x",
2279+
_snwprintf( pipe_name, ARRAY_SIZE(pipe_name), L"\\\\.\\pipe\\wine_pty_signal_pipe%x",
22772280
GetCurrentThreadId() );
22782281
signal = CreateNamedPipeW( pipe_name, PIPE_ACCESS_INBOUND | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE,
22792282
PIPE_UNLIMITED_INSTANCES, 4096, 4096, NMPWAIT_USE_DEFAULT_WAIT, &inherit_attr );

dll/win32/kernelbase/wine/debug.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#define WIN32_NO_STATUS
2727
#include "windef.h"
2828
#include "winbase.h"
29+
#include "winreg.h"
2930
#include "winternl.h"
3031
#include "winnls.h"
3132
#include "wingdi.h"
@@ -39,6 +40,8 @@
3940
#include "kernelbase.h"
4041
#include "wine/debug.h"
4142

43+
UINT WINAPI GetErrorMode(void);
44+
4245
WINE_DEFAULT_DEBUG_CHANNEL(seh);
4346
WINE_DECLARE_DEBUG_CHANNEL(winedbg);
4447

@@ -309,7 +312,7 @@ void WINAPI DECLSPEC_HOTPATCH OutputDebugStringW( LPCWSTR str )
309312
}
310313
}
311314

312-
315+
#ifndef __REACTOS__
313316
/*******************************************************************
314317
* RaiseException (kernelbase.@)
315318
*/
@@ -410,6 +413,7 @@ __ASM_STDCALL_IMPORT(RaiseException,16)
410413
#else
411414
__ASM_GLOBAL_IMPORT(RaiseException)
412415
#endif
416+
#endif
413417

414418
/*******************************************************************
415419
* RaiseFailFastException (kernelbase.@)
@@ -576,13 +580,13 @@ static BOOL start_debugger( EXCEPTION_POINTERS *epointers, HANDLE event )
576580
{
577581
size_t format_size = lstrlenW( format ) + 2*20;
578582
cmdline = HeapAlloc( GetProcessHeap(), 0, format_size * sizeof(WCHAR) );
579-
swprintf( cmdline, format_size, format, GetCurrentProcessId(), HandleToLong(event) );
583+
_snwprintf( cmdline, format_size, format, GetCurrentProcessId(), HandleToLong(event) );
580584
HeapFree( GetProcessHeap(), 0, format );
581585
}
582586
else
583587
{
584588
cmdline = HeapAlloc( GetProcessHeap(), 0, 80 * sizeof(WCHAR) );
585-
swprintf( cmdline, 80, L"winedbg --auto %ld %ld", GetCurrentProcessId(), HandleToLong(event) );
589+
_snwprintf( cmdline, 80, L"winedbg --auto %ld %ld", GetCurrentProcessId(), HandleToLong(event) );
586590
}
587591

588592
if (!autostart)
@@ -849,7 +853,7 @@ HRESULT WINAPI /* DECLSPEC_HOTPATCH */ WerUnregisterRuntimeExceptionModule( cons
849853
return S_OK;
850854
}
851855

852-
856+
#ifndef __REACTOS__
853857
/***********************************************************************
854858
* psapi functions
855859
***********************************************************************/
@@ -1669,7 +1673,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetWsChanges( HANDLE process, PSAPI_WS_WATCH_INFOR
16691673
TRACE( "(%p, %p, %ld)\n", process, info, size );
16701674
return set_ntstatus( NtQueryInformationProcess( process, ProcessWorkingSetWatch, info, size, NULL ));
16711675
}
1672-
1676+
#endif
16731677

16741678
/***********************************************************************
16751679
* GetWsChangesEx (kernelbase.@)
@@ -1684,6 +1688,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetWsChangesEx( HANDLE process, PSAPI_WS_WATCH_INF
16841688
}
16851689

16861690

1691+
#ifndef __REACTOS__
16871692
/***********************************************************************
16881693
* InitializeProcessForWsWatch (kernelbase.@)
16891694
* K32InitializeProcessForWsWatch (kernelbase.@)
@@ -1694,7 +1699,6 @@ BOOL WINAPI /* DECLSPEC_HOTPATCH */ InitializeProcessForWsWatch( HANDLE process
16941699
return TRUE;
16951700
}
16961701

1697-
16981702
/***********************************************************************
16991703
* QueryWorkingSet (kernelbase.@)
17001704
* K32QueryWorkingSet (kernelbase.@)
@@ -1818,3 +1822,4 @@ BOOL WINAPI DECLSPEC_HOTPATCH QueryFullProcessImageNameW( HANDLE process, DWORD
18181822
HeapFree( GetProcessHeap(), 0, dynamic_buffer );
18191823
return set_ntstatus( status );
18201824
}
1825+
#endif

0 commit comments

Comments
 (0)