SOL9 2.0 Class: CertPhysicalStore

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

Source code

/*
 * CertPhysicalStore.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


//2009/03/13

#pragma once

#include <sol/Object.h>
#include <wincrypt.h>


namespace SOL {

/*
typedef struct _CERT_PHYSICAL_STORE_INFO {
  DWORD               cbSize;
  LPSTR               pszOpenStoreProvider;
  DWORD               dwOpenEncodingType;
  DWORD               dwOpenFlags;
  CRYPT_DATA_BLOB     OpenParameters;
  DWORD               dwFlags;
  DWORD               dwPriority;
} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
*/

class CertPhysicalStore :public Object {

private:
    static BOOL WINAPI enumPhysicalStoreCallback(const void *pvSystemStore, 
            DWORD dwFlags, 
            LPCWSTR pwszStoreName, 
            PCERT_PHYSICAL_STORE_INFO pStoreInfo, 
            void *pvReserved, 
            void *pvArg) 
    {
        //
        BOOL rc = FALSE;
        CertPhysicalStore* physicalStore = (CertPhysicalStore*)pvArg;
        if (physicalStore) {
            physicalStore->enumerate(pvSystemStore, dwFlags, pwszStoreName,
                pStoreInfo,
                pvReserved);
            rc = TRUE;
        }
        return rc;
    }

public:
    /**
     * Constructor
     */
    CertPhysicalStore()
    {
        //
    }

public:
    void enumStore(const TCHAR* name,
            DWORD flags=CERT_SYSTEM_STORE_CURRENT_USER) 
    {

        CertEnumPhysicalStore(name, 
            CERT_SYSTEM_STORE_CURRENT_USER, this,
             enumPhysicalStoreCallback);
        
    }

public:

    virtual void enumerate(const void *pvSystemStore, 
        DWORD dwFlags, 
        LPCWSTR pwszStoreName, 
        PCERT_PHYSICAL_STORE_INFO pStoreInfo, 
        void *pvReserved) 
    {
        //Do something
        //_tprintf(_T("Provider=%S, StoreName=%S\n"),
        //2009/11/10
        wprintf(L"Provider=%S, StoreName=%s\n",

            pStoreInfo->pszOpenStoreProvider,
            pwszStoreName);

        HCERTSTORE hStore = CertOpenStore(pStoreInfo->pszOpenStoreProvider, 
            pStoreInfo->dwOpenEncodingType, 
            0, 
            pStoreInfo->dwOpenFlags, 
            pStoreInfo->OpenParameters.pbData);

        if (hStore) {
            _tprintf(_T("OK, opened a store\n"));
            if (CertCloseStore(hStore, 0)) {
                _tprintf(_T("Closed\n"));

            } else {
                _tprintf(_T("Failed to close\n"));
            }
        } else {
            _tprintf(_T("Failed to open\n"));
        }
    }    
};

}

Last modified: 1 Feb 2012

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