[ros-diffs] [turner] 19541: Read the registry to set the wallpaper mode in in WinSta.

turner at svn.reactos.com turner at svn.reactos.com
Fri Nov 25 05:15:14 CET 2005


Read the registry to set the wallpaper mode in in WinSta.
Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
  _____  

Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
--- trunk/reactos/subsys/win32k/ntuser/misc.c	2005-11-25 03:50:49 UTC
(rev 19540)
+++ trunk/reactos/subsys/win32k/ntuser/misc.c	2005-11-25 04:14:59 UTC
(rev 19541)
@@ -6,7 +6,7 @@

  * FILE:             subsys/win32k/ntuser/misc.c
  * PROGRAMER:        Ge van Geldorp (ge at gse.nl)
  * REVISION HISTORY:
- *       2003/05/22  Created
+ *       2003/05/22  CreatedStyleNum
  */
 
 #include <w32k.h>
@@ -928,7 +928,18 @@
                         the current wallpaper bitmap */
                      HBITMAP hOldBitmap, hNewBitmap;
                      ASSERT(pvParam);
-
+                     UNICODE_STRING Key =
RTL_CONSTANT_STRING(L"\\Registry\\User\\.Default\\Control
Panel\\Desktop"); 
+                     UNICODE_STRING Tile =
RTL_CONSTANT_STRING(L"TileWallpaper"); 
+                     UNICODE_STRING Style =
RTL_CONSTANT_STRING(L"WallpaperStyle");
+                     OBJECT_ATTRIBUTES KeyAttributes;
+                     NTSTATUS Status;
+                     HANDLE KeyHandle = NULL;
+                     PKEY_VALUE_PARTIAL_INFORMATION
KeyValuePartialInfo;
+                     ULONG Length = 0;
+                     ULONG ResLength = 0;
+                     ULONG TileNum = 0;
+                     ULONG StyleNum = 0;
+                     
                      hNewBitmap = *(HBITMAP*)pvParam;
                      if(hNewBitmap != NULL)
                      {
@@ -953,6 +964,96 @@
                         /* delete the old wallpaper */
                         NtGdiDeleteObject(hOldBitmap);
                      }
+                     
+                     /* Set the style */
+
+                     /*default value is center */
+                     WinStaObject->WallpaperMode = wmCenter;
+                     
+                     /* find the tile value in the registry */
+                     InitializeObjectAttributes(&KeyAttributes, &Key,
OBJ_CASE_INSENSITIVE,
+                              NULL, NULL);
+                     ZwOpenKey(&KeyHandle, KEY_READ, &KeyAttributes);
+
+                     Status = ZwQueryValueKey(KeyHandle, &Tile,
KeyValuePartialInformation,
+                                              0, 0, &ResLength);
+                            
+                     ResLength +=
sizeof(KEY_VALUE_PARTIAL_INFORMATION);
+                     KeyValuePartialInfo =
ExAllocatePoolWithTag(PagedPool, ResLength, TAG_STRING);
+                     Length = ResLength;
+
+                     if(!KeyValuePartialInfo)
+                     {
+                        NtClose(KeyHandle);
+                        return 0;
+                     }
+
+                     Status = ZwQueryValueKey(KeyHandle, &Tile,
KeyValuePartialInformation,
+
(PVOID)KeyValuePartialInfo, Length, &ResLength);
+                     if(!NT_SUCCESS(Status) ||
(KeyValuePartialInfo->Type != REG_SZ))
+                     {
+                        NtClose(KeyHandle);
+                        ExFreePool(KeyValuePartialInfo);
+                        return 0;
+                     }
+                
+                     Tile.Length = KeyValuePartialInfo->DataLength;
+                     Tile.MaximumLength =
KeyValuePartialInfo->DataLength;
+                     Tile.Buffer = (PWSTR)KeyValuePartialInfo->Data;
+                     
+                     Status = RtlUnicodeStringToInteger(&Tile, 0,
&TileNum);
+                     if(!NT_SUCCESS(Status))
+                     {
+                        TileNum = 0;
+                     }
+                     ExFreePool(KeyValuePartialInfo);
+                     
+                     /* start over again and look for the style*/
+                     ResLength = 0;
+                     Status = ZwQueryValueKey(KeyHandle, &Style,
KeyValuePartialInformation,
+                                              0, 0, &ResLength);
+                            
+                     ResLength +=
sizeof(KEY_VALUE_PARTIAL_INFORMATION);
+                     KeyValuePartialInfo =
ExAllocatePoolWithTag(PagedPool, ResLength, TAG_STRING);
+                     Length = ResLength;
+
+                     if(!KeyValuePartialInfo)
+                     {
+                        NtClose(KeyHandle);
+                        return 0;
+                     }
+
+                     Status = ZwQueryValueKey(KeyHandle, &Style,
KeyValuePartialInformation,
+
(PVOID)KeyValuePartialInfo, Length, &ResLength);
+                     if(!NT_SUCCESS(Status) ||
(KeyValuePartialInfo->Type != REG_SZ))
+                     {
+                        NtClose(KeyHandle);
+                        ExFreePool(KeyValuePartialInfo);
+                        return 0;
+                     }
+                
+                     Style.Length = KeyValuePartialInfo->DataLength;
+                     Style.MaximumLength =
KeyValuePartialInfo->DataLength;
+                     Style.Buffer = (PWSTR)KeyValuePartialInfo->Data;
+                     
+                     Status = RtlUnicodeStringToInteger(&Style, 0,
&StyleNum);
+                     if(!NT_SUCCESS(Status))
+                     {
+                        StyleNum = 0;
+                     }
+                     ExFreePool(KeyValuePartialInfo);
+                     
+                     /* Check the values we found in the registry */
+                     if(TileNum && !StyleNum)
+                     {
+                        WinStaObject->WallpaperMode = wmTile;
+                     }
+                     else if(!TileNum && StyleNum == 2)
+                     {
+                        WinStaObject->WallpaperMode = wmStretch;
+                     }
+                     
+                     NtClose(KeyHandle);
                      break;
                   }
                case SPI_GETDESKWALLPAPER:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051125/f35c2c2f/attachment.html


More information about the Ros-diffs mailing list