mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
514 lines
12 KiB
514 lines
12 KiB
//+----------------------------------------------------------------
|
|
//
|
|
// Functions: TLSxxx functions
|
|
//
|
|
// Purpose: temp place for old style TLS functions until DCOM is
|
|
// defined for Win95
|
|
//
|
|
// History: 02-Nov-95 Rickhi Separated from tls.h
|
|
//
|
|
//-----------------------------------------------------------------
|
|
|
|
#define ENDPOINT_ID_INVALID 0xFFFFFFFF
|
|
|
|
HWND CreateDdeClientHwnd(void);
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetDdeClientWindow()
|
|
//
|
|
// Synopsis: Returns a pointer to the per thread DdeClient window. If one
|
|
// has not been created, it will create it and return
|
|
//
|
|
// Returns: Pointer to the DdeClientWindow. This window is used for per
|
|
// thread cleanup
|
|
//
|
|
// History: 12-12-94 kevinro Created
|
|
//----------------------------------------------------------------------------
|
|
inline void * TLSGetDdeClientWindow()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (tls->hwndDdeClient == NULL)
|
|
{
|
|
tls->hwndDdeClient = CreateDdeClientHwnd();
|
|
}
|
|
return tls->hwndDdeClient;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetLogicalThread
|
|
//
|
|
// Synopsis: sets the logical thread id
|
|
//
|
|
// Arguments: [riid] - the id for the logical thread
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetLogicalThread(REFIID riid)
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->dwFlags |= OLETLS_UUIDINITIALIZED;
|
|
tls->LogicalThreadId = riid;
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetCallerTID
|
|
//
|
|
// Synopsis: sets the TID of current caller
|
|
//
|
|
// Arguments: [TIDCaller] - TID of app making the incoming call
|
|
// [fLocal] - whether TID is in this process
|
|
// [pTIDCallerPrev] - TID of app making the previous incoming call
|
|
// [pfLocalPrev] - whether previous TID is in this process
|
|
//
|
|
// Notes: these are valid only during object RPC. They are here to
|
|
// support focus management in IOleObject::DoVerb, where
|
|
// app queues get linked together.
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetCallerTID(DWORD TIDCaller, BOOL fLocal,
|
|
DWORD *pTIDCallerPrev, BOOL *pfLocalPrev)
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// save the old values
|
|
*pTIDCallerPrev = tls->dwTIDCaller;
|
|
*pfLocalPrev = (tls->dwFlags & OLETLS_LOCALTID) ? TRUE : FALSE;
|
|
|
|
// set the new values
|
|
tls->dwTIDCaller = TIDCaller;
|
|
tls->dwFlags |= (fLocal) ? OLETLS_LOCALTID : 0;
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetCallerTID
|
|
//
|
|
// Synopsis: gets the TID of current caller
|
|
//
|
|
// Arguments: [pTIDCaller] - TID of app making the incoming call
|
|
//
|
|
// Returns: [S_OK] - tid set, caller in same process
|
|
// [S_FALSE] - tid set, caller in different process
|
|
// [E_OUTOFMEMORY] - cant get TLS data
|
|
//
|
|
// Notes: these are valid only during object RPC. They are here to
|
|
// support focus management in IOleObject::DoVerb, where
|
|
// app queues get linked together.
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline HRESULT TLSGetCallerTID(DWORD *pTIDCaller)
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
*pTIDCaller = tls->dwTIDCaller;
|
|
return (tls->dwFlags & OLETLS_LOCALTID) ? S_OK : S_FALSE;
|
|
}
|
|
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetFault
|
|
//
|
|
// Synopsis: returns the per thread fault state
|
|
//
|
|
// Arguments: none
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline ULONG TLSGetFault()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->fault;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetFault
|
|
//
|
|
// Synopsis: sets the per thread fault state
|
|
//
|
|
// Arguments: [ulFault] - fault code
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline void TLSSetFault(ULONG ulFault)
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->fault = ulFault;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetChannelControl
|
|
//
|
|
// Synopsis: Sets pointer to the per thread ChannelControl
|
|
//
|
|
// Arguments: [pChanCont] -- Pointer to be the DDECallControl for thread
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetChannelControl( void *pChanCont )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->pChanCtrl = pChanCont;
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetChannelControl
|
|
//
|
|
// Synopsis: Gets pointer to the per thread ChannelControl
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline void * TLSGetChannelControl()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->pChanCtrl;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetService
|
|
//
|
|
// Synopsis: Sets pointer to the per thread Service
|
|
//
|
|
// Arguments: [pService] -- Pointer to the service for the thread.
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetService( void *pService )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->pService = pService;
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetService
|
|
//
|
|
// Synopsis: Gets pointer to the per thread Service
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline void * TLSGetService()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->pService;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetServiceList
|
|
//
|
|
// Synopsis: Sets pointer to the per thread Service List
|
|
//
|
|
// Arguments: [pServiceList] -- Pointer to the service list for the thread.
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetServiceList( void *pServiceList )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->pServiceList = pServiceList;
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetServiceList
|
|
//
|
|
// Synopsis: Gets pointer to the per thread Service List
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline void * TLSGetServiceList()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->pServiceList;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetEndPointPtr
|
|
//
|
|
// Synopsis: Gets pointer to the per thread endpoint
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline DWORD * TLSGetEndPointPtr()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return &tls->dwEndPoint;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetCallControl
|
|
//
|
|
// Synopsis: Sets pointer to the per thread CallControl
|
|
//
|
|
// Arguments: [pCallCont] -- Pointer to be the CallControl for thread
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline BOOL TLSSetCallControl( void *pCallCont )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->pCallCont = pCallCont;
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetCallControl
|
|
//
|
|
// Synopsis: Gets pointer to the per thread CallControl
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// Notes: this is not AddRef'd
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
inline void * TLSGetCallControl()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->pCallCont;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetDdeCallControl
|
|
//
|
|
// Synopsis: Sets pointer to the per thread DDECallControl
|
|
//
|
|
// Arguments: [pDdeCallCont] -- Pointer to be the DDECallControl for thread
|
|
//
|
|
// History: 5-13-94 kevinro Created
|
|
//
|
|
// Notes:
|
|
//
|
|
// This is not AddRefed.
|
|
//----------------------------------------------------------------------------
|
|
inline BOOL TLSSetDdeCallControl( void *pDdeCallCont )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->pDdeCallCont = pDdeCallCont;
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetDdeCallControl
|
|
//
|
|
// Synopsis: Returns a pointer to the per thread DDECallControl
|
|
//
|
|
// Returns: DDECallControl interface for thread
|
|
//
|
|
// History: 5-13-94 kevinro Created
|
|
//
|
|
// Notes:
|
|
//
|
|
// This is not AddRef'd
|
|
//----------------------------------------------------------------------------
|
|
inline void * TLSGetDdeCallControl()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->pDdeCallCont;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSSetDdeServer
|
|
//
|
|
// Synopsis: Sets hwnd to CommonDdeServer window
|
|
//
|
|
// Arguments: [hwndDdeServer] --
|
|
//
|
|
// History: 5-13-94 kevinro Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
inline BOOL TLSSetDdeServer(HWND hwndDdeServer )
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
tls->hwndDdeServer = hwndDdeServer;
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: TLSGetDdeServer
|
|
//
|
|
// Synopsis: Returns a handle to the per thread DdeServer window
|
|
//
|
|
// Returns: hwndDdeServer for thread
|
|
//
|
|
// History: 5-13-94 kevinro Created
|
|
//
|
|
// Notes:
|
|
//----------------------------------------------------------------------------
|
|
inline HWND TLSGetDdeServer()
|
|
{
|
|
HRESULT hr;
|
|
COleTls tls(hr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
return tls->hwndDdeServer;
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|