mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-15 07:44:47 +00:00
ntdll: Setup the shared user data structure at 0x7ffe0000.
This commit is contained in:
parent
bd3a08b355
commit
5aa70b3d80
|
@ -40,6 +40,7 @@
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/server.h"
|
#include "wine/server.h"
|
||||||
#include "ntdll_misc.h"
|
#include "ntdll_misc.h"
|
||||||
|
#include "ddk/wdm.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(module);
|
WINE_DEFAULT_DEBUG_CHANNEL(module);
|
||||||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||||
|
@ -2307,6 +2308,7 @@ void __wine_init_windows_dir( const WCHAR *windir, const WCHAR *sysdir )
|
||||||
LPWSTR buffer, p;
|
LPWSTR buffer, p;
|
||||||
|
|
||||||
RtlCreateUnicodeString( &system_dir, sysdir );
|
RtlCreateUnicodeString( &system_dir, sysdir );
|
||||||
|
strcpyW( user_shared_data->NtSystemRoot, windir );
|
||||||
|
|
||||||
/* prepend the system dir to the name of the already created modules */
|
/* prepend the system dir to the name of the already created modules */
|
||||||
mark = &NtCurrentTeb()->Peb->LdrData->InLoadOrderModuleList;
|
mark = &NtCurrentTeb()->Peb->LdrData->InLoadOrderModuleList;
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
#include "winioctl.h"
|
|
||||||
#include "wine/server.h"
|
#include "wine/server.h"
|
||||||
|
|
||||||
#define MAX_NT_PATH_LENGTH 277
|
#define MAX_NT_PATH_LENGTH 277
|
||||||
|
@ -117,6 +116,7 @@ extern NTSTATUS DIR_get_unix_cwd( char **cwd );
|
||||||
extern NTSTATUS VIRTUAL_HandleFault(LPCVOID addr);
|
extern NTSTATUS VIRTUAL_HandleFault(LPCVOID addr);
|
||||||
extern void VIRTUAL_SetForceExec( BOOL enable );
|
extern void VIRTUAL_SetForceExec( BOOL enable );
|
||||||
extern void VIRTUAL_UseLargeAddressSpace(void);
|
extern void VIRTUAL_UseLargeAddressSpace(void);
|
||||||
|
extern struct _KUSER_SHARED_DATA *user_shared_data;
|
||||||
|
|
||||||
/* code pages */
|
/* code pages */
|
||||||
extern int ntdll_umbstowcs(DWORD flags, const char* src, int srclen, WCHAR* dst, int dstlen);
|
extern int ntdll_umbstowcs(DWORD flags, const char* src, int srclen, WCHAR* dst, int dstlen);
|
||||||
|
|
|
@ -40,11 +40,14 @@
|
||||||
#include "wine/pthread.h"
|
#include "wine/pthread.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "ntdll_misc.h"
|
#include "ntdll_misc.h"
|
||||||
|
#include "ddk/wdm.h"
|
||||||
#include "wine/exception.h"
|
#include "wine/exception.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(thread);
|
WINE_DEFAULT_DEBUG_CHANNEL(thread);
|
||||||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||||
|
|
||||||
|
struct _KUSER_SHARED_DATA *user_shared_data = NULL;
|
||||||
|
|
||||||
/* info passed to a starting thread */
|
/* info passed to a starting thread */
|
||||||
struct startup_info
|
struct startup_info
|
||||||
{
|
{
|
||||||
|
@ -225,6 +228,7 @@ HANDLE thread_init(void)
|
||||||
void *addr;
|
void *addr;
|
||||||
SIZE_T size, info_size;
|
SIZE_T size, info_size;
|
||||||
HANDLE exe_file = 0;
|
HANDLE exe_file = 0;
|
||||||
|
LARGE_INTEGER now;
|
||||||
struct ntdll_thread_data *thread_data;
|
struct ntdll_thread_data *thread_data;
|
||||||
struct ntdll_thread_regs *thread_regs;
|
struct ntdll_thread_regs *thread_regs;
|
||||||
struct wine_pthread_thread_info thread_info;
|
struct wine_pthread_thread_info thread_info;
|
||||||
|
@ -236,7 +240,8 @@ HANDLE thread_init(void)
|
||||||
|
|
||||||
addr = (void *)0x7ffe0000;
|
addr = (void *)0x7ffe0000;
|
||||||
size = 0x10000;
|
size = 0x10000;
|
||||||
NtAllocateVirtualMemory( NtCurrentProcess(), &addr, 0, &size, MEM_RESERVE, PAGE_READONLY );
|
NtAllocateVirtualMemory( NtCurrentProcess(), &addr, 0, &size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE );
|
||||||
|
user_shared_data = addr;
|
||||||
|
|
||||||
/* allocate and initialize the PEB */
|
/* allocate and initialize the PEB */
|
||||||
|
|
||||||
|
@ -325,6 +330,15 @@ HANDLE thread_init(void)
|
||||||
/* initialize LDT locking */
|
/* initialize LDT locking */
|
||||||
wine_ldt_init_locking( ldt_lock, ldt_unlock );
|
wine_ldt_init_locking( ldt_lock, ldt_unlock );
|
||||||
|
|
||||||
|
/* initialize time values in user_shared_data */
|
||||||
|
NtQuerySystemTime( &now );
|
||||||
|
user_shared_data->SystemTime.LowPart = now.LowPart;
|
||||||
|
user_shared_data->SystemTime.High1Time = user_shared_data->SystemTime.High2Time = now.HighPart;
|
||||||
|
user_shared_data->u.TickCountQuad = (now.QuadPart - server_start_time) / 10000;
|
||||||
|
user_shared_data->u.TickCount.High2Time = user_shared_data->u.TickCount.High1Time;
|
||||||
|
user_shared_data->TickCountLowDeprecated = user_shared_data->u.TickCount.LowPart;
|
||||||
|
user_shared_data->TickCountMultiplier = 1 << 24;
|
||||||
|
|
||||||
return exe_file;
|
return exe_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "ntdll_misc.h"
|
#include "ntdll_misc.h"
|
||||||
|
#include "ddk/wdm.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(ver);
|
WINE_DEFAULT_DEBUG_CHANNEL(ver);
|
||||||
|
|
||||||
|
@ -505,6 +506,13 @@ done:
|
||||||
NtCurrentTeb()->Peb->OSBuildNumber = current_version->dwBuildNumber;
|
NtCurrentTeb()->Peb->OSBuildNumber = current_version->dwBuildNumber;
|
||||||
NtCurrentTeb()->Peb->OSPlatformId = current_version->dwPlatformId;
|
NtCurrentTeb()->Peb->OSPlatformId = current_version->dwPlatformId;
|
||||||
|
|
||||||
|
user_shared_data->NtProductType = current_version->wProductType;
|
||||||
|
user_shared_data->ProductTypeIsValid = TRUE;
|
||||||
|
user_shared_data->MajorNtVersion = current_version->dwMajorVersion;
|
||||||
|
user_shared_data->MinorNtVersion = current_version->dwMinorVersion;
|
||||||
|
user_shared_data->MinorNtVersion = current_version->dwMinorVersion;
|
||||||
|
user_shared_data->SuiteMask = current_version->wSuiteMask;
|
||||||
|
|
||||||
TRACE( "got %d.%d plaform %d build %x name %s service pack %d.%d product %d\n",
|
TRACE( "got %d.%d plaform %d build %x name %s service pack %d.%d product %d\n",
|
||||||
current_version->dwMajorVersion, current_version->dwMinorVersion,
|
current_version->dwMajorVersion, current_version->dwMinorVersion,
|
||||||
current_version->dwPlatformId, current_version->dwBuildNumber,
|
current_version->dwPlatformId, current_version->dwBuildNumber,
|
||||||
|
|
Loading…
Reference in a new issue