На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

CryptAcquireContext



[New - Windows NT]

[New - Windows 95, OEM Service Release 2]
The CryptAcquireContext function is used to acquire a handle to a particular key container within a particular CSP. This returned handle can then be used to make calls to the selected CSP.
This function performs two operations. It first attempts to find a CSP with the characteristics described in the dwProvType and pszProvider parameters. If the CSP is found, then the function attempts to find a key container within the CSP matching the name specified by the pszContainer parameter.

This function can also be used to create and destroy key containers, depending on the value of the dwFlags parameter.

BOOL CRYPTFUNC CryptAcquireContext(

HCRYPTPROV *phProv,
LPCTSTR pszContainer,
LPCTSTR pszProvider,
DWORD dwProvType,
DWORD dwFlags
);


Parameters

phProv

[out] The address to which the function copies a handle to the CSP.

pszContainer

[in] The key container name. This is a zero-terminated string that identifies the key container to the CSP. This name is independent of the method used to store the keys. Some CSPs will store their key containers internally (in hardware), some will use the system Registry, and others will use the file system.
If this parameter is NULL, then a default key container name will be used. For example, if the Microsoft RSA Base Provider is being used, then the current user's logon name will be used as the name of the key container. Other CSPs may also have default key containers that can be acquired in this way.

An application can obtain the name of the acquired key container at a later time by reading the PP_CONTAINER parameter from the CryptGetProvParam function.

pszProvider

[in] The provider name. This is a zero-terminated string that specifies the CSP to be used.

If this parameter is NULL then the user default provider is used. This situation is discussed in detail in the section Interfacing with a Cryptographic Service Provider (CSP).

An application can obtain the name of the acquired CSP at a later time by reading the PP_NAME parameter from the CryptGetProvParam function.

dwProvType

[in] The type of provider to acquire. The following provider types are predefined. These are discussed in detail in the section Interfacing with a Cryptographic Service Provider (CSP).

· PROV_RSA_FULL
· PROV_RSA_SIG
· PROV_DSS
· PROV_FORTEZZA
· PROV_MS_MAIL

dwFlags

[in] The flag values. This parameter is normally set to zero, but some applications will set one (and only one) of the following flags:

CRYPT_VERIFYCONTEXT

If this flag is set, then the application will have no access to the key container's private keys. In fact, if pszContainer is NULL and no default key container is present, the application will have no access to a key container at all.
This option is intended to be used by applications whose only cryptographic need is to verify digital signatures. The only operations normally needed in this case are public key import, hashing, and signature verification.
When CryptAcquireContext is called, many CSPs will require input from the owning user before granting access to the private keys in the key container. For example, the private keys may be encrypted, requiring a password from the user before they can be used. However, if the CRYPT_VERIFYCONTEXT flag is specified, access to the private keys is not required and the user interface can be bypassed.

CRYPT_NEWKEYSET

If this flag is set, then a new key container will be created with the name specified by pszContainer. If pszContainer is NULL, then a key container with the default name will be created.



Note That when key containers are created, most CSPs will not automatically create any public/private key pairs. These keys must be created as a separate step with the CryptGenKey function.



Important This flag should only be set by administrative applications. Normal applications should not create key containers.



CRYPT_DELETEKEYSET

If this flag is set, then the key container specified by pszContainer is deleted. If pszContainer is NULL, then the key container with the default name is deleted. All key pairs in the key container are also destroyed.
When the CRYPT_DELETEKEYSET flag is set, the value returned in phProv is undefined and, thus, the CryptReleaseContext function need not be called afterwards.



Important This flag should only be set by administrative applications. Normal applications should not destroy key containers.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function.
The following table lists the error codes most commonly returned by the GetLastError function.

