'Registry Password Cache ON
Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const REG_NONE = (0) 'No value Type Public Const REG_SZ = (1) 'Unicode nul terminated String Public Const REG_EXPAND_SZ = (2) 'Unicode nul terminated String w/enviornment var Public Const REG_BINARY = (3) 'Free form binary Public Const REG_DWORD = (4) '32-bit number Public Const REG_DWORD_LITTLE_ENDIAN = (4) '32-bit number (same as REG_DWORD) Public Const REG_DWORD_BIG_ENDIAN = (5) '32-bit number Public Const REG_LINK = (6) 'Symbolic Link (unicode) Public Const REG_MULTI_SZ = (7) 'Multiple Unicode strings Public Const REG_RESOURCE_LIST = (8) 'Resource list In the resource map Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9) 'Resource list In the hardware description Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10) Public Const REG_OPTION_NON_VOLATILE = 0 Public Const KEY_QUERY_VALUE = &H1 Public Const KEY_SET_VALUE = &H2 Public Const KEY_CREATE_SUB_KEY = &H4 Public Const KEY_ENUMERATE_SUB_KEYS = &H8 Public Const KEY_NOTIFY = &H10 Public Const KEY_CREATE_LINK = &H20 Public Const SYNCHRONIZE = &H100000 Public Const STANDARD_RIGHTS_ALL = &H1F0000 Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _ KEY_QUERY_VALUE Or KEY_SET_VALUE Or _ KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY Or KEY_CREATE_LINK) And _ (Not SYNCHRONIZE)) Declare Function RegCreateKey Lib "advapi32.dll" _ Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal _ lpSubKey As String, phkResult As Long) As Long 'The above code creates new registry key - Short Form Declare Function RegCreateKeyEx Lib "advapi32.dll" _ Alias "RegCreateKeyExA" _ (ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal Reserved As Long, _ ByVal lpClass As String, _ ByVal dwOptions As Long, _ ByVal samDesired As Long, _ lpSecurityAttributes As Any, _ phkResult As Long, lpdwDisposition As Long) As Long 'The above code creates new registry key - Long Form Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long 'The above code closes registry key Declare Function RegOpenKeyEx Lib "advapi32" _ Alias "RegOpenKeyExA" _ (ByVal hKey As Long, _ ByVal lpszSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long) As Long 'The above code opens registry key Declare Function RegQueryValueEx Lib "advapi32" _ Alias "RegQueryValueExA" _ (ByVal hKey As Long, _ ByVal lpszValueName As String, _ ByVal dwReserved As Long, _ lpdwType As Long, _ lpbData As Any, _ cbData As Long) As Long 'The above code queries registry key for value Declare Function RegSetValueEx Lib "advapi32" _ Alias "RegSetValueExA" _ (ByVal hKey As Long, _ ByVal lpszValueName As String, _ ByVal dwReserved As Long, _ ByVal fdwType As Long, _ lpbData As Any, _ ByVal cbData As Long) As Long 'The above code sets the value of a Registry Key - not a string Declare Function RegSetStringEx Lib "advapi32" _ Alias "RegSetValueExA" _ (ByVal hKey As Long, _ ByVal lpszValueName As String, _ ByVal dwReserved As Long, _ ByVal fdwType As Long, _ lpbData As String, _ ByVal cbData As Long) As Long Public Sub PasswordCache_On() 'Purpose: Creates a Registry key that allows password caching for Dim Reg_HKey As Long 'Branch of the Registry Dim Reg_Path As String 'Path in the Registry Dim Reg_Value As String 'New Key Value To add Dim Reg_DataType As Long 'Key Data Type Dim Reg_Data As Long 'Data To go In the key Dim keyhand As Long Dim r As Long, IsNewKey As Long DoCmd.Hourglass True Reg_HKey = HKEY_LOCAL_MACHINE Reg_Path = "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Network" Reg_Value = "DisablePwdCaching" Reg_DataType = REG_NONE 'Long Form Create Key r = RegCreateKeyEx(Reg_HKey, Reg_Path, 0&, _ REG_SZ, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _ ByVal 0&, keyhand, IsNewKey) r = RegSetValueEx(keyhand, Reg_Value, _ ByVal 0&, Reg_DataType, _ Reg_Data, Len(Reg_Data)) DoCmd.Hourglass False End Sub Assumes: This code must be run BEFORE any connections are attempted. I suggest while the application loads (form load or autoexec macro). My company's policy is to have the DisablePwdCaching key turned on for the general populous. For developers like myself, we needed to save passwords for the sake of our applications connections. So this code turns the key off and we're able to save those passwords. I have included the extra code so that you may use this example for other registry key applications: create,delete, update, query, etc. Side Effects: This code must be run BEFORE any connections are attempted. I suggest while the application loads (form load or autoexec macro). The key will remain off until next boot. Unless your company policy does not reset it to turn on. |