ReactOS 0.4.16-dev-91-g764881a
shell32_main.c File Reference
#include <wine/config.h>
#include <windef.h>
#include <winbase.h>
#include <shellapi.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <strsafe.h>
#include <winnls.h>
#include "undocshell.h"
#include "pidl.h"
#include "shell32_main.h"
#include "shresdef.h"
#include <wine/debug.h>
#include <wine/unicode.h>
#include <reactos/version.h>
#include <reactos/buildno.h>
Include dependency graph for shell32_main.c:

Go to the source code of this file.

Classes

struct  ABOUT_INFO
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COBJMACROS
 
#define SHGFI_KNOWN_FLAGS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
LPWSTR *WINAPI CommandLineToArgvW (LPCWSTR lpCmdline, int *numargs)
 
static DWORD shgfi_get_exe_type (LPCWSTR szFullPath)
 
BOOL SHELL_IsShortcut (LPCITEMIDLIST pidlLast)
 
DWORD_PTR WINAPI SHGetFileInfoW (LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
 
DWORD_PTR WINAPI SHGetFileInfoA (LPCSTR path, DWORD dwFileAttributes, SHFILEINFOA *psfi, UINT sizeofpsfi, UINT flags)
 
HICON WINAPI DuplicateIcon (HINSTANCE hInstance, HICON hIcon)
 
HICON WINAPI ExtractIconA (HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex)
 
HICON WINAPI ExtractIconW (HINSTANCE hInstance, LPCWSTR lpszFile, UINT nIconIndex)
 
VOID WINAPI Printer_LoadIconsW (LPCWSTR wsPrinterName, HICON *pLargeIcon, HICON *pSmallIcon)
 
BOOL WINAPI Printers_RegisterWindowW (LPCWSTR wsPrinter, DWORD dwType, HANDLE *phClassPidl, HWND *phwnd)
 
VOID WINAPI Printers_UnregisterWindow (HANDLE hClassPidl, HWND hwnd)
 
DWORD WINAPI SHHelpShortcuts_RunDLLA (DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4)
 
DWORD WINAPI SHHelpShortcuts_RunDLLW (DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4)
 
HRESULT WINAPI SHLoadInProc (REFCLSID rclsid)
 
static VOID SetRegTextData (HWND hWnd, HKEY hKey, LPCWSTR Value, UINT uID)
 
INT_PTR CALLBACK AboutAuthorsDlgProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK AboutDlgProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
BOOL WINAPI ShellAboutA (HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon)
 
BOOL WINAPI ShellAboutW (HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
 
void WINAPI FreeIconList (DWORD dw)
 
HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers (VOID)
 

Variables

const char *const SHELL_Authors [] = { "Copyright 1993-"COPYRIGHT_YEAR" WINE team", "Copyright 1998-"COPYRIGHT_YEAR" ReactOS Team", 0 }
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 26 of file shell32_main.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 27 of file shell32_main.c.

◆ SHGFI_KNOWN_FLAGS

#define SHGFI_KNOWN_FLAGS
Value:
#define SHGFI_ADDOVERLAYS
Definition: entries.h:77
#define SHGFI_ATTR_SPECIFIED
Definition: shellapi.h:174
#define SHGFI_OPENICON
Definition: shellapi.h:178
#define SHGFI_LINKOVERLAY
Definition: shellapi.h:172
#define SHGFI_SYSICONINDEX
Definition: shellapi.h:171
#define SHGFI_ICONLOCATION
Definition: shellapi.h:169
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:166
#define SHGFI_ICON
Definition: shellapi.h:164
#define SHGFI_TYPENAME
Definition: shellapi.h:167
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:181
#define SHGFI_ATTRIBUTES
Definition: shellapi.h:168
#define SHGFI_SMALLICON
Definition: shellapi.h:176
#define SHGFI_SELECTED
Definition: shellapi.h:173
#define SHGFI_OVERLAYINDEX
Definition: shellapi.h:163
#define SHGFI_PIDL
Definition: shellapi.h:180
#define SHGFI_EXETYPE
Definition: shellapi.h:170
#define SHGFI_SHELLICONSIZE
Definition: shellapi.h:179

Definition at line 403 of file shell32_main.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 25 of file shell32_main.c.

Function Documentation

◆ AboutAuthorsDlgProc()

INT_PTR CALLBACK AboutAuthorsDlgProc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1031 of file shell32_main.c.

1032{
1033 switch(msg)
1034 {
1035 case WM_INITDIALOG:
1036 {
1037 const char* const *pstr = SHELL_Authors;
1038
1039 // Add the authors to the list
1041
1042 while (*pstr)
1043 {
1044 WCHAR name[64];
1045
1046 /* authors list is in utf-8 format */
1047 MultiByteToWideChar( CP_UTF8, 0, *pstr, -1, name, sizeof(name)/sizeof(WCHAR) );
1049 pstr++;
1050 }
1051
1053
1054 return TRUE;
1055 }
1056 }
1057
1058 return FALSE;
1059}
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MultiByteToWideChar
Definition: compat.h:110
#define CP_UTF8
Definition: nls.h:20
const char *const SHELL_Authors[]
Definition: shell32_main.c:50
#define IDC_ABOUT_AUTHORS_LISTBOX
Definition: shresdef.h:385
Definition: name.c:39
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WM_INITDIALOG
Definition: winuser.h:1742
#define LB_ADDSTRING
Definition: winuser.h:2034
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SETREDRAW
Definition: winuser.h:1619
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by AboutDlgProc().

◆ AboutDlgProc()

static INT_PTR CALLBACK AboutDlgProc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1063 of file shell32_main.c.

1064{
1065#ifdef __REACTOS__
1066
1067 static DWORD cxLogoBmp;
1068 static DWORD cyLogoBmp, cyLineBmp;
1069 static HBITMAP hLogoBmp, hLineBmp;
1070 static HWND hWndAuthors;
1071
1072 switch (msg)
1073 {
1074 case WM_INITDIALOG:
1075 {
1077
1078 if (info)
1079 {
1080 HKEY hRegKey;
1081 MEMORYSTATUSEX MemStat;
1082 WCHAR szAppTitle[512];
1083 WCHAR szAppTitleTemplate[512];
1084 WCHAR szAuthorsText[20];
1085
1086 // Preload the ROS bitmap
1089
1090 if (hLogoBmp && hLineBmp)
1091 {
1092 BITMAP bmpLogo;
1093
1094 GetObject(hLogoBmp, sizeof(BITMAP), &bmpLogo);
1095
1096 cxLogoBmp = bmpLogo.bmWidth;
1097 cyLogoBmp = bmpLogo.bmHeight;
1098
1099 GetObject(hLineBmp, sizeof(BITMAP), &bmpLogo);
1100 cyLineBmp = bmpLogo.bmHeight;
1101 }
1102
1103 // Set App-specific stuff (icon, app name, szOtherStuff string)
1105
1106 GetWindowTextW(hWnd, szAppTitleTemplate, ARRAY_SIZE(szAppTitleTemplate));
1107 swprintf(szAppTitle, szAppTitleTemplate, info->szApp);
1109
1113
1114 // Set the registered user and organization name
1115 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
1116 0, KEY_QUERY_VALUE, &hRegKey) == ERROR_SUCCESS)
1117 {
1118 SetRegTextData(hWnd, hRegKey, L"RegisteredOwner", IDC_ABOUT_REG_USERNAME);
1119 SetRegTextData(hWnd, hRegKey, L"RegisteredOrganization", IDC_ABOUT_REG_ORGNAME);
1120
1123 {
1125 }
1126
1127 RegCloseKey(hRegKey);
1128 }
1129
1130 // Set the value for the installed physical memory
1131 MemStat.dwLength = sizeof(MemStat);
1132 if (GlobalMemoryStatusEx(&MemStat))
1133 {
1134 WCHAR szBuf[12];
1135
1136 if (MemStat.ullTotalPhys > 1024 * 1024 * 1024)
1137 {
1138 double dTotalPhys;
1139 WCHAR szDecimalSeparator[4];
1140 WCHAR szUnits[3];
1141
1142 // We're dealing with GBs or more
1143 MemStat.ullTotalPhys /= 1024 * 1024;
1144
1145 if (MemStat.ullTotalPhys > 1024 * 1024)
1146 {
1147 // We're dealing with TBs or more
1148 MemStat.ullTotalPhys /= 1024;
1149
1150 if (MemStat.ullTotalPhys > 1024 * 1024)
1151 {
1152 // We're dealing with PBs or more
1153 MemStat.ullTotalPhys /= 1024;
1154
1155 dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
1156 wcscpy(szUnits, L"PB");
1157 }
1158 else
1159 {
1160 dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
1161 wcscpy(szUnits, L"TB");
1162 }
1163 }
1164 else
1165 {
1166 dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
1167 wcscpy(szUnits, L"GB");
1168 }
1169
1170 // We need the decimal point of the current locale to display the RAM size correctly
1172 szDecimalSeparator,
1173 ARRAY_SIZE(szDecimalSeparator)) > 0)
1174 {
1175 UCHAR uDecimals;
1176 UINT uIntegral;
1177
1178 uIntegral = (UINT)dTotalPhys;
1179 uDecimals = (UCHAR)((UINT)(dTotalPhys * 100) - uIntegral * 100);
1180
1181 // Display the RAM size with 2 decimals
1182 swprintf(szBuf, L"%u%s%02u %s", uIntegral, szDecimalSeparator, uDecimals, szUnits);
1183 }
1184 }
1185 else
1186 {
1187 // We're dealing with MBs, don't show any decimals
1188 swprintf(szBuf, L"%u MB", (UINT)MemStat.ullTotalPhys / 1024 / 1024);
1189 }
1190
1192 }
1193
1194 // Add the Authors dialog
1196 LoadStringW(shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, ARRAY_SIZE(szAuthorsText));
1197 SetDlgItemTextW(hWnd, IDC_ABOUT_AUTHORS, szAuthorsText);
1198 }
1199
1200 return TRUE;
1201 }
1202
1203 case WM_PAINT:
1204 {
1205 if (hLogoBmp && hLineBmp)
1206 {
1207 PAINTSTRUCT ps;
1208 HDC hdc;
1209 HDC hdcMem;
1210 HGDIOBJ hOldObj;
1211
1212 hdc = BeginPaint(hWnd, &ps);
1214
1215 if (hdcMem)
1216 {
1217 hOldObj = SelectObject(hdcMem, hLogoBmp);
1218 BitBlt(hdc, 0, 0, cxLogoBmp, cyLogoBmp, hdcMem, 0, 0, SRCCOPY);
1219
1220 SelectObject(hdcMem, hLineBmp);
1221 BitBlt(hdc, 0, cyLogoBmp, cxLogoBmp, cyLineBmp, hdcMem, 0, 0, SRCCOPY);
1222
1223 SelectObject(hdcMem, hOldObj);
1225 }
1226
1227 EndPaint(hWnd, &ps);
1228 }
1229 break;
1230 }
1231
1232 case WM_COMMAND:
1233 {
1234 switch(wParam)
1235 {
1236 case IDOK:
1237 case IDCANCEL:
1239 return TRUE;
1240
1241 case IDC_ABOUT_AUTHORS:
1242 {
1243 static BOOL bShowingAuthors = FALSE;
1244 WCHAR szAuthorsText[20];
1245
1246 if (bShowingAuthors)
1247 {
1248 LoadStringW(shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, ARRAY_SIZE(szAuthorsText));
1249 ShowWindow(hWndAuthors, SW_HIDE);
1250 }
1251 else
1252 {
1253 LoadStringW(shell32_hInstance, IDS_SHELL_ABOUT_BACK, szAuthorsText, ARRAY_SIZE(szAuthorsText));
1254 ShowWindow(hWndAuthors, SW_SHOW);
1255 }
1256
1257 SetDlgItemTextW(hWnd, IDC_ABOUT_AUTHORS, szAuthorsText);
1258 bShowingAuthors = !bShowingAuthors;
1259 return TRUE;
1260 }
1261 }
1262 break;
1263 }
1264
1265 case WM_CLOSE:
1267 break;
1268 }
1269
1270#endif // __REACTOS__
1271
1272 return 0;
1273}
#define shell32_hInstance
#define ARRAY_SIZE(A)
Definition: main.h:20
#define RegCloseKey(hKey)
Definition: registry.h:49
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1665
#define swprintf
Definition: precomp.h:40
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL NTAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
Definition: heapmem.c:1272
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
TCHAR szAppTitle[256]
Definition: mplay32.c:27
unsigned int UINT
Definition: ndis.h:50
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
INT_PTR CALLBACK AboutAuthorsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
static VOID SetRegTextData(HWND hWnd, HKEY hKey, LPCWSTR Value, UINT uID)
#define IDC_ABOUT_REG_USERNAME
Definition: shresdef.h:378
#define IDC_ABOUT_REG_TO
Definition: shresdef.h:377
#define IDC_ABOUT_ICON
Definition: shresdef.h:372
#define IDB_REACTOS
Definition: shresdef.h:30
#define IDC_ABOUT_PHYSMEM
Definition: shresdef.h:380
#define IDB_LINEBAR
Definition: shresdef.h:31
#define IDC_ABOUT_APPNAME
Definition: shresdef.h:373
#define IDC_ABOUT_AUTHORS
Definition: shresdef.h:384
#define IDC_ABOUT_REG_ORGNAME
Definition: shresdef.h:379
#define IDC_ABOUT_VERSION
Definition: shresdef.h:375
#define IDC_ABOUT_OTHERSTUFF
Definition: shresdef.h:376
#define IDD_ABOUT_AUTHORS
Definition: shresdef.h:383
#define IDS_SHELL_ABOUT_BACK
Definition: shresdef.h:137
#define IDS_SHELL_ABOUT_AUTHORS
Definition: shresdef.h:136
Definition: bl.h:1331
HDC hdcMem
Definition: welcome.c:104
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1384
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
#define GetObject
Definition: wingdi.h:4468
BOOL WINAPI DeleteDC(_In_ HDC)
#define LOCALE_SDECIMAL
Definition: winnls.h:42
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define WM_PAINT
Definition: winuser.h:1623
#define SW_HIDE
Definition: winuser.h:771
#define WM_CLOSE
Definition: winuser.h:1624
#define IMAGE_BITMAP
Definition: winuser.h:211
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define STM_SETICON
Definition: winuser.h:2095
#define IDCANCEL
Definition: winuser.h:834
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define WM_COMMAND
Definition: winuser.h:1743
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:833
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define CreateDialogW(h, n, w, f)
Definition: winuser.h:4284
#define LoadImage
Definition: winuser.h:5827
#define LR_DEFAULTCOLOR
Definition: winuser.h:1090
#define SW_SHOW
Definition: winuser.h:778
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define MAKEINTRESOURCE
Definition: winuser.h:591
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by ShellAboutW().

