ICertServerPolicy::SetCertificateProperty 方法 (certif.h)

使用 SetCertificateProperty 方法來設定與憑證相關聯的屬性。

語法

HRESULT SetCertificateProperty(
  [in] const BSTR    strPropertyName,
  [in] LONG          PropertyType,
  [in] const VARIANT *pvarPropertyValue
);

參數

[in] strPropertyName

指定要設定的屬性。 您可以設定與憑證相關聯的任何 名稱屬性

此外,您可以設定下列憑證屬性。

意義
NotBefore
Date/time
憑證在指定的日期之前無效。
NotAfter
Date/time
憑證在指定的日期之後無效。
GeneralFlags
將此屬性設定為 0x00000400,以防止要求保存在 CA 資料庫中。
謹慎 設定此屬性時,請勿覆寫 GetCertificateProperty 傳回的任何遮罩值。 藉由使用現有值執行位 OR 來設定值。
 
Windows Storage Server 2003: 不支援此欄位。
CrossForest
PROPTYPE_LONG
布爾值,指定 CA 是否應該跨樹系註冊模式運作。

Windows Server 2008 和 Windows Server 2003: 不支援跨樹系註冊。 從 Windows Server 2008 R2 開始,支援跨樹系註冊。

RequesterSAMName
PROPTYPE_STRING
指示 CA 設定要求者帳戶名稱 (“RequesterName”) 和辨別名稱。
RequesterUPN
PROPTYPE_STRING
指示 CA 將要求者 的使用者主體名稱 (UPN) 轉換成要求者名稱 (“RequesterName”) ,以及設定要求者名稱和要求者辨別名稱。
RequesterDN
PROPTYPE_STRING
告知 CA 將要求者的 FQDN 1779 名稱轉換為要求者名稱,並將要求者名稱設定為 (“RequesterName”) 和要求者辨別名稱。

[in] PropertyType

指定所設定屬性的類型。 Type 參數必須同意 VARIANT 結構的 vt 字段中所設定的 pvarValue 數據類型。 Type 參數可以設定為下列其中一種類型。

意義
PROPTYPE_LONG
帶正負號的長數據。
PROPTYPE_DATE
日期/時間數據。
PROPTYPE_BINARY
二進位數據。
PROPTYPE_STRING
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

另請參閱

ICertServerExit::GetCertificateProperty

ICertServerPolicy

ICertServerPolicy::SetContext

名稱屬性