ReactOS  0.4.15-dev-3207-ga415bd4
misc.c File Reference
#include <win32k.h>
Include dependency graph for misc.c:

Go to the source code of this file.

Functions

 DBG_DEFAULT_CHANNEL (UserMisc)
 
int __cdecl _scwprintf (const wchar_t *format,...)
 
PTHREADINFO FASTCALL IntTID2PTI (HANDLE id)
 
DWORD FASTCALL UserGetLanguageToggle (VOID)
 
USHORT FASTCALL UserGetLanguageID (VOID)
 
HBRUSH FASTCALL GetControlColor (PWND pwndParent, PWND pwnd, HDC hdc, UINT CtlMsg)
 
HBRUSH FASTCALL GetControlBrush (PWND pwnd, HDC hdc, UINT ctlType)
 
HBRUSH APIENTRY NtUserGetControlBrush (HWND hwnd, HDC hdc, UINT ctlType)
 
HBRUSH APIENTRY NtUserGetControlColor (HWND hwndParent, HWND hwnd, HDC hdc, UINT CtlMsg)
 
DWORD_PTR APIENTRY NtUserGetThreadState (DWORD Routine)
 
DWORD APIENTRY NtUserSetThreadState (DWORD Set, DWORD Flags)
 
UINT APIENTRY NtUserGetDoubleClickTime (VOID)
 
BOOL APIENTRY NtUserGetGUIThreadInfo (DWORD idThread, LPGUITHREADINFO lpgui)
 
DWORD APIENTRY NtUserGetGuiResources (HANDLE hProcess, DWORD uiFlags)
 
VOID FASTCALL IntSetWindowState (PWND pWnd, UINT Flag)
 
VOID FASTCALL IntClearWindowState (PWND pWnd, UINT Flag)
 
NTSTATUS FASTCALL IntSafeCopyUnicodeString (PUNICODE_STRING Dest, PUNICODE_STRING Source)
 
NTSTATUS FASTCALL IntSafeCopyUnicodeStringTerminateNULL (PUNICODE_STRING Dest, PUNICODE_STRING Source)
 
void UserDbgAssertThreadInfo (BOOL showCaller)
 
void NTAPI UserDbgPreServiceHook (ULONG ulSyscallId, PULONG_PTR pulArguments)
 
ULONG_PTR NTAPI UserDbgPostServiceHook (ULONG ulSyscallId, ULONG_PTR ulResult)
 
PPROCESSINFO GetW32ProcessInfo (VOID)
 
PTHREADINFO GetW32ThreadInfo (VOID)
 
NTSTATUS GetProcessLuid (IN PETHREAD Thread OPTIONAL, IN PEPROCESS Process OPTIONAL, OUT PLUID Luid)
 

Function Documentation

◆ _scwprintf()

int __cdecl _scwprintf ( const wchar_t format,
  ... 
)

Definition at line 21 of file misc.c.

24 {
25  int len;
26  va_list args;
27 
30  va_end(args);
31 
32  return len;
33 }
#define args
Definition: format.c:66
Definition: match.c:390
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define va_end(ap)
Definition: acmsvcex.h:90
char * va_list
Definition: acmsvcex.h:78
va_start(ap, x)
GLenum GLsizei len
Definition: glext.h:6722
_Check_return_ _CRTIMP int __cdecl _vscwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UserMisc  )

◆ GetControlBrush()

HBRUSH FASTCALL GetControlBrush ( PWND  pwnd,
HDC  hdc,
UINT  ctlType 
)

Definition at line 171 of file misc.c.

175 {
176  PWND pwndParent = IntGetParent(pwnd);
177  return GetControlColor( pwndParent, pwnd, hdc, ctlType);
178 }
HBRUSH FASTCALL GetControlColor(PWND pwndParent, PWND pwnd, HDC hdc, UINT CtlMsg)
Definition: misc.c:145
HDC hdc
Definition: main.c:9
Definition: ntuser.h:663
PWND FASTCALL IntGetParent(PWND Wnd)
Definition: window.c:185

Referenced by EDIT_NotifyCtlColor(), IntDrawScrollInterior(), NtUserGetControlBrush(), and STATIC_SendWmCtlColorStatic().

◆ GetControlColor()

HBRUSH FASTCALL GetControlColor ( PWND  pwndParent,
PWND  pwnd,
HDC  hdc,
UINT  CtlMsg 
)

Definition at line 145 of file misc.c.

150 {
151  HBRUSH hBrush;
152 
153  if (!pwndParent) pwndParent = pwnd;
154 
155  if ( pwndParent->head.pti->ppi != PsGetCurrentProcessWin32Process())
156  {
157  return (HBRUSH)IntDefWindowProc( pwndParent, CtlMsg, (WPARAM)hdc, (LPARAM)UserHMGetHandle(pwnd), FALSE);
158  }
159 
160  hBrush = (HBRUSH)co_IntSendMessage( UserHMGetHandle(pwndParent), CtlMsg, (WPARAM)hdc, (LPARAM)UserHMGetHandle(pwnd));
161 
162  if (!hBrush || !GreIsHandleValid(hBrush))
163  {
164  hBrush = (HBRUSH)IntDefWindowProc( pwndParent, CtlMsg, (WPARAM)hdc, (LPARAM)UserHMGetHandle(pwnd), FALSE);
165  }
166  return hBrush;
167 }
LRESULT FASTCALL IntDefWindowProc(PWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi)
Definition: defwnd.c:532
BOOL NTAPI GreIsHandleValid(HGDIOBJ hobj)
Definition: gdiobj.c:1146
UINT_PTR WPARAM
Definition: windef.h:207
#define FALSE
Definition: types.h:117
THRDESKHEAD head
Definition: ntuser.h:665
LONG_PTR LPARAM
Definition: windef.h:208
#define UserHMGetHandle(obj)
Definition: ntuser.h:213
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
HDC hdc
Definition: main.c:9
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
Definition: process.c:1183