◆ CommandLineToArgvW()

LPWSTR *WINAPI CommandLineToArgvW ( LPCWSTR  lpCmdline,
int numargs 
)

Definition at line 79 of file shell32_main.c.

80{
81 DWORD argc;
82 LPWSTR *argv;
83 LPCWSTR s;
84 LPWSTR d;
86 int qcount,bcount;
87
88 if(!numargs)
89 {
91 return NULL;
92 }
93
94 if (*lpCmdline==0)
95 {
96 /* Return the path to the executable */
97 DWORD len, deslen=MAX_PATH, size;
98
99 size = sizeof(LPWSTR)*2 + deslen*sizeof(WCHAR);
100 for (;;)
101 {
102 if (!(argv = LocalAlloc(LMEM_FIXED, size))) return NULL;
103 len = GetModuleFileNameW(0, (LPWSTR)(argv+2), deslen);
104 if (!len)
105 {
107 return NULL;
108 }
109 if (len < deslen) break;
110 deslen*=2;
111 size = sizeof(LPWSTR)*2 + deslen*sizeof(WCHAR);
112 LocalFree( argv );
113 }
114 argv[0]=(LPWSTR)(argv+2);
115 argv[1]=NULL;
116 *numargs=1;
117
118 return argv;
119 }
120
121 /* --- First count the arguments */
122 argc=1;
123 s=lpCmdline;
124 /* The first argument, the executable path, follows special rules */
125 if (*s=='"')
126 {
127 /* The executable path ends at the next quote, no matter what */
128 s++;
129 while (*s)
130 if (*s++=='"')
131 break;
132 }
133 else
134 {
135 /* The executable path ends at the next space, no matter what */
136 while (*s && !isspace(*s))
137 s++;
138 }
139 /* skip to the first argument, if any */
140 while (isblank(*s))
141 s++;
142 if (*s)
143 argc++;
144
145 /* Analyze the remaining arguments */
146 qcount=bcount=0;
147 while (*s)
148 {
149 if (isblank(*s) && qcount==0)
150 {
151 /* skip to the next argument and count it if any */
152 while (isblank(*s))
153 s++;
154 if (*s)
155 argc++;
156 bcount=0;
157 }
158 else if (*s=='\\')
159 {
160 /* '\', count them */
161 bcount++;
162 s++;
163 }
164 else if (*s=='"')
165 {
166 /* '"' */
167 if ((bcount & 1)==0)
168 qcount++; /* unescaped '"' */
169 s++;
170 bcount=0;
171 /* consecutive quotes, see comment in copying code below */
172 while (*s=='"')
173 {
174 qcount++;
175 s++;
176 }
177 qcount=qcount % 3;
178 if (qcount==2)
179 qcount=0;
180 }
181 else
182 {
183 /* a regular character */
184 bcount=0;
185 s++;
186 }
187 }
188
189 /* Allocate in a single lump, the string array, and the strings that go
190 * with it. This way the caller can make a single LocalFree() call to free
191 * both, as per MSDN.
192 */
193 argv=LocalAlloc(LMEM_FIXED, (argc+1)*sizeof(LPWSTR)+(strlenW(lpCmdline)+1)*sizeof(WCHAR));
194 if (!argv)
195 return NULL;
196 cmdline=(LPWSTR)(argv+argc+1);
197 strcpyW(cmdline, lpCmdline);
198
199 /* --- Then split and copy the arguments */
200 argv[0]=d=cmdline;
201 argc=1;
202 /* The first argument, the executable path, follows special rules */
203 if (*d=='"')
204 {
205 /* The executable path ends at the next quote, no matter what */
206 s=d+1;
207 while (*s)
208 {
209 if (*s=='"')
210 {
211 s++;
212 break;
213 }
214 *d++=*s++;
215 }
216 }
217 else
218 {
219 /* The executable path ends at the next space, no matter what */
220 while (*d && !isspace(*d))
221 d++;
222 s=d;
223 if (*s)
224 s++;
225 }
226 /* close the executable path */
227 *d++=0;
228 /* skip to the first argument and initialize it if any */
229 while (isblank(*s))
230 s++;
231
232 if (!*s)
233 {
234 /* There are no parameters so we are all done */
235 argv[argc]=NULL;
236 *numargs=argc;
237 return argv;
238 }
239
240 /* Split and copy the remaining arguments */
241 argv[argc++]=d;
242 qcount=bcount=0;
243 while (*s)
244 {
245 if (isblank(*s) && qcount==0)
246 {
247 /* close the argument */
248 *d++=0;
249 bcount=0;
250
251 /* skip to the next one and initialize it if any */
252 do {
253 s++;
254 } while (isblank(*s));
255 if (*s)
256 argv[argc++]=d;
257 }
258 else if (*s=='\\')
259 {
260 *d++=*s++;
261 bcount++;
262 }
263 else if (*s=='"')
264 {
265 if ((bcount & 1)==0)
266 {
267 /* Preceded by an even number of '\', this is half that
268 * number of '\', plus a quote which we erase.
269 */
270 d-=bcount/2;
271 qcount++;
272 }
273 else
274 {
275 /* Preceded by an odd number of '\', this is half that
276 * number of '\' followed by a '"'
277 */
278 d=d-bcount/2-1;
279 *d++='"';
280 }
281 s++;
282 bcount=0;
283 /* Now count the number of consecutive quotes. Note that qcount
284 * already takes into account the opening quote if any, as well as
285 * the quote that lead us here.
286 */
287 while (*s=='"')
288 {
289 if (++qcount==3)
290 {
291 *d++='"';
292 qcount=0;
293 }
294 s++;
295 }
296 if (qcount==2)
297 qcount=0;
298 }
299 else
300 {
301 /* a regular character */
302 *d++=*s++;
303 bcount=0;
304 }
305 }
306 *d='\0';
307 argv[argc]=NULL;
308 *numargs=argc;
309
310 return argv;
311}
static int argc
Definition: ServiceArgs.c:12
#define isspace(c)
Definition: acclib.h:69
#define NULL
Definition: types.h:112
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
GLdouble s
Definition: gl.h:2039
GLsizeiptr size
Definition: glext.h:5919
GLenum GLsizei len
Definition: glext.h:6722
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define d
Definition: ke_i.h:81
#define argv
Definition: mplay32.c:18
#define strlenW(s)
Definition: unicode.h:34
#define strcpyW(d, s)
Definition: unicode.h:35
TCHAR * cmdline
Definition: stretchblt.cpp:32
#define isblank(x)
Definition: trio.c:93
#define LMEM_FIXED
Definition: winbase.h:368
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by _tmain(), CmdDebugService(), command_line_to_args(), DisplayApplet(), DoEntry(), get_utf8_args(), main(), ParseCmdAndExecute(), PrintUIEntryW(), ProcessCmdLine(), ProcessCommandLine(), test_commandline2argv(), test_one_cmdline(), and wWinMain().

