Buscando un programa de apagado programado escrito en VB6.0
'****************************************** ********
'Código de formulario:Form1
'La interfaz solo necesita configurar un botón, y el nombre del botón es: Comando1: Comando1
' **************** ******************************* ****
Opción explícita
Const privada SE_PRIVILEGE_ENABLED = &H2
Const privada TOKEN_ ADJUST_PRIVILEGES = &H20
Const privada TOKEN_QUERY = & ;H8
p>
Const privada SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const privada EWX_LOGOFF = 0
Const privada EWX_SHUTDOWN = &H1
Const privada EWX_REBOOT = &H2
p>
Const privada EWX_ POWEROFF = &H8
Const privada EWX_RESTARTAPPS = &H40
Const privada EWX_FORCE = &H4
Const privada EWX_FORCEIFHUNG = &H10
LUID de tipo privado
Parte baja siempre
Parte alta siempre
Tipo de fin
Tipo privado LUID_AND_ATTRIBUTES
pLuid como LUID
Atributos siempre que
Tipo de fin
Tipo privado TOKEN_PRIVILEGES
PrivilegeCount siempre
Privilegios(1) como LUID_AND_ATTRIBUTES
Tipo final
Función de declaración privada GetCurrentProcess Lib "kernel32" () Siempre
Función de declaración privada OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle mientras, ByVal DesiredAccess mientras, TokenHandle mientras) Mientras
LPLuid privado como LUID) Siempre
Función de declaración privada AjustarTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle siempre, ByVal DisableAllPrivileges siempre, NewState como TOKEN_PRIVILEGES, ByVal BufferLe
ngth Mientras, ByVal PreviousState Mientras, ByVal ReturnLength Mientras) Mientras
Función de declaración privada Salir de WindowsEx Lib "user32" (ByVal uFlags Mientras, ByVal dwReserved Mientras) Mientras
Subcomando privado1_ Click()
Atenuar hToken mientras
Atenuar TokenPrivilegeLuid como LUID
Atenuar TokenPrivilege como TOKEN_PRIVILEGES
Si MsgBox( "ADVERTENCIA: ¡Esta operación forzará el apagado y se perderán todos los datos no guardados!"
Salir de Sub
End If
If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_ PRIVILEGES O vbCritical, "Warning") = vbCancel Entonces
Salir Sub
Fin si
Si OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_ PRIVILEGES O TOKEN_QUERY, hToken ) = 0 Entonces
MsgBox "Error al obtener el identificador de privilegios del token de acceso", vbExclamation, "Error en la operación"
Salir de la subrutina
Finalizar si
Si LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, TokenPrivilegeLuid) = 0 Entonces
MsgBox "Error al encontrar el privilegio de apagado", vbExclamation, "Error en la operación"
Salga de la subrutina
p>Fin si
TokenPrivilege.PrivilegeCount = 1
TokenPrivilege.Privileges(0).pLuid = TokenPrivilegeLuid
TokenPrivilege.Privileges(0). Attributes = SE_PRIVILEGE_ENABLED
Si AjustaTokenPrivileges(hToken, False, TokenPrivilege, LenB( TokenPrivilege), 0, 0) = 0 Entonces
MsgBox "Los privilegios de apagado no pudieron surtir efecto", vbExclamation, "Error de operación"
Salir de la subrutina
Finalizar si
si ExitWindowsEx(EWX_ SHUTDOWN o EWX_FORCE, 0) = 0 entonces
MsgBox "Error en la operación de apagado", vbExcla
información, "Error de operación"
Finalizar si
End Sub