共用方式為


HttpReceiveClientCertificate 函式 (HTTP.h)

伺服器應用程式會使用 HttpReceiveClientCertificate 函式來擷取用戶端 SSL 憑證或通道系結權杖, (CBT) 。

語法

HTTPAPI_LINKAGE ULONG HttpReceiveClientCertificate(
  [in]            HANDLE                     RequestQueueHandle,
  [in]            HTTP_CONNECTION_ID         ConnectionId,
  [in]            ULONG                      Flags,
  [out]           PHTTP_SSL_CLIENT_CERT_INFO SslClientCertInfo,
  [in]            ULONG                      SslClientCertInfoSize,
  [out, optional] PULONG                     BytesReceived,
  [in, optional]  LPOVERLAPPED               Overlapped
);

參數

[in] RequestQueueHandle

與指定的 SSL 用戶端或 CBT 相關聯的要求佇列控制碼。 系統會建立要求佇列,並透過呼叫 HttpCreateRequestQueue 函式所傳回的控制碼。

Windows Server 2003 SP1 和 Windows XP SP2: 要求佇列的控制碼是由 HttpCreateHttpHandle 函式所建立。

[in] ConnectionId

識別用戶端連線的 值。 這個值是從HttpReceiveHttpRequest函式填入之HTTP_REQUEST結構的ConnectionId元素取得。

[in] Flags

值,修改 HttpReceiveClientCertificate 函式的行為

意義
HTTP_RECEIVE_SECURE_CHANNEL_TOKEN
0x1
pSslClientCertInfo參數會填入 CBT 資料。

Windows 7、Windows Server 2008 R2 及更新版本支援此值。

[out] SslClientCertInfo

如果 Flags 參數為 0,則此參數會指向函式寫入所要求用戶端憑證資訊的 HTTP_SSL_CLIENT_CERT_INFO 結構。 pSslClientCertInfo所指向的緩衝區應該夠大,足以保存HTTP_SSL_CLIENT_CERT_INFO結構加上這個結構的CertEncodedSize成員的值。

如果 Flags 參數 HTTP_RECEIVE_SECURE_CHANNEL_TOKEN,則此參數會指向函式寫入所要求 CBT 資訊的 HTTP_REQUEST_CHANNEL_BIND_STATUS 結構。 pSslClientCertInfo所指向的緩衝區應該夠大,足以保存HTTP_REQUEST_CHANNEL_BIND_STATUS結構加上這個結構的ChannelTokenSize成員值。

[in] SslClientCertInfoSize

pSslClientCertInfo參數所指向之緩衝區的大小,以位元組為單位。

[out, optional] BytesReceived

變數的選擇性指標,可接收 要寫入 pSslClientCertInfo所指向之結構的位元組數目。 如果未使用,請將它設定為 Null

使用 pOverlapped進行非同步呼叫時,請將 pBytesReceived 設定為 Null。 否則,當 pOverlapped 設定為 Null時, pBytesReceived 必須包含有效的記憶體位址,而且不會設定為 Null

[in, optional] Overlapped

針對非同步呼叫,請將 pOverlapped 設定為指向 重迭 結構,或針對同步呼叫,將它設定為 Null

同步呼叫會封鎖直到擷取用戶端憑證為止,而非同步呼叫會立即傳回 ERROR_IO_PENDING ,然後呼叫應用程式會使用 GetOverlappedResult 或 I/O 完成埠來判斷作業何時完成。 如需使用 OVERLAPPED 結構進行同步處理的詳細資訊,請參閱 同步處理和重迭輸入和輸出一節。

傳回值

意義
NO_ERROR
此函數已成功。

所有資料都已寫入 pSslClientCertInfo 參數所指向的緩衝區。 NumberOfBytesTransferred指出已寫入緩衝區的位元組數目。

ERROR_IO_PENDING
函式正以非同步方式使用。 作業已起始,稍後會透過一般的重迭 I/O 完成機制完成。
ERROR_INVALID_PARAMETER
一或多個提供的參數無效。
ERROR_INSUFFICIENT_BUFFER
pSslClientCertInfo參數所指向的緩衝區太小,無法接收資料,而且未寫入任何資料。
ERROR_MORE_DATA
pSslClientCertInfo參數所指向的緩衝區不夠大,無法接收所有資料。 只有基本結構已寫入,而且只會部分填入。

當 Flags參數為 0 時,HTTP_SSL_CLIENT_CERT_INFO結構已填入CertEncodedSize成員。 呼叫端應該使用至少以位元組為單位的 HTTP_SSL_CLIENT_CERT_INFO結構大小 加上 CertEncodedSize 成員的值,再次呼叫函式。

Flags參數HTTP_RECEIVE_SECURE_CHANNEL_TOKEN時,已使用填入ChannelTokenSize成員來撰寫HTTP_REQUEST_CHANNEL_BIND_STATUS結構。 呼叫端應該使用至少大小,以位元組為單位的緩衝區來呼叫函式, HTTP_REQUEST_CHANNEL_BIND_STATUS加上ChannelTokenSize 成員的值。

ERROR_NOT_FOUND
函式找不到用戶端憑證或 CBT。
其他
WinError.h標頭檔中定義的系統錯誤碼

備註

HttpReceiveClientCertificate函式的行為會根據要求用戶端 SSL 憑證或通道系結權杖而有所不同。

對 HttpReceiveClientCertificate 函式進行同步呼叫的情況下,所收到的位元組數目會在 pBytesReceived 參數所指向的值中傳回。

HttpReceiveClientCertificate 函式的非同步呼叫案例中,接收的位元組數目是由用於非同步呼叫的標準機制所傳回。 GetOverlappedResult函式傳回的lpNumberOfBytesTransferred參數包含收到的位元組數目。

需求

   
最低支援的用戶端 Windows Vista、Windows XP 與 SP2 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 HTTP.h
程式庫 Httpapi.lib
Dll Httpapi.dll

另請參閱

GetOverlappedResult

HTTP 伺服器 API 1.0 版函式

HTTP_REQUEST

HTTP_REQUEST_CHANNEL_BIND_STATUS

HTTP_SSL_CLIENT_CERT_INFO

重疊

同步處理和重迭的輸入和輸出