static BOOL SOFTPUB_LoadFileMessage(CRYPT_PROVIDER_DATA *data) { BOOL ret; if (!data->pWintrustData->u.pFile) { SetLastError(ERROR_INVALID_PARAMETER); ret = FALSE; goto error; } ret = SOFTPUB_OpenFile(data); if (!ret) goto error; ret = SOFTPUB_GetFileSubject(data); if (!ret) goto error; ret = SOFTPUB_GetSIP(data); if (!ret) goto error; ret = SOFTPUB_GetMessageFromFile(data, data->pWintrustData->u.pFile->hFile, data->pWintrustData->u.pFile->pcwszFilePath); if (!ret) goto error; ret = SOFTPUB_CreateStoreFromMessage(data); if (!ret) goto error; ret = SOFTPUB_DecodeInnerContent(data); error: return ret; }
static DWORD SOFTPUB_LoadCatalogMessage(CRYPT_PROVIDER_DATA *data) { DWORD err; HANDLE catalog = INVALID_HANDLE_VALUE; if (!data->pWintrustData->u.pCatalog) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } catalog = CreateFileW(data->pWintrustData->u.pCatalog->pcwszCatalogFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (catalog == INVALID_HANDLE_VALUE) return GetLastError(); if (!CryptSIPRetrieveSubjectGuid( data->pWintrustData->u.pCatalog->pcwszCatalogFilePath, catalog, &data->u.pPDSip->gSubject)) { err = GetLastError(); goto error; } err = SOFTPUB_GetSIP(data); if (err) goto error; err = SOFTPUB_GetMessageFromFile(data, catalog, data->pWintrustData->u.pCatalog->pcwszCatalogFilePath); if (err) goto error; err = SOFTPUB_CreateStoreFromMessage(data); if (err) goto error; err = SOFTPUB_DecodeInnerContent(data); /* FIXME: this loads the catalog file, but doesn't validate the member. */ error: CloseHandle(catalog); return err; }
static DWORD SOFTPUB_LoadFileMessage(CRYPT_PROVIDER_DATA *data) { DWORD err = ERROR_SUCCESS; if (!data->pWintrustData->u.pFile) { err = ERROR_INVALID_PARAMETER; goto error; } err = SOFTPUB_OpenFile(data); if (err) goto error; err = SOFTPUB_GetFileSubject(data); if (err) goto error; err = SOFTPUB_GetSIP(data); if (err) goto error; err = SOFTPUB_GetMessageFromFile(data, data->pWintrustData->u.pFile->hFile, data->pWintrustData->u.pFile->pcwszFilePath); if (err) goto error; err = SOFTPUB_CreateStoreFromMessage(data); if (err) goto error; err = SOFTPUB_DecodeInnerContent(data); error: if (err && data->fOpenedFile && data->pWintrustData->u.pFile) { /* The caller won't expect the file to be open on failure, so close it. */ CloseHandle(data->pWintrustData->u.pFile->hFile); data->pWintrustData->u.pFile->hFile = INVALID_HANDLE_VALUE; data->fOpenedFile = FALSE; } return err; }