¿Cómo elevar los permisos de proceso a permisos del sistema en VB?
1 Obtenga el identificador del proceso actual que necesita escalar privilegios
2 Luego obtenga el token de acceso del proceso actual
3 Finalmente, elevar privilegios
Funciones que deben usarse:
GetCurrentProcess: obtiene el pseudo identificador del proceso actual
OpenProcessToken : Obtiene el token de acceso del proceso actual
LookupPrivilegeValue: encuentra el valor de permiso de los permisos del sistema y lo devuelve a la estructura LUID
AdjustTokenPrivileges: se utiliza para elevar privilegios
La siguiente es una función que eleva los privilegios de depuración del proceso actual. A menudo escribo esta función en un módulo:
Función de declaración pública GetCurrentProcess Lib "kernel32" () As Long
<. p>Función de declaración pública LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName como cadena, ByVal lpName como cadena, lpLuid como LUID) siempre y cuandoFunción de declaración pública OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle mientras, ByVal DesiredAccess mientras, TokenHandle mientras) Mientras
p>Función de declaración pública AjustarTokenPrivileges Lib "advapi32" (ByVal TokenHandle mientras, ByVal DisableAllPrivileges mientras, NewState como TOKEN_PRIVILEGES, _
ByVal BufferLength Mientras, PreviousState Como TOKEN_PRIVILEGES, ReturnLength Mientras) Mientras
Const pública TOKEN_ADJUST_PRIVILEGES = &H20
Const pública TOKEN_QUERY = &H8 p>
Const pública SE_DEBUG_NAME = "SeDebugPrivilege"
Const pública ANYSIZE_ARRAY = 1
Const pública SE_PRIVILEGE_ENABLED = & H2
Tipo público LUID p>
Parte baja mientras
Parte alta mientras
Tipo final
Tipo público LUID_AND_ATTRIBUTES
pLuid como LUID
Atributos siempre
EndType
Tipo público TOKEN_PRIVILEGES
PrivilegioCuenta mientras
Privilegios (ANYSIZE_ARRAY) Como LUID_
AND_ATTRIBUTES
Tipo final
Public Sub AjustaProcPriv() 'Este es un subproceso que eleva los privilegios de depuración. Este es el subproceso de elevación de permisos de depuración
Dim Ret As Long, PrevNeed As Long, PrevLen As Long
Dim HCurProc As Long, HToken As Long, NewPrivilege As TOKEN_PRIVILEGES p>
Dim PrevPrivilege As TOKEN_PRIVILEGES, GetLuid As LUID
HCurProc = GetCurrentProcess
Ret = OpenProcessToken(HCurProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, HToken)
Ret = LookupPrivilegeValue ("", SE_DEBUG_NAME, GetLuid)
NewPrivilege.PrivilegeCount = 1
NewPrivilege.Privileges(0).pLuid = GetLuid
NewPrivilege.Privileges( 0) .Attributes = SE_ PRIVILEGE_ENABLED
PrevLen = Len(PrevPrivilege)
Ret = AjustarTokenPrivileges(HToken, False, NewPrivilege, PrevLen, PrevPrivilege, PrevNeed)
End Sub
Lo más importante es comprender y conocer el significado de los parámetros de la función. Si no comprende algo, hágalo.
Preguntas de seguimiento
.Parámetro Expert LookupPrivilegeValue No es opcional, por qué
Respuesta
No entiendo lo que dijiste. No entiendo, por qué no me envías tu código, lo miro y te lo explico
Preguntas de seguimiento
GetCurrentProcess ': Obtener el pseudo identificador del proceso actual
p>
OpenProcessToken ': obtiene el token de acceso del proceso actual