CryptoAPI の CERT_CHAIN_ENGINE_CONFIG 構造体 の Windows 7 /Windows Server 2008 R2 での拡張

Windows の CryptoAPIに、証明書パスエンジンを作成する CertCreateCertificateChainEngine というAPIがある。

CertCreateCertificateChainEngine Function (Windows)
http://msdn.microsoft.com/en-us/library/aa376032%28VS.85%29.aspx

このAPIの引数になっている CERT_CHAIN_ENGINE_CONFIG 構造体 は Windows 7 と Windows Server 2008 R2 対応の SDK (V7.0)で拡張が行われた。

--

typedef struct _CERT_CHAIN_ENGINE_CONFIG {

DWORD       cbSize;
    HCERTSTORE  hRestrictedRoot;
    HCERTSTORE  hRestrictedTrust;
    HCERTSTORE  hRestrictedOther;
    DWORD       cAdditionalStore;
    HCERTSTORE* rghAdditionalStore;
    DWORD       dwFlags;
    DWORD       dwUrlRetrievalTimeout;      // milliseconds
    DWORD       MaximumCachedCertificates;
    DWORD       CycleDetectionModulus;

#if (NTDDI_VERSION >= NTDDI_WIN7)
    HCERTSTORE  hExclusiveRoot;
    HCERTSTORE  hExclusiveTrustedPeople;
#endif

} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;

CERT_CHAIN_ENGINE_CONFIG Structure (Windows)
http://msdn.microsoft.com/en-us/library/aa377184(v=VS.85).aspx

hExclusiveRoot と hExclusiveTrustedPeople メンバは、
> Windows Server 2008, Windows Vista, Windows Server 2003, Windows XP, and Windows 2000:  This member is not supported.

上記の赤い部分はSDK 7.0 のベータ段階では含まれてなかったので、(無いとは思うけど)ベータ段階である程度の実装/テストを終えているような場合は見直し・注意が必要だ。

下記のように構造体を初期化しているならば、OSのバージョンが違ってもAPIの動作には特に影響はないはずだ。
※通常、APIは cbSize の値をきちんと見ているはずなのでSecureZeroMemoryによる初期化は無くても良いと思う。ちなみにMSのAPIサンプルにも入ってない。だが SecureZeroMemory は速度優先部分でないのであれば入れておいても良いと思う。自分は殆どの場合入れてる。

--

// 検証エンジンの作成
CERT_CHAIN_ENGINE_CONFIG ChainConfig;
::SecureZeroMemory(&ChainConfig, sizeof (CERT_CHAIN_ENGINE_CONFIG));
ChainConfig.cbSize                        = sizeof (CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.hRestrictedRoot               = NULL;
ChainConfig.hRestrictedTrust              = NULL;
ChainConfig.hRestrictedOther              = NULL;
ChainConfig.cAdditionalStore              = 0;
ChainConfig.rghAdditionalStore            = NULL;
ChainConfig.dwFlags                       = dwFlagsCreateConfig;
ChainConfig.dwUrlRetrievalTimeout         = 0;
ChainConfig.MaximumCachedCertificates     = 0;
ChainConfig.CycleDetectionModulus         = 0;

// 「証明書パスエンジン」を作成する
if (::CertCreateCertificateChainEngine(&ChainConfig, phChainEngine))
{

SecureZeroMemory function (Windows)
http://msdn.microsoft.com/ja-jp/library/windows/desktop/aa366877%28v=vs.85%29.aspx

Livedoor タグ: ,,,

Soapツールキット から Windows Web サービス (WWS) API へ / Windows 7 & Windows Server 2008 R2

今まで各種Webサービスと連携するようなシステムを.NETを使用しない C/C++ライブラリ (Soapツールキット) で作ろうとすると非常に大変であった。

それが下記のMSDN マガジン Novemberの記事によると変わるようだ。

Windows Web サービス / (MSDN マガジン > Home > 発行物 > 2009 > MSDN マガジン November 2009)
http://msdn.microsoft.com/ja-jp/magazine/ee335693.aspx

> マイクロソフトのさまざまなチームが既に、担当の製品やテクノロジの中で Windows Web サービス (WWS) API を採用し始めています。
> 多くの場合、WWS は、カスタムメイドの SOAP スタックの代わりに使用されるようになっています。
> また、Windows Communication Foundation (WCF) のような商用の実装を WWS に置き換えることにしたチームまでありました。
> ほんのいくつかの例をご紹介します。

WWS APIを使用した場合のパフォーマンスはWCFよりもかなり良いようだ。

図 1 クライアントのワーキング セットの比較 (値が小さいほど良い)
http://i.msdn.microsoft.com/ee335693.Kerr_figure1(en-us).png

図 2 サーバー スループットの比較 (値が大きいほど良い)
http://i.msdn.microsoft.com/ee335693.Kerr_figure2(en-us).png

関連情報:

Windows Web Services API (Windows)
http://msdn.microsoft.com/en-us/library/dd430435(VS.85).aspx

Windows Web Services API フォーラム
http://social.msdn.microsoft.com/Forums/ja-JP/wwsapi/threads

営業部から: ☆ パフォーマンスを追求したシステムの構築、Windows Native を 理解した アプリケーション開発は、弊社営業部までお問い合わせください。☆