예제 #1
0
            public void SetRequiredPrivileges(System.Collections.Generic.IEnumerable <string> privileges)
            {
                var requiredPrivileges = new System.Text.StringBuilder();

                foreach (var privilege in System.Linq.Enumerable.Append(privileges, ""))
                {
                    requiredPrivileges.Append(privilege);
                    requiredPrivileges.Append('\0');
                }
                var requiredPrivilegesInfo = new SERVICE_REQUIRED_PRIVILEGES_INFO {
                    RequiredPrivileges = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(requiredPrivileges.ToString())
                };

                try
                {
                    if (ChangeServiceConfig2WithRequiredPrivilegesInfo(ServiceHandle, ServiceConfig2InfoLevel.SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, ref requiredPrivilegesInfo) == 0)
                    {
                        throw new System.ComponentModel.Win32Exception("Unable to set service required privileges");
                    }
                }
                finally
                {
                    System.Runtime.InteropServices.Marshal.FreeHGlobal(requiredPrivilegesInfo.RequiredPrivileges);
                }
            }
예제 #2
0
 static extern int ChangeServiceConfig2WithRequiredPrivilegesInfo(
     System.IntPtr hService,
     ServiceConfig2InfoLevel dwInfoLevel,
     ref SERVICE_REQUIRED_PRIVILEGES_INFO lpInfo);