SOL9 2.0 Class: CertSignerInfoDialog

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * CertSignerInfoDialog.h 
 * Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2009/04/02
// Modified show method;the second parameter hMsg not to take a default NULL value.

#pragma once

#include <sol/crypt/CertDialog.h>

namespace SOL {

typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCT {
  DWORD            dwSize;
  HWND             hwndParent;
  DWORD            dwFlags;
  LPCTSTR          szTitle;
  CMSG_SIGNER_INFO *pSignerInfo;
  HCRYPTMSG        hMsg;
  LPCSTR           pszOID;
  DWORD_PTR        dwReserved;
  DWORD            cStores;
  HCERTSTORE *      rghStores;
  DWORD            cPropSheetPages;
  LPCPROPSHEETPAGE rgPropSheetPages;
} CRYPTUI_VIEWSIGNERINFO_STRUCT;

BOOL WINAPI CryptUIDlgViewSignerInfo(
  __in  CRYPTUI_VIEWSIGNERINFO_STRUCT *pcvsi
);

typedef BOOL (WINAPI *FNCryptUIDlgViewSignerInfo)(CRYPTUI_VIEWSIGNERINFO_STRUCT *);

class CertSignerInfoDialog :public CertDialog {

private:
    CRYPTUI_VIEWSIGNERINFO_STRUCT signerInfo;
    HMODULE   hModule;
    FNCryptUIDlgViewSignerInfo cryptUIDlgViewSignerInfo;

public:
    /**
     * Constructor
     */
    CertSignerInfoDialog(HWND hParent = NULL)
    :CertDialog(hParent),
    hModule(NULL),
    cryptUIDlgViewSignerInfo(NULL)
    {
        memset(&signerInfo, 0, sizeof(signerInfo));
        signerInfo.dwSize = sizeof(signerInfo);
        this->hModule = LoadLibrary(_T("cryptui.dll"));
        if (this->hModule) {
            this->cryptUIDlgViewSignerInfo = 
                    (FNCryptUIDlgViewSignerInfo)GetProcAddress(this->hModule,  "CryptUIDlgViewSignerInfoW");
            if (this->cryptUIDlgViewSignerInfo == NULL) {
                FreeLibrary(this->hModule);
                throw GetLastError();
            } else {
                ;//OK
            }
        } else {
            throw GetLastError();
        }
    }    


public:
    /**
     * Destructor
     */
    ~CertSignerInfoDialog()
    {
        if (this->hModule) {
            FreeLibrary(this->hModule);
            this->hModule = NULL;
        }
    }

public:

    // 2009/04/02
    // Modified the second parameter hMsg not to take a default NULL value.
    int show(
            __in CMSG_SIGNER_INFO *pSignerInfo,
            __in HCRYPTMSG        hMsg,
            __in LPCSTR           pszOID = NULL,
            __in DWORD dwFlags=0)
    {
        int rc = NO_ERROR;

        HWND hParent = getParent();
        signerInfo.hwndParent = hParent;
        signerInfo.dwFlags = dwFlags;
        signerInfo.pSignerInfo = pSignerInfo;
        signerInfo.hMsg        = hMsg;
        signerInfo.pszOID      = pszOID;

        if (!cryptUIDlgViewSignerInfo(&signerInfo)) {
            rc = GetLastError();
        }
        return rc;
    }
};

}


Last modified: 19 Dec 2009

Copyright (c) 2009 Antillia.com ALL RIGHTS RESERVED.