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}";
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);
355 TRACE(
"CmdLine Parser: Parsed /ROOT flag. dwFlags=%08lx, pidlRoot=%p\n", pInfo->
dwFlags, pInfo->
pidlRoot);
360 TRACE(
"CmdLine Parser: Found target path %S\n", strField);
379 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->
dwFlags, pInfo->
pidlPath);
401 TRACE(
"CmdLine Parser: Parsed target path. dwFlags=%08lx, pidlPath=%p\n", pInfo->
dwFlags, pInfo->
pidlPath);
413 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
UINT_PTR WINAPI SHExplorerParseCmdLine(ExplorerCommandLineParseResults *pInfo)
BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
static HRESULT _ParsePathToPidl(PWSTR strPath, LPITEMIDLIST *pidl)
#define SH_EXPLORER_CMDLINE_FLAG_EMBED
#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)