// ************************************************************************** // * This file is part of the FreeFileSync project. It is distributed under * // * GNU General Public License: http://www.gnu.org/licenses/gpl.html * // * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) * // ************************************************************************** #ifndef PRIVILEGE_H_INCLUDED #define PRIVILEGE_H_INCLUDED #include #include "zstring.h" #include "file_error.h" #include "win.h" //includes "windows.h" namespace zen { #ifdef FFS_WIN class Privileges { public: static Privileges& getInstance(); void ensureActive(LPCTSTR privilege) //throw FileError { if (activePrivileges.find(privilege) != activePrivileges.end()) return; //privilege already active if (privilegeIsActive(privilege)) //privilege was already active before starting this tool activePrivileges.insert(std::make_pair(privilege, false)); else { setPrivilege(privilege, true); activePrivileges.insert(std::make_pair(privilege, true)); } } private: Privileges() {} Privileges(Privileges&); void operator=(Privileges&); ~Privileges() //clean up: deactivate all privileges that have been activated by this application { for (PrivBuffType::const_iterator i = activePrivileges.begin(); i != activePrivileges.end(); ++i) try { if (i->second) Privileges::setPrivilege(i->first.c_str(), false); } catch (...) {} } static bool privilegeIsActive(LPCTSTR privilege); //throw FileError static void setPrivilege(LPCTSTR privilege, bool enable); //throw FileError typedef std::map PrivBuffType; //bool: enabled by this application PrivBuffType activePrivileges; }; #endif } #endif // PRIVILEGE_H_INCLUDED