|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: catutil.cpp
//
// Contents: catalog database common functions
//
// History: 01-may-2000 reidk created
//
//--------------------------------------------------------------------------
#include "global.hxx"
#include "catutil.h"
//---------------------------------------------------------------------------------------
//
// CatUtil_CreateCTLContextFromFileName
//
//---------------------------------------------------------------------------------------
BOOL CatUtil_CreateCTLContextFromFileName( LPCWSTR pwszFileName, HANDLE *phMappedFile, BYTE **ppbMappedFile, PCCTL_CONTEXT *ppCTLContext, BOOL fCreateSorted) { BOOL fRet = TRUE; HANDLE hFile = INVALID_HANDLE_VALUE; DWORD cbFile = 0; HANDLE hMappedFile = NULL; BYTE *pbMappedFile = NULL;
//
// Initialize out params
//
*phMappedFile = NULL; *ppbMappedFile = NULL; *ppCTLContext = NULL;
//
// Open the existing catalog file
//
hFile = CreateFileW( pwszFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { goto ErrorCreateFile; }
cbFile = GetFileSize(hFile, NULL); if (cbFile == 0xFFFFFFFF) { goto ErrorGetFileSize; }
hMappedFile = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (hMappedFile == NULL) { goto ErrorCreateFileMapping; } pbMappedFile = (BYTE *) MapViewOfFile( hMappedFile, FILE_MAP_READ, 0, 0, cbFile); if (pbMappedFile == NULL) { goto ErrorMapViewOfFile; }
//
// Don't need the file handle since we have a mapped file handle
//
CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE;
if (NULL == (*ppCTLContext = (PCCTL_CONTEXT) CertCreateContext( CERT_STORE_CTL_CONTEXT, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, pbMappedFile, cbFile, fCreateSorted ? CERT_CREATE_CONTEXT_NOCOPY_FLAG | CERT_CREATE_CONTEXT_SORTED_FLAG : CERT_CREATE_CONTEXT_NOCOPY_FLAG, NULL))) { goto ErrorCertCreateContect; }
*phMappedFile = hMappedFile; *ppbMappedFile = pbMappedFile;
CommonReturn:
if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); }
return fRet;
ErrorReturn:
if (pbMappedFile != NULL) { UnmapViewOfFile(pbMappedFile); }
if (hMappedFile != NULL) { CloseHandle(hMappedFile); }
fRet = FALSE; goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorCreateFile) TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorGetFileSize) TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorCreateFileMapping) TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMapViewOfFile) TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorCertCreateContect) }
|