Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenprivileges.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
1.7.6.1
|