ReactOS  0.4.15-dev-3303-g1ade494
rundll32.c File Reference
#include <stdarg.h>
#include <stdlib.h>
#include <windef.h>
#include <winbase.h>
#include <winnls.h>
#include <winuser.h>
#include <tchar.h>
#include "resource.h"
Include dependency graph for rundll32.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define FreeConvertedWideChar(lpwString)   free(lpwString)
 
#define ConvertToMultiByte(lptString)   (lptString)
 
#define FreeConvertedMultiByte(lpaString)
 

Typedefs

typedef int(WINAPIDllWinMainW) (HWND hWnd, HINSTANCE hInstance, LPWSTR lpwCmdLine, int nCmdShow)
 
typedef int(WINAPIDllWinMainA) (HWND hWnd, HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
 

Functions

LPTSTR *WINAPI CommandLineToArgv (LPCTSTR lpCmdLine, int *lpArgc)
 
void GetModuleTitle (void)
 
LPWSTR ConvertToWideChar (LPCSTR lpString)
 
LPSTR DuplicateToMultiByte (LPCTSTR lptString, size_t nBufferSize)
 
LRESULT CALLBACK EmptyWindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
BOOL RegisterBlankClass (HINSTANCE hInstance, HINSTANCE hPrevInstance)
 
int WINAPI _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
 

Variables

LPCTSTR rundll32_wtitle = _T("rundll32")
 
LPCTSTR rundll32_wclass = _T("rundll32_window")
 
TCHAR ModuleFileName [MAX_PATH+1]
 
LPTSTR ModuleTitle
 

Macro Definition Documentation

◆ ConvertToMultiByte

#define ConvertToMultiByte (   lptString)    (lptString)

Definition at line 274 of file rundll32.c.

◆ FreeConvertedMultiByte

#define FreeConvertedMultiByte (   lpaString)

Definition at line 275 of file rundll32.c.

◆ FreeConvertedWideChar

#define FreeConvertedWideChar (   lpwString)    free(lpwString)

Definition at line 261 of file rundll32.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 24 of file rundll32.c.

Typedef Documentation

◆ DllWinMainA

typedef int(WINAPI * DllWinMainA) (HWND hWnd, HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)

Definition at line 41 of file rundll32.c.

◆ DllWinMainW

typedef int(WINAPI * DllWinMainW) (HWND hWnd, HINSTANCE hInstance, LPWSTR lpwCmdLine, int nCmdShow)

Definition at line 35 of file rundll32.c.

Function Documentation

◆ _tWinMain()

int WINAPI _tWinMain ( HINSTANCE  hInstance,
HINSTANCE  hPrevInstance,
LPTSTR  lpCmdLine,
int  nCmdShow 
)

Definition at line 328 of file rundll32.c.

334 {
335  int argc;
336  TCHAR szMsg[RC_STRING_MAX_SIZE];
337 
338  LPTSTR *argv;
339  LPTSTR lptCmdLine,lptDllName,lptFuncName,lptMsgBuffer;
340  LPSTR lpFuncName,lpaCmdLine;
341  LPWSTR lpwCmdLine;
342  HMODULE hDll;
343  DllWinMainW fnDllWinMainW;
344  DllWinMainA fnDllWinMainA;
345  HWND hWindow;
346  int i;
347  size_t nStrLen;
348 
349  ACTCTXW ActCtx = {sizeof(ACTCTX), ACTCTX_FLAG_RESOURCE_NAME_VALID};
350  HANDLE hActCtx;
352  BOOL bActivated;
353 
354  // Get command-line in argc-argv format
356 
357  // Skip all beginning arguments starting with a slash (/)
358  for (i = 1; i < argc; i++)
359  if (*argv[i] != _T('/')) break;
360 
361  // If no dll was specified, there is nothing to do
362  if (i >= argc) {
363  if (argv) free(argv);
364  return 0;
365  }
366 
367  lptDllName = argv[i++];
368 
369  // The next argument, which specifies the name of the dll function,
370  // can either have a comma between it and the dll filename or a space.
371  // Using a comma here is the preferred method
372  if (i < argc)
373  lptFuncName = argv[i++];
374  else
375  lptFuncName = _T("");
376 
377  // If no function name was specified, nothing needs to be done
378  if (!*lptFuncName) {
379  if (argv) free(argv);
380  return 0;
381  }
382 
383  // The rest of the arguments will be passed to dll function
384  if (i < argc)
385  lptCmdLine = argv[i];
386  else
387  lptCmdLine = _T("");
388 
389  ActCtx.lpSource = lptDllName;
390  ActCtx.lpResourceName = (LPCWSTR)123;
391  hActCtx = CreateActCtx(&ActCtx);
392  bActivated = (hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx, &cookie) : FALSE);
393 
394  // Everything is all setup, so load the dll now
395  hDll = LoadLibrary(lptDllName);
396  if (hDll) {
397  nStrLen = _tcslen(lptFuncName);
398  // Make a non-unicode version of the function name,
399  // since that is all GetProcAddress accepts
400  lpFuncName = DuplicateToMultiByte(lptFuncName,nStrLen + 2);
401 
402 #ifdef UNICODE
403  lpFuncName[nStrLen] = 'W';
404  lpFuncName[nStrLen+1] = 0;
405  // Get address of unicode version of the dll function if it exists
406  fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName);
407  fnDllWinMainA = 0;
408  if (!fnDllWinMainW) {
409  // If no unicode function was found, get the address of the non-unicode function
410  lpFuncName[nStrLen] = 'A';
411  fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName);
412  if (!fnDllWinMainA) {
413  // If first non-unicode function was not found, get the address
414  // of the other non-unicode function
415  lpFuncName[nStrLen] = 0;
416  fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName);
417  }
418  }
419 #else
420  // Get address of non-unicode version of the dll function if it exists
421  fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName);
422  fnDllWinMainW = 0;
423  if (!fnDllWinMainA) {
424  // If first non-unicode function was not found, get the address
425  // of the other non-unicode function
426  lpFuncName[nStrLen] = 'A';
427  lpFuncName[nStrLen+1] = 0;
428  fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName);
429  if (!fnDllWinMainA) {
430  // If non-unicode function was not found, get the address of the unicode function
431  lpFuncName[nStrLen] = 'W';
432  fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName);
433  }
434  }
435 #endif
436 
437  free(lpFuncName);
438 
439  if (!RegisterBlankClass(hInstance, hPrevInstance))
440  {
441  FreeLibrary(hDll);
442  if (bActivated)
444  return 0;
445  }
446  // Create a window so we can pass a window handle to
447  // the dll function; this is required
449 
450  if (fnDllWinMainW) {
451  // Convert the command-line string to unicode and call the dll function
452  lpwCmdLine = ConvertToWideChar(lptCmdLine);
453  fnDllWinMainW(hWindow,hInstance,lpwCmdLine,nCmdShow);
454  FreeConvertedWideChar(lpwCmdLine);
455  }
456  else if (fnDllWinMainA) {
457  // Convert the command-line string to ansi and call the dll function
458  lpaCmdLine = ConvertToMultiByte(lptCmdLine);
459  fnDllWinMainA(hWindow,hInstance,lpaCmdLine,nCmdShow);
460  FreeConvertedMultiByte(lpaCmdLine);
461  }
462  else {
463  // The specified dll function was not found; display an error message
464  GetModuleTitle();
466 
467  lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 4 + _tcslen(lptFuncName) + _tcslen(lptDllName) + 1) * sizeof(TCHAR));
468  _stprintf(lptMsgBuffer,szMsg,lptFuncName,lptDllName);
469  MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR);
470  free(lptMsgBuffer);
471  }
472 
473  DestroyWindow(hWindow);
475 
476  // The dll function has finished executing, so unload it
477  FreeLibrary(hDll);
478  }
479  else {
480  // The dll could not be loaded; display an error message
481  GetModuleTitle();
483 
484  lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 2 + _tcslen(lptDllName) + 1) * sizeof(TCHAR));
485  _stprintf(lptMsgBuffer,szMsg,lptDllName);
486 
487  MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR);
488  free(lptMsgBuffer);
489  }
490 
491  if (bActivated)
493 
494  if (argv) free(argv);
495  return 0; /* rundll32 always returns 0! */
496 }
BOOL WINAPI ActivateActCtx(IN HANDLE hActCtx, OUT PULONG_PTR ulCookie)
Definition: actctx.c:237
static int argc
Definition: ServiceArgs.c:12
#define LoadLibrary
Definition: winbase.h:3718
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPCTSTR rundll32_wtitle
Definition: rundll32.c:52
#define free
Definition: debug_ros.c:5
BOOL RegisterBlankClass(HINSTANCE hInstance, HINSTANCE hPrevInstance)
Definition: rundll32.c:308
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define IDS_MissingEntry
Definition: resource.h:9
#define FreeConvertedWideChar(lpwString)
Definition: rundll32.c:261
#define argv
Definition: mplay32.c:18
char * LPSTR
Definition: xmlstorage.h:182
BOOL WINAPI DestroyWindow(_In_ HWND)
LPSTR DuplicateToMultiByte(LPCTSTR lptString, size_t nBufferSize)
Definition: rundll32.c:284
CHAR * LPTSTR
Definition: xmlstorage.h:192
uint32_t ULONG_PTR
Definition: typedefs.h:65
BOOL WINAPI DeactivateActCtx(IN DWORD dwFlags, IN ULONG_PTR ulCookie)
Definition: actctx.c:268
HINSTANCE hInstance
Definition: charmap.c:20
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define CreateWindowEx
Definition: winuser.h:5731
#define CW_USEDEFAULT
Definition: winuser.h:225
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
#define GetCommandLine
Definition: winbase.h:3655
#define FreeConvertedMultiByte(lpaString)
Definition: rundll32.c:275
LPCTSTR rundll32_wclass
Definition: rundll32.c:53
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
#define FreeLibrary(x)
Definition: compat.h:607
_In_ PCWSTR _Out_ PVOID * ActCtx
Definition: ldrtypes.h:247
#define MB_ICONERROR
Definition: winuser.h:781
#define MessageBox
Definition: winuser.h:5798
#define _stprintf
Definition: utility.h:124
LPTSTR *WINAPI CommandLineToArgv(LPCTSTR lpCmdLine, int *lpArgc)
Definition: rundll32.c:63
#define IDS_DllNotLoaded
Definition: resource.h:8
#define GetModuleHandle
Definition: winbase.h:3683
int(WINAPI * DllWinMainW)(HWND hWnd, HINSTANCE hInstance, LPWSTR lpwCmdLine, int nCmdShow)
Definition: rundll32.c:35
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
Definition: cookie.c:33
#define NULL
Definition: types.h:112
#define ConvertToMultiByte(lptString)
Definition: rundll32.c:274
LPTSTR ModuleTitle
Definition: rundll32.c:56
void GetModuleTitle(void)
Definition: rundll32.c:217
LPWSTR ConvertToWideChar(LPCSTR lpString)
Definition: rundll32.c:248
#define GetProcAddress(x, y)
Definition: compat.h:612
#define malloc
Definition: debug_ros.c:4
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define UnregisterClass
Definition: winuser.h:5837
int(WINAPI * DllWinMainA)(HWND hWnd, HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
Definition: rundll32.c:41
#define LoadString
Definition: winuser.h:5795
#define RC_STRING_MAX_SIZE
Definition: resource.h:3

◆ CommandLineToArgv()

LPTSTR* WINAPI CommandLineToArgv ( LPCTSTR  lpCmdLine,
int lpArgc 
)

Definition at line 63 of file rundll32.c.

64 {
65  LPTSTR *argv, lpSrc, lpDest, lpArg;
66  int argc, nBSlash, nNames;
67  BOOL bInQuotes, bFirstChar;
68 
69  // If null was passed in for lpCmdLine, there are no arguments
70  if (!lpCmdLine) {
71  if (lpArgc)
72  *lpArgc = 0;
73  return 0;
74  }
75 
76  lpSrc = (LPTSTR)lpCmdLine;
77  // Skip spaces at beginning
78  while (*lpSrc == _T(' ') || *lpSrc == _T('\t'))
79  lpSrc++;
80 
81  // If command-line starts with null, there are no arguments
82  if (*lpSrc == 0) {
83  if (lpArgc)
84  *lpArgc = 0;
85  return 0;
86  }
87 
88  lpArg = lpSrc;
89  argc = 0;
90  nBSlash = 0;
91  bInQuotes = FALSE;
92  bFirstChar = TRUE;
93  nNames = 0;
94 
95  // Count the number of arguments
96  while (nNames < 4) {
97  if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) {
98  // Whitespace not enclosed in quotes signals the start of another argument
99  argc++;
100 
101  // Skip whitespace between arguments
102  while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2))
103  lpSrc++;
104  if (*lpSrc == 0)
105  break;
106  if (nNames >= 3) {
107  // Increment the count for the last argument
108  argc++;
109  break;
110  }
111  nBSlash = 0;
112  bFirstChar = TRUE;
113  continue;
114  }
115  else if (*lpSrc == _T('\\')) {
116  // Count consecutive backslashes
117  nBSlash++;
118  bFirstChar = FALSE;
119  }
120  else if (*lpSrc == _T('\"') && !(nBSlash & 1)) {
121  // Open or close quotes
122  bInQuotes = !bInQuotes;
123  nBSlash = 0;
124  }
125  else {
126  // Some other character
127  nBSlash = 0;
128  if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1))
129  nNames++;
130  bFirstChar = FALSE;
131  }
132  lpSrc++;
133  }
134 
135  // Allocate space for the pointers in argv and the strings in one block
136  argv = (LPTSTR *)malloc(argc * sizeof(LPTSTR) + (_tcslen(lpArg) + 1) * sizeof(TCHAR));
137 
138  if (!argv) {
139  // Memory allocation failed
140  if (lpArgc)
141  *lpArgc = 0;
142  return 0;
143  }
144 
145  lpSrc = lpArg;
146  lpDest = lpArg = (LPTSTR)(argv + argc);
147  argc = 0;
148  nBSlash = 0;
149  bInQuotes = FALSE;
150  bFirstChar = TRUE;
151  nNames = 0;
152 
153  // Fill the argument array
154  while (nNames < 4) {
155  if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) {
156  // Whitespace not enclosed in quotes signals the start of another argument
157  // Null-terminate argument
158  *lpDest++ = 0;
159  argv[argc++] = lpArg;
160 
161  // Skip whitespace between arguments
162  while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2))
163  lpSrc++;
164  if (*lpSrc == 0)
165  break;
166  lpArg = lpDest;
167  if (nNames >= 3) {
168  // Copy the rest of the command-line to the last argument
169  argv[argc++] = lpArg;
170  _tcscpy(lpArg,lpSrc);
171  break;
172  }
173  nBSlash = 0;
174  bFirstChar = TRUE;
175  continue;
176  }
177  else if (*lpSrc == _T('\\')) {
178  *lpDest++ = _T('\\');
179  lpSrc++;
180 
181  // Count consecutive backslashes
182  nBSlash++;
183  bFirstChar = FALSE;
184  }
185  else if (*lpSrc == _T('\"')) {
186  if (!(nBSlash & 1)) {
187  // If an even number of backslashes are before the quotes,
188  // the quotes don't go in the output
189  lpDest -= nBSlash / 2;
190  bInQuotes = !bInQuotes;
191  }
192  else {
193  // If an odd number of backslashes are before the quotes,
194  // output a quote
195  lpDest -= (nBSlash + 1) / 2;
196  *lpDest++ = _T('\"');
197  bFirstChar = FALSE;
198  }
199  lpSrc++;
200  nBSlash = 0;
201  }
202  else {
203  // Copy other characters
204  if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1))
205  nNames++;
206  *lpDest++ = *lpSrc++;
207  nBSlash = 0;
208  bFirstChar = FALSE;
209  }
210  }
211 
212  if (lpArgc)
213  *lpArgc = argc;
214  return argv;
215 }
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
#define argv
Definition: mplay32.c:18
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
#define malloc
Definition: debug_ros.c:4

Referenced by _tWinMain().

◆ ConvertToWideChar()

LPWSTR ConvertToWideChar ( LPCSTR  lpString)

Definition at line 248 of file rundll32.c.

249 {
250  LPWSTR lpwString;
251  size_t nStrLen;
252 
253  nStrLen = strlen(lpString) + 1;
254 
255  lpwString = (LPWSTR)malloc(nStrLen * sizeof(WCHAR));
256  MultiByteToWideChar(0,0,lpString,nStrLen,lpwString,nStrLen);
257 
258  return lpwString;
259 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MultiByteToWideChar
Definition: compat.h:110
#define malloc
Definition: debug_ros.c:4
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by _tWinMain().

◆ DuplicateToMultiByte()

LPSTR DuplicateToMultiByte ( LPCTSTR  lptString,
size_t  nBufferSize 
)

Definition at line 284 of file rundll32.c.

285 {
286  LPSTR lpString;
287  size_t nStrLen;
288 
289  nStrLen = _tcslen(lptString) + 1;
290  if (nBufferSize == 0) nBufferSize = nStrLen;
291 
292  lpString = (LPSTR)malloc(nBufferSize);
293 #ifdef UNICODE
294  WideCharToMultiByte(0,0,lptString,nStrLen,lpString,nBufferSize,0,0);
295 #else
296  strncpy(lpString,lptString,nBufferSize);
297 #endif
298 
299  return lpString;
300 }
#define WideCharToMultiByte
Definition: compat.h:111
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
char * LPSTR
Definition: xmlstorage.h:182
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
#define malloc
Definition: debug_ros.c:4

Referenced by _tWinMain().

◆ EmptyWindowProc()

LRESULT CALLBACK EmptyWindowProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 302 of file rundll32.c.

303 {
304  return DefWindowProc(hWnd, uMsg, wParam, lParam);
305 }
HWND hWnd
Definition: settings.c:17
WPARAM wParam
Definition: combotst.c:138
#define DefWindowProc
Definition: ros2win.h:31
LPARAM lParam
Definition: combotst.c:139

Referenced by RegisterBlankClass().

◆ GetModuleTitle()

void GetModuleTitle ( void  )

Definition at line 217 of file rundll32.c.

218 {
219  LPTSTR lpStr;
220 
223 
224  for (lpStr = ModuleFileName;*lpStr;lpStr++) {
225  if (*lpStr == _T('\\'))
226  ModuleTitle = lpStr+1;
227  }
228 
229  for (lpStr = ModuleTitle;*lpStr;lpStr++) {
230  if (_tcsicmp(lpStr,_T(".exe"))==0)
231  break;
232  }
233 
234  *lpStr = 0;
235 }
#define _tcsicmp
Definition: xmlstorage.h:205
CHAR * LPTSTR
Definition: xmlstorage.h:192
TCHAR ModuleFileName[MAX_PATH+1]
Definition: rundll32.c:55
#define _T(x)
Definition: vfdio.h:22
#define MAX_PATH
Definition: compat.h:34
#define GetModuleFileName
Definition: winbase.h:3687
LPTSTR ModuleTitle
Definition: rundll32.c:56

Referenced by _tWinMain().

◆ RegisterBlankClass()

BOOL RegisterBlankClass ( HINSTANCE  hInstance,
HINSTANCE  hPrevInstance 
)

Definition at line 308 of file rundll32.c.

309 {
310  WNDCLASSEX wcex;
311 
312  wcex.cbSize = sizeof(WNDCLASSEX);
313  wcex.style = 0;
315  wcex.cbClsExtra = 0;
316  wcex.cbWndExtra = 0;
317  wcex.hInstance = hInstance;
318  wcex.hIcon = 0;
319  wcex.hCursor = 0;
320  wcex.hbrBackground = 0;
321  wcex.lpszMenuName = 0;
323  wcex.hIconSm = 0;
324 
325  return (RegisterClassEx(&wcex) != (ATOM)0);
326 }
UINT style
Definition: winuser.h:3178
LPCSTR lpszMenuName
Definition: winuser.h:3186
#define RegisterClassEx
Definition: winuser.h:5813
HCURSOR hCursor
Definition: winuser.h:3184
WNDPROC lpfnWndProc
Definition: winuser.h:3179
LPCSTR lpszClassName
Definition: winuser.h:3187
WORD ATOM
Definition: dimm.idl:113
HICON hIconSm
Definition: winuser.h:3188
HINSTANCE hInstance
Definition: charmap.c:20
HINSTANCE hInstance
Definition: winuser.h:3182
LRESULT CALLBACK EmptyWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: rundll32.c:302
UINT cbSize
Definition: winuser.h:3177
HBRUSH hbrBackground
Definition: winuser.h:3185
LPCTSTR rundll32_wclass
Definition: rundll32.c:53
int cbWndExtra
Definition: winuser.h:3181
HICON hIcon
Definition: winuser.h:3183
int cbClsExtra
Definition: winuser.h:3180
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5695

Referenced by _tWinMain().

Variable Documentation

◆ ModuleFileName

TCHAR ModuleFileName[MAX_PATH+1]

Definition at line 55 of file rundll32.c.

Referenced by GetModuleTitle(), and MiQueryMemorySectionName().

◆ ModuleTitle

LPTSTR ModuleTitle

Definition at line 56 of file rundll32.c.

Referenced by _tWinMain(), and GetModuleTitle().

◆ rundll32_wclass

LPCTSTR rundll32_wclass = _T("rundll32_window")

Definition at line 53 of file rundll32.c.

Referenced by _tWinMain(), and RegisterBlankClass().

◆ rundll32_wtitle

LPCTSTR rundll32_wtitle = _T("rundll32")

Definition at line 52 of file rundll32.c.

Referenced by _tWinMain().