ReactOS  0.4.13-dev-249-gcba1a2f
RegistryExplorer.cpp File Reference
#include "ph.h"
#include "RegistryExplorer.h"
#include "Console.h"
#include "RegistryKey.h"
#include "RegistryTree.h"
#include "SecurityDescriptor.h"
#include "ArgumentParser.h"
#include "ShellCommandsLinkedList.h"
#include "ShellCommandExit.h"
#include "ShellCommandVersion.h"
#include "ShellCommandHelp.h"
#include "ShellCommandDir.h"
#include "ShellCommandChangeKey.h"
#include "ShellCommandValue.h"
#include "ShellCommandOwner.h"
#include "ShellCommandDACL.h"
#include "ShellCommandSACL.h"
#include "ShellCommandConnect.h"
#include "ShellCommandNewKey.h"
#include "ShellCommandDeleteKey.h"
#include "ShellCommandSetValue.h"
#include "ShellCommandDeleteValue.h"
#include "Prompt.h"
#include "Settings.h"
Include dependency graph for RegistryExplorer.cpp:

Go to the source code of this file.

Macros

#define INPUT_BUFFER_SIZE   1024
 

Functions

BOOL WINAPI HandlerRoutine (DWORD dwCtrlType)
 
int main ()
 

Variables

TCHAR pchCurrentKey [PROMPT_BUFFER_SIZE]
 
CRegistryTree Tree
 
CConsole Console
 
BOOL blnCommandExecutionInProgress = FALSE
 

Macro Definition Documentation

◆ INPUT_BUFFER_SIZE

#define INPUT_BUFFER_SIZE   1024

Function Documentation

◆ HandlerRoutine()

BOOL WINAPI HandlerRoutine ( DWORD  dwCtrlType)

Definition at line 58 of file RegistryExplorer.cpp.

59 {
60  switch(dwCtrlType)
61  {
62  case CTRL_C_EVENT:
63  case CTRL_BREAK_EVENT:
65  {
66 /* Beep(1000,100);
67  Beep(2000,100);
68  Beep(3000,100);
69  Beep(4000,100);
70  Beep(5000,100);
71  Beep(4000,100);
72  Beep(3000,100);
73  Beep(2000,100);
74  Beep(1000,100);*/
75  Console.Write(_T("\n"));
77  }
78  return TRUE;
79  default:
80  return FALSE;
81  }
82 }
void DisableWrite()
Definition: Console.cpp:1062
#define TRUE
Definition: types.h:120
#define CTRL_BREAK_EVENT
Definition: wincon.h:66
#define CTRL_C_EVENT
Definition: wincon.h:65
BOOL blnCommandExecutionInProgress
#define _T(x)
Definition: vfdio.h:22
BOOL Write(const TCHAR *p, DWORD dwChars=0)
Definition: Console.cpp:90
CConsole Console

Referenced by AddConsoleCtrlHandler(), main(), RemoveConsoleCtrlHandler(), and SetConsoleCtrlHandler().

◆ main()

int main ( void  )

Definition at line 85 of file RegistryExplorer.cpp.

86 {
87  int nRetCode = 0;
88 
89  HRESULT hr;
90 
91  CSettings *pSettings = NULL;
92  CPrompt *pPrompt = NULL;
93 
94  CShellCommandsLinkedList CommandsList(Console);
95 
96  CShellCommandExit ExitCommand;
97  CommandsList.AddCommand(&ExitCommand);
98 
99  CShellCommandVersion VersionCommand;
100  CommandsList.AddCommand(&VersionCommand);
101 
102  CShellCommandHelp HelpCommand(CommandsList);
103  CommandsList.AddCommand(&HelpCommand);
104 
105  CShellCommandDir DirCommand(Tree);
106  CommandsList.AddCommand(&DirCommand);
107 
108  CShellCommandChangeKey ChangeKeyCommand(Tree);
109  CommandsList.AddCommand(&ChangeKeyCommand);
110 
111  CShellCommandValue ValueCommand(Tree);
112  CommandsList.AddCommand(&ValueCommand);
113 
114  CShellCommandOwner OwnerCommand(Tree);
115  CommandsList.AddCommand(&OwnerCommand);
116 
117  CShellCommandDACL DACLCommand(Tree);
118  CommandsList.AddCommand(&DACLCommand);
119 
120  CShellCommandSACL SACLCommand(Tree);
121  CommandsList.AddCommand(&SACLCommand);
122 
123  CShellCommandConnect ConnectCommand(Tree);
124  CommandsList.AddCommand(&ConnectCommand);
125 
126  CShellCommandNewKey NewKeyCommand(Tree);
127  CommandsList.AddCommand(&NewKeyCommand);
128 
129  CShellCommandDeleteKey DeleteKeyCommand(Tree);
130  CommandsList.AddCommand(&DeleteKeyCommand);
131 
132  CShellCommandSetValue SetValueCommand(Tree);
133  CommandsList.AddCommand(&SetValueCommand);
134 
135  CShellCommandDeleteValue DeleteValueCommand(Tree);
136  CommandsList.AddCommand(&DeleteValueCommand);
137 
138  CArgumentParser Parser;
139 
140  pSettings = new (std::nothrow) CSettings();
141  if (!pSettings)
142  {
143  _ftprintf(stderr,_T("Cannot initialize settings. Out of memory.\n"));
144  goto Abort;
145  }
146 
147  hr = pSettings->Load(SETTINGS_REGISTRY_KEY);
148  if (FAILED(hr))
149  {
150  _ftprintf(stderr,_T("Cannot load settings. Error is 0x%X.\n"),(unsigned int)hr);
151  goto Abort;
152  }
153 
154  pPrompt = new (std::nothrow) CPrompt(Tree,hr);
155  if (!pPrompt)
156  {
157  _ftprintf(stderr,_T("Cannot initialize prompt. Out of memory.\n"));
158  goto Abort;
159  }
160 
161  if (FAILED(hr))
162  {
163  _ftprintf(stderr,_T("Cannot initialize prompt. Error is 0x%X.\n"),(unsigned int)hr);
164  goto Abort;
165  }
166 
167 // input buffer size in chars
168 #define INPUT_BUFFER_SIZE 1024
169 //#define INPUT_BUFFER_SIZE 128
170 //#define INPUT_BUFFER_SIZE 10
171 
172  TCHAR *pchCommand;
173 
174  pchCommand = Console.Init(INPUT_BUFFER_SIZE,10);
175  if (pchCommand == NULL)
176  {
177  _ftprintf(stderr,_T("Cannot initialize console.\n"));
178  nRetCode = 1;
179  goto Exit;
180  }
181 
183 
184  WORD wOldConsoleAttribute;
185  if (!Console.GetTextAttribute(wOldConsoleAttribute)) goto Abort;
186 
187  Console.SetTitle(_T("Registry Explorer"));
189 
191 
192  if (!Console.Write(HELLO_MSG
193  //(_L(__TIMESTAMP__))
194  )) goto Abort;
195 
196  //Tree.SetDesiredOpenKeyAccess(KEY_READ);
197 
198  hr = pPrompt->SetPrompt(pSettings->GetPrompt());
199  if (FAILED(hr))
200  {
201  _ftprintf(stderr,_T("Cannot initialize prompt. Error is 0x%X.\n"),(unsigned int)hr);
202  goto Abort;
203  }
204 
205 GetCommand:
206  // prompt
207  // TODO: make prompt user-customizable
209  pPrompt->ShowPrompt(Console);
211 
213 
214  // Set command line color
216  if (!Console.ReadLine())
217  goto Abort;
218 
219  // Set normal color
221 
224 
225  // Parse command line (1st step - convert to multi sz)
226  Parser.SetArgumentList(pchCommand);
227 
228  int nCommandReturnValue;
229  switch(CommandsList.Execute(Parser,nCommandReturnValue))
230  {
231  case -1: // not recognized command
232  {
233  Parser.ResetArgumentIteration();
234  TCHAR *pchCommandItself = Parser.GetNextArgument();
235  size_t cmdlen = _tcslen(pchCommandItself);
236  if ((!cmdlen)||
237  (pchCommandItself[cmdlen-1] != _T('\\'))||
238  (Parser.GetNextArgument())||
239  (!Tree.ChangeCurrentKey(pchCommandItself)))
240  {
241  Console.Write(_T("Unknown command \""));
242  Console.Write(pchCommandItself);
243  Console.Write(_T("\"\n"));
244  }
245  }
246  case -2: // empty line
247  goto GetCommand;
248  case 0: // exit command
249  nRetCode = 0;
250  Console.SetTextAttribute(wOldConsoleAttribute);
251  goto Exit;
252  default:
253  Console.Write(_T("\n"));
254  goto GetCommand;
255  }
256 
257 Abort:
258  _ftprintf(stderr,_T("Abnormal program termination.\nPlease report bugs to ") EMAIL _T("\n"));
259  nRetCode = 1;
260 
261 Exit:
262 
263  if (pSettings)
264  delete pSettings;
265 
266  if (pPrompt)
267  delete pPrompt;
268 
269  return nRetCode;
270 }
HRESULT SetPrompt(LPCTSTR pszPrompt)
Definition: Prompt.cpp:44
#define TRUE
Definition: types.h:120
BOOL ReadLine()
Definition: Console.cpp:249
void SetArgumentList(TCHAR *pchArguments)
HRESULT hr
Definition: shlfolder.c:183
void ShowPrompt(CConsole &rConsole)
Definition: Prompt.cpp:67
WORD GetCommandTextAttributes()
Definition: Settings.cpp:142
CRegistryTree Tree
void EnableWrite()
Definition: Console.cpp:1078
void BeginScrollingOperation()
Definition: Console.cpp:1005
BOOL SetTitle(const TCHAR *p)
Definition: Console.cpp:222
#define HELLO_MSG
BOOL SetTextAttribute(WORD wAttributes)
Definition: Console.cpp:227
BOOL ChangeCurrentKey(const TCHAR *pchRelativePath)
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add)
Definition: console.c:2111
TCHAR * GetNextArgument()
void ResetArgumentIteration()
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
BOOL blnCommandExecutionInProgress
LPCTSTR GetPrompt()
Definition: Settings.cpp:132
BOOL FlushInputBuffer()
Definition: Console.cpp:243
Definition: Prompt.h:7
#define _ftprintf
Definition: tchar.h:518
BOOL GetTextAttribute(WORD &rwAttributes)
Definition: Console.cpp:856
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
LONG HRESULT
Definition: typedefs.h:77
static void Exit(void)
Definition: sock.c:1331
#define INPUT_BUFFER_SIZE
unsigned short WORD
Definition: ntddk_ex.h:93
#define VERIFY(e)
Definition: ph.h:34
#define EMAIL
WORD GetNormalTextAttributes()
Definition: Settings.cpp:137
void SetReplaceCompletionCallback(ReplaceCompletionCallback pfCallback)
Definition: Console.cpp:1056
HRESULT Load(LPCTSTR pszLoadKey)
Definition: Settings.cpp:56
BOOL Write(const TCHAR *p, DWORD dwChars=0)
Definition: Console.cpp:90
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
TCHAR * Init(DWORD dwBufferSize, DWORD dwMaxHistoryLines=0)
Definition: Console.cpp:868
CConsole Console
#define SETTINGS_REGISTRY_KEY
FILE * stderr
const TCHAR * CompletionCallback(unsigned __int64 &rnIndex, const BOOL *pblnForward, const TCHAR *pszContext, const TCHAR *pszBegin)
Definition: Completion.cpp:439
BOOL(CALLBACK * PHANDLER_ROUTINE)(_In_ DWORD)
Definition: wincon.h:222

Variable Documentation

◆ blnCommandExecutionInProgress

BOOL blnCommandExecutionInProgress = FALSE

Definition at line 56 of file RegistryExplorer.cpp.

Referenced by HandlerRoutine(), and main().

◆ Console

CConsole Console

Definition at line 54 of file RegistryExplorer.cpp.

Referenced by AddInputEvents(), BfClearScreen(), BlDisplaySetScreenResolution(), ConDrvAttachTerminal(), ConDrvChangeScreenBufferAttributes(), ConDrvConsoleProcessCtrlEvent(), ConDrvCreateScreenBuffer(), ConDrvDeinitInputBuffer(), ConDrvDeleteConsole(), ConDrvDeleteScreenBuffer(), ConDrvDeregisterFrontEnd(), ConDrvDetachTerminal(), ConDrvFillConsoleOutput(), ConDrvFlushConsoleInputBuffer(), ConDrvGetActiveScreenBuffer(), ConDrvGetConsole(), ConDrvGetConsoleCP(), ConDrvGetConsoleCursorInfo(), ConDrvGetConsoleInput(), ConDrvGetConsoleMode(), ConDrvGetConsoleNumberOfInputEvents(), ConDrvGetConsoleProcessList(), ConDrvGetConsoleScreenBufferInfo(), ConDrvGetConsoleTitle(), ConDrvInitConsole(), ConDrvInitInputBuffer(), ConDrvInsertConsole(), ConDrvInvalidateBitMapRect(), ConDrvPause(), ConDrvProcessKey(), ConDrvReadConsole(), ConDrvReadConsoleOutput(), ConDrvReadConsoleOutputString(), ConDrvRegisterFrontEnd(), ConDrvReleaseConsole(), ConDrvScrollConsoleScreenBuffer(), ConDrvSetConsoleActiveScreenBuffer(), ConDrvSetConsoleCP(), ConDrvSetConsoleCursorInfo(), ConDrvSetConsoleCursorPosition(), ConDrvSetConsoleMode(), ConDrvSetConsolePalette(), ConDrvSetConsoleScreenBufferSize(), ConDrvSetConsoleTextAttribute(), ConDrvSetConsoleTitle(), ConDrvSetConsoleWindowInfo(), ConDrvUnpause(), ConDrvValidateConsole(), ConDrvValidateConsoleState(), ConDrvValidateConsoleUnsafe(), ConDrvWriteConsole(), ConDrvWriteConsoleInput(), ConDrvWriteConsoleOutput(), ConDrvWriteConsoleOutputString(), ConDrvWriteConsoleOutputVDM(), ConioAddInputEvents(), ConioDeleteScreenBuffer(), ConioDrawConsole(), ConioEffectiveCursorSize(), ConioInputEventToAnsi(), ConioInputEventToUnicode(), ConioPause(), ConioProcessInputEvent(), ConioProcessKey(), ConioResizeBuffer(), ConioSetActiveScreenBuffer(), ConioUnpause(), ConioWriteConsole(), CONSOLE_SCREEN_BUFFER_Initialize(), ConsoleFirmwareGraphicalClear(), ConsoleFirmwareTextClear(), ConsoleGraphicalClearPixels(), ConsoleGraphicalClearText(), ConsoleGraphicalDestruct(), ConsoleGraphicalEnable(), ConsoleGraphicalGetGraphicalResolution(), ConsoleGraphicalGetOriginalResolution(), ConsoleGraphicalIsEnabled(), ConsoleGraphicalReinitialize(), ConsoleGraphicalSetTextState(), ConsoleInputBaseConstruct(), ConsoleInputBaseEraseBuffer(), ConsoleInputBaseReinitialize(), ConsoleInputLocalDestruct(), ConsoleInputLocalEraseBuffer(), ConsoleTextLocalClearText(), ConsoleTextLocalSetTextState(), ConSrvAllocateConsole(), ConSrvApplyUserSettings(), ConSrvCloseHandle(), ConSrvConsoleProcessCtrlEvent(), ConSrvDeleteConsole(), ConSrvGetConsole(), ConSrvGetConsoleLeaderProcess(), ConSrvGetConsoleProcessList(), ConSrvInheritConsole(), ConSrvInitConsole(), ConSrvInitHandlesTable(), ConSrvInitObject(), ConSrvReleaseConsole(), ConSrvRemoveConsole(), ConSrvSetConsoleProcessFocus(), ConSrvTermInitTerminal(), ConSrvTermReadStream(), ConSrvValidateConsole(), ConvertInputAnsiToUnicode(), ConvertInputUnicodeToAnsi(), ConWndProc(), CreatePopupWindow(), CSR_API(), DoEcho(), DoLineMode(), DoLineModeSpecial(), DoWriteConsole(), GetThreadConsoleDesktop(), GRAPHICS_BUFFER_Initialize(), GuiApplyUserSettings(), GuiConsoleCopy(), GuiConsoleGetMinMaxInfo(), GuiConsoleHandleClose(), GuiConsoleHandleKey(), GuiConsoleHandleMouse(), GuiConsoleHandleNcCreate(), GuiConsoleHandlePaint(), GuiConsoleHandleScroll(), GuiConsoleHandleSysMenuCommand(), GuiConsoleHandleTimer(), GuiConsoleInputThread(), GuiConsoleNotifyWndProc(), GuiConsolePaste(), GuiConsoleResize(), GuiConsoleResizeWindow(), GuiConsoleShowConsoleProperties(), GuiConsoleSwitchFullScreen(), GuiConsoleUpdateSelection(), GuiConsoleWndProc(), GuiCopyFromTextModeBuffer(), GuiInitFrontEnd(), GuiPaintGraphicsBuffer(), GuiPaintTextModeBuffer(), GuiPasteToTextModeBuffer(), GuiSendMenuEvent(), HandlerRoutine(), HistoryAddEntry(), HistoryCurrentBuffer(), HistoryDeleteBuffers(), HistoryDeleteCurrentBuffer(), HistoryDisplayCurrentHistory(), HistoryFindBuffer(), HistoryFindEntryByPrefix(), HistoryGetCurrentEntry(), HistoryRecallHistory(), InsertConsole(), IntCreateAliasEntry(), IntCreateAliasHeader(), IntDeleteAllAliases(), IntFindAliasHeader(), IntGetAliasEntry(), LineInputEdit(), LineInputKeyDown(), LineInputRecallHistory(), LineInputSetPos(), main(), OnClose(), OnCommand(), OnDropFiles(), OnFocus(), OnGetMinMaxInfo(), OnKey(), OnMouse(), OnNcCreate(), OnScroll(), OnSize(), OnTimer(), PaletteRGBFromAttrib(), PasteText(), PointToCoord(), PostprocessInput(), PreprocessInput(), PurgeInputBuffer(), RemoveConsole(), RemoveConsoleByPointer(), ResetFrontEnd(), ResetTerminal(), SendMenuEvent(), SmallRectToRect(), SwitchFullScreen(), telProcessConsole(), TEXTMODE_BUFFER_Initialize(), UpdateSelection(), and WaitBeforeReading().

◆ pchCurrentKey

TCHAR pchCurrentKey[PROMPT_BUFFER_SIZE]

Definition at line 51 of file RegistryExplorer.cpp.

◆ Tree