Aqui vuelve el pesao de MadAntrax con otro de sus códigos...
Esta vez sirve para controlar que nuestra aplicación no sea ejecutada 2 veces en un mismo equipo. Algunos pensareis que eso ya se puede hacer con
If App.PrevInstance = True Then End
pero eso no es cierto... si nuestra aplicación se copia en System32 como:
programa1.exe y
programa2.exe... el usuario podrá ejecutar el
programa1.exe y el
programa2.exe simultáneamente! Eso puede suponer un problema en el caso de estar programando un troyano o un keylogger (donde lo importante es solo tener una instancia de nuestro malware a la vez).
Si no recuerdo mal, el troyano Bifrost usa esta función para controlar que solo un server.exe esté ejecutándose a la vez en un mismo sistema, y si la memoria no me falla este Mutex se puede personalizar en el EditServer. Bien, como creo yo una función similar en VB, así de simple:
Module1.bas'Estas sin las API's necesarias para crear y controlar el Mutex
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'Variable Global que almacena el Handle de nuestro Mutex
Private hMutex As Long
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' IsMutexRunning Parametros:
' MutexStr = String
' Cadena de texto única que usaremos para controlar nuestro Mutex
'
' Valor de retorno = Boolean
' Devuelve TRUE si existe el Mutex
' Devuleve FALSE si no encuentra el Mutex
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function IsMutexRunning(ByVal MutexStr As String) As Boolean
hMutex = CreateMutex(0&, 0&, MutexStr) 'Creamos nuestro Mutex único
If hMutex = 0 Then 'Si el Handle es 0 es que algo no va bien :S
MsgBox "Ha ocurrido un error al intentar crear el Mutex. Es imposible controlar las instancias de este proceso", vbCritical + vbOKOnly, "CreateMutex Error"
IsMutexRunning = False
Else
If WaitForSingleObject(hMutex, 0&) = &H0 Then 'Comprobamos si ya existe ese Handle
IsMutexRunning = False 'Si no existe, devolvemos FALSE
Else
MsgBox "Solo se permite una instancia simultanea de este proceso", vbOKOnly, "CreateMutex"
CloseHandle hMutex 'Si existe, cerramos el nuevo Handle
IsMutexRunning = True 'Y devolvemos TRUE
End If
End If
End Function
y el el
Form1.frm...
Private Sub Form_Load()
'Evitar usar un Mutex superior a 256 carácteres
'Recomiendo usar un Mutex poco común, asi evitamos problemas...
If IsMutexRunning("MadAntrax_Mutex[73@]") = True Then End
End Sub
Así de simple!! os dejo un proyecto de ejemplo 100% funcional, la descarga esta habilitada solo a usuarios registrados!!
Saludos!! ;D
Aqui vuelve el pesao de MadAntrax con otro de sus códigos...
Ya te digo... :¬¬ :¬¬
Es broma ;D muy weno este codigo, y todas tus aportaciones, gracias ;)