Referenced by ButtonWndProc_common(), CB_Paint(), COMBO_PrepareColors(), DEFDLG_Proc(), GB_Paint(), GetControlBrush(), IntFillWindow(), LISTBOX_Paint(), LISTBOX_RepaintItem(), ListBoxWndProc_common(), NtUserGetControlColor(), OB_Paint(), PB_Paint(), and UB_Paint().

◆ GetProcessLuid()

NTSTATUS GetProcessLuid ( IN PETHREAD Thread  OPTIONAL,
IN PEPROCESS Process  OPTIONAL,
OUT PLUID  Luid 
)

Definition at line 790 of file misc.c.

794 {
799 
800  if (Thread && Process)
802 
803  /* If nothing has been specified, use the current thread */
804  if (!Thread && !Process)
806 
807  if (Thread)
808  {
809  /* Use a thread token */
810  ASSERT(!Process);
812  &CopyOnOpen,
813  &EffectiveOnly,
815 
816  /* If we don't have a thread token, use a process token */
817  if (!Token)
819  }
820  if (!Token && Process)
821  {
822  /* Use a process token */
824 
825  /* If we don't have a token, fail */
826  if (!Token)
827  return STATUS_NO_TOKEN;
828  }
829  ASSERT(Token);
830 
831  /* Query the LUID */
833 
834  /* Get rid of the token and return */
836  return Status;
837 }
#define PsGetCurrentThread()
Definition: env_spec_w32.h:81
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG NTSTATUS
Definition: precomp.h:26
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
_Out_ PBOOLEAN CopyOnOpen
Definition: psfuncs.h:154
PEPROCESS __stdcall PsGetThreadProcess(_In_ PETHREAD Thread)
enum _SECURITY_IMPERSONATION_LEVEL SECURITY_IMPERSONATION_LEVEL
unsigned char BOOLEAN
Status
Definition: gdiplustypes.h:24
#define ASSERT(a)
Definition: mode.c:44
_Out_ PBOOLEAN _Out_ PBOOLEAN _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
Definition: psfuncs.h:154
#define ObDereferenceObject
Definition: obfuncs.h:203
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2652
#define STATUS_NO_TOKEN
Definition: ntstatus.h:360
PACCESS_TOKEN NTAPI PsReferencePrimaryToken(PEPROCESS Process)
Definition: security.c:440
PACCESS_TOKEN NTAPI PsReferenceImpersonationToken(IN PETHREAD Thread, OUT PBOOLEAN CopyOnOpen, OUT PBOOLEAN EffectiveOnly, OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
Definition: security.c:849
NTSTATUS NTAPI SeQueryAuthenticationIdToken(_In_ PACCESS_TOKEN Token, _Out_ PLUID LogonId)
Queries the authentication ID of an access token.
Definition: token.c:2711
#define NULL
Definition: types.h:112
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:219
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN EffectiveOnly
Definition: sefuncs.h:388

Referenced by BuildUserModeWindowStationName(), IntResolveDesktop(), UserEndShutdown(), and UserInitiateShutdown().

◆ GetW32ProcessInfo()

◆ GetW32ThreadInfo()

PTHREADINFO GetW32ThreadInfo ( VOID  )

Definition at line 782 of file misc.c.

783 {
786 }
#define TRUE
Definition: types.h:120
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
void UserDbgAssertThreadInfo(BOOL showCaller)
Definition: misc.c:707

Referenced by NtUserGetThreadState().

◆ IntClearWindowState()

VOID FASTCALL IntClearWindowState ( PWND  pWnd,
UINT  Flag 
)

Definition at line 591 of file misc.c.

592 {
593  UINT bit;
594  if (gptiCurrent->ppi != pWnd->head.pti->ppi) return;
595  bit = 1 << LOWORD(Flag);
596  TRACE("CWS %x\n",bit);
597  switch(HIWORD(Flag))
598  {
599  case 0:
600  pWnd->state &= ~bit;
601  break;
602  case 1:
603  pWnd->state2 &= ~bit;
604  break;
605  case 2:
606  pWnd->ExStyle2 &= ~bit;
607  break;
608  }
609 }
DWORD ExStyle2
Definition: ntuser.h:715
PPROCESSINFO ppi
Definition: win32.h:89
THRDESKHEAD head
Definition: ntuser.h:665
PTHREADINFO gptiCurrent
Definition: ntuser.c:15
#define TRACE(s)
Definition: solgame.cpp:4
Definition: xml2sdb.h:79
DWORD state
Definition: ntuser.h:671
unsigned int UINT
Definition: ndis.h:50
#define HIWORD(l)
Definition: typedefs.h:247
DWORD state2
Definition: ntuser.h:672
#define LOWORD(l)
Definition: pedump.c:82

Referenced by NtUserCallHwndParam().

◆ IntSafeCopyUnicodeString()

NTSTATUS FASTCALL IntSafeCopyUnicodeString ( PUNICODE_STRING  Dest,
PUNICODE_STRING  Source 
)

Definition at line 612 of file misc.c.

614 {
616  PWSTR Src;
617 
618  Status = MmCopyFromCaller(Dest, Source, sizeof(UNICODE_STRING));
619  if(!NT_SUCCESS(Status))
620  {
621  return Status;
622  }
623 
624  if(Dest->Length > 0x4000)
625  {
626  return STATUS_UNSUCCESSFUL;
627  }
628 
629  Src = Dest->Buffer;
630  Dest->Buffer = NULL;
631  Dest->MaximumLength = Dest->Length;
632 
633  if(Dest->Length > 0 && Src)
634  {
636  if(!Dest->Buffer)
637  {
638  return STATUS_NO_MEMORY;
639  }
640 
641  Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
642  if(!NT_SUCCESS(Status))
643  {
645  Dest->Buffer = NULL;
646  return Status;
647  }
648 
649 
650  return STATUS_SUCCESS;
651  }
652 
653  /* String is empty */
654  return STATUS_SUCCESS;
655 }
USHORT MaximumLength
Definition: env_spec_w32.h:370
uint16_t * PWSTR
Definition: typedefs.h:56
LONG NTSTATUS
Definition: precomp.h:26
#define MmCopyFromCaller
Definition: polytest.cpp:29
#define TAG_STRING
Definition: oslist.h:22
Status
Definition: gdiplustypes.h:24
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define NULL
Definition: types.h:112
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
#define STATUS_SUCCESS
Definition: shellext.h:65
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099

◆ IntSafeCopyUnicodeStringTerminateNULL()

NTSTATUS FASTCALL IntSafeCopyUnicodeStringTerminateNULL ( PUNICODE_STRING  Dest,
PUNICODE_STRING  Source 
)

Definition at line 658 of file misc.c.

660 {
662  PWSTR Src;
663 
664  Status = MmCopyFromCaller(Dest, Source, sizeof(UNICODE_STRING));
665  if(!NT_SUCCESS(Status))
666  {
667  return Status;
668  }
669 
670  if(Dest->Length > 0x4000)
671  {
672  return STATUS_UNSUCCESSFUL;
673  }
674 
675  Src = Dest->Buffer;
676  Dest->Buffer = NULL;
677  Dest->MaximumLength = 0;
678 
679  if(Dest->Length > 0 && Src)
680  {
681  Dest->MaximumLength = Dest->Length + sizeof(WCHAR);
683  if(!Dest->Buffer)
684  {
685  return STATUS_NO_MEMORY;
686  }
687 
688  Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
689  if(!NT_SUCCESS(Status))
690  {
692  Dest->Buffer = NULL;
693  return Status;
694  }
695 
696  /* Make sure the string is null-terminated */
697  Src = (PWSTR)((PBYTE)Dest->Buffer + Dest->Length);
698  *Src = L'\0';
699 
700  return STATUS_SUCCESS;
701  }
702 
703  /* String is empty */
704  return STATUS_SUCCESS;
705 }
USHORT MaximumLength
Definition: env_spec_w32.h:370
uint16_t * PWSTR
Definition: typedefs.h:56
LONG NTSTATUS
Definition: precomp.h:26
#define MmCopyFromCaller
Definition: polytest.cpp:29
#define TAG_STRING
Definition: oslist.h:22
Status
Definition: gdiplustypes.h:24
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
static const WCHAR L[]
Definition: oid.c:1250
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define NULL
Definition: types.h:112
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
#define STATUS_SUCCESS
Definition: shellext.h:65
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
BYTE * PBYTE
Definition: pedump.c:66

Referenced by InitThreadCallback(), and NtUserRegisterWindowMessage().

◆ IntSetWindowState()

VOID FASTCALL IntSetWindowState ( PWND  pWnd,
UINT  Flag 
)

Definition at line 570 of file misc.c.

571 {
572  UINT bit;
573  if (gptiCurrent->ppi != pWnd->head.pti->ppi) return;
574  bit = 1 << LOWORD(Flag);
575  TRACE("SWS %x\n",bit);
576  switch(HIWORD(Flag))
577  {
578  case 0:
579  pWnd->state |= bit;
580  break;
581  case 1:
582  pWnd->state2 |= bit;
583  break;
584  case 2:
585  pWnd->ExStyle2 |= bit;
586  break;
587  }
588 }
DWORD ExStyle2
Definition: ntuser.h:715
PPROCESSINFO ppi
Definition: win32.h:89
THRDESKHEAD head
Definition: ntuser.h:665
PTHREADINFO gptiCurrent
Definition: ntuser.c:15
#define TRACE(s)
Definition: solgame.cpp:4
Definition: xml2sdb.h:79
DWORD state
Definition: ntuser.h:671
unsigned int UINT
Definition: ndis.h:50
#define HIWORD(l)
Definition: typedefs.h:247
DWORD state2
Definition: ntuser.h:672
#define LOWORD(l)
Definition: pedump.c:82

Referenced by NtUserCallHwndParam().

◆ IntTID2PTI()

PTHREADINFO FASTCALL IntTID2PTI ( HANDLE  id)

Definition at line 41 of file misc.c.

42 {
45  PTHREADINFO pti;
47  if (!NT_SUCCESS(Status))
48  {
49  return NULL;
50  }
52  {
54  return NULL;
55  }
57  if (!pti)
58  {
60  return NULL;
61  }
62  // Validate and verify!
63  _SEH2_TRY
64  {
65  if (pti->TIF_flags & TIF_INCLEANUP) pti = NULL;
66  if (pti && !(pti->TIF_flags & TIF_GUITHREADINITIALIZED)) pti = NULL;
67  if (PsGetThreadId(Thread) != id) pti = NULL;
68  }
70  {
71  pti = NULL;
72  }
73  _SEH2_END
75  return pti;
76 }
PVOID NTAPI PsGetThreadWin32Thread(IN PETHREAD Thread)
Definition: thread.c:795
NTSTATUS NTAPI PsLookupThreadByThreadId(IN HANDLE ThreadId, OUT PETHREAD *Thread)
Definition: thread.c:643
FLONG TIF_flags
Definition: win32.h:96
LONG NTSTATUS
Definition: precomp.h:26
_SEH2_TRY
Definition: create.c:4226
#define TIF_GUITHREADINITIALIZED
Definition: ntuser.h:269
Status
Definition: gdiplustypes.h:24
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define ObDereferenceObject
Definition: obfuncs.h:203
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2652
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
Definition: thread.c:705
_SEH2_END
Definition: create.c:4400
#define NULL
Definition: types.h:112
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
BOOLEAN NTAPI PsIsThreadTerminating(IN PETHREAD Thread)
Definition: thread.c:868
#define TIF_INCLEANUP
Definition: ntuser.h:245

Referenced by NtUserAttachThreadInput(), NtUserGetGUIThreadInfo(), NtUserGetThreadDesktop(), and NtUserSetWindowsHookEx().

◆ NtUserGetControlBrush()

HBRUSH APIENTRY NtUserGetControlBrush ( HWND  hwnd,
HDC  hdc,
UINT  ctlType 
)

Definition at line 182 of file misc.c.

186 {
187  PWND pwnd;
188  HBRUSH hBrush = NULL;
189 
191  if ( (pwnd = UserGetWindowObject(hwnd)) &&
192  ((ctlType - WM_CTLCOLORMSGBOX) < CTLCOLOR_MAX) &&
193  hdc )
194  {
195  hBrush = GetControlBrush(pwnd, hdc, ctlType);
196  }
197  UserLeave();
198  return hBrush;
199 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define WM_CTLCOLORMSGBOX
Definition: winuser.h:1749
PWND FASTCALL UserGetWindowObject(HWND hWnd)
Definition: window.c:103
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:245
HDC hdc
Definition: main.c:9
#define CTLCOLOR_MAX
Definition: winuser.h:948
Definition: ntuser.h:663
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
#define NULL
Definition: types.h:112
HBRUSH FASTCALL GetControlBrush(PWND pwnd, HDC hdc, UINT ctlType)
Definition: misc.c:171

Referenced by GetControlBrush().

◆ NtUserGetControlColor()

HBRUSH APIENTRY NtUserGetControlColor ( HWND  hwndParent,
HWND  hwnd,
HDC  hdc,
UINT  CtlMsg 
)

Definition at line 206 of file misc.c.

211 {
212  PWND pwnd, pwndParent = NULL;
213  HBRUSH hBrush = NULL;
214 
216  if ( (pwnd = UserGetWindowObject(hwnd)) &&
217  ((CtlMsg - WM_CTLCOLORMSGBOX) < CTLCOLOR_MAX) &&
218  hdc )
219  {
220  if (hwndParent) pwndParent = UserGetWindowObject(hwndParent);
221  hBrush = GetControlColor( pwndParent, pwnd, hdc, CtlMsg);
222  }
223  UserLeave();
224  return hBrush;
225 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
HBRUSH FASTCALL GetControlColor(PWND pwndParent, PWND pwnd, HDC hdc, UINT CtlMsg)
Definition: misc.c:145
static HWND hwndParent
Definition: cryptui.c:300
#define WM_CTLCOLORMSGBOX
Definition: winuser.h:1749
PWND FASTCALL UserGetWindowObject(HWND hWnd)
Definition: window.c:103
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:245
HDC hdc
Definition: main.c:9
#define CTLCOLOR_MAX
Definition: winuser.h:948
Definition: ntuser.h:663
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
#define NULL
Definition: types.h:112

Referenced by GetControlColor().

◆ NtUserGetDoubleClickTime()

UINT APIENTRY NtUserGetDoubleClickTime ( VOID  )

Definition at line 357 of file misc.c.

358 {
359  UINT Result;
360 
361  TRACE("Enter NtUserGetDoubleClickTime\n");
362  UserEnterShared();
363 
364  // FIXME: Check if this works on non-interactive winsta
366 
367  TRACE("Leave NtUserGetDoubleClickTime, ret=%u\n", Result);
368  UserLeave();
369  return Result;
370 }
VOID FASTCALL UserEnterShared(VOID)
Definition: ntuser.c:239
INT iDblClickTime
Definition: sysparams.h:90
_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:426
#define TRACE(s)
Definition: solgame.cpp:4
SPIVALUES gspv
Definition: sysparams.c:17
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
unsigned int UINT
Definition: ndis.h:50

Referenced by GetDoubleClickTime().

◆ NtUserGetGuiResources()

DWORD APIENTRY NtUserGetGuiResources ( HANDLE  hProcess,
DWORD  uiFlags 
)

Definition at line 506 of file misc.c.

509 {
511  PPROCESSINFO W32Process;
513  DWORD Ret = 0;
515 
516  TRACE("Enter NtUserGetGuiResources\n");
517  UserEnterShared();
518 
521  *PsProcessType,
523  (PVOID*)&Process,
524  NULL);
525 
526  if(!NT_SUCCESS(Status))
527  {
529  RETURN( 0);
530  }
531 
532  W32Process = (PPROCESSINFO)Process->Win32Process;
533  if(!W32Process)
534  {
537  RETURN( 0);
538  }
539 
540  switch(uiFlags)
541  {
542  case GR_GDIOBJECTS:
543  {
544  Ret = (DWORD)W32Process->GDIHandleCount;
545  break;
546  }
547  case GR_USEROBJECTS:
548  {
549  Ret = (DWORD)W32Process->UserHandleCount;
550  break;
551  }
552  default:
553  {
555  break;
556  }
557  }
558 
560 
561  RETURN( Ret);
562 
563 CLEANUP:
564  TRACE("Leave NtUserGetGuiResources, ret=%lu\n",_ret_);
565  UserLeave();
566  END_CLEANUP;
567 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
VOID FASTCALL UserEnterShared(VOID)
Definition: ntuser.c:239
#define CLEANUP
Definition: ntuser.h:5
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:166
LONG NTSTATUS
Definition: precomp.h:26
struct _PROCESSINFO * PPROCESSINFO
Definition: ntwin32.h:5
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID)
Definition: sysinfo.c:3070
#define RETURN(x)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
Definition: obref.c:494
Status
Definition: gdiplustypes.h:24
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define ObDereferenceObject
Definition: obfuncs.h:203
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DECLARE_RETURN(type)
Definition: ntuser.h:3
VOID FASTCALL SetLastNtError(NTSTATUS Status)
Definition: error.c:36
static DWORD
Definition: misc.c:47
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
#define NULL
Definition: types.h:112
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:219
POBJECT_TYPE PsProcessType
Definition: process.c:20
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:27
#define END_CLEANUP
Definition: ntuser.h:6

Referenced by GetGuiResources().

◆ NtUserGetGUIThreadInfo()

BOOL APIENTRY NtUserGetGUIThreadInfo ( DWORD  idThread,
LPGUITHREADINFO  lpgui 
)

Definition at line 374 of file misc.c.

377 {
379  PTHRDCARETINFO CaretInfo;
380  GUITHREADINFO SafeGui;
382  PUSER_MESSAGE_QUEUE MsgQueue;
383  PTHREADINFO W32Thread, pti;
384 
386 
387  TRACE("Enter NtUserGetGUIThreadInfo\n");
388  UserEnterShared();
389 
390  Status = MmCopyFromCaller(&SafeGui, lpgui, sizeof(DWORD));
391  if(!NT_SUCCESS(Status))
392  {
394  RETURN( FALSE);
395  }
396 
397  if(SafeGui.cbSize != sizeof(GUITHREADINFO))
398  {
400  RETURN( FALSE);
401  }
402 
403  if (idThread)
404  {
406 
407  // Validate Tread ID
408  W32Thread = IntTID2PTI((HANDLE)(DWORD_PTR)idThread);
409 
410  if ( !W32Thread )
411  {
413  RETURN( FALSE);
414  }
415 
416  Desktop = W32Thread->rpdesk;
417 
418  // Check Desktop and it must be the same as current.
419  if ( !Desktop || Desktop != pti->rpdesk )
420  {
422  RETURN( FALSE);
423  }
424 
425  if ( W32Thread->MessageQueue )
426  MsgQueue = W32Thread->MessageQueue;
427  else
428  {
429  if ( Desktop ) MsgQueue = Desktop->ActiveMessageQueue;
430  }
431  }
432  else
433  { /* Get the foreground thread */
434  /* FIXME: Handle NULL queue properly? */
435  MsgQueue = IntGetFocusMessageQueue();
436  if(!MsgQueue)
437  {
439  RETURN( FALSE);
440  }
441  }
442 
443  CaretInfo = &MsgQueue->CaretInfo;
444 
445  SafeGui.flags = (CaretInfo->Visible ? GUI_CARETBLINKING : 0);
446 /*
447  if (W32Thread->pMenuState->pGlobalPopupMenu)
448  {
449  SafeGui.flags |= GUI_INMENUMODE;
450 
451  if (W32Thread->pMenuState->pGlobalPopupMenu->spwndNotify)
452  SafeGui.hwndMenuOwner = UserHMGetHandle(W32Thread->pMenuState->pGlobalPopupMenu->spwndNotify);
453 
454  if (W32Thread->pMenuState->pGlobalPopupMenu->fHasMenuBar)
455  {
456  if (W32Thread->pMenuState->pGlobalPopupMenu->fIsSysMenu)
457  {
458  SafeGui.flags |= GUI_SYSTEMMENUMODE;
459  }
460  }
461  else
462  {
463  SafeGui.flags |= GUI_POPUPMENUMODE;
464  }
465  }
466  */
467  SafeGui.hwndMenuOwner = MsgQueue->MenuOwner;
468 
469  if (MsgQueue->MenuOwner)
470  SafeGui.flags |= GUI_INMENUMODE | MsgQueue->MenuState;
471 
472  if (MsgQueue->MoveSize)
473  SafeGui.flags |= GUI_INMOVESIZE;
474 
475  /* FIXME: Add flag GUI_16BITTASK */
476 
477  SafeGui.hwndActive = MsgQueue->spwndActive ? UserHMGetHandle(MsgQueue->spwndActive) : 0;
478  SafeGui.hwndFocus = MsgQueue->spwndFocus ? UserHMGetHandle(MsgQueue->spwndFocus) : 0;
479  SafeGui.hwndCapture = MsgQueue->spwndCapture ? UserHMGetHandle(MsgQueue->spwndCapture) : 0;
480  SafeGui.hwndMoveSize = MsgQueue->MoveSize;
481  SafeGui.hwndCaret = CaretInfo->hWnd;
482 
483  SafeGui.rcCaret.left = CaretInfo->Pos.x;
484  SafeGui.rcCaret.top = CaretInfo->Pos.y;
485  SafeGui.rcCaret.right = SafeGui.rcCaret.left + CaretInfo->Size.cx;
486  SafeGui.rcCaret.bottom = SafeGui.rcCaret.top + CaretInfo->Size.cy;
487 
488  Status = MmCopyToCaller(lpgui, &SafeGui, sizeof(GUITHREADINFO));
489  if(!NT_SUCCESS(Status))
490  {
492  RETURN( FALSE);
493  }
494 
495  RETURN( TRUE);
496 
497 CLEANUP:
498  TRACE("Leave NtUserGetGUIThreadInfo, ret=%u\n",_ret_);
499  UserLeave();
500  END_CLEANUP;
501 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
HWND hwndMenuOwner
Definition: winable.h:75
VOID FASTCALL UserEnterShared(VOID)
Definition: ntuser.c:239
#define CLEANUP
Definition: ntuser.h:5
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define TRUE
Definition: types.h:120
DWORD cbSize
Definition: winable.h:70
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
LONG NTSTATUS
Definition: precomp.h:26
LONG top
Definition: windef.h:307
HWND hwndActive
Definition: winable.h:72
#define MmCopyFromCaller
Definition: polytest.cpp:29
#define MmCopyToCaller(x, y, z)
Definition: mmcopy.h:19
#define GUI_CARETBLINKING
Definition: winable.h:27
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
Definition: desktop.c:1275
struct _DESKTOP * rpdesk
Definition: win32.h:93
#define RETURN(x)
HWND hwndCaret
Definition: winable.h:77
PTHREADINFO FASTCALL IntTID2PTI(HANDLE id)
Definition: misc.c:41
#define FALSE
Definition: types.h:117
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
HWND hwndFocus
Definition: winable.h:73
unsigned char BOOLEAN
LONG cx
Definition: windef.h:334
static CHAR Desktop[MAX_PATH]
Definition: dem.c:256
Status
Definition: gdiplustypes.h:24
#define UserHMGetHandle(obj)
Definition: ntuser.h:213
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DECLARE_RETURN(type)
Definition: ntuser.h:3
#define GUI_INMOVESIZE
Definition: winable.h:28
HWND hwndMoveSize
Definition: winable.h:76
THRDCARETINFO CaretInfo
Definition: msgqueue.h:92
uint32_t DWORD_PTR
Definition: typedefs.h:65
VOID FASTCALL SetLastNtError(NTSTATUS Status)
Definition: error.c:36
#define GUI_INMENUMODE
Definition: winable.h:29
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
LONG bottom
Definition: windef.h:309
LONG cy
Definition: windef.h:335
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:27
HWND hwndCapture
Definition: winable.h:74
#define END_CLEANUP
Definition: ntuser.h:6

Referenced by GetGUIThreadInfo().

◆ NtUserGetThreadState()

DWORD_PTR APIENTRY NtUserGetThreadState ( DWORD  Routine)

Definition at line 231 of file misc.c.

233 {
234  DWORD_PTR ret = 0;
235 
236  TRACE("Enter NtUserGetThreadState\n");
237  if (Routine != THREADSTATE_GETTHREADINFO)
238  {
239  UserEnterShared();
240  }
241  else
242  {
244  }
245 
246  switch (Routine)
247  {
250  break;
253  break;
255  /* FIXME: Should use UserEnterShared */
257  break;
259  ret = (DWORD_PTR)GetW32ThreadInfo()->pDeskInfo->hProgmanWindow;
260  break;
262  ret = (DWORD_PTR)GetW32ThreadInfo()->pDeskInfo->hTaskManWindow;
263  break;
266  break;
268  {
270  ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->pusmCurrent;
271  TRACE("THREADSTATE_INSENDMESSAGE\n");
272 
273  ret = ISMEX_NOSEND;
274  if (Message)
275  {
276  if (Message->ptiSender)
277  ret = ISMEX_SEND;
278  else
279  {
280  if (Message->CompletionCallback)
281  ret = ISMEX_CALLBACK;
282  else
283  ret = ISMEX_NOTIFY;
284  }
285  /* If ReplyMessage */
286  if (Message->QS_Flags & QS_SMRESULT) ret |= ISMEX_REPLIED;
287  }
288 
289  break;
290  }
293  break;
294 
296  {
297  PTHREADINFO pti;
299  pti->pcti->timeLastRead = EngGetTickCount32();
300  break;
301  }
302 
305  break;
306 
309  break;
311  ret = (DWORD_PTR) (GetW32ThreadInfo()->MessageQueue->CursorObject ?
312  UserHMGetHandle(GetW32ThreadInfo()->MessageQueue->CursorObject) : 0);
313  break;
316  break;
318  ret = FALSE; /* FIXME: See imm32 */
319  break;
320  }
321 
322  TRACE("Leave NtUserGetThreadState, ret=%lu\n", ret);
323  UserLeave();
324 
325  return ret;
326 }
PUSER_MESSAGE_QUEUE gpqForeground
Definition: focus.c:12
VOID FASTCALL UserEnterShared(VOID)
Definition: ntuser.c:239
HWND FASTCALL IntGetThreadFocusWindow(VOID)
Definition: focus.c:39
#define DWORD_PTR
Definition: treelist.c:76
PTHREADINFO GetW32ThreadInfo(VOID)
Definition: misc.c:782
HWND FASTCALL UserGetActiveWindow(VOID)
Definition: focus.c:1311
#define EngGetTickCount32()
Definition: eng.h:43
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
LPARAM FASTCALL MsqGetMessageExtraInfo(VOID)
Definition: msgqueue.c:2512
#define QS_TIMER
Definition: winuser.h:893
#define QS_SMRESULT
Definition: undocuser.h:94
#define FALSE
Definition: types.h:117
DWORD APIENTRY IntGetQueueStatus(DWORD Changes)
Definition: message.c:2086
#define QS_SENDMESSAGE
Definition: winuser.h:892
struct _CLIENTTHREADINFO * pcti
Definition: win32.h:92
#define QS_INPUT
Definition: winuser.h:881
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:245
#define UserHMGetHandle(obj)
Definition: ntuser.h:213
#define TRACE(s)
Definition: solgame.cpp:4
struct _THREADINFO * PTHREADINFO
Definition: ntwin32.h:6
CHAR Message[80]
Definition: alive.c:5
int ret
uint32_t DWORD_PTR
Definition: typedefs.h:65
HWND APIENTRY IntGetCapture(VOID)
Definition: focus.c:1322
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
#define QS_POSTMESSAGE
Definition: winuser.h:888
#define QS_MOUSEBUTTON
Definition: winuser.h:885
#define QS_PAINT
Definition: winuser.h:887
#define QS_KEY
Definition: winuser.h:883
struct _DESKTOPINFO * pDeskInfo
Definition: win32.h:94
#define LOWORD(l)
Definition: pedump.c:82

Referenced by CheckThreadState(), DIALOG_CreateIndirect(), DllMain(), DoTest_BUTTON(), DoTest_EDIT(), GetActiveWindow(), GetCapture(), GetCursor(), GetFocus(), GetInputState(), GetMessageTime(), GetProgmanWindow(), GetTaskmanWindow(), GetW32ThreadInfo(), Imm32GetContextEx(), Imm32InquireIme(), ImmCreateContext(), ImmGetDefaultIMEWnd(), ImmLockClientImc(), InSendMessage(), InSendMessageEx(), IsGUIThread(), NtUserxGetMessageExtraInfo(), and PeekMessageWorker().

◆ NtUserSetThreadState()

DWORD APIENTRY NtUserSetThreadState ( DWORD  Set,
DWORD  Flags 
)

Definition at line 330 of file misc.c.

333 {
334  PTHREADINFO pti;
335  DWORD Ret = 0;
336  // Test the only flags user can change.
341  if (pti->MessageQueue)
342  {
343  Ret = pti->MessageQueue->QF_flags; // Get the queue flags.
344  if (Set)
345  pti->MessageQueue->QF_flags |= (Set&Flags); // Set the queue flags.
346  else
347  {
348  if (Flags) pti->MessageQueue->QF_flags &= ~Flags; // Clr the queue flags.
349  }
350  }
351  UserLeave();
352  return Ret;
353 }
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
#define QF_TABSWITCHING
Definition: msgqueue.h:101
#define QF_DIALOGACTIVE
Definition: msgqueue.h:106
static BOOL Set
Definition: pageheap.c:10
#define QF_FF10STATUS
Definition: msgqueue.h:98
#define QF_FMENUSTATUS
Definition: msgqueue.h:97
VOID FASTCALL UserEnterExclusive(VOID)
Definition: ntuser.c:245
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
unsigned long DWORD
Definition: ntddk_ex.h:95
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
VOID FASTCALL UserLeave(VOID)
Definition: ntuser.c:253
#define QF_FMENUSTATUSBREAK
Definition: msgqueue.h:96

Referenced by DEFDLG_Proc().

◆ UserDbgAssertThreadInfo()

void UserDbgAssertThreadInfo ( BOOL  showCaller)

Definition at line 707 of file misc.c.

708 {
709  PTEB Teb;
710  PPROCESSINFO ppi;
711  PCLIENTINFO pci;
712  PTHREADINFO pti;
713 
716  Teb = NtCurrentTeb();
717  pci = GetWin32ClientInfo();
718 
719  ASSERT(Teb);
720  ASSERT(pti);
721  ASSERT(pti->ppi == ppi);
722  ASSERT(pti->pClientInfo == pci);
723  ASSERT(Teb->Win32ThreadInfo == pti);
724  ASSERT(pci->ppi == ppi);
725  ASSERT(pci->fsHooks == pti->fsHooks);
727  if (pti->pcti && pci->pDeskInfo)
728  ASSERT(pci->pClientThreadInfo == (PVOID)((ULONG_PTR)pti->pcti - pci->ulClientDelta));
729  //if (pti->pcti && IsListEmpty(&pti->SentMessagesListHead))
730  // ASSERT((pti->pcti->fsChangeBits & QS_SENDMESSAGE) == 0);
731  if (pti->KeyboardLayout)
732  ASSERT(pci->hKL == pti->KeyboardLayout->hkl);
733  if(pti->rpdesk != NULL)
734  ASSERT(pti->pDeskInfo == pti->rpdesk->pDeskInfo);
735 
736  /*too bad we still get this assertion*/
737 
738  // Why? Not all flags are passed to the user and doing so could crash the system........
739 
740  /* ASSERT(pci->dwTIFlags == pti->TIF_flags); */
741 /* if(pci->dwTIFlags != pti->TIF_flags)
742  {
743  ERR("pci->dwTIFlags(0x%x) doesn't match pti->TIF_flags(0x%x)\n", pci->dwTIFlags, pti->TIF_flags);
744  if(showCaller)
745  {
746  DbgPrint("Caller:\n");
747  KeRosDumpStackFrames(NULL, 10);
748  }
749  pci->dwTIFlags = pti->TIF_flags;
750  }
751 */
752 }
ULONG fsHooks
Definition: ntuser.h:302
PVOID Win32ThreadInfo
Definition: compat.h:705
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
#define GetWin32ClientInfo()
Definition: ntuser.h:326
struct _DESKTOP * rpdesk
Definition: win32.h:93
PCLIENTTHREADINFO pClientThreadInfo
Definition: ntuser.h:306
PPROCESSINFO ppi
Definition: win32.h:89
uint32_t ULONG_PTR
Definition: typedefs.h:65
struct _CLIENTTHREADINFO * pcti
Definition: win32.h:92
ULONG_PTR ulClientDelta
Definition: ntuser.h:300
ULONG fsHooks
Definition: win32.h:118
#define ASSERT(a)
Definition: mode.c:44
struct _CLIENTINFO * pClientInfo
Definition: win32.h:95
HKL hKL
Definition: ntuser.h:313
PDESKTOPINFO pDeskInfo
Definition: ntuser.h:299
struct tagKL * KeyboardLayout
Definition: win32.h:91
Definition: compat.h:694
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
static __inline ULONG_PTR DesktopHeapGetUserDelta(VOID)
Definition: desktop.h:298
#define NULL
Definition: types.h:112
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
Definition: process.c:1183
struct _DESKTOPINFO * pDeskInfo
Definition: win32.h:94
struct _PROCESSINFO * ppi
Definition: ntuser.h:320

Referenced by GetW32ThreadInfo(), UserDbgPostServiceHook(), and UserDbgPreServiceHook().

◆ UserDbgPostServiceHook()

ULONG_PTR NTAPI UserDbgPostServiceHook ( ULONG  ulSyscallId,
ULONG_PTR  ulResult 
)

Definition at line 763 of file misc.c.

764 {
765  /* Make sure that the first syscall is NtUserInitialize */
766  /* too bad this fails */
767  // ASSERT(gpepCSRSS);
768 
770 
771  return ulResult;
772 }
#define TRUE
Definition: types.h:120
void UserDbgAssertThreadInfo(BOOL showCaller)
Definition: misc.c:707

◆ UserDbgPreServiceHook()

void NTAPI UserDbgPreServiceHook ( ULONG  ulSyscallId,
PULONG_PTR  pulArguments 
)

Definition at line 756 of file misc.c.

757 {
759 }
#define FALSE
Definition: types.h:117
void UserDbgAssertThreadInfo(BOOL showCaller)
Definition: misc.c:707

◆ UserGetLanguageID()

USHORT FASTCALL UserGetLanguageID ( VOID  )

Definition at line 96 of file misc.c.

97 {
99  OBJECT_ATTRIBUTES ObAttr;
100 // http://support.microsoft.com/kb/324097
104  UNICODE_STRING Language;
105 
106  RtlInitUnicodeString( &Language,
107  L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Nls\\Language");
108 
110  &Language,
112  NULL,
113  NULL);
114 
115  if ( NT_SUCCESS(ZwOpenKey(&KeyHandle, KEY_READ, &ObAttr)))
116  {
118  if ( pKeyInfo )
119  {
120  RtlInitUnicodeString(&Language, L"Default");
121 
122  if ( NT_SUCCESS(ZwQueryValueKey( KeyHandle,
123  &Language,
125  pKeyInfo,
126  Size,
127  &Size)) )
128  {
129  RtlInitUnicodeString(&Language, (PWSTR)pKeyInfo->Data);
130  if (!NT_SUCCESS(RtlUnicodeStringToInteger(&Language, 16, &Ret)))
131  {
133  }
134  }
135  ExFreePoolWithTag(pKeyInfo, TAG_STRING);
136  }
138  }
139  TRACE("Language ID = %x\n",Ret);
140  return (USHORT) Ret;
141 }
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4711
#define KEY_READ
Definition: nt_native.h:1023
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
uint16_t * PWSTR
Definition: typedefs.h:56
#define SUBLANG_DEFAULT
Definition: nls.h:168
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define TAG_STRING
Definition: oslist.h:22
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define MAX_PATH
Definition: compat.h:34
#define LANG_ENGLISH
Definition: nls.h:52
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
static const WCHAR L[]
Definition: oid.c:1250
unsigned short USHORT
Definition: pedump.c:61
struct _KEY_VALUE_PARTIAL_INFORMATION KEY_VALUE_PARTIAL_INFORMATION
#define NULL
Definition: types.h:112
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToInteger(PUNICODE_STRING String, ULONG Base, PULONG Value)
unsigned int ULONG
Definition: retypes.h:1
#define MAKELANGID(p, s)
Definition: nls.h:15
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099

Referenced by DriverEntry().

◆ UserGetLanguageToggle()

DWORD FASTCALL UserGetLanguageToggle ( VOID  )

Definition at line 80 of file misc.c.

81 {
83  DWORD dwValue = 0;
84 
85  Status = RegReadUserSetting(L"Keyboard Layout\\Toggle", L"Layout Hotkey", REG_SZ, &dwValue, sizeof(dwValue));
86  if (NT_SUCCESS(Status))
87  {
88  dwValue = atoi((char *)&dwValue);
89  TRACE("Layout Hotkey %d\n",dwValue);
90  }
91  return dwValue;
92 }
LONG NTSTATUS
Definition: precomp.h:26
Status
Definition: gdiplustypes.h:24
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
#define REG_SZ
Definition: layer.c:22

Referenced by SpiGetSet(), and SpiUpdatePerUserSystemParameters().