ReactOS  0.4.15-dev-3440-g915569a
ShellExecuteEx.cpp File Reference
#include "shelltest.h"
#include <shlwapi.h>
#include <stdio.h>
Include dependency graph for ShellExecuteEx.cpp:

Go to the source code of this file.

Classes

struct  TEST_ENTRY
 
struct  OPENWNDS
 

Macros

#define ok_ShellExecuteEx   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : TestShellExecuteEx
 
#define DONT_CARE   0x0BADF00D
 

Typedefs

typedef struct TEST_ENTRY TEST_ENTRY
 
typedef struct OPENWNDS OPENWNDS
 

Functions

static BOOL CreateAppPathRegKey (const WCHAR *Name)
 
static VOID DeleteAppPathRegKey (const WCHAR *Name)
 
static VOID TestShellExecuteEx (const WCHAR *Name, BOOL ExpectedResult)
 
static void DoAppPathTest (void)
 
static BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam)
 
static VOID DoTestEntry (const TEST_ENTRY *pEntry)
 
static BOOL GetSubProgramPath (void)
 
static void DoTestEntries (void)
 
 START_TEST (ShellExecuteEx)
 

Variables

static char s_sub_program [MAX_PATH]
 
static char s_win_test_exe [MAX_PATH]
 
static char s_sys_test_exe [MAX_PATH]
 
static char s_win_bat_file [MAX_PATH]
 
static char s_sys_bat_file [MAX_PATH]
 
static char s_win_txt_file [MAX_PATH]
 
static char s_sys_txt_file [MAX_PATH]
 
static const TEST_ENTRY s_entries_1 []
 
static const TEST_ENTRY s_entries_2 []
 
static OPENWNDS s_wi0 = { 0 }
 
static OPENWNDS s_wi1 = { 0 }
 

Macro Definition Documentation

◆ DONT_CARE

#define DONT_CARE   0x0BADF00D

Definition at line 125 of file ShellExecuteEx.cpp.

◆ ok_ShellExecuteEx

#define ok_ShellExecuteEx   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : TestShellExecuteEx

Definition at line 13 of file ShellExecuteEx.cpp.

Typedef Documentation

◆ OPENWNDS

◆ TEST_ENTRY

Function Documentation

◆ CreateAppPathRegKey()

static BOOL CreateAppPathRegKey ( const WCHAR Name)
static

Definition at line 17 of file ShellExecuteEx.cpp.

18 {
19  HKEY RegistryKey;
20  LONG Result;
21  WCHAR Buffer[1024];
22  WCHAR KeyValue[1024];
23  DWORD Length = sizeof(KeyValue);
25 
26  wcscpy(Buffer, L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
27  wcscat(Buffer, L"IEXPLORE.EXE");
29  if (Result != ERROR_SUCCESS) trace("Could not open iexplore.exe key. Status: %lu\n", Result);
30  if (Result) goto end;
31  Result = RegQueryValueExW(RegistryKey, NULL, NULL, NULL, (LPBYTE)KeyValue, &Length);
32  if (Result != ERROR_SUCCESS) trace("Could not read iexplore.exe key. Status: %lu\n", Result);
33  if (Result) goto end;
34  RegCloseKey(RegistryKey);
35 
36  wcscpy(Buffer, L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
37  wcscat(Buffer, Name);
39  0, KEY_WRITE, NULL, &RegistryKey, &Disposition);
40  if (Result != ERROR_SUCCESS) trace("Could not create test key. Status: %lu\n", Result);
41  if (Result) goto end;
42  Result = RegSetValueW(RegistryKey, NULL, REG_SZ, KeyValue, 0);
43  if (Result != ERROR_SUCCESS) trace("Could not set value of the test key. Status: %lu\n", Result);
44  if (Result) goto end;
45  RegCloseKey(RegistryKey);
46 end:
47  if (RegistryKey) RegCloseKey(RegistryKey);
48  return Result == ERROR_SUCCESS;
49 }
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
LONG WINAPI RegSetValueW(HKEY hKeyOriginal, LPCWSTR lpSubKey, DWORD dwType, LPCWSTR lpData, DWORD cbData)
Definition: reg.c:5017
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:50
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1091
#define L(x)
Definition: ntvdm.h:50
unsigned char * LPBYTE
Definition: typedefs.h:53
long LONG
Definition: pedump.c:60
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
Definition: bufpool.h:45
#define KEY_WRITE
Definition: nt_native.h:1031
#define trace
Definition: atltest.h:70
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4120
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint end
Definition: gl.h:1545
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define NULL
Definition: types.h:112
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3356
#define RegCloseKey(hKey)
Definition: registry.h:40
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define REG_SZ
Definition: layer.c:22

Referenced by DoAppPathTest().

◆ DeleteAppPathRegKey()

static VOID DeleteAppPathRegKey ( const WCHAR Name)
static

Definition at line 53 of file ShellExecuteEx.cpp.

54 {
55  LONG Result;
56  WCHAR Buffer[1024];
57  wcscpy(Buffer, L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
58  wcscat(Buffer, Name);
60  if (Result != ERROR_SUCCESS) trace("Could not remove the test key. Status: %lu\n", Result);
61 }
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1237
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
Definition: bufpool.h:45
#define trace
Definition: atltest.h:70
__wchar_t WCHAR
Definition: xmlstorage.h:180
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by DoAppPathTest().

◆ DoAppPathTest()

static void DoAppPathTest ( void  )
static

Definition at line 87 of file ShellExecuteEx.cpp.

88 {
89  ok_ShellExecuteEx(L"iexplore", TRUE);
90  ok_ShellExecuteEx(L"iexplore.exe", TRUE);
91 
92  if (CreateAppPathRegKey(L"iexplore.bat"))
93  {
94  ok_ShellExecuteEx(L"iexplore.bat", TRUE);
95  ok_ShellExecuteEx(L"iexplore.bat.exe", FALSE);
96  DeleteAppPathRegKey(L"iexplore.bat");
97  }
98 
99  if (CreateAppPathRegKey(L"iexplore.bat.exe"))
100  {
101  ok_ShellExecuteEx(L"iexplore.bat", FALSE);
102  ok_ShellExecuteEx(L"iexplore.bat.exe", TRUE);
103  DeleteAppPathRegKey(L"iexplore.bat.exe");
104  }
105 }
#define ok_ShellExecuteEx
static VOID DeleteAppPathRegKey(const WCHAR *Name)
#define TRUE
Definition: types.h:120
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
static BOOL CreateAppPathRegKey(const WCHAR *Name)

Referenced by START_TEST().

◆ DoTestEntries()

static void DoTestEntries ( void  )
static

Definition at line 284 of file ShellExecuteEx.cpp.

285 {
286  if (!GetSubProgramPath())
287  {
288  skip("shell32_apitest_sub.exe is not found\n");
289  return;
290  }
291 
292  // s_win_test_exe
294  PathAppendA(s_win_test_exe, "test program.exe");
296  if (!ret)
297  {
298  skip("Please retry with admin rights\n");
299  return;
300  }
301 
302  // record open windows
304  {
305  skip("EnumWindows failed\n");
307  free(s_wi0.phwnd);
308  return;
309  }
310 
311  // s_sys_test_exe
313  PathAppendA(s_sys_test_exe, "test program.exe");
315 
316  // s_win_bat_file
318  PathAppendA(s_win_bat_file, "test program.bat");
319  FILE *fp = fopen(s_win_bat_file, "wb");
320  fprintf(fp, "exit /b 3");
321  fclose(fp);
323 
324  // s_sys_bat_file
326  PathAppendA(s_sys_bat_file, "test program.bat");
327  fp = fopen(s_sys_bat_file, "wb");
328  fprintf(fp, "exit /b 4");
329  fclose(fp);
331 
332  // s_win_txt_file
334  PathAppendA(s_win_txt_file, "test_file.txt");
335  fp = fopen(s_win_txt_file, "wb");
336  fclose(fp);
338 
339  // s_sys_txt_file
341  PathAppendA(s_sys_txt_file, "test_file.txt");
342  fp = fopen(s_sys_txt_file, "wb");
343  fclose(fp);
345 
346  for (UINT iTest = 0; iTest < _countof(s_entries_1); ++iTest)
347  {
349  }
350 
353 
354  for (UINT iTest = 0; iTest < _countof(s_entries_2); ++iTest)
355  {
357  }
358 
363 
364  free(s_wi0.phwnd);
365 }
static char s_sys_test_exe[MAX_PATH]
#define TRUE
Definition: types.h:120
#define free
Definition: debug_ros.c:5
BOOL WINAPI PathAppendA(LPSTR lpszPath, LPCSTR lpszAppend)
Definition: path.c:106
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
Definition: path.c:2282
BOOL WINAPI PathFileExistsA(LPCSTR lpszPath)
Definition: path.c:1754
BOOL WINAPI CopyFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:404
static char s_sys_bat_file[MAX_PATH]
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
#define ok_int(expression, result)
Definition: atltest.h:134
static char s_win_txt_file[MAX_PATH]
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
int iTest
Definition: menu.cpp:212
#define _countof(array)
Definition: sndvol32.h:68
static const TEST_ENTRY s_entries_2[]
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC, _In_ LPARAM)
static VOID DoTestEntry(const TEST_ENTRY *pEntry)
int ret
static char s_win_bat_file[MAX_PATH]
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
static OPENWNDS s_wi0
UINT WINAPI GetWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
Definition: path.c:2336
static char s_win_test_exe[MAX_PATH]
unsigned int UINT
Definition: ndis.h:50
#define skip(...)
Definition: atltest.h:64
static BOOL GetSubProgramPath(void)
static char s_sys_txt_file[MAX_PATH]
static const TEST_ENTRY s_entries_1[]
static char s_sub_program[MAX_PATH]

Referenced by START_TEST().

◆ DoTestEntry()

static VOID DoTestEntry ( const TEST_ENTRY pEntry)
static

Definition at line 211 of file ShellExecuteEx.cpp.

212 {
213  SHELLEXECUTEINFOA info = { sizeof(info) };
215  info.nShow = SW_SHOWNORMAL;
216  info.lpFile = pEntry->file;
217  info.lpParameters = pEntry->params;
218  info.lpDirectory = pEntry->curdir;
220  ok(ret == pEntry->ret, "Line %u: ret expected %d, got %d\n",
221  pEntry->lineno, pEntry->ret, ret);
222  if (!pEntry->ret)
223  return;
224 
225  if ((UINT)pEntry->bProcessHandle != DONT_CARE)
226  {
227  if (pEntry->bProcessHandle)
228  {
229  ok(!!info.hProcess, "Line %u: hProcess expected non-NULL\n", pEntry->lineno);
230  }
231  else
232  {
233  ok(!info.hProcess, "Line %u: hProcess expected NULL\n", pEntry->lineno);
234  return;
235  }
236  }
237 
238  WaitForInputIdle(info.hProcess, INFINITE);
239 
240  // close newly opened windows
242  for (UINT i1 = 0; i1 < s_wi1.count; ++i1)
243  {
244  BOOL bFound = FALSE;
245  for (UINT i0 = 0; i0 < s_wi0.count; ++i0)
246  {
247  if (s_wi1.phwnd[i1] == s_wi0.phwnd[i0])
248  {
249  bFound = TRUE;
250  break;
251  }
252  }
253  if (!bFound)
254  PostMessageW(s_wi1.phwnd[i1], WM_CLOSE, 0, 0);
255  }
256  free(s_wi1.phwnd);
257  ZeroMemory(&s_wi1, sizeof(s_wi1));
258 
259  WaitForSingleObject(info.hProcess, INFINITE);
260  CloseHandle(info.hProcess);
261 }
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExA(LPSHELLEXECUTEINFOA sei)
Definition: shlexec.cpp:2213
#define CloseHandle
Definition: compat.h:598
static OPENWNDS s_wi1
#define SEE_MASK_NOCLOSEPROCESS
Definition: shellapi.h:31
#define TRUE
Definition: types.h:120
#define free
Definition: debug_ros.c:5
#define ZeroMemory
Definition: winbase.h:1664
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define SEE_MASK_FLAG_NO_UI
Definition: shellapi.h:36
LONG_PTR LPARAM
Definition: windef.h:208
#define WM_CLOSE
Definition: winuser.h:1608
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC, _In_ LPARAM)
struct _test_info info[]
Definition: SetCursorPos.c:19
int ret
#define SW_SHOWNORMAL
Definition: winuser.h:764
static OPENWNDS s_wi0
#define DONT_CARE
#define ok(value,...)
Definition: atltest.h:57
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
DWORD WINAPI WaitForInputIdle(_In_ HANDLE, _In_ DWORD)
#define INFINITE
Definition: serial.h:102
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484

Referenced by DoTestEntries().

◆ EnumWindowsProc()

static BOOL CALLBACK EnumWindowsProc ( HWND  hwnd,
LPARAM  lParam 
)
static

Definition at line 200 of file ShellExecuteEx.cpp.

201 {
203  info->phwnd = (HWND *)realloc(info->phwnd, (info->count + 1) * sizeof(HWND));
204  if (!info->phwnd)
205  return FALSE;
206  info->phwnd[info->count] = hwnd;
207  ++(info->count);
208  return TRUE;
209 }
#define realloc
Definition: debug_ros.c:6
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define TRUE
Definition: types.h:120
HANDLE HWND
Definition: compat.h:19
unsigned int count
Definition: notification.c:64
#define FALSE
Definition: types.h:117
LPARAM lParam
Definition: combotst.c:139

Referenced by DoTestEntries(), and DoTestEntry().

◆ GetSubProgramPath()

static BOOL GetSubProgramPath ( void  )
static

Definition at line 264 of file ShellExecuteEx.cpp.

265 {
268  PathAppendA(s_sub_program, "shell32_apitest_sub.exe");
269 
271  {
273  PathAppendA(s_sub_program, "testdata\\shell32_apitest_sub.exe");
274 
276  {
277  return FALSE;
278  }
279  }
280 
281  return TRUE;
282 }
#define TRUE
Definition: types.h:120
BOOL WINAPI PathAppendA(LPSTR lpszPath, LPCSTR lpszAppend)
Definition: path.c:106
BOOL WINAPI PathFileExistsA(LPCSTR lpszPath)
Definition: path.c:1754
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
Definition: loader.c:539
BOOL WINAPI PathRemoveFileSpecA(LPSTR lpszPath)
Definition: path.c:586
#define FALSE
Definition: types.h:117
#define _countof(array)
Definition: sndvol32.h:68
#define NULL
Definition: types.h:112
static char s_sub_program[MAX_PATH]

Referenced by DoTestEntries().

◆ START_TEST()

START_TEST ( ShellExecuteEx  )

Definition at line 367 of file ShellExecuteEx.cpp.

368 {
369  DoAppPathTest();
370  DoTestEntries();
371 }
static void DoAppPathTest(void)
static void DoTestEntries(void)

◆ TestShellExecuteEx()

static VOID TestShellExecuteEx ( const WCHAR Name,
BOOL  ExpectedResult 
)
static

Definition at line 65 of file ShellExecuteEx.cpp.

66 {
67  SHELLEXECUTEINFOW ShellExecInfo;
68  BOOL Result;
69  ZeroMemory(&ShellExecInfo, sizeof(ShellExecInfo));
70  ShellExecInfo.cbSize = sizeof(ShellExecInfo);
72  ShellExecInfo.hwnd = NULL;
73  ShellExecInfo.nShow = SW_SHOWNORMAL;
74  ShellExecInfo.lpFile = Name;
75  ShellExecInfo.lpDirectory = NULL;
76  Result = ShellExecuteExW(&ShellExecInfo);
77  ok(Result == ExpectedResult, "ShellExecuteEx lpFile %s failed. Error: %lu\n", wine_dbgstr_w(Name), GetLastError());
78  if (ShellExecInfo.hProcess)
79  {
80  Result = TerminateProcess(ShellExecInfo.hProcess, 0);
81  if (!Result) trace("Terminate process failed. Error: %lu\n", GetLastError());
82  WaitForSingleObject(ShellExecInfo.hProcess, INFINITE);
83  CloseHandle(ShellExecInfo.hProcess);
84  }
85 }
#define CloseHandle
Definition: compat.h:598
#define SEE_MASK_NOCLOSEPROCESS
Definition: shellapi.h:31
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ZeroMemory
Definition: winbase.h:1664
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
unsigned int BOOL
Definition: ntddk_ex.h:94
LPCWSTR lpDirectory
Definition: shellapi.h:332
struct NameRec_ * Name
Definition: cdprocs.h:459
#define SEE_MASK_FLAG_NO_UI
Definition: shellapi.h:36
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2263
#define trace
Definition: atltest.h:70
#define SW_SHOWNORMAL
Definition: winuser.h:764
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
Definition: proc.c:1532
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define INFINITE
Definition: serial.h:102

Variable Documentation

◆ s_entries_1

const TEST_ENTRY s_entries_1[]
static

Definition at line 127 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_entries_2

const TEST_ENTRY s_entries_2[]
static
Initial value:
=
{
{ __LINE__, TRUE, TRUE, "test program" },
{ __LINE__, TRUE, TRUE, "test program", "TEST" },
{ __LINE__, TRUE, TRUE, "\"test program\"" },
{ __LINE__, TRUE, TRUE, s_win_test_exe },
{ __LINE__, TRUE, TRUE, s_sys_test_exe },
{ __LINE__, FALSE, FALSE, s_win_bat_file },
{ __LINE__, FALSE, FALSE, s_sys_bat_file },
{ __LINE__, FALSE, FALSE, s_win_bat_file, "TEST" },
{ __LINE__, FALSE, FALSE, s_sys_bat_file, "TEST" },
}
static char s_sys_test_exe[MAX_PATH]
#define TRUE
Definition: types.h:120
static char s_sys_bat_file[MAX_PATH]
#define FALSE
Definition: types.h:117
static char s_win_bat_file[MAX_PATH]
static char s_win_test_exe[MAX_PATH]

Definition at line 179 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_sub_program

char s_sub_program[MAX_PATH]
static

Definition at line 117 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries(), and GetSubProgramPath().

◆ s_sys_bat_file

char s_sys_bat_file[MAX_PATH]
static

Definition at line 121 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_sys_test_exe

char s_sys_test_exe[MAX_PATH]
static

Definition at line 119 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_sys_txt_file

char s_sys_txt_file[MAX_PATH]
static

Definition at line 123 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_wi0

OPENWNDS s_wi0 = { 0 }
static

Definition at line 198 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries(), and DoTestEntry().

◆ s_wi1

OPENWNDS s_wi1 = { 0 }
static

Definition at line 198 of file ShellExecuteEx.cpp.

Referenced by DoTestEntry().

◆ s_win_bat_file

char s_win_bat_file[MAX_PATH]
static

Definition at line 120 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_win_test_exe

char s_win_test_exe[MAX_PATH]
static

Definition at line 118 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().

◆ s_win_txt_file

char s_win_txt_file[MAX_PATH]
static

Definition at line 122 of file ShellExecuteEx.cpp.

Referenced by DoTestEntries().