◆ DuplicateIcon()

HICON WINAPI DuplicateIcon ( HINSTANCE  hInstance,
HICON  hIcon 
)

Definition at line 832 of file shell32_main.c.

833{
835 HICON hDupIcon = 0;
836
837 TRACE("%p %p\n", hInstance, hIcon);
838
840 {
841 hDupIcon = CreateIconIndirect(&IconInfo);
842
843 /* clean up hbmMask and hbmColor */
846 }
847
848 return hDupIcon;
849}
HINSTANCE hInstance
Definition: charmap.c:19
pKey DeleteObject()
_Out_opt_ PICONINFO IconInfo
Definition: ntuser.h:2294
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
#define TRACE(s)
Definition: solgame.cpp:4
HBITMAP hbmColor
Definition: winuser.h:3130
HBITMAP hbmMask
Definition: winuser.h:3129
HICON WINAPI CreateIconIndirect(_In_ PICONINFO)
Definition: cursoricon.c:2625
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
Definition: cursoricon.c:2089

◆ ExtractIconA()

HICON WINAPI ExtractIconA ( HINSTANCE  hInstance,
LPCSTR  lpszFile,
UINT  nIconIndex 
)

Definition at line 854 of file shell32_main.c.

855{
856 HICON ret;
857 INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0);
858 LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
859
860 TRACE("%p %s %d\n", hInstance, lpszFile, nIconIndex);
861
862 MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len);
863 ret = ExtractIconW(hInstance, lpwstrFile, nIconIndex);
864 HeapFree(GetProcessHeap(), 0, lpwstrFile);
865
866 return ret;
867}
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
HICON WINAPI ExtractIconW(HINSTANCE hInstance, LPCWSTR lpszFile, UINT nIconIndex)
Definition: shell32_main.c:872
int32_t INT
Definition: typedefs.h:58
int ret

