ReactOS 0.4.16-dev-1946-g52006dd
regcontrol.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  builtin_class_descr
 

Functions

BOOL WINAPI RegisterSystemControls (VOID)
 
ATOM WINAPI RegisterClassExWOWW (WNDCLASSEXW *, LPDWORD, WORD, DWORD, BOOL)
 
BOOL FASTCALL VersionRegisterClass (PCWSTR, LPCWSTR, HANDLE, HMODULE *)
 
LRESULT WINAPI ImeWndProc_common (HWND, UINT, WPARAM, LPARAM, BOOL)
 
LRESULT WINAPI ImeWndProcA (HWND, UINT, WPARAM, LPARAM)
 
LRESULT WINAPI ImeWndProcW (HWND, UINT, WPARAM, LPARAM)
 

Variables

DWORD RegisterDefaultClasses
 
const struct builtin_class_descr BUTTON_builtin_class
 
const struct builtin_class_descr COMBO_builtin_class
 
const struct builtin_class_descr COMBOLBOX_builtin_class
 
const struct builtin_class_descr DIALOG_builtin_class
 
const struct builtin_class_descr POPUPMENU_builtin_class
 
const struct builtin_class_descr DESKTOP_builtin_class
 
const struct builtin_class_descr EDIT_builtin_class
 
const struct builtin_class_descr ICONTITLE_builtin_class
 
const struct builtin_class_descr LISTBOX_builtin_class
 
const struct builtin_class_descr MDICLIENT_builtin_class
 
const struct builtin_class_descr MENU_builtin_class
 
const struct builtin_class_descr SCROLL_builtin_class
 
const struct builtin_class_descr STATIC_builtin_class
 
const struct builtin_class_descr GHOST_builtin_class
 
const struct builtin_class_descr IME_builtin_class
 

Function Documentation

◆ ImeWndProc_common()

LRESULT WINAPI ImeWndProc_common ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 989 of file imm.c.

