La paleta DirectDraw "exclusiva" no es realmente exclusiva

Mantenemos un videojuego antiguo que utiliza un modo de gráficos de 256 colores a pantalla completa con DirectDraw. El problema es que algunas aplicaciones que se ejecutan en segundo plano a veces intentan cambiar la paleta del sistema mientras se ejecuta el juego, lo que da como resultado gráficos dañados.

Podemos (a veces) detectar cuándo sucede esto procesando el mensaje WM_PALETTECHANGED. Hace unas pocas versiones, agregamos el registro (solo registre el título de la ventana / clase / nombre del proceso), lo que ayudó a los usuarios a identificar las aplicaciones ofensivas y cerrarlas. MSN Live Messenger fue un culpable común.

El problema empeoró cuando descubrimos que Windows Vista (y 7) lo hace "por sí mismo". Los parámetros WM_PALETTECHANGED apuntan hacia CSRSS y la ventana del escritorio. En Vista, una solución que a menudo funcionaba era abrir cualquier carpeta (Computadora, Documentos, etc.) y dejarla abierta mientras se ejecutaba el juego. Suena ridículo, pero funcionó, en la mayoría de los casos. En Windows 7, ni siquiera esta solución funcionó más. Los usuarios encontraron que al detener algunos servicios (Windows Update y el servicio de indexación) también se resolvió el problema en algunas configuraciones.

Hace algún tiempo, empecé a probar cosas al azar con la esperanza de encontrar una solución. Encontré que configurar la paleta GDI (usando Crear / Seleccionar paleta) antes de configurar la paleta DirectDraw (usando IDirectDrawPalette :: SetEntries) restauraría la paleta después de que se corrompiera (controlador WM_PALETTECHANGED). SetSystemPaletteUse y llamar a SetPalette en la superficie principal ayudó un poco más. Sin embargo, todavía hay un parpadeo perceptible cuando una aplicación intenta robar la paleta, que es especialmente prominente durante los desvanecimientos.

Pregunta: ¿hay alguna forma de obtener una paleta exclusiva "real" que no permita que otras aplicaciones cambien la paleta de Windows siempre y cuando nuestro juego mantenga el enfoque?