Author: fireball
Date: Wed Oct 14 19:46:24 2015
New Revision: 69529
URL:
http://svn.reactos.org/svn/reactos?rev=69529&view=rev
Log:
[ARWINSS]
- Add latest version of patch to trunk. It contains all the ugly hacks and whatever is
needed to make Arwinss "work" in trunk.
Added:
branches/arwinss/arwinss/trunk.patch (with props)
Added: branches/arwinss/arwinss/trunk.patch
URL:
http://svn.reactos.org/svn/reactos/branches/arwinss/arwinss/trunk.patch?rev…
==============================================================================
--- branches/arwinss/arwinss/trunk.patch (added)
+++ branches/arwinss/arwinss/trunk.patch [iso-8859-1] Wed Oct 14 19:46:24 2015
@@ -0,0 +1,655 @@
+Index: base/system/smss/smsubsys.c
+===================================================================
+--- base/system/smss/smsubsys.c (revision 69519)
++++ base/system/smss/smsubsys.c (working copy)
+@@ -10,7 +10,7 @@
+
+ #include "smss.h"
+
+-#define NDEBUG
++//#define NDEBUG
+ #include <debug.h>
+
+ /* GLOBALS ********************************************************************/
+Index: base/system/winlogon/winlogon.c
+===================================================================
+--- base/system/winlogon/winlogon.c (revision 69519)
++++ base/system/winlogon/winlogon.c (working copy)
+@@ -397,7 +397,7 @@
+ HandleShutdown(WLSession, WLX_SAS_ACTION_SHUTDOWN_REBOOT);
+ ExitProcess(1);
+ }
+-
++ERR("WL Desktop: %x\n", WLSession->WinlogonDesktop);
+ DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop,
IDS_REACTOSISSTARTINGUP);
+
+ #if 0
+Index: cmake/baseaddress.cmake
+===================================================================
+--- cmake/baseaddress.cmake (revision 69519)
++++ cmake/baseaddress.cmake (working copy)
+@@ -2,7 +2,7 @@
+ set(baseaddress_kernel32 0x7c770000)
+ set(baseaddress_msvcrt 0x7c6c0000)
+ set(baseaddress_advapi32 0x7c610000)
+-set(baseaddress_gdi32 0x7c570000)
++set(baseaddress_gdi32 0x7c580000)
+ set(baseaddress_user32 0x7c3d0000)
+ set(baseaddress_dhcpcsvc 0x7c380000)
+ set(baseaddress_dnsapi 0x7c330000)
+Index: cmake/config.cmake
+===================================================================
+--- cmake/config.cmake (revision 69519)
++++ cmake/config.cmake (working copy)
+@@ -58,6 +58,9 @@
+ "Whether to compile support for ELF files.
+ Do not enable unless you know what you're doing.")
+
++set(_ARWINSS_ TRUE CACHE BOOL
++"Whether to build and use Wine-based Win32 subsystem.")
++
+ set(NSWPAT FALSE CACHE BOOL
+ "Whether to build apps/libs with features covered by software patents.
+ If you live in a country where software patents are valid/apply, don't
+Index: CMakeLists.txt
+===================================================================
+--- CMakeLists.txt (revision 69519)
++++ CMakeLists.txt (working copy)
+@@ -166,6 +166,10 @@
+ add_definitions(-D_WINKD_=1)
+ endif()
+
++ if(_ARWINSS_)
++ add_definitions(-D_ARWINSS_=1)
++ endif()
++
+ if(CMAKE_VERSION MATCHES "ReactOS")
+ set(PCH 1 CACHE BOOL "Whether to use precompiled headers")
+ else()
+@@ -279,6 +283,9 @@
+ add_subdirectory(subsystems)
+ add_subdirectory(tools/wpp)
+ add_subdirectory(win32ss)
++ if (_ARWINSS_)
++ add_subdirectory(arwinss)
++ endif()
+
+ # Create the registry hives
+ create_registry_hives()
+Index: dll/win32/kernel32/client/dllmain.c
+===================================================================
+--- dll/win32/kernel32/client/dllmain.c (revision 69519)
++++ dll/win32/kernel32/client/dllmain.c (working copy)
+@@ -131,7 +131,7 @@
+ SessionId,
+ WIN_OBJ_DIR);
+ }
+-
++DPRINT1("About to connect to CSR!\n");
+ /* Connect to the Base Server */
+ Status = CsrClientConnectToServer(SessionDir,
+ BASESRV_SERVERDLL_INDEX,
+Index: dll/win32/msgina/gui.c
+===================================================================
+--- dll/win32/msgina/gui.c (revision 69519)
++++ dll/win32/msgina/gui.c (working copy)
+@@ -73,6 +73,7 @@
+
+ /* When SetThreadDesktop is called the system closes the desktop handle when needed
+ so we have to create a new handle because this handle may still be in use by
winlogon */
++#ifndef _ARWINSS_
+ if (!DuplicateHandle ( GetCurrentProcess(),
+ msg->hDesktop,
+ GetCurrentProcess(),
+@@ -85,6 +86,9 @@
+ HeapFree(GetProcessHeap(), 0, lpParam);
+ return FALSE;
+ }
++#else
++ hDesk = msg->hDesktop;
++#endif
+
+ if(!SetThreadDesktop(hDesk))
+ {
+Index: include/asm/syscalls.inc
+===================================================================
+--- include/asm/syscalls.inc (revision 69519)
++++ include/asm/syscalls.inc (working copy)
+@@ -1,4 +1,4 @@
+-
++
+ #ifdef _M_ARM
+
+ #include <ksarm.h>
+@@ -52,103 +52,105 @@
+
+ SyscallId = 0
+
+-#ifdef _M_IX86
+-#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
+-#define KGDT_R0_CODE 8
+-MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
+- StackBytes = 4 * ArgCount
+- FPO 0, 0, 0, 0, 0, FRAME_FPO
+- mov eax, SyscallId
++#ifdef _M_IX86
++#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
++#define KGDT_R0_CODE 8
++MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
++ StackBytes = 4 * ArgCount
++ FPO 0, 0, 0, 0, 0, FRAME_FPO
++ mov eax, SyscallId
+ mov edx, KUSER_SHARED_SYSCALL
+ call dword ptr [edx]
+- ret StackBytes
+-ENDM
+-MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
+- StackBytes = 4 * &ArgCount
+- FPO 0, 0, 0, 0, 0, FRAME_FPO
+- mov eax, SyscallId
+- lea edx, [esp + 4]
+- pushfd
+- push KGDT_R0_CODE
+- call _KiSystemService
+- ret StackBytes
+-ENDM
+-#elif defined(_M_AMD64)
+-MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
+- .ENDPROLOG
+- mov eax, SyscallId
+- mov r10, rcx
+- syscall
+- ret
+-ENDM
+-MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
+- .ENDPROLOG
+- EXTERN Nt&Name:PROC
+- lea rax, Nt&Name[rip]
+- mov r10, ArgCount * 8
+- jmp KiZwSystemService
+-ENDM
+-#elif defined(_M_PPC)
+-MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
+- stwu 1,-16(1)
+- mflr 0
+- stw 0,0(1)
+- li 0, SyscallId
+- sc
+- lwz 0,0(1)
+- mtlr 0
+- addi 1,1,16
+- blr
+-ENDM
+-#define STUBCODE_K STUBCODE_U
+-#elif defined(_M_MIPS)
+-MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
+- li $8, KUSER_SHARED_SYSCALL
+- lw $8,0($8)
+- j $8
+- nop
+-ENDM
+-MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
+- j KiSystemService
+- nop
+-ENDM
+-#else
+-#error unsupported architecture
+-#endif
++ ret StackBytes
++ENDM
++MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
++ StackBytes = 4 * &ArgCount
++ FPO 0, 0, 0, 0, 0, FRAME_FPO
++ mov eax, SyscallId
++ lea edx, [esp + 4]
++ pushfd
++ push KGDT_R0_CODE
++ call _KiSystemService
++ ret StackBytes
++ENDM
++#elif defined(_M_AMD64)
++MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
++ .ENDPROLOG
++ mov eax, SyscallId
++ mov r10, rcx
++ syscall
++ ret
++ENDM
++MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
++ .ENDPROLOG
++ EXTERN Nt&Name:PROC
++ lea rax, Nt&Name[rip]
++ mov r10, ArgCount * 8
++ jmp KiZwSystemService
++ENDM
++#elif defined(_M_PPC)
++MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
++ stwu 1,-16(1)
++ mflr 0
++ stw 0,0(1)
++ li 0, SyscallId
++ sc
++ lwz 0,0(1)
++ mtlr 0
++ addi 1,1,16
++ blr
++ENDM
++#define STUBCODE_K STUBCODE_U
++#elif defined(_M_MIPS)
++MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
++ li $8, KUSER_SHARED_SYSCALL
++ lw $8,0($8)
++ j $8
++ nop
++ENDM
++MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
++ j KiSystemService
++ nop
++ENDM
++#else
++#error unsupported architecture
++#endif
++
++#ifdef _M_IX86
++MACRO(MAKE_LABEL, Name, StackBytes)
++ PUBLIC _&Name&@&StackBytes
++ _&Name&@&StackBytes:
++ENDM
++MACRO(START_PROC, Name, StackBytes)
++ PUBLIC _&Name&@&StackBytes
++ .PROC _&Name&@&StackBytes
++ENDM
++#else
++MACRO(MAKE_LABEL, Name, StackBytes)
++ PUBLIC &Name
++ &Name:
++ENDM
++MACRO(START_PROC, Name, StackBytes)
++ PUBLIC &Name
++ .PROC &Name
++ENDM
++#endif
++
++MACRO(STUB_U, Name, ArgCount)
++ MAKE_LABEL Zw&Name, %ArgCount * 4
++ MAKE_LABEL Name, %ArgCount * 4
++ START_PROC Nt&Name, %ArgCount * 4
++ STUBCODE_U Name, SyscallId, %ArgCount
++ .ENDP
++ SyscallId = SyscallId + 1
++ENDM
++
++MACRO(STUB_K, Name, ArgCount)
++ MAKE_LABEL Name, %ArgCount * 4
++ START_PROC Zw&Name, %ArgCount * 4
++ STUBCODE_K Name, SyscallId, %ArgCount
++ .ENDP
++ SyscallId = SyscallId + 1
++ENDM
+
+-#ifdef _M_IX86
+-MACRO(MAKE_LABEL, Name, StackBytes)
+- PUBLIC _&Name&@&StackBytes
+- _&Name&@&StackBytes:
+-ENDM
+-MACRO(START_PROC, Name, StackBytes)
+- PUBLIC _&Name&@&StackBytes
+- .PROC _&Name&@&StackBytes
+-ENDM
+-#else
+-MACRO(MAKE_LABEL, Name, StackBytes)
+- PUBLIC &Name
+- &Name:
+-ENDM
+-MACRO(START_PROC, Name, StackBytes)
+- PUBLIC &Name
+- .PROC &Name
+-ENDM
+ #endif
+-
+-MACRO(STUB_U, Name, ArgCount)
+- MAKE_LABEL Zw&Name, %ArgCount * 4
+- START_PROC Nt&Name, %ArgCount * 4
+- STUBCODE_U Name, SyscallId, %ArgCount
+- .ENDP
+- SyscallId = SyscallId + 1
+-ENDM
+-
+-MACRO(STUB_K, Name, ArgCount)
+- START_PROC Zw&Name, %ArgCount * 4
+- STUBCODE_K Name, SyscallId, %ArgCount
+- .ENDP
+- SyscallId = SyscallId + 1
+-ENDM
+-
+-#endif
+Index: include/psdk/winddi.h
+===================================================================
+--- include/psdk/winddi.h (revision 69519)
++++ include/psdk/winddi.h (working copy)
+@@ -2911,7 +2911,7 @@
+ _In_ ULONG cjSize,
+ _Out_bytecap_(cjSize) FONTINFO *pfi);
+
+-#if (NTDDI_VERSION <= NTDDI_WINXP)
++#if 0//(NTDDI_VERSION <= NTDDI_WINXP)
+ /* Obsolete in Windows 2000 and later */
+ GAMMA_TABLES*
+ APIENTRY
+Index: include/reactos/wine/config.h
+===================================================================
+--- include/reactos/wine/config.h (revision 69519)
++++ include/reactos/wine/config.h (working copy)
+@@ -1,3 +1,5 @@
++#include "reactos/buildno.h"
++
+ #define __WINE_CONFIG_H
+
+ /* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+Index: lib/3rdparty/CMakeLists.txt
+===================================================================
+--- lib/3rdparty/CMakeLists.txt (revision 69519)
++++ lib/3rdparty/CMakeLists.txt (working copy)
+@@ -2,7 +2,9 @@
+ add_subdirectory(adns)
+ add_subdirectory(bzip2)
+ add_subdirectory(cardlib)
++if (NOT _ARWINSS_)
+ add_subdirectory(freetype)
++endif ()
+ add_subdirectory(fullfat)
+ add_subdirectory(libmpg123)
+ add_subdirectory(libsamplerate)
+Index: subsystems/win32/csrsrv/init.c
+===================================================================
+--- subsystems/win32/csrsrv/init.c (revision 69519)
++++ subsystems/win32/csrsrv/init.c (working copy)
+@@ -20,7 +20,7 @@
+ /* DATA ***********************************************************************/
+
+ // Debug Flag
+-ULONG CsrDebug = 0; // 0xFFFFFFFF;
++ULONG CsrDebug = 0xFFFFFFFF;
+
+ HANDLE CsrHeap = NULL;
+ HANDLE CsrObjectDirectory = NULL;
+Index: win32ss/CMakeLists.txt
+===================================================================
+--- win32ss/CMakeLists.txt (revision 69519)
++++ win32ss/CMakeLists.txt (working copy)
+@@ -10,7 +10,10 @@
+ PROJECT(WIN32SS)
+
+ add_subdirectory(drivers)
++add_subdirectory(user/winsrv)
+
++if (NOT _ARWINSS_)
++
+ if(USE_DIBLIB)
+ add_subdirectory(gdi/diblib)
+ endif()
+@@ -18,7 +21,6 @@
+ add_subdirectory(gdi/gdi32)
+ add_subdirectory(reactx)
+ add_subdirectory(user/user32)
+-add_subdirectory(user/winsrv)
+
+ spec2def(win32k.sys win32k.spec ADD_IMPORTLIB)
+
+@@ -243,3 +245,4 @@
+ add_asm_files(win32ksys_asm sys-stubs.S)
+ add_library(win32ksys ${win32ksys_asm})
+ set_target_properties(win32ksys PROPERTIES LINKER_LANGUAGE "C")
++endif() # _ARWINSS_
+\ No newline at end of file
+Index: win32ss/drivers/CMakeLists.txt
+===================================================================
+--- win32ss/drivers/CMakeLists.txt (revision 69519)
++++ win32ss/drivers/CMakeLists.txt (working copy)
+@@ -1,6 +1,8 @@
+
+ add_subdirectory(displays)
++if (NOT _ARWINSS_)
+ add_subdirectory(font)
++endif ()
+ add_subdirectory(miniport)
+ add_subdirectory(videoprt)
+ add_subdirectory(watchdog)
+Index: win32ss/include/ntgdihdl.h
+===================================================================
+--- win32ss/include/ntgdihdl.h (revision 69519)
++++ win32ss/include/ntgdihdl.h (working copy)
+@@ -260,6 +260,7 @@
+ DWORD dwCFCount;
+ } GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE;
+
++#ifndef _ARWINSS_
+ typedef struct _RGN_ATTR
+ {
+ ULONG AttrFlags;
+@@ -347,6 +348,19 @@
+ RGN_ATTR VisRectRegion;
+ } DC_ATTR, *PDC_ATTR;
+
++#else
++
++typedef struct _DC_ATTR
++{
++ HDC hdc;
++ HDC hKernelDC;
++ RECT dc_rect; /* DC rectangle relative to drawable */
++ HRGN region; /* Device region (visible region & clip region) */
++ int cache_index; /* cache of a currently selected font */
++} DC_ATTR, *PDC_ATTR;
++
++#endif
++
+ typedef struct _BRUSH_ATTR /* Used with pen too. */
+ {
+ FLONG AttrFlags;
+Index: win32ss/user/winsrv/consrv/conoutput.c
+===================================================================
+--- win32ss/user/winsrv/consrv/conoutput.c (revision 69519)
++++ win32ss/user/winsrv/consrv/conoutput.c (working copy)
+@@ -99,9 +99,13 @@
+ * Indeed, the palette handle comes from a console app
+ * calling ourselves, running in CSRSS.
+ */
++#ifndef _ARWINSS_
+ NtUserConsoleControl(ConsoleMakePalettePublic,
+ &SetPaletteRequest->PaletteHandle,
+ sizeof(SetPaletteRequest->PaletteHandle));
++#else
++ UNIMPLEMENTED;
++#endif
+
+ Status = ConDrvSetConsolePalette(Buffer->Header.Console,
+ Buffer,
+Index: win32ss/user/winsrv/consrv/frontends/gui/conwnd.c
+===================================================================
+--- win32ss/user/winsrv/consrv/frontends/gui/conwnd.c (revision 69519)
++++ win32ss/user/winsrv/consrv/frontends/gui/conwnd.c (working copy)
+@@ -159,7 +159,11 @@
+ }
+ else
+ {
++#ifndef _ARWINSS_
+ NtUserConsoleControl(GuiConsoleWndClassAtom, &WndClassAtom, sizeof(ATOM));
++#else
++ UNIMPLEMENTED;
++#endif
+ }
+
+ return (WndClassAtom != 0);
+Index: win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
+===================================================================
+--- win32ss/user/winsrv/consrv/frontends/gui/guiterm.c (revision 69519)
++++ win32ss/user/winsrv/consrv/frontends/gui/guiterm.c (working copy)
+@@ -160,9 +160,14 @@
+ /* Assign this console input thread to this desktop */
+ DesktopConsoleThreadInfo.DesktopHandle = GuiInitInfo->Desktop; // Duplicated
desktop handle
+ DesktopConsoleThreadInfo.ThreadId = InputThreadId;
++#ifndef _ARWINSS_
+ Status = NtUserConsoleControl(ConsoleCtrlDesktopConsoleThread,
+ &DesktopConsoleThreadInfo,
+ sizeof(DesktopConsoleThreadInfo));
++#else
++ UNIMPLEMENTED;
++ Status = STATUS_UNSUCCESSFUL;
++#endif
+ if (!NT_SUCCESS(Status)) goto Quit;
+
+ /* Connect this CSR thread to the USER subsystem */
+@@ -295,13 +300,17 @@
+
+ Quit:
+ DPRINT("CONSRV: Quit the Input Thread 0x%p, Status = 0x%08lx\n",
InputThreadId, Status);
+-
++
+ /* Remove this console input thread from this desktop */
+ // DesktopConsoleThreadInfo.DesktopHandle;
+ DesktopConsoleThreadInfo.ThreadId = 0;
++#ifndef _ARWINSS_
+ NtUserConsoleControl(ConsoleCtrlDesktopConsoleThread,
+ &DesktopConsoleThreadInfo,
+ sizeof(DesktopConsoleThreadInfo));
++#else
++ UNIMPLEMENTED
++#endif
+
+ /* Close the duplicated desktop handle */
+ CloseDesktop(DesktopConsoleThreadInfo.DesktopHandle); // NtUserCloseDesktop
+@@ -358,11 +367,16 @@
+ {
+ RtlInitUnicodeString(&DesktopPath, L"Default");
+ }
+-
++#ifndef _ARWINSS_
+ hDesk = NtUserResolveDesktop(ConsoleLeaderProcessHandle,
+ &DesktopPath,
+ 0,
+ &hWinSta);
++#else
++ UNIMPLEMENTED
++ hDesk = NULL;
++#endif
++
+ DPRINT("NtUserResolveDesktop(DesktopPath = '%wZ') returned hDesk =
0x%p; hWinSta = 0x%p\n",
+ &DesktopPath, hDesk, hWinSta);
+
+Index: win32ss/user/winsrv/usersrv/init.c
+===================================================================
+--- win32ss/user/winsrv/usersrv/init.c (revision 69519)
++++ win32ss/user/winsrv/usersrv/init.c (working copy)
+@@ -101,7 +101,20 @@
+ NTAPI
+ CreateSystemThreads(PVOID pParam)
+ {
++#ifndef _ARWINSS_
+ NtUserCallOneParam((DWORD)pParam, ONEPARAM_ROUTINE_CREATESYSTEMTHREADS);
++#else
++ DWORD WaitRes;
++ HANDLE hDummyEvent;
++
++ hDummyEvent = CreateEventW(0, FALSE, FALSE, L"");
++
++ while (TRUE)
++ {
++ WaitRes = WaitForSingleObject(hDummyEvent, INFINITE);
++ }
++ DPRINT1("WaitRes: 0x%x\n", WaitRes);
++#endif
+ DPRINT1("This thread should not terminate!\n");
+ return 0;
+ }
+@@ -173,6 +186,7 @@
+ CsrApiPort = CsrQueryApiPort();
+
+ /* Inform win32k about the API port */
++#ifndef _ARWINSS_
+ Status = NtUserSetInformationThread(NtCurrentThread(),
+ UserThreadCsrApiPort,
+ &CsrApiPort,
+@@ -181,6 +195,9 @@
+ {
+ return Status;
+ }
++#else
++ UNIMPLEMENTED
++#endif
+ }
+
+ /* Check connection info validity */
+@@ -199,9 +216,14 @@
+
+ /* Pass the request to win32k */
+ ConnectInfo->dwDispatchCount = 0; // gDispatchTableValues;
++#ifndef _ARWINSS_
+ Status = NtUserProcessConnect(CsrProcess->ProcessHandle,
+ ConnectInfo,
+ *ConnectionInfoLength);
++#else
++ Status = STATUS_SUCCESS;
++ UNIMPLEMENTED
++#endif
+
+ return Status;
+ }
+@@ -254,7 +276,11 @@
+ }
+
+ /* Set the process creation notify routine for BASE */
++#ifndef _ARWINSS_
+ BaseSetProcessCreateNotify(NtUserNotifyProcessCreate);
++#else
++ UNIMPLEMENTED
++#endif
+
+ /* Initialize the kernel mode subsystem */
+ Status = NtUserInitialize(USER_VERSION,
+Index: win32ss/user/winsrv/usersrv/shutdown.c
+===================================================================
+--- win32ss/user/winsrv/usersrv/shutdown.c (revision 69519)
++++ win32ss/user/winsrv/usersrv/shutdown.c (working copy)
+@@ -381,7 +381,12 @@
+ static BOOLEAN
+ IsConsoleMode(VOID)
+ {
++#ifndef _ARWINSS_
+ return (BOOLEAN)NtUserCallNoParam(NOPARAM_ROUTINE_ISCONSOLEMODE);
++#else
++ UNIMPLEMENTED
++ return FALSE;
++#endif
+ }
+
+
+@@ -678,9 +683,14 @@
+ while (TRUE)
+ {
+ /* Notify Win32k and potentially Winlogon of the shutdown */
++#ifndef _ARWINSS_
+ Status = NtUserSetInformationThread(CsrThread->ThreadHandle,
+ UserThreadInitiateShutdown,
+ &Flags, sizeof(Flags));
++#else
++ Status = STATUS_SUCCESS;
++ UNIMPLEMENTED
++#endif
+ DPRINT1("Win32k says: %lx\n", Status);
+ switch (Status)
+ {
+@@ -736,9 +746,13 @@
+ // FIXME: If Status == STATUS_CANCELLED, call RecordShutdownReason
+
+ /* Tell Win32k and potentially Winlogon that we're done */
++#ifndef _ARWINSS_
+ NtUserSetInformationThread(CsrThread->ThreadHandle,
+ UserThreadEndShutdown,
+ &Status, sizeof(Status));
++#else
++ UNIMPLEMENTED
++#endif
+
+ DPRINT1("SrvExitWindowsEx returned 0x%08x\n", Status);
+
Propchange: branches/arwinss/arwinss/trunk.patch
------------------------------------------------------------------------------
svn:eol-style = native