Implement RtlImpersonateSelf, RevertToSelf and MapGenericMask.
This commit is contained in:
parent
433f72f8b2
commit
9cb94b276f
|
@ -1770,23 +1770,40 @@ NotifyBootConfigStatus( DWORD x1 )
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* RevertToSelf [ADVAPI32.@]
|
* RevertToSelf [ADVAPI32.@]
|
||||||
*
|
*
|
||||||
|
* Ends the impersonation of a user.
|
||||||
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* void []
|
* void []
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: TRUE.
|
||||||
|
* Failure: FALSE.
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
RevertToSelf( void )
|
RevertToSelf( void )
|
||||||
{
|
{
|
||||||
FIXME("(), stub\n");
|
HANDLE Token = NULL;
|
||||||
return TRUE;
|
return set_ntstatus( NtSetInformationThread( GetCurrentThread(),
|
||||||
|
ThreadImpersonationToken, &Token, sizeof(Token) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* ImpersonateSelf [ADVAPI32.@]
|
* ImpersonateSelf [ADVAPI32.@]
|
||||||
|
*
|
||||||
|
* Makes an impersonation token that represents the process user and assigns
|
||||||
|
* to the current thread.
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* ImpersonationLevel [I] Level at which to impersonate.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: TRUE.
|
||||||
|
* Failure: FALSE.
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
|
ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
|
||||||
{
|
{
|
||||||
return RtlImpersonateSelf(ImpersonationLevel);
|
return set_ntstatus( RtlImpersonateSelf( ImpersonationLevel ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -1844,14 +1861,22 @@ BOOL WINAPI AccessCheckByType(
|
||||||
return !*AccessStatus;
|
return !*AccessStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* MapGenericMask [ADVAPI32.@]
|
||||||
|
*
|
||||||
|
* Maps generic access rights into specific access rights according to the
|
||||||
|
* supplied mapping.
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* AccessMask [I/O] Access rights.
|
||||||
|
* GenericMapping [I] The mapping between generic and specific rights.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Nothing.
|
||||||
|
*/
|
||||||
VOID WINAPI MapGenericMask( PDWORD AccessMask, PGENERIC_MAPPING GenericMapping )
|
VOID WINAPI MapGenericMask( PDWORD AccessMask, PGENERIC_MAPPING GenericMapping )
|
||||||
{
|
{
|
||||||
FIXME("%p %p - stub\n", AccessMask, GenericMapping);
|
RtlMapGenericMask( AccessMask, GenericMapping );
|
||||||
|
|
||||||
*AccessMask |= GenericMapping->GenericRead;
|
|
||||||
*AccessMask |= GenericMapping->GenericWrite;
|
|
||||||
*AccessMask |= GenericMapping->GenericExecute;
|
|
||||||
*AccessMask |= GenericMapping->GenericAll;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
|
@ -1365,12 +1365,55 @@ RtlAdjustPrivilege(ULONG Privilege,
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* RtlImpersonateSelf [NTDLL.@]
|
* RtlImpersonateSelf [NTDLL.@]
|
||||||
|
*
|
||||||
|
* Makes an impersonation token that represents the process user and assigns
|
||||||
|
* to the current thread.
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* ImpersonationLevel [I] Level at which to impersonate.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: STATUS_SUCCESS.
|
||||||
|
* Failure: NTSTATUS code.
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
NTSTATUS WINAPI
|
||||||
RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
|
RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
|
||||||
{
|
{
|
||||||
FIXME("(%08x), stub\n", ImpersonationLevel);
|
NTSTATUS Status;
|
||||||
return TRUE;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
|
HANDLE ProcessToken;
|
||||||
|
HANDLE ImpersonationToken;
|
||||||
|
|
||||||
|
TRACE("(%08x)\n", ImpersonationLevel);
|
||||||
|
|
||||||
|
Status = NtOpenProcessToken( NtCurrentProcess(), TOKEN_DUPLICATE,
|
||||||
|
&ProcessToken);
|
||||||
|
if (Status != STATUS_SUCCESS)
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
InitializeObjectAttributes( &ObjectAttributes, NULL, 0, NULL, NULL );
|
||||||
|
|
||||||
|
Status = NtDuplicateToken( ProcessToken,
|
||||||
|
TOKEN_IMPERSONATE,
|
||||||
|
&ObjectAttributes,
|
||||||
|
ImpersonationLevel,
|
||||||
|
TokenImpersonation,
|
||||||
|
&ImpersonationToken );
|
||||||
|
if (Status != STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
NtClose( ProcessToken );
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = NtSetInformationThread( GetCurrentThread(),
|
||||||
|
ThreadImpersonationToken,
|
||||||
|
&ImpersonationToken,
|
||||||
|
sizeof(ImpersonationToken) );
|
||||||
|
|
||||||
|
NtClose( ImpersonationToken );
|
||||||
|
NtClose( ProcessToken );
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|
|
@ -1890,7 +1890,7 @@ PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
|
||||||
PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
|
PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
|
||||||
PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
|
PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
|
||||||
PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
|
PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
|
||||||
BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
|
NTSTATUS WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
|
||||||
void WINAPI RtlInitString(PSTRING,PCSZ);
|
void WINAPI RtlInitString(PSTRING,PCSZ);
|
||||||
void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
|
void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
|
||||||
void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
|
void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
|
||||||
|
|
Loading…
Reference in New Issue