ReactOS 0.4.17-dev-470-gf9e3448
main.c
Go to the documentation of this file.
1/*
2 * Copyright 2002 Mike McCormack for CodeWeavers
3 * Copyright 2005 Juan Lang
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include <stdarg.h>
21#include <stdlib.h>
22#include <stdio.h>
23
24#include "windef.h"
25#include "winbase.h"
26#include "winternl.h"
27#include "wincrypt.h"
28#include "winreg.h"
29#include "winuser.h"
30#include "i_cryptasn1tls.h"
31#include "crypt32_private.h"
32#include "wine/debug.h"
33
35
38
41{
42 0, 0, &prov_param_cs,
45 0, 0, { (DWORD_PTR)(__FILE__ ": prov_param_cs") }
46};
47static CRITICAL_SECTION prov_param_cs = { &prov_param_cs_debug, -1, 0, 0, 0, 0 };
48
50{
51 switch (reason)
52 {
59 return FALSE;
61 break;
63 if (pvReserved) break;
69 break;
70 }
71 return TRUE;
72}
73
75{
76 if (!hDefProv)
77 {
78 HCRYPTPROV prov;
79
82 return hDefProv;
84 NULL);
85 if (hDefProv != prov)
86 CryptReleaseContext(prov, 0);
87 }
88 return hDefProv;
89}
90
91typedef void * HLRUCACHE;
92
93/* this function is called by Internet Explorer when it is about to verify a
94 * downloaded component. The first parameter appears to be a pointer to an
95 * unknown type, native fails unless it points to a buffer of at least 20 bytes.
96 * The second parameter appears to be an out parameter, whatever it's set to is
97 * passed (by cryptnet.dll) to I_CryptFlushLruCache.
98 */
100{
101 FIXME("(%p, %p): stub!\n", unknown, out);
102 *out = (void *)0xbaadf00d;
103 return TRUE;
104}
105
107{
108 FIXME("(%08lx, %08lx): stub!\n", unk0, unk1);
109 return FALSE;
110}
111
113{
114 FIXME("(%08lx, %08lx, %08lx): stub!\n", unk0, unk1, unk2);
115 return FALSE;
116}
117
119{
120 FIXME("(%p, %08lx, %08lx): stub!\n", h, unk0, unk1);
121 return FALSE;
122}
123
125{
126 FIXME("(%p, %08lx, %08lx): stub!\n", h, unk0, unk1);
127 return 0;
128}
129
131{
132 FIXME("(%p, %08lx, %08lx): stub!\n", h, unk0, unk1);
133 return h;
134}
135
137{
138 return malloc(cbSize);
139}
140
142{
143 return realloc(pv, cbSize);
144}
145
147{
148 free(pv);
149}
150
152{
153 return TlsAlloc();
154}
155
157{
158 LPVOID ret;
159
162 return ret;
163}
164
166{
167 return TlsGetValue(dwTlsIndex);
168}
169
171{
172 return TlsSetValue(dwTlsIndex, lpTlsValue);
173}
174
176{
177 BOOL ret;
178
179 TRACE("(%ld, %ld)\n", dwTlsIndex, unknown);
180
183 return ret;
184}
185
187{
188 FIXME("%08lx\n", x);
189 return FALSE;
190}
191
193{
194 PROV_ENUMALGS prov_algs;
195 DWORD size = sizeof(prov_algs);
196 BOOL ret = FALSE;
197
198 /* This enumeration is not thread safe */
200 if (CryptGetProvParam(prov, PP_ENUMALGS, (BYTE *)&prov_algs, &size, CRYPT_FIRST))
201 {
202 do
203 {
204 if (prov_algs.aiAlgid == algid)
205 {
206 ret = TRUE;
207 break;
208 }
209 } while (CryptGetProvParam(prov, PP_ENUMALGS, (BYTE *)&prov_algs, &size, CRYPT_NEXT));
210 }
212 return ret;
213}
214
216{
217 HCRYPTPROV prov, defprov;
218
219 TRACE("(%08x)\n", algid);
220
221 defprov = CRYPT_GetDefaultProvider();
222
223 if (algid && !is_supported_algid(defprov, algid))
224 {
225 DWORD i = 0, type, size;
226
227 while (CryptEnumProvidersW(i, NULL, 0, &type, NULL, &size))
228 {
230 if (name)
231 {
232 if (CryptEnumProvidersW(i, NULL, 0, &type, name, &size))
233 {
235 {
236 if (is_supported_algid(prov, algid))
237 {
239 return prov;
240 }
241 CryptReleaseContext(prov, 0);
242 }
243 }
245 }
246 i++;
247 }
248
250 return 0;
251 }
252
253 CryptContextAddRef(defprov, NULL, 0);
254 return defprov;
255}
256
258 DWORD *value)
259{
260 HKEY key;
261 LONG rc;
262 BOOL ret = FALSE;
263
264 TRACE("(%s, %p)\n", debugstr_w(name), value);
265
266 *value = 0;
267 rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, L"Software\\Policies\\Microsoft\\SystemCertificates\\TrustedPublisher\\Safer", &key);
268 if (rc == ERROR_SUCCESS)
269 {
270 DWORD size = sizeof(DWORD);
271
273 ret = TRUE;
275 }
276 return ret;
277}
278
280{
281 static int ret = 8;
282 ret++;
283 FIXME("%08lx %08lx %08lx, return value %d\n", x, y, z,ret);
284 return ret;
285}
286
288{
289 FIXME("(%p %08lx %p): stub\n", x, y, z);
290 return TRUE;
291}
292
294{
295 FIXME("(%08lx): stub\n", x);
296 return TRUE;
297}
298
300{
301 FIXME("(%08lx): stub\n", x);
302 return NULL;
303}
304
306{
307 FIXME("(%08lx): stub\n", x);
308 return NULL;
309}
310
312{
313 static int fixme_once;
314 if (!fixme_once++) FIXME("(%p %lu %08lx): stub\n", data, len, flags);
315 return TRUE;
316}
317
319{
320 static int fixme_once;
321 if (!fixme_once++) FIXME("(%p %lu %08lx): stub\n", data, len, flags);
322 return TRUE;
323}
#define DECLSPEC_HOTPATCH
Definition: _mingw.h:240
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
BOOL NTAPI DllMain(_In_ HINSTANCE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
Definition: main.c:33
#define FIXME(fmt,...)
Definition: precomp.h:53
#define RegCloseKey(hKey)
Definition: registry.h:49
HINSTANCE hInstance
Definition: charmap.c:19
void crypt_oid_init(void)
Definition: oid.c:1829
void crypt_oid_free(void)
Definition: oid.c:1835
#define CRYPT32_CALL(func, params)
void init_empty_store(void)
Definition: store.c:1505
void crypt_sip_free(void)
Definition: sip.c:578
#define E_INVALIDARG
Definition: ddrawi.h:101
#define realloc
Definition: debug_ros.c:6
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1201
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
Definition: crypt.c:641
BOOL WINAPI CryptContextAddRef(HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags)
Definition: crypt.c:615
BOOL WINAPI CryptEnumProvidersW(DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName)
Definition: crypt.c:1119
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
Definition: crypt.c:362
BOOL WINAPI CryptGetProvParam(HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
Definition: crypt.c:1667
void default_chain_engine_free(void)
Definition: chain.c:251
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
Definition: main.c:136
HCRYPTPROV WINAPI DECLSPEC_HOTPATCH I_CryptGetDefaultCryptProv(ALG_ID algid)
Definition: main.c:215
BOOL WINAPI I_CryptFindLruEntry(DWORD unk0, DWORD unk1)
Definition: main.c:106
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
Definition: main.c:141
BOOL WINAPI CryptProtectMemory(void *data, DWORD len, DWORD flags)
Definition: main.c:311
ASN1decoding_t WINAPI I_CryptGetAsn1Decoder(HCRYPTASN1MODULE x)
Definition: main.c:299
LPVOID WINAPI I_CryptGetTls(DWORD dwTlsIndex)
Definition: main.c:165
BOOL WINAPI I_CryptReadTrustedPublisherDWORDValueFromRegistry(LPCWSTR name, DWORD *value)
Definition: main.c:257
BOOL WINAPI I_CryptInstallAsn1Module(ASN1module_t x, DWORD y, void *z)
Definition: main.c:287
DWORD WINAPI I_CryptFlushLruCache(HLRUCACHE h, DWORD unk0, DWORD unk1)
Definition: main.c:124
BOOL WINAPI I_CryptFreeTls(DWORD dwTlsIndex, DWORD unknown)
Definition: main.c:175
DWORD WINAPI I_CryptAllocTls(void)
Definition: main.c:151
VOID WINAPI CryptMemFree(LPVOID pv)
Definition: main.c:146
LPVOID WINAPI I_CryptDetachTls(DWORD dwTlsIndex)
Definition: main.c:156
DWORD WINAPI I_CryptInstallOssGlobal(DWORD x, DWORD y, DWORD z)
Definition: main.c:279
static BOOL is_supported_algid(HCRYPTPROV prov, ALG_ID algid)
Definition: main.c:192
static CRITICAL_SECTION prov_param_cs
Definition: main.c:39
void * HLRUCACHE
Definition: main.c:91
HLRUCACHE WINAPI I_CryptFreeLruCache(HLRUCACHE h, DWORD unk0, DWORD unk1)
Definition: main.c:130
BOOL WINAPI I_CryptGetOssGlobal(DWORD x)
Definition: main.c:186
BOOL WINAPI I_CryptSetTls(DWORD dwTlsIndex, LPVOID lpTlsValue)
Definition: main.c:170
ASN1encoding_t WINAPI I_CryptGetAsn1Encoder(HCRYPTASN1MODULE x)
Definition: main.c:305
static CRITICAL_SECTION_DEBUG prov_param_cs_debug
Definition: main.c:40
BOOL WINAPI I_CryptUninstallAsn1Module(HCRYPTASN1MODULE x)
Definition: main.c:293
BOOL WINAPI I_CryptCreateLruCache(void *unknown, HLRUCACHE *out)
Definition: main.c:99
static HCRYPTPROV hDefProv
Definition: main.c:36
BOOL WINAPI I_CryptFindLruEntryData(DWORD unk0, DWORD unk1, DWORD unk2)
Definition: main.c:112
BOOL WINAPI I_CryptCreateLruEntry(HLRUCACHE h, DWORD unk0, DWORD unk1)
Definition: main.c:118
static HCRYPTPROV CRYPT_GetDefaultProvider(void)
Definition: main.c:74
BOOL WINAPI CryptUnprotectMemory(void *data, DWORD len, DWORD flags)
Definition: main.c:318
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1674
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1971
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define SetLastError(x)
Definition: compat.h:752
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
static void process_detach(void)
Definition: main.c:94
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
GLdouble GLdouble z
Definition: glext.h:5874
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
DWORD HCRYPTASN1MODULE
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define debugstr_w
Definition: kernel32.h:32
static LPCWSTR LPVOID pvReserved
Definition: asmcache.c:749
static DWORD unk1
Definition: cursoricon.c:1804
#define DWORD
Definition: nt_native.h:44
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define TRACE(s)
Definition: solgame.cpp:4
ALG_ID aiAlgid
Definition: wincrypt.h:70
Definition: copy.c:22
Definition: name.c:39
#define DWORD_PTR
Definition: treelist.c:76
const uint16_t * LPCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:96
static NTSTATUS process_attach(void *args)
Definition: unixlib.c:361
#define __wine_init_unix_call()
Definition: unixlib.h:13
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define CRYPT_VERIFYCONTEXT
Definition: wincrypt.h:2273
ULONG_PTR HCRYPTPROV
Definition: wincrypt.h:55
#define PROV_RSA_AES
Definition: wincrypt.h:2260
unsigned int ALG_ID
Definition: wincrypt.h:54
#define PP_ENUMALGS
Definition: wincrypt.h:2286
#define CRYPT_FIRST
Definition: wincrypt.h:2264
static const WCHAR MS_ENH_RSA_AES_PROV_W[]
Definition: wincrypt.h:2221
#define CRYPT_NEXT
Definition: wincrypt.h:2265
#define WINAPI
Definition: msvc.h:6
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
static DWORD dwTlsIndex
Definition: wintirpc.c:34
unsigned char BYTE
Definition: xxhash.c:193