Ошибка 127: «ERROR_PROC_NOT_FOUND» («Указанная процедура не найдена»).
Я работаю на Windows Server 2016 под управлением Citrix XenApp со службами удаленных рабочих столов. CryptAcquireContext API находится в advapi32.dll. Я запустил на нем файл Microsoft Depends32.exe, и функции CryptAcquireContextA и CryptAcquireContextW равны определенно в файле DLL. Похоже, такая же ошибка происходит со всеми функциями crypto api. Я протестировал CryptDestroyHash, и он также возвращает ошибку 127 (ERROR_PROC_NOT_FOUND).
Вот мой код C ++:
HCRYPTPROV hProv = 0;
BOOL bCryptAcquireContext = CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0);
dwError = GetLastError();
Этот C ++ работает в EXE, но если тот же код помещается в DLL, которая вызывается из VB6, он не работает. Как будто любое приложение vb6 заблокировано из этих API?
Вот код VB6:
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Sub Form_Load()
Dim sProvider As String
Dim rv as Long
Dim sContainer As String
Dim m_lProvider As Long
Const PROV_RSA_FULL = 1
Const CRYPT_VERIFYCONTEXT As Long = &HF0000000
Const MS_DEF_PROV As String = "Microsoft Base Cryptographic Provider v1.0"
sProvider = MS_DEF_PROV & vbNullChar
sContainer = vbNullChar
rv = CryptAcquireContext(m_lProvider, 0, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)
dwError = Err.LastDllError
If rv = 0 and dwError <> 127 Then
rv = CryptAcquireContext(m_lProvider, 0&, ByVal sProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)
End If
End Sub