990{
991 PWND pWnd;
992 PIMEUI pimeui;
993 LRESULT ret;
994
995 pWnd = ValidateHwnd(hwnd);
996 if (pWnd == NULL)
997 {
998 ERR("hwnd was %p\n", hwnd);
999 return 0;
1000 }
1001
1002 if (!pWnd->fnid)
1003 {
1005 }
1006 else if (pWnd->fnid != FNID_IME)
1007 {
1008 ERR("fnid was 0x%x\n", pWnd->fnid);
1009 return 0;
1010 }
1011
1012 if (msg == WM_NCCREATE)
1013 {
1014 pimeui = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMEUI));
1015 if (!pimeui)
1016 {
1017 ERR("HeapAlloc failed\n");
1019 return FALSE;
1020 }
1021 pimeui->spwnd = pWnd;
1023 }
1024 else
1025 {
1027 if (!pimeui)
1028 {
1029 ERR("Invalid IMEWND\n");
1031 return 0;
1032 }
1033 }
1034
1035 if (IS_CICERO_MODE())
1036 {
1038 if (ret)
1039 return ret;
1040 }
1041
1042 if (pimeui->nCntInIMEProc > 0)
1043 {
1044 switch (msg)
1045 {
1046 case WM_IME_CHAR:
1048 case WM_IME_CONTROL:
1049 case WM_IME_REQUEST:
1050 case WM_IME_SELECT:
1051 case WM_IME_SETCONTEXT:
1052 case WM_IME_STARTCOMPOSITION:
1053 case WM_IME_COMPOSITION:
1054 case WM_IME_ENDCOMPOSITION:
1055 return 0;
1056
1057 case WM_IME_NOTIFY:
1058 if (wParam < IMN_PRIVATE || IS_IME_HKL(pimeui->hKL) || !IS_CICERO_MODE())
1059 return 0;
1060 break;
1061
1062 case WM_IME_SYSTEM:
1063 switch (wParam)
1064 {
1065 case 0x03:
1066 case 0x10:
1067 case 0x13:
1068 break;
1069
1070 default:
1071 return 0;
1072 }
1073 break;
1074
1075 default:
1076 goto Finish;
1077 }
1078 }
1079
1080 if ((pWnd->state2 & WNDS2_INDESTROY) || (pWnd->state & WNDS_DESTROYED))
1081 {
1082 switch (msg)
1083 {
1084 case WM_DESTROY:
1085 case WM_NCDESTROY:
1086 case WM_FINALDESTROY:
1087 break;
1088
1089 default:
1090 return 0;
1091 }
1092 }
1093
1094 switch (msg)
1095 {
1096 case WM_CREATE:
1097 return ImeWnd_OnCreate(pimeui, (LPCREATESTRUCT)lParam);
1098
1099 case WM_DESTROY:
1101 return 0;
1102
1103 case WM_NCDESTROY:
1104 case WM_FINALDESTROY:
1105 pimeui->spwnd = NULL;
1106 HeapFree(GetProcessHeap(), 0, pimeui);
1108 break;
1109
1110 case WM_ERASEBKGND:
1111 return TRUE;
1112
1113 case WM_PAINT:
1114 return 0;
1115
1116 case WM_IME_STARTCOMPOSITION:
1117 case WM_IME_COMPOSITION:
1118 case WM_IME_ENDCOMPOSITION:
1119 return User32SendImeUIMessage(pimeui, msg, wParam, lParam, unicode);
1120
1121 case WM_IME_CONTROL:
1122 return ImeWnd_OnImeControl(pimeui, wParam, lParam, unicode);
1123
1124 case WM_IME_NOTIFY:
1125 return ImeWnd_OnImeNotify(pimeui, wParam, lParam);
1126
1127 case WM_IME_REQUEST:
1128 return 0;
1129
1130 case WM_IME_SELECT:
1132 return (LRESULT)pimeui;
1133
1134 case WM_IME_SETCONTEXT:
1135 return ImeWnd_OnImeSetContext(pimeui, wParam, lParam);
1136
1137 case WM_IME_SYSTEM:
1138 return ImeWnd_OnImeSystem(pimeui, wParam, lParam);
1139
1140 default:
1141 break;
1142 }
1143
1144Finish:
1145 if (unicode)
1146 return DefWindowProcW(hwnd, msg, wParam, lParam);
1147 return DefWindowProcA(hwnd, msg, wParam, lParam);
1148}
#define msg(x)
Definition: auth_time.c:54
#define ERR(fmt,...)
Definition: precomp.h:57
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
return ret
Definition: mutex.c:146
LRESULT WINAPI CtfImmDispatchDefImeMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: ctf.c:1417
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:21
#define WM_IME_SYSTEM
Definition: imm32_undoc.h:32
#define IMN_PRIVATE
Definition: imm.h:385
#define FNID_DESTROY
Definition: ntuser.h:898
struct tagIMEUI * PIMEUI
#define WNDS_DESTROYED
Definition: ntuser.h:636
#define GWLP_IMEWND_PIMEUI
Definition: ntuser.h:1244
#define FNID_IME
Definition: ntuser.h:874
#define IS_CICERO_MODE()
Definition: ntuser.h:1213
#define WNDS2_INDESTROY
Definition: ntuser.h:648
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4348
LONG_PTR LRESULT
Definition: minwindef.h:176
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
Definition: ntuser.h:694
DWORD state2
Definition: ntuser.h:702
DWORD fnid
Definition: ntuser.h:709
DWORD state
Definition: ntuser.h:701
HKL hKL
Definition: ntuser.h:1223
PWND spwnd
Definition: ntuser.h:1220
LONG nCntInIMEProc
Definition: ntuser.h:1225
#define WM_FINALDESTROY
Definition: undocuser.h:41
static VOID User32DestroyImeUIWindow(PIMEUI pimeui)
Definition: imm.c:365
LRESULT ImeWnd_OnImeSetContext(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:834
static INT ImeWnd_OnCreate(PIMEUI pimeui, LPCREATESTRUCT lpCS)
Definition: imm.c:334
static LRESULT User32SendImeUIMessage(PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:167
static LRESULT ImeWnd_OnImeSystem(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:679
static LRESULT ImeWnd_OnImeControl(PIMEUI pimeui, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:415
static VOID ImeWnd_OnImeSelect(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:380
static LRESULT ImeWnd_OnImeNotify(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:239
#define IMM_FN(name)
Definition: user32p.h:56
#define ValidateHwnd(hwnd)
Definition: precomp.h:101
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WM_PAINT
Definition: winuser.h:1648
#define WM_ERASEBKGND
Definition: winuser.h:1653
#define WM_IME_REQUEST
Definition: winuser.h:1864
#define GetWindowLongPtrW
Definition: winuser.h:4931
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_IME_NOTIFY
Definition: winuser.h:1858
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1636
#define WM_NCCREATE
Definition: winuser.h:1711
#define WM_IME_SETCONTEXT
Definition: winuser.h:1857
#define WM_IME_CHAR
Definition: winuser.h:1862
#define WM_IME_COMPOSITIONFULL
Definition: winuser.h:1860
#define WM_NCDESTROY
Definition: winuser.h:1712
#define WM_IME_CONTROL
Definition: winuser.h:1859
#define WM_IME_SELECT
Definition: winuser.h:1861
#define WM_DESTROY
Definition: winuser.h:1637
#define SetWindowLongPtrW
Definition: winuser.h:5457

Referenced by ImeWndProcA(), ImeWndProcW(), RealDefWindowProcA(), RealDefWindowProcW(), and RegisterClientPFN().

◆ ImeWndProcA()

LRESULT WINAPI ImeWndProcA ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1150 of file imm.c.

1151{
1153}
LRESULT WINAPI ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:989

Referenced by RegisterClientPFN().

◆ ImeWndProcW()

LRESULT WINAPI ImeWndProcW ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1155 of file imm.c.

1156{
1158}

Referenced by RegisterClientPFN().

◆ RegisterClassExWOWW()

ATOM WINAPI RegisterClassExWOWW ( WNDCLASSEXW lpwcx,
LPDWORD  pdwWowData,
WORD  fnID,
DWORD  dwFlags,
BOOL  ChkRegCls 
)

Definition at line 1270 of file class.c.

1275{
1276 ATOM Atom;
1278 UNICODE_STRING ClassName;
1279 UNICODE_STRING ClassVersion;
1280 UNICODE_STRING MenuName = {0};
1281 CLSMENUNAME clsMenuName;
1282 ANSI_STRING AnsiMenuName;
1283 LPCWSTR lpszClsVersion;
1284
1285 if (lpwcx == NULL || lpwcx->cbSize != sizeof(*lpwcx) ||
1286 lpwcx->cbClsExtra < 0 || lpwcx->cbWndExtra < 0 ||
1287 lpwcx->lpszClassName == NULL)
1288 {
1289 TRACE("RegisterClassExWOWW Invalid Parameter Error!\n");
1291 return 0;
1292 }
1293
1294 if (ChkRegCls)
1295 {
1297 }
1298 /*
1299 * On real Windows this looks more like:
1300 * if (lpwcx->hInstance == User32Instance &&
1301 * *(PULONG)((ULONG_PTR)NtCurrentTeb() + 0x6D4) & 0x400)
1302 * But since I have no idea what the magic field in the
1303 * TEB structure means, I rather decided to omit that.
1304 * -- Filip Navara
1305
1306 GetWin32ClientInfo()->dwExpWinVer & (WINVER == 0x400)
1307 */
1308 if (lpwcx->hInstance == User32Instance)
1309 {
1310 TRACE("RegisterClassExWOWW User32Instance!\n");
1312 return 0;
1313 }
1314 /* Yes, this is correct. We should modify the passed structure. */
1315 if (lpwcx->hInstance == NULL)
1316 ((WNDCLASSEXW*)lpwcx)->hInstance = GetModuleHandleW(NULL);
1317
1318 RtlCopyMemory(&WndClass, lpwcx, sizeof(*lpwcx));
1319
1320 RtlInitEmptyAnsiString(&AnsiMenuName, NULL, 0);
1321 if (!IS_INTRESOURCE(WndClass.lpszMenuName))
1322 {
1323 if (WndClass.lpszMenuName[0])
1324 {
1325 RtlInitUnicodeString(&MenuName, WndClass.lpszMenuName);
1326 RtlUnicodeStringToAnsiString(&AnsiMenuName, &MenuName, TRUE);
1327 }
1328 }
1329 else
1330 {
1331 MenuName.Buffer = (LPWSTR)WndClass.lpszMenuName;
1332 AnsiMenuName.Buffer = (PCHAR)WndClass.lpszMenuName;
1333 }
1334
1335 if (WndClass.lpszClassName && !IS_ATOM(WndClass.lpszClassName))
1336 {
1337 RtlInitUnicodeString(&ClassName, WndClass.lpszClassName);
1338 }
1339 else
1340 {
1341 ClassName.Length = ClassName.MaximumLength = 0;
1342 ClassName.Buffer = (LPWSTR)WndClass.lpszClassName;
1343 }
1344
1345 ClassVersion = ClassName;
1346 if (fnID == 0)
1347 {
1348 lpszClsVersion = ClassNameToVersion(lpwcx->lpszClassName, NULL, NULL, NULL, FALSE);
1349 if (lpszClsVersion)
1350 {
1351 RtlInitUnicodeString(&ClassVersion, lpszClsVersion);
1352 }
1353 }
1354
1355 clsMenuName.pszClientAnsiMenuName = AnsiMenuName.Buffer;
1356 clsMenuName.pwszClientUnicodeMenuName = MenuName.Buffer;
1357 clsMenuName.pusMenuName = &MenuName;
1358
1360 &ClassName,
1361 &ClassVersion,
1362 &clsMenuName,
1363 fnID,
1364 dwFlags,
1365 pdwWowData);
1366
1367 TRACE("atom=%04x wndproc=%p hinst=%p bg=%p style=%08x clsExt=%d winExt=%d class=%p\n",
1368 Atom, lpwcx->lpfnWndProc, lpwcx->hInstance, lpwcx->hbrBackground,
1369 lpwcx->style, lpwcx->cbClsExtra, lpwcx->cbWndExtra, WndClass);
1370
1371 return Atom;
1372}
WCHAR WndClass[]
Definition: capicon.c:23
_Out_ RTL_ATOM * Atom
Definition: class.h:54
#define IS_ATOM(x)
Definition: class.h:3
WORD ATOM
Definition: dimm.idl:113
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
#define IS_INTRESOURCE(x)
Definition: loader.c:613
RTL_ATOM NTAPI NtUserRegisterClassExWOW(WNDCLASSEXW *lpwcx, PUNICODE_STRING pustrClassName, PUNICODE_STRING pustrCVersion, PCLSMENUNAME pClassMenuName, DWORD fnID, DWORD Flags, LPDWORD pWow)
Definition: class.c:2444
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
DWORD RegisterDefaultClasses
Definition: regcontrol.c:13
BOOL WINAPI RegisterSystemControls(VOID)
Definition: regcontrol.c:71
#define TRACE(s)
Definition: solgame.cpp:4
PUNICODE_STRING pusMenuName
Definition: ntuser.h:500
LPSTR pszClientAnsiMenuName
Definition: ntuser.h:498
LPWSTR pwszClientUnicodeMenuName
Definition: ntuser.h:499
USHORT MaximumLength
Definition: env_spec_w32.h:370
LPCWSTR lpszClassName
Definition: winuser.h:3328
HBRUSH hbrBackground
Definition: winuser.h:3326
WNDPROC lpfnWndProc
Definition: winuser.h:3320
UINT cbSize
Definition: winuser.h:3318
int cbWndExtra
Definition: winuser.h:3322
HINSTANCE hInstance
Definition: winuser.h:3323
UINT style
Definition: winuser.h:3319
int cbClsExtra
Definition: winuser.h:3321
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
char * PCHAR
Definition: typedefs.h:51
HINSTANCE User32Instance
Definition: dllmain.c:27
LPCWSTR FASTCALL ClassNameToVersion(const void *lpszClass, LPCWSTR lpszMenuName, LPCWSTR *plpLibFileName, HANDLE *pContext, BOOL bAnsi)
Definition: class.c:85
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by RegisterClassExA(), RegisterClassExW(), and RegisterSystemControls().

◆ RegisterSystemControls()

BOOL WINAPI RegisterSystemControls ( VOID  )

Definition at line 71 of file regcontrol.c.

72{
74 UINT i;
75 ATOM atom;
76
77 if (RegisterDefaultClasses) return TRUE;
78
79 ZeroMemory(&WndClass, sizeof(WndClass));
80
81 WndClass.cbSize = sizeof(WndClass);
82
83 for (i = 0; i != sizeof(g_SysClasses) / sizeof(g_SysClasses[0]); i++)
84 {
86 {
88 continue;
89 }
90
91 WndClass.lpszClassName = g_SysClasses[i].desc->name;
92
93 // Set Global bit!
94 WndClass.style = g_SysClasses[i].desc->style|CS_GLOBALCLASS;
95 WndClass.lpfnWndProc = g_SysClasses[i].desc->procW;
96 WndClass.cbWndExtra = g_SysClasses[i].desc->extra;
97 WndClass.hCursor = LoadCursorW(NULL, g_SysClasses[i].desc->cursor);
98 WndClass.hbrBackground= g_SysClasses[i].desc->brush;
99
101 0,
103 0,
104 FALSE);
105 if (atom)
107 }
108
109 return TRUE;
110}
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 ICLS_IME
Definition: ntuser.h:927
#define ICLASS_TO_MASK(iCls)
Definition: ntuser.h:902
#define IS_IMM_MODE()
Definition: ntuser.h:1212
#define ZeroMemory
Definition: minwinbase.h:31
unsigned int UINT
Definition: ndis.h:50
const struct builtin_class_descr * desc
Definition: regcontrol.c:48
WORD fnid
Definition: regcontrol.c:49
WORD ClsId
Definition: regcontrol.c:50
static const struct @5464 g_SysClasses[]
ATOM WINAPI RegisterClassExWOWW(WNDCLASSEXW *, LPDWORD, WORD, DWORD, BOOL)
Definition: class.c:1270
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2457
#define CS_GLOBALCLASS
Definition: winuser.h:660

Referenced by CreateWindowExA(), CreateWindowExW(), GetClassInfoExA(), GetClassInfoExW(), RegisterClassExWOWW(), and User32CreateWindowEx().

◆ VersionRegisterClass()

BOOL FASTCALL VersionRegisterClass ( PCWSTR  pszClass,
LPCWSTR  lpLibFileName,
HANDLE  Contex,
HMODULE phLibModule 
)

Definition at line 195 of file class.c.

200{
201 BOOL Ret = FALSE;
203 PREGISTERCLASSNAMEW pRegisterClassNameW;
204 UNICODE_STRING ClassName;
205 WCHAR ClassNameBuf[MAX_PATH] = {0};
206 RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame = { sizeof(Frame), 1 };
207
208 ERR("VersionRegisterClass: Attempting to call RegisterClassNameW in %S.\n", lpLibFileName);
209
210 RtlActivateActivationContextUnsafeFast(&Frame, Contex);
211
213 {
214 hLibModule = LoadLibraryW(lpLibFileName);
215 if (hLibModule)
216 {
217 if ((pRegisterClassNameW = (void*)GetProcAddress(hLibModule, "RegisterClassNameW")))
218 {
219 if (IS_ATOM(pszClass))
220 {
221 RtlInitEmptyUnicodeString(&ClassName, ClassNameBuf, sizeof(ClassNameBuf));
222 if (!NtUserGetAtomName(LOWORD((DWORD_PTR)pszClass), &ClassName))
223 {
224 ERR("Error while verifying ATOM\n");
225 _SEH2_YIELD(goto Error_Exit);
226 }
227 pszClass = ClassName.Buffer;
228 }
229 Ret = pRegisterClassNameW(pszClass);
230 }
231 else
232 {
233 WARN("No RegisterClassNameW PROC\n");
234 }
235 }
236 }
238 {
239 ERR("Got exception while trying to call RegisterClassNameW!\n");
240 }
242
243Error_Exit:
244 if (Ret || !hLibModule)
245 {
246 if (phLibModule) *phLibModule = hLibModule;
247 }
248 else
249 {
250 DWORD dwLastError = GetLastError();
252 SetLastError(dwLastError);
253 }
254
255 RtlDeactivateActivationContextUnsafeFast(&Frame);
256 return Ret;
257}
#define WARN(fmt,...)
Definition: precomp.h:61
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define LoadLibraryW(x)
Definition: compat.h:747
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define LOWORD(l)
Definition: pedump.c:82
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:184
HINSTANCE hLibModule
Definition: sfc.c:23
uint32_t DWORD_PTR
Definition: typedefs.h:65
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by GetClassInfoExA(), GetClassInfoExW(), and User32CreateWindowEx().

Variable Documentation

◆ BUTTON_builtin_class

const struct builtin_class_descr BUTTON_builtin_class
extern

Definition at line 142 of file button.c.

◆ COMBO_builtin_class

const struct builtin_class_descr COMBO_builtin_class
extern

Definition at line 67 of file combo.c.

◆ COMBOLBOX_builtin_class

const struct builtin_class_descr COMBOLBOX_builtin_class
extern

Definition at line 142 of file listbox.c.

◆ DESKTOP_builtin_class

const struct builtin_class_descr DESKTOP_builtin_class
extern

◆ DIALOG_builtin_class

const struct builtin_class_descr DIALOG_builtin_class
extern

Definition at line 109 of file dialog.c.

◆ EDIT_builtin_class

const struct builtin_class_descr EDIT_builtin_class
extern

Definition at line 5530 of file edit.c.

◆ GHOST_builtin_class

const struct builtin_class_descr GHOST_builtin_class
extern

Definition at line 17 of file ghost.c.

◆ ICONTITLE_builtin_class

const struct builtin_class_descr ICONTITLE_builtin_class
extern

Definition at line 29 of file icontitle.c.

◆ IME_builtin_class

const struct builtin_class_descr IME_builtin_class
extern

Definition at line 1183 of file imm.c.

◆ LISTBOX_builtin_class

const struct builtin_class_descr LISTBOX_builtin_class
extern

Definition at line 126 of file listbox.c.

◆ MDICLIENT_builtin_class

const struct builtin_class_descr MDICLIENT_builtin_class
extern

Definition at line 212 of file mdi.c.

◆ MENU_builtin_class

const struct builtin_class_descr MENU_builtin_class
extern

◆ POPUPMENU_builtin_class

const struct builtin_class_descr POPUPMENU_builtin_class
extern

Definition at line 48 of file menu.c.

◆ RegisterDefaultClasses

◆ SCROLL_builtin_class

const struct builtin_class_descr SCROLL_builtin_class
extern

Definition at line 75 of file scrollbar.c.

◆ STATIC_builtin_class

const struct builtin_class_descr STATIC_builtin_class
extern

Definition at line 81 of file static.c.