[AccessD] Office API's

Heenan, Lambert Lambert.Heenan at chartisinsurance.com
Mon Dec 13 11:34:27 CST 2010


One API that took me so long to find was one that would provide Windows Authentication. In other words require the user to enter the name and password that was used to start the current Windows session: to prove that they are who fOsUsername says they are.

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
    
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As _
    Long
Const LOGON32_PROVIDER_DEFAULT = 0&
Const LOGON32_LOGON_NETWORK = 3&

' Check whether a username/password pair is correct
'
' if DOMAIN is omitted, it uses the local account database
' and then asks trusted domains to search their account databases
' until it finds the account or the search is exhausted
' use DOMAIN="." to search only the local account database
'
'  IMPORTANT: works only under Windows NT and 2000 and XP

Private Function CheckWindowsUser(ByVal UserName As String, _
    ByVal Password As String, Optional ByVal Domain As String) As Boolean
    Dim hToken As Long, ret As Long

' The handle hToken is not used by CheckWindowsUser
' but is required by the API LogonUser

    ' provide a default for the Domain name
    If Len(Domain) = 0 Then Domain = vbNullString
    ' check the username/password pair
    ' using LOGON32_LOGON_NETWORK delivers the best performance
    ret = LogonUser(UserName, Domain, Password, LOGON32_LOGON_NETWORK, _
        LOGON32_PROVIDER_DEFAULT, hToken)
    
    ' a non-zero value means success
    If ret Then
        CheckWindowsUser = True
        CloseHandle hToken
    End If

End Function

Lambert
-----Original Message-----
From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan
Sent: Friday, December 10, 2010 5:43 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Office API's

On 10 Dec 2010 at 16:22, Susan Harkins wrote:

> Yeah, and it's temperamental to boot! ;)
> 
> Susan H.


It works exactly the way it is intended. - just not the way you think it should  :-)

>From Win32.hlp:

The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.  

HWND FindWindow(
    LPCTSTR lpClassName,	// pointer to class name
    LPCTSTR lpWindowName 	// pointer to window name
   );	
 
Parameters
lpClassName
Points to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpClassName; the high-order word must be zero.  

lpWindowName
Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.  

Return Values If the function succeeds, the return value is the handle to the window that has the specified class name and window name. If the function fails, the return value is NULL. To get extended error information, call GetLastError.  

--
Stuart



-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list