/* registered Logon process */
PW32PROCESS LogonProcess = NULL;
-VOID W32kRegisterPrimitiveMessageQueue(VOID)
-{
- extern PUSER_MESSAGE_QUEUE pmPrimitiveMessageQueue;
- if( !pmPrimitiveMessageQueue )
- {
- PW32THREAD pThread;
- pThread = PsGetCurrentThreadWin32Thread();
- if( pThread && pThread->MessageQueue )
- {
- pmPrimitiveMessageQueue = pThread->MessageQueue;
- IntReferenceMessageQueue(pmPrimitiveMessageQueue);
- DPRINT( "Installed primitive input queue.\n" );
- }
- }
- else
- {
- DPRINT1( "Alert! Someone is trying to steal the primitive queue.\n" );
- }
-}
-
-VOID W32kUnregisterPrimitiveMessageQueue(VOID)
-{
- extern PUSER_MESSAGE_QUEUE pmPrimitiveMessageQueue;
- IntDereferenceMessageQueue(pmPrimitiveMessageQueue);
- pmPrimitiveMessageQueue = NULL;
-}
-
-PUSER_MESSAGE_QUEUE W32kGetPrimitiveMessageQueue()
-{
- extern PUSER_MESSAGE_QUEUE pmPrimitiveMessageQueue;
- return pmPrimitiveMessageQueue;
-}
-
BOOL FASTCALL
co_IntRegisterLogonProcess(HANDLE ProcessId, BOOL Register)
{
switch(Routine)
{
- case NOPARAM_ROUTINE_REGISTER_PRIMITIVE:
- W32kRegisterPrimitiveMessageQueue();
- Result = (DWORD)TRUE;
- break;
-
case NOPARAM_ROUTINE_DESTROY_CARET:
Result = (DWORD)co_IntDestroyCaret(PsGetCurrentThread()->Tcb.Win32Thread);
break;
static LOGFONTW DefaultFont = {
-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS,
- L"Bitstream Vera Sans"
+ L"MS Sans Serif"
};
RtlZeroMemory(&QueryTable, sizeof(QueryTable));
{
PWINSTATION_OBJECT WinStaObject;
NTSTATUS Status;
+ BOOL bChanged = FALSE;
static BOOL bInitialized = FALSE;
static LOGFONTW IconFont;
static NONCLIENTMETRICSW pMetrics;
+ static MINIMIZEDMETRICS MinimizedMetrics;
static BOOL GradientCaptions = TRUE;
static UINT FocusBorderHeight = 1;
static UINT FocusBorderWidth = 1;
pMetrics.iMenuHeight = UserGetSystemMetrics(SM_CYMENUSIZE);
pMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
+ MinimizedMetrics.cbSize = sizeof(MINIMIZEDMETRICS);
+ MinimizedMetrics.iWidth = UserGetSystemMetrics(SM_CXMINIMIZED);
+ MinimizedMetrics.iHorzGap = UserGetSystemMetrics(SM_CXMINSPACING);
+ MinimizedMetrics.iVertGap = UserGetSystemMetrics(SM_CYMINSPACING);
+ MinimizedMetrics.iArrange = ARW_HIDE;
+
bInitialized = TRUE;
}
case SPI_SETDOUBLECLKHEIGHT:
case SPI_SETDOUBLECLICKTIME:
case SPI_SETDESKWALLPAPER:
+ case SPI_SETSCREENSAVERRUNNING:
+ case SPI_SETSCREENSAVETIMEOUT:
+ case SPI_SETFLATMENU:
+ /* We will change something, so set the flag here */
+ bChanged = TRUE;
case SPI_GETDESKWALLPAPER:
case SPI_GETWHEELSCROLLLINES:
case SPI_GETWHEELSCROLLCHARS:
- case SPI_SETSCREENSAVERRUNNING:
case SPI_GETSCREENSAVERRUNNING:
case SPI_GETSCREENSAVETIMEOUT:
- case SPI_SETSCREENSAVETIMEOUT:
+ case SPI_GETSCREENSAVEACTIVE:
case SPI_GETFLATMENU:
- case SPI_SETFLATMENU:
{
PSYSTEM_CURSORINFO CurInfo;
switch(uiAction)
{
case SPI_GETFLATMENU:
- if (pvParam != NULL) *((UINT*)pvParam) = WinStaObject->FlatMenu;
- return TRUE;
+ ASSERT(pvParam);
+ *((UINT*)pvParam) = WinStaObject->FlatMenu;
break;
case SPI_SETFLATMENU:
- WinStaObject->FlatMenu = uiParam;
+ WinStaObject->FlatMenu = uiParam;
break;
case SPI_GETSCREENSAVETIMEOUT:
- if (pvParam != NULL) *((UINT*)pvParam) = WinStaObject->ScreenSaverTimeOut;
- return TRUE;
- break;
- case SPI_SETSCREENSAVETIMEOUT:
- WinStaObject->ScreenSaverTimeOut = uiParam;
+ ASSERT(pvParam);
+ *((UINT*)pvParam) = WinStaObject->ScreenSaverTimeOut;
+ break;
+ case SPI_SETSCREENSAVETIMEOUT:
+ WinStaObject->ScreenSaverTimeOut = uiParam;
break;
case SPI_GETSCREENSAVERRUNNING:
if (pvParam != NULL) *((BOOL*)pvParam) = WinStaObject->ScreenSaverRunning;
- return TRUE;
break;
- case SPI_SETSCREENSAVERRUNNING:
+ case SPI_SETSCREENSAVERRUNNING:
if (pvParam != NULL) *((BOOL*)pvParam) = WinStaObject->ScreenSaverRunning;
- WinStaObject->ScreenSaverRunning = uiParam;
+ WinStaObject->ScreenSaverRunning = uiParam;
+ break;
+ case SPI_GETSCREENSAVEACTIVE:
+ /* FIXME: how to disable the screensaver? */
+ ASSERT(pvParam);
+ *((BOOL*)pvParam) = TRUE;
break;
case SPI_GETWHEELSCROLLLINES:
+ ASSERT(pvParam);
CurInfo = IntGetSysCursorInfo(WinStaObject);
- if (pvParam != NULL) *((UINT*)pvParam) = CurInfo->WheelScroLines;
+ *((UINT*)pvParam) = CurInfo->WheelScroLines;
/* FIXME add this value to scroll list as scroll value ?? */
- return TRUE;
break;
case SPI_GETWHEELSCROLLCHARS:
+ ASSERT(pvParam);
CurInfo = IntGetSysCursorInfo(WinStaObject);
- if (pvParam != NULL) *((UINT*)pvParam) = CurInfo->WheelScroChars;
+ *((UINT*)pvParam) = CurInfo->WheelScroChars;
// FIXME add this value to scroll list as scroll value ??
- return TRUE;
break;
case SPI_SETDOUBLECLKWIDTH:
CurInfo = IntGetSysCursorInfo(WinStaObject);
if(!KeyValuePartialInfo)
{
NtClose(KeyHandle);
- return 0;
+ return FALSE;
}
Status = ZwQueryValueKey(KeyHandle, &Tile, KeyValuePartialInformation,
{
ZwClose(KeyHandle);
ExFreePool(KeyValuePartialInfo);
- return 0;
+ return FALSE;
}
Tile.Length = KeyValuePartialInfo->DataLength;
if(!KeyValuePartialInfo)
{
ZwClose(KeyHandle);
- return 0;
+ return FALSE;
}
Status = ZwQueryValueKey(KeyHandle, &Style, KeyValuePartialInformation,
{
ZwClose(KeyHandle);
ExFreePool(KeyValuePartialInfo);
- return 0;
+ return FALSE;
}
Style.Length = KeyValuePartialInfo->DataLength;
/* FIXME save the value to the registry */
ObDereferenceObject(WinStaObject);
- return TRUE;
+ break;
}
case SPI_SETWORKAREA:
{
ASSERT(pvParam);
rc = (RECT*)pvParam;
Desktop->WorkArea = *rc;
+ bChanged = TRUE;
- return TRUE;
+ break;
}
case SPI_GETWORKAREA:
{
ASSERT(pvParam);
IntGetDesktopWorkArea(Desktop, (PRECT)pvParam);
- return TRUE;
+ break;
}
case SPI_SETGRADIENTCAPTIONS:
{
GradientCaptions = (pvParam != NULL);
/* FIXME - should be checked if the color depth is higher than 8bpp? */
- return TRUE;
+ bChanged = TRUE;
+ break;
}
case SPI_GETGRADIENTCAPTIONS:
{
BOOL Ret = GradientCaptions;
hDC = IntGetScreenDC();
- if(hDC)
+ if(!hDC)
{
+ return FALSE;
+ }
Ret = (NtGdiGetDeviceCaps(hDC, BITSPIXEL) > 8) && Ret;
ASSERT(pvParam);
*((PBOOL)pvParam) = Ret;
- return TRUE;
+ break;
}
- return FALSE;
- }
case SPI_SETFONTSMOOTHING:
{
IntEnableFontRendering(uiParam != 0);
- return TRUE;
+ bChanged = TRUE;
+ break;
}
case SPI_GETFONTSMOOTHING:
{
ASSERT(pvParam);
*((BOOL*)pvParam) = IntIsFontRenderingEnabled();
- return TRUE;
+ break;
}
case SPI_GETICONTITLELOGFONT:
{
ASSERT(pvParam);
*((LOGFONTW*)pvParam) = IconFont;
- return TRUE;
+ break;
}
case SPI_GETNONCLIENTMETRICS:
{
ASSERT(pvParam);
*((NONCLIENTMETRICSW*)pvParam) = pMetrics;
- return TRUE;
+ break;
+ }
+ case SPI_SETNONCLIENTMETRICS:
+ {
+ ASSERT(pvParam);
+ pMetrics = *((NONCLIENTMETRICSW*)pvParam);
+ bChanged = TRUE;
+ break;
+ }
+ case SPI_GETMINIMIZEDMETRICS:
+ {
+ ASSERT(pvParam);
+ *((MINIMIZEDMETRICS*)pvParam) = MinimizedMetrics;
+ break;
+ }
+ case SPI_SETMINIMIZEDMETRICS:
+ {
+ ASSERT(pvParam);
+ MinimizedMetrics = *((MINIMIZEDMETRICS*)pvParam);
+ bChanged = TRUE;
+ break;
}
case SPI_GETFOCUSBORDERHEIGHT:
{
ASSERT(pvParam);
*((UINT*)pvParam) = FocusBorderHeight;
- return TRUE;
+ break;
}
case SPI_GETFOCUSBORDERWIDTH:
{
ASSERT(pvParam);
*((UINT*)pvParam) = FocusBorderWidth;
- return TRUE;
+ break;
}
case SPI_SETFOCUSBORDERHEIGHT:
{
FocusBorderHeight = (UINT)pvParam;
- return TRUE;
+ bChanged = TRUE;
+ break;
}
case SPI_SETFOCUSBORDERWIDTH:
{
FocusBorderWidth = (UINT)pvParam;
- return TRUE;
+ bChanged = TRUE;
+ break;
}
default:
return FALSE;
}
}
- return FALSE;
+ /* Did we change something ? */
+ if (bChanged)
+ {
+ /* Shall we send a WM_SETTINGCHANGE message ? */
+ if (fWinIni & (SPIF_UPDATEINIFILE | SPIF_SENDCHANGE))
+ {
+ /* Broadcast WM_SETTINGCHANGE to all toplevel windows */
+ /* FIXME: lParam should be pointer to a string containing the reg key */
+ UserPostMessage(HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)uiAction, 0);
+}
+ }
+ return TRUE;
}
/*
case SPI_SETSCREENSAVERRUNNING:
case SPI_GETSCREENSAVETIMEOUT:
case SPI_SETSCREENSAVETIMEOUT:
+ case SPI_GETSCREENSAVEACTIVE:
case SPI_GETFLATMENU:
case SPI_SETFLATMENU:
{
return( TRUE);
}
case SPI_GETNONCLIENTMETRICS:
+ case SPI_SETNONCLIENTMETRICS:
{
NONCLIENTMETRICSW metrics;
- Status = MmCopyFromCaller(&metrics.cbSize, pvParam, sizeof(UINT));
+ Status = MmCopyFromCaller(&metrics, pvParam, sizeof(NONCLIENTMETRICSW));
if(!NT_SUCCESS(Status))
{
SetLastNtError(Status);
return( FALSE);
}
- Status = MmCopyToCaller(pvParam, &metrics.cbSize, sizeof(NONCLIENTMETRICSW));
+ Status = MmCopyToCaller(pvParam, &metrics, sizeof(NONCLIENTMETRICSW));
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return( FALSE);
+ }
+ return( TRUE);
+ }
+ case SPI_GETMINIMIZEDMETRICS:
+ case SPI_SETMINIMIZEDMETRICS:
+ {
+ MINIMIZEDMETRICS minimetrics;
+
+ Status = MmCopyFromCaller(&minimetrics, pvParam, sizeof(MINIMIZEDMETRICS));
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return( FALSE);
+ }
+ if(minimetrics.cbSize != sizeof(MINIMIZEDMETRICS))
+ {
+ SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ return( FALSE);
+ }
+ if(!IntSystemParametersInfo(uiAction, uiParam, &minimetrics, fWinIni))
+ {
+ return( FALSE);
+ }
+
+ Status = MmCopyToCaller(pvParam, &minimetrics, sizeof(MINIMIZEDMETRICS));
if(!NT_SUCCESS(Status))
{
SetLastNtError(Status);
}
default :
{
- DPRINT1("UserSystemParametersInfo : uiAction = %x \n",uiAction );
+ DPRINT1("FIXME: UNIMPLEMENTED SPI Code: %lx \n",uiAction );
break;
}
}