Index: rostests/apitests/shell32/CMakeLists.txt =================================================================== --- rostests/apitests/shell32/CMakeLists.txt (revision 74920) +++ rostests/apitests/shell32/CMakeLists.txt (working copy) @@ -13,6 +13,7 @@ CShellDesktop.cpp CShellLink.cpp menu.cpp + PathResolve.cpp ShellExecuteEx.cpp shelltest.cpp SHParseDisplayName.cpp Index: rostests/apitests/shell32/PathResolve.cpp =================================================================== --- rostests/apitests/shell32/PathResolve.cpp (nonexistent) +++ rostests/apitests/shell32/PathResolve.cpp (working copy) @@ -0,0 +1,712 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for PathResolve + * PROGRAMMER: Katayama Hirofumi MZ + */ + +#include "shelltest.h" + +/* + * NOTE: "App Paths" has no effect for PathResolve. + */ + +/* PathResolve */ +typedef int (WINAPI *PATHRESOLVE)(LPWSTR, LPWSTR *, UINT); + +static HINSTANCE s_hShell32 = NULL; +static PATHRESOLVE s_pPathResolve = NULL; +static WCHAR s_TestDataPath[MAX_PATH]; + +/* PathResolve flags */ +#ifndef PRF_VERIFYEXISTS + #define PRF_VERIFYEXISTS 0x01 + #define PRF_EXECUTABLE 0x02 + #define PRF_TRYPROGRAMEXTENSIONS (PRF_EXECUTABLE | PRF_VERIFYEXISTS) + #define PRF_FIRSTDIRDEF 0x04 + #define PRF_DONTFINDLNK 0x08 +#endif +#ifndef PRF_REQUIREABSOLUTE + #define PRF_REQUIREABSOLUTE 0x10 +#endif + +#define FLAGS0 0 +#define FLAGS1 PRF_VERIFYEXISTS +#define FLAGS2 PRF_EXECUTABLE +#define FLAGS3 PRF_TRYPROGRAMEXTENSIONS +#define FLAGS4 (PRF_FIRSTDIRDEF | PRF_VERIFYEXISTS) +#define FLAGS5 (PRF_FIRSTDIRDEF | PRF_EXECUTABLE) +#define FLAGS6 (PRF_FIRSTDIRDEF | PRF_TRYPROGRAMEXTENSIONS) +#define FLAGS7 (PRF_REQUIREABSOLUTE | PRF_VERIFYEXISTS) +#define FLAGS8 (PRF_REQUIREABSOLUTE | PRF_EXECUTABLE) +#define FLAGS9 (PRF_REQUIREABSOLUTE | PRF_TRYPROGRAMEXTENSIONS) +#define FLAGS10 (PRF_REQUIREABSOLUTE | PRF_FIRSTDIRDEF | PRF_VERIFYEXISTS) +#define FLAGS11 (PRF_REQUIREABSOLUTE | PRF_FIRSTDIRDEF | PRF_EXECUTABLE) +#define FLAGS12 (PRF_REQUIREABSOLUTE | PRF_FIRSTDIRDEF | PRF_TRYPROGRAMEXTENSIONS) +#define FLAGS13 0xFFFFFFFF + +#define EF_NONE 1 +#define EF_TESTDATA 2 +#define EF_WINDOWS_DIR 4 +#define EF_SYSTEM_DIR 8 +#define EF_TYPE_MASK 0xF + +#define EF_NAME_ONLY 16 +#define EF_APP_PATH 32 + +typedef struct ENTRY +{ + INT EntryNumber; /* # */ + INT Ret; + DWORD Error; + UINT EF_; + LPCWSTR NameBefore; + LPCWSTR NameExpected; + UINT Flags; + LPWSTR *Dirs; +} ENTRY; + +#define BEEF 0xBEEF /* Error Code 48879 */ +#define DEAD 0xDEAD /* Error Code 57005 */ +#define IGNORE_ERR 0x7F7F7F7F /* Ignore Error Code */ +#define RAISED 9999 /* exception raised */ + +static LPWSTR s_Dirs[2]; + +static const ENTRY s_Entries[] = +{ + /* null path */ + { 0, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS0 }, + { 1, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS1 }, + { 2, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS2 }, + { 3, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS3 }, + { 4, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS4 }, + { 5, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS5 }, + { 6, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS6 }, + { 7, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS7 }, + { 8, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS8 }, + { 9, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS9 }, + { 10, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS10 }, + { 11, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS11 }, + { 12, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS12 }, + { 13, 0, IGNORE_ERR, EF_NONE, NULL, NULL, FLAGS13 }, + /* empty path */ + { 14, 1, BEEF, EF_NONE, L"", NULL, FLAGS0 }, + { 15, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS1 }, + { 16, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS2 }, + { 17, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS3 }, + { 18, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS4 }, + { 19, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS5 }, + { 20, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS6 }, + { 21, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS7 }, + { 22, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS8 }, + { 23, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS9 }, + { 24, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS10 }, + { 25, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS11 }, + { 26, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS12 }, + { 27, 1, ERROR_NO_MORE_FILES, EF_NONE, L"", NULL, FLAGS13 }, + /* Fonts folder (path) */ + { 28, 1, IGNORE_ERR, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS0 }, + { 29, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS1 }, + { 30, 1, BEEF, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS2 }, + { 31, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS3 }, + { 32, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS4 }, + { 33, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS5 }, + { 34, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS6 }, + { 35, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS7 }, + { 36, 1, BEEF, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS8 }, + { 37, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS9 }, + { 38, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS10 }, + { 39, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS11 }, + { 40, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS12 }, + { 41, RAISED, DEAD, EF_WINDOWS_DIR, L"Fonts", L"Fonts", FLAGS13 }, + /* Fonts folder (name only) */ + { 42, 1, ERROR_FILE_NOT_FOUND, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS0 }, + { 43, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS1 }, + { 44, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS2 }, + { 45, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS3 }, + { 46, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS4 }, + { 47, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS5 }, + { 48, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS6 }, + { 49, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS7 }, + { 50, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS8 }, + { 51, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS9 }, + { 52, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS10 }, + { 53, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS11 }, + { 54, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS12 }, + { 55, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS13 }, + /* Fonts folder with dirs (name only) */ + { 56, 1, ERROR_FILE_NOT_FOUND, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS0, s_Dirs }, + { 57, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS1, s_Dirs }, + { 58, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS2, s_Dirs }, + { 59, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS3, s_Dirs }, + { 60, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS4, s_Dirs }, + { 61, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS5, s_Dirs }, + { 62, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS6, s_Dirs }, + { 63, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS7, s_Dirs }, + { 64, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS8, s_Dirs }, + { 65, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS9, s_Dirs }, + { 66, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS10, s_Dirs }, + { 67, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS11, s_Dirs }, + { 68, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS12, s_Dirs }, + { 69, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"Fonts", L"Fonts", FLAGS13, s_Dirs }, + /* system32 folder (path) */ + { 70, 1, BEEF, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS0 }, + { 71, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS1 }, + { 72, 1, BEEF, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS2 }, + { 73, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS3 }, + { 74, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS4 }, + { 75, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS5 }, + { 76, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS6 }, + { 77, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS7 }, + { 78, 1, BEEF, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS8 }, + { 79, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS9 }, + { 80, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS10 }, + { 81, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS11 }, + { 82, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS12 }, + { 83, RAISED, DEAD, EF_WINDOWS_DIR, L"system32", L"system32", FLAGS13 }, + /* system32 folder (name only) */ + { 84, 1, ERROR_FILE_NOT_FOUND, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS0 }, + { 85, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS1 }, + { 86, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS2 }, + { 87, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS3 }, + { 88, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS4 }, + { 89, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS5 }, + { 90, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS6 }, + { 91, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS7 }, + { 92, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS8 }, + { 93, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS9 }, + { 94, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS10 }, + { 95, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS11 }, + { 96, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS12 }, + { 97, 1, ERROR_NO_MORE_FILES, EF_WINDOWS_DIR | EF_NAME_ONLY, L"system32", L"system32", FLAGS13 }, + /* notepad (path) */ + { 98, 1, BEEF, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS0 }, + { 99, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR, L"notepad", L"notepad.exe", FLAGS1 }, + { 100, 1, BEEF, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS2 }, + { 101, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR, L"notepad", L"notepad.exe", FLAGS3 }, + { 102, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS4 }, + { 103, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS5 }, + { 104, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS6 }, + { 105, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR, L"notepad", L"notepad.exe", FLAGS7 }, + { 106, 1, BEEF, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS8 }, + { 107, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR, L"notepad", L"notepad.exe", FLAGS9 }, + { 108, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS10 }, + { 109, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS11 }, + { 110, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS12 }, + { 111, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad", L"notepad", FLAGS13 }, + /* notepad (name only) */ + { 112, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS0 }, + { 113, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS1 }, + { 114, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS2 }, + { 115, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS3 }, + { 116, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS4 }, + { 117, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS5 }, + { 118, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS6 }, + { 119, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS7 }, + { 120, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS8 }, + { 121, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS9 }, + { 122, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS10 }, + { 123, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS11 }, + { 124, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS12 }, + { 125, 1, ERROR_NO_MORE_FILES, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad", NULL, FLAGS13 }, + /* notepad.exe (path) */ + { 126, 1, BEEF, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS0 }, + { 127, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS1 }, + { 128, 1, BEEF, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS2 }, + { 129, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS3 }, + { 130, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS4 }, + { 131, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS5 }, + { 132, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS6 }, + { 133, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS7 }, + { 134, 1, BEEF, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS8 }, + { 135, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS9 }, + { 136, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS10 }, + { 137, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS11 }, + { 138, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS12 }, + { 139, RAISED, DEAD, EF_SYSTEM_DIR, L"notepad.exe", L"notepad.exe", FLAGS13 }, + /* notepad.exe (name only) */ + { 140, 1, BEEF, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS0 }, + { 141, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS1 }, + { 142, 1, BEEF, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS2 }, + { 143, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS3 }, + { 144, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS4 }, + { 145, 1, BEEF, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS5 }, + { 146, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS6 }, + { 147, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS7 }, + { 148, 1, BEEF, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS8 }, + { 149, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS9 }, + { 150, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS10 }, + { 151, 1, BEEF, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS11 }, + { 152, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS12 }, + { 153, 1, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.exe", L"notepad.exe", FLAGS13 }, + /* notepad.com (name only) */ + { 154, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS0 }, + { 155, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS1 }, + { 156, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS2 }, + { 157, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS3 }, + { 158, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS4 }, + { 159, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS5 }, + { 160, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS6 }, + { 161, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS7 }, + { 162, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS8 }, + { 163, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS9 }, + { 164, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS10 }, + { 165, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS11 }, + { 166, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS12 }, + { 167, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY, L"notepad.com", NULL, FLAGS13 }, + /* GhostProgram.exe -> notepad.exe (name only, app path) */ + { 168, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS0 }, + { 169, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS1 }, + { 170, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS2 }, + { 171, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS3 }, + { 172, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS4 }, + { 173, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS5 }, + { 174, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS6 }, + { 175, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS7 }, + { 176, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS8 }, + { 177, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS9 }, + { 178, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS10 }, + { 179, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS11 }, + { 180, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS12 }, + { 181, 0, ERROR_FILE_NOT_FOUND, EF_SYSTEM_DIR | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"notepad.exe", FLAGS13 }, + /* invalid name */ + { 182, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS0 }, + { 183, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS1 }, + { 184, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS2 }, + { 185, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS3 }, + { 186, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS4 }, + { 187, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS5 }, + { 188, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS6 }, + { 189, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS7 }, + { 190, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS8 }, + { 191, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS9 }, + { 192, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS10 }, + { 193, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS11 }, + { 194, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS12 }, + { 195, 0, ERROR_FILE_NOT_FOUND, EF_NONE, L"invalid name", L"invalid name", FLAGS13 }, + /* testdata/README (path) */ + { 196, 1, BEEF, EF_TESTDATA, L"README", L"README", FLAGS0 }, + { 197, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README", L"README", FLAGS1 }, + { 198, 1, BEEF, EF_TESTDATA, L"README", L"README", FLAGS2 }, + { 199, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README", L"README", FLAGS3 }, + { 200, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS4 }, + { 201, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS5 }, + { 202, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS6 }, + { 203, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README", L"README", FLAGS7 }, + { 204, 1, BEEF, EF_TESTDATA, L"README", L"README", FLAGS8 }, + { 205, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README", L"README", FLAGS9 }, + { 206, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS10 }, + { 207, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS11 }, + { 208, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS12 }, + { 209, RAISED, DEAD, EF_TESTDATA, L"README", L"README", FLAGS13 }, + /* testdata/README (name only) */ + { 210, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS0 }, + { 211, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS1 }, + { 212, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS2 }, + { 213, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS3 }, + { 214, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS4 }, + { 215, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS5 }, + { 216, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS6 }, + { 217, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS7 }, + { 218, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS8 }, + { 219, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS9 }, + { 220, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS10 }, + { 221, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS11 }, + { 222, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS12 }, + { 223, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS13 }, + /* testdata/README with dirs (name only) */ + { 224, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS0, s_Dirs }, + { 225, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS1, s_Dirs }, + { 226, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS2, s_Dirs }, + { 227, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS3, s_Dirs }, + { 228, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS4, s_Dirs }, + { 229, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS5, s_Dirs }, + { 230, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS6, s_Dirs }, + { 231, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS7, s_Dirs }, + { 232, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS8, s_Dirs }, + { 233, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS9, s_Dirs }, + { 234, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS10, s_Dirs }, + { 235, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS11, s_Dirs }, + { 236, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS12, s_Dirs }, + { 237, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README", NULL, FLAGS13, s_Dirs }, + /* testdata/README (name only, app path) */ + { 238, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS0 }, + { 239, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS1 }, + { 240, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS2 }, + { 241, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS3 }, + { 242, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS4 }, + { 243, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS5 }, + { 244, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS6 }, + { 245, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS7 }, + { 246, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS8 }, + { 247, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS9 }, + { 248, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS10 }, + { 249, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS11 }, + { 250, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS12 }, + { 251, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"README", L"README", FLAGS13 }, + /* testdata/README.txt (path) */ + { 252, 1, BEEF, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS0 }, + { 253, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS1 }, + { 254, 1, BEEF, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS2 }, + { 255, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS3 }, + { 256, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS4 }, + { 257, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS5 }, + { 258, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS6 }, + { 259, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS7 }, + { 260, 1, BEEF, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS8 }, + { 261, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS9 }, + { 262, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS10 }, + { 263, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS11 }, + { 264, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS12 }, + { 265, RAISED, DEAD, EF_TESTDATA, L"README.txt", L"README.txt", FLAGS13 }, + /* README.txt (name only) */ + { 266, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS0 }, + { 267, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS1 }, + { 268, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS2 }, + { 269, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS3 }, + { 270, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS4 }, + { 271, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS5 }, + { 272, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS6 }, + { 273, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS7 }, + { 274, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS8 }, + { 275, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS9 }, + { 276, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS10 }, + { 277, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS11 }, + { 278, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS12 }, + { 279, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", NULL, FLAGS13 }, + /* README.txt with dirs (name only) */ + { 280, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS0, s_Dirs }, + { 281, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS1, s_Dirs }, + { 282, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS2, s_Dirs }, + { 283, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS3, s_Dirs }, + { 284, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS4, s_Dirs }, + { 285, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS5, s_Dirs }, + { 286, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS6, s_Dirs }, + { 287, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS7, s_Dirs }, + { 288, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS8, s_Dirs }, + { 289, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS9, s_Dirs }, + { 290, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS10, s_Dirs }, + { 291, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS11, s_Dirs }, + { 292, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS12, s_Dirs }, + { 293, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"README.txt", L"README.txt", FLAGS13, s_Dirs }, + /* testdata/CmdLineUtils (path) */ + { 294, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS0 }, + { 295, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS1 }, + { 296, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS2 }, + { 297, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS3 }, + { 298, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS4 }, + { 299, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS5 }, + { 300, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS6 }, + { 301, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS7 }, + { 302, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS8 }, + { 303, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS9 }, + { 304, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS10 }, + { 305, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS11 }, + { 306, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS12 }, + { 307, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS13 }, + /* testdata/CmdLineUtils (name only) */ + { 308, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS0 }, + { 309, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS1 }, + { 310, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS2 }, + { 311, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS3 }, + { 312, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS4 }, + { 313, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS5 }, + { 314, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS6 }, + { 315, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS7 }, + { 316, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS8 }, + { 317, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS9 }, + { 318, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS10 }, + { 319, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS11 }, + { 320, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS12 }, + { 321, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils", NULL, FLAGS13 }, + /* testdata/CmdLineUtils.exe (path) */ + { 222, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS0 }, + { 323, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS1 }, + { 324, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS2 }, + { 325, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS3 }, + { 326, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS4 }, + { 327, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS5 }, + { 328, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS6 }, + { 329, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS7 }, + { 330, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS8 }, + { 331, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS9 }, + { 332, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS10 }, + { 333, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS11 }, + { 334, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS12 }, + { 335, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", FLAGS13 }, + /* testdata/CmdLineUtils.exe (name only) */ + { 336, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS0 }, + { 337, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS1 }, + { 338, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS2 }, + { 339, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS3 }, + { 340, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS4 }, + { 341, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS5 }, + { 342, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS6 }, + { 343, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS7 }, + { 344, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS8 }, + { 345, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS9 }, + { 346, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS10 }, + { 347, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS11 }, + { 348, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS12 }, + { 349, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS13 }, + /* testdata/CmdLineUtils.exe with dirs (name only) */ + { 350, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS0, s_Dirs }, + { 351, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS1, s_Dirs }, + { 352, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS2, s_Dirs }, + { 353, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS3, s_Dirs }, + { 354, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS4, s_Dirs }, + { 355, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS5, s_Dirs }, + { 356, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS6, s_Dirs }, + { 357, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS7, s_Dirs }, + { 358, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS8, s_Dirs }, + { 359, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS9, s_Dirs }, + { 360, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS10, s_Dirs }, + { 361, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS11, s_Dirs }, + { 362, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS12, s_Dirs }, + { 363, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS13, s_Dirs }, + /* testdata/CmdLineUtils.exe with dirs (name only) */ + { 364, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS0, s_Dirs }, + { 365, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS1, s_Dirs }, + { 366, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS2, s_Dirs }, + { 367, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS3, s_Dirs }, + { 368, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS4, s_Dirs }, + { 369, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS5, s_Dirs }, + { 370, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS6, s_Dirs }, + { 371, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS7, s_Dirs }, + { 372, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS8, s_Dirs }, + { 373, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS9, s_Dirs }, + { 374, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS10, s_Dirs }, + { 375, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS11, s_Dirs }, + { 376, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS12, s_Dirs }, + { 377, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"CmdLineUtils.exe", NULL, FLAGS13, s_Dirs }, + /* GhostProgram.exe -> testdata/CmdLineUtils.exe (name only, app path) */ + { 378, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS0 }, + { 379, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS1 }, + { 380, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS2 }, + { 381, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS3 }, + { 382, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS4 }, + { 383, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS5 }, + { 384, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS6 }, + { 385, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS7 }, + { 386, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS8 }, + { 387, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS9 }, + { 388, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS10 }, + { 389, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS11 }, + { 390, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS12 }, + { 391, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS13 }, + /* C:\ */ + { 392, 1, BEEF, EF_NONE, L"C:\\", L"C:\\", FLAGS0 }, + { 393, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS1 }, + { 394, 1, BEEF, EF_NONE, L"C:\\", NULL, FLAGS2 }, + { 395, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS3 }, + { 396, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS4 }, + { 397, 1, BEEF, EF_NONE, L"C:\\", NULL, FLAGS5 }, + { 398, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS6 }, + { 399, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS7 }, + { 400, 1, BEEF, EF_NONE, L"C:\\", L"C:\\", FLAGS8 }, + { 401, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS9 }, + { 402, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS10 }, + { 403, 1, BEEF, EF_NONE, L"C:\\", L"C:\\", FLAGS11 }, + { 404, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS12 }, + { 405, 1, ERROR_FILE_NOT_FOUND, EF_NONE, L"C:\\", L"C:\\", FLAGS13 }, +}; + +static BOOL +CreateRegAppPath(INT EntryNumber, const WCHAR* Name, const WCHAR* Value) +{ + HKEY RegistryKey; + LONG Result; + WCHAR Buffer[1024]; + DWORD Disposition; + + wcscpy(Buffer, L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\"); + wcscat(Buffer, Name); + Result = RegCreateKeyExW(HKEY_LOCAL_MACHINE, Buffer, 0, NULL, + 0, KEY_WRITE, NULL, &RegistryKey, &Disposition); + if (Result != ERROR_SUCCESS) trace("#%d: Could not create test key. Status: %lu\n", EntryNumber, Result); + if (Result) goto end; + Result = RegSetValueW(RegistryKey, NULL, REG_SZ, Value, 0); + if (Result != ERROR_SUCCESS) trace("#%d: Could not set value of the test key. Status: %lu\n", EntryNumber, Result); + if (Result) goto end; + RegCloseKey(RegistryKey); + /* trace("#%d: CreateRegAppPath: %s -> %s\n", EntryNumber, wine_dbgstr_w(Name), wine_dbgstr_w(Value)); */ +end: + if (RegistryKey) RegCloseKey(RegistryKey); + return Result == ERROR_SUCCESS; +} + +static VOID +DeleteRegAppPath(INT EntryNumber, const WCHAR* Name) +{ + LONG Result; + WCHAR Buffer[1024]; + wcscpy(Buffer, L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\"); + wcscat(Buffer, Name); + Result = RegDeleteKeyW(HKEY_LOCAL_MACHINE, Buffer); + if (Result != ERROR_SUCCESS) trace("#%d: Could not remove the test key. Status: %lu\n", EntryNumber, Result); +} + +static void DoEntry(const ENTRY *pEntry) +{ + WCHAR Path[MAX_PATH], PathExpected[MAX_PATH]; + INT Ret; + DWORD Error; + + switch (pEntry->EF_ & EF_TYPE_MASK) + { + case EF_NONE: + lstrcpyW(Path, pEntry->NameBefore); + if (pEntry->NameExpected) + { + lstrcpyW(PathExpected, pEntry->NameExpected); + } + break; + + case EF_TESTDATA: + if (pEntry->EF_ & EF_NAME_ONLY) + { + lstrcpyW(Path, pEntry->NameBefore); + } + else + { + lstrcpyW(Path, s_TestDataPath); + lstrcatW(Path, L"\\"); + lstrcatW(Path, pEntry->NameBefore); + } + + if (pEntry->NameExpected) + { + lstrcpyW(PathExpected, s_TestDataPath); + lstrcatW(PathExpected, L"\\"); + lstrcatW(PathExpected, pEntry->NameExpected); + } + break; + + case EF_WINDOWS_DIR: + if (pEntry->EF_ & EF_NAME_ONLY) + { + lstrcpyW(Path, pEntry->NameBefore); + } + else + { + GetWindowsDirectoryW(Path, _countof(Path)); + lstrcatW(Path, L"\\"); + lstrcatW(Path, pEntry->NameBefore); + } + + if (pEntry->NameExpected) + { + GetWindowsDirectoryW(PathExpected, _countof(PathExpected)); + lstrcatW(PathExpected, L"\\"); + lstrcatW(PathExpected, pEntry->NameExpected); + } + break; + + case EF_SYSTEM_DIR: + if (pEntry->EF_ & EF_NAME_ONLY) + { + lstrcpyW(Path, pEntry->NameBefore); + } + else + { + GetSystemDirectoryW(Path, _countof(Path)); + lstrcatW(Path, L"\\"); + lstrcatW(Path, pEntry->NameBefore); + } + + if (pEntry->NameExpected) + { + GetSystemDirectoryW(PathExpected, _countof(PathExpected)); + lstrcatW(PathExpected, L"\\"); + lstrcatW(PathExpected, pEntry->NameExpected); + } + break; + } + + if (pEntry->EF_ & EF_APP_PATH) + { + ok(CreateRegAppPath(pEntry->EntryNumber, pEntry->NameBefore, PathExpected), + "#%d: CreateRegAppPath failure\n", pEntry->EntryNumber); + } + + _SEH2_TRY + { + SetLastError(BEEF); + Ret = (*s_pPathResolve)(Path, pEntry->Dirs, pEntry->Flags); + Error = GetLastError(); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Ret = RAISED; + Error = DEAD; + } + _SEH2_END; + + if (pEntry->EF_ & EF_APP_PATH) + { + DeleteRegAppPath(pEntry->EntryNumber, pEntry->NameBefore); + } + + ok(Ret == pEntry->Ret, "#%d: Ret expected %d, was %d.\n", + pEntry->EntryNumber, pEntry->Ret, Ret); + if (pEntry->Error != IGNORE_ERR) + { + ok(Error == pEntry->Error, "#%d: last error expected %ld, was %ld.\n", + pEntry->EntryNumber, pEntry->Error, Error); + } + + if (pEntry->NameExpected && !(pEntry->EF_ & EF_APP_PATH)) + { + ok(lstrcmpW(Path, PathExpected) == 0, "#%d: Path expected %s, was %s.\n", + pEntry->EntryNumber, wine_dbgstr_w(PathExpected), wine_dbgstr_w(Path)); + } +} + +START_TEST(PathResolve) +{ + UINT i; + LPWSTR pch; + + GetModuleFileNameW(NULL, s_TestDataPath, _countof(s_TestDataPath)); + pch = wcsrchr(s_TestDataPath, L'\\'); + if (pch == NULL) + pch = wcsrchr(s_TestDataPath, L'/'); + if (pch == NULL) + { + skip("GetModuleFileName and/or wcsrchr are insane.\n"); + return; + } + lstrcpyW(pch, L"\\testdata"); + if (GetFileAttributesW(s_TestDataPath) == INVALID_FILE_ATTRIBUTES) + { + skip("testdata is not found.\n"); + return; + } + + s_Dirs[0] = s_TestDataPath; + s_Dirs[1] = NULL; + + s_hShell32 = LoadLibraryA("shell32"); + if (s_hShell32 == NULL) + { + skip("Unable to load shell32.\n"); + return; + } + + s_pPathResolve = (PATHRESOLVE)GetProcAddress(s_hShell32, "PathResolve"); + if (s_pPathResolve == NULL) + { + skip("Unable to get PathResolve address.\n"); + return; + } + + for (i = 0; i < _countof(s_Entries); ++i) + { + DoEntry(&s_Entries[i]); + } + + FreeLibrary(s_hShell32); + s_hShell32 = NULL; + s_pPathResolve = NULL; +} Index: rostests/apitests/shell32/testlist.c =================================================================== --- rostests/apitests/shell32/testlist.c (revision 74920) +++ rostests/apitests/shell32/testlist.c (working copy) @@ -10,6 +10,7 @@ extern void func_CShellDesktop(void); extern void func_CShellLink(void); extern void func_menu(void); +extern void func_PathResolve(void); extern void func_ShellExecuteEx(void); extern void func_SHParseDisplayName(void); @@ -22,6 +23,7 @@ { "CShellDesktop", func_CShellDesktop }, { "CShellLink", func_CShellLink }, { "menu", func_menu }, + { "PathResolve", func_PathResolve }, { "ShellExecuteEx", func_ShellExecuteEx }, { "SHParseDisplayName", func_SHParseDisplayName }, { 0, 0 }