0

そこで、ツールに一定レベルのセキュリティを追加しようとして、この投稿にたどり着きました。コードはネットワーク/ドメイン上で機能しますが、リモートでネットワーク上になく、ネットワークにvpnされている人のために、これを何らかの形で使用する必要があります。これは可能ですか?ここに通いながら学んでいるので、そもそもこれは実現可能ではないかもしれません。可能な限りあらゆる手段を探しているだけです。

コード例:

Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
    'Authenticates user and password entered with Active Directory. 

    On Error GoTo IncorrectPassword

    Dim oADsObject, oADsNamespace As Object
    Dim strADsPath As String

    strADsPath = "WinNT://" & strDomain
    Set oADsObject = GetObject(strADsPath)
    Set oADsNamespace = GetObject("WinNT:")
    Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)

    WindowsLogin = True    'ACCESS GRANTED

ExitSub:
    Exit Function

IncorrectPassword:
    WindowsLogin = False   'ACCESS DENIED
    Resume ExitSub
End Function

編集: @ user2140261 はLogonUser、以下のような Advapi32.dll の関数を試すことについて教えてくれました:

Private Declare Function LogonUser Lib "advapi32.dll" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As UInteger, ByVal dwLogonProvider As UInteger, ByRef phToken As IntPtr) As Boolean

Sub LoginTest()

    Dim logname As String
    Dim logpass As String
    Dim domainstring As String

    logname = "username"
    logpass = "password"
    domainstring = "domain.com"

    Call WindowsLogin(logname, logpass, domainstring)

End Sub

何らかの理由で、これにより Excel が一斉にクラッシュします。何か理由は?

4

2 に答える 2

1

WindowsLogin元のコードでサブがドンであるかわからないが、以下を試してください:

Private Declare Function LogonUser Lib "Advapi32" 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

Public Sub LogUserOn()
 Dim strUserName As String
 Dim strPassword As String
 Dim strDomain As String
 Dim bResult As Boolean

 strUserName = "UserName"
 strPassword = "Password"
 strDomain = "Domain"

 bResult = LogonUser(strUserName, strDomain, strPassword, 2, 0, 0)

 If bResult Then
    MsgBox "Successfully Logged User In"
 Else: MsgBox "And Error Occured While Trying To Log User In " & vbCrLf _
            & "Error Code:" & Err.LastDllError
 End If

End Sub
于 2013-10-25T19:50:23.167 に答える