ReactOS  0.4.14-dev-98-gb0d4763
CShellCommandOwner Class Reference

#include <ShellCommandOwner.h>

Inheritance diagram for CShellCommandOwner:
Collaboration diagram for CShellCommandOwner:

Public Member Functions

 CShellCommandOwner (CRegistryTree &rTree)
 
virtual ~CShellCommandOwner ()
 
virtual BOOL Match (const TCHAR *pchCommand)
 
virtual int Execute (CConsole &rConsole, CArgumentParser &rArguments)
 
virtual const TCHARGetHelpString ()
 
virtual const TCHARGetHelpShortDescriptionString ()
 
- Public Member Functions inherited from CShellCommand
 CShellCommand ()
 
virtual ~CShellCommand ()
 

Private Attributes

CRegistryTreem_rTree
 

Detailed Description

Definition at line 12 of file ShellCommandOwner.h.

Constructor & Destructor Documentation

◆ CShellCommandOwner()

CShellCommandOwner::CShellCommandOwner ( CRegistryTree rTree)

Definition at line 39 of file ShellCommandOwner.cpp.

39  :m_rTree(rTree)
40 {
41 }
CRegistryTree & m_rTree

◆ ~CShellCommandOwner()

CShellCommandOwner::~CShellCommandOwner ( )
virtual

Definition at line 43 of file ShellCommandOwner.cpp.

44 {
45 }

Member Function Documentation

◆ Execute()

int CShellCommandOwner::Execute ( CConsole rConsole,
CArgumentParser rArguments 
)
virtual

Implements CShellCommand.

Definition at line 60 of file ShellCommandOwner.cpp.

61 {
62  const TCHAR *pchKey = NULL;
63  BOOL blnDo = TRUE;
64  BOOL blnBadParameter = FALSE;
65  BOOL blnHelp = FALSE;
66  const TCHAR *pchParameter;
67  DWORD dwError;
68 
69  rArguments.ResetArgumentIteration();
70  const TCHAR *pchCommandItself = rArguments.GetNextArgument();
71 
72  if ((_tcsnicmp(pchCommandItself,OWNER_CMD _T(".."),OWNER_CMD_LENGTH+2*sizeof(TCHAR)) == 0)||
73  (_tcsnicmp(pchCommandItself,OWNER_CMD _T("\\"),OWNER_CMD_LENGTH+1*sizeof(TCHAR)) == 0))
74  {
75  pchKey = pchCommandItself + OWNER_CMD_LENGTH;
76  }
77  else if (_tcsnicmp(pchCommandItself,OWNER_CMD _T("/"),OWNER_CMD_LENGTH+1*sizeof(TCHAR)) == 0)
78  {
79  pchParameter = pchCommandItself + OWNER_CMD_LENGTH;
80  goto CheckOwnerArgument;
81  }
82 
83  while((pchParameter = rArguments.GetNextArgument()) != NULL)
84  {
85 CheckOwnerArgument:
86  blnBadParameter = FALSE;
87  if ((_tcsicmp(pchParameter,_T("/?")) == 0)
88  ||(_tcsicmp(pchParameter,_T("-?")) == 0))
89  {
90  blnHelp = TRUE;
91  blnDo = pchKey != NULL;
92  }
93  else if (!pchKey)
94  {
95  pchKey = pchParameter;
96  blnDo = TRUE;
97  }
98  else
99  {
100  blnBadParameter = TRUE;
101  }
102  if (blnBadParameter)
103  {
104  rConsole.Write(_T("Bad parameter: "));
105  rConsole.Write(pchParameter);
106  rConsole.Write(_T("\n"));
107  }
108  }
109 
111 
112  if (!m_rTree.GetKey(pchKey?pchKey:_T("."),KEY_QUERY_VALUE|READ_CONTROL,Key))
113  {
115  blnDo = FALSE;
116  }
117 
118  if (blnHelp)
119  {
120  rConsole.Write(GetHelpString());
121  }
122 
123  if (blnDo&&blnHelp) rConsole.Write(_T("\n"));
124 
125  if (!blnDo)
126  return 0;
127 
128  if (Key.IsRoot())
129  { // root key
131  return 0;
132  }
133 
134  PISECURITY_DESCRIPTOR pSecurityDescriptor = NULL;
135  TCHAR *pchName = NULL, *pchDomainName = NULL;
136  try
137  {
138  DWORD dwSecurityDescriptorLength;
139  rConsole.Write(_T("Key : "));
140  rConsole.Write(_T("\\"));
141  rConsole.Write(Key.GetKeyName());
142  rConsole.Write(_T("\n"));
143  dwError = Key.GetSecurityDescriptorLength(&dwSecurityDescriptorLength);
144  if (dwError != ERROR_SUCCESS) throw dwError;
145 
146  pSecurityDescriptor = (PISECURITY_DESCRIPTOR) new unsigned char [dwSecurityDescriptorLength];
147  DWORD dwSecurityDescriptorLength1 = dwSecurityDescriptorLength;
148  dwError = Key.GetSecurityDescriptor((SECURITY_INFORMATION)OWNER_SECURITY_INFORMATION,pSecurityDescriptor,&dwSecurityDescriptorLength1);
149  if (dwError != ERROR_SUCCESS) throw dwError;
150  PSID psidOwner;
151  BOOL blnOwnerDefaulted;
152  if (!GetSecurityDescriptorOwner(pSecurityDescriptor,&psidOwner,&blnOwnerDefaulted))
153  throw GetLastError();
154  if (psidOwner == NULL)
155  {
156  rConsole.Write(_T("Key has no owner."));
157  }
158  else
159  {
160  if (!IsValidSid(psidOwner))
161  {
162  rConsole.Write(_T("Key has invalid owner SID."));
163  }
164  else
165  {
166  rConsole.Write(_T("Key Owner: \n"));
167  DWORD dwSIDStringSize = 0;
168  BOOL blnRet = GetTextualSid(psidOwner,NULL,&dwSIDStringSize);
169  ASSERT(!blnRet);
171  TCHAR *pchSID = new TCHAR[dwSIDStringSize];
172  if(!GetTextualSid(psidOwner,pchSID,&dwSIDStringSize))
173  {
174  dwError = GetLastError();
175  ASSERT(dwError != ERROR_INSUFFICIENT_BUFFER);
176  rConsole.Write(_T("Error "));
177  TCHAR Buffer[256];
178  rConsole.Write(_itoa(dwError,Buffer,10));
179  rConsole.Write(_T("\nGetting string representation of SID\n"));
180  }
181  else
182  {
183  rConsole.Write(_T("\tSID: "));
184  rConsole.Write(pchSID);
185  rConsole.Write(_T("\n"));
186  }
187  delete [] pchSID;
188  DWORD dwNameBufferLength, dwDomainNameBufferLength;
189  dwNameBufferLength = 1024;
190  dwDomainNameBufferLength = 1024;
191  pchName = new TCHAR [dwNameBufferLength];
192  pchDomainName = new TCHAR [dwDomainNameBufferLength];
193  DWORD dwNameLength = dwNameBufferLength, dwDomainNameLength = dwDomainNameBufferLength;
194  SID_NAME_USE Use;
195  if (!LookupAccountSid(NULL,psidOwner,pchName,&dwNameLength,pchDomainName,&dwDomainNameLength,&Use))
196  throw GetLastError();
197  else
198  {
199  rConsole.Write(_T("\tOwner Domain: "));
200  rConsole.Write(pchDomainName);
201  rConsole.Write(_T("\n"));
202  rConsole.Write(_T("\tOwner Name: "));
203  rConsole.Write(pchName);
204  rConsole.Write(_T("\n\tSID type: "));
205  rConsole.Write(GetSidTypeName(Use));
206  rConsole.Write(_T("\n"));
207  rConsole.Write(_T("\tOwner defaulted: "));
208  rConsole.Write(blnOwnerDefaulted?_T("Yes"):_T("No"));
209  rConsole.Write(_T("\n"));
210  }
211  delete [] pchName;
212  pchName = NULL;
213  delete [] pchDomainName;
214  pchDomainName = NULL;
215 
216  }
217  }
218  delete [] pSecurityDescriptor;
219  }
220  catch (DWORD dwError)
221  {
222  rConsole.Write(_T("Error "));
223  TCHAR Buffer[256];
224  rConsole.Write(_itoa(dwError,Buffer,10));
225  rConsole.Write(_T("\n"));
226  if (pchName) delete [] pchName;
227  if (pchDomainName) delete [] pchDomainName;
228  if (pSecurityDescriptor) delete [] pSecurityDescriptor;
229  }
230 
231  return 0;
232 }
#define TRUE
Definition: types.h:120
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG Key
Definition: fatprocs.h:2697
enum _SID_NAME_USE SID_NAME_USE
#define ERROR_SUCCESS
Definition: deptool.c:10
#define _tcsicmp
Definition: xmlstorage.h:205
virtual const TCHAR * GetHelpString()
#define OWNER_CMD
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define LookupAccountSid
Definition: winbase.h:3691
BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSID *pOwner, LPBOOL lpbOwnerDefaulted)
Definition: sec.c:103
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL GetKey(const TCHAR *pchRelativePath, REGSAM DesiredAccess, CRegistryKey &rKey)
DWORD SECURITY_INFORMATION
Definition: ms-dtyp.idl:311
#define _tcsnicmp
Definition: xmlstorage.h:207
TCHAR * GetNextArgument()
void ResetArgumentIteration()
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
#define OWNER_CMD_LENGTH
_CRTIMP char *__cdecl _itoa(_In_ int _Value, _Pre_notnull_ _Post_z_ char *_Dest, _In_ int _Radix)
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
unsigned long DWORD
Definition: ntddk_ex.h:95
#define READ_CONTROL
Definition: nt_native.h:58
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
const TCHAR * GetLastErrorDescription()
BOOL GetTextualSid(PSID pSid, LPTSTR TextualSid, LPDWORD lpdwBufferLen)
#define COMMAND_NA_ON_ROOT
BOOL Write(const TCHAR *p, DWORD dwChars=0)
Definition: Console.cpp:90
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define OWNER_SECURITY_INFORMATION
Definition: setypes.h:123
BOOL WINAPI IsValidSid(PSID pSid)
Definition: security.c:698
CRegistryTree & m_rTree
const TCHAR * GetSidTypeName(SID_NAME_USE Use)
struct _SECURITY_DESCRIPTOR * PISECURITY_DESCRIPTOR
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

◆ GetHelpShortDescriptionString()

const TCHAR * CShellCommandOwner::GetHelpShortDescriptionString ( )
virtual

Implements CShellCommand.

Definition at line 243 of file ShellCommandOwner.cpp.

244 {
245  return OWNER_CMD_SHORT_DESC;
246 }
#define OWNER_CMD_SHORT_DESC

◆ GetHelpString()

const TCHAR * CShellCommandOwner::GetHelpString ( )
virtual

Implements CShellCommand.

Definition at line 234 of file ShellCommandOwner.cpp.

235 {
236  return OWNER_CMD_SHORT_DESC
237  _T("Syntax: ") OWNER_CMD _T(" [<KEY>] [/?]\n\n")
238  _T(" <KEY> - Optional relative path of desired key.\n")
239  _T(" /? - This help.\n\n")
240  _T("Without parameters, command displays information about owner of current key.\n");
241 }
#define OWNER_CMD
int desired
Definition: jpeglib.h:1116
GLdouble n
Definition: glext.h:7729
#define OWNER_CMD_SHORT_DESC
#define _T(x)
Definition: vfdio.h:22
Definition: btrfs.h:126
Definition: services.c:325
static PDB_INFORMATION information
Definition: db.cpp:176
int about
Definition: msacm.c:1353
int help
Definition: sort.c:20
struct task_struct * current
Definition: linux.c:32
Definition: path.c:42

Referenced by Execute().

◆ Match()

BOOL CShellCommandOwner::Match ( const TCHAR pchCommand)
virtual

Implements CShellCommand.

Definition at line 47 of file ShellCommandOwner.cpp.

48 {
49  if (_tcsicmp(pchCommand,OWNER_CMD) == 0)
50  return TRUE;
51  if (_tcsnicmp(pchCommand,OWNER_CMD _T(".."),OWNER_CMD_LENGTH+2*sizeof(TCHAR)) == 0)
52  return TRUE;
53  if (_tcsnicmp(pchCommand,OWNER_CMD _T("/") ,OWNER_CMD_LENGTH+1*sizeof(TCHAR)) == 0)
54  return TRUE;
55  if (_tcsnicmp(pchCommand,OWNER_CMD _T("\\"),OWNER_CMD_LENGTH+1*sizeof(TCHAR)) == 0)
56  return TRUE;
57  return FALSE;
58 }
#define TRUE
Definition: types.h:120
#define _tcsicmp
Definition: xmlstorage.h:205
#define OWNER_CMD
#define _tcsnicmp
Definition: xmlstorage.h:207
#define OWNER_CMD_LENGTH
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22

Member Data Documentation

◆ m_rTree

CRegistryTree& CShellCommandOwner::m_rTree
private

Definition at line 22 of file ShellCommandOwner.h.

Referenced by Execute().


The documentation for this class was generated from the following files: