From fc5a89cd69967c155836b9276d0742b964d298a6 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 27 Dec 2009 19:10:30 +0000 Subject: [PATCH 1/5] Move the client-side LSA functions from secur32.dll to the new static library lsalib because these functions will be shared between ntoskrnl.exe, advapi32.dll and secur32.dll. svn path=/trunk/; revision=44774 --- reactos/dll/win32/secur32/secur32.rbuild | 2 +- reactos/lib/lib.rbuild | 3 +++ reactos/{dll/win32/secur32 => lib/lsalib}/lsa.c | 13 +++++++------ reactos/lib/lsalib/lsalib.rbuild | 7 +++++++ 4 files changed, 18 insertions(+), 7 deletions(-) rename reactos/{dll/win32/secur32 => lib/lsalib}/lsa.c (98%) create mode 100644 reactos/lib/lsalib/lsalib.rbuild diff --git a/reactos/dll/win32/secur32/secur32.rbuild b/reactos/dll/win32/secur32/secur32.rbuild index 30002e14496..d75e9266efb 100644 --- a/reactos/dll/win32/secur32/secur32.rbuild +++ b/reactos/dll/win32/secur32/secur32.rbuild @@ -3,10 +3,10 @@ . include/reactos/subsys + lsalib ntdll advapi32 dllmain.c - lsa.c secext.c sspi.c secur32.rc diff --git a/reactos/lib/lib.rbuild b/reactos/lib/lib.rbuild index d8e3f4de44d..330937fdd4f 100644 --- a/reactos/lib/lib.rbuild +++ b/reactos/lib/lib.rbuild @@ -34,6 +34,9 @@ + + + diff --git a/reactos/dll/win32/secur32/lsa.c b/reactos/lib/lsalib/lsa.c similarity index 98% rename from reactos/dll/win32/secur32/lsa.c rename to reactos/lib/lsalib/lsa.c index 272de8eee87..9ac411c4d26 100644 --- a/reactos/dll/win32/secur32/lsa.c +++ b/reactos/lib/lsalib/lsa.c @@ -1,8 +1,7 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries - * FILE: lib/secur32/lsa.c + * FILE: lib/lsalib/lsa.c * PURPOSE: Client-side LSA functions * UPDATE HISTORY: * Created 05/08/00 @@ -10,7 +9,9 @@ /* INCLUDES ******************************************************************/ -#include +#include +#include +#include #define NDEBUG #include @@ -317,14 +318,14 @@ LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, if (!NT_SUCCESS(Status)) { NtClose(*Handle); - *Handle = INVALID_HANDLE_VALUE; + *Handle = NULL; return(Status); } if (!NT_SUCCESS(Reply.Status)) { NtClose(*Handle); - *Handle = INVALID_HANDLE_VALUE; + *Handle = NULL; return(Status); } diff --git a/reactos/lib/lsalib/lsalib.rbuild b/reactos/lib/lsalib/lsalib.rbuild new file mode 100644 index 00000000000..b917351f45e --- /dev/null +++ b/reactos/lib/lsalib/lsalib.rbuild @@ -0,0 +1,7 @@ + + + + . + include/reactos/subsys + lsa.c + From e50eff1409d9343ffc3eaab45f1049b3a1c116bc Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 27 Dec 2009 19:43:46 +0000 Subject: [PATCH 2/5] [gdi32] - Add notes, fix CombineRgn and cleanup. svn path=/trunk/; revision=44775 --- reactos/dll/win32/gdi32/objects/region.c | 309 ++++++++++++++++++----- 1 file changed, 251 insertions(+), 58 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/region.c b/reactos/dll/win32/gdi32/objects/region.c index 133b87addd9..fadcc16b77a 100644 --- a/reactos/dll/win32/gdi32/objects/region.c +++ b/reactos/dll/win32/gdi32/objects/region.c @@ -1,22 +1,38 @@ #include "precomp.h" +#define NDEBUG +#include + #define INRECT(r, x, y) \ ( ( ((r).right > x)) && \ ( ((r).left <= x)) && \ ( ((r).bottom > y)) && \ ( ((r).top <= y)) ) +#define OVERLAPPING_RGN 0 +#define INVERTED_RGN 1 +#define SAME_RGN 2 +#define DIFF_RGN 3 +/* + From tests, there are four results based on normalized coordinates. + If the rects are overlapping and normalized, it's OVERLAPPING_RGN. + If the rects are overlapping in anyway or same in dimension and one is inverted, + it's INVERTED_RGN. + If the rects are same in dimension or NULL, it's SAME_RGN. + If the rects are overlapping and not normalized or displace in different areas, + it's DIFF_RGN. + */ static INT FASTCALL -ComplexityFromRects( PRECT prc1, PRECT prc2) +ComplexityFromRects( PRECTL prc1, PRECTL prc2) { if ( prc2->left >= prc1->left ) { if ( ( prc1->right >= prc2->right) && ( prc1->top <= prc2->top ) && - ( prc1->bottom <= prc2->bottom ) ) - return SIMPLEREGION; + ( prc1->bottom >= prc2->bottom ) ) + return SAME_RGN; if ( prc2->left > prc1->left ) { @@ -24,7 +40,7 @@ ComplexityFromRects( PRECT prc1, PRECT prc2) ( prc1->right <= prc2->left ) || ( prc1->top >= prc2->bottom ) || ( prc1->bottom <= prc2->top ) ) - return COMPLEXREGION; + return DIFF_RGN; } } @@ -36,14 +52,13 @@ ComplexityFromRects( PRECT prc1, PRECT prc2) ( prc1->right <= prc2->left ) || ( prc1->top >= prc2->bottom ) || ( prc1->bottom <= prc2->top ) ) - return COMPLEXREGION; + return DIFF_RGN; } else { - return NULLREGION; + return INVERTED_RGN; } - - return ERROR; + return OVERLAPPING_RGN; } static @@ -181,7 +196,7 @@ MirrorRgnDC(HDC hdc, HRGN hRgn, HRGN *phRgn) /* FUNCTIONS *****************************************************************/ /* - * @unimplemented + * @implemented */ INT WINAPI @@ -190,8 +205,203 @@ CombineRgn(HRGN hDest, HRGN hSrc2, INT CombineMode) { - /* FIXME some part should be done in user mode */ - return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + PRGN_ATTR pRgn_Attr_Dest = NULL; + PRGN_ATTR pRgn_Attr_Src1 = NULL; + PRGN_ATTR pRgn_Attr_Src2 = NULL; + INT Complexity; + BOOL Ret; + + Ret = GdiGetHandleUserData((HGDIOBJ) hDest, GDI_OBJECT_TYPE_REGION, (PVOID) &pRgn_Attr_Dest); + Ret = GdiGetHandleUserData((HGDIOBJ) hSrc1, GDI_OBJECT_TYPE_REGION, (PVOID) &pRgn_Attr_Src1); + + if ( !Ret || + !pRgn_Attr_Dest || + !pRgn_Attr_Src1 || + pRgn_Attr_Src1->Flags > SIMPLEREGION ) + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + + /* Handle COPY and use only src1. */ + if ( CombineMode == RGN_COPY ) + { + switch (pRgn_Attr_Src1->Flags) + { + case NULLREGION: + Ret = SetRectRgn( hDest, 0, 0, 0, 0); + if (Ret) + return NULLREGION; + goto ERROR_Exit; + + case SIMPLEREGION: + Ret = SetRectRgn( hDest, + pRgn_Attr_Src1->Rect.left, + pRgn_Attr_Src1->Rect.top, + pRgn_Attr_Src1->Rect.right, + pRgn_Attr_Src1->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + + case COMPLEXREGION: + default: + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + } + } + + Ret = GdiGetHandleUserData((HGDIOBJ) hSrc2, GDI_OBJECT_TYPE_REGION, (PVOID) &pRgn_Attr_Src2); + if ( !Ret || + !pRgn_Attr_Src2 || + pRgn_Attr_Src2->Flags > SIMPLEREGION ) + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + + /* All but AND. */ + if ( CombineMode != RGN_AND) + { + if ( CombineMode <= RGN_AND) + { + /* + There might be some type of junk in the call, so go K. + If this becomes a problem, need to setup parameter check at the top. + */ + DPRINT1("Might be junk! CombineMode %d\n",CombineMode); + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + } + + if ( CombineMode > RGN_XOR) /* Handle DIFF. */ + { + if ( CombineMode != RGN_DIFF) + { /* Filter check! Well, must be junk?, so go K. */ + DPRINT1("RGN_COPY was handled! CombineMode %d\n",CombineMode); + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + } + + if ( pRgn_Attr_Src1->Flags != NULLREGION && + pRgn_Attr_Src2->Flags != NULLREGION ) + { + Complexity = ComplexityFromRects( &pRgn_Attr_Src1->Rect, &pRgn_Attr_Src2->Rect); + /* If same or overlapping and norm just go K. */ + if (Complexity == SAME_RGN || Complexity == OVERLAPPING_RGN) + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + } + /* Just NULL rgn. */ + if (SetRectRgn( hDest, 0, 0, 0, 0)) + return NULLREGION; + goto ERROR_Exit; + } + else /* Handle OR or XOR. */ + { + if ( pRgn_Attr_Src1->Flags == NULLREGION ) + { + if ( pRgn_Attr_Src2->Flags != NULLREGION ) + { /* Src1 null and not NULL, set from src2. */ + Ret = SetRectRgn( hDest, + pRgn_Attr_Src2->Rect.left, + pRgn_Attr_Src2->Rect.top, + pRgn_Attr_Src2->Rect.right, + pRgn_Attr_Src2->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + } + /* Both are NULL. */ + if (SetRectRgn( hDest, 0, 0, 0, 0)) + return NULLREGION; + goto ERROR_Exit; + } + /* Src1 is not NULL. */ + if ( pRgn_Attr_Src2->Flags != NULLREGION ) + { + if ( CombineMode != RGN_OR ) /* Filter XOR, so go K. */ + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + + Complexity = ComplexityFromRects( &pRgn_Attr_Src1->Rect, &pRgn_Attr_Src2->Rect); + /* If inverted use Src2. */ + if ( Complexity == INVERTED_RGN) + { + Ret = SetRectRgn( hDest, + pRgn_Attr_Src2->Rect.left, + pRgn_Attr_Src2->Rect.top, + pRgn_Attr_Src2->Rect.right, + pRgn_Attr_Src2->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + } + /* Not NULL or overlapping or differentiated, go to K. */ + if ( Complexity != SAME_RGN) + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + /* If same, just fall through. */ + } + } + Ret = SetRectRgn( hDest, + pRgn_Attr_Src1->Rect.left, + pRgn_Attr_Src1->Rect.top, + pRgn_Attr_Src1->Rect.right, + pRgn_Attr_Src1->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + } + + /* Handle AND. */ + if ( pRgn_Attr_Src1->Flags != NULLREGION && + pRgn_Attr_Src2->Flags != NULLREGION ) + { + Complexity = ComplexityFromRects( &pRgn_Attr_Src1->Rect, &pRgn_Attr_Src2->Rect); + + if ( Complexity == DIFF_RGN ) /* Differentiated in anyway just NULL rgn. */ + { + if (SetRectRgn( hDest, 0, 0, 0, 0)) + return NULLREGION; + goto ERROR_Exit; + } + + if ( Complexity != INVERTED_RGN) /* Not inverted and overlapping. */ + { + if ( Complexity != SAME_RGN) /* Must be norm and overlapping. */ + return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); + /* Merge from src2. */ + Ret = SetRectRgn( hDest, + pRgn_Attr_Src2->Rect.left, + pRgn_Attr_Src2->Rect.top, + pRgn_Attr_Src2->Rect.right, + pRgn_Attr_Src2->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + } + /* Inverted so merge from src1. */ + Ret = SetRectRgn( hDest, + pRgn_Attr_Src1->Rect.left, + pRgn_Attr_Src1->Rect.top, + pRgn_Attr_Src1->Rect.right, + pRgn_Attr_Src1->Rect.bottom ); + if (Ret) + return SIMPLEREGION; + goto ERROR_Exit; + } + + /* It's all NULL! */ + if (SetRectRgn( hDest, 0, 0, 0, 0)) + return NULLREGION; + +ERROR_Exit: + /* Even on error the flag is set dirty and force server side to redraw. */ + pRgn_Attr_Dest->AttrFlags |= ATTR_RGN_DIRTY; + return ERROR; +} + +/* + * @implemented + */ +HRGN +WINAPI +CreateEllipticRgnIndirect( + const RECT *prc +) +{ + /* Notes if prc is NULL it will crash on All Windows NT I checked 2000/XP/VISTA */ + return NtGdiCreateEllipticRgn(prc->left, prc->top, prc->right, prc->bottom); + } /* @@ -217,20 +427,6 @@ CreatePolyPolygonRgn( const POINT* lppt, return (HRGN) NtGdiPolyPolyDraw( (HDC) fnPolyFillMode, (PPOINT) lppt, (PULONG) lpPolyCounts, (ULONG) nCount, GdiPolyPolyRgn ); } -/* - * @implemented - */ -HRGN -WINAPI -CreateEllipticRgnIndirect( - const RECT *prc -) -{ - /* Notes if prc is NULL it will crash on All Windows NT I checked 2000/XP/VISTA */ - return NtGdiCreateEllipticRgn(prc->left, prc->top, prc->right, prc->bottom); - -} - /* * @implemented */ @@ -585,14 +781,12 @@ OffsetRgn( HRGN hrgn, { return ERROR; } - else - { - pRgn_Attr->Rect.top = nTopRect; - pRgn_Attr->Rect.left = nLeftRect; - pRgn_Attr->Rect.right = nRightRect; - pRgn_Attr->Rect.bottom = nBottomRect; - pRgn_Attr->AttrFlags |= ATTR_RGN_DIRTY; - } + + pRgn_Attr->Rect.top = nTopRect; + pRgn_Attr->Rect.left = nLeftRect; + pRgn_Attr->Rect.right = nRightRect; + pRgn_Attr->Rect.bottom = nBottomRect; + pRgn_Attr->AttrFlags |= ATTR_RGN_DIRTY; } } return pRgn_Attr->Flags; @@ -630,7 +824,7 @@ RectInRegion(HRGN hrgn, LPCRECT prcl) { PRGN_ATTR pRgn_Attr; - RECT rc; + RECTL rc; if (!GdiGetHandleUserData((HGDIOBJ) hrgn, GDI_OBJECT_TYPE_REGION, (PVOID) &pRgn_Attr)) return NtGdiRectInRegion(hrgn, (LPRECT) prcl); @@ -643,31 +837,31 @@ RectInRegion(HRGN hrgn, /* swap the coordinates to make right >= left and bottom >= top */ /* (region building rectangles are normalized the same way) */ - if ( prcl->top > prcl->bottom) - { - rc.top = prcl->bottom; - rc.bottom = prcl->top; - } - else - { - rc.top = prcl->top; - rc.bottom = prcl->bottom; - } - if ( prcl->right < prcl->left) - { - rc.right = prcl->left; - rc.left = prcl->right; - } - else - { - rc.right = prcl->right; - rc.left = prcl->left; - } + if ( prcl->top > prcl->bottom) + { + rc.top = prcl->bottom; + rc.bottom = prcl->top; + } + else + { + rc.top = prcl->top; + rc.bottom = prcl->bottom; + } + if ( prcl->right < prcl->left) + { + rc.right = prcl->left; + rc.left = prcl->right; + } + else + { + rc.right = prcl->right; + rc.left = prcl->left; + } - if ( ComplexityFromRects( (PRECT)&pRgn_Attr->Rect, &rc) != COMPLEXREGION ) - return TRUE; + if ( ComplexityFromRects( &pRgn_Attr->Rect, &rc) != DIFF_RGN ) + return TRUE; - return FALSE; + return FALSE; } /* @@ -752,4 +946,3 @@ SetMetaRgn( HDC hDC ) return ERROR; } - From 2db30d58d205174bc4f78a9339bee6a791c16e07 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 27 Dec 2009 19:46:13 +0000 Subject: [PATCH 3/5] [lsalib] Fix indentation. No code changes. svn path=/trunk/; revision=44776 --- reactos/lib/lsalib/lsa.c | 481 +++++++++++++++++++-------------------- 1 file changed, 240 insertions(+), 241 deletions(-) diff --git a/reactos/lib/lsalib/lsa.c b/reactos/lib/lsalib/lsa.c index 9ac411c4d26..a166309d4d6 100644 --- a/reactos/lib/lsalib/lsa.c +++ b/reactos/lib/lsalib/lsa.c @@ -28,97 +28,99 @@ extern HANDLE Secur32Heap; NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE LsaHandle) { - LSASS_REQUEST Request; - LSASS_REPLY Reply; - NTSTATUS Status; + LSASS_REQUEST Request; + LSASS_REPLY Reply; + NTSTATUS Status; - Request.Header.u1.s1.DataLength = 0; - Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); - Request.Type = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS; - Status = NtRequestWaitReplyPort(LsaHandle, - &Request.Header, - &Reply.Header); - if (!NT_SUCCESS(Status)) - { - return(Status); - } + Request.Header.u1.s1.DataLength = 0; + Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); + Request.Type = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS; + Status = NtRequestWaitReplyPort(LsaHandle, + &Request.Header, + &Reply.Header); + if (!NT_SUCCESS(Status)) + { + return Status; + } - if (!NT_SUCCESS(Reply.Status)) - { - return(Reply.Status); - } + if (!NT_SUCCESS(Reply.Status)) + { + return Reply.Status; + } - return(Status); + return Status; } + /* * @unimplemented */ NTSTATUS WINAPI LsaConnectUntrusted(PHANDLE LsaHandle) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; } + /* * @implemented */ NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE LsaHandle, - ULONG AuthenticationPackage, - PVOID ProtocolSubmitBuffer, - ULONG SubmitBufferLength, - PVOID* ProtocolReturnBuffer, - PULONG ReturnBufferLength, - PNTSTATUS ProtocolStatus) + ULONG AuthenticationPackage, + PVOID ProtocolSubmitBuffer, + ULONG SubmitBufferLength, + PVOID *ProtocolReturnBuffer, + PULONG ReturnBufferLength, + PNTSTATUS ProtocolStatus) { - PLSASS_REQUEST Request; - PLSASS_REPLY Reply; - LSASS_REQUEST RawRequest; - LSASS_REPLY RawReply; - NTSTATUS Status; - ULONG OutBufferSize; + PLSASS_REQUEST Request; + PLSASS_REPLY Reply; + LSASS_REQUEST RawRequest; + LSASS_REPLY RawReply; + NTSTATUS Status; + ULONG OutBufferSize; - Request = (PLSASS_REQUEST)&RawRequest; - Reply = (PLSASS_REPLY)&RawReply; + Request = (PLSASS_REQUEST)&RawRequest; + Reply = (PLSASS_REPLY)&RawReply; - Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + SubmitBufferLength - - sizeof(PORT_MESSAGE); - Request->Header.u1.s1.TotalLength = - Request->Header.u1.s1.DataLength + sizeof(PORT_MESSAGE); - Request->Type = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE; - Request->d.CallAuthenticationPackageRequest.AuthenticationPackage = - AuthenticationPackage; - Request->d.CallAuthenticationPackageRequest.InBufferLength = - SubmitBufferLength; - memcpy(Request->d.CallAuthenticationPackageRequest.InBuffer, - ProtocolSubmitBuffer, - SubmitBufferLength); + Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + SubmitBufferLength - + sizeof(PORT_MESSAGE); + Request->Header.u1.s1.TotalLength = + Request->Header.u1.s1.DataLength + sizeof(PORT_MESSAGE); + Request->Type = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE; + Request->d.CallAuthenticationPackageRequest.AuthenticationPackage = + AuthenticationPackage; + Request->d.CallAuthenticationPackageRequest.InBufferLength = + SubmitBufferLength; + memcpy(Request->d.CallAuthenticationPackageRequest.InBuffer, + ProtocolSubmitBuffer, + SubmitBufferLength); - Status = NtRequestWaitReplyPort(LsaHandle, - &Request->Header, - &Reply->Header); - if (!NT_SUCCESS(Status)) - { - return(Status); - } + Status = NtRequestWaitReplyPort(LsaHandle, + &Request->Header, + &Reply->Header); + if (!NT_SUCCESS(Status)) + { + return Status; + } - if (!NT_SUCCESS(Reply->Status)) - { - return(Reply->Status); - } + if (!NT_SUCCESS(Reply->Status)) + { + return Reply->Status; + } - OutBufferSize = Reply->d.CallAuthenticationPackageReply.OutBufferLength; - *ProtocolReturnBuffer = RtlAllocateHeap(Secur32Heap, - 0, - OutBufferSize); - *ReturnBufferLength = OutBufferSize; - memcpy(*ProtocolReturnBuffer, - Reply->d.CallAuthenticationPackageReply.OutBuffer, - *ReturnBufferLength); + OutBufferSize = Reply->d.CallAuthenticationPackageReply.OutBufferLength; + *ProtocolReturnBuffer = RtlAllocateHeap(Secur32Heap, + 0, + OutBufferSize); + *ReturnBufferLength = OutBufferSize; + memcpy(*ProtocolReturnBuffer, + Reply->d.CallAuthenticationPackageReply.OutBuffer, + *ReturnBufferLength); - return(Status); + return Status; } @@ -128,7 +130,7 @@ LsaCallAuthenticationPackage(HANDLE LsaHandle, NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID Buffer) { - return(RtlFreeHeap(Secur32Heap, 0, Buffer)); + return RtlFreeHeap(Secur32Heap, 0, Buffer); } @@ -137,36 +139,37 @@ LsaFreeReturnBuffer(PVOID Buffer) */ NTSTATUS WINAPI LsaLookupAuthenticationPackage(HANDLE LsaHandle, - PLSA_STRING PackageName, - PULONG AuthenticationPackage) + PLSA_STRING PackageName, + PULONG AuthenticationPackage) { - NTSTATUS Status; - PLSASS_REQUEST Request; - LSASS_REQUEST RawRequest; - LSASS_REPLY Reply; + NTSTATUS Status; + PLSASS_REQUEST Request; + LSASS_REQUEST RawRequest; + LSASS_REPLY Reply; - Request = (PLSASS_REQUEST)&RawRequest; - Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + PackageName->Length - - sizeof(PORT_MESSAGE); - Request->Header.u1.s1.TotalLength = Request->Header.u1.s1.DataLength + - sizeof(PORT_MESSAGE); - Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE; + Request = (PLSASS_REQUEST)&RawRequest; + Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + PackageName->Length - + sizeof(PORT_MESSAGE); + Request->Header.u1.s1.TotalLength = Request->Header.u1.s1.DataLength + + sizeof(PORT_MESSAGE); + Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE; - Status = NtRequestWaitReplyPort(LsaHandle, - &Request->Header, - &Reply.Header); - if (!NT_SUCCESS(Status)) - { - return(Status); - } - if (!NT_SUCCESS(Reply.Status)) - { - return(Reply.Status); - } + Status = NtRequestWaitReplyPort(LsaHandle, + &Request->Header, + &Reply.Header); + if (!NT_SUCCESS(Status)) + { + return Status; + } - *AuthenticationPackage = Reply.d.LookupAuthenticationPackageReply.Package; + if (!NT_SUCCESS(Reply.Status)) + { + return Reply.Status; + } - return(Reply.Status); + *AuthenticationPackage = Reply.d.LookupAuthenticationPackageReply.Package; + + return Reply.Status; } @@ -175,102 +178,102 @@ LsaLookupAuthenticationPackage(HANDLE LsaHandle, */ NTSTATUS WINAPI LsaLogonUser(HANDLE LsaHandle, - PLSA_STRING OriginName, - SECURITY_LOGON_TYPE LogonType, - ULONG AuthenticationPackage, - PVOID AuthenticationInformation, - ULONG AuthenticationInformationLength, - PTOKEN_GROUPS LocalGroups, - PTOKEN_SOURCE SourceContext, - PVOID* ProfileBuffer, - PULONG ProfileBufferLength, - PLUID LogonId, - PHANDLE Token, - PQUOTA_LIMITS Quotas, - PNTSTATUS SubStatus) + PLSA_STRING OriginName, + SECURITY_LOGON_TYPE LogonType, + ULONG AuthenticationPackage, + PVOID AuthenticationInformation, + ULONG AuthenticationInformationLength, + PTOKEN_GROUPS LocalGroups, + PTOKEN_SOURCE SourceContext, + PVOID *ProfileBuffer, + PULONG ProfileBufferLength, + PLUID LogonId, + PHANDLE Token, + PQUOTA_LIMITS Quotas, + PNTSTATUS SubStatus) { - ULONG RequestLength; - ULONG CurrentLength; - PLSASS_REQUEST Request; - LSASS_REQUEST RawMessage; - PLSASS_REPLY Reply; - LSASS_REPLY RawReply; - NTSTATUS Status; + ULONG RequestLength; + ULONG CurrentLength; + PLSASS_REQUEST Request; + LSASS_REQUEST RawMessage; + PLSASS_REPLY Reply; + LSASS_REPLY RawReply; + NTSTATUS Status; - RequestLength = sizeof(LSASS_REQUEST) - sizeof(PORT_MESSAGE); - RequestLength = RequestLength + (OriginName->Length * sizeof(WCHAR)); - RequestLength = RequestLength + AuthenticationInformationLength; - RequestLength = RequestLength + - (LocalGroups->GroupCount * sizeof(SID_AND_ATTRIBUTES)); + RequestLength = sizeof(LSASS_REQUEST) - sizeof(PORT_MESSAGE); + RequestLength = RequestLength + (OriginName->Length * sizeof(WCHAR)); + RequestLength = RequestLength + AuthenticationInformationLength; + RequestLength = RequestLength + + (LocalGroups->GroupCount * sizeof(SID_AND_ATTRIBUTES)); - CurrentLength = 0; - Request = (PLSASS_REQUEST)&RawMessage; + CurrentLength = 0; + Request = (PLSASS_REQUEST)&RawMessage; - Request->d.LogonUserRequest.OriginNameLength = OriginName->Length; - Request->d.LogonUserRequest.OriginName = (PWSTR)&RawMessage + CurrentLength; - memcpy((PWSTR)&RawMessage + CurrentLength, - OriginName->Buffer, - OriginName->Length * sizeof(WCHAR)); - CurrentLength = CurrentLength + (OriginName->Length * sizeof(WCHAR)); + Request->d.LogonUserRequest.OriginNameLength = OriginName->Length; + Request->d.LogonUserRequest.OriginName = (PWSTR)&RawMessage + CurrentLength; + memcpy((PWSTR)&RawMessage + CurrentLength, + OriginName->Buffer, + OriginName->Length * sizeof(WCHAR)); + CurrentLength = CurrentLength + (OriginName->Length * sizeof(WCHAR)); - Request->d.LogonUserRequest.LogonType = LogonType; + Request->d.LogonUserRequest.LogonType = LogonType; - Request->d.LogonUserRequest.AuthenticationPackage = - AuthenticationPackage; + Request->d.LogonUserRequest.AuthenticationPackage = + AuthenticationPackage; - Request->d.LogonUserRequest.AuthenticationInformation = - (PVOID)((ULONG_PTR)&RawMessage + CurrentLength); - Request->d.LogonUserRequest.AuthenticationInformationLength = - AuthenticationInformationLength; - memcpy((PVOID)((ULONG_PTR)&RawMessage + CurrentLength), - AuthenticationInformation, - AuthenticationInformationLength); - CurrentLength = CurrentLength + AuthenticationInformationLength; + Request->d.LogonUserRequest.AuthenticationInformation = + (PVOID)((ULONG_PTR)&RawMessage + CurrentLength); + Request->d.LogonUserRequest.AuthenticationInformationLength = + AuthenticationInformationLength; + memcpy((PVOID)((ULONG_PTR)&RawMessage + CurrentLength), + AuthenticationInformation, + AuthenticationInformationLength); + CurrentLength = CurrentLength + AuthenticationInformationLength; - Request->d.LogonUserRequest.LocalGroupsCount = LocalGroups->GroupCount; - Request->d.LogonUserRequest.LocalGroups = - (PSID_AND_ATTRIBUTES)&RawMessage + CurrentLength; - memcpy((PSID_AND_ATTRIBUTES)&RawMessage + CurrentLength, - LocalGroups->Groups, - LocalGroups->GroupCount * sizeof(SID_AND_ATTRIBUTES)); + Request->d.LogonUserRequest.LocalGroupsCount = LocalGroups->GroupCount; + Request->d.LogonUserRequest.LocalGroups = + (PSID_AND_ATTRIBUTES)&RawMessage + CurrentLength; + memcpy((PSID_AND_ATTRIBUTES)&RawMessage + CurrentLength, + LocalGroups->Groups, + LocalGroups->GroupCount * sizeof(SID_AND_ATTRIBUTES)); - Request->d.LogonUserRequest.SourceContext = *SourceContext; + Request->d.LogonUserRequest.SourceContext = *SourceContext; - Request->Type = LSASS_REQUEST_LOGON_USER; - Request->Header.u1.s1.DataLength = RequestLength - sizeof(PORT_MESSAGE); - Request->Header.u1.s1.TotalLength = RequestLength + sizeof(PORT_MESSAGE); + Request->Type = LSASS_REQUEST_LOGON_USER; + Request->Header.u1.s1.DataLength = RequestLength - sizeof(PORT_MESSAGE); + Request->Header.u1.s1.TotalLength = RequestLength + sizeof(PORT_MESSAGE); - Reply = (PLSASS_REPLY)&RawReply; + Reply = (PLSASS_REPLY)&RawReply; - Status = NtRequestWaitReplyPort(LsaHandle, - &Request->Header, - &Reply->Header); - if (!NT_SUCCESS(Status)) - { - return(Status); - } + Status = NtRequestWaitReplyPort(LsaHandle, + &Request->Header, + &Reply->Header); + if (!NT_SUCCESS(Status)) + { + return Status; + } - *SubStatus = Reply->d.LogonUserReply.SubStatus; + *SubStatus = Reply->d.LogonUserReply.SubStatus; - if (!NT_SUCCESS(Reply->Status)) - { - return(Status); - } + if (!NT_SUCCESS(Reply->Status)) + { + return Status; + } - *ProfileBuffer = RtlAllocateHeap(Secur32Heap, - 0, - Reply->d.LogonUserReply.ProfileBufferLength); - memcpy(*ProfileBuffer, - (PVOID)((ULONG)Reply->d.LogonUserReply.Data + - (ULONG)Reply->d.LogonUserReply.ProfileBuffer), - Reply->d.LogonUserReply.ProfileBufferLength); - *LogonId = Reply->d.LogonUserReply.LogonId; - *Token = Reply->d.LogonUserReply.Token; - memcpy(Quotas, - &Reply->d.LogonUserReply.Quotas, - sizeof(Reply->d.LogonUserReply.Quotas)); + *ProfileBuffer = RtlAllocateHeap(Secur32Heap, + 0, + Reply->d.LogonUserReply.ProfileBufferLength); + memcpy(*ProfileBuffer, + (PVOID)((ULONG)Reply->d.LogonUserReply.Data + + (ULONG)Reply->d.LogonUserReply.ProfileBuffer), + Reply->d.LogonUserReply.ProfileBufferLength); + *LogonId = Reply->d.LogonUserReply.LogonId; + *Token = Reply->d.LogonUserReply.Token; + memcpy(Quotas, + &Reply->d.LogonUserReply.Quotas, + sizeof(Reply->d.LogonUserReply.Quotas)); - return(Status); + return Status; } @@ -279,113 +282,109 @@ LsaLogonUser(HANDLE LsaHandle, */ NTSTATUS WINAPI LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, - PHANDLE Handle, - PLSA_OPERATIONAL_MODE OperationalMode) + PHANDLE Handle, + PLSA_OPERATIONAL_MODE OperationalMode) { - UNICODE_STRING Portname = RTL_CONSTANT_STRING(L"\\SeLsaCommandPort"); - ULONG ConnectInfoLength; - NTSTATUS Status; - LSASS_REQUEST Request; - LSASS_REPLY Reply; + UNICODE_STRING Portname = RTL_CONSTANT_STRING(L"\\SeLsaCommandPort"); + ULONG ConnectInfoLength; + NTSTATUS Status; + LSASS_REQUEST Request; + LSASS_REPLY Reply; - ConnectInfoLength = 0; - Status = NtConnectPort(Handle, - &Portname, - NULL, - NULL, - NULL, - NULL, - NULL, - &ConnectInfoLength); - if (!NT_SUCCESS(Status)) - { - return(Status); - } + ConnectInfoLength = 0; + Status = NtConnectPort(Handle, + &Portname, + NULL, + NULL, + NULL, + NULL, + NULL, + &ConnectInfoLength); + if (!NT_SUCCESS(Status)) + { + return Status; + } - Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS; - Request.Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) - - sizeof(PORT_MESSAGE); - Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); + Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS; + Request.Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) - + sizeof(PORT_MESSAGE); + Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); - Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length; - memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer, - LsaLogonProcessName->Buffer, - Request.d.RegisterLogonProcessRequest.Length); + Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length; + memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer, + LsaLogonProcessName->Buffer, + Request.d.RegisterLogonProcessRequest.Length); - Status = NtRequestWaitReplyPort(*Handle, - &Request.Header, - &Reply.Header); - if (!NT_SUCCESS(Status)) - { - NtClose(*Handle); - *Handle = NULL; - return(Status); - } + Status = NtRequestWaitReplyPort(*Handle, + &Request.Header, + &Reply.Header); + if (!NT_SUCCESS(Status)) + { + NtClose(*Handle); + *Handle = NULL; + return Status; + } - if (!NT_SUCCESS(Reply.Status)) - { - NtClose(*Handle); - *Handle = NULL; - return(Status); - } + if (!NT_SUCCESS(Reply.Status)) + { + NtClose(*Handle); + *Handle = NULL; + return Status; + } - *OperationalMode = Reply.d.RegisterLogonProcessReply.OperationalMode; + *OperationalMode = Reply.d.RegisterLogonProcessReply.OperationalMode; - return(Reply.Status); + return Reply.Status; } + /* * @unimplemented */ NTSTATUS WINAPI -LsaEnumerateLogonSessions( -PULONG LogonSessionCount, -PLUID * LogonSessionList -) +LsaEnumerateLogonSessions(PULONG LogonSessionCount, + PLUID *LogonSessionList) { - UNIMPLEMENTED; - return FALSE; + UNIMPLEMENTED; + return FALSE; } + /* * @unimplemented */ NTSTATUS WINAPI -LsaGetLogonSessionData( -PLUID LogonId, -PSECURITY_LOGON_SESSION_DATA * ppLogonSessionData -) +LsaGetLogonSessionData(PLUID LogonId, + PSECURITY_LOGON_SESSION_DATA *ppLogonSessionData) { - UNIMPLEMENTED; - return FALSE; + UNIMPLEMENTED; + return FALSE; } + /* * @unimplemented */ NTSTATUS WINAPI -LsaRegisterPolicyChangeNotification( -POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, -HANDLE NotificationEventHandle -) +LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, + HANDLE NotificationEventHandle) { - UNIMPLEMENTED; - return FALSE; + UNIMPLEMENTED; + return FALSE; } + /* * @unimplemented */ NTSTATUS WINAPI -LsaUnregisterPolicyChangeNotification( -POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, -HANDLE NotificationEventHandle -) +LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, + HANDLE NotificationEventHandle) { - UNIMPLEMENTED; - return FALSE; + UNIMPLEMENTED; + return FALSE; } From d90303c70454801d31684145cb44082083aa56fc Mon Sep 17 00:00:00 2001 From: Benedikt Freisen Date: Sun, 27 Dec 2009 21:15:08 +0000 Subject: [PATCH 4/5] Tool box, color palette and status bar can be hidden and shown using menu entry and/or shortcut. svn path=/trunk/; revision=44777 --- reactos/base/applications/paint/globalvar.h | 1 + reactos/base/applications/paint/main.c | 10 ++- reactos/base/applications/paint/winproc.c | 69 ++++++++++++++++----- 3 files changed, 63 insertions(+), 17 deletions(-) diff --git a/reactos/base/applications/paint/globalvar.h b/reactos/base/applications/paint/globalvar.h index 964f28b71fa..821e814be27 100644 --- a/reactos/base/applications/paint/globalvar.h +++ b/reactos/base/applications/paint/globalvar.h @@ -53,6 +53,7 @@ extern HWND hStatusBar; extern HWND hScrollbox; extern HWND hMainWnd; extern HWND hPalWin; +extern HWND hToolBoxContainer; extern HWND hToolSettings; extern HWND hTrackbarZoom; extern CHOOSECOLOR choosecolor; diff --git a/reactos/base/applications/paint/main.c b/reactos/base/applications/paint/main.c index 790c498f0a6..c83554a80ed 100644 --- a/reactos/base/applications/paint/main.c +++ b/reactos/base/applications/paint/main.c @@ -76,6 +76,7 @@ HWND hStatusBar; HWND hScrollbox; HWND hMainWnd; HWND hPalWin; +HWND hToolBoxContainer; HWND hToolSettings; HWND hTrackbarZoom; CHOOSECOLOR choosecolor; @@ -285,6 +286,9 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument CreateWindowEx(0, _T("STATIC"), _T(""), WS_CHILD | WS_VISIBLE | SS_ETCHEDHORZ, 0, 0, 5000, 2, hwnd, NULL, hThisInstance, NULL); + hToolBoxContainer = + CreateWindowEx(0, _T("WindowsApp"), _T(""), WS_CHILD | WS_VISIBLE, 2, 2, 52, 350, hwnd, NULL, + hThisInstance, NULL); /* creating the 16 bitmap radio buttons and setting the bitmap */ @@ -295,7 +299,7 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN | CCS_VERT | CCS_NORESIZE | TBSTYLE_TOOLTIPS, - 3, 3, 50, 205, hwnd, NULL, hThisInstance, NULL); + 1, 1, 50, 205, hToolBoxContainer, NULL, hThisInstance, NULL); hImageList = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 16, 0); SendMessage(hToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); tempBm = LoadImage(hThisInstance, MAKEINTRESOURCE(IDB_TOOLBARICONS), IMAGE_BITMAP, 256, 16, 0); @@ -327,8 +331,8 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument /* creating the tool settings child window */ hToolSettings = - CreateWindowEx(0, _T("ToolSettings"), _T(""), WS_CHILD | WS_VISIBLE, 7, 210, 42, 140, hwnd, NULL, - hThisInstance, NULL); + CreateWindowEx(0, _T("ToolSettings"), _T(""), WS_CHILD | WS_VISIBLE, 5, 208, 42, 140, + hToolBoxContainer, NULL, hThisInstance, NULL); hTrackbarZoom = CreateWindowEx(0, TRACKBAR_CLASS, _T(""), WS_CHILD | TBS_VERT | TBS_AUTOTICKS, 1, 1, 40, 64, hToolSettings, NULL, hThisInstance, NULL); diff --git a/reactos/base/applications/paint/winproc.c b/reactos/base/applications/paint/winproc.c index c10e7a748ec..9d269d3f046 100644 --- a/reactos/base/applications/paint/winproc.c +++ b/reactos/base/applications/paint/winproc.c @@ -112,6 +112,38 @@ drawZoomFrame(int mouseX, int mouseY) ReleaseDC(hImageArea, hdc); } +void +alignChildrenToMainWindow() +{ + int x, y, w, h; + RECT clientRect; + GetClientRect(hMainWnd, &clientRect); + + if (IsWindowVisible(hToolBoxContainer)) + { + x = 56; + w = clientRect.right - 56; + } + else + { + x = 0; + w = clientRect.right; + } + if (IsWindowVisible(hPalWin)) + { + y = 49; + h = clientRect.bottom - 49; + } + else + { + y = 3; + h = clientRect.bottom - 3; + } + + MoveWindow(hScrollbox, x, y, w, IsWindowVisible(hStatusBar) ? h - 23 : h, TRUE); + MoveWindow(hPalWin, x, 9, 255, 32, TRUE); +} + BOOL drawing; LRESULT CALLBACK @@ -179,14 +211,10 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } break; case 1: - if (undoSteps > 0) - EnableMenuItem(GetMenu(hMainWnd), IDM_EDITUNDO, MF_ENABLED | MF_BYCOMMAND); - else - EnableMenuItem(GetMenu(hMainWnd), IDM_EDITUNDO, MF_GRAYED | MF_BYCOMMAND); - if (redoSteps > 0) - EnableMenuItem(GetMenu(hMainWnd), IDM_EDITREDO, MF_ENABLED | MF_BYCOMMAND); - else - EnableMenuItem(GetMenu(hMainWnd), IDM_EDITREDO, MF_GRAYED | MF_BYCOMMAND); + EnableMenuItem(GetMenu(hMainWnd), IDM_EDITUNDO, + (undoSteps > 0) ? (MF_ENABLED | MF_BYCOMMAND) : (MF_GRAYED | MF_BYCOMMAND)); + EnableMenuItem(GetMenu(hMainWnd), IDM_EDITREDO, + (redoSteps > 0) ? (MF_ENABLED | MF_BYCOMMAND) : (MF_GRAYED | MF_BYCOMMAND)); if (IsWindowVisible(hSelection)) { EnableMenuItem(GetMenu(hMainWnd), IDM_EDITCUT, MF_ENABLED | MF_BYCOMMAND); @@ -219,10 +247,15 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND)); break; } - if (IsWindowVisible(hStatusBar)) - CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWSTATUSBAR, MF_CHECKED | MF_BYCOMMAND); - else - CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWSTATUSBAR, MF_UNCHECKED | MF_BYCOMMAND); + CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWTOOLBOX, + IsWindowVisible(hToolBoxContainer) ? + (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND)); + CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWCOLORPALETTE, + IsWindowVisible(hPalWin) ? + (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND)); + CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWSTATUSBAR, + IsWindowVisible(hStatusBar) ? + (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND)); CheckMenuItem(GetMenu(hMainWnd), IDM_VIEWSHOWGRID, showGrid ? (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND)); @@ -252,8 +285,7 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) int test[] = { LOWORD(lParam) - 260, LOWORD(lParam) - 140, LOWORD(lParam) - 20 }; SendMessage(hStatusBar, WM_SIZE, wParam, lParam); SendMessage(hStatusBar, SB_SETPARTS, 3, (LPARAM)&test); - MoveWindow(hScrollbox, 56, 49, LOWORD(lParam) - 56, HIWORD(lParam) - 72, TRUE); - //InvalidateRect(hwnd, NULL, TRUE); + alignChildrenToMainWindow(); } if (hwnd == hImageArea) { @@ -813,8 +845,17 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) updateCanvasAndScrollbars(); break; + case IDM_VIEWTOOLBOX: + ShowWindow(hToolBoxContainer, IsWindowVisible(hToolBoxContainer) ? SW_HIDE : SW_SHOW); + alignChildrenToMainWindow(); + break; + case IDM_VIEWCOLORPALETTE: + ShowWindow(hPalWin, IsWindowVisible(hPalWin) ? SW_HIDE : SW_SHOW); + alignChildrenToMainWindow(); + break; case IDM_VIEWSTATUSBAR: ShowWindow(hStatusBar, IsWindowVisible(hStatusBar) ? SW_HIDE : SW_SHOW); + alignChildrenToMainWindow(); break; case IDM_VIEWSHOWGRID: From 7781a0c84e7d67fe4d0c23e7cdc43404d4ec1bff Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Dec 2009 23:54:01 +0000 Subject: [PATCH 5/5] spaces -> tabs in rbuild file svn path=/trunk/; revision=44780 --- reactos/base/services/services.rbuild | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/base/services/services.rbuild b/reactos/base/services/services.rbuild index 3ab94214d60..993f7d01ad9 100644 --- a/reactos/base/services/services.rbuild +++ b/reactos/base/services/services.rbuild @@ -25,9 +25,9 @@ - - - + + +