Win32 API 中的 IAlternativeNames 接口位于 Certenroll.h 头文件中,用于在证书请求或证书中存储替代名称(Alternative Names)。替代名称通常用于指定与主题不同的标识信息,如 Subject Alternative Name (SAN) 扩展。

以下是关于 IAlternativeNames 接口的一些基本信息:

1. 接口定义
MIDL_INTERFACE("7b84965c-ea82-4713-ba4c-c65db267e384")
IAlternativeNames : public IDispatch
{
public:
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Initialize( 
        /* [in] */ EncodingType Encoding) = 0;
    
    virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Count( 
        /* [retval][out] */ LONG *pValue) = 0;
    
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add( 
        /* [in] */ EncodingType Encoding,
        /* [in] */ __RPC__in BSTR strType,
        /* [in] */ __RPC__in BSTR strValue) = 0;
    
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Remove( 
        /* [in] */ LONG Index) = 0;
    
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Clear( void) = 0;
    
    virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item( 
        /* [in] */ LONG Index,
        /* [retval][out] */ __RPC__deref_out_opt BSTR *pstrType) = 0;
    
    virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Value( 
        /* [in] */ LONG Index,
        /* [retval][out] */ __RPC__deref_out_opt BSTR *pstrValue) = 0;
    
    virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_NameType( 
        /* [retval][out] */ __RPC__out LONG *pValue) = 0;
    
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddRange( 
        /* [in] */ EncodingType Encoding,
        /* [in] */ __RPC__in_opt VARIANT *pvarNames) = 0;
};

2. 方法说明
   - Initialize: 初始化替代名称。
   - get_Count: 获取替代名称的数量。
   - Add: 向替代名称列表中添加一个新的替代名称。
   - Remove: 移除指定索引处的替代名称。
   - Clear: 清空替代名称列表。
   - get_Item: 获取指定索引处替代名称的类型。
   - get_Value: 获取指定索引处替代名称的值。
   - get_NameType: 获取替代名称的类型。
   - AddRange: 向替代名称列表中添加一组替代名称。

3. 使用示例
// 创建 IAlternativeNames 接口实例
IAlternativeNamesPtr pAltNames;
HRESULT hr = pAltNames.CreateInstance(__uuidof(AlternativeNames));

// 初始化替代名称
hr = pAltNames->Initialize(XCN_CRYPT_STRING_BASE64);

// 添加替代名称
hr = pAltNames->Add(XCN_CRYPT_STRING_BASE64, L"DNS", L"www.example.com");

// 获取替代名称数量
LONG count;
hr = pAltNames->get_Count(&count);

// 获取替代名称信息
BSTR type, value;
hr = pAltNames->get_Item(0, &type);
hr = pAltNames->get_Value(0, &value);

// 清空替代名称列表
hr = pAltNames->Clear();

请注意,上述示例代码中的具体值和参数可能需要根据实际需求进行调整。此接口主要用于处理证书中的替代名称信息,例如在创建证书请求时指定主体替代名称。


转载请注明出处:http://www.zyzy.cn/article/detail/24181/Win32 API/Certenroll.h/IAlternativeNames