Referenced by test_ExtractIcon().

◆ ExtractIconW()

HICON WINAPI ExtractIconW ( HINSTANCE  hInstance,
LPCWSTR  lpszFile,
UINT  nIconIndex 
)

Definition at line 872 of file shell32_main.c.

873{
874 HICON hIcon = NULL;
875 UINT ret;
877
878 TRACE("%p %s %d\n", hInstance, debugstr_w(lpszFile), nIconIndex);
879
880 if (nIconIndex == (UINT)-1)
881 {
882 ret = PrivateExtractIconsW(lpszFile, 0, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR);
883 if (ret != (UINT)-1 && ret)
884 return (HICON)(UINT_PTR)ret;
885 return NULL;
886 }
887 else
888 ret = PrivateExtractIconsW(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR);
889
890 if (ret == (UINT)-1)
891 return (HICON)1;
892 else if (ret > 0 && hIcon)
893 return hIcon;
894
895 return NULL;
896}
#define debugstr_w
Definition: kernel32.h:32
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
UINT WINAPI PrivateExtractIconsW(_In_reads_(MAX_PATH) LPCWSTR szFileName, _In_ int nIconIndex, _In_ int cxIcon, _In_ int cyIcon, _Out_writes_opt_(nIcons) HICON *phicon, _Out_writes_opt_(nIcons) UINT *piconid, _In_ UINT nIcons, _In_ UINT flags)
#define SM_CYICON
Definition: winuser.h:976
#define SM_CXICON
Definition: winuser.h:975
int WINAPI GetSystemMetrics(_In_ int)

Referenced by DlgInitHandler(), ExtractAssociatedIconW(), ExtractIconA(), ExtractIconWrapW(), and test_ExtractIcon().

◆ FreeIconList()

void WINAPI FreeIconList ( DWORD  dw)

Definition at line 1353 of file shell32_main.c.

1354{
1355 FIXME("%x: stub\n",dw);
1356}
#define FIXME(fmt,...)
Definition: precomp.h:53
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40

◆ Printer_LoadIconsW()

VOID WINAPI Printer_LoadIconsW ( LPCWSTR  wsPrinterName,
HICON pLargeIcon,
HICON pSmallIcon 
)

Definition at line 901 of file shell32_main.c.

