summaryrefslogtreecommitdiff
path: root/mysys/my_wintoken.c
blob: 78c4bc9dad5e8a1e6da805b2fe92913f6e2c3190 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Copyright (c) 2019, IBM.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */

#include "mysys_priv.h"

BOOL my_obtain_privilege(LPCSTR lpPrivilege)
{
  HANDLE hAccessToken;
  TOKEN_PRIVILEGES token;
  BOOL ret_value= FALSE;

  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hAccessToken))
  {
    return FALSE;
  }

  if (!LookupPrivilegeValue(NULL, lpPrivilege, &token.Privileges[0].Luid))
    return FALSE;

  token.PrivilegeCount= 1;
  token.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  ret_value= AdjustTokenPrivileges(hAccessToken, FALSE, &token, 0, NULL, NULL);

  if (!ret_value || (GetLastError() != ERROR_SUCCESS))
    return FALSE;

  CloseHandle(hAccessToken);
  return TRUE;
}