ICertServerPolicy::SetCertificateProperty 方法 (certif.h)
使用 SetCertificateProperty 方法來設定與憑證相關聯的屬性。
語法
HRESULT SetCertificateProperty(
[in] const BSTR strPropertyName,
[in] LONG PropertyType,
[in] const VARIANT *pvarPropertyValue
);
參數
[in] strPropertyName
指定要設定的屬性。 您可以設定與憑證相關聯的任何 名稱屬性 。
此外,您可以設定下列憑證屬性。
值 | 意義 |
---|---|
|
憑證在指定的日期之前無效。 |
|
憑證在指定的日期之後無效。 |
|
將此屬性設定為 0x00000400,以防止要求保存在 CA 資料庫中。
謹慎 設定此屬性時,請勿覆寫 GetCertificateProperty 傳回的任何遮罩值。 藉由使用現有值執行位 OR 來設定值。
|
|
布爾值,指定 CA 是否應該跨樹系註冊模式運作。
Windows Server 2008 和 Windows Server 2003: 不支援跨樹系註冊。 從 Windows Server 2008 R2 開始,支援跨樹系註冊。 |
|
指示 CA 設定要求者帳戶名稱 (“RequesterName”) 和辨別名稱。 |
|
指示 CA 將要求者 的使用者主體名稱 (UPN) 轉換成要求者名稱 (“RequesterName”) ,以及設定要求者名稱和要求者辨別名稱。 |
|
告知 CA 將要求者的 FQDN 1779 名稱轉換為要求者名稱,並將要求者名稱設定為 (“RequesterName”) 和要求者辨別名稱。 |
[in] PropertyType
指定所設定屬性的類型。 Type 參數必須同意 VARIANT 結構的 vt 字段中所設定的 pvarValue 數據類型。 Type 參數可以設定為下列其中一種類型。
值 | 意義 |
---|---|
|
帶正負號的長數據。 |
|
日期/時間數據。 |
|
二進位數據。 |
|
Unicode 字串數據 |
[in] pvarPropertyValue
指定要將 屬性設定為 的值。
傳回值
VB
如果方法成功,方法會傳回S_OK。如果方法失敗,它會傳回 HRESULT 值,指出錯誤。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值。
備註
您必須在使用此方法之前呼叫 ICertServerPolicy::SetContext 。
NotBefore 和 NotAfter 憑證屬性會限制憑證有效期間的存留期。 這些屬性的數據類型是衍生自 Automation 中 COleDateTime 的浮點 VARIANT 日期。
使用 SetCertificateProperty 設定 NotBefore 和 NotAfter 憑證屬性時,適用下列限制:
- NotBefore 日期不能設定為早於 證書頒發機構單位 的日期, (CA) 憑證的 NotBefore 日期。
- NotAfter 日期不能設定為晚於 CA 憑證的 NotAfter 日期的日期。
- NotBefore 日期不能設定為早於已設定的日期,即使新日期晚於 CA 憑證的 NotBefore 日期也一樣。
- NotAfter 日期不能設定為早於已設定的日期,即使新日期在 CA 憑證的 NotAfter 日期之前也一樣。
範例
下列範例會呼叫 SetCertificateProperty 方法來設定 NotBefore 憑證屬性。 此範例假設 pServer 有效,而且已呼叫 ICertServerPolicy::SetContext 方法。
HRESULT hr;
ICertServerPolicy *pServer;
SYSTEMTIME st;
BSTR bstrPropName;
VARIANT vPropValue;
bstrPropName = SysAllocString(L"NotBefore");
if (NULL == bstrPropName)
{
printf("Unable to allocate memory.\n");
return E_OUTOFMEMORY;
}
// Set the 'NotBefore' property to Noon on Jan. 1, 2000.
memset( &st, 0, sizeof(SYSTEMTIME));
st.wYear = 2000;
st.wMonth = 1; // Jan.
st.wDay = 1; // 1st day of month.
st.wHour = 12; // Noon.
// Place the date into VARIANT required format.
VariantInit( &vPropValue );
vPropValue.vt = VT_DATE;
if ( !SystemTimeToVariantTime( &st, &vPropValue.date))
{
printf("Unable to convert time.\n");
SysFreeString(bstrPropName);
return E_FAIL
}
// Set the NotBefore property in the certificate:
hr = pServer->SetCertificateProperty(bstrPropName,
PROPTYPE_DATE,
&vPropValue);
SysFreeString(bstrPropName);
VariantClear(&vPropValue);
if (FAILED(hr))
{
printf("SetCertificateProperty failed [%x]\n", hr);
return hr;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 都不支援 |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | certif.h (包括 Certsrv.h) |
程式庫 | Certidl.lib |
Dll | Certcli.dll |