18 #define SECL_NO_UI 0x2
19 #define SECL_LOG_USAGE 0x8
20 #define SECL_USE_IDLIST 0x10
21 #define SECL_ALLOW_NONEXE 0x20
22 #define SECL_RUNAS 0x40
25#define ShellExecCmdLine proxy_ShellExecCmdLine
27#define shell32_hInstance GetModuleHandle(NULL)
28#define IDS_FILE_NOT_FOUND (-1)
50 for (
pch = psz + 1; *
pch && ich + 1 < cchArg0; ++ich, ++
pch)
57 else if (*
pch ==
L'"')
104 if (pwszCommand ==
NULL)
218 info.lpVerb = pszVerb;
219 info.lpFile = szFile;
220 info.lpParameters = (pchParams && *pchParams) ? pchParams :
NULL;
221 info.lpDirectory = pwszStartDir;
240#undef ShellExecCmdLine
264 { __LINE__, 0xBADFACE,
FALSE,
NULL,
L"system32" },
265 { __LINE__, 0xBADFACE,
FALSE,
NULL,
L"C:\\Program Files" },
267 { __LINE__, 0xBADFACE,
TRUE,
NULL,
L"." },
268 { __LINE__, 0xBADFACE,
TRUE,
NULL,
L"system32" },
269 { __LINE__, 0xBADFACE,
TRUE,
NULL,
L"C:\\Program Files" },
273 { __LINE__,
TRUE,
FALSE,
L"notepad",
L"system32" },
274 { __LINE__,
TRUE,
FALSE,
L"notepad",
L"C:\\Program Files" },
276 { __LINE__,
TRUE,
FALSE,
L"notepad \"Test File.txt\"",
L"." },
279 { __LINE__,
TRUE,
TRUE,
L"notepad",
L"system32" },
280 { __LINE__,
TRUE,
TRUE,
L"notepad",
L"C:\\Program Files" },
281 { __LINE__,
TRUE,
TRUE,
L"notepad \"Test File.txt\"",
NULL },
282 { __LINE__,
TRUE,
TRUE,
L"notepad \"Test File.txt\"",
L"." },
286 { __LINE__,
TRUE,
FALSE,
L"notepad.exe",
L"system32" },
287 { __LINE__,
TRUE,
FALSE,
L"notepad.exe",
L"C:\\Program Files" },
288 { __LINE__,
TRUE,
FALSE,
L"notepad.exe \"Test File.txt\"",
NULL },
289 { __LINE__,
TRUE,
FALSE,
L"notepad.exe \"Test File.txt\"",
L"." },
291 { __LINE__,
TRUE,
TRUE,
L"notepad.exe",
L"." },
292 { __LINE__,
TRUE,
TRUE,
L"notepad.exe",
L"system32" },
293 { __LINE__,
TRUE,
TRUE,
L"notepad.exe",
L"C:\\Program Files" },
294 { __LINE__,
TRUE,
TRUE,
L"notepad.exe \"Test File.txt\"",
NULL },
295 { __LINE__,
TRUE,
TRUE,
L"notepad.exe \"Test File.txt\"",
L"." },
299 { __LINE__,
FALSE,
FALSE,
L"C:\\notepad.exe",
L"system32" },
300 { __LINE__,
FALSE,
FALSE,
L"C:\\notepad.exe",
L"C:\\Program Files" },
301 { __LINE__,
FALSE,
FALSE,
L"C:\\notepad.exe \"Test File.txt\"",
NULL },
302 { __LINE__,
FALSE,
FALSE,
L"C:\\notepad.exe \"Test File.txt\"",
L"." },
304 { __LINE__,
FALSE,
TRUE,
L"C:\\notepad.exe",
L"." },
305 { __LINE__,
FALSE,
TRUE,
L"C:\\notepad.exe",
L"system32" },
306 { __LINE__,
FALSE,
TRUE,
L"C:\\notepad.exe",
L"C:\\Program Files" },
307 { __LINE__,
FALSE,
TRUE,
L"C:\\notepad.exe \"Test File.txt\"",
NULL },
308 { __LINE__,
FALSE,
TRUE,
L"C:\\notepad.exe \"Test File.txt\"",
L"." },
312 { __LINE__,
TRUE,
FALSE,
L"\"notepad\"",
L"system32" },
313 { __LINE__,
TRUE,
FALSE,
L"\"notepad\"",
L"C:\\Program Files" },
314 { __LINE__,
TRUE,
FALSE,
L"\"notepad\" \"Test File.txt\"",
NULL },
315 { __LINE__,
TRUE,
FALSE,
L"\"notepad\" \"Test File.txt\"",
L"." },
317 { __LINE__,
TRUE,
TRUE,
L"\"notepad\"",
L"." },
318 { __LINE__,
TRUE,
TRUE,
L"\"notepad\"",
L"system32" },
319 { __LINE__,
TRUE,
TRUE,
L"\"notepad\"",
L"C:\\Program Files" },
320 { __LINE__,
TRUE,
TRUE,
L"\"notepad\" \"Test File.txt\"",
NULL },
321 { __LINE__,
TRUE,
TRUE,
L"\"notepad\" \"Test File.txt\"",
L"." },
324 { __LINE__,
TRUE,
FALSE,
L"\"notepad.exe\"",
L"." },
325 { __LINE__,
TRUE,
FALSE,
L"\"notepad.exe\"",
L"system32" },
326 { __LINE__,
TRUE,
FALSE,
L"\"notepad.exe\"",
L"C:\\Program Files" },
327 { __LINE__,
TRUE,
FALSE,
L"\"notepad.exe\" \"Test File.txt\"",
NULL },
328 { __LINE__,
TRUE,
FALSE,
L"\"notepad.exe\" \"Test File.txt\"",
L"." },
330 { __LINE__,
TRUE,
TRUE,
L"\"notepad.exe\"",
L"." },
331 { __LINE__,
TRUE,
TRUE,
L"\"notepad.exe\"",
L"system32" },
332 { __LINE__,
TRUE,
TRUE,
L"\"notepad.exe\"",
L"C:\\Program Files" },
333 { __LINE__,
TRUE,
TRUE,
L"\"notepad.exe\" \"Test File.txt\"",
NULL },
334 { __LINE__,
TRUE,
TRUE,
L"\"notepad.exe\" \"Test File.txt\"",
L"." },
338 { __LINE__,
FALSE,
FALSE,
L"test program",
L"system32" },
339 { __LINE__,
FALSE,
FALSE,
L"test program",
L"C:\\Program Files" },
341 { __LINE__,
FALSE,
FALSE,
L"test program \"Test File.txt\"",
L"." },
344 { __LINE__,
FALSE,
TRUE,
L"test program",
L"system32" },
345 { __LINE__,
FALSE,
TRUE,
L"test program",
L"C:\\Program Files" },
346 { __LINE__,
FALSE,
TRUE,
L"test program \"Test File.txt\"",
NULL },
347 { __LINE__,
FALSE,
TRUE,
L"test program \"Test File.txt\"",
L"." },
351 { __LINE__,
FALSE,
FALSE,
L"test program.exe",
L"system32" },
352 { __LINE__,
FALSE,
FALSE,
L"test program.exe",
L"C:\\Program Files" },
353 { __LINE__,
FALSE,
FALSE,
L"test program.exe \"Test File.txt\"",
NULL },
354 { __LINE__,
FALSE,
FALSE,
L"test program.exe \"Test File.txt\"",
L"." },
356 { __LINE__,
FALSE,
TRUE,
L"test program.exe",
L"." },
357 { __LINE__,
FALSE,
TRUE,
L"test program.exe",
L"system32" },
358 { __LINE__,
FALSE,
TRUE,
L"test program.exe",
L"C:\\Program Files" },
359 { __LINE__,
FALSE,
TRUE,
L"test program.exe \"Test File.txt\"",
NULL },
360 { __LINE__,
FALSE,
TRUE,
L"test program.exe \"Test File.txt\"",
L"." },
364 { __LINE__,
FALSE,
FALSE,
L"test program.bat",
L"system32" },
365 { __LINE__,
FALSE,
FALSE,
L"test program.bat",
L"C:\\Program Files" },
366 { __LINE__,
FALSE,
FALSE,
L"test program.bat \"Test File.txt\"",
NULL },
367 { __LINE__,
FALSE,
FALSE,
L"test program.bat \"Test File.txt\"",
L"." },
369 { __LINE__,
FALSE,
TRUE,
L"test program.bat",
L"." },
370 { __LINE__,
FALSE,
TRUE,
L"test program.bat",
L"system32" },
371 { __LINE__,
FALSE,
TRUE,
L"test program.bat",
L"C:\\Program Files" },
372 { __LINE__,
FALSE,
TRUE,
L"test program.bat \"Test File.txt\"",
NULL },
373 { __LINE__,
FALSE,
TRUE,
L"test program.bat \"Test File.txt\"",
L"." },
377 { __LINE__,
FALSE,
FALSE,
L"\"test program\"",
L"system32" },
378 { __LINE__,
FALSE,
FALSE,
L"\"test program\"",
L"C:\\Program Files" },
379 { __LINE__,
FALSE,
FALSE,
L"\"test program\" \"Test File.txt\"",
NULL },
380 { __LINE__,
FALSE,
FALSE,
L"\"test program\" \"Test File.txt\"",
L"." },
382 { __LINE__,
FALSE,
TRUE,
L"\"test program\"",
L"." },
383 { __LINE__,
FALSE,
TRUE,
L"\"test program\"",
L"system32" },
384 { __LINE__,
FALSE,
TRUE,
L"\"test program\"",
L"C:\\Program Files" },
385 { __LINE__,
FALSE,
TRUE,
L"\"test program\" \"Test File.txt\"",
NULL },
386 { __LINE__,
FALSE,
TRUE,
L"\"test program\" \"Test File.txt\"",
L"." },
389 { __LINE__,
TRUE,
FALSE,
L"\"test program.exe\"",
L"." },
390 { __LINE__,
TRUE,
FALSE,
L"\"test program.exe\"",
L"system32" },
391 { __LINE__,
TRUE,
FALSE,
L"\"test program.exe\"",
L"C:\\Program Files" },
392 { __LINE__,
TRUE,
FALSE,
L"\"test program.exe\" \"Test File.txt\"",
NULL },
393 { __LINE__,
TRUE,
FALSE,
L"\"test program.exe\" \"Test File.txt\"",
L"." },
395 { __LINE__,
TRUE,
TRUE,
L"\"test program.exe\"",
L"." },
396 { __LINE__,
TRUE,
TRUE,
L"\"test program.exe\"",
L"system32" },
397 { __LINE__,
TRUE,
TRUE,
L"\"test program.exe\"",
L"C:\\Program Files" },
398 { __LINE__,
TRUE,
TRUE,
L"\"test program.exe\" \"Test File.txt\"",
NULL },
399 { __LINE__,
TRUE,
TRUE,
L"\"test program.exe\" \"Test File.txt\"",
L"." },
402 { __LINE__,
FALSE,
FALSE,
L"\"test program.bat\"",
L"." },
403 { __LINE__,
FALSE,
FALSE,
L"\"test program.bat\"",
L"system32" },
404 { __LINE__,
FALSE,
FALSE,
L"\"test program.bat\"",
L"C:\\Program Files" },
405 { __LINE__,
FALSE,
FALSE,
L"\"test program.bat\" \"Test File.txt\"",
NULL },
406 { __LINE__,
FALSE,
FALSE,
L"\"test program.bat\" \"Test File.txt\"",
L"." },
408 { __LINE__,
FALSE,
TRUE,
L"\"test program.bat\"",
L"." },
409 { __LINE__,
FALSE,
TRUE,
L"\"test program.bat\"",
L"system32" },
410 { __LINE__,
FALSE,
TRUE,
L"\"test program.bat\"",
L"C:\\Program Files" },
411 { __LINE__,
FALSE,
TRUE,
L"\"test program.bat\" \"Test File.txt\"",
NULL },
412 { __LINE__,
FALSE,
TRUE,
L"\"test program.bat\" \"Test File.txt\"",
L"." },
416 { __LINE__,
FALSE,
FALSE,
L"invalid program",
L"system32" },
417 { __LINE__,
FALSE,
FALSE,
L"invalid program",
L"C:\\Program Files" },
418 { __LINE__,
FALSE,
FALSE,
L"invalid program \"Test File.txt\"",
NULL },
419 { __LINE__,
FALSE,
FALSE,
L"invalid program \"Test File.txt\"",
L"." },
421 { __LINE__,
FALSE,
TRUE,
L"invalid program",
L"." },
422 { __LINE__,
FALSE,
TRUE,
L"invalid program",
L"system32" },
423 { __LINE__,
FALSE,
TRUE,
L"invalid program",
L"C:\\Program Files" },
424 { __LINE__,
FALSE,
TRUE,
L"invalid program \"Test File.txt\"",
NULL },
425 { __LINE__,
FALSE,
TRUE,
L"invalid program \"Test File.txt\"",
L"." },
428 { __LINE__,
FALSE,
FALSE,
L"\"invalid program.exe\"",
L"." },
429 { __LINE__,
FALSE,
FALSE,
L"\"invalid program.exe\"",
L"system32" },
430 { __LINE__,
FALSE,
FALSE,
L"\"invalid program.exe\"",
L"C:\\Program Files" },
431 { __LINE__,
FALSE,
FALSE,
L"\"invalid program.exe\" \"Test File.txt\"",
NULL },
432 { __LINE__,
FALSE,
FALSE,
L"\"invalid program.exe\" \"Test File.txt\"",
L"." },
434 { __LINE__,
FALSE,
TRUE,
L"\"invalid program.exe\"",
L"." },
435 { __LINE__,
FALSE,
TRUE,
L"\"invalid program.exe\"",
L"system32" },
436 { __LINE__,
FALSE,
TRUE,
L"\"invalid program.exe\"",
L"C:\\Program Files" },
437 { __LINE__,
FALSE,
TRUE,
L"\"invalid program.exe\" \"Test File.txt\"",
NULL },
438 { __LINE__,
FALSE,
TRUE,
L"\"invalid program.exe\" \"Test File.txt\"",
L"." },
440 { __LINE__,
TRUE,
TRUE,
L"::{450d8fba-ad25-11d0-98a8-0800361b1103}",
NULL },
441 { __LINE__,
TRUE,
TRUE,
L"shell:::{450d8fba-ad25-11d0-98a8-0800361b1103}",
NULL },
450 { __LINE__,
FALSE,
FALSE,
L"Test File 1.txt",
L"system32" },
453 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\"",
L"." },
454 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\"",
L"system32" },
456 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
NULL },
457 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"." },
458 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"system32" },
460 { __LINE__,
TRUE,
TRUE,
L"Test File 1.txt",
L"." },
461 { __LINE__,
FALSE,
TRUE,
L"Test File 1.txt",
L"system32" },
464 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\"",
L"." },
465 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\"",
L"system32" },
467 { __LINE__,
FALSE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
NULL },
468 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"." },
469 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"system32" },
474 { __LINE__,
FALSE,
FALSE,
L"Test File 2.bat",
L"system32" },
477 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\"",
L"." },
478 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\"",
L"system32" },
480 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
NULL },
481 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"." },
482 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"system32" },
485 { __LINE__,
FALSE,
TRUE,
L"Test File 2.bat",
L"." },
486 { __LINE__,
FALSE,
TRUE,
L"Test File 2.bat",
L"system32" },
489 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\"",
L"." },
490 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\"",
L"system32" },
492 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
NULL },
493 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"." },
494 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"system32" },
503 { __LINE__,
FALSE,
FALSE,
L"Test File 1.txt",
L"system32" },
506 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\"",
L"." },
507 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\"",
L"system32" },
509 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
NULL },
510 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"." },
511 { __LINE__,
FALSE,
FALSE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"system32" },
514 { __LINE__,
TRUE,
TRUE,
L"Test File 1.txt",
L"." },
515 { __LINE__,
FALSE,
TRUE,
L"Test File 1.txt",
L"system32" },
518 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\"",
L"." },
519 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\"",
L"system32" },
521 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
NULL },
522 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"." },
523 { __LINE__,
TRUE,
TRUE,
L"\"Test File 1.txt\" \"Test File.txt\"",
L"system32" },
528 { __LINE__,
FALSE,
FALSE,
L"Test File 2.bat",
L"system32" },
531 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\"",
L"." },
532 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\"",
L"system32" },
534 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
NULL },
535 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"." },
536 { __LINE__,
FALSE,
FALSE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"system32" },
539 { __LINE__,
FALSE,
TRUE,
L"Test File 2.bat",
L"." },
540 { __LINE__,
FALSE,
TRUE,
L"Test File 2.bat",
L"system32" },
543 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\"",
L"." },
544 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\"",
L"system32" },
546 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
NULL },
547 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"." },
548 { __LINE__,
FALSE,
TRUE,
L"\"Test File 2.bat\" \"Test File.txt\"",
L"system32" },
627 ok(
result ==
pEntry->result,
"Line %d: result expected %d, was %d\n",
641 skip(
"ShellExecCmdLine is not available on this platform\n");
649 skip(
"ShellExecCmdLine is not found\n");
656 skip(
"shell32_apitest_sub.exe is not found\n");
663 skip(
"EnumWindows failed\n");
674 skip(
"Please retry with admin rights\n");
689 fp =
fopen(
"Test File 1.txt",
"wb");
690 ok(fp !=
NULL,
"failed to create a test file\n");
695 fp =
fopen(
"Test File 2.bat",
"wb");
696 ok(fp !=
NULL,
"failed to create a test file\n");
720 ok(
DeleteFileA(
"Test File 1.txt"),
"failed to delete the test file\n");
721 ok(
DeleteFileA(
"Test File 2.bat"),
"failed to delete the test file\n");
static WCHAR s_sys_bat_file[MAX_PATH]
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
static WCHAR s_win_test_exe[MAX_PATH]
static const WCHAR wszCom[]
#define IDS_FILE_NOT_FOUND
static LPCWSTR SplitParams(LPCWSTR psz, LPWSTR pszArg0, size_t cchArg0)
#define shell32_hInstance
HRESULT(WINAPI * SHELLEXECCMDLINE)(HWND, LPCWSTR, LPCWSTR, INT, LPVOID, DWORD)
#define SECL_ALLOW_NONEXE
static const TEST_ENTRY s_entries_1[]
static const WCHAR wszOpen[]
static WCHAR s_sub_program[MAX_PATH]
static void DoEntry(const TEST_ENTRY *pEntry)
static const TEST_ENTRY s_entries_2[]
struct TEST_ENTRY TEST_ENTRY
static void CleanupNewlyCreatedWindows(void)
SHELLEXECCMDLINE g_pShellExecCmdLine
static __inline void __SHCloneStrW(WCHAR **target, const WCHAR *source)
static const WCHAR wszExe[]
static WCHAR s_cur_dir[MAX_PATH]
#define ok_int(expression, result)
#define GetCurrentDirectoryW(x, y)
#define GetProcAddress(x, y)
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableW(IN LPCWSTR lpName, IN LPCWSTR lpValue)
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI GetBinaryTypeW(LPCWSTR lpApplicationName, LPDWORD lpBinaryType)
void WINAPI SHFree(LPVOID pv)
LPVOID WINAPI SHAlloc(SIZE_T len)
HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
BOOL WINAPI PathFileExistsA(LPCSTR lpszPath)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID WINAPI CoTaskMemFree(LPVOID ptr)
_Check_return_ _CRTIMP FILE *__cdecl _wfopen(_In_z_ const wchar_t *_Filename, _In_z_ const wchar_t *_Mode)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define EXCEPTION_EXECUTE_HANDLER
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define PathAddBackslashW
#define _SEH2_EXCEPT(...)
static HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce)
static BOOL FindSubProgram(LPWSTR pszSubProgram, DWORD cchSubProgram)
#define SEE_MASK_FLAG_LOG_USAGE
#define SEE_MASK_DOENVSUBST
#define SEE_MASK_INVOKEIDLIST
#define SEE_MASK_FLAG_NO_UI
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define EXCEPTION_NONCONTINUABLE
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
VERSIONHELPERAPI IsWindowsVistaOrGreater()
#define INVALID_FILE_ATTRIBUTES
DWORD WINAPI GetLastError(void)
#define EXCEPTION_ACCESS_VIOLATION
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HRESULT_FROM_WIN32(x)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)