Статус: Новичок
Группы: Участники
Зарегистрирован: 09.09.2010(UTC) Сообщений: 7 Откуда: Москва
|
Кирилл, не могли бы подсказать, имея вот такой вот код: Код:procedure TfCheck.btCheckClick(Sender: TObject);
var
hProv: HCRYPTPROV;
Prov:PAnsiChar;
hKey: HCRYPTKEY;
pbData: PBYTE;
cpbData:PAnsiChar;
cbData, Flag:Cardinal;
str:String;
pbUserCert:PBYTE;
dwUserCertLength:Cardinal;
begin
memo1.Clear;
hKey:=0;
hProv:=0;
Prov:='Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider';
if not CryptAcquireContextA(@hProv, nil, Prov, 75, CRYPT_VERIFYCONTEXT) then
Begin
showmessage('Err - if 1 CryptAcquireContext')
end
else
begin
Flag := CRYPT_FIRST;
if CryptGetProvParam(hProv, PP_ENUMCONTAINERS, nil, @cbData, Flag) then
begin
GetMem(pbData, cbData);
try
while CryptGetProvParam(hProv, PP_ENUMCONTAINERS, pbData, @cbData, Flag) do
begin
cpbData:=PAnsiChar(pbData);
if not CryptAcquireContextA(@hProv, cpbData, Prov, 75, 0) then
ShowMessage('Не прицепились к контейнеру');
Flag := CRYPT_NEXT;
memo1.Lines.Add(PAnsiChar(pbData));
if not CryptGetUserKey(hProv,AT_KEYEXCHANGE, @hKey) then
ShowMessage('CryptGetUserKey Error');
if not CryptGetKeyParam(hKey,KP_CERTIFICATE ,nil,@dwUserCertLength,0) then
ShowMessage('CryptGetUserPeram Error');
GetMem(pbUserCert,dwUserCertLength);
if not CryptGetKeyParam(hKey,KP_CERTIFICATE ,pbUserCert,@dwUserCertLength,0)
then ShowMessage('Get Cert_SN Error');
memo1.Lines.Add((PWideChar(pbUserCert)));
end;
finally
FreeMem(pbData, cbData);
FreeMem(pbUserCert,dwUserCertLength);
end;
end;
end;
end;
Я получаю вот это на выходе, если в memo переводить как PWideChar, Там проскакивет имя владельца сертификата. При других типах подобная белибирда. (Первая строка, - это имя контейнера на дискете) Вот как из этого получить серийник, ну и имя владельца чтоли? Это вобще возможно с данным кодом?
|