Commit 0fea0db8 authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Export KeAddSystemServiceTable() instead of the KeServiceDescriptorTable variable.

parent 48182726
...@@ -625,6 +625,21 @@ void start_server( BOOL debug ) ...@@ -625,6 +625,21 @@ void start_server( BOOL debug )
} }
/***********************************************************************
* KeAddSystemServiceTable
*/
BOOLEAN KeAddSystemServiceTable( ULONG_PTR *funcs, ULONG_PTR *counters, ULONG limit,
BYTE *arguments, ULONG index )
{
if (index >= ARRAY_SIZE(KeServiceDescriptorTable)) return FALSE;
KeServiceDescriptorTable[index].ServiceTable = funcs;
KeServiceDescriptorTable[index].CounterTable = counters;
KeServiceDescriptorTable[index].ServiceLimit = limit;
KeServiceDescriptorTable[index].ArgumentTable = arguments;
return TRUE;
}
/************************************************************************* /*************************************************************************
* map_so_dll * map_so_dll
* *
......
...@@ -36,9 +36,9 @@ ...@@ -36,9 +36,9 @@
ULONG_PTR zero_bits = 0; ULONG_PTR zero_bits = 0;
static void * const syscalls[] = static ULONG_PTR syscalls[] =
{ {
#define SYSCALL_ENTRY(id,name,args) name, #define SYSCALL_ENTRY(id,name,args) (ULONG_PTR)name,
#ifdef _WIN64 #ifdef _WIN64
ALL_SYSCALLS64 ALL_SYSCALLS64
#else #else
...@@ -58,14 +58,6 @@ static BYTE arguments[ARRAY_SIZE(syscalls)] = ...@@ -58,14 +58,6 @@ static BYTE arguments[ARRAY_SIZE(syscalls)] =
#undef SYSCALL_ENTRY #undef SYSCALL_ENTRY
}; };
static const SYSTEM_SERVICE_TABLE syscall_table =
{
(ULONG_PTR *)syscalls,
0,
ARRAY_SIZE(syscalls),
arguments
};
static NTSTATUS init( void *args ) static NTSTATUS init( void *args )
{ {
#ifdef _WIN64 #ifdef _WIN64
...@@ -77,8 +69,7 @@ static NTSTATUS init( void *args ) ...@@ -77,8 +69,7 @@ static NTSTATUS init( void *args )
zero_bits = (ULONG_PTR)info.HighestUserAddress | 0x7fffffff; zero_bits = (ULONG_PTR)info.HighestUserAddress | 0x7fffffff;
} }
#endif #endif
KeAddSystemServiceTable( syscalls, NULL, ARRAY_SIZE(syscalls), arguments, 1 );
KeServiceDescriptorTable[1] = syscall_table;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
......
...@@ -31,7 +31,6 @@ typedef NTSTATUS (*unixlib_entry_t)( void *args ); ...@@ -31,7 +31,6 @@ typedef NTSTATUS (*unixlib_entry_t)( void *args );
extern DECLSPEC_EXPORT const unixlib_entry_t __wine_unix_call_funcs[]; extern DECLSPEC_EXPORT const unixlib_entry_t __wine_unix_call_funcs[];
extern DECLSPEC_EXPORT const unixlib_entry_t __wine_unix_call_wow64_funcs[]; extern DECLSPEC_EXPORT const unixlib_entry_t __wine_unix_call_wow64_funcs[];
extern DECLSPEC_EXPORT SYSTEM_SERVICE_TABLE KeServiceDescriptorTable[4];
/* some useful helpers from ntdll */ /* some useful helpers from ntdll */
NTSYSAPI const char *ntdll_get_build_dir(void); NTSYSAPI const char *ntdll_get_build_dir(void);
...@@ -84,6 +83,8 @@ NTSYSAPI void ntdll_set_exception_jmp_buf( __wine_jmp_buf *jmp ); ...@@ -84,6 +83,8 @@ NTSYSAPI void ntdll_set_exception_jmp_buf( __wine_jmp_buf *jmp );
} \ } \
} while (0); } while (0);
NTSYSAPI BOOLEAN KeAddSystemServiceTable( ULONG_PTR *funcs, ULONG_PTR *counters, ULONG limit,
BYTE *arguments, ULONG index );
NTSYSAPI NTSTATUS KeUserModeCallback( ULONG id, const void *args, ULONG len, void **ret_ptr, ULONG *ret_len ); NTSYSAPI NTSTATUS KeUserModeCallback( ULONG id, const void *args, ULONG len, void **ret_ptr, ULONG *ret_len );
/* wide char string functions */ /* wide char string functions */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment