ReactOS  0.4.15-dev-1386-g5cb9f87
imagefile.c File Reference
#include "gflags.h"
Include dependency graph for imagefile.c:

Go to the source code of this file.

Classes

struct  FlagInfo
 

Macros

#define FLG_DISABLE_DBGPRINT   0x8000000
 
#define FLG_CRITSEC_EVENT_CREATION   0x10000000
 
#define FLG_STOP_ON_UNHANDLED_EXCEPTION   0x20000000
 
#define FLG_ENABLE_HANDLE_EXCEPTIONS   0x40000000
 
#define FLG_DISABLE_PROTDLLS   0x80000000
 

Typedefs

typedef struct FlagInfo FlagInfo
 

Functions

void PrintFlags (IN DWORD GlobalFlags, IN OPTIONAL WORD Dest)
 
static void ShowStatus (DWORD GlobalFlags, DWORD Ignored)
 
static DWORD ValidateFlags (DWORD GlobalFlags, WORD Dest)
 
static DWORD FindFlag (PCWSTR Name, WORD Dest)
 
static VOID ModifyStatus (VOID)
 
static VOID DisplayStatus (VOID)
 
BOOL ImageFile_ParseCmdline (INT i, int argc, LPWSTR argv[])
 
INT ImageFile_Execute ()
 

Variables

static PWSTR ImageFile = NULL
 
static DWORD OptionsAdd = 0
 
static DWORD OptionsRemove = 0
 
static BOOL OptionsSet = FALSE
 
static const FlagInfo g_Flags []
 

Macro Definition Documentation

◆ FLG_CRITSEC_EVENT_CREATION

#define FLG_CRITSEC_EVENT_CREATION   0x10000000

Definition at line 24 of file imagefile.c.

◆ FLG_DISABLE_DBGPRINT

#define FLG_DISABLE_DBGPRINT   0x8000000

Definition at line 23 of file imagefile.c.

◆ FLG_DISABLE_PROTDLLS

#define FLG_DISABLE_PROTDLLS   0x80000000

Definition at line 27 of file imagefile.c.

◆ FLG_ENABLE_HANDLE_EXCEPTIONS

#define FLG_ENABLE_HANDLE_EXCEPTIONS   0x40000000

Definition at line 26 of file imagefile.c.

◆ FLG_STOP_ON_UNHANDLED_EXCEPTION

#define FLG_STOP_ON_UNHANDLED_EXCEPTION   0x20000000

Definition at line 25 of file imagefile.c.

Typedef Documentation

◆ FlagInfo

Function Documentation

◆ DisplayStatus()

static VOID DisplayStatus ( VOID  )
static

Definition at line 190 of file imagefile.c.

191 {
192  HKEY IFEOKey;
194 
196  {
197  return;
198  }
199 
200  GlobalFlags = ReadSZFlagsFromRegistry(IFEOKey, L"GlobalFlag");
202 
203  CloseHandle(IFEOKey);
204 }
static PWSTR ImageFile
Definition: imagefile.c:10
#define CloseHandle
Definition: compat.h:598
#define KEY_READ
Definition: nt_native.h:1023
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
static void ShowStatus(DWORD GlobalFlags, DWORD Ignored)
Definition: imagefile.c:83
BOOL OpenImageFileExecOptions(IN REGSAM SamDesired, IN OPTIONAL PCWSTR ImageName, OUT HKEY *Key)
Definition: gflags.c:16
DWORD ReadSZFlagsFromRegistry(HKEY SubKey, PWSTR Value)
Definition: gflags.c:47
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250

Referenced by ImageFile_Execute().

◆ FindFlag()

static DWORD FindFlag ( PCWSTR  Name,
WORD  Dest 
)
static

Definition at line 117 of file imagefile.c.

118 {
119  DWORD n;
120 
121  for (n = 0; n < ARRAYSIZE(g_Flags); ++n)
122  {
123  if (g_Flags[n].wDest & Dest)
124  {
125  if (!wcsicmp(Name, g_Flags[n].szAbbr))
126  {
127  return g_Flags[n].dwFlag;
128  }
129  }
130  }
131 
132  return 0;
133 }
DWORD dwFlag
Definition: imagefile.c:17
GLdouble n
Definition: glext.h:7729
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
unsigned long DWORD
Definition: ntddk_ex.h:95
#define wcsicmp
Definition: compat.h:15
static const FlagInfo g_Flags[]
Definition: imagefile.c:30

Referenced by ImageFile_ParseCmdline().

◆ ImageFile_Execute()

INT ImageFile_Execute ( )

Definition at line 251 of file imagefile.c.

252 {
253  if (!OptionsAdd && !OptionsRemove && !OptionsSet)
254  {
255  DisplayStatus();
256  }
257  else
258  {
259  ModifyStatus();
260  }
261 
262  return 0;
263 }
static BOOL OptionsSet
Definition: imagefile.c:13
static VOID DisplayStatus(VOID)
Definition: imagefile.c:190
static DWORD OptionsRemove
Definition: imagefile.c:12
static VOID ModifyStatus(VOID)
Definition: imagefile.c:135
static DWORD OptionsAdd
Definition: imagefile.c:11

Referenced by wmain().

◆ ImageFile_ParseCmdline()

BOOL ImageFile_ParseCmdline ( INT  i,
int  argc,
LPWSTR  argv[] 
)

Definition at line 207 of file imagefile.c.

208 {
209  for (; i < argc; i++)
210  {
211  if (ImageFile == NULL)
212  {
213  ImageFile = argv[i];
214  }
215  else if (argv[i][0] == '+')
216  {
217  if (OptionsSet)
218  {
219  wprintf(L"Unexpected argument - '%s'\n", argv[i]);
220  return FALSE;
221  }
222  OptionsAdd |= FindFlag(argv[i] + 1, DEST_IMAGE);
223  }
224  else if (argv[i][0] == '-')
225  {
226  if (OptionsSet)
227  {
228  wprintf(L"Unexpected argument - '%s'\n", argv[i]);
229  return FALSE;
230  }
232  }
233  else
234  {
235  OptionsSet = TRUE;
236  OptionsAdd = wcstoul(argv[i], NULL, 16);
237  if (OptionsAdd == ~0)
238  OptionsAdd = 0;
239  }
240  }
241 
242  if (ImageFile == NULL)
243  {
244  wprintf(L"No Image specified\n");
245  return FALSE;
246  }
247 
248  return TRUE;
249 }
static PWSTR ImageFile
Definition: imagefile.c:10
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
static BOOL OptionsSet
Definition: imagefile.c:13
static DWORD FindFlag(PCWSTR Name, WORD Dest)
Definition: imagefile.c:117
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define wprintf(...)
Definition: whoami.c:18
#define argv
Definition: mplay32.c:18
#define FALSE
Definition: types.h:117
static DWORD OptionsRemove
Definition: imagefile.c:12
#define DEST_IMAGE
Definition: gflags.h:35
static const WCHAR L[]
Definition: oid.c:1250
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NULL
Definition: types.h:112
static DWORD OptionsAdd
Definition: imagefile.c:11

Referenced by ParseCmdline().

◆ ModifyStatus()

static VOID ModifyStatus ( VOID  )
static

Definition at line 135 of file imagefile.c.

136 {
137  LONG Ret;
138  DWORD GlobalFlags, Requested, Ignored;
139  HKEY IFEOKey;
140  WCHAR Buffer[11];
141 
143  {
144  return;
145  }
146 
147  if (OptionsSet)
148  {
149  Requested = OptionsAdd;
150  }
151  else
152  {
153  Requested = ReadSZFlagsFromRegistry(IFEOKey, L"GlobalFlag");
154  Requested &= ~OptionsRemove;
155  Requested |= OptionsAdd;
156  }
157 
158  GlobalFlags = ValidateFlags(Requested, DEST_IMAGE);
159  Ignored = GlobalFlags ^ Requested;
160 
161  if (GlobalFlags)
162  {
163  wsprintf(Buffer, L"0x%08x", GlobalFlags);
164  Ret = RegSetValueExW(IFEOKey, L"GlobalFlag", 0, REG_SZ, (BYTE*)Buffer, (wcslen(Buffer) + 1) * sizeof(WCHAR));
165  if (Ret != ERROR_SUCCESS)
166  {
167  wprintf(L"MS: RegSetValueEx failed (%d)\n", Ret);
168  }
169  else
170  {
171  ShowStatus(GlobalFlags, Ignored);
172  }
173  }
174  else
175  {
176  Ret = RegDeleteValueW(IFEOKey, L"GlobalFlag");
177  if (Ret != ERROR_SUCCESS)
178  {
179  wprintf(L"MS: RegDeleteValue failed (%d)\n", Ret);
180  }
181  else
182  {
183  ShowStatus(GlobalFlags, Ignored);
184  }
185  }
186  CloseHandle(IFEOKey);
187 }
static PWSTR ImageFile
Definition: imagefile.c:10
#define CloseHandle
Definition: compat.h:598
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
static BOOL OptionsSet
Definition: imagefile.c:13
#define wprintf(...)
Definition: whoami.c:18
static void ShowStatus(DWORD GlobalFlags, DWORD Ignored)
Definition: imagefile.c:83
long LONG
Definition: pedump.c:60
Definition: bufpool.h:45
BOOL OpenImageFileExecOptions(IN REGSAM SamDesired, IN OPTIONAL PCWSTR ImageName, OUT HKEY *Key)
Definition: gflags.c:16
#define KEY_WRITE
Definition: nt_native.h:1031
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD OptionsRemove
Definition: imagefile.c:12
DWORD ReadSZFlagsFromRegistry(HKEY SubKey, PWSTR Value)
Definition: gflags.c:47
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DEST_IMAGE
Definition: gflags.h:35
static const WCHAR L[]
Definition: oid.c:1250
unsigned char BYTE
Definition: xxhash.c:193
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
Definition: reg.c:2355
static DWORD ValidateFlags(DWORD GlobalFlags, WORD Dest)
Definition: imagefile.c:101
#define wsprintf
Definition: winuser.h:5840
static DWORD OptionsAdd
Definition: imagefile.c:11
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define REG_SZ
Definition: layer.c:22

Referenced by ImageFile_Execute().

◆ PrintFlags()

void PrintFlags ( IN DWORD  GlobalFlags,
IN OPTIONAL WORD  Dest 
)

Definition at line 67 of file imagefile.c.

68 {
69  DWORD n;
70 
71  for (n = 0; n < ARRAYSIZE(g_Flags); ++n)
72  {
73  if (!Dest || (g_Flags[n].wDest & Dest))
74  {
75  if (g_Flags[n].dwFlag & GlobalFlags)
76  {
77  wprintf(L" %s - %s\n", g_Flags[n].szAbbr, g_Flags[n].szDesc);
78  }
79  }
80  }
81 }
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
GLdouble n
Definition: glext.h:7729
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define wprintf(...)
Definition: whoami.c:18
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
static const FlagInfo g_Flags[]
Definition: imagefile.c:30

Referenced by ShowStatus(), and wmain().

◆ ShowStatus()

static void ShowStatus ( DWORD  GlobalFlags,
DWORD  Ignored 
)
static

Definition at line 83 of file imagefile.c.

84 {
85  if (GlobalFlags)
86  {
87  wprintf(L"Current Registry Settings for %s executable are: %08x\n", ImageFile, GlobalFlags);
89  }
90  else
91  {
92  wprintf(L"No Registry Settings for %s executable\n", ImageFile);
93  }
94  if (Ignored)
95  {
96  wprintf(L"The following settings were ignored: %08x\n", Ignored);
97  PrintFlags(Ignored, 0);
98  }
99 }
static PWSTR ImageFile
Definition: imagefile.c:10
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
#define wprintf(...)
Definition: whoami.c:18
void PrintFlags(IN DWORD GlobalFlags, IN OPTIONAL WORD Dest)
Definition: imagefile.c:67
static const WCHAR L[]
Definition: oid.c:1250

Referenced by DisplayStatus(), and ModifyStatus().

◆ ValidateFlags()

static DWORD ValidateFlags ( DWORD  GlobalFlags,
WORD  Dest 
)
static

Definition at line 101 of file imagefile.c.

102 {
103  DWORD n;
104  DWORD Valid = 0;
105 
106  for (n = 0; n < ARRAYSIZE(g_Flags); ++n)
107  {
108  if (g_Flags[n].wDest & Dest)
109  {
110  Valid |= g_Flags[n].dwFlag;
111  }
112  }
113 
114  return GlobalFlags & Valid;
115 }
DWORD dwFlag
Definition: imagefile.c:17
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
GLdouble n
Definition: glext.h:7729
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
unsigned long DWORD
Definition: ntddk_ex.h:95
static const FlagInfo g_Flags[]
Definition: imagefile.c:30

Referenced by ModifyStatus().

Variable Documentation

◆ g_Flags

const FlagInfo g_Flags[]
static

Definition at line 30 of file imagefile.c.

Referenced by FindFlag(), PrintFlags(), and ValidateFlags().

◆ ImageFile

◆ OptionsAdd

DWORD OptionsAdd = 0
static

Definition at line 11 of file imagefile.c.

Referenced by ImageFile_Execute(), ImageFile_ParseCmdline(), and ModifyStatus().

◆ OptionsRemove

DWORD OptionsRemove = 0
static

Definition at line 12 of file imagefile.c.

Referenced by ImageFile_Execute(), ImageFile_ParseCmdline(), and ModifyStatus().

◆ OptionsSet

BOOL OptionsSet = FALSE
static

Definition at line 13 of file imagefile.c.

Referenced by ImageFile_Execute(), ImageFile_ParseCmdline(), and ModifyStatus().