https://git.reactos.org/?p=reactos.git;a=commitdiff;h=83e690cd927ff00b2afb46eddd697ca4270d39c4

commit 83e690cd927ff00b2afb46eddd697ca4270d39c4
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Tue Nov 1 08:55:42 2022 +0900
Commit:     Katayama Hirofumi MZ <[email protected]>
CommitDate: Tue Nov 1 08:55:42 2022 +0900

    [SHELL32_APITEST] Improve PathResolve testcase
    
    - Use line numbers instead of entry numbers.
    - Add LFN check.
    - Delete some test entries outside of test data directory.
    - Add some test entries.
    CORE-18080
---
 modules/rostests/apitests/shell32/CMakeLists.txt  |    2 +-
 modules/rostests/apitests/shell32/PathResolve.cpp | 1020 +++++++++------------
 modules/rostests/apitests/shell32/shelltest.h     |    1 +
 3 files changed, 431 insertions(+), 592 deletions(-)

diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt 
b/modules/rostests/apitests/shell32/CMakeLists.txt
index 3f5c4b33ad5..16b020510f3 100644
--- a/modules/rostests/apitests/shell32/CMakeLists.txt
+++ b/modules/rostests/apitests/shell32/CMakeLists.txt
@@ -49,7 +49,7 @@ set_target_properties(shell32_apitest
 
 target_link_libraries(shell32_apitest wine uuid ${PSEH_LIB} cpprt atl_classes)
 set_module_type(shell32_apitest win32cui)
-add_importlibs(shell32_apitest user32 gdi32 shell32 ole32 oleaut32 advapi32 
shlwapi msvcrt kernel32 ntdll)
+add_importlibs(shell32_apitest user32 gdi32 shell32 shlwapi ole32 oleaut32 
advapi32 shlwapi msvcrt kernel32 ntdll)
 add_pch(shell32_apitest shelltest.h "${PCH_SKIP_SOURCE}")
 add_rostests_file(TARGET shell32_apitest)
 
diff --git a/modules/rostests/apitests/shell32/PathResolve.cpp 
b/modules/rostests/apitests/shell32/PathResolve.cpp
index c0a6d97e35f..28bea79afcc 100644
--- a/modules/rostests/apitests/shell32/PathResolve.cpp
+++ b/modules/rostests/apitests/shell32/PathResolve.cpp
@@ -7,6 +7,7 @@
 
 #include "shelltest.h"
 
+#include <stdio.h>
 #include <assert.h>
 
 /*
@@ -15,14 +16,19 @@
  */
 
 /* PathResolve */
-typedef int (WINAPI *PATHRESOLVE)(LPWSTR, LPWSTR *, UINT);
+typedef int (WINAPI *PATHRESOLVE)(LPWSTR, LPWSTR*, UINT);
+
+/* IsLFNDriveW */
+typedef BOOL (WINAPI *ISLFNDRIVEW)(LPCWSTR);
 
 static HINSTANCE    s_hShell32 = NULL;
 static PATHRESOLVE  s_pPathResolve = NULL;
-static WCHAR        s_TestDataPath[MAX_PATH];
-static WCHAR        s_LinkFilePath[MAX_PATH];
-static WCHAR        s_LinkTargetPath[MAX_PATH];
-static LPWSTR       s_Dirs[2];
+static ISLFNDRIVEW  s_pIsLFNDriveW = NULL;
+static WCHAR        s_TestDir[MAX_PATH];
+static WCHAR        s_ShortcutLongName[MAX_PATH];
+static WCHAR        s_ShortcutShortName[MAX_PATH];
+static WCHAR        s_LinkTarget[MAX_PATH];
+static LPWSTR       s_Dirs[2] = { s_TestDir, NULL };
 
 /* PathResolve flags */
 #ifndef PRF_VERIFYEXISTS
@@ -36,6 +42,7 @@ static LPWSTR       s_Dirs[2];
     #define PRF_REQUIREABSOLUTE      0x10
 #endif
 
+/* Abstraction of PathResolve flags to manage the test entries */
 #define FLAGS0      0
 #define FLAGS1      PRF_VERIFYEXISTS
 #define FLAGS2      PRF_EXECUTABLE
@@ -51,18 +58,10 @@ static LPWSTR       s_Dirs[2];
 #define FLAGS12     (PRF_REQUIREABSOLUTE | PRF_FIRSTDIRDEF | 
PRF_TRYPROGRAMEXTENSIONS)
 #define FLAGS13     0xFFFFFFFF
 
-#define EF_FULLPATH     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
+/* The test entry structure */
+typedef struct tagTEST_ENTRY
 {
-    INT         EntryNumber;    /* # */
+    INT         LineNumber;    /* # */
     INT         Ret;
     DWORD       Error;
     UINT        EF_;
@@ -70,495 +69,339 @@ typedef struct ENTRY
     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 const ENTRY s_Entries[] =
+} TEST_ENTRY, *PTEST_ENTRY;
+
+/* Flags for TEST_ENTRY */
+#define EF_FULLPATH     0x01
+#define EF_TESTDATA     0x02
+#define EF_TYPE_MASK    0x0F
+#define EF_NAME_ONLY    0x10
+#define EF_APP_PATH     0x20
+
+/* Special error codes */
+#define ERR_NO_CHANGE 0xBEEF      /* Error Code 48879 */
+#define ERR_DEAD      0xDEAD      /* Error Code 57005 */
+#define ERR_IGNORE    0x7F7F7F7F  /* Ignore Error Code */
+#define RAISED        9999        /* exception raised */
+
+/* The test entries for long file name (LFN) */
+static const TEST_ENTRY s_LFNEntries[] =
 {
     /* null path */
-    { 0, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS0 },
-    { 1, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS1 },
-    { 2, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS2 },
-    { 3, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS3 },
-    { 4, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS4 },
-    { 5, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS5 },
-    { 6, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS6 },
-    { 7, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS7 },
-    { 8, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS8 },
-    { 9, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS9 },
-    { 10, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS10 },
-    { 11, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS11 },
-    { 12, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS12 },
-    { 13, RAISED, DEAD, EF_FULLPATH, NULL, NULL, FLAGS13 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS0 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS1 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS2 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS6 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS7 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS8 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, NULL, NULL, FLAGS13 },
     /* empty path */
-    { 14, 1, BEEF, EF_FULLPATH, L"", NULL, FLAGS0 },
-    { 15, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS1 },
-    { 16, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS2 },
-    { 17, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS3 },
-    { 18, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS4 },
-    { 19, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS5 },
-    { 20, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS6 },
-    { 21, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS7 },
-    { 22, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS8 },
-    { 23, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS9 },
-    { 24, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS10 },
-    { 25, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS11 },
-    { 26, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS12 },
-    { 27, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, 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 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, L"", NULL, FLAGS0 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS1 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS2 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS3 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS4 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS5 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS6 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS7 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS8 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS9 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS10 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS11 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS12 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_FULLPATH, L"", NULL, FLAGS13 },
     /* invalid name */
-    { 182, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS0 },
-    { 183, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS1 },
-    { 184, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS2 },
-    { 185, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS3 },
-    { 186, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS4 },
-    { 187, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS5 },
-    { 188, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS6 },
-    { 189, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS7 },
-    { 190, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS8 },
-    { 191, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS9 },
-    { 192, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS10 },
-    { 193, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS11 },
-    { 194, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS12 },
-    { 195, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", L"invalid 
name", FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"invalid name", 
L"invalid name", FLAGS13 },
     /* testdata/2PRONG (path) */
-    { 196, 1, BEEF, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS0 },
-    { 197, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS1 
},
-    { 198, 1, BEEF, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS2 },
-    { 199, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS3 
},
-    { 200, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS4 },
-    { 201, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS5 },
-    { 202, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS6 },
-    { 203, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS7 
},
-    { 204, 1, BEEF, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS8 },
-    { 205, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS9 
},
-    { 206, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS10 },
-    { 207, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS11 },
-    { 208, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS12 },
-    { 209, RAISED, DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS13 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", 
FLAGS1 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", 
FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", 
FLAGS7 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG", L"2PRONG", 
FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG", L"2PRONG", FLAGS13 },
     /* testdata/2PRONG (name only) */
-    { 210, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS0 },
-    { 211, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS1 },
-    { 212, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS2 },
-    { 213, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS3 },
-    { 214, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS4 },
-    { 215, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS5 },
-    { 216, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS6 },
-    { 217, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS7 },
-    { 218, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS8 },
-    { 219, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS9 },
-    { 220, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS10 },
-    { 221, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS11 },
-    { 222, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS12 },
-    { 223, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS13 },
     /* testdata/2PRONG with dirs (name only) */
-    { 224, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS0, s_Dirs },
-    { 225, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS1, s_Dirs },
-    { 226, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS2, s_Dirs },
-    { 227, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS3, s_Dirs },
-    { 228, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS4, s_Dirs },
-    { 229, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS5, s_Dirs },
-    { 230, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS6, s_Dirs },
-    { 231, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS7, s_Dirs },
-    { 232, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS8, s_Dirs },
-    { 233, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS9, s_Dirs },
-    { 234, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS10, s_Dirs },
-    { 235, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS11, s_Dirs },
-    { 236, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS12, s_Dirs },
-    { 237, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG", 
NULL, FLAGS13, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS0, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS1, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS2, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS3, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS4, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS5, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS6, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS7, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS8, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS9, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS10, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS11, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS12, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG", NULL, FLAGS13, s_Dirs },
     /* testdata/2PRONG (name only, app path) */
-    { 238, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS0 },
-    { 239, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS1 },
-    { 240, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS2 },
-    { 241, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS3 },
-    { 242, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS4 },
-    { 243, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS5 },
-    { 244, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS6 },
-    { 245, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS7 },
-    { 246, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS8 },
-    { 247, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS9 },
-    { 248, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS10 },
-    { 249, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS11 },
-    { 250, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS12 },
-    { 251, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"2PRONG", L"2PRONG", FLAGS13 },
-    /* testdata/2PRONG.txt (path) */
-    { 252, 1, BEEF, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS0 },
-    { 253, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS1 },
-    { 254, 1, BEEF, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS2 },
-    { 255, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS3 },
-    { 256, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS4 },
-    { 257, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS5 },
-    { 258, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS6 },
-    { 259, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS7 },
-    { 260, 1, BEEF, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS8 },
-    { 261, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS9 },
-    { 262, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS10 },
-    { 263, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS11 },
-    { 264, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS12 },
-    { 265, RAISED, DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"2PRONG", L"2PRONG", FLAGS13 },
+    /* 2PRONG.txt */
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS0 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS1 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS2 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS6 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS7 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS8 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS13 },
+    /* 2PRONG.txt with dirs */
+    { __LINE__, 1, ERR_IGNORE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS0, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS1, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS2, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS3, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS4, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS5, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS6, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS7, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS8, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS9, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS10, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS11, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS12, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS13, s_Dirs },
     /* 2PRONG.txt (name only) */
-    { 266, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS0 },
-    { 267, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS1 },
-    { 268, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS2 },
-    { 269, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS3 },
-    { 270, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS4 },
-    { 271, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS5 },
-    { 272, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS6 },
-    { 273, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS7 },
-    { 274, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS8 },
-    { 275, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS9 },
-    { 276, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS10 },
-    { 277, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS11 },
-    { 278, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS12 },
-    { 279, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
NULL, FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", NULL, FLAGS13 },
     /* 2PRONG.txt with dirs (name only) */
-    { 280, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS0, s_Dirs },
-    { 281, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS1, s_Dirs },
-    { 282, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS2, s_Dirs },
-    { 283, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS3, s_Dirs },
-    { 284, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS4, s_Dirs },
-    { 285, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS5, s_Dirs },
-    { 286, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS6, s_Dirs },
-    { 287, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS7, s_Dirs },
-    { 288, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS8, s_Dirs },
-    { 289, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS9, s_Dirs },
-    { 290, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS10, s_Dirs },
-    { 291, 1, BEEF, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", L"2PRONG.txt", 
FLAGS11, s_Dirs },
-    { 292, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS12, s_Dirs },
-    { 293, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS13, s_Dirs },
+    { __LINE__, 1, ERR_IGNORE, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS0, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS1, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS2, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS3, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS4, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS5, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS6, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS7, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS8, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS9, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS10, s_Dirs },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA | EF_NAME_ONLY, L"2PRONG.txt", 
L"2PRONG.txt", FLAGS11, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS12, s_Dirs },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"2PRONG.txt", L"2PRONG.txt", FLAGS13, s_Dirs },
     /* testdata/CmdLineUtils (path) */
-    { 294, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS0 },
-    { 295, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS1 },
-    { 296, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS2 },
-    { 297, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", 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, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS7 },
-    { 302, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS8 },
-    { 303, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", 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 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS0 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS1 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS2 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS6 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS7 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS8 },
+    { __LINE__, 1, ERROR_NO_MORE_FILES, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils.lnk", FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS13 },
     /* testdata/CmdLineUtils with PRF_DONTFINDLNK (path) */
-    { 308, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS0 | 
PRF_DONTFINDLNK },
-    { 309, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS1 | PRF_DONTFINDLNK },
-    { 310, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS2 | 
PRF_DONTFINDLNK },
-    { 311, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS3 | PRF_DONTFINDLNK },
-    { 312, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS4 
| PRF_DONTFINDLNK },
-    { 313, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS5 
| PRF_DONTFINDLNK },
-    { 314, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS6 
| PRF_DONTFINDLNK },
-    { 315, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS7 | PRF_DONTFINDLNK },
-    { 316, 1, BEEF, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", FLAGS8 | 
PRF_DONTFINDLNK },
-    { 317, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS9 | PRF_DONTFINDLNK },
-    { 318, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", 
FLAGS10 | PRF_DONTFINDLNK },
-    { 319, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", 
FLAGS11 | PRF_DONTFINDLNK },
-    { 320, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", 
FLAGS12 | PRF_DONTFINDLNK },
-    { 321, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils", L"CmdLineUtils", 
FLAGS13 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS0 | PRF_DONTFINDLNK },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS1 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS2 | PRF_DONTFINDLNK },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS3 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS4 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS5 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS6 | PRF_DONTFINDLNK },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS7 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS8 | PRF_DONTFINDLNK },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS9 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS10 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS11 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS12 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils", 
L"CmdLineUtils", FLAGS13 | PRF_DONTFINDLNK },
     /* testdata/CmdLineUtils (name only) */
-    { 222, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS0 },
-    { 323, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS1 },
-    { 324, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS2 },
-    { 325, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS3 },
-    { 326, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS4 },
-    { 327, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS5 },
-    { 328, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS6 },
-    { 329, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS7 },
-    { 330, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS8 },
-    { 331, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS9 },
-    { 332, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS10 },
-    { 333, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS11 },
-    { 334, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS12 },
-    { 335, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils", NULL, FLAGS13 },
     /* testdata/CmdLineUtils.exe (path) */
-    { 336, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", 
FLAGS0 },
-    { 337, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS1 },
-    { 338, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", 
FLAGS2 },
-    { 339, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS3 },
-    { 340, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS4 },
-    { 341, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS5 },
-    { 342, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS6 },
-    { 343, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS7 },
-    { 344, 1, BEEF, EF_TESTDATA, L"CmdLineUtils.exe", L"CmdLineUtils.exe", 
FLAGS8 },
-    { 345, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS9 },
-    { 346, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS10 },
-    { 347, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS11 },
-    { 348, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS12 },
-    { 349, RAISED, DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS13 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS1 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS7 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_TESTDATA, L"CmdLineUtils.exe", 
L"CmdLineUtils.exe", FLAGS13 },
     /* testdata/CmdLineUtils.exe (name only) */
-    { 350, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS0 },
-    { 351, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS1 },
-    { 352, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS2 },
-    { 353, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS3 },
-    { 354, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS4 },
-    { 355, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS5 },
-    { 356, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS6 },
-    { 357, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS7 },
-    { 358, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS8 },
-    { 359, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS9 },
-    { 360, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS10 },
-    { 361, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS11 },
-    { 362, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS12 },
-    { 363, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS13 },
     /* 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 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS0, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS1, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS2, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS3, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS4, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS5, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS6, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS7, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS8, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS9, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS10, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS11, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS12, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS13, s_Dirs },
     /* testdata/CmdLineUtils.exe with dirs (name only) */
-    { 378, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS0, s_Dirs },
-    { 379, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS1, s_Dirs },
-    { 380, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS2, s_Dirs },
-    { 381, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS3, s_Dirs },
-    { 382, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS4, s_Dirs },
-    { 383, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS5, s_Dirs },
-    { 384, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS6, s_Dirs },
-    { 385, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS7, s_Dirs },
-    { 386, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS8, s_Dirs },
-    { 387, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS9, s_Dirs },
-    { 388, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS10, s_Dirs },
-    { 389, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS11, s_Dirs },
-    { 390, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS12, s_Dirs },
-    { 391, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS13, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS0, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS1, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS2, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS3, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS4, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS5, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS6, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS7, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS8, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS9, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS10, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS11, s_Dirs },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY, 
L"CmdLineUtils.exe", NULL, FLAGS12, s_Dirs },
+    { __LINE__, 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) */
-    { 392, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS0 },
-    { 393, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS1 },
-    { 394, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS2 },
-    { 395, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS3 },
-    { 396, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS4 },
-    { 397, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS5 },
-    { 398, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS6 },
-    { 399, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS7 },
-    { 400, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS8 },
-    { 401, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS9 },
-    { 402, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS10 },
-    { 403, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS11 },
-    { 404, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS12 },
-    { 405, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | EF_APP_PATH, 
L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS13 },
-    /* C:\ */
-    { 406, 1, BEEF, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS0 },
-    { 407, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS1 },
-    { 408, 1, BEEF, EF_FULLPATH, L"C:\\", NULL, FLAGS2 },
-    { 409, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS3 },
-    { 410, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS4 },
-    { 411, 1, BEEF, EF_FULLPATH, L"C:\\", NULL, FLAGS5 },
-    { 412, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS6 },
-    { 413, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS7 },
-    { 414, 1, BEEF, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS8 },
-    { 415, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS9 },
-    { 416, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS10 },
-    { 417, 1, BEEF, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS11 },
-    { 418, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS12 },
-    { 419, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, L"C:\\", L"C:\\", FLAGS13 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS0 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS1 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS2 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS3 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS4 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS5 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS6 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS7 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS8 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS9 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS10 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS11 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS12 },
+    { __LINE__, 0, ERROR_FILE_NOT_FOUND, EF_TESTDATA | EF_NAME_ONLY | 
EF_APP_PATH, L"GhostProgram.exe", L"CmdLineUtils.exe", FLAGS13 },
     /* CmdLineUtils.lnk */
-    { 420, 1, BEEF, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS0 },
-    { 421, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS1 },
-    { 422, 1, BEEF, EF_FULLPATH, s_LinkFilePath, NULL, FLAGS2 },
-    { 423, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS3 },
-    { 424, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS4 },
-    { 425, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS5 },
-    { 426, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS6 },
-    { 427, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS7 },
-    { 428, 1, BEEF, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS8 },
-    { 429, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS9 },
-    { 430, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS10 
},
-    { 431, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS11 
},
-    { 432, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS12 
},
-    { 433, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS13 
},
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS0 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS1 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, NULL, 
FLAGS2 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS3 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS4 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS5 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS6 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS7 },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS8 },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS9 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS10 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS11 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS12 },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS13 },
     /* CmdLineUtils.lnk (with PRF_DONTFINDLNK) */
-    { 434, 1, BEEF, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS0 | 
PRF_DONTFINDLNK },
-    { 435, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS1 | PRF_DONTFINDLNK },
-    { 436, 1, BEEF, EF_FULLPATH, s_LinkFilePath, NULL, FLAGS2 | 
PRF_DONTFINDLNK },
-    { 437, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS3 | PRF_DONTFINDLNK },
-    { 438, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS4 | 
PRF_DONTFINDLNK },
-    { 439, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS5 | 
PRF_DONTFINDLNK },
-    { 440, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS6 | 
PRF_DONTFINDLNK },
-    { 441, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS7 | PRF_DONTFINDLNK },
-    { 442, 1, BEEF, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS8 | 
PRF_DONTFINDLNK },
-    { 443, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_LinkFilePath, 
s_LinkFilePath, FLAGS9 | PRF_DONTFINDLNK },
-    { 444, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS10 
| PRF_DONTFINDLNK },
-    { 445, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS11 
| PRF_DONTFINDLNK },
-    { 446, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS12 
| PRF_DONTFINDLNK },
-    { 447, RAISED, DEAD, EF_FULLPATH, s_LinkFilePath, s_LinkFilePath, FLAGS13 
| PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS0 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS1 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, NULL, 
FLAGS2 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS3 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS4 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS5 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS6 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS7 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERR_NO_CHANGE, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS8 | PRF_DONTFINDLNK },
+    { __LINE__, 1, ERROR_FILE_NOT_FOUND, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS9 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS10 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS11 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS12 | PRF_DONTFINDLNK },
+    { __LINE__, RAISED, ERR_DEAD, EF_FULLPATH, s_ShortcutLongName, 
s_ShortcutLongName, FLAGS13 | PRF_DONTFINDLNK },
 };
 
 static BOOL
