请帮忙看看这段程序,100分回报!
请问以下这段程序是什么语言编写的?该怎样编译运行?
---------------------------------
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#define MY_TYPE (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)
void HandleError(char *s);
void main ()
{
/////////////////////////////////////////////////////////////////////////
//打开库
HCRYPTPROV hCryptProv;
HCERTSTORE hSysStore;
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
if(hSysStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
hCryptProv,
CERT_SYSTEM_STORE_CURRENT_USER,
L"MY"
))
{
printf("===================================================\n");
}
else
{
HandleError("打开证书库失败\n");
}
}
else
{
HandleError("获取库句柄失败\n");
}
////////////////////////////////////////////////////////////////////////////
//枚举系统证书库
PCCERT_CONTEXT pCertContext=NULL;
while(pCertContext= CertEnumCertificatesInStore(
hSysStore,
pCertContext))
{
////////////////////////////////////////////////////////////////
//取颁发者
char Issuer[256];
CertGetNameString(
pCertContext,
CERT_NAME_RDN_TYPE,
CERT_NAME_ISSUER_FLAG,
NULL,
Issuer,
128);
printf("==颁发者\n==> %s\n",Issuer);
///////////////////////////////////////////////////////////////
//取主题
char Subject[256];
CertGetNameString(
pCertContext,
CERT_NAME_RDN_TYPE,
0,NULL,
Subject,
128);
printf("==主题\n==> %s\n",Subject);
//////////////////////////////////////////////////////////////
//取证书有效终止期
FILETIME *lpFileTime[2];
SYSTEMTIME stime[2];
lpFileTime[1] = (FILETIME *)malloc(sizeof(pCertContext-> pCertInfo-> NotBefore));
lpFileTime[2] = (FILETIME *)malloc(sizeof(pCertContext-> pCertInfo-> NotAfter));
lpFileTime[1]-> dwHighDateTime=pCertContext-> pCertInfo-> NotBefore.dwHighDateTime;
lpFileTime[2]-> dwHighDateTime=pCertContext-> pCertInfo-> NotAfter.dwHighDateTime;
lpFileTime[1]-> dwLowDateTime=pCertContext-> pCertInfo-> NotBefore.dwLowDateTime;
lpFileTime[2]-> dwLowDateTime=pCertContext-> pCertInfo-> NotAfter.dwLowDateTime;
FileTimeToSystemTime(lpFileTime[1],&stime[1]);
FileTimeToSystemTime(lpFileTime[2],&stime[2]);
printf("==有效期起始日期\n==>%d-%d-%d %d时:%d分:%d秒 \n",stime[1].wYear,stime[1].wMonth,stime[1].wDay,stime[1].wHour,stime[1].wMinute,stime[1].wSecond);
printf("==有效期终止日期\n==>%d-%d-%d %d时:%d分:%d秒 \n",stime[2].wYear,stime[2].wMonth,stime[2].wDay,stime[2].wHour,stime[2].wMinute,stime[2].wSecond);
/////////////////////////////////////////////////////////////////////////////////////
//取序列号
CRYPT_INTEGER_BLOB SerialNumber;
if(CryptFormatObject(
MY_TYPE,
0,
0,
NULL,
0,
pCertContext->pCertInfo ->SerialNumber .pbData ,
pCertContext->pCertInfo ->SerialNumber .cbData ,
NULL,
&SerialNumber.cbData ))
{
if(SerialNumber.pbData = (BYTE *)malloc(SerialNumber.cbData ))
{
if(CryptFormatObject(
MY_TYPE,
0,
0,
NULL,
0,
pCertContext->pCertInfo ->SerialNumber .pbData ,
pCertContext->pCertInfo ->SerialNumber .cbData ,
SerialNumber.pbData ,
&SerialNumber.cbData ))
{
printf("==序列号\n==>%S\n",SerialNumber.pbData );
}
else
{
HandleError("Error\n");
}
}
else
{
HandleError("Error\n");
}
}
else
{
HandleError("Error\n");
}
////////////////////////////////////////////////////////////////////////////////////////
//取公钥
CRYPT_BIT_BLOB PublicKey;
if(CryptFormatObject(
MY_TYPE,
0,
0,
NULL,
0,
pCertContext->pCertInfo ->SubjectPublicKeyInfo .PublicKey .pbData ,
pCertContext->pCertInfo ->SubjectPublicKeyInfo .PublicKey .cbData ,
NULL,
&PublicKey.cbData ))
{
if(PublicKey.pbData = (BYTE *)malloc(PublicKey.cbData ))
{
if(CryptFormatObject(
MY_TYPE,
0,
0,
NULL,
0,
pCertContext->pCertInfo ->SubjectPublicKeyInfo .PublicKey .pbData ,
pCertContext->pCertInfo ->SubjectPublicKeyInfo .PublicKey .cbData ,
PublicKey.pbData ,
&PublicKey.cbData ))
{
printf("==公钥\n==>%S\n",PublicKey.pbData );
}
else
{
HandleError("Error\n");
}
}
else
{
HandleError("Error\n");
}
}
else
{
HandleError("Error\n");
}
//////////////////////////////////////////////////////////////////////////////////////
printf("===================================================\n");
} // End of while
CertCloseStore(
hSysStore,
CERT_CLOSE_STORE_CHECK_FLAG);
CryptReleaseContext(
hCryptProv,
0);
}
void HandleError(char *s)
{
fprintf(stderr,"在运行程序时出现错误. \n");
fprintf(stderr,"%s\n",s);
fprintf(stderr, "错误代号 %x.\n", GetLastError());
fprintf(stderr, "程序终止运行. \n");
exit(1);
} // End of HandleError