ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

privileges.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         Local Security Authority (LSA) Server
00004  * FILE:            reactos/dll/win32/lsasrv/privileges.c
00005  * PURPOSE:         Privilege lookup functions
00006  *
00007  * PROGRAMMERS:     Eric Kohl
00008  */
00009 
00010 #include "lsasrv.h"
00011 
00012 
00013 typedef struct
00014 {
00015     LUID Luid;
00016     LPCWSTR Name;
00017 } PRIVILEGE_DATA;
00018 
00019 
00020 static const PRIVILEGE_DATA WellKnownPrivileges[] =
00021 {
00022     {{SE_CREATE_TOKEN_PRIVILEGE, 0}, SE_CREATE_TOKEN_NAME},
00023     {{SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, 0}, SE_ASSIGNPRIMARYTOKEN_NAME},
00024     {{SE_LOCK_MEMORY_PRIVILEGE, 0}, SE_LOCK_MEMORY_NAME},
00025     {{SE_INCREASE_QUOTA_PRIVILEGE, 0}, SE_INCREASE_QUOTA_NAME},
00026     {{SE_MACHINE_ACCOUNT_PRIVILEGE, 0}, SE_MACHINE_ACCOUNT_NAME},
00027     {{SE_TCB_PRIVILEGE, 0}, SE_TCB_NAME},
00028     {{SE_SECURITY_PRIVILEGE, 0}, SE_SECURITY_NAME},
00029     {{SE_TAKE_OWNERSHIP_PRIVILEGE, 0}, SE_TAKE_OWNERSHIP_NAME},
00030     {{SE_LOAD_DRIVER_PRIVILEGE, 0}, SE_LOAD_DRIVER_NAME},
00031     {{SE_SYSTEM_PROFILE_PRIVILEGE, 0}, SE_SYSTEM_PROFILE_NAME},
00032     {{SE_SYSTEMTIME_PRIVILEGE, 0}, SE_SYSTEMTIME_NAME},
00033     {{SE_PROF_SINGLE_PROCESS_PRIVILEGE, 0}, SE_PROF_SINGLE_PROCESS_NAME},
00034     {{SE_INC_BASE_PRIORITY_PRIVILEGE, 0}, SE_INC_BASE_PRIORITY_NAME},
00035     {{SE_CREATE_PAGEFILE_PRIVILEGE, 0}, SE_CREATE_PAGEFILE_NAME},
00036     {{SE_CREATE_PERMANENT_PRIVILEGE, 0}, SE_CREATE_PERMANENT_NAME},
00037     {{SE_BACKUP_PRIVILEGE, 0}, SE_BACKUP_NAME},
00038     {{SE_RESTORE_PRIVILEGE, 0}, SE_RESTORE_NAME},
00039     {{SE_SHUTDOWN_PRIVILEGE, 0}, SE_SHUTDOWN_NAME},
00040     {{SE_DEBUG_PRIVILEGE, 0}, SE_DEBUG_NAME},
00041     {{SE_AUDIT_PRIVILEGE, 0}, SE_AUDIT_NAME},
00042     {{SE_SYSTEM_ENVIRONMENT_PRIVILEGE, 0}, SE_SYSTEM_ENVIRONMENT_NAME},
00043     {{SE_CHANGE_NOTIFY_PRIVILEGE, 0}, SE_CHANGE_NOTIFY_NAME},
00044     {{SE_REMOTE_SHUTDOWN_PRIVILEGE, 0}, SE_REMOTE_SHUTDOWN_NAME},
00045     {{SE_UNDOCK_PRIVILEGE, 0}, SE_UNDOCK_NAME},
00046     {{SE_SYNC_AGENT_PRIVILEGE, 0}, SE_SYNC_AGENT_NAME},
00047     {{SE_ENABLE_DELEGATION_PRIVILEGE, 0}, SE_ENABLE_DELEGATION_NAME},
00048     {{SE_MANAGE_VOLUME_PRIVILEGE, 0}, SE_MANAGE_VOLUME_NAME},
00049     {{SE_IMPERSONATE_PRIVILEGE, 0}, SE_IMPERSONATE_NAME},
00050     {{SE_CREATE_GLOBAL_PRIVILEGE, 0}, SE_CREATE_GLOBAL_NAME}
00051 };
00052 
00053 
00054 /* FUNCTIONS ***************************************************************/
00055 
00056 NTSTATUS
00057 LsarpLookupPrivilegeName(PLUID Value,
00058                          PUNICODE_STRING *Name)
00059 {
00060     PUNICODE_STRING NameBuffer;
00061     ULONG Priv;
00062 
00063     if (Value->HighPart != 0 ||
00064         (Value->LowPart < SE_MIN_WELL_KNOWN_PRIVILEGE ||
00065          Value->LowPart > SE_MAX_WELL_KNOWN_PRIVILEGE))
00066     {
00067         return STATUS_NO_SUCH_PRIVILEGE;
00068     }
00069 
00070     for (Priv = 0; Priv < sizeof(WellKnownPrivileges) / sizeof(WellKnownPrivileges[0]); Priv++)
00071     {
00072         if (Value->LowPart == WellKnownPrivileges[Priv].Luid.LowPart &&
00073             Value->HighPart == WellKnownPrivileges[Priv].Luid.HighPart)
00074         {
00075             NameBuffer = MIDL_user_allocate(sizeof(UNICODE_STRING));
00076             if (NameBuffer == NULL)
00077                 return STATUS_NO_MEMORY;
00078 
00079             NameBuffer->Length = wcslen(WellKnownPrivileges[Priv].Name) * sizeof(WCHAR);
00080             NameBuffer->MaximumLength = NameBuffer->Length + sizeof(WCHAR);
00081 
00082             NameBuffer->Buffer = MIDL_user_allocate(NameBuffer->MaximumLength);
00083             if (NameBuffer == NULL)
00084             {
00085                 MIDL_user_free(NameBuffer);
00086                 return STATUS_NO_MEMORY;
00087             }
00088 
00089             wcscpy(NameBuffer->Buffer, WellKnownPrivileges[Priv].Name);
00090 
00091             *Name = NameBuffer;
00092 
00093             return STATUS_SUCCESS;
00094         }
00095     }
00096 
00097     return STATUS_NO_SUCH_PRIVILEGE;
00098 }
00099 
00100 
00101 NTSTATUS
00102 LsarpLookupPrivilegeValue(PUNICODE_STRING Name,
00103                           PLUID Value)
00104 {
00105     ULONG Priv;
00106 
00107     if (Name->Length == 0 || Name->Buffer == NULL)
00108         return STATUS_NO_SUCH_PRIVILEGE;
00109 
00110     for (Priv = 0; Priv < sizeof(WellKnownPrivileges) / sizeof(WellKnownPrivileges[0]); Priv++)
00111     {
00112         if (_wcsicmp(Name->Buffer, WellKnownPrivileges[Priv].Name) == 0)
00113         {
00114 //            Value->LowPart = WellKnownPrivileges[Priv].Luid.LowPart;
00115 //            Value->HighPart = WellKnownPrivileges[Priv].Luid.HighPart;
00116             *Value = WellKnownPrivileges[Priv].Luid;
00117             return STATUS_SUCCESS;
00118         }
00119     }
00120 
00121     return STATUS_NO_SUCH_PRIVILEGE;
00122 }

Generated on Fri May 25 2012 04:22:42 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.