1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS user32.dll 4 * FILE: win32ss/user/user32/misc/stubs.c 5 * PURPOSE: User32.dll stubs 6 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) 7 * NOTES: If you implement a function, remove it from this file 8 * UPDATE HISTORY: 9 * 08-F05-2001 CSH Created 10 */ 11 12 #include <user32.h> 13 14 WINE_DEFAULT_DEBUG_CHANNEL(user32); 15 16 /* 17 * @unimplemented 18 */ 19 DWORD 20 WINAPI 21 WaitForInputIdle( 22 HANDLE hProcess, 23 DWORD dwMilliseconds) 24 { 25 // Need to call NtQueryInformationProcess and send ProcessId not hProcess. 26 return NtUserWaitForInputIdle(hProcess, dwMilliseconds, FALSE); 27 } 28 29 /****************************************************************************** 30 * SetDebugErrorLevel [USER32.@] 31 * Sets the minimum error level for generating debugging events 32 * 33 * PARAMS 34 * dwLevel [I] Debugging error level 35 * 36 * @unimplemented 37 */ 38 VOID 39 WINAPI 40 SetDebugErrorLevel( DWORD dwLevel ) 41 { 42 FIXME("(%lu): stub\n", dwLevel); 43 } 44 45 46 /* 47 * @implemented 48 */ 49 DWORD 50 WINAPI 51 GetAppCompatFlags(HTASK hTask) 52 { 53 PCLIENTINFO pci = GetWin32ClientInfo(); 54 55 return pci->dwCompatFlags; 56 } 57 58 /* 59 * @implemented 60 */ 61 DWORD 62 WINAPI 63 GetAppCompatFlags2(HTASK hTask) 64 { 65 PCLIENTINFO pci = GetWin32ClientInfo(); 66 67 return pci->dwCompatFlags2; 68 } 69 70 /* 71 * @unimplemented 72 */ 73 VOID 74 WINAPI 75 LoadLocalFonts ( VOID ) 76 { 77 UNIMPLEMENTED; 78 } 79 80 /* 81 * @unimplemented 82 */ 83 VOID 84 WINAPI 85 LoadRemoteFonts ( VOID ) 86 { 87 UNIMPLEMENTED; 88 } 89 90 /* 91 * @unimplemented 92 */ 93 VOID 94 WINAPI 95 RegisterSystemThread ( DWORD flags, DWORD reserved ) 96 { 97 UNIMPLEMENTED; 98 } 99 100 101 /* 102 * @implemented 103 */ 104 UINT 105 WINAPI 106 UserRealizePalette ( HDC hDC ) 107 { 108 return NtUserxRealizePalette(hDC); 109 } 110 111 112 /************************************************************************* 113 * SetSysColorsTemp (USER32.@) (Wine 10/22/2008) 114 * 115 * UNDOCUMENTED !! 116 * 117 * Called by W98SE desk.cpl Control Panel Applet: 118 * handle = SetSysColorsTemp(ptr, ptr, nCount); ("set" call) 119 * result = SetSysColorsTemp(NULL, NULL, handle); ("restore" call) 120 * 121 * pPens is an array of COLORREF values, which seems to be used 122 * to indicate the color values to create new pens with. 123 * 124 * pBrushes is an array of solid brush handles (returned by a previous 125 * CreateSolidBrush), which seems to contain the brush handles to set 126 * for the system colors. 127 * 128 * n seems to be used for 129 * a) indicating the number of entries to operate on (length of pPens, 130 * pBrushes) 131 * b) passing the handle that points to the previously used color settings. 132 * I couldn't figure out in hell what kind of handle this is on 133 * Windows. I just use a heap handle instead. Shouldn't matter anyway. 134 * 135 * RETURNS 136 * heap handle of our own copy of the current syscolors in case of 137 * "set" call, i.e. pPens, pBrushes != NULL. 138 * TRUE (unconditionally !) in case of "restore" call, 139 * i.e. pPens, pBrushes == NULL. 140 * FALSE in case of either pPens != NULL and pBrushes == NULL 141 * or pPens == NULL and pBrushes != NULL. 142 * 143 * I'm not sure whether this implementation is 100% correct. [AM] 144 */ 145 146 static HPEN SysColorPens[COLOR_MENUBAR + 1]; 147 static HBRUSH SysColorBrushes[COLOR_MENUBAR + 1]; 148 149 DWORD_PTR 150 WINAPI 151 SetSysColorsTemp(const COLORREF *pPens, 152 const HBRUSH *pBrushes, 153 DWORD_PTR n) 154 { 155 DWORD i; 156 157 if (pPens && pBrushes) /* "set" call */ 158 { 159 /* allocate our structure to remember old colors */ 160 LPVOID pOldCol = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD)+n*sizeof(HPEN)+n*sizeof(HBRUSH)); 161 LPVOID p = pOldCol; 162 *(DWORD_PTR *)p = n; p = (char*)p + sizeof(DWORD); 163 memcpy(p, SysColorPens, n*sizeof(HPEN)); p = (char*)p + n*sizeof(HPEN); 164 memcpy(p, SysColorBrushes, n*sizeof(HBRUSH)); p = (char*)p + n*sizeof(HBRUSH); 165 166 for (i=0; i < n; i++) 167 { 168 SysColorPens[i] = CreatePen( PS_SOLID, 1, pPens[i] ); 169 SysColorBrushes[i] = pBrushes[i]; 170 } 171 172 return (DWORD_PTR) pOldCol; 173 } 174 if (!pPens && !pBrushes) /* "restore" call */ 175 { 176 LPVOID pOldCol = (LPVOID)n; 177 LPVOID p = pOldCol; 178 DWORD nCount = *(DWORD *)p; 179 p = (char*)p + sizeof(DWORD); 180 181 for (i=0; i < nCount; i++) 182 { 183 DeleteObject(SysColorPens[i]); 184 SysColorPens[i] = *(HPEN *)p; p = (char*)p + sizeof(HPEN); 185 } 186 for (i=0; i < nCount; i++) 187 { 188 SysColorBrushes[i] = *(HBRUSH *)p; p = (char*)p + sizeof(HBRUSH); 189 } 190 /* get rid of storage structure */ 191 HeapFree(GetProcessHeap(), 0, pOldCol); 192 193 return TRUE; 194 } 195 return FALSE; 196 } 197 198 /* 199 * @unimplemented 200 */ 201 HDESK 202 WINAPI 203 GetInputDesktop ( VOID ) 204 { 205 UNIMPLEMENTED; 206 return FALSE; 207 } 208 209 /* 210 * @unimplemented 211 */ 212 BOOL 213 WINAPI 214 GetAccCursorInfo ( PCURSORINFO pci ) 215 { 216 UNIMPLEMENTED; 217 return FALSE; 218 } 219 220 /* 221 * @unimplemented 222 */ 223 UINT 224 WINAPI 225 GetRawInputDeviceInfoW( 226 HANDLE hDevice, 227 UINT uiCommand, 228 LPVOID pData, 229 PUINT pcbSize) 230 { 231 UNIMPLEMENTED; 232 return 0; 233 } 234 235 /* 236 * @unimplemented 237 */ 238 LONG 239 WINAPI 240 CsrBroadcastSystemMessageExW( 241 DWORD dwflags, 242 LPDWORD lpdwRecipients, 243 UINT uiMessage, 244 WPARAM wParam, 245 LPARAM lParam, 246 PBSMINFO pBSMInfo) 247 { 248 UNIMPLEMENTED; 249 return FALSE; 250 } 251 252 /* 253 * @unimplemented 254 */ 255 UINT 256 WINAPI 257 GetRawInputDeviceInfoA( 258 HANDLE hDevice, 259 UINT uiCommand, 260 LPVOID pData, 261 PUINT pcbSize) 262 { 263 UNIMPLEMENTED; 264 return 0; 265 } 266 267 /* 268 * @unimplemented 269 */ 270 BOOL 271 WINAPI 272 AlignRects(LPRECT rect, DWORD b, DWORD c, DWORD d) 273 { 274 UNIMPLEMENTED; 275 return FALSE; 276 } 277 278 /* 279 * @implemented 280 */ 281 LRESULT 282 WINAPI 283 DefRawInputProc( 284 PRAWINPUT* paRawInput, 285 INT nInput, 286 UINT cbSizeHeader) 287 { 288 if (cbSizeHeader == sizeof(RAWINPUTHEADER)) 289 return S_OK; 290 return 1; 291 } 292 293 /* 294 * @unimplemented 295 */ 296 UINT 297 WINAPI 298 DECLSPEC_HOTPATCH 299 GetRawInputBuffer( 300 PRAWINPUT pData, 301 PUINT pcbSize, 302 UINT cbSizeHeader) 303 { 304 UNIMPLEMENTED; 305 return 0; 306 } 307 308 /* 309 * @unimplemented 310 */ 311 UINT 312 WINAPI 313 GetRawInputData( 314 HRAWINPUT hRawInput, 315 UINT uiCommand, 316 LPVOID pData, 317 PUINT pcbSize, 318 UINT cbSizeHeader) 319 { 320 UNIMPLEMENTED; 321 return 0; 322 } 323 324 /* 325 * @unimplemented 326 */ 327 UINT 328 WINAPI 329 GetRawInputDeviceList( 330 PRAWINPUTDEVICELIST pRawInputDeviceList, 331 PUINT puiNumDevices, 332 UINT cbSize) 333 { 334 if(pRawInputDeviceList) 335 memset(pRawInputDeviceList, 0, sizeof *pRawInputDeviceList); 336 if(puiNumDevices) 337 *puiNumDevices = 0; 338 339 UNIMPLEMENTED; 340 return 0; 341 } 342 343 /* 344 * @unimplemented 345 */ 346 UINT 347 WINAPI 348 DECLSPEC_HOTPATCH 349 GetRegisteredRawInputDevices( 350 PRAWINPUTDEVICE pRawInputDevices, 351 PUINT puiNumDevices, 352 UINT cbSize) 353 { 354 UNIMPLEMENTED; 355 return 0; 356 } 357 358 /* 359 * @unimplemented 360 */ 361 BOOL 362 WINAPI 363 DECLSPEC_HOTPATCH 364 RegisterRawInputDevices( 365 PCRAWINPUTDEVICE pRawInputDevices, 366 UINT uiNumDevices, 367 UINT cbSize) 368 { 369 UNIMPLEMENTED; 370 return FALSE; 371 } 372 373 /* 374 * @unimplemented 375 */ 376 BOOL WINAPI DisplayExitWindowsWarnings(ULONG flags) 377 { 378 UNIMPLEMENTED; 379 return FALSE; 380 } 381 382 /* 383 * @unimplemented 384 */ 385 BOOL WINAPI ReasonCodeNeedsBugID(ULONG reasoncode) 386 { 387 UNIMPLEMENTED; 388 return FALSE; 389 } 390 391 /* 392 * @unimplemented 393 */ 394 BOOL WINAPI ReasonCodeNeedsComment(ULONG reasoncode) 395 { 396 UNIMPLEMENTED; 397 return FALSE; 398 } 399 400 /* 401 * @unimplemented 402 */ 403 BOOL WINAPI CtxInitUser32(VOID) 404 { 405 UNIMPLEMENTED; 406 return FALSE; 407 } 408 409 /* 410 * @unimplemented 411 */ 412 BOOL WINAPI EnterReaderModeHelper(HWND hwnd) 413 { 414 UNIMPLEMENTED; 415 return FALSE; 416 } 417 418 /* 419 * @unimplemented 420 */ 421 VOID WINAPI InitializeLpkHooks(FARPROC *hookfuncs) 422 { 423 UNIMPLEMENTED; 424 } 425 426 /* 427 * @unimplemented 428 */ 429 WORD WINAPI InitializeWin32EntryTable(UCHAR* EntryTablePlus0x1000) 430 { 431 UNIMPLEMENTED; 432 return FALSE; 433 } 434 435 /* 436 * @unimplemented 437 */ 438 BOOL WINAPI IsServerSideWindow(HWND wnd) 439 { 440 UNIMPLEMENTED; 441 return FALSE; 442 } 443 444 /* 445 * @unimplemented 446 */ 447 VOID WINAPI AllowForegroundActivation(VOID) 448 { 449 UNIMPLEMENTED; 450 } 451 452 /* 453 * @unimplemented 454 */ 455 VOID WINAPI ShowStartGlass(DWORD unknown) 456 { 457 UNIMPLEMENTED; 458 } 459 460 /* 461 * @implemented 462 */ 463 DWORD WINAPI GetMenuIndex(HMENU hMenu, HMENU hSubMenu) 464 { 465 return NtUserGetMenuIndex(hMenu, hSubMenu); 466 } 467 468 /* 469 * @unimplemented 470 */ 471 DWORD WINAPI UserRegisterWowHandlers(PVOID Unknown1, PVOID Unknown2) 472 { 473 UNIMPLEMENTED; 474 return 0; 475 } 476 477 BOOL 478 WINAPI 479 BuildReasonArray(PVOID Pointer) 480 { 481 UNIMPLEMENTED; 482 return FALSE; 483 } 484 485 VOID 486 WINAPI 487 CreateSystemThreads(DWORD Unused) 488 { 489 /* Thread call for remote processes (non-CSRSS) only */ 490 NtUserxCreateSystemThreads(TRUE); 491 ExitThread(0); 492 } 493 494 BOOL 495 WINAPI 496 DestroyReasons(PVOID Pointer) 497 { 498 UNIMPLEMENTED; 499 return FALSE; 500 } 501 502 NTSTATUS 503 WINAPI 504 DeviceEventWorker(HWND hwnd, WPARAM wParam, LPARAM lParam, DWORD Data, ULONG_PTR *uResult) 505 { 506 USER_API_MESSAGE ApiMessage; 507 PUSER_DEVICE_EVENT_MSG pusem = &ApiMessage.Data.DeviceEventMsg; 508 509 pusem->hwnd = hwnd; 510 pusem->wParam = wParam; 511 pusem->lParam = lParam; 512 pusem->Data = Data; 513 pusem->Result = 0; 514 515 TRACE("DeviceEventWorker : hwnd %p, wParam %d, lParam %d, Data %d, uResult %p\n", hwnd, wParam, lParam, Data, uResult); 516 517 if ( lParam == 0 ) 518 { 519 CsrClientCallServer( (PCSR_API_MESSAGE)&ApiMessage, 520 NULL, 521 CSR_CREATE_API_NUMBER( USERSRV_SERVERDLL_INDEX, UserpDeviceEvent ), 522 sizeof(*pusem) ); 523 } 524 else 525 { 526 PCSR_CAPTURE_BUFFER pcsrcb = NULL; 527 PDEV_BROADCAST_HDR pdev_br = (PDEV_BROADCAST_HDR)lParam; 528 ULONG BufferSize = pdev_br->dbch_size; 529 530 pcsrcb = CsrAllocateCaptureBuffer( 1, BufferSize ); 531 532 if ( !pcsrcb ) 533 { 534 return STATUS_NO_MEMORY; 535 } 536 537 CsrCaptureMessageBuffer( pcsrcb, (PVOID)lParam, BufferSize, (PVOID*)&pusem->lParam ); 538 539 CsrClientCallServer( (PCSR_API_MESSAGE)&ApiMessage, 540 pcsrcb, 541 CSR_CREATE_API_NUMBER( USERSRV_SERVERDLL_INDEX, UserpDeviceEvent ), 542 sizeof(*pusem) ); 543 544 CsrFreeCaptureBuffer( pcsrcb ); 545 } 546 547 if (NT_SUCCESS(ApiMessage.Status)) 548 { 549 *uResult = pusem->Result; 550 } 551 552 return ApiMessage.Status; 553 } 554 555 BOOL 556 WINAPI 557 GetReasonTitleFromReasonCode(DWORD dw1, DWORD dw2, DWORD dw3) 558 { 559 UNIMPLEMENTED; 560 return FALSE; 561 } 562 563 BOOL 564 WINAPI 565 IsSETEnabled(VOID) 566 { 567 /* 568 * Determines whether the Shutdown Event Tracker is enabled. 569 * 570 * See http://undoc.airesoft.co.uk/user32.dll/IsSETEnabled.php 571 * for more information. 572 */ 573 UNIMPLEMENTED; 574 return FALSE; 575 } 576 577 BOOL 578 WINAPI 579 RecordShutdownReason(DWORD dw0) 580 { 581 UNIMPLEMENTED; 582 return FALSE; 583 } 584 585 BOOL 586 WINAPI 587 UserLpkTabbedTextOut( 588 DWORD dw1, 589 DWORD dw2, 590 DWORD dw3, 591 DWORD dw4, 592 DWORD dw5, 593 DWORD dw6, 594 DWORD dw7, 595 DWORD dw8, 596 DWORD dw9, 597 DWORD dw10, 598 DWORD dw11, 599 DWORD dw12) 600 { 601 UNIMPLEMENTED; 602 return FALSE; 603 } 604 605 BOOL 606 WINAPI 607 Win32PoolAllocationStats(DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5) 608 { 609 UNIMPLEMENTED; 610 return FALSE; 611 } 612 613