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)
264 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
269 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
274 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
276 else if (!
StrCmpIW(strField,
L"/SELECT"))
279 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
284 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
286 else if (!
StrCmpIW(strField,
L"-embedding"))
289 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
291 else if (!
StrCmpIW(strField,
L"/SEPARATE"))
294 TRACE(
"CmdLine Parser: Parsed %S flag. dwFlags=%08lx\n", strField, pInfo->dwFlags);
296 else if (!
StrCmpIW(strField,
L"/INPROC"))
300 TRACE(
"CmdLine Parser: Found %S flag\n", strField);
312 TRACE(
"CmdLine Parser: Parsed /INPROC flag. dwFlags=%08lx, guidInproc=%S\n", pInfo->dwFlags, strField);
320 TRACE(
"CmdLine Parser: Found %S flag\n", strField);
322 if (!pInfo->pidlPath)
345 pInfo->pidlRoot = pidlRoot;
351 pInfo->pidlRoot =
NULL;
356 TRACE(
"CmdLine Parser: Parsed /ROOT flag. dwFlags=%08lx, pidlRoot=%p\n", pInfo->dwFlags, pInfo->pidlRoot);
361 TRACE(
"CmdLine Parser: Found target path %S\n", strField);
378 pInfo->pidlPath = pidlArg;
380 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->dwFlags, pInfo->pidlPath);
397 pInfo->pidlPath = pidlPath;
402 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->dwFlags, pInfo->pidlPath);
410 pInfo->strPath =
field;
414 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, strPath=%S\n", pInfo->dwFlags,
field);
#define SH_EXPLORER_CMDLINE_FLAG_S
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
static PCWSTR _FindFirstField(PCWSTR strFieldSource)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
void WINAPI ILFree(LPITEMIDLIST pidl)
static BOOL _ReadNextArg(PCWSTR *pstrFieldSource, PWSTR strField, size_t cchField)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
#define SH_EXPLORER_CMDLINE_FLAG_ONE
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
#define SH_EXPLORER_CMDLINE_FLAG_IDLIST
LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
#define SH_EXPLORER_CMDLINE_FLAG_INPROC
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
#define CSIDL_MYDOCUMENTS
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
LPWSTR WINAPI GetCommandLineW(VOID)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define SH_EXPLORER_CMDLINE_FLAG_E
BOOL WINAPI GUIDFromStringW(_In_ PCWSTR psz, _Out_ LPGUID pguid)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
#define SH_EXPLORER_CMDLINE_FLAG_N
LPWSTR WINAPI CharNextW(_In_ LPCWSTR)
LPWSTR WINAPI CharPrevW(_In_ LPCWSTR, _In_ LPCWSTR)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
unsigned __int3264 UINT_PTR
BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
static HRESULT _ParsePathToPidl(PWSTR strPath, LPITEMIDLIST *pidl)
#define SH_EXPLORER_CMDLINE_FLAG_EMBED
UINT_PTR WINAPI SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo)
#define SH_EXPLORER_CMDLINE_FLAG_NOUI
#define SH_EXPLORER_CMDLINE_FLAG_STRING
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
LPWSTR WINAPI PathGetArgsW(LPCWSTR lpszPath)
static LPITEMIDLIST _GetDocumentsPidl()
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
INT WINAPI StrToIntW(LPCWSTR lpString)
BOOL WINAPI SHUnlockShared(LPVOID lpView)
static LPITEMIDLIST _ILReadFromSharedMemory(PCWSTR strField)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
static BOOL _CopyAndUnquoteText(LPCWSTR strFieldSource, LPWSTR strField, size_t cchField)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
#define SH_EXPLORER_CMDLINE_FLAG_SEPARATE
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
#define SH_EXPLORER_CMDLINE_FLAG_SELECT
static BOOL _FindNextArg(PCWSTR *pstrFieldSource)