DWORD dwIndex,
DWORD *pdwReserved,
DWORD dwFlags,
DWORD *pdwProvType,
LPTSTR pszProvName, //指向接收CSP 名称的缓冲区字符串指针。此指针可为NULL,用来得到字符串的大小。
DWORD *pcbProvName //[in/out]指出pszProvName 字符串的大小。
);
pcbProvName 参数
作为输入,表示pszProvName缓冲区的大小。如果给予的缓冲区大小小于得到的CSP名称的长度,函数会返回0结束。如果循环得到机器内部的CSP的话,每次送入此参数需要变更值。
作为输出,表示最终得到的CSP名称的长度
还有dwIndex不会自动往后加。
eg。
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <WinCrypt.h>
int TestCSP()
{
DWORD dwIndex = 0;
DWORD dwType;
DWORD cbNameLen;
LPWSTR pszName;
DWORD i = 0;
//查看机器中所有的CSP
pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, 256);
cbNameLen = 256;
while(CryptEnumProviders(dwIndex++, NULL, 0,&dwType, pszName, &cbNameLen))
{
wprintf(L" %4.0d\tlen=%d\t%s\n", dwType,cbNameLen, pszName);
cbNameLen = 256; //这里要加这个
}
LocalFree(pszName);
return 0;
}
void main()
{
TestCSP();
}