⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unifiedkernel-0.2.0-w0.9.11.diff

📁 该项目主要是将wingdows程序直接运行在linux上
💻 DIFF
📖 第 1 页 / 共 5 页
字号:
++		mark = &NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList;+		for (entry = mark->Flink; entry != mark; entry = entry->Flink)+		{+			mod = CONTAINING_RECORD(entry, LDR_MODULE, InMemoryOrderModuleList);+			if (!strcmpiW(ptr, mod->FullDllName.Buffer)){+				cached_modref = CONTAINING_RECORD(mod, WINE_MODREF, ldr);+				return mod->SectionHandle;+			}+		}+		RtlFreeHeap( GetProcessHeap(), 0, ptr );+		return NULL;+	}+}++/*+ * find symbol in loaded builtin dll+ */+void *find_builtin_symbol(char *dll_name, char *symbol)+{+	void *dll_handle = get_dll_handle(dll_name);+	char error[1024];+	int err_size = sizeof(error); +	return wine_dlsym(dll_handle, symbol, error, err_size);+}+#endif /******************************************************************  *		LdrInitializeThunk (NTDLL.@)  *@@ -2094,6 +2177,10 @@     PEB *peb = NtCurrentTeb()->Peb;     IMAGE_NT_HEADERS *nt = RtlImageNtHeader( peb->ImageBaseAddress ); +#ifdef UNIFIED_KERNEL+    wine_dll_set_callback(load_builtin_callback);+    main_exe_file = 0;+#endif     if (main_exe_file) NtClose( main_exe_file );  /* at this point the main module is created */      /* allocate the modref for the main exe (if not already done) */@@ -2137,6 +2224,17 @@      load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;     if ((status = fixup_imports( wm, load_path )) != STATUS_SUCCESS) goto error;+#ifdef UNIFIED_KERNEL+    /* get process start address from kernel32.dll*/+    if (!(BaseProcessStartEntry = (unsigned long) find_builtin_symbol("kernel32.dll", "BaseProcessStart")))+	    goto error;+    +    if (!(process_init = find_builtin_symbol("kernel32.dll", "process_init")))+	    goto error;+ +    process_init();++#endif     if ((status = alloc_process_tls()) != STATUS_SUCCESS) goto error;     if ((status = alloc_thread_tls()) != STATUS_SUCCESS) goto error;     if ((status = process_attach( wm, (LPVOID)1 )) != STATUS_SUCCESS)@@ -2265,6 +2363,10 @@ {     PLIST_ENTRY mark, entry;     LPWSTR buffer, p;+#ifdef UNIFIED_KERNEL+	WCHAR kernel32[] = {'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.' ,'d' ,'l' ,'l' , '\0'};+	WCHAR ntdll[] = {'n', 't', 'd', 'l', 'l', '.', 'd', 'l', 'l', '\0'};+#endif      RtlCreateUnicodeString( &system_dir, sysdir ); @@ -2274,6 +2376,12 @@     {         LDR_MODULE *mod = CONTAINING_RECORD( entry, LDR_MODULE, InLoadOrderModuleList ); +#ifdef UNIFIED_KERNEL+	/* this should be done just for kernel32.dll and ntdll.dll */+	if (strcmpiW(mod->BaseDllName.Buffer, kernel32) +			&& strcmpiW(mod->BaseDllName.Buffer, ntdll))+		continue;+#endif         assert( mod->Flags & LDR_WINE_INTERNAL );          buffer = RtlAllocateHeap( GetProcessHeap(), 0,diff -Nru wine-0.9.11.ori/dlls/ntdll/Makefile.in wine-0.9.11/dlls/ntdll/Makefile.in--- wine-0.9.11.ori/dlls/ntdll/Makefile.in	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/Makefile.in	2007-03-23 09:53:02.000000000 +0800@@ -50,13 +50,15 @@ 	threadpool.c \ 	time.c \ 	virtual.c \-	wcstring.c+	wcstring.c \+	init.c  EXTRA_OBJS = relay32.o  SUBDIRS = tests  @MAKE_DLL_RULES@+LDRPATH += -Wl,--script,ld.s  relay32.o: $(WINEBUILD) 	$(WINEBUILD) $(WINEBUILDFLAGS) -o $@ --relay32diff -Nru wine-0.9.11.ori/dlls/ntdll/nt.c wine-0.9.11/dlls/ntdll/nt.c--- wine-0.9.11.ori/dlls/ntdll/nt.c	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/nt.c	2007-03-23 09:54:21.000000000 +0800@@ -391,9 +391,21 @@ 	IN ULONG Length, 	OUT PULONG ResultLength) {+#ifndef UNIFIED_KERNEL 	FIXME("(%p,%d,%p,0x%08lx,%p) stub!\n", 	SectionHandle,SectionInformationClass,SectionInformation,Length,ResultLength); 	return 0;+#else+	NTSTATUS ret;+        +	__asm__ __volatile__ (+        "movl $0x89,%%eax\n\t"+        "lea 8(%%ebp),%%edx\n\t"+        "int $0x2E\n\t"+	:"=a" (ret)+        );+    return ret;+#endif }  /*diff -Nru wine-0.9.11.ori/dlls/ntdll/ntdll.spec wine-0.9.11/dlls/ntdll/ntdll.spec--- wine-0.9.11.ori/dlls/ntdll/ntdll.spec	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/ntdll.spec	2007-03-23 09:53:02.000000000 +0800@@ -134,7 +134,7 @@ @ stdcall NtCreateNamedPipeFile(ptr long ptr ptr long long long long long long long long long ptr) @ stdcall NtCreatePagingFile(long long long long) @ stdcall NtCreatePort(ptr ptr long long ptr)-@ stub NtCreateProcess+# @ stub NtCreateProcess # @ stub NtCreateProcessEx @ stub NtCreateProfile @ stdcall NtCreateSection(ptr long ptr ptr long long long)@@ -1390,3 +1390,25 @@ @ cdecl wine_nt_to_unix_file_name(ptr ptr long long) @ cdecl wine_unix_to_nt_file_name(ptr ptr) @ cdecl __wine_init_windows_dir(wstr wstr)++# Linux Unified Kernel extensions+# All functions are modified from ReactOS++# Thread+@ cdecl RtlRosCreateUserThread(long ptr long long ptr ptr ptr ptr ptr long long)++# Attributes+@ cdecl RtlRosR32AttribsToNativeAttribs(ptr ptr)+	+# Process+@ stdcall NtCreateProcess(long long ptr long long long long long)++# Handle +  # system call NtClose+@ stdcall UkClose(long)++# Handle +  # system call NtOpenFile+@ stdcall UkOpenFile(ptr long ptr ptr long long)+@ stdcall UkCreateSection(ptr long ptr ptr long long long)+	diff -Nru wine-0.9.11.ori/dlls/ntdll/om.c wine-0.9.11/dlls/ntdll/om.c--- wine-0.9.11.ori/dlls/ntdll/om.c	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/om.c	2007-03-23 09:54:25.000000000 +0800@@ -344,6 +344,20 @@     return ret; } +#ifdef UNIFIED_KERNEL+NTSTATUS WINAPI UkClose( HANDLE Handle )+{+    NTSTATUS ret;+    __asm__ __volatile__ (+		    "movl $0x11,%%eax\n\t"+		    "lea 8(%%ebp),%%edx\n\t"+		    "int $0x2E\n\t"+		    :"=a" (ret)+	   );+    return ret;+}+#endif+ /*  *	Directory functions  */diff -Nru wine-0.9.11.ori/dlls/ntdll/process.c wine-0.9.11/dlls/ntdll/process.c--- wine-0.9.11.ori/dlls/ntdll/process.c	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/process.c	2007-03-23 09:54:39.000000000 +0800@@ -41,6 +41,27 @@  *	Process object  */ +#ifdef UNIFIED_KERNEL+NTSTATUS WINAPI+NtCreateProcess(OUT PHANDLE ProcessHandle,+                IN ACCESS_MASK DesiredAccess,+                IN POBJECT_ATTRIBUTES ObjectAttributes  OPTIONAL,+                IN HANDLE ParentProcess,+                IN BOOLEAN InheritObjectTable,+                IN HANDLE SectionHandle  OPTIONAL,+                IN HANDLE DebugPort  OPTIONAL,+                IN HANDLE ExceptionPort  OPTIONAL)+{+	NTSTATUS ret;+	__asm__ __volatile__ (+			"movl $0x22,%%eax\n\t"+			"lea 8(%%ebp),%%edx\n\t"+			"int $0x2E\n\t"+			:"=a" (ret)+	       );+	return ret;+}+#endif /******************************************************************************  *  NtTerminateProcess			[NTDLL.@]  *@@ -49,6 +70,7 @@ NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code ) {     NTSTATUS ret;+#ifndef UNIFIED_KERNEL     BOOL self;     SERVER_START_REQ( terminate_process )     {@@ -59,6 +81,14 @@     }     SERVER_END_REQ;     if (self) exit( exit_code );+#else+        __asm__ __volatile__ (+        "movl $0xD3,%%eax\n\t"+        "lea 8(%%ebp),%%edx\n\t"+        "int $0x2E\n\t"+	:"=a" (ret)+        );+#endif     return ret; } @@ -90,6 +120,7 @@ 	OUT PULONG ReturnLength) {     NTSTATUS ret = STATUS_SUCCESS;+#ifndef UNIFIED_KERNEL     ULONG len = 0;      TRACE("(%p,0x%08x,%p,0x%08lx,%p)\n",@@ -290,7 +321,14 @@     }      if (ReturnLength) *ReturnLength = len;-    +#else+    __asm__ __volatile__ (+		    "movl $0x7D,%%eax\n\t"+		    "lea 8(%%ebp),%%edx\n\t"+		    "int $0x2E\n\t"+		    :"=a" (ret)+	   );+#endif     return ret; } @@ -306,6 +344,7 @@ {     NTSTATUS ret = STATUS_SUCCESS; +#ifndef UNIFIED_KERNEL     switch (ProcessInformationClass)     {     case ProcessAffinityMask:@@ -344,6 +383,14 @@         ret = STATUS_NOT_IMPLEMENTED;         break;     }+#else+    __asm__ __volatile__ (+		    "movl $0xBA,%%eax\n\t"+		    "lea 8(%%ebp),%%edx\n\t"+		    "int $0x2E\n\t"+		    :"=a" (ret)+	   );+#endif     return ret; } diff -Nru wine-0.9.11.ori/dlls/ntdll/signal_i386.c wine-0.9.11/dlls/ntdll/signal_i386.c--- wine-0.9.11.ori/dlls/ntdll/signal_i386.c	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/signal_i386.c	2007-03-23 09:53:02.000000000 +0800@@ -669,7 +669,11 @@     *gs = wine_get_gs(); #endif +#ifndef UNIFIED_KERNEL     wine_set_fs( thread_regs->fs );+#else+    wine_set_fs(((struct ntdll_thread_regs *)(NtCurrentTeb()->SpareBytes1))->fs);+#endif      /* now restore a proper %gs for the fault handler */     if (!wine_ldt_is_system(CS_sig(sigcontext)) ||diff -Nru wine-0.9.11.ori/dlls/ntdll/thread.c wine-0.9.11/dlls/ntdll/thread.c--- wine-0.9.11.ori/dlls/ntdll/thread.c	2006-03-31 20:38:27.000000000 +0800+++ wine-0.9.11/dlls/ntdll/thread.c	2007-03-23 09:54:43.000000000 +0800@@ -17,7 +17,6 @@  * License along with this library; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */- #include "config.h" #include "wine/port.h" @@ -40,6 +39,9 @@ #include "wine/debug.h" #include "ntdll_misc.h" #include "wine/exception.h"+#ifdef UNIFIED_KERNEL+#include <assert.h>+#endif  WINE_DEFAULT_DEBUG_CHANNEL(thread); @@ -57,7 +59,11 @@ static WCHAR current_dir[MAX_NT_PATH_LENGTH]; static RTL_BITMAP tls_bitmap; static RTL_BITMAP tls_expansion_bitmap;+#ifndef UNIFIED_KERNEL static LIST_ENTRY tls_links;+#else+LIST_ENTRY tls_links;+#endif static size_t sigstack_total_size;  struct wine_pthread_functions pthread_functions = { NULL };@@ -475,6 +481,544 @@     close( request_pipe[1] );     return status; }+#ifdef UNIFIED_KERNEL+#define ROUNDUP(a, b) ((((a) + (b) - 1)/(b))*(b))++#define PAGE_SIZE 0x1000++#define DEFAULT_STACK_RESERVE (32 * PAGE_SIZE)++#define USER_CS		(0x18 + 0x3)+#define USER_DS		(0x20 + 0x3)+#define TEB_SELECTOR	(0x38 + 0x3)++NTSTATUS WINAPI+NtCreateThread(OUT PHANDLE ThreadHandle,+               IN ACCESS_MASK DesiredAccess,+               IN POBJECT_ATTRIBUTES ObjectAttributes  OPTIONAL,+               IN HANDLE ProcessHandle,+               OUT PCLIENT_ID ClientId,+               IN PCONTEXT ThreadContext,+               IN PINITIAL_TEB InitialTeb,+               IN BOOLEAN CreateSuspended)+{+	NTSTATUS ret;+	__asm__ __volatile__ (+			"movl $0x27,%%eax\n\t"+			"lea 8(%%ebp),%%edx\n\t"+			"int $0x2E\n\t"+			:"=a" (ret)+	       );+	return ret;+}++VOID RtlRosR32AttribsToNativeAttribs(OUT OBJECT_ATTRIBUTES * NativeAttribs, +		IN SECURITY_ATTRIBUTES * Ros32Attribs OPTIONAL)+{+	NativeAttribs->Length = sizeof(*NativeAttribs);+	NativeAttribs->ObjectName = NULL;+	NativeAttribs->RootDirectory = NULL;+	NativeAttribs->Attributes = 0;+	NativeAttribs->SecurityQualityOfService = NULL;+++	if(Ros32Attribs && Ros32Attribs->nLength >= sizeof(*Ros32Attribs)) {+		NativeAttribs->SecurityDescriptor = Ros32Attribs->lpSecurityDescriptor;++		if(Ros32Attribs->bInheritHandle)+			NativeAttribs->Attributes |= OBJ_INHERIT;+	} else+		NativeAttribs->SecurityDescriptor = NULL;+}++NTSTATUS NTAPI RtlpRosGetStackLimits(IN PINITIAL_TEB InitialTeb,+		OUT PVOID * StackBase,+		OUT PVOID * StackLimit)+{+	/* fixed-size stack */+	if(InitialTeb->StackBase && InitialTeb->StackLimit) {+		*StackBase = InitialTeb->StackBase;+		*StackLimit = InitialTeb->StackLimit;+	} else if(InitialTeb->StackCommit && InitialTeb->StackCommitMax) { /* expandable stack */+		*StackBase = InitialTeb->StackCommit;+		*StackLimit = InitialTeb->StackCommitMax;+	} else { /* can't determine the type of stack: failure */+		return STATUS_BAD_INITIAL_STACK;+	}++	/* valid stack */+	return STATUS_SUCCESS;+}++NTSTATUS NTAPI RtlpRosValidateLinearUserStack(IN PVOID StackBase,+		IN PVOID StackLimit,+		IN BOOLEAN Direction)+{+	/* the stack has a null or negative (relatively to its direction) length */+	if (StackBase == StackLimit || (Direction ^ ((PCHAR)StackBase < (PCHAR)StackLimit)))+			return STATUS_BAD_INITIAL_STACK;++	/* valid stack */+	return STATUS_SUCCESS;+}++extern void ProcessStartForward(unsigned long start_address, void *peb);+NTSTATUS NTAPI+RtlRosInitializeContext(IN HANDLE ProcessHandle,+		OUT PCONTEXT Context,+		IN PVOID BaseStartAddress,+		IN PINITIAL_TEB InitialTeb,+		IN ULONG_PTR StartAddress,+		IN ULONG_PTR Parameter)+{+	static PVOID spRetAddr = (PVOID)0xDEADBEEF;++	ULONG nDummy;+	NTSTATUS nErrCode;+	PVOID pStackBase;+	PVOID pStackLimit;+	size_t ReserveSize = 3 * sizeof(ULONG_PTR);++	/* Intel x86: linear top-down stack, all parameters passed on the stack */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -