ReactOS  0.4.15-dev-3203-gacde1e0
dllmain.c
Go to the documentation of this file.
1 #include <user32.h>
2 #include <ndk/cmfuncs.h>
3 #include <strsafe.h>
4 
5 #define MAX_USER_MODE_DRV_BUFFER 526
6 
7 //
8 // UMPD Packet Header should match win32ss/include/ntumpd.h
9 //
10 typedef struct _UMPDPKTHEAD
11 {
16  HUMPD humpd;
19 
21 
23 
24 #define KEY_LENGTH 1024
25 
28 
38 
40 
41 BOOL
43 {
46  BOOL bRet = FALSE;
47  BOOL bLoad;
48  HANDLE hKey = NULL;
49  DWORD dwSize;
51 
52  UNICODE_STRING szKeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows");
53  UNICODE_STRING szLoadName = RTL_CONSTANT_STRING(L"LoadAppInit_DLLs");
54  UNICODE_STRING szDllsName = RTL_CONSTANT_STRING(L"AppInit_DLLs");
55 
58  if (NT_SUCCESS(Status))
59  {
60  dwSize = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(DWORD);
61  kvpInfo = HeapAlloc(GetProcessHeap(), 0, dwSize);
62  if (!kvpInfo)
63  goto end;
64 
66  &szLoadName,
68  kvpInfo,
69  dwSize,
70  &dwSize);
71  if (!NT_SUCCESS(Status))
72  goto end;
73 
74  RtlMoveMemory(&bLoad,
75  kvpInfo->Data,
76  kvpInfo->DataLength);
77 
78  HeapFree(GetProcessHeap(), 0, kvpInfo);
79  kvpInfo = NULL;
80 
81  if (bLoad)
82  {
84  &szDllsName,
86  NULL,
87  0,
88  &dwSize);
90  goto end;
91 
92  kvpInfo = HeapAlloc(GetProcessHeap(), 0, dwSize);
93  if (!kvpInfo)
94  goto end;
95 
97  &szDllsName,
99  kvpInfo,
100  dwSize,
101  &dwSize);
102  if (NT_SUCCESS(Status))
103  {
104  LPWSTR lpBuffer = (LPWSTR)kvpInfo->Data;
105  if (*lpBuffer != UNICODE_NULL)
106  {
107  INT bytesToCopy, nullPos;
108 
109  bytesToCopy = min(kvpInfo->DataLength, KEY_LENGTH * sizeof(WCHAR));
110 
111  if (bytesToCopy != 0)
112  {
114  kvpInfo->Data,
115  bytesToCopy);
116 
117  nullPos = (bytesToCopy / sizeof(WCHAR)) - 1;
118 
119  /* ensure string is terminated */
120  szAppInit[nullPos] = UNICODE_NULL;
121 
122  bRet = TRUE;
123  }
124  }
125  }
126  }
127  }
128 
129 end:
130  if (hKey)
131  NtClose(hKey);
132 
133  if (kvpInfo)
134  HeapFree(GetProcessHeap(), 0, kvpInfo);
135 
136  return bRet;
137 }
138 
139 
140 VOID
142 {
143  szAppInit[0] = UNICODE_NULL;
144 
145  if (GetDllList())
146  {
148  LPWSTR ptr;
149  size_t i;
150 
152 
153  for (i = 0; i < KEY_LENGTH; ++ i)
154  {
155  if(buffer[i] == L' ' || buffer[i] == L',')
156  buffer[i] = 0;
157  }
158 
159  for (i = 0; i < KEY_LENGTH; )
160  {
161  if(buffer[i] == 0)
162  ++ i;
163  else
164  {
165  ptr = buffer + i;
166  i += wcslen(ptr);
167  LoadLibraryW(ptr);
168  }
169  }
170  }
171 }
172 
173 VOID
175 {
176  if (szAppInit[0] != UNICODE_NULL)
177  {
180  LPWSTR ptr;
181  size_t i;
182 
184 
185  for (i = 0; i < KEY_LENGTH; ++ i)
186  {
187  if(buffer[i] == L' ' || buffer[i] == L',')
188  buffer[i] = 0;
189  }
190 
191  for (i = 0; i < KEY_LENGTH; )
192  {
193  if(buffer[i] == 0)
194  ++ i;
195  else
196  {
197  ptr = buffer + i;
198  i += wcslen(ptr);
201  }
202  }
203  }
204 }
205 
207 {
226 };
227 
228 
229 
230 VOID
231 WINAPI
233 
234 BOOL
235 WINAPI
237 {
238  /*
239  * Normally we are called by win32k so the win32 thread pointers
240  * should be valid as they are set in win32k::InitThreadCallback.
241  */
244 
245  TRACE("In ClientThreadSetup(IsCallback == %s, gfServerProcess = %s, IsFirstThread = %s)\n",
246  IsCallback ? "TRUE" : "FALSE", gfServerProcess ? "TRUE" : "FALSE", IsFirstThread ? "TRUE" : "FALSE");
247 
248  if (IsFirstThread)
249  GdiProcessSetup();
250 
251  /* Check for already initialized thread, and bail out if so */
252  if (ClientInfo->CI_flags & CI_INITTHREAD)
253  {
254  ERR("ClientThreadSetup: Thread already initialized.\n");
255  return FALSE;
256  }
257 
258  /*
259  * CSRSS couldn't use user32::DllMain CSR server-to-server call to connect
260  * to win32k. So it is delayed to a manually-call to ClientThreadSetup.
261  * Also this needs to be done only for the first thread (since the connection
262  * is per-process).
263  */
264  if (gfServerProcess && IsFirstThread)
265  {
267  USERCONNECT UserCon;
268 
269  RtlZeroMemory(&UserCon, sizeof(UserCon));
270 
271  /* Minimal setup of the connect info structure */
272  UserCon.ulVersion = USER_VERSION;
273  // UserCon.dwDispatchCount;
274 
275  /* Connect to win32k */
277  &UserCon,
278  sizeof(UserCon));
279  if (!NT_SUCCESS(Status)) return FALSE;
280 
281  /* Retrieve data */
282  g_ppi = ClientInfo->ppi; // Snapshot PI, used as pointer only!
283  gSharedInfo = UserCon.siClient;
284  gpsi = gSharedInfo.psi;
286  /* ReactOS-Specific! */ gHandleEntries = SharedPtrToUser(gHandleTable->handles);
287 
288  // ERR("1 SI 0x%x : HT 0x%x : D 0x%x\n",
289  // gSharedInfo.psi, gSharedInfo.aheList, gSharedInfo.ulSharedDelta);
290  }
291 
292  TRACE("Checkpoint (register PFN)\n");
293  if (!RegisterClientPFN())
294  {
295  ERR("RegisterClientPFN failed\n");
296  return FALSE;
297  }
298 
299  /* Mark this thread as initialized */
300  ClientInfo->CI_flags |= CI_INITTHREAD;
301 
302  /* Initialization that should be done once per process */
303  if (IsFirstThread)
304  {
305  TRACE("Checkpoint (Allocating TLS)\n");
306 
307  /* Allocate an index for user32 thread local data */
310  return FALSE;
311 
312  // HAAAAAAAAAACK!!!!!!
313  // ASSERT(gpsi);
314  if (!gpsi) ERR("AAAAAAAAAAAHHHHHHHHHHHHHH!!!!!!!! gpsi == NULL !!!!\n");
315  if (gpsi)
316  {
317  TRACE("Checkpoint (MessageInit)\n");
318 
319  if (MessageInit())
320  {
321  TRACE("Checkpoint (MenuInit)\n");
322  if (MenuInit())
323  {
324  TRACE("Checkpoint initialization done OK\n");
326  LoadAppInitDlls();
327  return TRUE;
328  }
329  MessageCleanup();
330  }
331 
333  return FALSE;
334  }
335  }
336 
337  return TRUE;
338 }
339 
340 /*
341  * @implemented
342  */
343 BOOL
344 WINAPI
346 {
347  //
348  // This routine, in Windows, does a lot of what Init does, but in a radically
349  // different way.
350  //
351  // In Windows, because CSRSS's threads have TIF_CSRSSTHREAD set (we have this
352  // flag in ROS but not sure if we use it), the xxxClientThreadSetup callback
353  // isn't made when CSRSS first loads WINSRV.DLL (which loads USER32.DLL).
354  //
355  // However, all the other calls are made as normal, and WINSRV.DLL loads
356  // USER32.dll, the DllMain runs, and eventually the first NtUser system call is
357  // made which initializes Win32k (and initializes the thread, but as mentioned
358  // above, the thread is marked as TIF_CSRSSTHREAD).
359  //
360  // In the DllMain of User32, there is also a CsrClientConnectToServer call to
361  // server 2 (winsrv). When this is done from CSRSS, the "InServer" flag is set,
362  // so user32 will remember that it's running inside of CSRSS. Also, another
363  // flag, called "FirstThread" is manually set by DllMain.
364  //
365  // Then, WINSRV finishes loading, and CSRSRV starts the API thread/loop. This
366  // code then calls CsrConnectToUser, which calls... ClientThreadStartup. Now
367  // this routine detects that it's in the server process, which means it's CSRSS
368  // and that the callback never happened. It does some first-time-Win32k connection
369  // initialization and caches a bunch of things -- if it's the first thread. It also
370  // acquires a critical section to initialize GDI -- and then resets the first thread
371  // flag.
372  //
373  // For now, we'll do none of this, but to support Windows' CSRSRV.DLL which calls
374  // CsrConnectToUser, we'll pretend we "did something" here. Then the rest will
375  // continue as normal.
376  //
377 
378  // FIXME: Disabling this call is a HACK!! See also User32CallClientThreadSetupFromKernel...
379  // return ClientThreadSetupHelper(FALSE);
380  TRACE("ClientThreadSetup is not implemented\n");
381  return TRUE;
382 }
383 
384 BOOL
385 Init(PUSERCONNECT UserCon /*PUSERSRV_API_CONNECTINFO*/)
386 {
388 
389  TRACE("user32::Init(0x%p) -->\n", UserCon);
390 
392 
393  /* Initialize callback table in PEB data */
394  NtCurrentPeb()->KernelCallbackTable = apfnDispatch;
395  NtCurrentPeb()->PostProcessInitRoutine = NULL;
396 
397  // This is a HACK!! //
401 
402  /*
403  * Retrieve data from the connect info structure if the initializing
404  * process is not CSRSS. In case it is, this will be done from inside
405  * ClientThreadSetup.
406  */
407  if (!gfServerProcess)
408  {
409  // FIXME: HACK!! We should fixup for the NtUserProcessConnect fixups
410  // because it was made in the context of CSRSS process and not ours!!
411  // So... as long as we don't fix that, we need to redo again a call
412  // to NtUserProcessConnect... How perverse is that?!
413  //
414  // HACK(2): This call is necessary since we disabled
415  // the CSR call in DllMain...
416  {
417  RtlZeroMemory(UserCon, sizeof(*UserCon));
418 
419  /* Minimal setup of the connect info structure */
420  UserCon->ulVersion = USER_VERSION;
421  // UserCon->dwDispatchCount;
422 
423  TRACE("HACK: Hackish NtUserProcessConnect call!!\n");
424  /* Connect to win32k */
426  UserCon,
427  sizeof(*UserCon));
428  if (!NT_SUCCESS(Status)) return FALSE;
429  }
430 
431  //
432  // We continue as we should do normally...
433  //
434 
435  /* Retrieve data */
436  g_ppi = GetWin32ClientInfo()->ppi; // Snapshot PI, used as pointer only!
437  gSharedInfo = UserCon->siClient;
438  gpsi = gSharedInfo.psi;
440  /* ReactOS-Specific! */ gHandleEntries = SharedPtrToUser(gHandleTable->handles);
441  }
442 
443  // FIXME: Yet another hack... This call should normally not be done here, but
444  // instead in ClientThreadSetup, and in User32CallClientThreadSetupFromKernel as well.
445  TRACE("HACK: Using Init-ClientThreadSetupHelper hack!!\n");
447  {
448  TRACE("Init-ClientThreadSetupHelper hack failed!\n");
449  return FALSE;
450  }
451 
452  TRACE("<-- user32::Init()\n");
453 
454  return NT_SUCCESS(Status);
455 }
456 
457 VOID
459 {
462  MenuCleanup();
463  MessageCleanup();
466 }
467 
468 INT WINAPI
470  IN PVOID hInstanceDll,
471  IN ULONG dwReason,
472  IN PVOID reserved)
473 {
474  switch (dwReason)
475  {
476  case DLL_PROCESS_ATTACH:
477  {
478 
479 #define WIN_OBJ_DIR L"\\Windows"
480 #define SESSION_DIR L"\\Sessions"
481 
482  USERSRV_API_CONNECTINFO ConnectInfo; // USERCONNECT
483 
484 #if 0 // Disabling this code is a BIG HACK!!
485 
487  ULONG ConnectInfoSize = sizeof(ConnectInfo);
488  WCHAR SessionDir[256];
489 
490  /* Cache the PEB and Session ID */
491  PPEB Peb = NtCurrentPeb();
492  ULONG SessionId = Peb->SessionId; // gSessionId
493 
494  TRACE("user32::DllMain\n");
495 
496  /* Don't bother us for each thread */
497  DisableThreadLibraryCalls(hInstanceDll);
498 
499  RtlZeroMemory(&ConnectInfo, sizeof(ConnectInfo));
500 
501  /* Minimal setup of the connect info structure */
502  ConnectInfo.ulVersion = USER_VERSION;
503 
504  /* Setup the Object Directory path */
505  if (!SessionId)
506  {
507  /* Use the raw path */
508  wcscpy(SessionDir, WIN_OBJ_DIR);
509  }
510  else
511  {
512  /* Use the session path */
513  swprintf(SessionDir,
514  L"%ws\\%ld%ws",
515  SESSION_DIR,
516  SessionId,
517  WIN_OBJ_DIR);
518  }
519 
520  TRACE("Checkpoint (call CSR)\n");
521 
522  /* Connect to the USER Server */
523  Status = CsrClientConnectToServer(SessionDir,
525  &ConnectInfo,
526  &ConnectInfoSize,
527  &gfServerProcess);
528  if (!NT_SUCCESS(Status))
529  {
530  ERR("Failed to connect to CSR (Status %lx)\n", Status);
531  return FALSE;
532  }
533 
534  TRACE("Checkpoint (CSR called)\n");
535 
536 #endif
537 
538  User32Instance = hInstanceDll;
539 
540  /* Finish initialization */
541  TRACE("Checkpoint (call Init)\n");
542  if (!Init(&ConnectInfo))
543  return FALSE;
544 
545  if (!gfServerProcess)
546  {
547  HINSTANCE hImm32 = NULL;
548 
549  if (gpsi && (gpsi->dwSRVIFlags & SRVINFO_IMM32))
550  {
551  WCHAR szImmFile[MAX_PATH];
553  GetImmFileName(szImmFile, _countof(szImmFile));
554  hImm32 = GetModuleHandleW(szImmFile);
555  }
556 
557  if (!IMM_FN(ImmRegisterClient)(&gSharedInfo, hImm32))
558  return FALSE;
559  }
560  break;
561  }
562 
563  case DLL_PROCESS_DETACH:
564  {
565  if (ghImm32)
567 
568  Cleanup();
569  break;
570  }
571  }
572 
573  /* Finally, initialize GDI */
574  return GdiDllInitialize(hInstanceDll, dwReason, reserved);
575 }
576 
577 NTSTATUS
578 WINAPI
580 {
581  TRACE("User32CallClientThreadSetupFromKernel -->\n");
582  // FIXME: Disabling this call is a HACK!! See also ClientThreadSetup...
583  // ClientThreadSetupHelper(TRUE);
584  TRACE("<-- User32CallClientThreadSetupFromKernel\n");
586 }
587 
588 NTSTATUS
589 WINAPI
590 User32CallGetCharsetInfo(PVOID Arguments, ULONG ArgumentLength)
591 {
592  BOOL Ret;
593  PGET_CHARSET_INFO pgci = (PGET_CHARSET_INFO)Arguments;
594 
595  TRACE("GetCharsetInfo\n");
596 
597  Ret = TranslateCharsetInfo((DWORD *)(ULONG_PTR)pgci->Locale, &pgci->Cs, TCI_SRCLOCALE);
598 
599  return ZwCallbackReturn(Arguments, ArgumentLength, Ret ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
600 }
601 
602 NTSTATUS
603 WINAPI
604 User32CallSetWndIconsFromKernel(PVOID Arguments, ULONG ArgumentLength)
605 {
606  PSETWNDICONS_CALLBACK_ARGUMENTS Common = Arguments;
607 
608  if (!gpsi->hIconSmWindows)
609  {
611  Common->hIconHand = LoadImageW(0, IDI_HAND, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
617  hIconWindows = Common->hIconWindows;
618  hIconSmWindows = Common->hIconSmWindows;
619  }
620  ERR("hIconSmWindows %p hIconWindows %p \n",hIconSmWindows,hIconWindows);
621  return ZwCallbackReturn(Arguments, ArgumentLength, STATUS_SUCCESS);
622 }
623 
624 NTSTATUS
625 WINAPI
626 User32DeliverUserAPC(PVOID Arguments, ULONG ArgumentLength)
627 {
628  return ZwCallbackReturn(0, 0, STATUS_SUCCESS);
629 }
630 
631 NTSTATUS
632 WINAPI
633 User32CallOBMFromKernel(PVOID Arguments, ULONG ArgumentLength)
634 {
635  BITMAP bmp;
636  PSETOBM_CALLBACK_ARGUMENTS Common = Arguments;
637 
639  Common->oembmi[OBI_CLOSE].cx = bmp.bmWidth;
640  Common->oembmi[OBI_CLOSE].cy = bmp.bmHeight;
641 
643  Common->oembmi[OBI_MNARROW].cx = bmp.bmWidth;
644  Common->oembmi[OBI_MNARROW].cy = bmp.bmHeight;
645 
647  Common->oembmi[OBI_DNARROW].cx = bmp.bmWidth;
648  Common->oembmi[OBI_DNARROW].cy = bmp.bmHeight;
649 
651  Common->oembmi[OBI_DNARROWI].cx = bmp.bmWidth;
652  Common->oembmi[OBI_DNARROWI].cy = bmp.bmHeight;
653 
655  Common->oembmi[OBI_UPARROW].cx = bmp.bmWidth;
656  Common->oembmi[OBI_UPARROW].cy = bmp.bmHeight;
657 
659  Common->oembmi[OBI_UPARROWI].cx = bmp.bmWidth;
660  Common->oembmi[OBI_UPARROWI].cy = bmp.bmHeight;
661 
662  return ZwCallbackReturn(Arguments, ArgumentLength, STATUS_SUCCESS);
663 }
664 
666 {
667  BOOL bResult;
668  PLPK_CALLBACK_ARGUMENTS Argument;
669 
670  Argument = (PLPK_CALLBACK_ARGUMENTS)Arguments;
671 
672  Argument->lpString = (LPWSTR)((ULONG_PTR)Argument->lpString + (ULONG_PTR)Argument);
673 
674  bResult = ExtTextOutW(Argument->hdc,
675  Argument->x,
676  Argument->y,
677  Argument->flags,
678  (Argument->bRect) ? &Argument->rect : NULL,
679  Argument->lpString,
680  Argument->count,
681  NULL);
682 
683  return ZwCallbackReturn(&bResult, sizeof(BOOL), STATUS_SUCCESS);
684 }
685 
687 {
689  INT cbSize = 0;
691  PUMPDPKTHEAD pkt, pktOut = NULL;
692 
693  pkt = (PUMPDPKTHEAD)Arguments;
694 
695  if ( pkt->RetSize <= sizeof(Buffer) )
696  {
697  pktOut = (PUMPDPKTHEAD)Buffer;
698 
699  if ( (GdiPrinterThunk( pkt, pktOut, pkt->RetSize ) == GDI_ERROR) )
700  {
701  pktOut = NULL;
703  }
704  else
705  {
706  cbSize = pkt->RetSize;
707  }
708  }
709  else
710  {
712  }
713  return ZwCallbackReturn( pktOut, cbSize, Status );
714 }
#define OBM_DNARROW
Definition: winuser.h:1116
signed char * PCHAR
Definition: retypes.h:7
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
#define WIN_OBJ_DIR
BOOL MenuInit(VOID)
Definition: menu.c:359
NTSTATUS WINAPI User32CallDDEGetFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dde.c:288
#define IN
Definition: typedefs.h:39
#define KEY_LENGTH
Definition: dllmain.c:24
static HICON
Definition: imagelist.c:84
#define MAX_USER_MODE_DRV_BUFFER
Definition: dllmain.c:5
#define IMAGE_ICON
Definition: winuser.h:212
PPEB Peb
Definition: dllmain.c:27
#define TCI_SRCLOCALE
Definition: wingdi.h:963
HINSTANCE ghImm32
Definition: imm.c:20
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
BOOL WINAPI InitializeImmEntryTable(VOID)
Definition: imm.c:102
#define USERSRV_SERVERDLL_INDEX
Definition: winmsg.h:15
INT RetSize
Definition: dllmain.c:14
NTSTATUS WINAPI User32CallSetWndIconsFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:604
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
NTSTATUS WINAPI User32CallCopyImageFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: cursoricon.c:1938
NTSTATUS WINAPI User32CallDDEPostFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dde.c:256
ULONG SessionId
Definition: dllmain.c:28
LONG NTSTATUS
Definition: precomp.h:26
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
WCHAR szAppInit[KEY_LENGTH]
Definition: dllmain.c:39
#define USER_VERSION
Definition: ntuser.h:1107
GLuint buffer
Definition: glext.h:5915
#define SM_CYSMICON
Definition: winuser.h:1003
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
NTSTATUS WINAPI User32SetupDefaultCursors(PVOID Arguments, ULONG ArgumentLength)
Definition: cursoricon.c:48
#define IDI_APPLICATION
Definition: winuser.h:699
#define GetWin32ClientInfo()
Definition: ntuser.h:326
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:385
#define swprintf
Definition: precomp.h:40
BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
Definition: dllmain.c:52
NTSTATUS WINAPI User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:579
if(dx==0 &&dy==0)
Definition: linetemp.h:174
PUSER_HANDLE_TABLE gHandleTable
Definition: dllmain.c:32
int32_t INT
Definition: typedefs.h:58
PUSER_HANDLE_ENTRY gHandleEntries
Definition: dllmain.c:33
BOOL WINAPI ImmRegisterClient(PSHAREDINFO ptr, HINSTANCE hMod)
Definition: imm.c:44
HINSTANCE User32Instance
Definition: dllmain.c:27
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:264
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
uint32_t ULONG_PTR
Definition: typedefs.h:65
char _InterlockedExchange8(_Interlocked_operand_ char volatile *_Target, char _Value)
NTSYSAPI NTSTATUS NTAPI ZwCallbackReturn(_In_ PVOID Result, _In_ ULONG ResultLength, _In_ NTSTATUS Status)
CHARSETINFO Cs
Definition: callback.h:131
CLIENT_DATA ClientInfo
DWORD dwReason
Definition: misc.cpp:154
#define CI_INITTHREAD
Definition: ntuser.h:285
#define IDI_EXCLAMATION
Definition: winuser.h:702
BOOL WINAPI ClientThreadSetup(VOID)
Definition: dllmain.c:345
HRESULT GetImmFileName(_Out_ LPWSTR lpBuffer, _In_ size_t cchBuffer)
Definition: imm.c:39
VOID WINAPI GdiProcessSetup(VOID)
Definition: dllmain.c:42
NTSTATUS WINAPI User32CallGetCharsetInfo(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:590
PVOID apfnDispatch[USER32_CALLBACK_MAXIMUM+1]
Definition: dllmain.c:206
#define FALSE
Definition: types.h:117
#define UNICODE_NULL
DWORD dwSRVIFlags
Definition: ntuser.h:1013
unsigned int BOOL
Definition: ntddk_ex.h:94
NTSTATUS WINAPI User32DeliverUserAPC(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:626
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
VOID LoadAppInitDlls(VOID)
Definition: dllmain.c:141
INT Size
Definition: dllmain.c:12
struct _UMPDPKTHEAD UMPDPKTHEAD
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
static PVOID ptr
Definition: dispmode.c:27
r reserved
Definition: btrfs.c:2940
NTSTATUS WINAPI User32LoadSysMenuTemplateForKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: menu.c:655
NTSTATUS WINAPI User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: message.c:2927
HICON hIconWindows
Definition: dllmain.c:37
unsigned char BOOLEAN
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
#define LoadLibraryW(x)
Definition: compat.h:606
VOID Cleanup(VOID)
Definition: dllmain.c:458
NTSTATUS WINAPI User32CallLPKFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:665
CRITICAL_SECTION U32AccelCacheLock
Definition: accel.c:54
Definition: bufpool.h:45
INT WINAPI GdiPrinterThunk(PUMPDPKTHEAD, PVOID, INT)
BOOL WINAPI RegisterClientPFN(VOID)
Definition: regcontrol.c:143
NTSTATUS WINAPI User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: window.c:24
#define SESSION_DIR
#define DLL_PROCESS_DETACH
Definition: compat.h:130
INT Index
Definition: dllmain.c:13
#define NtCurrentProcess()
Definition: nt_native.h:1657
PSERVERINFO psi
Definition: ntuser.h:1088
Status
Definition: gdiplustypes.h:24
Definition: ntuser.h:16
#define USER32_CALLBACK_MAXIMUM
Definition: callback.h:22
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
#define TRACE(s)
Definition: solgame.cpp:4
#define FreeLibrary(x)
Definition: compat.h:607
#define GetProcessHeap()
Definition: compat.h:595
VOID UnloadAppInitDlls(VOID)
Definition: dllmain.c:174
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOLEAN gfLogonProcess
Definition: dllmain.c:34
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1154
#define OBM_CLOSE
Definition: winuser.h:1118
#define LR_DEFAULTSIZE
Definition: winuser.h:1084
__wchar_t WCHAR
Definition: xmlstorage.h:180
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define _countof(array)
Definition: sndvol32.h:68
#define USERSRV_API_CONNECTINFO
Definition: winmsg.h:40
#define MAX_PATH
Definition: compat.h:34
#define WINAPI
Definition: msvc.h:6
#define IDI_WINLOGO
Definition: winuser.h:704
int WINAPI GetSystemMetrics(_In_ int)
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI GdiDllInitialize(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
Definition: dllmain.c:76
ULONG ulVersion
Definition: ntuser.h:1100
NTSTATUS WINAPI User32CallEventProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:795
BITMAP bmp
Definition: alphablend.c:62
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3398
#define SM_CXSMICON
Definition: winuser.h:1002
DWORD Reserved
Definition: dllmain.c:15
GLuint GLuint end
Definition: gl.h:1545
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
ULONG SessionId
Definition: btrfs_drv.h:1965
static const WCHAR L[]
Definition: oid.c:1250
RTL_CRITICAL_SECTION gcsUserApiHook
Definition: usrapihk.c:39
static ULONG User32TlsIndex
Definition: dllmain.c:26
#define OBM_UPARROWI
Definition: winuser.h:1101
NTSTATUS WINAPI User32CallOBMFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:633
BOOLEAN gfServerProcess
Definition: dllmain.c:35
DWORD WINAPI TlsAlloc(VOID)
Definition: thread.c:1088
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:546
VOID DeleteFrameBrushes(VOID)
Definition: paint.c:71
VOID FASTCALL MessageCleanup(VOID)
Definition: message.c:3282
#define ERR(fmt,...)
Definition: debug.h:110
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define IDI_QUESTION
Definition: winuser.h:701
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NtCurrentPeb()
Definition: FLS.c:22
#define OBM_MNARROW
Definition: winuser.h:1103
FxAutoRegKey hKey
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2132
SHAREDINFO siClient
Definition: ntuser.h:1103
WINE_DEFAULT_DEBUG_CHANNEL(crtdll)
PUSER_HANDLE_ENTRY handles
Definition: ntuser.h:32
struct _KEY_VALUE_PARTIAL_INFORMATION KEY_VALUE_PARTIAL_INFORMATION
struct _GET_CHARSET_INFO * PGET_CHARSET_INFO
Definition: bl.h:1331
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
PPROCESSINFO g_ppi
Definition: dllmain.c:29
BOOL WINAPI ClientThreadSetupHelper(BOOL IsCallback)
Definition: dllmain.c:236
static __inline PVOID SharedPtrToUser(PVOID Ptr)
Definition: user_x.h:4
#define min(a, b)
Definition: monoChain.cc:55
#define NULL
Definition: types.h:112
HUMPD humpd
Definition: dllmain.c:16
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSTATUS WINAPI User32CallClientLoadLibraryFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:528
BOOL FASTCALL MessageInit(VOID)
Definition: message.c:3274
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: ntapi.c:336
#define SRVINFO_IMM32
Definition: ntuser.h:919
#define OBM_DNARROWI
Definition: winuser.h:1100
unsigned int ULONG
Definition: retypes.h:1
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define ULONG_PTR
Definition: config.h:101
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
SHAREDINFO gSharedInfo
Definition: dllmain.c:30
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
BOOL GetDllList(VOID)
Definition: dllmain.c:42
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define STATUS_SUCCESS
Definition: shellext.h:65
NTSTATUS WINAPI User32CallUMPDFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:686
struct _LPK_CALLBACK_ARGUMENTS * PLPK_CALLBACK_ARGUMENTS
WCHAR * LPWSTR
Definition: xmlstorage.h:184
HICON hIconSmWindows
Definition: dllmain.c:37
BOOLEAN gfFirstThread
Definition: dllmain.c:36
#define GDI_ERROR
Definition: wingdi.h:1308
#define IDI_ASTERISK
Definition: winuser.h:703
struct _UMPDPKTHEAD * PUMPDPKTHEAD
NTSTATUS WINAPI User32CallLoadMenuFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: menu.c:665
NTSTATUS NTAPI CsrClientConnectToServer(IN PWSTR ObjectDirectory, IN ULONG ServerId, IN PVOID ConnectionInfo, IN OUT PULONG ConnectionInfoSize, OUT PBOOLEAN ServerToServerCall)
Definition: connect.c:197
VOID MenuCleanup(VOID)
Definition: menu.c:649
#define HeapFree(x, y, z)
Definition: compat.h:594
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define IDI_HAND
Definition: winuser.h:700
NTSTATUS NTAPI NtUserProcessConnect(IN HANDLE ProcessHandle, OUT PUSERCONNECT pUserConnect, IN ULONG Size)
Definition: ntstubs.c:520
NTSTATUS WINAPI User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:554
struct tagOEMBITMAPINFO oembmi[93]
Definition: callback.h:156
#define OBM_UPARROW
Definition: winuser.h:1117
HMODULE hModule
Definition: animate.c:44
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
#define IMM_FN(name)
Definition: user32p.h:56
PVOID aheList
Definition: ntuser.h:1089
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
PSERVERINFO gpsi
Definition: dllmain.c:31