BOOL APIENTRY NtUserSetProp(HWND hWnd, ATOM Atom, HANDLE Data) { PWND Window; DECLARE_RETURN(BOOL); TRACE("Enter NtUserSetProp\n"); UserEnterExclusive(); if (!(Window = UserGetWindowObject(hWnd))) { RETURN( FALSE); } RETURN( IntSetProp(Window, Atom, Data)); CLEANUP: TRACE("Leave NtUserSetProp, ret=%i\n",_ret_); UserLeave(); END_CLEANUP; }
DWORD APIENTRY NtUserCallHwndParam( HWND hWnd, DWORD Param, DWORD Routine) { switch (Routine) { case HWNDPARAM_ROUTINE_KILLSYSTEMTIMER: return IntKillTimer(hWnd, (UINT_PTR)Param, TRUE); case HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID: { PWND Window; UserEnterExclusive(); if(!(Window = UserGetWindowObject(hWnd))) { UserLeave(); return FALSE; } if ( Param ) IntSetProp(Window, gpsi->atomContextHelpIdProp, (HANDLE)Param); else IntRemoveProp(Window, gpsi->atomContextHelpIdProp); UserLeave(); return TRUE; } case HWNDPARAM_ROUTINE_SETDIALOGPOINTER: { PWND pWnd; USER_REFERENCE_ENTRY Ref; UserEnterExclusive(); if (!(pWnd = UserGetWindowObject(hWnd))) { UserLeave(); return 0; } UserRefObjectCo(pWnd, &Ref); if (pWnd->head.pti->ppi == PsGetCurrentProcessWin32Process() && pWnd->cbwndExtra == DLGWINDOWEXTRA && !(pWnd->state & WNDS_SERVERSIDEWINDOWPROC)) { if (Param) { if (!pWnd->fnid) pWnd->fnid = FNID_DIALOG; pWnd->state |= WNDS_DIALOGWINDOW; } else { pWnd->fnid |= FNID_DESTROY; pWnd->state &= ~WNDS_DIALOGWINDOW; } } UserDerefObjectCo(pWnd); UserLeave(); return 0; } case HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT: { PWND pWnd; PNOTIFYEVENT pne; UserEnterExclusive(); pne = (PNOTIFYEVENT)Param; if (hWnd) pWnd = UserGetWindowObject(hWnd); else pWnd = NULL; IntNotifyWinEvent(pne->event, pWnd, pne->idObject, pne->idChild, pne->flags); UserLeave(); return 0; } } STUB; return 0; }
APIENTRY EngCreateWnd( SURFOBJ *pso, HWND hWnd, WNDOBJCHANGEPROC pfn, FLONG fl, int iPixelFormat) { WNDGDI *WndObjInt = NULL; WNDOBJ *WndObjUser = NULL; PWND Window; BOOL calledFromUser; DECLARE_RETURN(WNDOBJ*); DPRINT("EngCreateWnd: pso = 0x%p, hwnd = 0x%p, pfn = 0x%p, fl = 0x%lx, pixfmt = %d\n", pso, hWnd, pfn, fl, iPixelFormat); calledFromUser = UserIsEntered(); if (!calledFromUser){ UserEnterShared(); } /* Get window object */ Window = UserGetWindowObject(hWnd); if (Window == NULL) { RETURN( NULL); } /* Create WNDOBJ */ WndObjInt = EngAllocMem(0, sizeof (WNDGDI), GDITAG_WNDOBJ); if (WndObjInt == NULL) { DPRINT1("Failed to allocate memory for a WND structure!\n"); RETURN( NULL); } /* Fill the clipobj */ WndObjInt->ClientClipObj = NULL; if (!IntEngWndUpdateClipObj(WndObjInt, Window)) { EngFreeMem(WndObjInt); RETURN( NULL); } /* Fill user object */ WndObjUser = GDIToObj(WndObjInt, WND); WndObjUser->psoOwner = pso; WndObjUser->pvConsumer = NULL; /* Fill internal object */ WndObjInt->Hwnd = hWnd; WndObjInt->ChangeProc = pfn; WndObjInt->Flags = fl; WndObjInt->PixelFormat = iPixelFormat; /* associate object with window */ IntSetProp(Window, AtomWndObj, WndObjInt); ++gcountPWO; DPRINT("EngCreateWnd: SUCCESS!\n"); RETURN( WndObjUser); CLEANUP: if (!calledFromUser){ UserLeave(); } END_CLEANUP; }