00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
#include "precomp.h"
00014
#pragma hdrstop
00015
00016
00017
00018
00019
00020
00021
00022
00023 HBRUSH
ghbrWhite =
NULL;
00024 HBRUSH
ghbrBlack =
NULL;
00025
00026
00027
00028
00029
00030
00031
00032 HBRUSH WINAPI
GetSysColorBrush(
00033
int nIndex)
00034 {
00035
if ((nIndex < 0) || (nIndex >= COLOR_MAX))
00036
return NULL;
00037
00038
return SYSHBRUSH(nIndex);
00039 }
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 LPCOLORREF gpOriginalRGBs =
NULL;
00061 UINT gcOriginalRGBs = 0;
00062
00063 WINUSERAPI HANDLE WINAPI
SetSysColorsTemp(
00064 CONST COLORREF *lpRGBs,
00065 CONST HBRUSH *lpBrushes,
00066 UINT_PTR cBrushes)
00067 {
00068
UINT cbRGBSize;
00069
UINT i;
00070
UINT abElements[COLOR_MAX];
00071
00072
00073
00074
00075
if (lpRGBs ==
NULL) {
00076
00077
00078
00079
00080
00081 UNREFERENCED_PARAMETER(lpBrushes);
00082 UserAssert(lpBrushes ==
NULL);
00083 UserAssert(cBrushes == (ULONG_PTR)
gpOriginalRGBs);
00084
00085
if (
gpOriginalRGBs ==
NULL) {
00086 RIPMSG0(RIP_ERROR,
"SetSysColorsTemp: Can not restore if not saved");
00087
return NULL;
00088 }
00089
00090
00091
00092
00093 UserAssert((
sizeof(abElements)/
sizeof(abElements[0])) >=
gcOriginalRGBs);
00094
for (i = 0; i <
gcOriginalRGBs; i++)
00095 abElements[i] = i;
00096
00097
NtUserSetSysColors(
gcOriginalRGBs, abElements,
gpOriginalRGBs, 0);
00098
00099
UserLocalFree(
gpOriginalRGBs);
00100
00101
gpOriginalRGBs =
NULL;
00102
gcOriginalRGBs = 0;
00103
00104
return (HANDLE)
TRUE;
00105 }
00106
00107
00108
00109
00110
00111
if (cBrushes > COLOR_MAX) {
00112 RIPMSG1(RIP_ERROR,
"SetSysColorsTemp: trying to set too many colors %lX", cBrushes);
00113
return NULL;
00114 }
00115
00116
00117
00118
00119
if (
gpOriginalRGBs !=
NULL) {
00120 RIPMSG0(RIP_ERROR,
"SetSysColorsTemp: temp colors already set");
00121
return NULL;
00122 }
00123
00124
00125
00126
00127
00128
00129 cbRGBSize =
sizeof(COLORREF) * (
UINT)cBrushes;
00130
00131 UserAssert(
sizeof(COLORREF) ==
sizeof(
int));
00132
gpOriginalRGBs =
UserLocalAlloc(HEAP_ZERO_MEMORY, cbRGBSize);
00133
00134
if (
gpOriginalRGBs ==
NULL) {
00135 RIPMSG0(RIP_WARNING,
"SetSysColorsTemp: unable to alloc temp colors buffer");
00136 }
00137
00138 RtlCopyMemory(
gpOriginalRGBs,
gpsi->argbSystem, cbRGBSize);
00139
00140
00141
00142
00143 UserAssert( (
sizeof(abElements)/
sizeof(abElements[0])) >= cBrushes);
00144
00145
for (i = 0; i < cBrushes; i++)
00146 abElements[i] = i;
00147
00148
NtUserSetSysColors((
UINT)cBrushes, abElements, lpRGBs, 0);
00149
00150
gcOriginalRGBs = (
UINT)cBrushes;
00151
00152
return gpOriginalRGBs;
00153 }
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 LPWSTR
TextAlloc(
00165 LPCWSTR lpszSrc)
00166 {
00167 LPWSTR pszT;
00168
DWORD cbString;
00169
00170
if (lpszSrc ==
NULL)
00171
return NULL;
00172
00173 cbString = (wcslen(lpszSrc) + 1) *
sizeof(WCHAR);
00174
00175
if (pszT = (LPWSTR)
UserLocalAlloc(HEAP_ZERO_MEMORY, cbString)) {
00176
00177 RtlCopyMemory(pszT, lpszSrc, cbString);
00178 }
00179
00180
return pszT;
00181 }
00182
00183
#if DBG
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
VOID CheckCurrentDesktop(
00194 PVOID p)
00195 {
00196 UserAssert(p >=
GetClientInfo()->pDeskInfo->pvDesktopBase &&
00197 p < GetClientInfo()->pDeskInfo->pvDesktopLimit);
00198 }
00199
#endif
00200
00201
00202
00203
00204
00205
00206
00207
00208 VOID WINAPI
SetLastErrorEx(
00209 DWORD dwErrCode,
00210 DWORD dwType
00211 )
00212 {
00213 UNREFERENCED_PARAMETER(dwType);
00214
00215 SetLastError(dwErrCode);
00216 }
00217
00218
#if defined(_X86_)
00219
00220
00221
00222
00223
00224
00225
00226
static CONST PROC FunctionsToSkip[] = {
00227
NtUserWaitMessage,
00228
NtUserLockWorkStation,
00229 };
00230
00231
UINT InitializeWin32EntryTable(
00232 PBOOLEAN pbEntryTable)
00233 {
00234
#if DBG
00235
00236
00237 UNREFERENCED_PARAMETER(pbEntryTable);
00238
return 0;
00239
#else
00240
UINT i;
00241
PBYTE pb;
00242
00243
if (pbEntryTable) {
00244
for (i = 0; i <
ARRAY_SIZE(FunctionsToSkip); i++) {
00245 pb = (
PBYTE)FunctionsToSkip[i];
00246 pbEntryTable[*((WORD *)(pb+1)) - 0x1000] =
TRUE;
00247 }
00248
00249 }
00250
00251
return gDispatchTableValues;
00252
#endif
00253
}
00254
#endif
00255
00256
00257
00258
00259
00260
00261
00262 BOOL GetLastInputInfo (PLASTINPUTINFO plii)
00263 {
00264 VALIDATIONFNNAME(
GetLastInputInfo);
00265
00266
if (plii->cbSize !=
sizeof(LASTINPUTINFO)) {
00267 VALIDATIONFAIL(plii->cbSize);
00268 }
00269
00270 plii->dwTime =
gpsi->dwLastRITEventTickCount;
00271
00272
return TRUE;
00273 VALIDATIONERROR(
FALSE);
00274 }
00275