Error Description
ERROR_INVALID_PARAMETER One of the parameters contains an invalid value. This is most often an illegal pointer.
ERROR_NOT_ENOUGH_MEMORY The operating system ran out of memory during the operation.
NTE_BAD_FLAGS The dwFlags parameter has an illegal value.
NTE_BAD_KEYSET The Registry entry for the key container could not be opened and may not exist.
NTE_BAD_KEYSET_PARAM The pszContainer or pszProvider parameter is set to an illegal value.
NTE_BAD_PROV_TYPE The value of the dwProvType parameter is out of range. All provider types must be from 1 to 999, inclusive.
NTE_BAD_SIGNATURE The provider DLL signature did not verify correctly. Either the DLL or the digital signature has been tampered with.
NTE_EXISTS The dwFlags parameter is CRYPT_NEWKEYSET, but the key container already exists.
NTE_KEYSET_ENTRY_BAD The Registry entry for the pszContainer key container was found (in the HKEY_CURRENT_USER window), but is corrupt. See the section System Administration for details about CryptoAPI's Registry usage.
NTE_KEYSET_NOT_DEF No Registry entry exists in the HKEY_CURRENT_USER window for the key container specified by pszContainer.
NTE_NO_MEMORY The CSP ran out of memory during the operation.
NTE_PROV_DLL_NOT_FOUND The provider DLL file does not exist or is not on the current path.
NTE_PROV_TYPE_ENTRY_BAD The Registry entry for the provider type specified by dwProvType is corrupt. This error may relate to either the user default CSP list or the machine default CSP list. See the section System Administration for details about CryptoAPI's Registry usage.
NTE_PROV_TYPE_NO_MATCH The provider type specified by dwProvType does not match the provider type found in the Registry. Note that this error can only occur when pszProvider specifies an actual CSP name.
NTE_PROV_TYPE_NOT_DEF No Registry entry exists for the provider type specified by dwProvType.
NTE_PROVIDER_DLL_FAIL The provider DLL file could not be loaded, and may not exist. If it exists, then the file is not a valid DLL.
NTE_SIGNATURE_FILE_BAD An error occurred while loading the DLL file image, prior to verifying its signature.


Example

#include

HCRYPTPROV hProv = 0;
BYTE pbData[1000];
DWORD dwDataLen;

// Get handle to the default PROV_RSA_FULL provider.
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf("Error %x during CryptAcquireContext!\n", GetLastError());
return;
}

// Read the name of the default CSP.
dwDataLen = 1000;
if(!CryptGetProvParam(hProv, PP_NAME, pbData, &dwDataLen, 0)) {
printf("Error %x reading CSP name!\n", GetLastError());

return;
}
printf("Provider name:%s\n", pbData);

// Read the name of the default key container.
dwDataLen = 1000;
if(!CryptGetProvParam(hProv, PP_CONTAINER, pbData, &dwDataLen, 0)) {
printf("Error %x reading key container name!\n", GetLastError());
return;
}
printf("Key Container name:%s\n", pbData);

// Perform cryptographic operations.
...

// Release provider handle.
if(!CryptReleaseContext(hProv, 0)) {
printf("Error %x during CryptReleaseContext!\n", GetLastError());

return;
}

// ****************************************************************

// Get handle to the Microsoft RSA Base Provider and the
// "Foo" key container.
if(!CryptAcquireContext(&hProv, TEXT("Foo"), MS_DEF_PROV,
PROV_RSA_FULL, 0)) {
printf("Error %x during CryptAcquireContext!\n", GetLastError());
return;
}

// Perform cryptographic operations.
...

// Release provider handle.
if(!CryptReleaseContext(hProv, 0)) {

printf("Error %x during CryptReleaseContext!\n", GetLastError());
return;
}

// ****************************************************************

// Get handle to the default provider. Create a new key container
// named "Bar". Note that this key container will be empty until keys
// are explicitly created with the CryptGenKey function.
lstrcpy(szProv, );
lstrcpy(szContainer, );
if(!CryptAcquireContext(&hProv, TEXT("Bar"), NULL, PROV_RSA_FULL,
CRYPT_NEWKEYSET)) {

printf("Error %x during CryptAcquireContext!\n", GetLastError());
return;
}

// Perform cryptographic operations.
...

// Release provider handle.
if(!CryptReleaseContext(hProv, 0)) {
printf("Error %x during CryptReleaseContext!\n", GetLastError());
return;
}


See Also

CryptGenKey, CryptGetProvParam, CryptReleaseContext


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

CryptAcquireContext



[Новый - Windows NT]

[Новый - Окно 95, Выпуск Услуги OEM 2]
Функция CryptAcquireContext использована, чтобы приобретать ручку в конкретный ключевой контейнер в пределах конкретного CSP. Это возвращавшее ручку может затем использован, чтобы делать вызовами на выбранный CSP.
Эта функция выполняет два действия. Это сначала пытается находить CSP с характеристиками описанными в dwProvType и параметрах pszProvider. Если CSP обнаружен, тогда функциональные попытки, чтобы находить ключевой контейнер в пределах CSP, сочетавшийся имя определялся параметром pszContainer.

Эта функция может также использована, чтобы создавать и уничтожать ключевые контейнеры, в зависимости от величины параметра dwFlags.

BOOL CRYPTFUNC CryptAcquireContext(

HCRYPTPROV *phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags
);


Параметры

phProv

[out] адрес на котором функция копирует ручку на CSP.

pszContainer

