Welcome to mirror list, hosted at ThFree Co, Russian Federation.

priv.h « 3rdparty - github.com/windirstat/windirstat.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1b25830c2ee17647179f00d58488e610f44d4303 (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
///////////////////////////////////////////////////////////////////////////////
///
/// Written by Oliver Schneider (assarbad.net) - PUBLIC DOMAIN/CC0
///
/// Purpose          : Functions to deal with NT privileges.
///
///////////////////////////////////////////////////////////////////////////////
#ifndef __PRIV_H_VER__
#define __PRIV_H_VER__ 2018070910
#if (defined(_MSC_VER) && (_MSC_VER >= 1020)) || defined(__MCPP)
#pragma once
#endif /* Check for "#pragma once" support */

#include <Windows.h>
#include <winnt.h>
#include <tchar.h>

EXTERN_C HANDLE PrivGetProcessToken(DWORD dwAdditionalAccess);
EXTERN_C HANDLE PrivGetThreadToken(DWORD dwAdditionalAccess);
EXTERN_C BOOL PrivSetTokenPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege);
EXTERN_C BOOL PrivSetContextPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege);
EXTERN_C BOOL PrivSetProcessPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege);
EXTERN_C BOOL PrivSetThreadPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege);
EXTERN_C BOOL PrivHasTokenPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, LPDWORD lpdwAttributes);
EXTERN_C BOOL PrivHasContextTokenPrivilege(LPCTSTR lpszPrivilege, LPDWORD lpdwAttributes);
EXTERN_C BOOL PrivHasProcessTokenPrivilege(LPCTSTR lpszPrivilege, LPDWORD lpdwAttributes);
EXTERN_C BOOL PrivHasThreadTokenPrivilege(LPCTSTR lpszPrivilege, LPDWORD lpdwAttributes);
EXTERN_C BOOL PrivIsContextTokenPrivilegeEnabled(LPCTSTR lpszPrivilege);
EXTERN_C BOOL PrivIsProcessTokenPrivilegeEnabled(LPCTSTR lpszPrivilege);
EXTERN_C BOOL PrivIsThreadTokenPrivilegeEnabled(LPCTSTR lpszPrivilege);

#ifdef __cplusplus
class CSnapEnableAssignedPrivilege
{
    BOOL m_bEnabled, m_bNoErrors;
    LPTSTR m_lpszPrivilege;
public:
    CSnapEnableAssignedPrivilege(LPCTSTR lpszPrivilege, BOOL bNoErrors = TRUE)
        : m_bEnabled(FALSE)
        , m_bNoErrors(bNoErrors)
        , m_lpszPrivilege((lpszPrivilege) ? _tcsdup(lpszPrivilege) : NULL)
    {
        if (PrivHasContextTokenPrivilege(m_lpszPrivilege, NULL))
        {
            m_bEnabled = PrivSetContextPrivilege(m_lpszPrivilege, TRUE);
            if (!m_bEnabled)
            {
                if (!m_bNoErrors)
                {
                    _ftprintf(stderr, _T("Could not enable %s\n"), lpszPrivilege);
                }
            }
        }
    }

    virtual ~CSnapEnableAssignedPrivilege()
    {
        if (m_bEnabled)
        {
            (void)PrivSetContextPrivilege(m_lpszPrivilege, FALSE);
        }
        free(m_lpszPrivilege);
    }
private:
    CSnapEnableAssignedPrivilege(CSnapEnableAssignedPrivilege&);
    CSnapEnableAssignedPrivilege& operator=(CSnapEnableAssignedPrivilege&);
};
#endif

#endif /* __PRIV_H_VER__ */