visual uncomment sirve que para net multiple for ejemplos comment comentar vb6 windows-vista elevated-privileges

uncomment - Credenciales elevadas para VB6



vba comment multiple lines (3)

Necesito obtener credenciales elevadas (para iniciar un servicio) en una aplicación VB6, pero solo si el usuario necesita reiniciar el servicio (es decir, no quiero obtener credenciales elevadas cada vez que se inicia la aplicación, solo cuando el usuario selecciona reiniciar ) ¿Cómo puedo hacer esto en VB6?


Bastante fácil, pero la forma preferida implica un nuevo proceso elevado. Este ejemplo se usa con un interruptor para saber que se debe realizar el Inicio del servicio en lugar de las operaciones normales:

VERSION 5.00 Begin VB.Form Form1 BorderStyle = 1 ''Fixed Single Caption = "Form1" ClientHeight = 3060 ClientLeft = 45 ClientTop = 345 ClientWidth = 4560 LinkTopic = "Form1" MaxButton = 0 ''False MinButton = 0 ''False ScaleHeight = 3060 ScaleWidth = 4560 StartUpPosition = 3 ''Windows Default Begin VB.CommandButton Command1 Caption = "Start Service" Height = 495 Left = 1448 TabIndex = 0 Top = 1283 Width = 1665 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Const BCM_SETSHIELD As Long = &H160C& Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Private Sub Command1_Click() ShellExecute hWnd, "runas", App.EXEName & ".exe", "-start", CurDir$(), vbNormalFocus End Sub Private Sub Form_Load() If UCase$(Trim$(Command$())) = "-START" Then Caption = "Starting Service" Command1.Visible = False ''Service starting functionality goes here. Else Caption = "Service Starter" ''For Shield to work you must have a Common Controls v. 6 ''manifest and call InitCommonControls before loading ''this form (i.e. preferably from Sub Main). SendMessage Command1.hWnd, BCM_SETSHIELD, 0&, 1& Command1.Visible = True End If End Sub


Deberá llamar al WinAPI - CoImpersonateClient o LogonUser.
Solo recuerde disminuir sus privilegios después, y sea DARN cuidadoso con lo que hace cuando está elevado (por ejemplo, no haga NADA con la entrada del usuario).

Otra opción, que creo que es preferible (si está disponible), es usar un objeto configurado COM +. Puede hacer que el subsistema COM + administre credenciales, y simplemente limitar el acceso para llamar al objeto según sea necesario. Esto tiene la ventaja de crear un límite de confianza REAL entre el código de bajo privilegio y el código de alto privilegio.