33 PWSTR tmpField = strField;
38 cChar = *strFieldSource;
39 while (cChar ==
L' ' || cChar ==
L'\t' || cChar ==
L'\n' || cChar ==
L'\r')
41 strFieldSource =
CharNextW(strFieldSource);
42 cChar = *strFieldSource;
45 while (cChar && cChar !=
L'=' && cChar !=
L',')
50 if (inQuote && strFieldSource[1] ==
L'"')
52 if (lenField < cchField)
69 if (inQuote || (cChar !=
L'=' && cChar !=
L','))
71 if (lenField < cchField)
74 *(tmpField++) = cChar;
80 strFieldSource =
CharNextW(strFieldSource);
81 cChar = *strFieldSource;
85 while (tmpField > strField)
89 if (cChar !=
L' ' && cChar !=
L'\t' && cChar !=
L'\n' && cChar !=
L'\r')
104 PCWSTR strFieldSource = *pstrFieldSource;
105 WCHAR cChar = *strFieldSource;
110 if (!inQuote && (cChar ==
L'=' || cChar ==
L','))
116 strFieldSource =
CharNextW(strFieldSource);
117 cChar = *strFieldSource;
122 *pstrFieldSource = strFieldSource;
126 *pstrFieldSource =
CharNextW(strFieldSource);
135 PCWSTR tmpArgs = strFieldSource;
136 WCHAR cChar = *tmpArgs;
153 if (*tmpArgs ==
L'=' && !inQuote)
155 strFieldSource = ++tmpArgs;
156 TRACE(
"Skipped content before the first '=', remainder=%S\n", strFieldSource);
159 return strFieldSource;
176 if (*strField !=
L':')
211 WCHAR guid [] =
L"::{450d8fba-ad25-11d0-98a8-0800361b1103}";
244 if (!pInfo->pidlPath)
263 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
268 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
273 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
275 else if (!
StrCmpIW(strField,
L"/SELECT"))
278 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
283 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
285 else if (!
StrCmpIW(strField,
L"-embedding"))
288 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
290 else if (!
StrCmpIW(strField,
L"/SEPARATE"))
293 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
295 else if (!
StrCmpIW(strField,
L"/INPROC"))
299 TRACE(
"CmdLine Parser: Found %S flag\n", strField);
311 TRACE(
"CmdLine Parser: Parsed /INPROC flag. dwFlags=%08lx, guidInproc=%S\n", pInfo->dwFlags, strField);
319 TRACE(
"CmdLine Parser: Found %S flag\n", strField);
341 pInfo->pidlRoot = pidlRoot;
347 pInfo->pidlRoot =
NULL;
352 TRACE(
"CmdLine Parser: Parsed /ROOT flag. dwFlags=%08lx, pidlRoot=%p\n", pInfo->dwFlags, pInfo->pidlRoot);
357 TRACE(
"CmdLine Parser: Found target path %S\n", strField);
374 pInfo->pidlPath = pidlArg;
376 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->dwFlags, pInfo->pidlPath);
393 pInfo->pidlPath = pidlPath;
398 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->dwFlags, pInfo->pidlPath);
407 pInfo->strPath =
field;
411 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, strPath=%S\n", pInfo->dwFlags,
field);
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define SH_EXPLORER_CMDLINE_FLAG_EMBED
#define SH_EXPLORER_CMDLINE_FLAG_NEWWND
#define SH_EXPLORER_CMDLINE_FLAG_IDLIST
#define SH_EXPLORER_CMDLINE_FLAG_NOUI
#define SH_EXPLORER_CMDLINE_FLAG_INPROC
#define SH_EXPLORER_CMDLINE_FLAG_STRING
#define SH_EXPLORER_CMDLINE_FLAG_NOREUSE
#define SH_EXPLORER_CMDLINE_FLAG_SEPARATE
#define SH_EXPLORER_CMDLINE_FLAG_E
#define SH_EXPLORER_CMDLINE_FLAG_SELECT
#define SH_EXPLORER_CMDLINE_FLAG_S
INT WINAPI StrToIntW(LPCWSTR lpString)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
LPWSTR WINAPI GetCommandLineW(VOID)
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
BOOL WINAPI SHUnlockShared(LPVOID lpView)
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
LPWSTR WINAPI PathGetArgsW(LPCWSTR lpszPath)
HRESULT WINAPI SHStrDupW(LPCWSTR src, LPWSTR *dest)
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
unsigned __int3264 UINT_PTR
UINT_PTR WINAPI SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo)
static LPITEMIDLIST _ILReadFromSharedMemory(PCWSTR strField)
static HRESULT _ParsePathToPidl(PWSTR strPath, LPITEMIDLIST *pidl)
BOOL WINAPI GUIDFromStringW(_In_ PCWSTR psz, _Out_ LPGUID pguid)
static LPITEMIDLIST _GetDocumentsPidl()
static BOOL _FindNextArg(PCWSTR *pstrFieldSource)
static PCWSTR _FindFirstField(PCWSTR strFieldSource)
static BOOL _ReadNextArg(PCWSTR *pstrFieldSource, PWSTR strField, size_t cchField)
static BOOL _CopyAndUnquoteText(LPCWSTR strFieldSource, LPWSTR strField, size_t cchField)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
#define CSIDL_MYDOCUMENTS
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
LPWSTR WINAPI CharPrevW(_In_ LPCWSTR, _In_ LPCWSTR)
LPWSTR WINAPI CharNextW(_In_ LPCWSTR)