Apis's

El tema es sobre una api de windows.
Yo lo que necesito es que un programa que tengo solo me acepte usuarios que sean válidos en el sistema operativo. Por ejemplo yo entro en el programa y le doy un usuario y una contraseña y el que me diga si es valida en el sistema operativos Nt o 2000. Yo vi una api que es GETUSERNAME pero esta solo me da el usuario actual de windows y no la contraseña. No se si hay alguna que te de la contraseña, yo lo que pretendo por lo menos es que sea el Sistema operativo el que me valide ese usuario y contraseña. Creo que la APi que lo hace es logonuser pero hay un parámetro que no se que le hay que pasar.
Declare Function LogonUser Lib "ADVAPI32.DLL" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
No se que es lo de phtoken, pero esta creo que me valida el usuario, la contraseña y el dominio y me da Verdadero o Falso.
Respuesta
1
Perdón por la demora, tuve mucho trabajo, he leído tu mensaje y por lo general yo uso 2 funciones apis, que es GetUserName (usuario) y WNetVerifyPassword (contraseña), pero traté de usar LogonUser, bueno te mando 2 ejemplos:
En un módulo pegá:
Option Explicit
Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long
Private Declare Function WNetVerifyPassword Lib "mpr.dll" Alias _
"WNetVerifyPasswordA" (ByVal lpszPassword As String, _
ByRef pfMatch As Long) As Long
Public Function GetWindowsLoginUserID() As String
Dim rtn As Long
Dim sBuffer As String
Dim lSize As Long
sBuffer = String$(260, Chr$(0))
lSize = Len(sBuffer)
rtn = GetUserName(sBuffer, lSize)
If rtn Then
sBuffer = Left$(sBuffer, lSize)
If InStr(sBuffer, Chr$(0)) Then
sBuffer = Left$(sBuffer, InStr(sBuffer, Chr$(0)) - 1)
End If
GetWindowsLoginUserID = sBuffer
Else
GetWindowsLoginUserID = ""
End If
End Function
Public Function VerifyWindowsLoginUserPassword _
(ByVal Password As String) As Boolean
Dim rtn As Long, Match As Long
rtn = WNetVerifyPassword(Password, Match)
If rtn Then
VerifyWindowsLoginUserPassword = False
Else
VerifyWindowsLoginUserPassword = (Match <> 0)
End If
End Function
crea un formulario y colocá do textbox y un commandbutton:
Private Sub cmdVerify_Click()
MsgBox "la password administrada es: " _
& VerifyWindowsLoginUserPassword(txtPassword.Text)
End Sub
Private Sub Form_Load()
txtUsername = GetWindowsLoginUserID
txtUsername.Enabled = False
End Sub
usa tu imaginación para cargar los nombres com quieras.
' función LogonUser
'crea un formulario con uncommandbutton
Private Declare Function LogonUser _
Lib "Advapi32" Alias "LogonUserA" _
(ByVal lpszUsername As String, _
ByVal lpszDomain As Any, _
ByVal lpszPassword As String, _
ByVal dwLogonType As Long, _
ByVal dwLogonProvider As Long, _
phToken As Long) As Long
'Sólo para win95,WinNt
Private Const LOGON32_PROVIDER_DEFAULT As Long = 0&
Private Const LOGON32_PROVIDER_WINNT35 As Long = 1&
Private Const LOGON32_LOGON_INTERACTIVE As Long = 2&
Private Const LOGON32_LOGON_NETWORK As Long = 3&
Private Const LOGON32_LOGON_BATCH As Long = 4&
Private Const LOGON32_LOGON_SERVICE As Long = 5&
Public Function Login(ByVal xi_strUserID As String, _
ByVal xi_strPassword As String) As Boolean
Dim p_lngToken As Long
Dim p_lngRtn As Long
p_lngRtn = LogonUser(lpszUsername:=xi_strUserID, _
lpszDomain:=0&, _
lpszPassword:=xi_strPassword, _
dwLogonType:=LOGON32_LOGON_NETWORK, _
dwLogonProvider:=LOGON32_PROVIDER_DEFAULT, _
phToken:=p_lngToken)
If p_lngRtn = 0 Then
Login = False
Else
Login = True
End If
End Function
Private Sub Command1_Click()
Dim Resultado As Boolean
Resultado = Login("User", "Pwd")
MsgBox "EL RESULTADO DE LA PASSWORD ES:" & Resultado, vbInformation, "ACCESO"
End Sub

2 respuestas más de otros expertos

Respuesta
1
Te he intentado enviar la ayuda que tengo sobre la API LogonUser dónde explica que significa cada parámetro y como hay que usarla, pero al intentartelo enviar me ha dicho que la respuesta es muy larga, por lo que si lo deseas puedes enviarme tu dirección de correo y te la enviaré en formato WORD (Si te parece bien, en caso contrario especifícame en que formato lo deseas).
Hola te agradecería que me enviases ese fichero word sobre apis mi dirección es:
[email protected]
Gracias
Ya te he enviado el fichero WORD con la API solicitada. Si deseas todo el archivo *. HLP pídemelo y te lo enviaré. El único problema serán las más de 12 Mb que ocupa.
No me llego tu correo a ver si me lo mandas de nuevo
Gracias
[email protected]
Ya te lo he mandado otra vez.
Respuesta
Tal como lo cuentas no entiendo para que necesitas la contraseña, ya que si sabes el usuario actual, este usuario ya se habrá autentificado.
Por otra parte aunque no estoy muy puesto en el tema de las apis, lo de phtoken me suena a algo del tipo de red.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas