ReactOS 0.4.15-dev-6680-g8c76870
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//
10typedef struct _UMPDPKTHEAD
11{
16 HUMPD humpd;
19
21
23
24#define KEY_LENGTH 1024
25
28
38
40
41BOOL
43{
46 BOOL bRet = FALSE;
47 BOOL bLoad;
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;
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
129end:
130 if (hKey)
131 NtClose(hKey);
132
133 if (kvpInfo)
134 HeapFree(GetProcessHeap(), 0, kvpInfo);
135
136 return bRet;
137}
138
139
140VOID
142{
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);
168 }
169 }
170 }
171}
172
173VOID
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{
228};
229
230
231VOID
232WINAPI
234
235BOOL
236WINAPI
238{
239 /*
240 * Normally we are called by win32k so the win32 thread pointers
241 * should be valid as they are set in win32k::InitThreadCallback.
242 */
245
246 TRACE("In ClientThreadSetup(IsCallback == %s, gfServerProcess = %s, IsFirstThread = %s)\n",
247 IsCallback ? "TRUE" : "FALSE", gfServerProcess ? "TRUE" : "FALSE", IsFirstThread ? "TRUE" : "FALSE");
248
249 if (IsFirstThread)
251
252 /* Check for already initialized thread, and bail out if so */
253 if (ClientInfo->CI_flags & CI_INITTHREAD)
254 {
255 ERR("ClientThreadSetup: Thread already initialized.\n");
256 return FALSE;
257 }
258
259 /*
260 * CSRSS couldn't use user32::DllMain CSR server-to-server call to connect
261 * to win32k. So it is delayed to a manually-call to ClientThreadSetup.
262 * Also this needs to be done only for the first thread (since the connection
263 * is per-process).
264 */
265 if (gfServerProcess && IsFirstThread)
266 {
268 USERCONNECT UserCon;
269
270 RtlZeroMemory(&UserCon, sizeof(UserCon));
271
272 /* Minimal setup of the connect info structure */
273 UserCon.ulVersion = USER_VERSION;
274 // UserCon.dwDispatchCount;
275
276 /* Connect to win32k */
278 &UserCon,
279 sizeof(UserCon));
280 if (!NT_SUCCESS(Status)) return FALSE;
281
282 /* Retrieve data */
283 g_ppi = ClientInfo->ppi; // Snapshot PI, used as pointer only!
284 gSharedInfo = UserCon.siClient;
287 /* ReactOS-Specific! */ gHandleEntries = SharedPtrToUser(gHandleTable->handles);
288
289 // ERR("1 SI 0x%x : HT 0x%x : D 0x%x\n",
290 // gSharedInfo.psi, gSharedInfo.aheList, gSharedInfo.ulSharedDelta);
291 }
292
293 TRACE("Checkpoint (register PFN)\n");
294 if (!RegisterClientPFN())
295 {
296 ERR("RegisterClientPFN failed\n");
297 return FALSE;
298 }
299
300 /* Mark this thread as initialized */
301 ClientInfo->CI_flags |= CI_INITTHREAD;
302
303 /* Initialization that should be done once per process */
304 if (IsFirstThread)
305 {
306 TRACE("Checkpoint (Allocating TLS)\n");
307
308 /* Allocate an index for user32 thread local data */
311 return FALSE;
312
313 // HAAAAAAAAAACK!!!!!!
314 // ASSERT(gpsi);
315 if (!gpsi) ERR("AAAAAAAAAAAHHHHHHHHHHHHHH!!!!!!!! gpsi == NULL !!!!\n");
316 if (gpsi)
317 {
318 TRACE("Checkpoint (MessageInit)\n");
319
320 if (MessageInit())
321 {
322 TRACE("Checkpoint (MenuInit)\n");
323 if (MenuInit())
324 {
325 TRACE("Checkpoint initialization done OK\n");
328 return TRUE;
329 }
331 }
332
334 return FALSE;
335 }
336 }
337
338 return TRUE;
339}
340
341/*
342 * @implemented
343 */
344BOOL
345WINAPI
347{
348 //
349 // This routine, in Windows, does a lot of what Init does, but in a radically
350 // different way.
351 //
352 // In Windows, because CSRSS's threads have TIF_CSRSSTHREAD set (we have this
353 // flag in ROS but not sure if we use it), the xxxClientThreadSetup callback
354 // isn't made when CSRSS first loads WINSRV.DLL (which loads USER32.DLL).
355 //
356 // However, all the other calls are made as normal, and WINSRV.DLL loads
357 // USER32.dll, the DllMain runs, and eventually the first NtUser system call is
358 // made which initializes Win32k (and initializes the thread, but as mentioned
359 // above, the thread is marked as TIF_CSRSSTHREAD).
360 //
361 // In the DllMain of User32, there is also a CsrClientConnectToServer call to
362 // server 2 (winsrv). When this is done from CSRSS, the "InServer" flag is set,
363 // so user32 will remember that it's running inside of CSRSS. Also, another
364 // flag, called "FirstThread" is manually set by DllMain.
365 //
366 // Then, WINSRV finishes loading, and CSRSRV starts the API thread/loop. This
367 // code then calls CsrConnectToUser, which calls... ClientThreadStartup. Now
368 // this routine detects that it's in the server process, which means it's CSRSS
369 // and that the callback never happened. It does some first-time-Win32k connection
370 // initialization and caches a bunch of things -- if it's the first thread. It also
371 // acquires a critical section to initialize GDI -- and then resets the first thread
372 // flag.
373 //
374 // For now, we'll do none of this, but to support Windows' CSRSRV.DLL which calls
375 // CsrConnectToUser, we'll pretend we "did something" here. Then the rest will
376 // continue as normal.
377 //
378
379 // FIXME: Disabling this call is a HACK!! See also User32CallClientThreadSetupFromKernel...
380 // return ClientThreadSetupHelper(FALSE);
381 TRACE("ClientThreadSetup is not implemented\n");
382 return TRUE;
383}
384
385BOOL
386Init(PUSERCONNECT UserCon /*PUSERSRV_API_CONNECTINFO*/)
387{
389
390 TRACE("user32::Init(0x%p) -->\n", UserCon);
391
393
394 /* Initialize callback table in PEB data */
395 NtCurrentPeb()->KernelCallbackTable = apfnDispatch;
396 NtCurrentPeb()->PostProcessInitRoutine = NULL;
397
398 // This is a HACK!! //
402
403 /*
404 * Retrieve data from the connect info structure if the initializing
405 * process is not CSRSS. In case it is, this will be done from inside
406 * ClientThreadSetup.
407 */
408 if (!gfServerProcess)
409 {
410 // FIXME: HACK!! We should fixup for the NtUserProcessConnect fixups
411 // because it was made in the context of CSRSS process and not ours!!
412 // So... as long as we don't fix that, we need to redo again a call
413 // to NtUserProcessConnect... How perverse is that?!
414 //
415 // HACK(2): This call is necessary since we disabled
416 // the CSR call in DllMain...
417 {
418 RtlZeroMemory(UserCon, sizeof(*UserCon));
419
420 /* Minimal setup of the connect info structure */
421 UserCon->ulVersion = USER_VERSION;
422 // UserCon->dwDispatchCount;
423
424 TRACE("HACK: Hackish NtUserProcessConnect call!!\n");
425 /* Connect to win32k */
427 UserCon,
428 sizeof(*UserCon));
429 if (!NT_SUCCESS(Status)) return FALSE;
430 }
431
432 //
433 // We continue as we should do normally...
434 //
435
436 /* Retrieve data */
437 g_ppi = GetWin32ClientInfo()->ppi; // Snapshot PI, used as pointer only!
438 gSharedInfo = UserCon->siClient;
441 /* ReactOS-Specific! */ gHandleEntries = SharedPtrToUser(gHandleTable->handles);
442 }
443
444 // FIXME: Yet another hack... This call should normally not be done here, but
445 // instead in ClientThreadSetup, and in User32CallClientThreadSetupFromKernel as well.
446 TRACE("HACK: Using Init-ClientThreadSetupHelper hack!!\n");
448 {
449 TRACE("Init-ClientThreadSetupHelper hack failed!\n");
450 return FALSE;
451 }
452
453 TRACE("<-- user32::Init()\n");
454
455 return NT_SUCCESS(Status);
456}
457
458VOID
460{
463 MenuCleanup();
467}
468
469// UserClientDllInitialize
470BOOL
471WINAPI
473 _In_ HANDLE hDll,
475 _In_opt_ PVOID pReserved)
476{
477 switch (dwReason)
478 {
480 {
481
482#define WIN_OBJ_DIR L"\\Windows"
483#define SESSION_DIR L"\\Sessions"
484
485 USERSRV_API_CONNECTINFO ConnectInfo; // USERCONNECT
486
487#if 0 // Disabling this code is a BIG HACK!!
488
490 ULONG ConnectInfoSize = sizeof(ConnectInfo);
491 WCHAR SessionDir[256];
492
493 /* Cache the PEB and Session ID */
495 ULONG SessionId = Peb->SessionId; // gSessionId
496
497 TRACE("user32::DllMain\n");
498
499 /* Don't bother us for each thread */
501
502 RtlZeroMemory(&ConnectInfo, sizeof(ConnectInfo));
503
504 /* Minimal setup of the connect info structure */
505 ConnectInfo.ulVersion = USER_VERSION;
506
507 /* Setup the Object Directory path */
508 if (!SessionId)
509 {
510 /* Use the raw path */
511 wcscpy(SessionDir, WIN_OBJ_DIR);
512 }
513 else
514 {
515 /* Use the session path */
516 swprintf(SessionDir,
517 L"%ws\\%ld%ws",
519 SessionId,
521 }
522
523 TRACE("Checkpoint (call CSR)\n");
524
525 /* Connect to the USER Server */
526 Status = CsrClientConnectToServer(SessionDir,
528 &ConnectInfo,
529 &ConnectInfoSize,
531 if (!NT_SUCCESS(Status))
532 {
533 ERR("Failed to connect to CSR (Status %lx)\n", Status);
534 return FALSE;
535 }
536
537 TRACE("Checkpoint (CSR called)\n");
538
539#endif
540
541 User32Instance = hDll;
542
543 /* Finish initialization */
544 TRACE("Checkpoint (call Init)\n");
545 if (!Init(&ConnectInfo))
546 return FALSE;
547
548 if (!gfServerProcess)
549 {
550 HINSTANCE hImm32 = NULL;
551
553 {
554 WCHAR szImmFile[MAX_PATH];
556 User32GetImmFileName(szImmFile, _countof(szImmFile));
557 hImm32 = GetModuleHandleW(szImmFile);
558 }
559
560 if (!IMM_FN(ImmRegisterClient)(&gSharedInfo, hImm32))
561 return FALSE;
562 }
563 break;
564 }
565
567 {
568 if (ghImm32)
570
571 Cleanup();
572 break;
573 }
574 }
575
576 /* Finally, initialize GDI */
577 return GdiDllInitialize(hDll, dwReason, pReserved);
578}
579
581WINAPI
583{
584 TRACE("User32CallClientThreadSetupFromKernel -->\n");
585 // FIXME: Disabling this call is a HACK!! See also ClientThreadSetup...
586 // ClientThreadSetupHelper(TRUE);
587 TRACE("<-- User32CallClientThreadSetupFromKernel\n");
589}
590
592WINAPI
593User32CallGetCharsetInfo(PVOID Arguments, ULONG ArgumentLength)
594{
595 BOOL Ret;
596 PGET_CHARSET_INFO pgci = (PGET_CHARSET_INFO)Arguments;
597
598 TRACE("GetCharsetInfo\n");
599
600 Ret = TranslateCharsetInfo((DWORD *)(ULONG_PTR)pgci->Locale, &pgci->Cs, TCI_SRCLOCALE);
601
602 return ZwCallbackReturn(Arguments, ArgumentLength, Ret ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
603}
604
606WINAPI
608{
609 PSETWNDICONS_CALLBACK_ARGUMENTS Common = Arguments;
610
611 if (!gpsi->hIconSmWindows)
612 {
620 hIconWindows = Common->hIconWindows;
622 }
623 ERR("hIconSmWindows %p hIconWindows %p \n",hIconSmWindows,hIconWindows);
624 return ZwCallbackReturn(Arguments, ArgumentLength, STATUS_SUCCESS);
625}
626
628WINAPI
629User32DeliverUserAPC(PVOID Arguments, ULONG ArgumentLength)
630{
631 return ZwCallbackReturn(0, 0, STATUS_SUCCESS);
632}
633
635WINAPI
636User32CallOBMFromKernel(PVOID Arguments, ULONG ArgumentLength)
637{
638 BITMAP bmp;
639 PSETOBM_CALLBACK_ARGUMENTS Common = Arguments;
640
642 Common->oembmi[OBI_CLOSE].cx = bmp.bmWidth;
643 Common->oembmi[OBI_CLOSE].cy = bmp.bmHeight;
644
646 Common->oembmi[OBI_MNARROW].cx = bmp.bmWidth;
647 Common->oembmi[OBI_MNARROW].cy = bmp.bmHeight;
648
650 Common->oembmi[OBI_DNARROW].cx = bmp.bmWidth;
651 Common->oembmi[OBI_DNARROW].cy = bmp.bmHeight;
652
654 Common->oembmi[OBI_DNARROWI].cx = bmp.bmWidth;
655 Common->oembmi[OBI_DNARROWI].cy = bmp.bmHeight;
656
658 Common->oembmi[OBI_UPARROW].cx = bmp.bmWidth;
659 Common->oembmi[OBI_UPARROW].cy = bmp.bmHeight;
660
662 Common->oembmi[OBI_UPARROWI].cx = bmp.bmWidth;
663 Common->oembmi[OBI_UPARROWI].cy = bmp.bmHeight;
664
665 return ZwCallbackReturn(Arguments, ArgumentLength, STATUS_SUCCESS);
666}
667
669{
670 BOOL bResult;
672
673 Argument = (PLPK_CALLBACK_ARGUMENTS)Arguments;
674
675 Argument->lpString = (LPWSTR)((ULONG_PTR)Argument->lpString + (ULONG_PTR)Argument);
676
677 bResult = ExtTextOutW(Argument->hdc,
678 Argument->x,
679 Argument->y,
680 Argument->flags,
681 (Argument->bRect) ? &Argument->rect : NULL,
682 Argument->lpString,
683 Argument->count,
684 NULL);
685
686 return ZwCallbackReturn(&bResult, sizeof(BOOL), STATUS_SUCCESS);
687}
688
690{
692 INT cbSize = 0;
694 PUMPDPKTHEAD pkt, pktOut = NULL;
695
696 pkt = (PUMPDPKTHEAD)Arguments;
697
698 if ( pkt->RetSize <= sizeof(Buffer) )
699 {
700 pktOut = (PUMPDPKTHEAD)Buffer;
701
702 if ( (GdiPrinterThunk( pkt, pktOut, pkt->RetSize ) == GDI_ERROR) )
703 {
704 pktOut = NULL;
706 }
707 else
708 {
709 cbSize = pkt->RetSize;
710 }
711 }
712 else
713 {
715 }
716 return ZwCallbackReturn( pktOut, cbSize, Status );
717}
718
721{
722 PIMMPROCESSKEY_CALLBACK_ARGUMENTS Common = Arguments;
724 Common->hKL,
725 Common->vKey,
726 Common->lParam,
727 Common->dwHotKeyID);
728
729 return ZwCallbackReturn(&Result, sizeof(DWORD), STATUS_SUCCESS);
730}
731
734{
735 PIMMLOADLAYOUT_CALLBACK_ARGUMENTS Common = Arguments;
737 Result.ret = IMM_FN(ImmLoadLayout)(Common->hKL, &Result.iiex);
738 return ZwCallbackReturn(&Result, sizeof(Result), STATUS_SUCCESS);
739}
#define NtCurrentPeb()
Definition: FLS.c:22
unsigned char BOOLEAN
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
LONG NTSTATUS
Definition: precomp.h:26
DWORD dwReason
Definition: misc.cpp:154
#define ERR(fmt,...)
Definition: debug.h:110
Definition: bufpool.h:45
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
Definition: dllmain.c:52
HMODULE hModule
Definition: animate.c:44
#define GetProcessHeap()
Definition: compat.h:736
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define HeapAlloc
Definition: compat.h:733
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define LoadLibraryW(x)
Definition: compat.h:747
BOOL WINAPI ImmLoadLayout(HKL hKL, PIMEINFOEX pImeInfoEx)
Definition: imm.c:68
BOOL WINAPI ImmRegisterClient(PSHAREDINFO ptr, HINSTANCE hMod)
Definition: imm.c:58
ULONG SessionId
Definition: dllmain.c:28
PPEB Peb
Definition: dllmain.c:27
#define SESSION_DIR
Definition: dllmain.c:38
#define WIN_OBJ_DIR
Definition: dllmain.c:37
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
DWORD WINAPI TlsAlloc(VOID)
Definition: thread.c:1100
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
#define swprintf
Definition: precomp.h:40
static const WCHAR Cleanup[]
Definition: register.c:80
#define ULONG_PTR
Definition: config.h:101
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
Status
Definition: gdiplustypes.h:25
GLuint GLuint end
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define CI_INITTHREAD
Definition: ntuser.h:302
#define USER_VERSION
Definition: ntuser.h:1144
@ OBI_UPARROWI
Definition: ntuser.h:963
@ OBI_UPARROW
Definition: ntuser.h:962
@ OBI_DNARROW
Definition: ntuser.h:964
@ OBI_CLOSE
Definition: ntuser.h:961
@ OBI_DNARROWI
Definition: ntuser.h:965
@ OBI_MNARROW
Definition: ntuser.h:966
#define SRVINFO_IMM32
Definition: ntuser.h:944
#define GetWin32ClientInfo()
Definition: ntuser.h:347
NTSTATUS NTAPI NtUserProcessConnect(IN HANDLE ProcessHandle, OUT PUSERCONNECT pUserConnect, IN ULONG Size)
Definition: ntstubs.c:476
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
CLIENT_DATA ClientInfo
char _InterlockedExchange8(_Interlocked_operand_ char volatile *_Target, char _Value)
DWORD WINAPI ImmProcessKey(HWND hWnd, HKL hKL, UINT vKey, LPARAM lParam, DWORD dwHotKeyID)
Definition: keymsg.c:774
if(dx< 0)
Definition: linetemp.h:194
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static PVOID ptr
Definition: dispmode.c:27
BITMAP bmp
Definition: alphablend.c:62
static HICON
Definition: imagelist.c:84
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define min(a, b)
Definition: monoChain.cc:55
#define _In_
Definition: ms_sal.h:308
#define _In_opt_
Definition: ms_sal.h:309
NTSYSAPI NTSTATUS NTAPI ZwCallbackReturn(_In_ PVOID Result, _In_ ULONG ResultLength, _In_ NTSTATUS Status)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: ntapi.c:336
@ KeyValuePartialInformation
Definition: nt_native.h:1182
#define KEY_READ
Definition: nt_native.h:1023
#define NtCurrentProcess()
Definition: nt_native.h:1657
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)
struct _KEY_VALUE_PARTIAL_INFORMATION KEY_VALUE_PARTIAL_INFORMATION
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define UNICODE_NULL
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define L(x)
Definition: ntvdm.h:50
BOOL WINAPI RegisterClientPFN(VOID)
Definition: regcontrol.c:143
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSTATUS NTAPI CsrClientConnectToServer(_In_ PCWSTR ObjectDirectory, _In_ ULONG ServerId, _In_ PVOID ConnectionInfo, _Inout_ PULONG ConnectionInfoSize, _Out_ PBOOLEAN ServerToServerCall)
Definition: connect.c:196
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
#define _countof(array)
Definition: sndvol32.h:68
#define TRACE(s)
Definition: solgame.cpp:4
Definition: bl.h:1331
CHARSETINFO Cs
Definition: callback.h:133
ULONG SessionId
Definition: btrfs_drv.h:1919
struct tagOEMBITMAPINFO oembmi[93]
Definition: callback.h:158
PVOID aheList
Definition: ntuser.h:1126
PSERVERINFO psi
Definition: ntuser.h:1125
INT Size
Definition: dllmain.c:12
DWORD Reserved
Definition: dllmain.c:15
INT RetSize
Definition: dllmain.c:14
INT Index
Definition: dllmain.c:13
HUMPD humpd
Definition: dllmain.c:16
ULONG ulVersion
Definition: ntuser.h:1137
SHAREDINFO siClient
Definition: ntuser.h:1140
Definition: ntuser.h:17
PUSER_HANDLE_ENTRY handles
Definition: ntuser.h:32
DWORD dwSRVIFlags
Definition: ntuser.h:1046
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:264
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
RTL_CRITICAL_SECTION gcsUserApiHook
Definition: usrapihk.c:39
VOID FASTCALL MessageCleanup(VOID)
Definition: message.c:3292
HRESULT User32GetImmFileName(_Out_ LPWSTR lpBuffer, _In_ size_t cchBuffer)
Definition: imm.c:57
BOOL FASTCALL MessageInit(VOID)
Definition: message.c:3284
BOOL WINAPI InitializeImmEntryTable(VOID)
Definition: imm.c:119
#define IMM_FN(name)
Definition: user32p.h:56
HINSTANCE ghImm32
Definition: imm.c:20
CRITICAL_SECTION U32AccelCacheLock
Definition: accel.c:54
VOID DeleteFrameBrushes(VOID)
Definition: paint.c:71
static __inline PVOID SharedPtrToUser(PVOID Ptr)
Definition: user_x.h:4
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
BOOL WINAPI GdiDllInitialize(_In_ HANDLE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
Definition: dllmain.c:79
VOID WINAPI GdiProcessSetup(VOID)
Definition: dllmain.c:45
NTSTATUS WINAPI User32CallClientLoadLibraryFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:528
NTSTATUS WINAPI User32SetupDefaultCursors(PVOID Arguments, ULONG ArgumentLength)
Definition: cursoricon.c:48
NTSTATUS WINAPI User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: message.c:2937
NTSTATUS WINAPI User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: window.c:24
NTSTATUS WINAPI User32CallLoadMenuFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: menu.c:657
NTSTATUS WINAPI User32CallDDEGetFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dde.c:288
struct _LPK_CALLBACK_ARGUMENTS * PLPK_CALLBACK_ARGUMENTS
NTSTATUS WINAPI User32CallDDEPostFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dde.c:256
NTSTATUS WINAPI User32LoadSysMenuTemplateForKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: menu.c:647
NTSTATUS WINAPI User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:554
NTSTATUS WINAPI User32CallEventProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: hook.c:796
NTSTATUS WINAPI User32CallCopyImageFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: cursoricon.c:1938
#define USER32_CALLBACK_MAXIMUM
Definition: callback.h:24
struct _GET_CHARSET_INFO * PGET_CHARSET_INFO
BOOL MenuInit(VOID)
Definition: menu.c:359
BOOLEAN gfServerProcess
Definition: dllmain.c:35
BOOLEAN gfLogonProcess
Definition: dllmain.c:34
PVOID apfnDispatch[USER32_CALLBACK_MAXIMUM+1]
Definition: dllmain.c:206
struct _UMPDPKTHEAD * PUMPDPKTHEAD
PPROCESSINFO g_ppi
Definition: dllmain.c:29
static ULONG User32TlsIndex
Definition: dllmain.c:26
NTSTATUS WINAPI User32DeliverUserAPC(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:629
NTSTATUS WINAPI User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:582
PUSER_HANDLE_ENTRY gHandleEntries
Definition: dllmain.c:33
WCHAR szAppInit[KEY_LENGTH]
Definition: dllmain.c:39
PUSER_HANDLE_TABLE gHandleTable
Definition: dllmain.c:32
VOID UnloadAppInitDlls(VOID)
Definition: dllmain.c:174
#define KEY_LENGTH
Definition: dllmain.c:24
VOID LoadAppInitDlls(VOID)
Definition: dllmain.c:141
NTSTATUS WINAPI User32CallSetWndIconsFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:607
NTSTATUS WINAPI User32CallImmLoadLayoutFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:733
#define MAX_USER_MODE_DRV_BUFFER
Definition: dllmain.c:5
NTSTATUS WINAPI User32CallImmProcessKeyFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:720
HICON hIconWindows
Definition: dllmain.c:37
NTSTATUS WINAPI User32CallGetCharsetInfo(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:593
NTSTATUS WINAPI User32CallLPKFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:668
struct _UMPDPKTHEAD UMPDPKTHEAD
BOOL WINAPI ClientThreadSetupHelper(BOOL IsCallback)
Definition: dllmain.c:237
HINSTANCE User32Instance
Definition: dllmain.c:27
INT WINAPI GdiPrinterThunk(PUMPDPKTHEAD, PVOID, INT)
BOOL GetDllList(VOID)
Definition: dllmain.c:42
SHAREDINFO gSharedInfo
Definition: dllmain.c:30
BOOLEAN gfFirstThread
Definition: dllmain.c:36
HICON hIconSmWindows
Definition: dllmain.c:37
PSERVERINFO gpsi
Definition: dllmain.c:31
NTSTATUS WINAPI User32CallUMPDFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:689
BOOL WINAPI ClientThreadSetup(VOID)
Definition: dllmain.c:346
NTSTATUS WINAPI User32CallOBMFromKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: dllmain.c:636
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:549
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define WINAPI
Definition: msvc.h:6
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define TCI_SRCLOCALE
Definition: wingdi.h:964
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 GDI_ERROR
Definition: wingdi.h:1309
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
#define USERSRV_SERVERDLL_INDEX
Definition: winmsg.h:15
#define USERSRV_API_CONNECTINFO
Definition: winmsg.h:40
#define OBM_CLOSE
Definition: winuser.h:1122
#define OBM_MNARROW
Definition: winuser.h:1107
#define OBM_DNARROWI
Definition: winuser.h:1104
#define IDI_QUESTION
Definition: winuser.h:701
#define IMAGE_ICON
Definition: winuser.h:212
#define IDI_HAND
Definition: winuser.h:700
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2172
#define SM_CYSMICON
Definition: winuser.h:1007
#define IDI_WINLOGO
Definition: winuser.h:704
#define OBM_UPARROWI
Definition: winuser.h:1105
#define IDI_APPLICATION
Definition: winuser.h:699
#define IDI_ASTERISK
Definition: winuser.h:703
#define SM_CXSMICON
Definition: winuser.h:1006
#define OBM_UPARROW
Definition: winuser.h:1121
#define LR_DEFAULTSIZE
Definition: winuser.h:1088
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2132
#define IDI_EXCLAMATION
Definition: winuser.h:702
int WINAPI GetSystemMetrics(_In_ int)
#define OBM_DNARROW
Definition: winuser.h:1120
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184