wintrust: Move mem alloc functions to wintrust_main.c.
[wine/testsucceed.git] / dlls / wintrust / wintrust_main.c
blob4b0c8ffdb6fde82cdac104f06c70ade206f10fd8
1 /*
2 * Copyright 2001 Rein Klazes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "config.h"
21 #include <stdarg.h>
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winerror.h"
26 #include "winreg.h"
27 #include "guiddef.h"
28 #include "wintrust.h"
29 #include "softpub.h"
30 #include "mscat.h"
31 #include "objbase.h"
32 #include "wintrust_priv.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
38 /***********************************************************************
39 * DllMain (WINTRUST.@)
41 BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
43 switch(reason)
45 case DLL_WINE_PREATTACH:
46 return FALSE; /* prefer native version */
47 case DLL_PROCESS_ATTACH:
48 DisableThreadLibraryCalls( inst );
49 break;
51 return TRUE;
54 /***********************************************************************
55 * TrustIsCertificateSelfSigned (WINTRUST.@)
57 BOOL WINAPI TrustIsCertificateSelfSigned( PCCERT_CONTEXT cert )
59 BOOL ret;
61 TRACE("%p\n", cert);
62 ret = CertCompareCertificateName(cert->dwCertEncodingType,
63 &cert->pCertInfo->Subject, &cert->pCertInfo->Issuer);
64 return ret;
67 /***********************************************************************
68 * WinVerifyTrust (WINTRUST.@)
70 * Verifies an object by calling the specified trust provider.
72 * PARAMS
73 * hwnd [I] Handle to a caller window.
74 * ActionID [I] Pointer to a GUID that identifies the action to perform.
75 * ActionData [I] Information used by the trust provider to verify the object.
77 * RETURNS
78 * Success: Zero.
79 * Failure: A TRUST_E_* error code.
81 * NOTES
82 * Trust providers can be found at:
83 * HKLM\SOFTWARE\Microsoft\Cryptography\Providers\Trust\
85 LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID, LPVOID ActionData )
87 FIXME("%p %s %p\n", hwnd, debugstr_guid(ActionID), ActionData);
88 return ERROR_SUCCESS;
91 /***********************************************************************
92 * WinVerifyTrustEx (WINTRUST.@)
94 HRESULT WINAPI WinVerifyTrustEx( HWND hwnd, GUID *ActionID,
95 WINTRUST_DATA* ActionData )
97 return WinVerifyTrust(hwnd, ActionID, ActionData);
100 /***********************************************************************
101 * WTHelperGetProvSignerFromChain (WINTRUST.@)
103 CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(
104 CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
105 DWORD idxCounterSigner)
107 CRYPT_PROVIDER_SGNR *sgnr;
109 TRACE("(%p %d %d %d)\n", pProvData, idxSigner, fCounterSigner,
110 idxCounterSigner);
112 if (idxSigner >= pProvData->csSigners || !pProvData->pasSigners)
113 return NULL;
114 sgnr = &pProvData->pasSigners[idxSigner];
115 if (fCounterSigner)
117 if (idxCounterSigner >= sgnr->csCounterSigners ||
118 !sgnr->pasCounterSigners)
119 return NULL;
120 sgnr = &sgnr->pasCounterSigners[idxCounterSigner];
122 TRACE("returning %p\n", sgnr);
123 return sgnr;
126 /***********************************************************************
127 * WTHelperGetProvCertFromChain (WINTRUST.@)
129 CRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain(
130 CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert)
132 CRYPT_PROVIDER_CERT *cert;
134 TRACE("(%p %d)\n", pSgnr, idxCert);
136 if (idxCert >= pSgnr->csCertChain || !pSgnr->pasCertChain)
137 return NULL;
138 cert = &pSgnr->pasCertChain[idxCert];
139 TRACE("returning %p\n", cert);
140 return cert;
143 /***********************************************************************
144 * WTHelperProvDataFromStateData (WINTRUST.@)
146 CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData)
148 TRACE("%p\n", hStateData);
149 return (CRYPT_PROVIDER_DATA *)hStateData;
152 static const WCHAR Software_Publishing[] = {
153 'S','o','f','t','w','a','r','e','\\',
154 'M','i','c','r','o','s','o','f','t','\\',
155 'W','i','n','d','o','w','s','\\',
156 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
157 'W','i','n','t','r','u','s','t','\\',
158 'T','r','u','s','t',' ','P','r','o','v','i','d','e','r','s','\\',
159 'S','o','f','t','w','a','r','e',' ',
160 'P','u','b','l','i','s','h','i','n','g',0 };
161 static const WCHAR State[] = { 'S','t','a','t','e',0 };
163 /***********************************************************************
164 * WintrustGetRegPolicyFlags (WINTRUST.@)
166 void WINAPI WintrustGetRegPolicyFlags( DWORD* pdwPolicyFlags )
168 HKEY key;
169 LONG r;
171 TRACE("%p\n", pdwPolicyFlags);
173 *pdwPolicyFlags = 0;
174 r = RegCreateKeyExW(HKEY_CURRENT_USER, Software_Publishing, 0, NULL, 0,
175 KEY_READ, NULL, &key, NULL);
176 if (!r)
178 DWORD size = sizeof(DWORD);
180 r = RegQueryValueExW(key, State, NULL, NULL, (LPBYTE)pdwPolicyFlags,
181 &size);
182 RegCloseKey(key);
183 if (r)
185 /* Failed to query, create and return default value */
186 *pdwPolicyFlags = WTPF_IGNOREREVOCATIONONTS |
187 WTPF_OFFLINEOKNBU_COM |
188 WTPF_OFFLINEOKNBU_IND |
189 WTPF_OFFLINEOK_COM |
190 WTPF_OFFLINEOK_IND;
191 WintrustSetRegPolicyFlags(*pdwPolicyFlags);
196 /***********************************************************************
197 * WintrustSetRegPolicyFlags (WINTRUST.@)
199 BOOL WINAPI WintrustSetRegPolicyFlags( DWORD dwPolicyFlags)
201 HKEY key;
202 LONG r;
204 TRACE("%x\n", dwPolicyFlags);
206 r = RegCreateKeyExW(HKEY_CURRENT_USER, Software_Publishing, 0,
207 NULL, 0, KEY_WRITE, NULL, &key, NULL);
208 if (!r)
210 r = RegSetValueExW(key, State, 0, REG_DWORD, (LPBYTE)&dwPolicyFlags,
211 sizeof(DWORD));
212 RegCloseKey(key);
214 if (r) SetLastError(r);
215 return r == ERROR_SUCCESS;
218 /* Utility functions */
219 void * WINAPI WINTRUST_Alloc(DWORD cb)
221 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cb);
224 void * WINAPI WINTRUST_ReAlloc(void *ptr, DWORD cb)
226 return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ptr, cb);
229 void WINAPI WINTRUST_Free(void *p)
231 HeapFree(GetProcessHeap(), 0, p);