//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1996 - 1999 // // File: initprov.cpp // // Contents: Microsoft Internet Security Authenticode Policy Provider // // Functions: SoftpubInitialize // // History: 05-Jun-1997 pberkman created // //-------------------------------------------------------------------------- #include "global.hxx" static char *pwszUsageOID = szOID_PKIX_KP_CODE_SIGNING; HRESULT WINAPI SoftpubInitialize(CRYPT_PROVIDER_DATA *pProvData) { if (!(pProvData->padwTrustStepErrors) || (pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_WVTINIT] != ERROR_SUCCESS)) { return(S_FALSE); } pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_INITPROV] = ERROR_SUCCESS; pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FILEIO] = ERROR_SUCCESS; if (!(_ISINSTRUCT(CRYPT_PROVIDER_DATA, pProvData->cbStruct, fRecallWithState)) || (!(pProvData->fRecallWithState))) { if (_ISINSTRUCT(CRYPT_PROVIDER_DATA, pProvData->cbStruct, pszUsageOID)) { pProvData->pszUsageOID = pwszUsageOID; } } // // for file type calls, make sure the file handle is valid -- open if necessary. // HANDLE *phFile; const WCHAR *pcwszFile; switch (pProvData->pWintrustData->dwUnionChoice) { case WTD_CHOICE_FILE: phFile = &pProvData->pWintrustData->pFile->hFile; pcwszFile = pProvData->pWintrustData->pFile->pcwszFilePath; break; case WTD_CHOICE_CATALOG: phFile = &pProvData->pWintrustData->pCatalog->hMemberFile; pcwszFile = pProvData->pWintrustData->pCatalog->pcwszMemberFilePath; break; case WTD_CHOICE_BLOB: pcwszFile = NULL; break; default: return(ERROR_SUCCESS); } if (!(pProvData->pPDSip)) { if (!(pProvData->pPDSip = (PROVDATA_SIP *)pProvData->psPfns->pfnAlloc(sizeof(PROVDATA_SIP)))) { pProvData->dwError = GetLastError(); pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_INITPROV] = TRUST_E_SYSTEM_ERROR; return(S_FALSE); } pProvData->dwSubjectChoice = CPD_CHOICE_SIP; memset(pProvData->pPDSip, 0x00, sizeof(PROVDATA_SIP)); pProvData->pPDSip->cbStruct = sizeof(PROVDATA_SIP); } if (pcwszFile) { // // we're looking at a file based object... // pProvData->fOpenedFile = FALSE; if (!(*phFile) || (*phFile == INVALID_HANDLE_VALUE)) { if ((*phFile = CreateFileU(pcwszFile, GENERIC_READ, FILE_SHARE_READ, // we're only reading! NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FILEIO] = GetLastError(); pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_INITPROV] = CRYPT_E_FILE_ERROR; } else { pProvData->fOpenedFile = TRUE; } } } return(ERROR_SUCCESS); }