home *** CD-ROM | disk | FTP | other *** search
/ Borland Programmer's Resource / Borland_Programmers_Resource_CD_1995.iso / code / ntfiles / setpriv.c < prev   
C/C++ Source or Header  |  1995-05-18  |  2KB  |  78 lines

  1. /*    This routine manipulates process privileges.  The "fEnable" flag determines
  2.     whether to turn on the specified privilege or turn off all privileges.  The
  3.     "PrivString" parameter specifies which privilege to enable.
  4. */
  5.  
  6. #include "apierr.h"
  7.  
  8. BOOL AdjustProcessPrivs (LPTSTR PrivString, BOOL fEnable)
  9. {
  10.  
  11.     HANDLE hToken;
  12.     LUID TakeOwnershipValue;
  13.     TOKEN_PRIVILEGES tkp;
  14.  
  15.     /* Get the handle of the access token */
  16.  
  17.     if (!OpenProcessToken (
  18.         GetCurrentProcess (),
  19.         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
  20.         &hToken))
  21.  
  22.     {
  23.         PERR ("OpenProcessToken");
  24.         return FALSE;
  25.     }
  26.  
  27.     /* Enable or disable the privilege, depending on the fEnable flag */
  28.  
  29.     if (fEnable)
  30.     {
  31.         if (!LookupPrivilegeValue (
  32.             (LPSTR) NULL,
  33.             PrivString,
  34.             &TakeOwnershipValue))
  35.  
  36.         {
  37.             PERR ("LookupPrivilegeValue");
  38.             return FALSE;
  39.         }
  40.  
  41.         tkp.PrivilegeCount = 1;
  42.         tkp.Privileges[0].Luid = TakeOwnershipValue;
  43.         tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  44.  
  45.         AdjustTokenPrivileges (
  46.             hToken,
  47.             FALSE,
  48.             &tkp,
  49.             sizeof (TOKEN_PRIVILEGES),
  50.             (PTOKEN_PRIVILEGES) NULL,
  51.             (PDWORD) NULL);
  52.  
  53.         if (GetLastError () != ERROR_SUCCESS)
  54.         {
  55.             PERR ("AdjustTokenPrivileges");
  56.             return FALSE;
  57.         }
  58.     }
  59.     else
  60.     {
  61.         AdjustTokenPrivileges (
  62.             hToken,
  63.             TRUE,
  64.             (PTOKEN_PRIVILEGES) NULL,
  65.             (DWORD) 0,
  66.             (PTOKEN_PRIVILEGES) NULL,
  67.             (PDWORD) NULL);
  68.  
  69.         if (GetLastError () != ERROR_SUCCESS)
  70.         {
  71.             PERR ("AdjustTokenPrivileges");
  72.             return FALSE;
  73.         }
  74.     }
  75.  
  76.     return TRUE;
  77. }
  78.