902{
904
905 TRACE("(%s, %p, %p)\n", debugstr_w(wsPrinterName), pLargeIcon, pSmallIcon);
906
907 /* We should check if wsPrinterName is
908 1. the Default Printer or not
909 2. connected or not
910 3. a Local Printer or a Network-Printer
911 and use different Icons
912 */
913 if((wsPrinterName != NULL) && (wsPrinterName[0] != 0))
914 {
915 FIXME("(select Icon by PrinterName %s not implemented)\n", debugstr_w(wsPrinterName));
916 }
917
918 if(pLargeIcon != NULL)
919 *pLargeIcon = LoadImageW(shell32_hInstance,
920 (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON,
922
923 if(pSmallIcon != NULL)
924 *pSmallIcon = LoadImageW(shell32_hInstance,
925 (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON,
926 16, 16, LR_DEFAULTCOLOR);
927}
#define IDI_SHELL_PRINTERS_FOLDER
Definition: shresdef.h:591
#define IMAGE_ICON
Definition: winuser.h:212
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:2247
#define LR_DEFAULTSIZE
Definition: winuser.h:1097

◆ Printers_RegisterWindowW()

BOOL WINAPI Printers_RegisterWindowW ( LPCWSTR  wsPrinter,
DWORD  dwType,
HANDLE phClassPidl,
HWND phwnd 
)

Definition at line 935 of file shell32_main.c.

937{
938 FIXME("(%s, %x, %p (%p), %p (%p)) stub!\n", debugstr_w(wsPrinter), dwType,
939 phClassPidl, (phClassPidl != NULL) ? *(phClassPidl) : NULL,
940 phwnd, (phwnd != NULL) ? *(phwnd) : NULL);
941
942 return FALSE;
943}

◆ Printers_UnregisterWindow()

VOID WINAPI Printers_UnregisterWindow ( HANDLE  hClassPidl,
HWND  hwnd 
)

Definition at line 948 of file shell32_main.c.

949{
950 FIXME("(%p, %p) stub!\n", hClassPidl, hwnd);
951}
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

◆ SetRegTextData()

static VOID SetRegTextData ( HWND  hWnd,
HKEY  hKey,
LPCWSTR  Value,
UINT  uID 
)
static

Definition at line 1006 of file shell32_main.c.

1007{
1008 DWORD dwBufferSize;
1009 DWORD dwType;
1011
1012 if( RegQueryValueExW(hKey, Value, NULL, &dwType, NULL, &dwBufferSize) == ERROR_SUCCESS )
1013 {
1014 if(dwType == REG_SZ)
1015 {
1016 lpBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwBufferSize);
1017
1018 if(lpBuffer)
1019 {
1020 if( RegQueryValueExW(hKey, Value, NULL, &dwType, (LPBYTE)lpBuffer, &dwBufferSize) == ERROR_SUCCESS )
1021 {
1023 }
1024
1026 }
1027 }
1028 }
1029}
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
FxAutoRegKey hKey
#define REG_SZ
Definition: layer.c:22
unsigned char * LPBYTE
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Referenced by AboutDlgProc().

◆ SHELL_IsShortcut()

BOOL SHELL_IsShortcut ( LPCITEMIDLIST  pidlLast)

Definition at line 382 of file shell32_main.c.

383{
384 WCHAR szTemp[MAX_PATH];
385 HKEY keyCls;
386 BOOL ret = FALSE;
387
388 if (_ILGetExtension(pidlLast, szTemp, _countof(szTemp)) &&
389 HCR_MapTypeToValueW(szTemp, szTemp, _countof(szTemp), TRUE))
390 {
392 {
393 if (ERROR_SUCCESS == RegQueryValueExW(keyCls, L"IsShortcut", NULL, NULL, NULL, NULL))
394 ret = TRUE;
395
396 RegCloseKey(keyCls);
397 }
398 }
399
400 return ret;
401}
BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2460
BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot)
Definition: classes.c:49
#define _countof(array)
Definition: sndvol32.h:70
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by SHGetFileInfoW(), and SHMapPIDLToSystemImageListIndex().

◆ ShellAboutA()

BOOL WINAPI ShellAboutA ( HWND  hWnd,
LPCSTR  szApp,
LPCSTR  szOtherStuff,
HICON  hIcon 
)

Definition at line 1279 of file shell32_main.c.

1280{
1281 BOOL ret;
1282 LPWSTR appW = NULL, otherW = NULL;
1283 int len;
1284
1285 if (szApp)
1286 {
1287 len = MultiByteToWideChar(CP_ACP, 0, szApp, -1, NULL, 0);
1288 appW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1289 MultiByteToWideChar(CP_ACP, 0, szApp, -1, appW, len);
1290 }
1291 if (szOtherStuff)
1292 {
1293 len = MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, NULL, 0);
1294 otherW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1295 MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, otherW, len);
1296 }
1297
1298 ret = ShellAboutW(hWnd, appW, otherW, hIcon);
1299
1300 HeapFree(GetProcessHeap(), 0, otherW);
1301 HeapFree(GetProcessHeap(), 0, appW);
1302 return ret;
1303}
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)

◆ ShellAboutW()

BOOL WINAPI ShellAboutW ( HWND  hWnd,
LPCWSTR  szApp,
LPCWSTR  szOtherStuff,
HICON  hIcon 
)

Definition at line 1309 of file shell32_main.c.

1311{
1313 HRSRC hRes;
1314 DLGTEMPLATE *DlgTemplate;
1315 BOOL bRet;
1316#ifdef __REACTOS__
1317 WCHAR szVersionString[256];
1318 WCHAR szFormat[256];
1319#endif
1320
1321 TRACE("\n");
1322
1323 // DialogBoxIndirectParamW will be called with the hInstance of the calling application, so we have to preload the dialog template
1325 if(!hRes)
1326 return FALSE;
1327
1328 DlgTemplate = (DLGTEMPLATE *)LoadResource(shell32_hInstance, hRes);
1329 if(!DlgTemplate)
1330 return FALSE;
1331
1332#ifdef __REACTOS__
1333 /* Output the version OS kernel strings */
1335 StringCchPrintfW(szVersionString, _countof(szVersionString), szFormat, KERNEL_VERSION_STR, KERNEL_VERSION_BUILD_STR);
1336#endif
1337
1338 info.szApp = szApp;
1339#ifdef __REACTOS__
1340 info.szOSVersion = szVersionString;
1341#endif
1342 info.szOtherStuff = szOtherStuff;
1343 info.hIcon = hIcon ? hIcon : LoadIconW( 0, (LPWSTR)IDI_WINLOGO );
1344
1346 DlgTemplate, hWnd, AboutDlgProc, (LPARAM)&info );
1347 return bRet;
1348}
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
#define RT_DIALOG
Definition: pedump.c:367
static INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
#define IDD_ABOUT
Definition: shresdef.h:371
#define IDS_ABOUT_VERSION_STRING
Definition: shresdef.h:374
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
#define GetWindowLongPtrW
Definition: winuser.h:4832
INT_PTR WINAPI DialogBoxIndirectParamW(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define GWLP_HINSTANCE
Definition: winuser.h:859
#define IDI_WINLOGO
Definition: winuser.h:709
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2119

Referenced by Control_WndProc(), dialog_about(), ie_dialog_about(), MACRO_About(), MAIN_MenuCommand(), MainProc(), MainWndCommand(), OnAbout(), CDeviceManager::OnCommand(), OnCommand(), CMainWindow::OnCommand(), OSK_About(), ShellAboutA(), ShowAboutBox(), CMainWindow::ShowAboutDlg(), ShowAboutDlg(), WndProc(), and wWinMain().

◆ SHGetFileInfoA()

DWORD_PTR WINAPI SHGetFileInfoA ( LPCSTR  path,
DWORD  dwFileAttributes,
SHFILEINFOA psfi,
UINT  sizeofpsfi,
UINT  flags 
)

Definition at line 781 of file shell32_main.c.

784{
785 INT len;
786 LPWSTR temppath = NULL;
787 LPCWSTR pathW;
789 SHFILEINFOW temppsfi;
790
791 if (flags & SHGFI_PIDL)
792 {
793 /* path contains a pidl */
794 pathW = (LPCWSTR)path;
795 }
796 else
797 {
798 len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0);
799 temppath = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
800 MultiByteToWideChar(CP_ACP, 0, path, -1, temppath, len);
801 pathW = temppath;
802 }
803
804 if (psfi)
805 {
806 temppsfi.hIcon = psfi->hIcon;
807 temppsfi.iIcon = psfi->iIcon;
808 temppsfi.dwAttributes = psfi->dwAttributes;
809
810 ret = SHGetFileInfoW(pathW, dwFileAttributes, &temppsfi, sizeof(temppsfi), flags);
811 psfi->hIcon = temppsfi.hIcon;
812 psfi->iIcon = temppsfi.iIcon;
813 psfi->dwAttributes = temppsfi.dwAttributes;
814
816 psfi->szDisplayName, sizeof(psfi->szDisplayName), NULL, NULL);
817
818 WideCharToMultiByte(CP_ACP, 0, temppsfi.szTypeName, -1,
819 psfi->szTypeName, sizeof(psfi->szTypeName), NULL, NULL);
820 }
821 else
823
824 HeapFree(GetProcessHeap(), 0, temppath);
825
826 return ret;
827}
DWORD dwFileAttributes
#define WideCharToMultiByte
Definition: compat.h:111
GLbitfield flags
Definition: glext.h:7161
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:414
CHAR szTypeName[80]
Definition: shellapi.h:369
HICON hIcon
Definition: shellapi.h:365
DWORD dwAttributes
Definition: shellapi.h:367
CHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:368
WCHAR szTypeName[80]
Definition: shellapi.h:376
DWORD dwAttributes
Definition: shellapi.h:374
WCHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:375
HICON hIcon
Definition: shellapi.h:372
uint32_t DWORD_PTR
Definition: typedefs.h:65

Referenced by test_get_file_info(), and test_get_file_info_iconlist().

◆ SHGetFileInfoW()

DWORD_PTR WINAPI SHGetFileInfoW ( LPCWSTR  path,
DWORD  dwFileAttributes,
SHFILEINFOW psfi,
UINT  sizeofpsfi,
UINT  flags 
)

Definition at line 414 of file shell32_main.c.

416{
417 WCHAR szLocation[MAX_PATH], szFullPath[MAX_PATH];
418 int iIndex;
421 IShellFolder * psfParent = NULL;
422 IExtractIconW * pei = NULL;
423 LPITEMIDLIST pidlLast = NULL, pidl = NULL;
424 HRESULT hr = S_OK;
425 BOOL IconNotYetLoaded=TRUE;
426 UINT uGilFlags = 0;
427 HIMAGELIST big_icons, small_icons;
428
429 TRACE("%s fattr=0x%x sfi=%p(attr=0x%08x) size=0x%x flags=0x%x\n",
431 psfi, psfi ? psfi->dwAttributes : 0, sizeofpsfi, flags);
432
433 if (!path)
434 return FALSE;
435
436 /* windows initializes these values regardless of the flags */
437 if (psfi != NULL)
438 {
439 psfi->szDisplayName[0] = '\0';
440 psfi->szTypeName[0] = '\0';
441 psfi->hIcon = NULL;
442 }
443
444 if (!(flags & SHGFI_PIDL))
445 {
446 /* SHGetFileInfo should work with absolute and relative paths */
448 {
449 GetCurrentDirectoryW(MAX_PATH, szLocation);
450 PathCombineW(szFullPath, szLocation, path);
451 }
452 else
453 {
454 lstrcpynW(szFullPath, path, MAX_PATH);
455 }
456 }
457 else
458 {
460 }
461
462 if (flags & SHGFI_EXETYPE)
463 {
464 if (!(flags & SHGFI_SYSICONINDEX))
465 {
467 {
468 return TRUE;
469 }
470 else if (GetFileAttributesW(szFullPath) != INVALID_FILE_ATTRIBUTES)
471 {
472 return shgfi_get_exe_type(szFullPath);
473 }
474 }
475 }
476
477 /*
478 * psfi is NULL normally to query EXE type. If it is NULL, none of the
479 * below makes sense anyway. Windows allows this and just returns FALSE
480 */
481 if (psfi == NULL)
482 return FALSE;
483
484 /*
485 * translate the path into a pidl only when SHGFI_USEFILEATTRIBUTES
486 * is not specified.
487 * The pidl functions fail on not existing file names
488 */
489
490 if (flags & SHGFI_PIDL)
491 {
492 pidl = ILClone((LPCITEMIDLIST)path);
493 }
494 else if (!(flags & SHGFI_USEFILEATTRIBUTES))
495 {
496 hr = SHILCreateFromPathW(szFullPath, &pidl, &dwAttributes);
497 }
498
500 {
501 /* get the parent shellfolder */
502 if (pidl)
503 {
504 hr = SHBindToParent( pidl, &IID_IShellFolder, (LPVOID*)&psfParent,
505 (LPCITEMIDLIST*)&pidlLast );
506 if (SUCCEEDED(hr))
507 pidlLast = ILClone(pidlLast);
508 else
509 hr = S_OK;
510 ILFree(pidl);
511 }
512 else
513 {
514 ERR("pidl is null!\n");
515 return FALSE;
516 }
517 }
518
519 /* get the attributes of the child */
521 {
523 {
524 psfi->dwAttributes = 0xffffffff;
525 }
526 if (psfParent)
527 {
528 IShellFolder_GetAttributesOf(psfParent, 1, (LPCITEMIDLIST*)&pidlLast,
529 &(psfi->dwAttributes));
530 }
531 }
532
534 {
535 if (flags & SHGFI_ICON)
536 {
537 psfi->dwAttributes = 0;
538 }
539 }
540
541 /* get the displayname */
543 {
545 {
546 lstrcpyW (psfi->szDisplayName, PathFindFileNameW(szFullPath));
547 }
548 else if (psfParent)
549 {
550 STRRET str;
551 hr = IShellFolder_GetDisplayNameOf( psfParent, pidlLast,
552 SHGDN_INFOLDER, &str);
553 StrRetToStrNW (psfi->szDisplayName, MAX_PATH, &str, pidlLast);
554 }
555 }
556
557 /* get the type name */
558 if (SUCCEEDED(hr) && (flags & SHGFI_TYPENAME))
559 {
561 {
562 _ILGetFileType(pidlLast, psfi->szTypeName, _countof(psfi->szTypeName));
563 }
564 else
565 {
567 strcatW (psfi->szTypeName, L"Folder");
568 else
569 {
570 WCHAR sTemp[64];
571
572 lstrcpyW(sTemp,PathFindExtensionW(szFullPath));
573 if (sTemp[0] == 0 || (sTemp[0] == '.' && sTemp[1] == 0))
574 {
575 /* "name" or "name." => "File" */
576 lstrcpynW (psfi->szTypeName, L"File", 64);
577 }
578 else if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) &&
579 HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE )))
580 {
581 if (sTemp[0])
582 {
583 lstrcpynW (psfi->szTypeName, sTemp, 64);
584 strcatW (psfi->szTypeName, L" file");
585 }
586 else
587 {
588 lstrcpynW (psfi->szTypeName, L"File", 64);
589 }
590 }
591 }
592 }
593 }
594
595 /* ### icons ###*/
596
597 Shell_GetImageLists( &big_icons, &small_icons );
598
599 if (flags & SHGFI_OPENICON)
600 uGilFlags |= GIL_OPENICON;
601
603 uGilFlags |= GIL_FORSHORTCUT;
604 else if ((flags&SHGFI_ADDOVERLAYS) ||
606 {
607 if (SHELL_IsShortcut(pidlLast))
608 uGilFlags |= GIL_FORSHORTCUT;
609 }
610
612 FIXME("SHGFI_OVERLAYINDEX unhandled\n");
613
614 if (flags & SHGFI_SELECTED)
615 FIXME("set icon to selected, stub\n");
616
618 FIXME("set icon to shell size, stub\n");
619
620 /* get the iconlocation */
622 {
623 UINT uDummy,uFlags;
624
626 {
628 {
630 psfi->iIcon = -IDI_SHELL_FOLDER;
631 }
632 else
633 {
634 WCHAR* szExt;
635 WCHAR sTemp [MAX_PATH];
636
637 szExt = PathFindExtensionW(szFullPath);
638 TRACE("szExt=%s\n", debugstr_w(szExt));
639 if ( szExt &&
640 HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) &&
641 HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &psfi->iIcon))
642 {
643 if (lstrcmpW(L"%1", sTemp))
644 strcpyW(psfi->szDisplayName, sTemp);
645 else
646 {
647 /* the icon is in the file */
648 strcpyW(psfi->szDisplayName, szFullPath);
649 }
650 }
651 else
652 ret = FALSE;
653 }
654 }
655 else if (psfParent)
656 {
657 hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1,
658 (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconW,
659 &uDummy, (LPVOID*)&pei);
660 if (SUCCEEDED(hr))
661 {
662 hr = IExtractIconW_GetIconLocation(pei, uGilFlags,
663 szLocation, MAX_PATH, &iIndex, &uFlags);
664
665 if (uFlags & GIL_NOTFILENAME)
666 ret = FALSE;
667 else
668 {
669 lstrcpyW (psfi->szDisplayName, szLocation);
670 psfi->iIcon = iIndex;
671 }
672 IExtractIconW_Release(pei);
673 }
674 }
675 }
676
677 /* get icon index (or load icon)*/
679 {
681 {
682 WCHAR sTemp [MAX_PATH];
683 WCHAR * szExt;
684 int icon_idx=0;
685
686 lstrcpynW(sTemp, szFullPath, MAX_PATH);
687
690 else
691 {
692 psfi->iIcon = 0;
693 szExt = PathFindExtensionW(sTemp);
694 if ( szExt &&
695 HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) &&
696 HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &icon_idx))
697 {
698 if (!lstrcmpW(L"%1",sTemp)) /* icon is in the file */
699 strcpyW(sTemp, szFullPath);
700
702 {
703 psfi->iIcon = SIC_GetIconIndex(sTemp,icon_idx,0);
704 if (psfi->iIcon == -1)
705 psfi->iIcon = 0;
706 }
707 else
708 {
709 UINT ret;
711 ret = PrivateExtractIconsW( sTemp,icon_idx,
714 &psfi->hIcon, 0, 1, 0);
715 else
716 ret = PrivateExtractIconsW( sTemp, icon_idx,
719 &psfi->hIcon, 0, 1, 0);
720 if (ret != 0 && ret != (UINT)-1)
721 {
722 IconNotYetLoaded=FALSE;
723 psfi->iIcon = icon_idx;
724 }
725 }
726 }
727 }
728 }
729 else if (psfParent)
730 {
731 if (!(PidlToSicIndex(psfParent, pidlLast, !(flags & SHGFI_SMALLICON),
732 uGilFlags, &(psfi->iIcon))))
733 {
734 ret = FALSE;
735 }
736 }
737 if (ret && (flags & SHGFI_SYSICONINDEX))
738 {
740 ret = (DWORD_PTR)small_icons;
741 else
742 ret = (DWORD_PTR)big_icons;
743 }
744 }
745
746 /* icon handle */
747 if (SUCCEEDED(hr) && (flags & SHGFI_ICON) && IconNotYetLoaded)
748 {
750 psfi->hIcon = ImageList_GetIcon( small_icons, psfi->iIcon, ILD_NORMAL);
751 else
752 psfi->hIcon = ImageList_GetIcon( big_icons, psfi->iIcon, ILD_NORMAL);
753 }
754
756 FIXME("unknown flags %08x\n", flags & ~SHGFI_KNOWN_FLAGS);
757
758 if (psfParent)
759 IShellFolder_Release(psfParent);
760
761 if (hr != S_OK)
762 ret = FALSE;
763
764 SHFree(pidlLast);
765
766 TRACE ("icon=%p index=0x%08x attr=0x%08x name=%s type=%s ret=0x%08lx\n",
767 psfi->hIcon, psfi->iIcon, psfi->dwAttributes,
769
770 return ret;
771}
#define IDI_SHELL_FOLDER
Definition: treeview.c:21
#define ERR(fmt,...)
Definition: precomp.h:57
UINT uFlags
Definition: api.c:59
HICON WINAPI ImageList_GetIcon(HIMAGELIST himl, INT i, UINT fStyle)
Definition: imagelist.c:1963
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:756
#define lstrcpyW
Definition: compat.h:749
#define lstrcpynW
Definition: compat.h:738
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4242
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1579
#define IShellFolder_GetDisplayNameOf
Definition: utils.cpp:13
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
INT SIC_GetIconIndex(LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
Definition: iconcache.cpp:440
BOOL PidlToSicIndex(IShellFolder *sh, LPCITEMIDLIST pidl, BOOL bBigIcon, UINT uFlags, int *pIndex)
Definition: iconcache.cpp:709
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:683
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PathCombineW
Definition: pathcch.h:317
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:946
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:401
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1356
void _ILGetFileType(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2506
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1348
#define ILD_NORMAL
Definition: commctrl.h:417
#define strcatW(d, s)
Definition: unicode.h:36
const WCHAR * str
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
Definition: classes.c:297
BOOL SHELL_IsShortcut(LPCITEMIDLIST pidlLast)
Definition: shell32_main.c:382
#define SHGFI_KNOWN_FLAGS
Definition: shell32_main.c:403
static DWORD shgfi_get_exe_type(LPCWSTR szFullPath)
Definition: shell32_main.c:313
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
HRESULT hr
Definition: shlfolder.c:183
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define DWORD_PTR
Definition: treelist.c:76
DWORD dwAttributes
Definition: vdmdbg.h:34
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define SM_CYSMICON
Definition: winuser.h:1016
#define SM_CXSMICON
Definition: winuser.h:1015

Referenced by AddListViewItems(), CShellMenuCallback::AddOrSetMenuItem(), BrFolder_GetIcon(), BrFolder_OnOK(), FILEDLG95_InitControls(), FILEDLG95_LOOKIN_AddItem(), FILEDLG95_LOOKIN_DrawItem(), GetAssocClass(), CZipFolder::GetDetailsOf(), COpenWithList::GetIcon(), GetTypeDescriptionByPath(), RecycleBin5File::GetTypeName(), CFileDefExt::InitFileType(), CSendToMenu::LoadAllItems(), CNewMenu::LoadItem(), CShellBrowser::OnAddToFavorites(), CShellLink::OnInitDialog(), QueryFileDescription(), SHCreateFileExtractIconW(), SHGetFileInfoA(), SHGetFileInfoWrapW(), SHGFI(), START_TEST(), test_get_file_info(), test_get_file_info_iconlist(), and WelcomeDlgProc().

◆ shgfi_get_exe_type()

static DWORD shgfi_get_exe_type ( LPCWSTR  szFullPath)
static

Definition at line 313 of file shell32_main.c.

314{
315 BOOL status = FALSE;
316 HANDLE hfile;
317 DWORD BinaryType;
318 IMAGE_DOS_HEADER mz_header;
320 DWORD len;
321 char magic[4];
322
323 status = GetBinaryTypeW (szFullPath, &BinaryType);
324 if (!status)
325 return 0;
326 if (BinaryType == SCS_DOS_BINARY || BinaryType == SCS_PIF_BINARY)
327 return 0x4d5a;
328
329 hfile = CreateFileW( szFullPath, GENERIC_READ, FILE_SHARE_READ,
330 NULL, OPEN_EXISTING, 0, 0 );
331 if ( hfile == INVALID_HANDLE_VALUE )
332 return 0;
333
334 /*
335 * The next section is adapted from MODULE_GetBinaryType, as we need
336 * to examine the image header to get OS and version information. We
337 * know from calling GetBinaryTypeA that the image is valid and either
338 * an NE or PE, so much error handling can be omitted.
339 * Seek to the start of the file and read the header information.
340 */
341
342 SetFilePointer( hfile, 0, NULL, SEEK_SET );
343 ReadFile( hfile, &mz_header, sizeof(mz_header), &len, NULL );
344
345 SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET );
346 ReadFile( hfile, magic, sizeof(magic), &len, NULL );
347 if ( *(DWORD*)magic == IMAGE_NT_SIGNATURE )
348 {
349 SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET );
350 ReadFile( hfile, &nt, sizeof(nt), &len, NULL );
351 CloseHandle( hfile );
352 /* DLL files are not executable and should return 0 */
354 return 0;
356 {
357 return IMAGE_NT_SIGNATURE |
360 }
361 return IMAGE_NT_SIGNATURE;
362 }
363 else if ( *(WORD*)magic == IMAGE_OS2_SIGNATURE )
364 {
366 SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET );
367 ReadFile( hfile, &ne, sizeof(ne), &len, NULL );
368 CloseHandle( hfile );
369 if (ne.ne_exetyp == 2)
370 return IMAGE_OS2_SIGNATURE | (ne.ne_expver << 16);
371 return 0;
372 }
373 CloseHandle( hfile );
374 return 0;
375}
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define SetFilePointer
Definition: compat.h:743
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define CreateFileW
Definition: compat.h:741
#define FILE_SHARE_READ
Definition: compat.h:136
BOOL WINAPI GetBinaryTypeW(LPCWSTR lpApplicationName, LPDWORD lpBinaryType)
Definition: vdm.c:1243
unsigned short WORD
Definition: ntddk_ex.h:93
#define SEEK_SET
Definition: jmemansi.c:26
IMAGE_NT_HEADERS nt
Definition: module.c:50
u32_t magic(void)
#define IMAGE_SUBSYSTEM_WINDOWS_GUI
Definition: ntimage.h:437
#define IMAGE_NT_SIGNATURE
Definition: pedump.c:93
#define IMAGE_FILE_DLL
Definition: pedump.c:169
#define IMAGE_OS2_SIGNATURE
Definition: pedump.c:90
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
IMAGE_FILE_HEADER FileHeader
Definition: ntddk_ex.h:183
Definition: ps.c:97
#define SCS_PIF_BINARY
Definition: winbase.h:240
#define SCS_DOS_BINARY
Definition: winbase.h:238

