Commit 5d4d5b16 authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

crypt32: More fully implement CryptSIPRetrieveSubjectGuid.

parent 7d78d394
...@@ -318,6 +318,9 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid ...@@ -318,6 +318,9 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid
static const WORD dosHdr = IMAGE_DOS_SIGNATURE; static const WORD dosHdr = IMAGE_DOS_SIGNATURE;
static const BYTE cabHdr[] = { 'M','S','C','F' }; static const BYTE cabHdr[] = { 'M','S','C','F' };
BYTE hdr[SIP_MAX_MAGIC_NUMBER]; BYTE hdr[SIP_MAX_MAGIC_NUMBER];
WCHAR szFullKey[ 0x100 ];
LONG r = ERROR_SUCCESS;
HKEY key;
TRACE("(%s %p %p)\n", wine_dbgstr_w(FileName), hFileIn, pgSubject); TRACE("(%s %p %p)\n", wine_dbgstr_w(FileName), hFileIn, pgSubject);
...@@ -369,16 +372,84 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid ...@@ -369,16 +372,84 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid
goto cleanup; goto cleanup;
} }
/* FIXME /* Check for supported functions using CryptSIPDllIsMyFileType */
* There is a lot more to be checked: /* max length of szFullKey depends on our code only, so we won't overrun */
* - Check for the keys CryptSIPDllIsMyFileType and CryptSIPDllIsMyFileType2 lstrcpyW(szFullKey, szOID);
* under HKLM\Software\Microsoft\Cryptography\OID\EncodingType 0. Here are lstrcatW(szFullKey, szIsMyFile);
* functions listed that need check if a SIP Provider can deal with the r = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szFullKey, 0, KEY_READ, &key);
* given file. if (r == ERROR_SUCCESS)
*/ {
DWORD index = 0, size;
WCHAR subKeyName[MAX_PATH];
do {
size = sizeof(subKeyName) / sizeof(subKeyName[0]);
r = RegEnumKeyExW(key, index++, subKeyName, &size, NULL, NULL,
NULL, NULL);
if (r == ERROR_SUCCESS)
{
HKEY subKey;
r = RegOpenKeyExW(key, subKeyName, 0, KEY_READ, &subKey);
if (r == ERROR_SUCCESS)
{
HMODULE lib;
pfnIsFileSupported isMy = CRYPT_LoadSIPFuncFromKey(subKey,
&lib);
if (isMy)
{
bRet = isMy(hFile, pgSubject);
FreeLibrary(lib);
}
RegCloseKey(subKey);
}
}
} while (!bRet && r == ERROR_SUCCESS);
RegCloseKey(key);
}
/* Let's set the most common error for now */ /* Check for supported functions using CryptSIPDllIsMyFileType2 */
SetLastError(TRUST_E_SUBJECT_FORM_UNKNOWN); if (!bRet)
{
lstrcpyW(szFullKey, szOID);
lstrcatW(szFullKey, szIsMyFile2);
r = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szFullKey, 0, KEY_READ, &key);
if (r == ERROR_SUCCESS)
{
DWORD index = 0, size;
WCHAR subKeyName[MAX_PATH];
do {
size = sizeof(subKeyName) / sizeof(subKeyName[0]);
r = RegEnumKeyExW(key, index++, subKeyName, &size, NULL, NULL,
NULL, NULL);
if (r == ERROR_SUCCESS)
{
HKEY subKey;
r = RegOpenKeyExW(key, subKeyName, 0, KEY_READ, &subKey);
if (r == ERROR_SUCCESS)
{
HMODULE lib;
pfnIsFileSupportedName isMy2 =
CRYPT_LoadSIPFuncFromKey(subKey, &lib);
if (isMy2)
{
bRet = isMy2((LPWSTR)FileName, pgSubject);
FreeLibrary(lib);
}
RegCloseKey(subKey);
}
}
} while (!bRet && r == ERROR_SUCCESS);
RegCloseKey(key);
}
}
if (!bRet)
SetLastError(TRUST_E_SUBJECT_FORM_UNKNOWN);
cleanup: cleanup:
/* If we didn't open this one we shouldn't close it (hFile is a copy), /* If we didn't open this one we shouldn't close it (hFile is a copy),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment