/********************************************************/ /* ntapi: Native API core library */ /* Copyright (C) 2013--2021 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ /********************************************************/ #include #include #include #include #include "ntapi_impl.h" static int32_t __stdcall __set_token_privilege( __in void * htoken, __in uint32_t privilege, __in int attribute) { uintptr_t buffer[64]; nt_token_privileges * tokprivs; /* reasonable scope */ if (privilege > 255) return NT_STATUS_INVALID_PARAMETER; /* buffer */ __ntapi->tt_aligned_block_memset( buffer,0,sizeof(buffer)); tokprivs = (nt_token_privileges *)buffer; /* token privileges */ tokprivs->privilege_count = 1; tokprivs->privileges[0].attributes = attribute; tokprivs->privileges[0].luid.low = privilege; tokprivs->privileges[0].luid.high = 0; /* set */ return __ntapi->zw_adjust_privileges_token( htoken,0, tokprivs,sizeof(buffer), 0,0); } int32_t __stdcall __ntapi_tt_enable_token_privilege( __in void * htoken, __in uint32_t privilege) { return __set_token_privilege( htoken, privilege, NT_SE_ENABLE_PRIVILEGE); } int32_t __stdcall __ntapi_tt_disable_token_privilege( __in void * htoken, __in uint32_t privilege) { return __set_token_privilege( htoken, privilege, NT_SE_DISABLE_PRIVILEGE); }