43 sprintf(
str,
"{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
57 WCHAR szFullKey[ 0x100 ];
61 lstrcpyW( szFullKey,
L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptSIPDll" );
100#define CRYPT_SIPREMOVEPROV( key ) \
101 r = CRYPT_SIPDeleteFunction( pgProv, key); \
102 if (r != ERROR_SUCCESS) remove_error = r
112#undef CRYPT_SIPREMOVEPROV
132 WCHAR szFullKey[ 0x100 ];
140 lstrcpyW( szFullKey,
L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptSIPDll" );
185 TRACE(
"%p\n", psNewProv);
199 TRACE(
"%s %s %s %s %s\n",
206#define CRYPT_SIPADDPROV( key, field ) \
207 r = CRYPT_SIPWriteFunction( psNewProv->pgSubject, key, \
208 psNewProv->pwszDLLFileName, psNewProv->field); \
209 if (r != ERROR_SUCCESS) goto end_function
219#undef CRYPT_SIPADDPROV
242 size =
sizeof(dllName);
247 size =
sizeof(functionName);
291 static const GUID unknown = { 0xC689AAB8, 0x8E78, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
292 static const GUID cabGUID = { 0xc689aaba, 0x8e78, 0x11d0, {0x8c,0x47,0x00,0xc0,0x4f,0xc2,0x95,0xee }};
293 static const GUID catGUID = { 0xDE351A43, 0x8E59, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
295 static const BYTE cabHdr[] = {
'M',
'S',
'C',
'F' };
302 if (!pgSubject || (!
FileName && !hFileIn))
335 if (!
memcmp(
hdr, &dosHdr,
sizeof(dosHdr)))
343 if (!
memcmp(
hdr, cabHdr,
sizeof(cabHdr)))
355 TRACE(
"fileLen = %ld\n", fileLen);
357 if (
hdr[1] < 0x80 && fileLen == 2 +
hdr[1])
364 else if (
hdr[1] == 0x80)
378 if (lenBytes == 1 && fileLen == 2 + lenBytes +
hdr[2])
385 else if (lenBytes == 2 && fileLen == 2 + lenBytes +
393 else if (fileLen > 0xffff)
430 bRet = isMy(
hFile, pgSubject);
495 WCHAR szFullKey[ 0x100 ];
497 lstrcpyW(szFullKey,
L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptSIPDll");
539 0, 0, { (
DWORD_PTR)(__FILE__
": providers_cs") }
662 if (!pgSubject ||
dwFlags != 0 || !pSipDispatch)
689 TRACE(
"(%p %p %p)\n", pSubjectInfo, pcbIndirectData, pIndirectData);
691 if (!pSubjectInfo || !pSubjectInfo->
pgSubjectType || !pcbIndirectData)
697 ret = sip->
info.
pfCreate(pSubjectInfo, pcbIndirectData, pIndirectData);
711 TRACE(
"(%p %p %ld %p %p)\n", pSubjectInfo, pdwEncodingType, dwIndex,
712 pcbSignedDataMsg, pbSignedDataMsg);
715 ret = sip->
info.
pfGet(pSubjectInfo, pdwEncodingType, dwIndex,
716 pcbSignedDataMsg, pbSignedDataMsg);
730 TRACE(
"(%p %ld %p %ld %p)\n", pSubjectInfo, pdwEncodingType, pdwIndex,
731 cbSignedDataMsg, pbSignedDataMsg);
734 ret = sip->
info.
pfPut(pSubjectInfo, pdwEncodingType, pdwIndex,
735 cbSignedDataMsg, pbSignedDataMsg);
749 TRACE(
"(%p %ld)\n", pSubjectInfo, dwIndex);
766 TRACE(
"(%p %p)\n", pSubjectInfo, pIndirectData);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
static void CRYPT_guid2wstr(const GUID *guid, LPWSTR wstr)
BOOL WINAPI CryptSIPRemoveProvider(GUID *pgProv)
BOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo, DWORD pdwEncodingType, DWORD *pdwIndex, DWORD cbSignedDataMsg, BYTE *pbSignedDataMsg)
BOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR filename, HANDLE handle, GUID *subject)
#define CRYPT_SIPREMOVEPROV(key)
static struct list providers
static CRITICAL_SECTION providers_cs
static void * CRYPT_LoadSIPFuncFromKey(HKEY key, HMODULE *pLib)
static WINE_SIP_PROVIDER * CRYPT_GetCachedSIP(const GUID *pgSubject)
BOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo, DWORD dwIndex)
struct _WINE_SIP_PROVIDER WINE_SIP_PROVIDER
static BOOL CRYPT_IsSIPCached(const GUID *pgSubject)
static LONG CRYPT_SIPWriteFunction(const GUID *guid, LPCWSTR szKey, LPCWSTR szDll, LPCWSTR szFunction)
BOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR FileName, HANDLE hFileIn, GUID *pgSubject)
static LONG CRYPT_OpenSIPFunctionKey(const GUID *guid, LPCWSTR function, HKEY *key)
BOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo, DWORD *pdwEncodingType, DWORD dwIndex, DWORD *pcbSignedDataMsg, BYTE *pbSignedDataMsg)
BOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *pSubjectInfo, DWORD *pcbIndirectData, SIP_INDIRECT_DATA *pIndirectData)
static BOOL CRYPT_LoadSIP(const GUID *pgSubject)
#define CRYPT_SIPADDPROV(key, field)
static CRITICAL_SECTION_DEBUG providers_cs_debug
BOOL WINAPI CryptSIPLoad(const GUID *pgSubject, DWORD dwFlags, SIP_DISPATCH_INFO *pSipDispatch)
static void * CRYPT_LoadSIPFunc(const GUID *pgSubject, LPCWSTR function, HMODULE *pLib)
BOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *pSubjectInfo, SIP_INDIRECT_DATA *pIndirectData)
static LONG CRYPT_SIPDeleteFunction(const GUID *guid, LPCWSTR szKey)
BOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *psNewProv)
void crypt_sip_free(void)
static void CRYPT_CacheSIP(const GUID *pgSubject, SIP_DISPATCH_INFO *info)
#define ERROR_INVALID_PARAMETER
#define ReadFile(a, b, c, d, e)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
#define MultiByteToWideChar
static void cleanup(void)
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static const GUID catGUID
static const GUID cabGUID
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
BOOL(WINAPI * pfnIsFileSupportedName)(WCHAR *, GUID *)
BOOL(WINAPI * pfnIsFileSupported)(HANDLE, GUID *)
#define SIP_MAX_MAGIC_NUMBER
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define IMAGE_DOS_SIGNATURE
#define IsEqualGUID(rguid1, rguid2)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
WCHAR * pwszCreateFuncName
WCHAR * pwszRemoveFuncName
WCHAR * pwszIsFunctionName
WCHAR * pwszIsFunctionNameFmt2
WCHAR * pwszVerifyFuncName
pCryptSIPVerifyIndirectData pfVerify
pCryptSIPRemoveSignedDataMsg pfRemove
pCryptSIPGetSignedDataMsg pfGet
pCryptSIPPutSignedDataMsg pfPut
pCryptSIPCreateIndirectData pfCreate
LIST_ENTRY ProcessLocksList
#define FIELD_OFFSET(t, f)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define TRUST_E_SUBJECT_FORM_UNKNOWN
#define HKEY_LOCAL_MACHINE