HANDLE APIENTRY NtUserRemoveProp(HWND hWnd, ATOM Atom) { PWND Window; PPROPERTY Prop; HANDLE Data; DECLARE_RETURN(HANDLE); TRACE("Enter NtUserRemoveProp\n"); UserEnterExclusive(); if (!(Window = UserGetWindowObject(hWnd))) { RETURN( NULL); } Prop = IntGetProp(Window, Atom); if (Prop == NULL) { RETURN(NULL); } Data = Prop->Data; RemoveEntryList(&Prop->PropListEntry); UserHeapFree(Prop); Window->PropListItems--; RETURN(Data); CLEANUP: TRACE("Leave NtUserRemoveProp, ret=%i\n",_ret_); UserLeave(); END_CLEANUP; }
BOOL FASTCALL IntRemoveProp(PWND Window, ATOM Atom) { PPROPERTY Prop; Prop = IntGetProp(Window, Atom); if (Prop == NULL) { return FALSE; } RemoveEntryList(&Prop->PropListEntry); UserHeapFree(Prop); Window->PropListItems--; return TRUE; }
VOID FASTCALL IntRemoveWindowProp(PWND Window) { PLIST_ENTRY ListEntry; PPROPERTY Property; while (!IsListEmpty(&Window->PropListHead)) { ListEntry = Window->PropListHead.Flink; Property = CONTAINING_RECORD(ListEntry, PROPERTY, PropListEntry); RemoveEntryList(&Property->PropListEntry); UserHeapFree(Property); Window->PropListItems--; } return; }