/* * Copyright 2001 Rein Klazes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "windef.h" #include "winbase.h" #include "winerror.h" #include "winreg.h" #include "guiddef.h" #include "wintrust.h" #include "softpub.h" #include "mscat.h" #include "objbase.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(wintrust); /*********************************************************************** * DllMain (WINTRUST.@) */ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) { switch(reason) { case DLL_WINE_PREATTACH: return FALSE; /* prefer native version */ case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls( inst ); break; } return TRUE; } /*********************************************************************** * TrustIsCertificateSelfSigned (WINTRUST.@) */ BOOL WINAPI TrustIsCertificateSelfSigned( PCCERT_CONTEXT cert ) { BOOL ret; TRACE("%p\n", cert); ret = CertCompareCertificateName(cert->dwCertEncodingType, &cert->pCertInfo->Subject, &cert->pCertInfo->Issuer); return ret; } /*********************************************************************** * WinVerifyTrust (WINTRUST.@) * * Verifies an object by calling the specified trust provider. * * PARAMS * hwnd [I] Handle to a caller window. * ActionID [I] Pointer to a GUID that identifies the action to perform. * ActionData [I] Information used by the trust provider to verify the object. * * RETURNS * Success: Zero. * Failure: A TRUST_E_* error code. * * NOTES * Trust providers can be found at: * HKLM\SOFTWARE\Microsoft\Cryptography\Providers\Trust\ */ LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID, LPVOID ActionData ) { FIXME("%p %s %p\n", hwnd, debugstr_guid(ActionID), ActionData); return ERROR_SUCCESS; } /*********************************************************************** * WinVerifyTrustEx (WINTRUST.@) */ HRESULT WINAPI WinVerifyTrustEx( HWND hwnd, GUID *ActionID, WINTRUST_DATA* ActionData ) { FIXME("%p %s %p\n", hwnd, debugstr_guid(ActionID), ActionData); return S_OK; } /*********************************************************************** * WTHelperGetProvSignerFromChain (WINTRUST.@) */ CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain( CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner) { FIXME("%p %d %d %d\n", pProvData, idxSigner, fCounterSigner, idxCounterSigner); return NULL; } /*********************************************************************** * WTHelperProvDataFromStateData (WINTRUST.@) */ CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData) { FIXME("%p\n", hStateData); return NULL; } static const WCHAR Software_Publishing[] = { 'S','o','f','t','w','a','r','e','\\', 'M','i','c','r','o','s','o','f','t','\\', 'W','i','n','d','o','w','s','\\', 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\', 'W','i','n','t','r','u','s','t','\\', 'T','r','u','s','t',' ','P','r','o','v','i','d','e','r','s','\\', 'S','o','f','t','w','a','r','e',' ', 'P','u','b','l','i','s','h','i','n','g',0 }; static const WCHAR State[] = { 'S','t','a','t','e',0 }; /*********************************************************************** * WintrustGetRegPolicyFlags (WINTRUST.@) */ void WINAPI WintrustGetRegPolicyFlags( DWORD* pdwPolicyFlags ) { HKEY key; LONG r; TRACE("%p\n", pdwPolicyFlags); *pdwPolicyFlags = 0; r = RegCreateKeyExW(HKEY_CURRENT_USER, Software_Publishing, 0, NULL, 0, KEY_READ, NULL, &key, NULL); if (!r) { DWORD size = sizeof(DWORD); r = RegQueryValueExW(key, State, NULL, NULL, (LPBYTE)pdwPolicyFlags, &size); RegCloseKey(key); if (r) { /* Failed to query, create and return default value */ *pdwPolicyFlags = WTPF_IGNOREREVOCATIONONTS | WTPF_OFFLINEOKNBU_COM | WTPF_OFFLINEOKNBU_IND | WTPF_OFFLINEOK_COM | WTPF_OFFLINEOK_IND; WintrustSetRegPolicyFlags(*pdwPolicyFlags); } } } /*********************************************************************** * WintrustSetRegPolicyFlags (WINTRUST.@) */ BOOL WINAPI WintrustSetRegPolicyFlags( DWORD dwPolicyFlags) { HKEY key; LONG r; TRACE("%x\n", dwPolicyFlags); r = RegCreateKeyExW(HKEY_CURRENT_USER, Software_Publishing, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL); if (!r) { r = RegSetValueExW(key, State, 0, REG_DWORD, (LPBYTE)&dwPolicyFlags, sizeof(DWORD)); RegCloseKey(key); } if (r) SetLastError(r); return r == ERROR_SUCCESS; }