mirror of
https://github.com/reactos/wine.git
synced 2025-02-10 14:23:52 +00:00
user32: Delay message spying initialization until needed.
This commit is contained in:
parent
0f71ff281f
commit
003355946f
@ -1998,11 +1998,17 @@ static const SPY_NOTIFY spnfy_array[] = {
|
||||
};
|
||||
#undef SPNFY
|
||||
|
||||
static unsigned char SPY_Exclude[SPY_MAX_MSGNUM+1];
|
||||
static unsigned char SPY_ExcludeDWP = 0;
|
||||
static unsigned char *spy_exclude;
|
||||
|
||||
#define SPY_EXCLUDE(msg) \
|
||||
(SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
|
||||
static inline BOOL exclude_msg( UINT msg )
|
||||
{
|
||||
return spy_exclude[ min( msg, SPY_MAX_MSGNUM ) ];
|
||||
}
|
||||
|
||||
static inline BOOL exclude_dwp(void)
|
||||
{
|
||||
return spy_exclude[SPY_MAX_MSGNUM + 1];
|
||||
}
|
||||
|
||||
|
||||
typedef struct
|
||||
@ -2017,7 +2023,7 @@ typedef struct
|
||||
WCHAR wnd_name[16]; /* window name for message */
|
||||
} SPY_INSTANCE;
|
||||
|
||||
static int indent_tls_index;
|
||||
static int indent_tls_index = TLS_OUT_OF_INDEXES;
|
||||
|
||||
/***********************************************************************
|
||||
* get_indent_level
|
||||
@ -2521,6 +2527,70 @@ static void SPY_DumpStructure(const SPY_INSTANCE *sp_e, BOOL enter)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* spy_init
|
||||
*/
|
||||
static BOOL spy_init(void)
|
||||
{
|
||||
int i;
|
||||
char buffer[1024];
|
||||
HKEY hkey;
|
||||
char *exclude;
|
||||
|
||||
if (!TRACE_ON(message)) return FALSE;
|
||||
|
||||
if (indent_tls_index == TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
DWORD index = TlsAlloc();
|
||||
if (InterlockedCompareExchange( &indent_tls_index, index, TLS_OUT_OF_INDEXES ) != TLS_OUT_OF_INDEXES)
|
||||
TlsFree( index );
|
||||
}
|
||||
|
||||
if (spy_exclude) return TRUE;
|
||||
exclude = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, SPY_MAX_MSGNUM + 2 );
|
||||
|
||||
/* @@ Wine registry key: HKCU\Software\Wine\Debug */
|
||||
if(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Debug", &hkey))
|
||||
{
|
||||
DWORD type, count = sizeof(buffer);
|
||||
|
||||
buffer[0] = 0;
|
||||
if (!RegQueryValueExA(hkey, "SpyInclude", 0, &type, (LPBYTE) buffer, &count) &&
|
||||
strcmp( buffer, "INCLUDEALL" ))
|
||||
{
|
||||
TRACE("Include=%s\n", buffer );
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++)
|
||||
exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
|
||||
}
|
||||
|
||||
count = sizeof(buffer);
|
||||
buffer[0] = 0;
|
||||
if (!RegQueryValueExA(hkey, "SpyExclude", 0, &type, (LPBYTE) buffer, &count))
|
||||
{
|
||||
TRACE("Exclude=%s\n", buffer );
|
||||
if (!strcmp( buffer, "EXCLUDEALL" ))
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++) exclude[i] = TRUE;
|
||||
else
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++)
|
||||
exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
|
||||
}
|
||||
|
||||
count = sizeof(buffer);
|
||||
if(!RegQueryValueExA(hkey, "SpyExcludeDWP", 0, &type, (LPBYTE) buffer, &count))
|
||||
exclude[SPY_MAX_MSGNUM + 1] = atoi(buffer);
|
||||
|
||||
RegCloseKey(hkey);
|
||||
}
|
||||
|
||||
if (InterlockedCompareExchangePointer( (void **)&spy_exclude, exclude, NULL ))
|
||||
HeapFree( GetProcessHeap(), 0, exclude );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SPY_EnterMessage
|
||||
*/
|
||||
@ -2531,7 +2601,7 @@ void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
|
||||
int indent;
|
||||
DWORD save_error = GetLastError();
|
||||
|
||||
if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
|
||||
if (!spy_init() || exclude_msg(msg)) return;
|
||||
|
||||
sp_e.msgnum = msg;
|
||||
sp_e.msg_hwnd = hWnd;
|
||||
@ -2566,7 +2636,7 @@ void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
|
||||
break;
|
||||
|
||||
case SPY_DEFWNDPROC:
|
||||
if( SPY_ExcludeDWP ) return;
|
||||
if (exclude_dwp()) return;
|
||||
TRACE("%*s(%p) DefWindowProc:[%04x] %s wp=%08lx lp=%08lx\n",
|
||||
indent, "", hWnd, msg, sp_e.msg_name, wParam, lParam );
|
||||
break;
|
||||
@ -2586,8 +2656,8 @@ void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
|
||||
int indent;
|
||||
DWORD save_error = GetLastError();
|
||||
|
||||
if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
|
||||
(SPY_ExcludeDWP && iFlag == SPY_RESULT_DEFWND))
|
||||
if (!TRACE_ON(message) || exclude_msg(msg) ||
|
||||
(exclude_dwp() && iFlag == SPY_RESULT_DEFWND))
|
||||
return;
|
||||
|
||||
sp_e.msgnum = msg;
|
||||
@ -2619,53 +2689,3 @@ void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
|
||||
}
|
||||
SetLastError( save_error );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SPY_Init
|
||||
*/
|
||||
int SPY_Init(void)
|
||||
{
|
||||
int i;
|
||||
char buffer[1024];
|
||||
HKEY hkey;
|
||||
|
||||
if (!TRACE_ON(message)) return TRUE;
|
||||
|
||||
indent_tls_index = TlsAlloc();
|
||||
/* @@ Wine registry key: HKCU\Software\Wine\Debug */
|
||||
if(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Debug", &hkey))
|
||||
{
|
||||
DWORD type, count = sizeof(buffer);
|
||||
|
||||
buffer[0] = 0;
|
||||
if (!RegQueryValueExA(hkey, "SpyInclude", 0, &type, (LPBYTE) buffer, &count) &&
|
||||
strcmp( buffer, "INCLUDEALL" ))
|
||||
{
|
||||
TRACE("Include=%s\n", buffer );
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++)
|
||||
SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
|
||||
}
|
||||
|
||||
count = sizeof(buffer);
|
||||
buffer[0] = 0;
|
||||
if (!RegQueryValueExA(hkey, "SpyExclude", 0, &type, (LPBYTE) buffer, &count))
|
||||
{
|
||||
TRACE("Exclude=%s\n", buffer );
|
||||
if (!strcmp( buffer, "EXCLUDEALL" ))
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
|
||||
else
|
||||
for (i = 0; i <= SPY_MAX_MSGNUM; i++)
|
||||
SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
|
||||
}
|
||||
|
||||
SPY_ExcludeDWP = 0;
|
||||
count = sizeof(buffer);
|
||||
if(!RegQueryValueExA(hkey, "SpyExcludeDWP", 0, &type, (LPBYTE) buffer, &count))
|
||||
SPY_ExcludeDWP = atoi(buffer);
|
||||
|
||||
RegCloseKey(hkey);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -281,9 +281,6 @@ static BOOL process_attach(void)
|
||||
/* Initialize built-in window classes */
|
||||
CLASS_RegisterBuiltinClasses();
|
||||
|
||||
/* Initialize message spying */
|
||||
if (!SPY_Init()) return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -267,7 +267,6 @@ extern const char *SPY_GetVKeyName(WPARAM wParam) DECLSPEC_HIDDEN;
|
||||
extern void SPY_EnterMessage( INT iFlag, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
|
||||
extern void SPY_ExitMessage( INT iFlag, HWND hwnd, UINT msg,
|
||||
LRESULT lReturn, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
|
||||
extern int SPY_Init(void) DECLSPEC_HIDDEN;
|
||||
|
||||
#include "pshpack1.h"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user