Referenced by SHGetFileInfoW().

◆ SHHelpShortcuts_RunDLLA()

DWORD WINAPI SHHelpShortcuts_RunDLLA ( DWORD  dwArg1,
DWORD  dwArg2,
DWORD  dwArg3,
DWORD  dwArg4 
)

Definition at line 969 of file shell32_main.c.

970{
971 FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4);
972 return 0;
973}

◆ SHHelpShortcuts_RunDLLW()

DWORD WINAPI SHHelpShortcuts_RunDLLW ( DWORD  dwArg1,
DWORD  dwArg2,
DWORD  dwArg3,
DWORD  dwArg4 
)

Definition at line 979 of file shell32_main.c.

980{
981 FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4);
982 return 0;
983}

◆ SHLoadInProc()

HRESULT WINAPI SHLoadInProc ( REFCLSID  rclsid)

Definition at line 990 of file shell32_main.c.

991{
992 void *ptr = NULL;
993
994 TRACE("%s\n", debugstr_guid(rclsid));
995
996 CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown,&ptr);
997 if(ptr)
998 {
999 IUnknown * pUnk = ptr;
1000 IUnknown_Release(pUnk);
1001 return S_OK;
1002 }
1003 return DISP_E_MEMBERNOTFOUND;
1004}
const GUID IID_IUnknown
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#define debugstr_guid
Definition: kernel32.h:35
static PVOID ptr
Definition: dispmode.c:27
#define DISP_E_MEMBERNOTFOUND
Definition: winerror.h:2512

◆ SHLoadNonloadedIconOverlayIdentifiers()

HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers ( VOID  )

Definition at line 1361 of file shell32_main.c.

1362{
1363 FIXME("stub\n");
1364 return S_OK;
1365}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ SHELL_Authors

const char* const SHELL_Authors[] = { "Copyright 1993-"COPYRIGHT_YEAR" WINE team", "Copyright 1998-"COPYRIGHT_YEAR" ReactOS Team", 0 }

Definition at line 50 of file shell32_main.c.

Referenced by AboutAuthorsDlgProc().