/****************************** Module Header ******************************\ * Module Name: srvmsg.c * * Copyright (c) 1985 - 1999, Microsoft Corporation * * Includes the mapping table for messages when calling the client. * * 04-11-91 ScottLu Created. \***************************************************************************/ #include "precomp.h" #pragma hdrstop #define SfnDDEINIT SfnDWORD #define SfnKERNELONLY SfnDWORD #ifdef FE_SB /* * SfnEMGETSEL, SfnSETSEL, SfnGBGETEDITSEL */ #define SfnEMGETSEL SfnOPTOUTLPDWORDOPTOUTLPDWORD #define SfnEMSETSEL SfnDWORD #define SfnCBGETEDITSEL SfnOPTOUTLPDWORDOPTOUTLPDWORD #endif // FE_SB #define MSGFN(func) Sfn ## func #define FNSCSENDMESSAGE SFNSCSENDMESSAGE #include /***************************************************************************\ * fnINLBOXSTRING * * Takes a lbox string - a string that treats lParam as a string pointer or * a DWORD depending on LBS_HASSTRINGS and ownerdraw. * * 04-12-91 ScottLu Created. \***************************************************************************/ LRESULT SfnINLBOXSTRING( PWND pwnd, UINT msg, WPARAM wParam, LPARAM lParam, ULONG_PTR xParam, PROC xpfn, DWORD dwSCMSFlags, PSMS psms) { DWORD dw; /* * See if the control is ownerdraw and does not have the LBS_HASSTRINGS * style. If so, treat lParam as a DWORD. */ if (!RevalidateHwnd(HW(pwnd))) { return 0L; } dw = pwnd->style; if (!(dw & LBS_HASSTRINGS) && (dw & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE))) { /* * Treat lParam as a dword. */ return SfnDWORD(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); } /* * Treat as a string pointer. Some messages allowed or had certain * error codes for NULL so send them through the NULL allowed thunk. * Ventura Publisher does this */ switch (msg) { default: return SfnINSTRING(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); break; case LB_FINDSTRING: return SfnINSTRINGNULL(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); break; } } /***************************************************************************\ * SfnOUTLBOXSTRING * * Returns an lbox string - a string that treats lParam as a string pointer or * a DWORD depending on LBS_HASSTRINGS and ownerdraw. * * 04-12-91 ScottLu Created. \***************************************************************************/ LRESULT SfnOUTLBOXSTRING( PWND pwnd, UINT msg, WPARAM wParam, LPARAM lParam, ULONG_PTR xParam, PROC xpfn, DWORD dwSCMSFlags, PSMS psms) { DWORD dw; BOOL bNotString; DWORD dwRet; TL tlpwnd; /* * See if the control is ownerdraw and does not have the LBS_HASSTRINGS * style. If so, treat lParam as a DWORD. */ if (!RevalidateHwnd(HW(pwnd))) { return 0L; } dw = pwnd->style; /* * See if the control is ownerdraw and does not have the LBS_HASSTRINGS * style. If so, treat lParam as a DWORD. */ bNotString = (!(dw & LBS_HASSTRINGS) && (dw & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE))); /* * Make this special call which'll know how to copy this string. */ ThreadLock(pwnd, &tlpwnd); dwRet = ClientGetListboxString(pwnd, msg, wParam, (PLARGE_UNICODE_STRING)lParam, xParam, xpfn, dwSCMSFlags, bNotString, psms); ThreadUnlock(&tlpwnd); return dwRet; } /***************************************************************************\ * fnINCBOXSTRING * * Takes a lbox string - a string that treats lParam as a string pointer or * a DWORD depending on CBS_HASSTRINGS and ownerdraw. * * 04-12-91 ScottLu Created. \***************************************************************************/ LRESULT SfnINCBOXSTRING( PWND pwnd, UINT msg, WPARAM wParam, LPARAM lParam, ULONG_PTR xParam, PROC xpfn, DWORD dwSCMSFlags, PSMS psms) { DWORD dw; /* * See if the control is ownerdraw and does not have the CBS_HASSTRINGS * style. If so, treat lParam as a DWORD. */ if (!RevalidateHwnd(HW(pwnd))) { return 0L; } dw = pwnd->style; if (!(dw & CBS_HASSTRINGS) && (dw & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))) { /* * Treat lParam as a dword. */ return SfnDWORD(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); } /* * Treat as a string pointer. Some messages allowed or had certain * error codes for NULL so send them through the NULL allowed thunk. * Ventura Publisher does this */ switch (msg) { default: return SfnINSTRING(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); break; case CB_FINDSTRING: return SfnINSTRINGNULL(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); break; } } /***************************************************************************\ * fnOUTCBOXSTRING * * Returns an lbox string - a string that treats lParam as a string pointer or * a DWORD depending on CBS_HASSTRINGS and ownerdraw. * * 04-12-91 ScottLu Created. \***************************************************************************/ LRESULT SfnOUTCBOXSTRING( PWND pwnd, UINT msg, WPARAM wParam, LPARAM lParam, ULONG_PTR xParam, PROC xpfn, DWORD dwSCMSFlags, PSMS psms) { DWORD dw; BOOL bNotString; DWORD dwRet; TL tlpwnd; /* * See if the control is ownerdraw and does not have the CBS_HASSTRINGS * style. If so, treat lParam as a DWORD. */ if (!RevalidateHwnd(HW(pwnd))) { return 0L; } dw = pwnd->style; bNotString = (!(dw & CBS_HASSTRINGS) && (dw & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))); /* * Make this special call which'll know how to copy this string. */ ThreadLock(pwnd, &tlpwnd); dwRet = ClientGetListboxString(pwnd, msg, wParam, (PLARGE_UNICODE_STRING)lParam, xParam, xpfn, dwSCMSFlags, bNotString, psms); ThreadUnlock(&tlpwnd); return dwRet; } /***************************************************************************\ * fnPOWERBROADCAST * * Make sure we send the correct message when we resume. * * History: * 02-Dec-1996 JerrySh Created. * 26-Nov-2001 JasonSch Added code to validate pwnd. \***************************************************************************/ LRESULT SfnPOWERBROADCAST( PWND pwnd, UINT msg, WPARAM wParam, LPARAM lParam, ULONG_PTR xParam, PROC xpfn, DWORD dwSCMSFlags, PSMS psms) { if (!RevalidateHwnd(HW(pwnd))) { return 0L; } switch (wParam) { case PBT_APMQUERYSUSPEND: SetWF(pwnd, WFGOTQUERYSUSPENDMSG); break; case PBT_APMQUERYSUSPENDFAILED: if (!TestWF(pwnd, WFGOTQUERYSUSPENDMSG)) return 0; ClrWF(pwnd, WFGOTQUERYSUSPENDMSG); break; case PBT_APMSUSPEND: ClrWF(pwnd, WFGOTQUERYSUSPENDMSG); SetWF(pwnd, WFGOTSUSPENDMSG); break; case PBT_APMRESUMESUSPEND: case PBT_APMRESUMECRITICAL: // // If we're resuming and we never got a suspend message. // Here we convert our message into a critical resume. // if( !TestWF(pwnd, WFGOTSUSPENDMSG) ) { wParam = PBT_APMRESUMECRITICAL; } // // Now clear any 'suspend' messages that our // window may have previously recieved. // ClrWF(pwnd, WFGOTQUERYSUSPENDMSG); ClrWF(pwnd, WFGOTSUSPENDMSG); break; } return SfnDWORD(pwnd, msg, wParam, lParam, xParam, xpfn, dwSCMSFlags, psms); }