[in] ключевое контейнерное имя. Это - расторгнутая нулевая строка, которая идентифицирует ключевой контейнер на CSP. Это зовут независимый метода использованного, чтобы хранить ключи. Некоторые CSPs сохранит их ключевые контейнеры непосредственно (в аппаратных средствах), некоторые используют системную Регистрацию, и другие используют файловую систему.
Если этот параметр НЕДЕЙСТВИТЕЛЕН, тогда встроенное ключевое контейнерное имя будет использовано. Например, если Базовый Поставщик Микрософт RSA используется, тогда имя ввода текущего пользователя будет использовано как имя ключевого контейнера. Другое CSPs может также иметь по умолчанию ключевые контейнеры, которые могут приобретаться таким образом.

Приложение может получить имя благоприобретенного ключевого контейнера впоследствии читая параметр PP_CONTAINER из функции CryptGetProvParam.

pszProvider

[in] имя поставщика. Это - расторгнутая нулевая строка, которая определяет CSP, чтобы быть использованн.

Если этот параметр НЕДЕЙСТВИТЕЛЕН, тогда по умолчанию поставщик пользователя использован. Эта ситуация обсуждается подробно в секции, связывающейся с Шифровальным Поставщиком Услуги (CSP).

Приложение может получить имя благоприобретенного CSP впоследствии читая параметр PP_NAME из функции CryptGetProvParam.

dwProvType

[in] тип поставщика, чтобы приобретаться. Следующие типы поставщика встроенные. Эти обсуждаются подробно в секции, связывающейся с Шифровальным Поставщиком Услуги (CSP).

PROV_RSA_FULL PROV_RSA_SIG PROV_DSS PROV_FORTEZZA PROV_MS_MAIL

dwFlags

[in] величины флага. Этот параметр нормально установлен в нуль, но некоторые приложения установит один (и только один) следующего флагов:

CRYPT_VERIFYCONTEXT

Если этот флаг установлен, тогда приложение будет не иметь доступ к ключевым контейнерным частным клавишам. Фактически, если pszContainer НЕДЕЙСТВИТЕЛЕН и никакой по умолчанию ключевой контейнер не присутствует, приложение будет не иметь доступ к ключевому контейнеру совсем.
Эта опция собирается быть использована приложениями чья только шифровальная необходимость должна проверить цифровые подписи. Единственные операции нормально нужно в этом случае - общественный ключевой импорт, хэш, и проверка сигнатуры.
Когда CryptAcquireContext назван, много CSPs потребует ввод из собственного пользователя перед предоставлять доступа к частным клавишам в ключевом контейнере. Например, частные клавиши могут быть закодированы, требуя пароль из пользователя прежде, чем они могут быть использованы. Тем не менее, если флаг CRYPT_VERIFYCONTEXT определен, доступ к частным клавишам не потребовался и интерфейс пользавателя может быть обойден.

CRYPT_NEWKEYSET

Если этот флаг установлен, тогда новый ключевой контейнер будет создан именем определенным pszContainer. Если pszContainer НЕДЕЙСТВИТЕЛЕН, тогда ключевой контейнер с по умолчанию именем будет создан.



Отметьтесь, что когда ключевые контейнеры созданы, наиболее CSPs автоматически не создаст любую публику/частные ключевые пары. Эти клавиши должны быть созданы как отдельный шаг с функцией CryptGenKey.



Важный Этот флаг должен только установлен административными приложениями. Нормальные приложения не должны создавать ключевые контейнеры.



CRYPT_DELETEKEYSET

Если этот флаг установлен, тогда ключевой контейнер определенный pszContainer удален. Если pszContainer НЕДЕЙСТВИТЕЛЕН, тогда ключевой контейнер с по умолчанию именем удален. Все ключевые пары в ключевом контейнере также уничтожены.
Когда флаг CRYPT_DELETEKEYSET установлен, величина возвращанная в phProv неопределенная и, таким образом, функция CryptReleaseContext не должна называться впоследствии.



Важный Этот флаг должен только установлен административными приложениями. Нормальные приложения не должны уничтожать ключевые контейнеры.



Обратные Величины

Если функция добивается успеха, обратная величина ненулевая.
Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы извлекать расширенную информацию ошибки, используйте функцию GetLastError.
Следующая таблица включает коды наиболее общей ошибки возвращанные функцией GetLastError.

