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);
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define SH_EXPLORER_CMDLINE_FLAG_EMBED
#define SH_EXPLORER_CMDLINE_FLAG_IDLIST
#define SH_EXPLORER_CMDLINE_FLAG_NOUI
#define SH_EXPLORER_CMDLINE_FLAG_N
#define SH_EXPLORER_CMDLINE_FLAG_INPROC
#define SH_EXPLORER_CMDLINE_FLAG_STRING
#define SH_EXPLORER_CMDLINE_FLAG_ONE
#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)
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
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)