From 3c30cd65278f27ea35b95af0131e57624a7b447a Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 10 Oct 2015 13:48:08 +0000 Subject: [PATCH] [WIN32K:NTUSER] - Remove some DECLARE_RETURN()/RETURN() - Add asserts for the user lock - Annotate window property functions and use consistent parameter names svn path=/trunk/; revision=69485 --- reactos/win32ss/user/ntuser/prop.c | 115 ++++++++++++++++------------- reactos/win32ss/user/ntuser/prop.h | 36 +++++++-- 2 files changed, 95 insertions(+), 56 deletions(-) diff --git a/reactos/win32ss/user/ntuser/prop.c b/reactos/win32ss/user/ntuser/prop.c index 29424f1c6de..8048cbcfe60 100644 --- a/reactos/win32ss/user/ntuser/prop.c +++ b/reactos/win32ss/user/ntuser/prop.c @@ -2,7 +2,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Window properties - * FILE: subsys/win32k/ntuser/prop.c + * FILE: win32ss/user/ntuser/prop.c * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net) */ @@ -14,13 +14,14 @@ DBG_DEFAULT_CHANNEL(UserProp); PPROPERTY FASTCALL IntGetProp( - PWND Window, - ATOM Atom) + _In_ PWND Window, + _In_ ATOM Atom) { PLIST_ENTRY ListEntry; PPROPERTY Property; UINT i; + NT_ASSERT(UserIsEntered()); ListEntry = Window->PropListHead.Flink; for (i = 0; i < Window->PropListItems; i++) @@ -46,22 +47,26 @@ IntGetProp( HANDLE FASTCALL UserGetProp( - PWND pWnd, - ATOM Atom) + _In_ PWND Window, + _In_ ATOM Atom) { PPROPERTY Prop; - Prop = IntGetProp(pWnd, Atom); + + NT_ASSERT(UserIsEntered()); + Prop = IntGetProp(Window, Atom); return Prop ? Prop->Data : NULL; } +_Success_(return) BOOL FASTCALL IntRemoveProp( - PWND Window, - ATOM Atom) + _In_ PWND Window, + _In_ ATOM Atom) { PPROPERTY Prop; + NT_ASSERT(UserIsEnteredExclusive()); Prop = IntGetProp(Window, Atom); if (Prop == NULL) { @@ -74,16 +79,18 @@ IntRemoveProp( return TRUE; } +_Success_(return) BOOL FASTCALL IntSetProp( - PWND pWnd, - ATOM Atom, - HANDLE Data) + _In_ PWND Window, + _In_ ATOM Atom, + _In_ HANDLE Data) { PPROPERTY Prop; - Prop = IntGetProp(pWnd, Atom); + NT_ASSERT(UserIsEnteredExclusive()); + Prop = IntGetProp(Window, Atom); if (Prop == NULL) { Prop = UserHeapAlloc(sizeof(PROPERTY)); @@ -92,8 +99,8 @@ IntSetProp( return FALSE; } Prop->Atom = Atom; - InsertTailList(&pWnd->PropListHead, &Prop->PropListEntry); - pWnd->PropListItems++; + InsertTailList(&Window->PropListHead, &Prop->PropListEntry); + Window->PropListItems++; } Prop->Data = Data; @@ -103,11 +110,12 @@ IntSetProp( VOID FASTCALL IntRemoveWindowProp( - PWND Window) + _In_ PWND Window) { PLIST_ENTRY ListEntry; PPROPERTY Property; + NT_ASSERT(UserIsEnteredExclusive()); while (!IsListEmpty(&Window->PropListHead)) { ListEntry = Window->PropListHead.Flink; @@ -124,10 +132,10 @@ IntRemoveWindowProp( NTSTATUS APIENTRY NtUserBuildPropList( - HWND hWnd, - LPVOID Buffer, - DWORD BufferSize, - DWORD *Count) + _In_ HWND hWnd, + _Out_writes_bytes_to_opt_(BufferSize, *Count * sizeof(PROPLISTITEM)) LPVOID Buffer, + _In_ DWORD BufferSize, + _Out_opt_ DWORD *Count) { PWND Window; PPROPERTY Property; @@ -135,21 +143,23 @@ NtUserBuildPropList( PROPLISTITEM listitem, *li; NTSTATUS Status; DWORD Cnt = 0; - DECLARE_RETURN(NTSTATUS); TRACE("Enter NtUserBuildPropList\n"); UserEnterShared(); - if (!(Window = UserGetWindowObject(hWnd))) + Window = UserGetWindowObject(hWnd); + if (Window == NULL) { - RETURN(STATUS_INVALID_HANDLE); + Status = STATUS_INVALID_HANDLE; + goto Exit; } if (Buffer) { if (!BufferSize || (BufferSize % sizeof(PROPLISTITEM) != 0)) { - RETURN(STATUS_INVALID_PARAMETER); + Status = STATUS_INVALID_PARAMETER; + goto Exit; } /* Copy list */ @@ -165,7 +175,7 @@ NtUserBuildPropList( Status = MmCopyToCaller(li, &listitem, sizeof(PROPLISTITEM)); if (!NT_SUCCESS(Status)) { - RETURN(Status); + goto Exit; } BufferSize -= sizeof(PROPLISTITEM); @@ -185,41 +195,42 @@ NtUserBuildPropList( Status = MmCopyToCaller(Count, &Cnt, sizeof(DWORD)); if (!NT_SUCCESS(Status)) { - RETURN(Status); + goto Exit; } } - RETURN(STATUS_SUCCESS); + Status = STATUS_SUCCESS; -CLEANUP: - TRACE("Leave NtUserBuildPropList, ret=%i\n", _ret_); +Exit: + TRACE("Leave NtUserBuildPropList, ret=%lx\n", Status); UserLeave(); - END_CLEANUP; + + return Status; } HANDLE APIENTRY NtUserRemoveProp( - HWND hWnd, - ATOM Atom) + _In_ HWND hWnd, + _In_ ATOM Atom) { PWND Window; PPROPERTY Prop; - HANDLE Data; - DECLARE_RETURN(HANDLE); + HANDLE Data = NULL; TRACE("Enter NtUserRemoveProp\n"); UserEnterExclusive(); - if (!(Window = UserGetWindowObject(hWnd))) + Window = UserGetWindowObject(hWnd); + if (Window == NULL) { - RETURN(NULL); + goto Exit; } Prop = IntGetProp(Window, Atom); if (Prop == NULL) { - RETURN(NULL); + goto Exit; } Data = Prop->Data; @@ -227,38 +238,40 @@ NtUserRemoveProp( UserHeapFree(Prop); Window->PropListItems--; - RETURN(Data); - -CLEANUP: - TRACE("Leave NtUserRemoveProp, ret=%p\n", _ret_); +Exit: + TRACE("Leave NtUserRemoveProp, ret=%p\n", Data); UserLeave(); - END_CLEANUP; + + return Data; } BOOL APIENTRY NtUserSetProp( - HWND hWnd, - ATOM Atom, - HANDLE Data) + _In_ HWND hWnd, + _In_ ATOM Atom, + _In_ HANDLE Data) { PWND Window; - DECLARE_RETURN(BOOL); + BOOL Ret; TRACE("Enter NtUserSetProp\n"); UserEnterExclusive(); - if (!(Window = UserGetWindowObject(hWnd))) + Window = UserGetWindowObject(hWnd); + if (Window == NULL) { - RETURN(FALSE); + Ret = FALSE; + goto Exit; } - RETURN(IntSetProp(Window, Atom, Data)); + Ret = IntSetProp(Window, Atom, Data); -CLEANUP: - TRACE("Leave NtUserSetProp, ret=%i\n", _ret_); +Exit: + TRACE("Leave NtUserSetProp, ret=%i\n", Ret); UserLeave(); - END_CLEANUP; + + return Ret; } /* EOF */ diff --git a/reactos/win32ss/user/ntuser/prop.h b/reactos/win32ss/user/ntuser/prop.h index fdde50a5bea..675882cb4c2 100644 --- a/reactos/win32ss/user/ntuser/prop.h +++ b/reactos/win32ss/user/ntuser/prop.h @@ -1,7 +1,33 @@ #pragma once -PPROPERTY FASTCALL IntGetProp(PWND,ATOM); -BOOL FASTCALL IntRemoveProp(PWND,ATOM); -BOOL FASTCALL IntSetProp(PWND, ATOM, HANDLE); -HANDLE FASTCALL UserGetProp(PWND, ATOM); -VOID FASTCALL IntRemoveWindowProp(PWND Window); +PPROPERTY +FASTCALL +IntGetProp( + _In_ PWND Window, + _In_ ATOM Atom); + +HANDLE +FASTCALL +UserGetProp( + _In_ PWND Window, + _In_ ATOM Atom); + +_Success_(return) +BOOL +FASTCALL +IntRemoveProp( + _In_ PWND Window, + _In_ ATOM Atom); + +_Success_(return) +BOOL +FASTCALL +IntSetProp( + _In_ PWND Window, + _In_ ATOM Atom, + _In_ HANDLE Data); + +VOID +FASTCALL +IntRemoveWindowProp( + _In_ PWND Window);