@@ -593,7 +436,7 @@ CreateShortcut(LPCWSTR pszLnkFileName,
 }
 
 static BOOL
-CreateRegAppPath(INT EntryNumber, const WCHAR* Name, const WCHAR* Value)
+CreateRegAppPath(INT LineNumber, const WCHAR* Name, const WCHAR* Value)
 {
     HKEY RegistryKey;
     LONG Result;
@@ -606,13 +449,13 @@ CreateRegAppPath(INT EntryNumber, const WCHAR* Name, 
const WCHAR* Value)
         0, KEY_WRITE, NULL, &RegistryKey, &Disposition);
     if (Result != ERROR_SUCCESS)
     {
-        trace("#%d: Could not create test key. Status: %lu\n", EntryNumber, 
Result);
+        trace("#%d: Could not create test key. Status: %lu\n", LineNumber, 
Result);
         return FALSE;
     }
     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);
+        trace("#%d: Could not set value of the test key. Status: %lu\n", 
LineNumber, Result);
         RegCloseKey(RegistryKey);
         return FALSE;
     }
@@ -621,7 +464,7 @@ CreateRegAppPath(INT EntryNumber, const WCHAR* Name, const 
WCHAR* Value)
 }
 
 static BOOL
-DeleteRegAppPath(INT EntryNumber, const WCHAR* Name)
+DeleteRegAppPath(INT LineNumber, const WCHAR* Name)
 {
     LONG Result;
     WCHAR Buffer[1024];
@@ -630,13 +473,13 @@ DeleteRegAppPath(INT EntryNumber, const WCHAR* Name)
     Result = RegDeleteKeyW(HKEY_LOCAL_MACHINE, Buffer);
     if (Result != ERROR_SUCCESS)
     {
-        trace("#%d: Could not remove the test key. Status: %lu\n", 
EntryNumber, Result);
+        trace("#%d: Could not remove the test key. Status: %lu\n", LineNumber, 
Result);
         return FALSE;
     }
     return TRUE;
 }
 
-static void DoEntry(INT EntryNumber, const ENTRY *pEntry)
+static void DoEntry(INT SectionNumber, INT LineNumber, const TEST_ENTRY 
*pEntry)
 {
     WCHAR Path[MAX_PATH], PathExpected[MAX_PATH];
     INT Ret;
@@ -667,54 +510,14 @@ static void DoEntry(INT EntryNumber, const ENTRY *pEntry)
         }
         else
         {
-            lstrcpyW(Path, s_TestDataPath);
+            lstrcpyW(Path, s_TestDir);
             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));
+            lstrcpyW(PathExpected, s_TestDir);
             lstrcatW(PathExpected, L"\\");
             lstrcatW(PathExpected, pEntry->NameExpected);
         }
@@ -723,16 +526,16 @@ static void DoEntry(INT EntryNumber, const ENTRY *pEntry)
 
     if (pEntry->EF_ & EF_APP_PATH)
     {
-        if (!CreateRegAppPath(EntryNumber, pEntry->NameBefore, PathExpected))
+        if (!CreateRegAppPath(LineNumber, pEntry->NameBefore, PathExpected))
         {
-            skip("#%d: CreateRegAppPath failure\n", EntryNumber);
+            skip("Section %d, Line %d: CreateRegAppPath failure\n", 
SectionNumber, LineNumber);
             return;
         }
     }
 
     _SEH2_TRY
     {
-        SetLastError(BEEF);
+        SetLastError(ERR_NO_CHANGE);
         if (pEntry->NameBefore)
         {
             Ret = (*s_pPathResolve)(Path, pEntry->Dirs, pEntry->Flags);
@@ -746,85 +549,79 @@ static void DoEntry(INT EntryNumber, const ENTRY *pEntry)
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
         Ret = RAISED;
-        Error = DEAD;
+        Error = ERR_DEAD;
     }
     _SEH2_END;
 
     if (pEntry->EF_ & EF_APP_PATH)
     {
-        ok(DeleteRegAppPath(EntryNumber, pEntry->NameBefore),
-           "#%d: DeleteRegAppPath failed\n", EntryNumber);
+        ok(DeleteRegAppPath(LineNumber, pEntry->NameBefore),
+           "Section %d, Line %d: DeleteRegAppPath failed\n", SectionNumber, 
LineNumber);
     }
 
-    ok(Ret == pEntry->Ret, "#%d: Ret expected %d, was %d.\n",
-       EntryNumber, pEntry->Ret, Ret);
-    if (pEntry->Error != IGNORE_ERR)
+    ok(Ret == pEntry->Ret, "Section %d, Line %d: Ret expected %d, was %d.\n",
+       SectionNumber, LineNumber, pEntry->Ret, Ret);
+    if (pEntry->Error != ERR_IGNORE)
     {
-        ok(Error == pEntry->Error, "#%d: last error expected %ld, was %ld.\n",
-           EntryNumber, pEntry->Error, Error);
+        ok(Error == pEntry->Error, "Section %d, Line %d: last error expected 
%ld, was %ld.\n",
+           SectionNumber, LineNumber, pEntry->Error, Error);
     }
 
     if (pEntry->NameExpected && !(pEntry->EF_ & EF_APP_PATH))
     {
-        ok(lstrcmpW(Path, PathExpected) == 0, "#%d: Path expected %s, was 
%s.\n",
-           EntryNumber, wine_dbgstr_w(PathExpected), wine_dbgstr_w(Path));
+        ok(lstrcmpW(Path, PathExpected) == 0, "Section %d, Line%d: Path 
expected %s, was %s.\n",
+           SectionNumber, LineNumber, wine_dbgstr_w(PathExpected), 
wine_dbgstr_w(Path));
     }
 }
 
 static void TestMain_PathResolve(void)
 {
-    UINT i;
+    UINT i, cEntries;
+    const TEST_ENTRY *pEntries;
     WCHAR Saved[128], *pPathExtSaved;
 
+    pEntries = s_LFNEntries;
+    cEntries = _countof(s_LFNEntries);
+
     /* save PATHEXT */
     if (GetEnvironmentVariableW(L"PATHEXT", Saved, _countof(Saved)))
-    {
         pPathExtSaved = Saved;
-    }
     else
-    {
         pPathExtSaved = NULL;
-    }
 
-    /* normal */
-    for (i = 0; i < _countof(s_Entries); ++i)
+    /* Section 1 */
+    for (i = 0; i < cEntries; ++i)
     {
-        DoEntry(s_Entries[i].EntryNumber, &s_Entries[i]);
+        DoEntry(1, pEntries[i].LineNumber, &pEntries[i]);
     }
 
-    /* +#1000: reset PATHEXT */
+    /* Section 2: reset PATHEXT */
     if (SetEnvironmentVariableW(L"PATHEXT", NULL))
     {
-        for (i = 0; i < _countof(s_Entries); ++i)
-        {
-            DoEntry(s_Entries[i].EntryNumber + 1000, &s_Entries[i]);
-        }
+        for (i = 0; i < cEntries; ++i)
+            DoEntry(2, pEntries[i].LineNumber, &pEntries[i]);
     }
     else
     {
         skip("SetEnvironmentVariableW failed\n");
     }
 
-    /* +#2000: set PATHEXT to ".COM;.EXE;.BAT" */
+    /* Section 3: set PATHEXT to ".COM;.EXE;.BAT" */
     if (SetEnvironmentVariableW(L"PATHEXT", L".COM;.EXE;.BAT"))
     {
-        for (i = 0; i < _countof(s_Entries); ++i)
-        {
-            DoEntry(s_Entries[i].EntryNumber + 2000, &s_Entries[i]);
-        }
+        for (i = 0; i < cEntries; ++i)
+            DoEntry(3, pEntries[i].LineNumber, &pEntries[i]);
     }
     else
     {
         skip("SetEnvironmentVariableW failed\n");
     }
 
-    /* +#3000: set PATHEXT to ".TXT" */
+    /* Section 4: set PATHEXT to ".TXT" */
     if (SetEnvironmentVariableW(L"PATHEXT", L".TXT"))
     {
-        for (i = 0; i < _countof(s_Entries); ++i)
-        {
-            DoEntry(s_Entries[i].EntryNumber + 3000, &s_Entries[i]);
-        }
+        for (i = 0; i < cEntries; ++i)
+            DoEntry(4, pEntries[i].LineNumber, &pEntries[i]);
     }
     else
     {
@@ -838,58 +635,99 @@ static void TestMain_PathResolve(void)
 START_TEST(PathResolve)
 {
     LPWSTR pch;
+    WCHAR szRoot[MAX_PATH];
 
-    GetModuleFileNameW(NULL, s_TestDataPath, _countof(s_TestDataPath));
-    pch = wcsrchr(s_TestDataPath, L'\\');
-    if (pch == NULL)
-        pch = wcsrchr(s_TestDataPath, L'/');
+    /* Get this program's path */
+    GetModuleFileNameW(NULL, s_TestDir, _countof(s_TestDir));
+
+    /* Add '\testdata' to the path */
+    pch = wcsrchr(s_TestDir, L'\\');
     if (pch == NULL)
     {
         skip("GetModuleFileName and/or wcsrchr are insane.\n");
         return;
     }
     lstrcpyW(pch, L"\\testdata");
-    if (GetFileAttributesW(s_TestDataPath) == INVALID_FILE_ATTRIBUTES)
+
+    /* Create the testdata directory */
+    CreateDirectoryW(s_TestDir, NULL);
+    if (GetFileAttributesW(s_TestDir) == INVALID_FILE_ATTRIBUTES)
     {
         skip("testdata is not found.\n");
         return;
     }
 
-    s_Dirs[0] = s_TestDataPath;
-    s_Dirs[1] = NULL;
+    /* Build s_LinkTarget path */
+    lstrcpyW(s_LinkTarget, s_TestDir);
+    lstrcatW(s_LinkTarget, L"\\");
+    lstrcatW(s_LinkTarget, L"2PRONG.txt");
 
-    lstrcpyW(s_LinkFilePath, s_TestDataPath);
-    lstrcatW(s_LinkFilePath, L"\\");
-    lstrcatW(s_LinkFilePath, L"CmdLineUtils.lnk");
+    /* Create the file */
+    fclose(_wfopen(s_LinkTarget, L"wb"));
+    ok(GetFileAttributesW(s_LinkTarget) != INVALID_FILE_ATTRIBUTES, 
"s_LinkTarget not found\n");
 
-    lstrcpyW(s_LinkTargetPath, s_TestDataPath);
-    lstrcatW(s_LinkTargetPath, L"\\");
-    lstrcatW(s_LinkTargetPath, L"2PRONG.txt");
+    /* Build s_ShortcutLongName path */
+    lstrcpyW(s_ShortcutLongName, s_TestDir);
+    lstrcatW(s_ShortcutLongName, L"\\");
+    lstrcatW(s_ShortcutLongName, L"CmdLineUtils.lnk"); /* in Long File Name */
 
-    ok(CreateShortcut(s_LinkFilePath, s_LinkTargetPath),
+    /* Create s_ShortcutLongName shortcut file */
+    ok(CreateShortcut(s_ShortcutLongName, s_LinkTarget),
        "CreateShortcut(%s, %s) failed.\n",
-       wine_dbgstr_w(s_LinkFilePath), wine_dbgstr_w(s_LinkTargetPath));
+       wine_dbgstr_w(s_ShortcutLongName), wine_dbgstr_w(s_LinkTarget));
 
+    /* Build s_ShortcutShortName path */
+    lstrcpyW(s_ShortcutShortName, s_TestDir);
+    lstrcatW(s_ShortcutShortName, L"\\");
+    GetShortPathNameW(s_ShortcutShortName, s_ShortcutShortName, 
_countof(s_ShortcutShortName));
+    lstrcatW(s_ShortcutShortName, L"CmdLineU.lnk"); /* in Short File Name */
+
+    /* Create s_ShortcutShortName shortcut file */
+    ok(CreateShortcut(s_ShortcutShortName, s_LinkTarget),
+       "CreateShortcut(%s, %s) failed.\n",
+       wine_dbgstr_w(s_ShortcutShortName), wine_dbgstr_w(s_LinkTarget));
+
+    /* Load shell32.dll */
     s_hShell32 = LoadLibraryA("shell32");
     if (s_hShell32 == NULL)
     {
         skip("Unable to load shell32.\n");
-        return;
+        goto Cleanup;
     }
 
+    /* Get PathResolve procedure */
     s_pPathResolve = (PATHRESOLVE)GetProcAddress(s_hShell32, "PathResolve");
     if (s_pPathResolve == NULL)
     {
         skip("Unable to get PathResolve address.\n");
-        return;
+        goto Cleanup;
     }
 
-    TestMain_PathResolve();
+    /* Get IsLFNDriveW procedure */
+    s_pIsLFNDriveW = (ISLFNDRIVEW)GetProcAddress(s_hShell32, 
(LPCSTR)(INT_PTR)42);
+    if (s_pIsLFNDriveW == NULL)
+    {
+        skip("Unable to get IsLFNDriveW address.\n");
+        goto Cleanup;
+    }
 
-    ok(DeleteFileW(s_LinkFilePath), "DeleteFileW(%s) failed\n",
-       wine_dbgstr_w(s_LinkFilePath));
+    /* Is LFN supported? */
+    lstrcpyW(szRoot, s_TestDir);
+    PathStripToRootW(szRoot);
+    if (!s_pIsLFNDriveW(szRoot))
+    {
+        skip("LFN is not supported in this drive %s.\n", 
wine_dbgstr_w(szRoot));
+        goto Cleanup;
+    }
+
+    /* Do tests */
+    TestMain_PathResolve();
 
+    /* Clean up */
+Cleanup:
+    DeleteFileW(s_LinkTarget);
+    DeleteFileW(s_ShortcutLongName);
+    DeleteFileW(s_ShortcutShortName);
+    RemoveDirectoryW(s_TestDir);
     FreeLibrary(s_hShell32);
-    s_hShell32 = NULL;
-    s_pPathResolve = NULL;
 }
diff --git a/modules/rostests/apitests/shell32/shelltest.h 
b/modules/rostests/apitests/shell32/shelltest.h
index 2271b51aa4d..1f7612d3fdc 100644
--- a/modules/rostests/apitests/shell32/shelltest.h
+++ b/modules/rostests/apitests/shell32/shelltest.h
@@ -10,6 +10,7 @@
 #include <winreg.h>
 #include <shlobj.h>
 #include <shellapi.h>
+#include <shlwapi.h>
 #include <atlbase.h>
 #include <atlcom.h>
 


Reply via email to