Author: fireball Date: Sat Jul 18 11:34:22 2009 New Revision: 42030
URL: http://svn.reactos.org/svn/reactos?rev=42030&view=rev Log: - Add basic Win32k infrastructure: W32PROCESS and W32THREAD, global user heap.
Added: branches/arwinss/reactos/subsystems/win32/win32k/gre/err.c (with props) branches/arwinss/reactos/subsystems/win32/win32k/gre/usrheap.c (with props) branches/arwinss/reactos/subsystems/win32/win32k/include/error.h (with props) branches/arwinss/reactos/subsystems/win32/win32k/include/heap.h (with props) branches/arwinss/reactos/subsystems/win32/win32k/include/win32.h (with props) branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h (with props) branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c (with props) Modified: branches/arwinss/reactos/subsystems/win32/win32k/gre/init.c branches/arwinss/reactos/subsystems/win32/win32k/include/win32k.h branches/arwinss/reactos/subsystems/win32/win32k/include/win32kp.h branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild
Added: branches/arwinss/reactos/subsystems/win32/win32k/gre/err.c URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/gre/err.c (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/gre/err.c [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,82 @@ +/* + * ReactOS W32 Subsystem + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* $Id: err.c 37752 2008-11-29 22:48:58Z sginsberg $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Errors + * FILE: subsys/win32k/misc/error.c + * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISION HISTORY: + * 06-06-2001 CSH Created + */ + +#include <win32k.h> + +#define NDEBUG +#include <debug.h> + +VOID FASTCALL +SetLastNtError(NTSTATUS Status) +{ + SetLastWin32Error(RtlNtStatusToDosError(Status)); +} + +VOID FASTCALL +SetLastWin32Error(DWORD Status) +{ + PTEB Teb = PsGetCurrentThread()->Tcb.Teb; + + if (NULL != Teb) + { + Teb->LastErrorValue = Status; + } +} + +NTSTATUS FASTCALL +GetLastNtError() +{ + PTEB Teb = PsGetCurrentThread()->Tcb.Teb; + + if ( NULL != Teb ) + { + return Teb->LastStatusValue; + } + return 0; +} + +VOID +APIENTRY +W32kRaiseStatus(NTSTATUS Status) +{ + EXCEPTION_RECORD ExceptionRecord; + + /* Create an exception record */ + ExceptionRecord.ExceptionCode = Status; + ExceptionRecord.ExceptionRecord = NULL; + ExceptionRecord.NumberParameters = 0; + ExceptionRecord.ExceptionFlags = EXCEPTION_NONCONTINUABLE; + + RtlRaiseException(&ExceptionRecord); + + /* If we returned, raise a status */ + W32kRaiseStatus(Status); +} + +/* EOF */
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/gre/err.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/arwinss/reactos/subsystems/win32/win32k/gre/init.c URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/gre/init.c [iso-8859-1] (original) +++ branches/arwinss/reactos/subsystems/win32/win32k/gre/init.c [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -13,8 +13,13 @@ /* System service call table */ #include <include/napi.h>
-#define NDEBUG +//#define NDEBUG #include <debug.h> + +/* GLOBALS *******************************************************************/ + +HANDLE GlobalUserHeap = NULL; +PSECTION_OBJECT GlobalUserHeapSection = NULL;
/* PRIVATE FUNCTIONS *********************************************************/
@@ -23,7 +28,84 @@ Win32kProcessCallout(PEPROCESS Process, BOOLEAN Create) { - UNIMPLEMENTED; + PW32PROCESS Win32Process; + + DPRINT("Enter Win32kProcessCallback\n"); + + /* Get the Win32 Process */ + Win32Process = PsGetProcessWin32Process(Process); + + /* Allocate one if needed */ + if (!Win32Process) + { + /* FIXME - lock the process */ + Win32Process = ExAllocatePoolWithTag(NonPagedPool, + sizeof(PROCESSINFO), + TAG('W', '3', '2', 'p')); + + if (!Win32Process) + return STATUS_NO_MEMORY; + + RtlZeroMemory(Win32Process, sizeof(PROCESSINFO)); + + PsSetProcessWin32Process(Process, Win32Process); + /* FIXME - unlock the process */ + } + + if (Create) + { + SIZE_T ViewSize = 0; + LARGE_INTEGER Offset; + PVOID UserBase = NULL; + NTSTATUS Status; + extern PSECTION_OBJECT GlobalUserHeapSection; + DPRINT("Creating W32 process PID:%d at IRQ level: %lu\n", Process->UniqueProcessId, KeGetCurrentIrql()); + + /* map the global heap into the process */ + Offset.QuadPart = 0; + Status = MmMapViewOfSection(GlobalUserHeapSection, + PsGetCurrentProcess(), + &UserBase, + 0, + 0, + &Offset, + &ViewSize, + ViewUnmap, + SEC_NO_CHANGE, + PAGE_EXECUTE_READ); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to map the global heap! 0x%x\n", Status); + return Status; + } + Win32Process->HeapMappings.Next = NULL; + Win32Process->HeapMappings.KernelMapping = (PVOID)GlobalUserHeap; + Win32Process->HeapMappings.UserMapping = UserBase; + Win32Process->HeapMappings.Count = 1; + + InitializeListHead(&Win32Process->ClassList); + InitializeListHead(&Win32Process->MenuListHead); + InitializeListHead(&Win32Process->PrivateFontListHead); + ExInitializeFastMutex(&Win32Process->PrivateFontListLock); + InitializeListHead(&Win32Process->DriverObjListHead); + ExInitializeFastMutex(&Win32Process->DriverObjListLock); + + if(Process->Peb != NULL) + { + /* map the gdi handle table to user land */ + //Process->Peb->GdiSharedHandleTable = GDI_MapHandleTable(GdiTableSection, Process); + //Process->Peb->GdiDCAttributeList = GDI_BATCH_LIMIT; + } + + /* setup process flags */ + Win32Process->W32PF_flags = 0; + } + else + { + DPRINT("Destroying W32 process PID:%d at IRQ level: %lu\n", Process->UniqueProcessId, KeGetCurrentIrql()); + } + + DPRINT("Leave Win32kProcessCallback\n"); return STATUS_SUCCESS; }
@@ -164,6 +246,7 @@ PUNICODE_STRING RegistryPath) { WIN32_CALLOUTS_FPNS CalloutData; + PVOID GlobalUserHeapBase = NULL;
DPRINT1("Win32k initialization: DO %p, RegPath %wZ\n", DriverObject, RegistryPath); @@ -201,5 +284,15 @@ /* Register them */ PsEstablishWin32Callouts(&CalloutData);
- return STATUS_SUCCESS; -} + /* Create global heap */ + GlobalUserHeap = UserCreateHeap(&GlobalUserHeapSection, + &GlobalUserHeapBase, + 1 * 1024 * 1024); /* FIXME - 1 MB for now... */ + if (GlobalUserHeap == NULL) + { + DPRINT1("Failed to initialize the global heap!\n"); + return STATUS_UNSUCCESSFUL; + } + + return STATUS_SUCCESS; +}
Added: branches/arwinss/reactos/subsystems/win32/win32k/gre/usrheap.c URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/gre/usrheap.c (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/gre/usrheap.c [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,216 @@ +/* + * ReactOS W32 Subsystem + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <win32k.h> + +#define NDEBUG +#include <debug.h> + + +static NTSTATUS APIENTRY +IntUserHeapCommitRoutine(IN PVOID Base, + IN OUT PVOID *CommitAddress, + IN OUT PSIZE_T CommitSize) +{ + PW32PROCESS W32Process; + PW32HEAP_USER_MAPPING Mapping; + PVOID UserBase = NULL; + NTSTATUS Status; + SIZE_T Delta = (SIZE_T)((ULONG_PTR)(*CommitAddress) - (ULONG_PTR)Base); + + W32Process = PsGetCurrentProcessWin32Process(); + + if (W32Process != NULL) + { + /* search for the mapping */ + Mapping = &W32Process->HeapMappings; + while (Mapping != NULL) + { + if (Mapping->KernelMapping == Base) + { + UserBase = Mapping->UserMapping; + break; + } + + Mapping = Mapping->Next; + } + + ASSERT(UserBase != NULL); + } + else + { + SIZE_T ViewSize = 0; + LARGE_INTEGER Offset; + extern PSECTION_OBJECT GlobalUserHeapSection; + + /* HACK: This needs to be handled during startup only... */ + ASSERT(Base == (PVOID)GlobalUserHeap); + + /* temporarily map it into user space */ + Offset.QuadPart = 0; + Status = MmMapViewOfSection(GlobalUserHeapSection, + PsGetCurrentProcess(), + &UserBase, + 0, + 0, + &Offset, + &ViewSize, + ViewUnmap, + SEC_NO_CHANGE, + PAGE_EXECUTE_READ); /* would prefer PAGE_READONLY, but thanks to RTL heaps... */ + + if (!NT_SUCCESS(Status)) + return Status; + } + + /* commit! */ + UserBase = (PVOID)((ULONG_PTR)UserBase + Delta); + + Status = ZwAllocateVirtualMemory(NtCurrentProcess(), + &UserBase, + 0, + CommitSize, + MEM_COMMIT, + PAGE_EXECUTE_READ); + if (NT_SUCCESS(Status)) + { + *CommitAddress = (PVOID)((ULONG_PTR)UserBase + Delta); + } + + if (W32Process == NULL) + { + MmUnmapViewOfSection(PsGetCurrentProcess(), + UserBase); + } + + return Status; +} + +static PWIN32HEAP +IntUserHeapCreate(IN PSECTION_OBJECT SectionObject, + IN PVOID *SystemMappedBase, + IN ULONG HeapSize) +{ + PVOID MappedView = NULL; + LARGE_INTEGER Offset; + SIZE_T ViewSize = PAGE_SIZE; + RTL_HEAP_PARAMETERS Parameters = {0}; + PVOID pHeap; + NTSTATUS Status; + + Offset.QuadPart = 0; + + /* Commit the first page before creating the heap! */ + Status = MmMapViewOfSection(SectionObject, + PsGetCurrentProcess(), + &MappedView, + 0, + 0, + &Offset, + &ViewSize, + ViewUnmap, + SEC_NO_CHANGE, + PAGE_EXECUTE_READ); /* would prefer PAGE_READONLY, but thanks to RTL heaps... */ + if (!NT_SUCCESS(Status)) + return NULL; + + Status = ZwAllocateVirtualMemory(NtCurrentProcess(), + &MappedView, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_EXECUTE_READ); /* would prefer PAGE_READONLY, but thanks to RTL heaps... */ + + MmUnmapViewOfSection(PsGetCurrentProcess(), + MappedView); + + if (!NT_SUCCESS(Status)) + return NULL; + + /* Create the heap, don't serialize in kmode! The caller is responsible + to synchronize the heap! */ + Parameters.Length = sizeof(Parameters); + Parameters.InitialCommit = ViewSize; + Parameters.InitialReserve = (SIZE_T)HeapSize; + Parameters.CommitRoutine = IntUserHeapCommitRoutine; + + pHeap = RtlCreateHeap(HEAP_ZERO_MEMORY | HEAP_NO_SERIALIZE, + *SystemMappedBase, + (SIZE_T)HeapSize, + ViewSize, + NULL, + &Parameters); + + return pHeap; +} + +PWIN32HEAP +UserCreateHeap(OUT PSECTION_OBJECT *SectionObject, + IN OUT PVOID *SystemBase, + IN SIZE_T HeapSize) +{ + LARGE_INTEGER SizeHeap; + PWIN32HEAP pHeap = NULL; + NTSTATUS Status; + + SizeHeap.QuadPart = HeapSize; + + /* create the section and map it into session space */ + Status = MmCreateSection((PVOID*)SectionObject, + SECTION_ALL_ACCESS, + NULL, + &SizeHeap, + PAGE_EXECUTE_READWRITE, /* would prefer PAGE_READWRITE, but thanks to RTL heaps... */ + SEC_RESERVE, + NULL, + NULL); + + if (!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + return FALSE; + } + + Status = MmMapViewInSystemSpace(*SectionObject, + SystemBase, + &HeapSize); + if (!NT_SUCCESS(Status)) + { + ObDereferenceObject(*SectionObject); + *SectionObject = NULL; + + SetLastNtError(Status); + return FALSE; + } + + /* create the heap */ + pHeap = IntUserHeapCreate(*SectionObject, + SystemBase, + HeapSize); + + if (pHeap == NULL) + { + ObDereferenceObject(*SectionObject); + *SectionObject = NULL; + + SetLastNtError(STATUS_UNSUCCESSFUL); + } + + return pHeap; +}
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/gre/usrheap.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/arwinss/reactos/subsystems/win32/win32k/include/error.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/error.h (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/error.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,17 @@ +#ifndef _WIN32K_ERROR_H +#define _WIN32K_ERROR_H + +VOID FASTCALL +SetLastNtError( + NTSTATUS Status); + +VOID FASTCALL +SetLastWin32Error( + DWORD Status); + +NTSTATUS FASTCALL +GetLastNtError(); + +#endif /* _WIN32K_ERROR_H */ + +/* EOF */
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/include/error.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/arwinss/reactos/subsystems/win32/win32k/include/heap.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/heap.h (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/heap.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,85 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Win32K + * FILE: subsystems/win32/win32k/include/heap.h + * PURPOSE: Global user heap + * PROGRAMMER: Aleksey Bragin aleksey@reactos.org + */ + +#ifndef _INCLUDE_GLOBAL_HEAP_H +#define _INCLUDE_GLOBAL_HEAP_H + +extern HANDLE GlobalUserHeap; + +PWIN32HEAP +UserCreateHeap(OUT PSECTION_OBJECT *SectionObject, + IN OUT PVOID *SystemBase, + IN SIZE_T HeapSize); + +static __inline PVOID +UserHeapAlloc(SIZE_T Bytes) +{ + return RtlAllocateHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + Bytes); +} + +static __inline BOOL +UserHeapFree(PVOID lpMem) +{ + return RtlFreeHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + lpMem); +} + +static __inline PVOID +UserHeapReAlloc(PVOID lpMem, + SIZE_T Bytes) +{ +#if 0 + /* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */ + return RtlReAllocateHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + lpMem, + Bytes); +#else + SIZE_T PrevSize; + PVOID pNew; + + PrevSize = RtlSizeHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + lpMem); + + if (PrevSize == Bytes) + return lpMem; + + pNew = RtlAllocateHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + Bytes); + if (pNew != NULL) + { + if (PrevSize < Bytes) + Bytes = PrevSize; + + RtlCopyMemory(pNew, + lpMem, + Bytes); + + RtlFreeHeap(GlobalUserHeap, + HEAP_NO_SERIALIZE, + lpMem); + } + + return pNew; +#endif +} + +static __inline PVOID +UserHeapAddressToUser(PVOID lpMem) +{ + PW32PROCESS W32Process = PsGetCurrentProcessWin32Process(); + return (PVOID)(((ULONG_PTR)lpMem - (ULONG_PTR)GlobalUserHeap) + + (ULONG_PTR)W32Process->HeapMappings.UserMapping); +} + +#endif
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/include/heap.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/arwinss/reactos/subsystems/win32/win32k/include/win32.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/win32.h (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/win32.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,109 @@ +#ifndef __INCLUDE_NAPI_WIN32_H +#define __INCLUDE_NAPI_WIN32_H + +typedef struct _WIN32HEAP WIN32HEAP, *PWIN32HEAP; + +#include <pshpack1.h> +// FIXME! Move to ntuser.h +typedef struct _TL +{ + struct _TL* next; + PVOID pobj; + PVOID pfnFree; +} TL, *PTL; + +typedef struct _W32THREAD +{ + PETHREAD pEThread; + ULONG RefCount; + PTL ptlW32; + PVOID pgdiDcattr; + PVOID pgdiBrushAttr; + PVOID pUMPDObjs; + PVOID pUMPDHeap; + DWORD dwEngAcquireCount; + PVOID pSemTable; + PVOID pUMPDObj; +} W32THREAD, *PW32THREAD; + +typedef struct _THREADINFO +{ + W32THREAD W32Thread; + PTL ptl; + PVOID ppi; // FIXME: use PPROCESSINFO + struct _USER_MESSAGE_QUEUE* MessageQueue; + struct _KBL* KeyboardLayout; + PCLIENTTHREADINFO pcti; + struct _DESKTOP* Desktop; + //PDESKTOPINFO pDeskInfo; + //PCLIENTINFO pClientInfo; + FLONG TIF_flags; + LONG timeLast; + HANDLE hDesktop; + UINT cPaintsReady; /* Count of paints pending. */ + UINT cTimersReady; /* Count of timers pending. */ + ULONG fsHooks; + LIST_ENTRY PtiLink; + + CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL. + + LIST_ENTRY WindowListHead; + LIST_ENTRY W32CallbackListHead; + BOOLEAN IsExiting; + SINGLE_LIST_ENTRY ReferencesList; + PW32THREADINFO ThreadInfo; +} THREADINFO, *PTHREADINFO; + +#include <poppack.h> + +typedef struct _W32HEAP_USER_MAPPING +{ + struct _W32HEAP_USER_MAPPING *Next; + PVOID KernelMapping; + PVOID UserMapping; + ULONG_PTR Limit; + ULONG Count; +} W32HEAP_USER_MAPPING, *PW32HEAP_USER_MAPPING; + +typedef struct _W32PROCESS +{ + PEPROCESS peProcess; + DWORD RefCount; + ULONG W32PF_flags; + PKEVENT InputIdleEvent; + DWORD StartCursorHideTime; + DWORD NextStart; + PVOID pDCAttrList; + PVOID pBrushAttrList; + DWORD W32Pid; + LONG GDIHandleCount; + LONG UserHandleCount; + DWORD cSimpleLock; /* Locking Process during access to structure. */ + RTL_AVL_TABLE rtlAvlTable; /* Process AVL Table. */ + LIST_ENTRY leDCAttrList; + LIST_ENTRY leObjAttrList; +/* ReactOS */ + LIST_ENTRY ClassList; + LIST_ENTRY MenuListHead; + FAST_MUTEX PrivateFontListLock; + LIST_ENTRY PrivateFontListHead; + FAST_MUTEX DriverObjListLock; + LIST_ENTRY DriverObjListHead; + struct _KBL* KeyboardLayout; + W32HEAP_USER_MAPPING HeapMappings; +} W32PROCESS, *PW32PROCESS; + +typedef struct _PROCESSINFO +{ + W32PROCESS XzyxW32Process; /* Place holder. */ + /* ReactOS */ + HINSTANCE hModUser; + PWINDOWCLASS LocalClassList; + PWINDOWCLASS GlobalClassList; + PWINDOWCLASS SystemClassList; + + UINT RegisteredSysClasses : 1; + +} PROCESSINFO; + +#endif /* __INCLUDE_NAPI_WIN32_H */
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/include/win32.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/win32k.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/win32k.h [iso-8859-1] (original) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/win32k.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -11,9 +11,9 @@ /* Version Data */ #undef __MSVCRT__ #include <psdk/ntverp.h> -//#define _WIN32_WINNT _WIN32_WINNT_WS03 +#define _WIN32_WINNT _WIN32_WINNT_WS03 #define NTDDI_VERSION NTDDI_WS03SP1 -//#define WINVER 0x600 +#define WINVER 0x600
/* Initial DDK/IFS Headers */ #ifdef _MSC_VER @@ -54,21 +54,21 @@ #include <ntndk.h>
/* SEH Support with PSEH */ -#include <pseh/pseh2.h> +#include <pseh/pseh.h>
/* CSRSS Header */ #include <csrss/csrss.h>
/* Helper Header */ -//#include <reactos/helper.h> +#include <reactos/helper.h>
/* Probe and capture */ -//#include <reactos/probe.h> +#include <reactos/probe.h>
/* Public Win32K Headers */ #include <win32k/callback.h> #include <win32k/ntusrtyp.h> -//#include <win32k/ntuser.h> +#include <win32k/ntuser.h> #include <win32k/ntgdityp.h> #include <win32k/ntgdihdl.h> #define LANGPACK
Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/win32kp.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/win32kp.h [iso-8859-1] (original) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/win32kp.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -3,7 +3,7 @@ * PROJECT: ReactOS Win32K * FILE: subsystems/win32/win32k/include/win32kp.h * PURPOSE: Internal Win32K Header - * PROGRAMMER: Stefan Ginsberg (stefan__100__@hotmail.com) + * PROGRAMMER: Aleksey Bragin aleksey@reactos.org */
#ifndef _INCLUDE_INTERNAL_WIN32K_H @@ -15,10 +15,12 @@ W32KAPI UINT APIENTRY wine_server_call(void *req_ptr);
/* Internal Win32K Headers */ +#include <error.h> #include <wine/server_protocol.h> -//#include <gdiobj.h> -//#include <engobj.h> -//#include <userobj.h> +#include <win32.h> +#include <heap.h> + +#include "winesup.h"
/* client communication functions (from server.h) */ struct __server_iovec @@ -41,5 +43,4 @@ struct __server_iovec data[__SERVER_MAX_DATA]; /* request variable size data */ };
- #endif
Added: branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,66 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Win32K + * FILE: subsystems/win32/win32k/include/winesup.h + * PURPOSE: Wine supporting functions + * PROGRAMMER: Aleksey Bragin aleksey@reactos.org + */ + +#ifndef _INCLUDE_INTERNAL_WINESUP_H +#define _INCLUDE_INTERNAL_WINESUP_H + +/* INCLUDES ******************************************************************/ + +#define assert ASSERT +#define tolowerW(n) towlower((n)) +#define strncmpiW(s1,s2,n) _wcsnicmp((const wchar_t *)(s1),(const wchar_t *)(s2),(n)) + +void set_error( unsigned int err ); +static inline void clear_error(void) { set_error(0); } + +/* gets the discretionary access control list from a security descriptor */ +static inline const ACL *sd_get_dacl( const struct security_descriptor *sd, int *present ) +{ + *present = (sd->control & SE_DACL_PRESENT ? TRUE : FALSE); + + if (sd->dacl_len) + return (const ACL *)((const char *)(sd + 1) + + sd->owner_len + sd->group_len + sd->sacl_len); + else + return NULL; +} + +/* gets the system access control list from a security descriptor */ +static inline const ACL *sd_get_sacl( const struct security_descriptor *sd, int *present ) +{ + *present = (sd->control & SE_SACL_PRESENT ? TRUE : FALSE); + + if (sd->sacl_len) + return (const ACL *)((const char *)(sd + 1) + + sd->owner_len + sd->group_len); + else + return NULL; +} + +/* gets the owner from a security descriptor */ +static inline const SID *sd_get_owner( const struct security_descriptor *sd ) +{ + if (sd->owner_len) + return (const SID *)(sd + 1); + else + return NULL; +} + +/* gets the primary group from a security descriptor */ +static inline const SID *sd_get_group( const struct security_descriptor *sd ) +{ + if (sd->group_len) + return (const SID *)((const char *)(sd + 1) + sd->owner_len); + else + return NULL; +} + +int dump_strW( const WCHAR *str, data_size_t len, FILE *f, const char escape[2] ); +const SID *token_get_user( void *token ); + +#endif
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild [iso-8859-1] (original) +++ branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -17,11 +17,16 @@ <pch>win32k.h</pch> </directory> <directory name="gre"> + <file>err.c</file> <file>init.c</file> + <file>usrheap.c</file> </directory> <directory name="wine"> + <file>class.c</file> <file>main.c</file> + <file>object.c</file> <file>stubs.c</file> + <file>winesup.c</file> </directory> <file>win32k.rc</file> </module>
Added: branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32... ============================================================================== --- branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c (added) +++ branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c [iso-8859-1] Sat Jul 18 11:34:22 2009 @@ -1,0 +1,27 @@ +/* + * PROJECT: ReactOS Win32K + * LICENSE: GPL - See COPYING in the top level directory + * FILE: subsystems/win32/win32k/wine/winesup.c + * PURPOSE: Wine supporting functions + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES ******************************************************************/ + +#include <win32k.h> + +#define NDEBUG +#include <debug.h> + +/* PRIVATE FUNCTIONS *********************************************************/ + +void set_error( unsigned int err ) +{ +} + +const SID *token_get_user( void *token ) +{ + return NULL; +} + +/* EOF */
Propchange: branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c ------------------------------------------------------------------------------ svn:eol-style = native