Описание Ошибки
ERROR_INVALID_PARAMETER Один из параметров содержит неправильную величину. Это - чаще всего незаконный указатель.
ERROR_NOT_ENOUGH_MEMORY операционная система испытывает недостаток памяти в течение операции.
NTE_BAD_FLAGS параметр dwFlags имеет незаконную величину.
NTE_BAD_KEYSET вход Регистрации для ключевого контейнера не мог открыван и не может существовать.
NTE_BAD_KEYSET_PARAM pszContainer или параметр pszProvider установлен в незаконную величину.
NTE_BAD_PROV_TYPE величина параметра dwProvType - из дипазона. Все типы поставщика должны быть от 1 до 999, включающего.
NTE_BAD_SIGNATURE сигнатура поставщика DLL не проверяла правильно. Или DLL или цифровая подпись фальсифицирована.
NTE_EXISTS параметр dwFlags - CRYPT_NEWKEYSET, но ключевой контейнер уже существует.
NTE_KEYSET_ENTRY_BAD вход Регистрации для ключевого контейнера pszContainer был обнаружен (в окне HKEY_CURRENT_USER), но испорченый. Смотри Системную Администрацию секции о CryptoAPI's использования Регистрации.
вход No Регистрации NTE_KEYSET_NOT_DEF существует в окне HKEY_CURRENT_USER для ключевого контейнера определенного pszContainer.
NTE_NO_MEMORY CSP испытывает недостаток памяти в течение операции.
NTE_PROV_DLL_NOT_FOUND файл поставщика DLL не существует или - не в текущем пути.
NTE_PROV_TYPE_ENTRY_BAD вход Регистрации для типа поставщика определенного dwProvType испорченый. Эта ошибка может иметь отношение к или пользователь по умолчанию списка CSP или машинный по умолчанию список CSP. Смотри Системную Администрацию секции о CryptoAPI's использования Регистрации.
NTE_PROV_TYPE_NO_MATCH тип поставщика определялся dwProvType не соответствует типу поставщика обнаруженному в Регистрации. Отметьте, что эта ошибка может только произойти когда pszProvider определяет фактическое имя CSP.
вход No Регистрации NTE_PROV_TYPE_NOT_DEF существует для типа поставщика определенного dwProvType.
NTE_PROVIDER_DLL_FAIL файл поставщика DLL не мог загружан, и не может существовать. Если это существует, тогда файл - не правильный DLL.
NTE_SIGNATURE_FILE_BAD ошибка происходила при загрузке файлового образа DLL, до проверяющей сигнатуры.


Пример

#include

HCRYPTPROV hProv = 0;
БАЙТ pbData[1000];
DWORD dwDataLen;

// Получите ручку по умолчанию поставщику PROV_RSA_FULL.
если(!CryptAcquireContext(&hProv, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError());
возврат;
}

// Прочитанный имя по умолчанию CSP.
dwDataLen = 1000;
если(!CryptGetProvParam(hProv, PP_NAME, pbData, &dwDataLen, 0)) { printf("Error %x ЧИТАЯ CSP name!\n", GetLastError());

возврат;
}
printf(имя "Provider:%s\n", pbData);

// Прочитанный имя по умолчанию ключевого контейнера.
dwDataLen = 1000;
если(!CryptGetProvParam(hProv, PP_CONTAINER, pbData, &dwDataLen, 0)) { printf("Error %x ЧИТАЯ ключевой контейнер name!\n", GetLastError());
возврат;
}
printf(имя Контейнера "Key:%s\n", pbData);

// Выполните шифровальные операции.
...

// Ручка поставщика Версии.
если(!CryptReleaseContext(hProv, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptReleaseContext!\n", GetLastError());

возврат;
}

// ****************************************************************

// Получите ручке Базовому Поставщику Микрософт RSA и // ключевой контейнер "Foo".
если(!CryptAcquireContext(&hProv, ТЕКСТ("Foo"), MS_DEF_PROV, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError());
возврат;
}

// Выполните шифровальные операции.
...

// Ручка поставщика Версии.
если(!CryptReleaseContext(hProv, 0)) {

printf("Error %x в течение CryptReleaseContext!\n", GetLastError());
возврат;
}

// ****************************************************************

// Получите ручку по умолчанию поставщику. Создайте новый ключевой контейнер // поименованная "Зона". Отметьте, что этот ключевой контейнер будет пустым пока клавиши // явно не будут созданы функцией CryptGenKey.
lstrcpy(szProv, );
lstrcpy(szContainer, );
если(!CryptAcquireContext(&hProv, ТЕКСТ("Bar"), НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, CRYPT_NEWKEYSET)) {

printf("Error %x в течение CryptAcquireContext!\n", GetLastError());
возврат;
}

// Выполните шифровальные операции.
...

// Ручка поставщика Версии.
если(!CryptReleaseContext(hProv, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptReleaseContext!\n", GetLastError());
возврат;
}


Смотри Также

CryptGenKey, CryptGetProvParam, CryptReleaseContext


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz