VB escribe código de apagado
Const pública EWX_SHUTDOWN = 1 'Apagar
Const pública EWX_REBOOT = 2 'Reiniciar
Const pública EWX_FORCE = 4 'Forzar apagado Const pública TOKEN_ADJUST _PRIVILEGES = amp H20
Const pública TOKEN_QUERY = amp; SE_PRIVILEGE_ENABLED = & H2
Const pública ANYSIZE_ ARRAY = 1Tipo LUID
parte baja mientras
parte alta mientras
Tipo de finTipo LUID_AND_ATTRIBUTES
p>pLuid como LUID
Atributos siempre
Tipo finalTipo TOKEN_PRIVILEGES
PrivilegioCuenta mientras
Privilegios (ANYSIZE_ARRAY) como LUID_AND_ATTRIBUTES
Tipo finalDeclarar función GetCurrentProcess Lib "kernel32" () siempre que
Declarar función LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName como cadena, ByVal lpName Como cadena, lpLuid como LUID) mientras
Declarar función AjustarTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle mientras, ByVal DisableAllPrivileges mientras, NewState como TOKEN_PRIVILEGES, ByVal BufferLength mientras, PreviousState como TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Declarar función OpenProcessToken Lib "advapi32.dll " (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As LongSub CloseWindowFor98ForXP() D
im hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
DimtkpNewButIgnored As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_ PRIVILEGES O _
TOKEN_QUERY ), hdlTokenHandle LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp. Privileges(0).Attributes = SE_PRIVILEGE_ENABLED AjustarTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, _
lBufferNeeded
Fin del método de subllamada CerrarVentanaFor98ForXPExitWindowsEx EWX_SHUTDOWN, 0