3 * regexpl - Console Registry Explorer
5 * Copyright (C) 2000-2005 Nedko Arnaudov <nedko@users.sourceforge.net>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; see the file COPYING. If not, write to
19 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
23 // ShellCommandDOKA.cpp: implementation of the CShellCommandDOKA class.
25 //////////////////////////////////////////////////////////////////////
28 #include "ShellCommandDOKA.h"
29 #include "RegistryExplorer.h"
30 #include "SecurityDescriptor.h"
32 #define DOKA_CMD _T("DOKA")
33 #define DOKA_CMD_SHORT_DESC DOKA_CMD _T(" command is used to view/edit Desired Open Key Access.\n")
35 //////////////////////////////////////////////////////////////////////
36 // Construction/Destruction
37 //////////////////////////////////////////////////////////////////////
39 CShellCommandDOKA::CShellCommandDOKA(CRegistryTree
& rTree
):m_rTree(rTree
)
43 CShellCommandDOKA::~CShellCommandDOKA()
47 BOOL
CShellCommandDOKA::Match(const TCHAR
*pchCommand
)
49 return _tcsicmp(pchCommand
,DOKA_CMD
) == 0;
52 int CShellCommandDOKA::Execute(CConsole
&rConsole
, CArgumentParser
& rArguments
)
54 REGSAM Access
= m_rTree
.GetDesiredOpenKeyAccess();
55 const TCHAR
*pchParameter
;
56 BOOL blnBadParameter
= FALSE
;
59 while((pchParameter
= rArguments
.GetNextArgument()) != NULL
)
61 blnBadParameter
= FALSE
;
62 // Console.Write(_T("Processing parameter: \")");
63 // Console.Write(pchParameter);
64 // Console.Write(_T("\")\n");
65 if ((_tcsicmp(pchParameter
,_T("/?")) == 0)
66 ||(_tcsicmp(pchParameter
,_T("-?")) == 0))
70 else if (*pchParameter
== _T('-'))
72 TCHAR a
= *(pchParameter
+1);
79 if (*(pchParameter
+2) != 0)
81 blnBadParameter
= TRUE
;
87 case _T('l'): // KEY_CREATE_LINK
89 Access
&= ~KEY_CREATE_LINK
;
91 case _T('c'): // KEY_CREATE_SUB_KEY
93 Access
&= ~KEY_CREATE_SUB_KEY
;
95 case _T('e'): // KEY_ENUMERATE_SUB_KEYS
97 Access
&= ~KEY_ENUMERATE_SUB_KEYS
;
99 case _T('n'): // KEY_NOTIFY
101 Access
&= ~KEY_NOTIFY
;
103 case _T('q'): // KEY_QUERY_VALUE
105 Access
&= ~KEY_QUERY_VALUE
;
107 case _T('s'): // KEY_SET_VALUE
109 Access
&= ~KEY_SET_VALUE
;
112 blnBadParameter
= TRUE
;
114 } // else (*(pchParameter+2) != 0)
116 } // if (*pchParameter == _T('-'))
117 else if (*pchParameter
== _T('+'))
119 TCHAR a
= *(pchParameter
+1);
122 blnBadParameter
= TRUE
;
126 if (*(pchParameter
+2) != 0)
128 blnBadParameter
= TRUE
;
134 case _T('a'): // KEY_ALL_ACCESS
136 Access
|= KEY_ALL_ACCESS
;
138 case _T('l'): // KEY_CREATE_LINK
140 Access
|= KEY_CREATE_LINK
;
142 case _T('c'): // KEY_CREATE_SUB_KEY
144 Access
|= KEY_CREATE_SUB_KEY
;
146 case _T('e'): // KEY_ENUMERATE_SUB_KEYS
148 Access
|= KEY_ENUMERATE_SUB_KEYS
;
150 case _T('n'): // KEY_NOTIFY
152 Access
|= KEY_NOTIFY
;
154 case _T('q'): // KEY_QUERY_VALUE
156 Access
|= KEY_QUERY_VALUE
;
158 case _T('s'): // KEY_SET_VALUE
160 Access
|= KEY_SET_VALUE
;
162 // case _T('X'): // KEY_EXECUTE
164 // Access |= KEY_EXECUTE;
166 case _T('R'): // KEY_READ
171 blnBadParameter
= TRUE
;
173 } // else (*(pchParameter+2) != 0)
175 } // if (*pchParameter == _T('-'))
178 blnBadParameter
= TRUE
;
183 rConsole
.Write(_T("Bad parameter: "));
184 rConsole
.Write(pchParameter
);
185 rConsole
.Write(_T("\n"));
188 } // while((pchParameter = Parser.GetNextArgument()) != NULL)
192 rConsole
.Write(GetHelpString());
196 m_rTree
.SetDesiredOpenKeyAccess(Access
);
197 rConsole
.Write(_T("Desired open key access:\n"));
198 REGSAM Access
= m_rTree
.GetDesiredOpenKeyAccess();
199 if (Access
& KEY_CREATE_LINK
)
201 rConsole
.Write(_T("\tKEY_CREATE_LINK - Permission to create a symbolic link.\n"));
203 if (Access
& KEY_CREATE_SUB_KEY
)
205 rConsole
.Write(_T("\tKEY_CREATE_SUB_KEY - Permission to create subkeys.\n"));
207 if (Access
& KEY_ENUMERATE_SUB_KEYS
)
209 rConsole
.Write(_T("\tKEY_ENUMERATE_SUB_KEYS - Permission to enumerate subkeys.\n"));
211 if (Access
& KEY_NOTIFY
)
213 rConsole
.Write(_T("\tKEY_NOTIFY - Permission for change notification.\n"));
215 if (Access
& KEY_QUERY_VALUE
)
217 rConsole
.Write(_T("\tKEY_QUERY_VALUE - Permission to query subkey data.\n"));
219 if (Access
& KEY_SET_VALUE
)
221 rConsole
.Write(_T("\tKEY_SET_VALUE - Permission to set subkey data.\n"));
227 const TCHAR
* CShellCommandDOKA::GetHelpString()
229 return DOKA_CMD_SHORT_DESC
230 _T("Syntax: ") DOKA_CMD
_T(" [Switches] [/?]\n\n")
231 _T(" /? - This help.\n\n")
232 _T("Switches are:\n")
233 _T(" - - Reset all permisions.\n")
234 _T(" -l - Reset permission to create a symbolic link.\n")
235 _T(" -c - Reset permission to create subkeys.\n")
236 _T(" -e - Reset permission to enumerate subkeys.\n")
237 _T(" -n - Reset permission for change notification.\n")
238 _T(" -q - Reset permission to query subkey data.\n")
239 _T(" -s - Reset permission to set subkey data.\n")
240 _T(" +a - Set all permisions.\n")
241 _T(" +l - Set permission to create a symbolic link.\n")
242 _T(" +c - Set permission to create subkeys.\n")
243 _T(" +e - Set permission to enumerate subkeys.\n")
244 _T(" +n - Set permission for change notification.\n")
245 _T(" +q - Set permission to query subkey data.\n")
246 _T(" +s - Set permission to set subkey data.\n")
247 _T(" +r - Equivalent to combination of +q , +e and +n\n\n")
248 _T("Without parameters, command displays current Desired Open Key Access.\n");
251 const TCHAR
* CShellCommandDOKA::GetHelpShortDescriptionString()
253 return DOKA_CMD_SHORT_DESC
;